/* ==========================================================================
   Reset & base
   ========================================================================== */
.se *,
.se *::before,
.se *::after {
	box-sizing: border-box;
}

/* Visually-hidden but accessible-to-AT utility. Used for <label>s on
   inputs that only show a placeholder (footer signup, My Trip / GPX /
   calculator email fields, search) so form controls have a real
   programmatic name -- fixes the Lighthouse "form elements do not have
   associated labels" audit without adding visible chrome. */
.se-sr-only {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* Sitewide safety net against horizontal overflow -- catches ANY future
   stray element (an image without max-width, a fixed-width table, an
   embedded widget whose container fix gets missed) that would otherwise
   force the whole page to scroll sideways on mobile. Applied to <html>,
   not <body>: <html> is already the document's real scrolling element, so
   this doesn't turn <body> into a second scroll container or interfere
   with .se-header's position:sticky (which sticks relative to that same
   root scroller either way). */
html {
	overflow-x: hidden;
}

/* Background texture is pre-composited onto the page's own cream colour at
   low opacity (see functions.php / se_bg_texture_id). Previously applied as
   background-attachment:fixed directly on .se (body) — reverted 2026-08-06:
   that technique has a real, reproducible Chromium/Safari bug where the
   fixed background visibly drifts relative to page content when the browser
   is zoomed to a non-100% level (confirmed by the user). Now rendered on a
   dedicated position:fixed div (.se-bg-fixed, inserted right after <body> in
   header.php) instead — an ordinary fixed-position element, not a
   background-attachment special case, which browsers handle far more
   reliably under zoom. z-index:-1 keeps it behind all normal content; no
   stacking-context tricks needed since it's the very first element in body
   and nothing before it establishes a competing context. */
.se {
	background-color: var(--se-bg);
	color: var(--se-text);
	font-family: var(--se-font-body);
	font-size: 17px;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
}

.se-bg-fixed {
	position: fixed;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image: var(--se-bg-texture-url, none);
	background-repeat: no-repeat;
	background-position: top center;
	/* 100vw, not a fixed px value (was 1920px) — a fixed pixel width means
	   the image can only ever exactly match a 1920px-wide viewport; at any
	   other effective viewport width (including whatever a non-100% browser
	   zoom level resolves to) it either falls short, revealing bare
	   --se-bg color at the sides, or overflows past what's cropped. 100vw
	   guarantees edge-to-edge coverage at any zoom level, closing off one
	   concrete mechanism by which zooming could visibly change the
	   background's apparent size/position relative to the page content. */
	background-size: 100vw auto;
}

@media (max-width: 782px) {
	/* position:fixed full-viewport layers are unreliable/janky on mobile
	   Safari (same reason the old background-attachment:fixed was dropped
	   there too) — fall back to a normal scrolling background painted
	   directly on body instead of the separate fixed layer. */
	.se-bg-fixed {
		display: none;
	}

	.se {
		background-image: var(--se-bg-texture-url, none);
		background-repeat: no-repeat;
		background-position: top center;
		background-size: 100vw auto;
	}
}

.se img {
	max-width: 100%;
	height: auto;
	display: block;
}

.se a {
	color: inherit;
	text-decoration: none;
}

.se h1, .se h2, .se h3, .se h4 {
	font-family: var(--se-font-display);
	font-weight: 600;
	line-height: 1.15;
	letter-spacing: -0.01em;
	margin: 0 0 var(--se-space-4);
	color: var(--se-text);
}

.se h1 { font-size: clamp(2.1rem, 1.6rem + 2vw, 3.4rem); font-weight: 600; }
.se h2 { font-size: clamp(1.5rem, 1.3rem + 1vw, 2.1rem); }
.se h3 { font-size: clamp(1.2rem, 1.1rem + 0.5vw, 1.5rem); }

/* ==========================================================================
   Layout primitives
   ========================================================================== */
.se-container {
	max-width: var(--se-container);
	margin-inline: auto;
	padding-inline: var(--se-space-5);
}

@media (min-width: 900px) {
	.se-container { padding-inline: var(--se-space-7); }
}

.se-section {
	padding-block: var(--se-space-8);
}

/* ==========================================================================
   Announcement bar — links to the Slovenia Trip Starter Kit lead magnet.
   Scrolls away with the page (not sticky); .se-header sticks at top:0 once
   scrolled past it, same as before this existed.
   ========================================================================== */
.se-announce {
	background: var(--se-primary);
	color: #fff;
}

.se-announce__inner {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: var(--se-space-3) var(--se-space-4);
	padding-block: var(--se-space-3);
	font-size: 0.95rem;
	text-align: center;
}

.se-announce__label {
	font-weight: 800;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	font-size: 0.72rem;
	padding: 0.25em 0.7em;
	border-radius: var(--se-radius-pill);
	background: rgba(255, 255, 255, 0.18);
	color: #fff;
}

.se-announce__text {
	color: rgba(255, 255, 255, 0.95);
	font-weight: 500;
}

/* Two-class selector: bare ".se a { color: inherit }" (0,1,1) would
   otherwise beat a single-class ".se-announce__link" (0,1,0) and the link
   would inherit white from its dark-background ancestor — same specificity
   bug class documented elsewhere in this file (.se-hero__img, .se-404
   title, .se-card--gem). */
.se-announce .se-announce__link {
	font-weight: 700;
	color: var(--se-primary);
	background: #fff;
	padding: 0.4em 1.1em;
	border-radius: var(--se-radius-pill);
	text-decoration: none;
	white-space: nowrap;
	transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}

.se-announce__link:hover {
	background: #fff;
	transform: translateY(-1px);
	box-shadow: 0 6px 16px rgba(0, 0, 0, 0.28);
}

@media (max-width: 560px) {
	.se-announce__text {
		display: none;
	}
	.se-announce__inner {
		padding-block: var(--se-space-2);
		font-size: 0.85rem;
	}
}

/* ==========================================================================
   Header / primary nav
   ========================================================================== */
.se-header {
	background: color-mix(in srgb, var(--se-bg) 92%, transparent);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-bottom: 1px solid var(--se-border);
	position: sticky;
	/* Stick below the WP admin bar (logged-in visitors only) instead of
	   overlapping it — WP exposes its live height as this custom property. */
	top: var(--wp-admin--admin-bar--height, 0px);
	z-index: 50;
	transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.se-header.is-hidden {
	transform: translateY(-100%);
}

.se-header.is-scrolled {
	box-shadow: var(--se-shadow-soft);
}

/*
 * display is intentionally NOT set here -- desktop (>=1440px) and mobile
 * (<1440px) use two genuinely different layout models (grid in both
 * cases, but different templates -- see each media query below), each
 * declaring its own `display`/`grid-template-columns` explicitly.
 *
 * History, because this took 4 real passes and the reasons matter for
 * whoever touches this next:
 * v1 centered the nav in whatever leftover space a grid column gave it
 * -- mathematically centered in that gap, but visually ~150px left of
 * the header's true center once the narrow logo (~61px) and wide utils
 * cluster (~370-430px) made that gap itself asymmetric.
 * v2 ("лого слева, меню+утилс занимает место между лого и правым
 * краем") isolated the logo at the true left edge and let nav+utils
 * flow together starting right after it -- fixed the asymmetry, but a
 * SEPARATE, pre-existing bug surfaced: logo+nav+utils' combined natural
 * width genuinely exceeds the viewport from ~1000px up to ~1350px on
 * longer-language content (DE). Patching that with ever-smaller fonts/
 * padding at ever-widening "danger zone" breakpoints (1150px, then
 * 1400px) kept needing another round after the next language broke it.
 * v3 gave up on incremental font/padding patches: the mobile/desktop
 * breakpoint itself moved from 1000px to 1400px (verified live against
 * all 7 languages with full-size content), and nav+utils were wrapped
 * in .se-header__nav-cluster, given flex:1 1 auto, and centered inside
 * it via justify-content:center -- looked right in isolation, but a
 * REAL bug surfaced on the very next live check: a flex item that's
 * itself flex:1 1 auto can be squeezed by the OUTER flex algorithm to
 * narrower than its OWN children's combined natural width, and
 * justify-content:center on the inner flex container does NOT prevent
 * that -- it just lets the centered content silently spill out past
 * the (too-narrow) container's own edges. Confirmed live on DE at
 * exactly 1400px: nav visibly overlapped the logo by ~36px, utils
 * overflowed past the bar's right edge by the same amount, and
 * document.documentElement.scrollWidth never caught it (no page-level
 * scrollbar formed, since the overflow was contained/symmetric, not
 * page-width) -- meaning this bug was invisible to every overflow check
 * used earlier in this whole investigation.
 * v4 switched the whole desktop layout from flex to CSS grid
 * (`1fr auto 1fr`, third column a hidden mirror-copy of the logo) so
 * .se-header__nav-cluster could never silently spill past its own
 * container the way v3's flex:1+justify-content:center did. That part
 * of the diagnosis was correct and is kept (grid, not flex) -- but the
 * mirror-column idea turned out to be solving the wrong problem. Direct
 * measurement right after deploying it showed .se-header__bar was
 * STILL overflowing at 1400px, and the real cause had nothing to do
 * with flex vs. grid: .se-header__bar carries the sitewide
 * `.se-container` class, which caps `max-width` at --se-container
 * (1180px) -- so no matter how wide the viewport grows, the bar itself
 * NEVER gets wider than 1180px of usable content space. Raising the
 * mobile/desktop breakpoint (999->1150->1400px) kept "fixing" it only
 * by accident, for whichever language happened to fit in 1180px at
 * that specific zoom of the moment -- it could never be a real, lasting
 * fix, since the ceiling never moved.
 * v5 (this one) fixes the actual ceiling instead of working around it,
 * and drops the mirror-column complexity now that it's not needed:
 * .se-header .se-header__bar overrides max-width to none on desktop, so
 * the bar can genuinely grow with the viewport instead of plateauing at
 * 1180px. With real room to grow, a plain two-column grid --
 * `auto 1fr` -- does exactly what was asked, literally: logo in column
 * 1 at its own natural width, .se-header__nav-cluster filling column 2
 * and centering itself (nav+utils, as one group) via
 * justify-content:center within THAT column -- i.e. centered in the
 * space between the logo and the true right edge, not mirrored around
 * the bar's own former center. A grid `1fr` track's base size still
 * can't be squeezed below the nav-cluster's own content the way v3's
 * flex sibling could, so the "silent overlap" failure mode v3 hit stays
 * fixed; the only overflow risk left is honest, visible page-scrollbar
 * overflow if a viewport is narrower than the breakpoint below, which
 * was raised to 1440px and reverified against real, un-capped layout.
 */
.se-header__bar {
	align-items: center;
	gap: var(--se-space-5);
	padding-block: var(--se-space-3);
}

/*
 * Wraps <nav class="se-nav"> and .se-header__utils (see header.php) --
 * see the .se-header__bar comment above for the full history of why.
 * display:contents on mobile (<1440px, the default here) removes this
 * wrapper from the box tree entirely -- its children behave as if they
 * were still direct children of .se-header__bar, so the existing mobile
 * grid rules (.se-nav's own position:absolute dropdown,
 * .se-header__utils's grid-column:3) keep working completely unchanged.
 * Desktop sizing (a real flex box holding nav+utils side by side, one
 * grid cell, centered within it) lives in the >=1440px block below.
 */
.se-header__nav-cluster {
	display: contents;
}

.se-header__logo {
	grid-column: 1;
	justify-self: start;
	font-family: var(--se-font-display);
	font-size: 1.35rem;
	font-weight: 600;
	color: var(--se-text);
	white-space: nowrap;
	display: flex;
	align-items: center;
}

.se-header__logo img {
	height: 61px; /* was 76px — reduced 20% per request */
	width: auto;
	max-width: none;
}

/*
 * Narrow phones only (not the general <1000px mobile-nav breakpoint,
 * which also covers tablets with plenty of spare width) — the header row
 * (logo + search + language selector + menu icon) has zero slack at
 * ~375px viewports without this, confirmed via getBoundingClientRect()
 * after adding the language selector (se-lang-select).
 */
@media (max-width: 480px) {
	.se-header__logo img {
		height: 42px;
	}
}

.se-header__utils {
	/* grid-column/justify-self (mobile's own positioning inside
	   .se-header__bar's grid) live in the mobile media query below --
	   on desktop this element is just a plain flex child inside
	   .se-header__nav-cluster, no special positioning needed. */
	position: relative;
	display: flex;
	align-items: center;
	gap: var(--se-space-2);
}

/*
 * Custom card-style dropdown, replacing a native <select> — the browser's
 * own <option> list can't be restyled cross-browser (no control over its
 * blue hover highlight, no border-radius/box-shadow), which is exactly
 * what read as "off-brand" here. Driven by the same checkbox-toggle
 * technique the search panel and mobile nav already use (see
 * .se-search__toggle-input / .se-nav__toggle-input above) — no JS.
 */
.se-lang-select {
	position: relative;
}

.se-lang-select__toggle-input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.se-lang-select__toggle {
	display: flex;
	align-items: center;
	gap: var(--se-space-2);
	height: 38px;
	padding: 0 var(--se-space-4);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-pill);
	background: var(--se-bg);
	color: var(--se-text);
	font: inherit;
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.02em;
	cursor: pointer;
	-webkit-user-select: none;
	user-select: none;
	transition: background-color 0.15s ease, border-color 0.15s ease;
}

.se-lang-select__toggle:hover {
	background-color: var(--se-accent-soft);
	border-color: var(--se-accent);
}

.se-lang-select__toggle-input:focus-visible ~ .se-lang-select__toggle {
	outline: 2px solid var(--se-accent);
	outline-offset: 2px;
}

.se-lang-select__current {
	white-space: nowrap;
}

/* Hidden by default — the full native name is what shows normally. */
.se-lang-select__current-code {
	display: none;
	white-space: nowrap;
}

/*
 * Narrow phones only (matches the .se-header__logo/.se-menu-toggle
 * breakpoint above): full native names ("Slovenščina", "Deutsch") make the
 * toggle button too wide for the header row at ~375px, so it collapses to
 * just the language code there — the dropdown panel itself always lists
 * full native names regardless of viewport.
 */
@media (max-width: 480px) {
	.se-lang-select__current {
		display: none;
	}

	.se-lang-select__current-code {
		display: inline;
	}

	.se-lang-select__toggle {
		padding: 0 var(--se-space-3);
	}
}

.se-lang-select__chevron {
	flex-shrink: 0;
	color: var(--se-text-muted);
	transition: transform 0.15s ease;
}

.se-lang-select__toggle-input:checked ~ .se-lang-select__toggle .se-lang-select__chevron {
	transform: rotate(180deg);
}

.se-lang-select__menu {
	display: none;
	position: absolute;
	top: calc(100% + var(--se-space-2));
	right: 0;
	min-width: 170px;
	margin: 0;
	padding: var(--se-space-2);
	list-style: none;
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm);
	box-shadow: var(--se-shadow-soft);
	z-index: 20;
}

.se-lang-select__toggle-input:checked ~ .se-lang-select__menu {
	display: block;
}

.se-lang-select__option {
	display: block;
	padding: var(--se-space-2) var(--se-space-3);
	border-radius: var(--se-radius-sm);
	font-size: 0.9rem;
	font-weight: 500;
	color: var(--se-text);
	transition: background-color 0.15s ease, color 0.15s ease;
}

.se-lang-select__option:hover,
.se-lang-select__option:focus-visible {
	background: var(--se-accent-soft);
	/* was var(--se-accent) on --se-accent-soft == ~3:1, fails WCAG.
	   --se-primary on the same pale bg is well over 4.5:1. */
	color: var(--se-primary);
	outline: none;
}

.se-lang-select__option.is-current {
	background: var(--se-accent-soft);
	color: var(--se-primary);
	font-weight: 700;
}

.se-header__search-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border-radius: var(--se-radius-pill);
	color: var(--se-text);
	cursor: pointer;
	-webkit-user-select: none;
	user-select: none;
	transition: background 0.15s ease;
}

.se-header__search-btn:hover {
	background: var(--se-bg-alt);
}

.se-search__toggle-input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.se-header__search-panel {
	display: none;
	position: absolute;
	top: calc(100% + var(--se-space-3));
	right: 0;
	min-width: 280px;
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm);
	box-shadow: var(--se-shadow-soft);
	padding: var(--se-space-3);
	z-index: 10;
}

#se-search-toggle:checked ~ .se-header__search-panel {
	display: block;
}

.se-header__search-panel .search-form {
	display: flex;
	gap: var(--se-space-2);
}

.se-header__search-panel input[type="search"] {
	flex: 1;
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm);
	padding: var(--se-space-2) var(--se-space-3);
	font: inherit;
	background: var(--se-bg);
	color: var(--se-text);
}

.se-header__search-panel button[type="submit"],
.se-header__search-panel input[type="submit"] {
	border: none;
	border-radius: var(--se-radius-sm);
	padding: var(--se-space-2) var(--se-space-4);
	background: var(--se-primary);
	color: var(--se-on-primary);
	font: inherit;
	font-weight: 600;
	cursor: pointer;
}

.se-header__search-panel label {
	flex: 1;
	display: flex;
}

/*
 * Nav is driven entirely by two checkbox "hacks" — no JS. #se-nav-toggle
 * opens/closes the whole mobile panel; each .se-nav__group-input opens one
 * group's submenu (mobile accordion). On desktop (>=1000px) the checkboxes
 * are irrelevant — groups reveal on hover/focus instead.
 */
.se-nav__toggle-input,
.se-nav__group-input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.se-nav__toggle-input:focus-visible ~ .se-menu-toggle,
.se-nav__group-input:focus-visible ~ .se-nav__toggle {
	outline: 2px solid var(--se-accent);
	outline-offset: 2px;
}

.se-nav {
	display: none;
	grid-column: 2;
}

.se-nav__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.se-nav__item {
	position: relative;
}

.se-nav__toggle {
	font: inherit;
	font-size: 0.95rem;
	font-weight: 600;
	color: var(--se-text);
	cursor: pointer;
	-webkit-user-select: none;
	user-select: none;
	white-space: nowrap;
}

.se-nav__panel {
	display: none;
	flex-direction: column;
	gap: var(--se-space-1);
}

.se-nav__panel a {
	padding: var(--se-space-2) var(--se-space-3);
	border-radius: var(--se-radius-sm);
	font-size: 0.95rem;
}

.se-nav__panel a:hover {
	background: var(--se-bg-alt);
}

.se-menu-toggle {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	background: none;
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-pill);
	color: var(--se-text);
	cursor: pointer;
	-webkit-user-select: none;
	user-select: none;
	transition: background 0.15s ease;
}

.se-menu-toggle:hover {
	background: var(--se-bg-alt);
}

/* Mobile (<1440px): full-width dropdown panel + accordion groups. Lower
   bound raised from 999px -- see the long v1-v5 comment above
   .se-header__bar for the full history; short version: the earlier
   overflow-chasing was patching the wrong thing (font-size, then the
   breakpoint) because the real ceiling was .se-header__bar's own
   max-width, capped sitewide by the .se-container class it also
   carries. Desktop now overrides that cap directly, so the breakpoint
   here only needs to cover the width where logo+cluster genuinely
   can't fit even with the cap removed -- verified live, not guessed. */
@media (max-width: 1439px) {
	/* Hamburger used to live at the end of .se-header__utils, on the right,
	   where it got lost next to the language selector, search icon and
	   (soon) the trip-planner icon all crowding the same corner -- moved by
	   direct request to its own track at the true left edge, with the logo
	   re-centered between it and the utils cluster. Desktop is untouched
	   (three tracks stay 1fr/auto/1fr, .se-menu-toggle stays display:none).
	   These three rules MUST stay in this later block, not a standalone
	   one placed earlier in the file -- media queries don't add
	   specificity, so at equal specificity the later source-order
	   declaration wins regardless of which one is conditional; putting an
	   override any earlier than the unconditional .se-header__logo/
	   .se-menu-toggle rules above just loses to them silently. */
	.se-header__bar {
		display: grid;
		grid-template-columns: auto 1fr auto;
	}

	.se-menu-toggle {
		grid-column: 1;
		justify-self: start;
	}

	.se-header__logo {
		grid-column: 2;
		justify-self: center;
	}

	/* Base .se-header__utils no longer sets grid-column/justify-self
	   (desktop uses margin-left:auto in its own flex row instead, see the
	   >=1000px block) -- mobile needs its own explicit positioning now. */
	.se-header__utils {
		grid-column: 3;
		justify-self: end;
	}

	.se-nav {
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		background: var(--se-surface);
		border-bottom: 1px solid var(--se-border);
		box-shadow: var(--se-shadow-soft);
		max-height: calc(100vh - 60px);
		overflow-y: auto;
	}

	/* #se-nav-toggle is a sibling of .se-header__nav-cluster now (header.php
	   wraps nav+utils together, 2026-08-28 -- see the wrapper's own CSS
	   comment above), not of .se-nav directly anymore -- the checkbox hack
	   needs a descendant combinator to reach through the wrapper.
	   display:contents on the wrapper only affects box generation/layout,
	   it does NOT change the real DOM tree that CSS selectors match
	   against, so the old plain "~ .se-nav" silently stopped matching
	   anything the moment the wrapper was introduced -- caught live: the
	   hamburger toggle visibly stopped opening the mobile menu at all. */
	#se-nav-toggle:checked ~ .se-header__nav-cluster .se-nav {
		display: block;
	}

	.se-nav__list {
		display: flex;
		flex-direction: column;
		padding: var(--se-space-3) var(--se-space-5);
	}

	.se-nav__item {
		border-bottom: 1px solid var(--se-border);
	}

	.se-nav__item:last-child {
		border-bottom: none;
	}

	.se-nav__toggle {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
		padding: var(--se-space-4) 0;
	}

	.se-nav__toggle::after {
		content: '+';
		color: var(--se-text-muted);
	}

	.se-nav__group-input:checked ~ .se-nav__toggle::after {
		content: '\2212';
	}

	.se-nav__panel {
		padding-bottom: var(--se-space-3);
	}

	.se-nav__group-input:checked ~ .se-nav__panel {
		display: flex;
	}

	/* The icon+dropdown search pattern in .se-header__utils is desktop-only
	   now -- on mobile the search field lives inline at the bottom of this
	   same accordion instead (.se-nav__search below), so both the trigger
	   and its floating panel are hidden here to avoid a second, redundant
	   (and mispositioned, since its :absolute anchor is .se-header__utils,
	   not .se-nav) way to search. */
	.se-header__search-btn,
	.se-header__search-panel {
		display: none;
	}

	.se-nav__search {
		display: block;
		padding: var(--se-space-4) var(--se-space-5);
		border-top: 1px solid var(--se-border);
	}

	.se-nav__search .search-form {
		display: flex;
		gap: var(--se-space-2);
	}

	.se-nav__search input[type="search"] {
		flex: 1;
		min-width: 0;
		border: 1px solid var(--se-border);
		border-radius: var(--se-radius-sm);
		padding: var(--se-space-2) var(--se-space-3);
		font: inherit;
		background: var(--se-bg);
		color: var(--se-text);
	}

	.se-nav__search button[type="submit"],
	.se-nav__search input[type="submit"] {
		border: none;
		border-radius: var(--se-radius-sm);
		padding: var(--se-space-2) var(--se-space-4);
		background: var(--se-primary);
		color: var(--se-on-primary);
		font: inherit;
		font-weight: 600;
		white-space: nowrap;
		cursor: pointer;
	}
}

/* Desktop (>=1440px): flat bar with hover-reveal dropdowns, checkboxes
   unused. Raised from 1000px -- see the long v1-v5 comment above
   .se-header__bar for the full history; below this width the mobile
   hamburger layout runs instead of a nav that would overflow the page,
   even with the max-width cap below removed. */
@media (min-width: 1440px) {
	.se-menu-toggle {
		display: none;
	}

	/* Same cascade-order trap as .se-header__logo/.se-menu-toggle above --
	   this MUST stay in this later block, not a standalone rule placed
	   before it, or the earlier (max-width: 1439px) block's display:block
	   silently loses to source order regardless of which query matches. */
	.se-nav__search {
		display: none;
	}

	/* logo (col 1, its own natural width) -- .se-header__nav-cluster
	   (col 2, 1fr, holding nav+utils side by side and centering that
	   group within itself) -- see the class comment above
	   .se-header__bar for the full v1-v5 history of why this two-column
	   grid replaced the earlier attempts. */
	.se-header__bar {
		display: grid;
		grid-template-columns: auto 1fr;
		align-items: center;
	}

	/* Two separate things, both direct requests: (a) pull the header
	   row's own left/right margin in from the page's normal content
	   padding (--se-space-7, 48px) so the logo sits close to the true
	   screen edge; (b) uncap max-width entirely -- .se-header__bar also
	   carries the sitewide .se-container class, whose max-width:1180px
	   was the ACTUAL reason nav+utils kept not fitting no matter how
	   high the breakpoint got raised (v1-v4 never caught this: raising
	   the breakpoint just meant "the viewport is now wide enough that
	   .se-container's own 1180px cap is reached with room to spare",
	   which only worked for languages short enough to fit in that fixed
	   1180px -- it could never be a lasting fix for a genuinely wider
	   language, since the cap never moved). With the cap gone the bar
	   can keep growing with the viewport like the rest of the page
	   can't (by design -- this is the one sitewide exception).
	   .se-header .se-header__bar (0,2,0) deliberately beats the bare
	   .se-container rule (0,1,0) regardless of file order -- this
	   project has been bitten by that exact class of bug too many times
	   to rely on source order here. */
	.se-header .se-header__bar {
		/* --se-space-6 (32px), doubled from --se-space-4 (16px) by direct
		   request -- the logo read as sitting too close to the true edge
		   at 16px. gap is kept equal to padding-inline (both --se-space-6
		   now, not just both --se-space-4) so the centering symmetry fix
		   below doesn't quietly break again -- see that comment for why
		   they need to match. */
		padding-inline: var(--se-space-6);
		max-width: none;
		/* Matches the base gap between grid columns (logo | nav-cluster) to
		   this same padding-inline value -- otherwise the base rule's own
		   --se-space-5 (24px) gap on the cluster's left vs. a DIFFERENT
		   padding value on the bar's right throws the centering off by the
		   difference between them (confirmed by direct measurement when
		   these two didn't match: nav sat 86px right of the logo, utils
		   sat only 78px left of the bar's edge -- close, but not the
		   literal centering asked for). */
		gap: var(--se-space-6);
	}

	.se-header__logo {
		grid-column: 1;
		justify-self: start;
	}

	/* Real box again at this width (was display:contents on mobile) --
	   fills column 2 (1fr) and centers its own two children (nav,
	   utils) as one group WITHIN that column via justify-content:center
	   -- i.e. centered in the space between the logo and the true right
	   edge, exactly the literal, repeated request ("меню между лого и
	   правым краем посередине со всеми пилюлями"), not mirrored around
	   the bar's own former center (that was v4's now-abandoned idea).
	   A grid `1fr` track's base size still can't be squeezed narrower
	   than this flex child's own content the way v3's flex:1 sibling
	   could -- that's what actually prevents the silent nav/logo
	   overlap v3 hit, and grid is kept for exactly that reason even
	   though the mirror column itself turned out to be unnecessary. */
	.se-header__nav-cluster {
		grid-column: 2;
		display: flex;
		align-items: center;
		justify-content: center;
		gap: var(--se-space-5);
		min-width: 0;
	}

	.se-nav {
		display: flex;
		align-items: center;
	}

	.se-nav__list {
		display: flex;
		align-items: center;
		gap: var(--se-space-2);
	}

	.se-nav__toggle {
		padding: var(--se-space-3) var(--se-space-4);
	}

	label.se-nav__toggle {
		display: inline-flex;
		align-items: center;
		gap: 6px;
	}

	label.se-nav__toggle::after {
		content: '';
		width: 6px;
		height: 6px;
		border-right: 1.5px solid currentColor;
		border-bottom: 1.5px solid currentColor;
		transform: rotate(45deg);
		margin-top: -4px;
		opacity: 0.55;
		transition: transform 0.15s ease;
	}

	.se-nav__item:hover label.se-nav__toggle::after,
	.se-nav__item:focus-within label.se-nav__toggle::after {
		transform: rotate(-135deg);
		margin-top: 2px;
	}

	.se-nav__panel {
		position: absolute;
		top: 100%;
		left: 0;
		min-width: 220px;
		background: var(--se-surface);
		border: 1px solid var(--se-border);
		border-radius: var(--se-radius-sm);
		box-shadow: var(--se-shadow-soft);
		padding: var(--se-space-3);
	}

	.se-nav__item:hover .se-nav__panel,
	.se-nav__item:focus-within .se-nav__panel {
		display: flex;
	}
}

/* ==========================================================================
   Buttons & tags
   ========================================================================== */
/* Sitewide button rule (2026-08-06, explicit user instruction, applies
   everywhere — pages, articles, affiliate CTAs in blog content): never a
   solid dark-brown fill. Black outline at rest, a slightly darker fill plus
   a soft glow on hover. Does NOT touch .se-button--outline below, which is
   the separate white/transparent variant used on top of dark hero photos
   (front-page.php) — that one was never brown and stays as-is. */
.se-button {
	display: inline-flex;
	align-items: center;
	gap: var(--se-space-2);
	background: transparent;
	color: var(--se-text);
	font-weight: 600;
	font-size: 0.95rem;
	letter-spacing: 0.01em;
	padding: var(--se-space-3) var(--se-space-5);
	border-radius: var(--se-radius-pill);
	border: 1.5px solid var(--se-text);
	transition: background-color 0.15s ease, box-shadow 0.15s ease;
}

.se-button:hover {
	background: var(--se-bg-alt);
	box-shadow: 0 0 0 4px rgba(42, 36, 28, 0.1);
}

.se-tag {
	display: inline-flex;
	align-items: center;
	gap: var(--se-space-1);
	background: var(--se-accent-soft);
	color: var(--se-accent);
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	padding: var(--se-space-1) var(--se-space-3);
	border-radius: var(--se-radius-pill);
}

.se-difficulty {
	background: var(--se-accent-soft);
	color: var(--se-accent);
}
.se-difficulty--easy { background: color-mix(in srgb, var(--se-difficulty-easy) 16%, white); color: var(--se-difficulty-easy); }
.se-difficulty--moderate { background: color-mix(in srgb, var(--se-difficulty-moderate) 16%, white); color: var(--se-difficulty-moderate); }
.se-difficulty--hard { background: color-mix(in srgb, var(--se-difficulty-hard) 16%, white); color: var(--se-difficulty-hard); }

/* ==========================================================================
   Article hero
   ========================================================================== */
.se-hero {
	position: relative;
	width: 100%;
	aspect-ratio: 16 / 9;
	min-height: 320px;
	max-height: 720px;
	margin-top: var(--se-space-6);
	display: flex;
	align-items: flex-end;
	color: #fff;
	overflow: hidden;
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-card);
}

/* Two-class selector deliberately out-specifies the sitewide
   ".se img { height: auto }" reset (specificity 0,1,1 beats plain
   .se-hero__img's 0,1,0) — without it the img fell back to its own
   intrinsic aspect ratio instead of filling the card (confirmed via
   computed styles: rendered ~610px tall inside a 460px-tall card),
   silently reducing how much object-position actually had to crop.
   Same root-cause bug as .se-hub-hero__img above. */
.se-hero .se-hero__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
}

.se-hero::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20, 17, 12, 0) 45%, rgba(20, 17, 12, 0.78) 100%);
}

.se-hero__content {
	position: relative;
	z-index: 1;
	padding: var(--se-space-6);
	width: 100%;
}

.se-hero .se-tag {
	background: rgba(255, 255, 255, 0.16);
	color: #fff;
	backdrop-filter: blur(4px);
	margin-bottom: var(--se-space-3);
}

.se-hero h1 {
	color: #fff;
	max-width: 850px;
	font-size: clamp(1.7rem, 1.3rem + 1.8vw, 2.7rem);
}

.se-hero__subtitle {
	color: rgba(255, 255, 255, 0.92);
	max-width: 620px;
	margin-top: var(--se-space-2);
	font-size: clamp(0.95rem, 0.85rem + 0.4vw, 1.1rem);
	line-height: 1.5;
}

/* Mobile hero: title moves BELOW a clean, uncovered photo instead of
   overlaying it -- on narrow screens the text-over-photo treatment above
   left the title illegible against busy/bright parts of the image on most
   articles. Two other bugs fixed at the same time, both real: (1) the
   16/9 aspect-ratio above was silently overridden by min-height:320px on
   narrow viewports (327px-wide content * 9/16 ≈ 184px, so the 320px floor
   won every time), rendering the hero near-square instead of 16:9; (2) the
   hero is now full-bleed edge-to-edge with square corners specifically SO
   it reads as visually distinct from the rounded, contained photos used
   everywhere else in the article body -- not an oversight, the deliberate
   point of the exercise. */
@media (max-width: 749px) {
	.se-hero {
		flex-direction: column;
		align-items: stretch;
		/* aspect-ratio:auto is load-bearing, not redundant -- the base
		   (non-media) rule sets aspect-ratio:16/9 on .se-hero itself, and
		   this block never reset it, so it stayed in force here too. With
		   overflow:hidden also inherited from that base rule, the whole
		   flex box (photo + text stacked) was being clamped to the PHOTO'S
		   own 16:9 height alone -- the photo's own 16:9 filled that entire
		   budget, leaving .se-hero__content nowhere to go but clipped off
		   below the visible box. The title still existed in the DOM with
		   correct text/color (confirmed live via getBoundingClientRect --
		   it just landed at a y-position entirely past .se-hero's own
		   clipped bottom edge), so it silently rendered as nothing:
		   reported as "title just... empty" by direct testing. */
		aspect-ratio: auto;
		height: auto;
		min-height: 0;
		max-height: none;
		margin-top: 0;
		border-radius: 0;
		box-shadow: none;
		/* Break out of the parent .se-container's inline padding to go
		   edge-to-edge -- the container is full viewport width on mobile
		   (its max-width only matters on wider screens), so negating
		   exactly its own padding-inline is precise and avoids the
		   scrollbar-width pitfalls of a 100vw-based full-bleed trick. */
		width: calc(100% + 2 * var(--se-space-5));
		margin-left: calc(-1 * var(--se-space-5));
		margin-right: calc(-1 * var(--se-space-5));
	}

	.se-hero .se-hero__img {
		position: static;
		width: 100%;
		height: auto;
		aspect-ratio: 16 / 9;
	}

	.se-hero::after {
		content: none;
	}

	.se-hero__content {
		padding: var(--se-space-5);
	}

	.se-hero .se-tag {
		background: var(--se-accent-soft);
		color: var(--se-primary);
		backdrop-filter: none;
	}

	.se-hero h1 {
		color: var(--se-text);
	}

	.se-hero__subtitle {
		color: var(--se-text-muted);
	}
}

/* ==========================================================================
   Hub intro box — compact centered text block below the hero, above the
   grid/map. Only rendered when the page has intro text set.
   ========================================================================== */
.se-hub-intro {
	max-width: var(--se-container-narrow);
	margin: var(--se-space-7) auto var(--se-space-6);
	text-align: center;
}

.se-hub-intro__heading {
	margin: 0 0 var(--se-space-3);
}

.se-hub-intro__text {
	margin: 0;
	color: var(--se-text-muted);
	font-size: 1rem;
	line-height: 1.65;
	white-space: pre-line;
}

/* ==========================================================================
   Hub grid/map section header
   ========================================================================== */
.se-hub-grid-header {
	max-width: var(--se-container-narrow);
	margin: 0 0 var(--se-space-5);
}

.se-hub-grid-header__text {
	margin: var(--se-space-1) 0 0;
	color: var(--se-text-muted);
}

/* ==========================================================================
   Regions-of-Slovenia hub: 4-region card grid + "Continue exploring" links.
   One-off components, only rendered on that page (see page-hub.php) — the
   original theme's se-regions-grid / se-continue-links sections.
   ========================================================================== */
.se-regions-grid {
	margin-top: var(--se-space-7);
}

.se-regions-grid__header {
	text-align: center;
	margin-bottom: var(--se-space-6);
}

.se-regions-grid__subheading {
	max-width: 48rem;
	margin: var(--se-space-2) auto 0;
	color: var(--se-text-muted);
}

.se-regions-grid__grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--se-space-6);
}

@media (max-width: 749px) {
	.se-regions-grid__grid {
		grid-template-columns: 1fr;
	}
}

.se-regions-card {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: 260px;
	padding: var(--se-space-6);
	border-radius: var(--se-radius-card);
	overflow: hidden;
	color: #fff;
	isolation: isolate;
	transition: transform 0.22s ease, box-shadow 0.22s ease;
}

.se-regions-card__image {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	background-repeat: no-repeat;
	filter: sepia(0.35) saturate(0.85) brightness(0.95) contrast(0.95);
	transform: scale(1.03);
	z-index: -2;
	transition: transform 0.28s ease, filter 0.28s ease;
}

.se-regions-card__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(58, 42, 26, 0.12) 0%, rgba(40, 28, 16, 0.62) 100%);
	z-index: -1;
}

.se-regions-card__content {
	max-width: 26rem;
}

/* Two-class selectors here (not just .se-regions-card__title) deliberately
   out-specificity the sitewide ".se h3 { color: var(--se-text) }" heading
   reset — without it the dark heading color won it silently, making titles
   nearly invisible against the card's own dark photo overlay. */
.se-regions-card .se-regions-card__title {
	margin: 0 0 var(--se-space-2);
	font-size: 15px;
	font-weight: 600;
	color: #fff;
}

.se-regions-card .se-regions-card__text {
	margin: 0;
	font-size: 0.95rem;
	line-height: 1.5;
	color: rgba(255, 255, 255, 0.9);
}

.se-regions-card .se-regions-card__link {
	display: inline-flex;
	align-items: center;
	gap: var(--se-space-1);
	margin-top: var(--se-space-4);
	font-size: 0.95rem;
	font-weight: 600;
	color: #fff;
}

.se-regions-card:hover {
	transform: translateY(-3px);
	box-shadow: var(--se-shadow-card);
}

.se-regions-card:hover .se-regions-card__image {
	transform: scale(1.08);
	filter: sepia(0.35) saturate(0.9) brightness(1) contrast(0.98);
}

/* ------------------------------------------------------------------------
   .se-xlinks — sitewide hub cross-link cards ("Keep reading"): a centred
   grid of mini-thumbnail cards. Replaces the old plain .se-continue-links
   card list on every hub. Rendered by se_render_hub_xlinks() in page-hub.php.
   ------------------------------------------------------------------------ */
.se-xlinks {
	max-width: var(--se-container);
	margin: var(--se-space-7, 3rem) auto 0;
}
.se-xlinks__h {
	font-size: .72rem;
	font-weight: 700;
	letter-spacing: .2em;
	text-transform: uppercase;
	color: var(--se-accent);
	margin: 0 0 .5rem;
	text-align: center;
}
.se-xlinks__sub {
	max-width: 42rem;
	margin: 0 auto 1.5rem;
	text-align: center;
	font-size: .92rem;
	line-height: 1.5;
	color: color-mix(in srgb, var(--se-text) 62%, transparent);
}
.se-xlinks__h:last-child { margin-bottom: 1.3rem; }
.se-xlinks__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(300px, 380px));
	justify-content: center;
	gap: .9rem;
}
.se-xlinks__card {
	display: flex;
	align-items: center;
	gap: .95rem;
	padding: .75rem .95rem .75rem .75rem;
	background: var(--se-surface);
	border: 1px solid color-mix(in srgb, var(--se-text) 11%, transparent);
	border-radius: var(--se-radius-md, 12px);
	text-decoration: none;
	box-shadow: 0 1px 2px color-mix(in srgb, var(--se-text) 5%, transparent);
	transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
.se-xlinks__card:hover {
	transform: translateY(-2px);
	border-color: color-mix(in srgb, var(--se-accent) 55%, transparent);
	box-shadow: 0 16px 30px -20px color-mix(in srgb, var(--se-text) 50%, transparent);
}
.se-xlinks__thumb {
	flex: 0 0 auto;
	width: 62px;
	height: 62px;
	border-radius: var(--se-radius-sm, 8px);
	overflow: hidden;
	background: var(--se-surface-warm);
}
.se-xlinks__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform .4s cubic-bezier(.2,.6,.2,1);
}
.se-xlinks__card:hover .se-xlinks__thumb img { transform: scale(1.07); }
.se-xlinks__body { flex: 1 1 auto; min-width: 0; }
.se-xlinks__k {
	display: block;
	font-weight: 700;
	font-size: .96rem;
	line-height: 1.25;
	color: var(--se-text);
	margin-bottom: .18rem;
}
.se-xlinks__v {
	display: block;
	font-size: .82rem;
	line-height: 1.4;
	color: color-mix(in srgb, var(--se-text) 58%, transparent);
}
.se-xlinks__arrow {
	flex: 0 0 auto;
	color: color-mix(in srgb, var(--se-text) 35%, transparent);
	font-size: 1.05rem;
	transition: transform .25s ease, color .25s ease;
}
.se-xlinks__card:hover .se-xlinks__arrow {
	transform: translateX(3px);
	color: var(--se-accent);
}
@media (max-width: 640px) {
	.se-xlinks__grid { grid-template-columns: 1fr; }
}

.se-continue-links {
	margin-top: var(--se-space-8);
	text-align: center;
}

.se-continue-links__heading {
	margin: 0 0 var(--se-space-2);
}

.se-continue-links__subtext {
	max-width: 42rem;
	margin: 0 auto var(--se-space-6);
	color: var(--se-text-muted);
}

.se-continue-links__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--se-space-4);
	text-align: left;
}

/* --cross modifier (page-hub.php's hub_combine_map cross-links, added on
   this one grid only): every one of the 9 hubs that uses this block has
   exactly 5 links. The base rule above is a CSS grid, which computes ONE
   column count for the WHOLE container and reuses it on every row -- at
   a width where 4 columns fit, 5 items put a single lonely card alone in
   row 2's first column with 3 dead grid cells beside it (flagged
   directly: "расположены они на десктопе не пропорционально"). Flexbox
   instead, so each wrapped LINE is justified independently: a leftover
   partial row (5 at 3-per-row = a row of 2) gets centered as its own
   group automatically -- a genuine 3/2 pyramid, not a grid with dead
   cells. NOT applied to the base class generally -- regions-of-slovenia's
   own 8-link block and winter's own 4-link "combine" block both already
   look right as plain 4-column grids (8 = clean 4x2, 4 = clean single
   row/2x2), and forcing them through this same 3-per-row cap would just
   trade one uneven layout for a different one (8 -> 3/3/2, 4 -> 3/1). */
.se-continue-links__grid--cross {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
}

.se-continue-links__grid--cross .se-continue-links__card {
	/* Caps every row at 3 cards (the 33.333% basis, minus its share of
	   the two inter-card gaps) -- min-width forces a wrap to fewer per
	   row, eventually 1-per-row, on narrower viewports, same floor the
	   base grid's minmax(220px, ...) already used. */
	flex: 0 1 calc(33.333% - (var(--se-space-4) * 2 / 3));
	min-width: 220px;
}

.se-continue-links__card {
	display: flex;
	flex-direction: column;
	padding: var(--se-space-4) var(--se-space-5);
	border-radius: 18px;
	background: rgba(255, 255, 255, 0.45);
	border: 1px solid rgba(0, 0, 0, 0.05);
	box-shadow: 0 6px 14px rgba(0, 0, 0, 0.04);
	transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
}

.se-continue-links__card:hover {
	transform: translateY(-2px);
	box-shadow: 0 10px 22px rgba(0, 0, 0, 0.07);
	background: rgba(255, 255, 255, 0.65);
}

.se-continue-links__card-label {
	font-weight: 600;
	color: var(--se-text);
	margin-bottom: var(--se-space-1);
}

.se-continue-links__card-note {
	font-size: 0.9rem;
	color: var(--se-text-muted);
}

.se-breadcrumb {
	font-size: 0.85rem;
	color: var(--se-text-muted);
	margin-bottom: var(--se-space-3);
}

.se-breadcrumb a:hover {
	color: var(--se-accent);
}

/* ==========================================================================
   Quick facts card
   ========================================================================== */
.se-quick-facts {
	background: var(--se-surface);
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-card);
	margin-top: var(--se-space-6);
	position: relative;
	z-index: 2;
	padding: var(--se-space-5) var(--se-space-6);
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--se-space-5);
}

@media (min-width: 700px) {
	.se-quick-facts {
		/* Flexbox, not grid auto-fit: grid's auto-fit column-count math is
		   based on the minmax() floor, not on whether an individual item's
		   own content actually fits the track it's assigned -- a nowrap
		   button label wider than its track forces that track (and the
		   whole grid) to overflow the container instead of wrapping.
		   Flex-wrap wraps the whole line to a new row instead whenever an
		   item doesn't fit, so the card's right edge is never breached on
		   any language/width. */
		display: flex;
		flex-wrap: wrap;
		align-items: flex-start;
	}
}

.se-quick-facts__item {
	display: flex;
	flex-direction: column;
	gap: var(--se-space-1);
}

.se-quick-facts__label {
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--se-text-muted);
}

.se-quick-facts__value {
	font-family: var(--se-font-display);
	font-size: 1.25rem;
	font-weight: 600;
	color: var(--se-text);
}

/* ==========================================================================
   Price facts card (se-render-price-facts()/se-render-accommodation-facts()
   in inc/prices.php) — deliberately the same tokens/structure as
   .se-quick-facts above (background/radius/shadow/grid, flex-wrap on
   desktop for the same overflow-safety reason documented there), just a
   second component because the content shape differs (source link +
   season freshness line underneath, not present on the trail card). */
.se-price-facts {
	background: var(--se-surface);
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-card);
	margin-top: var(--se-space-6);
	position: relative;
	z-index: 2;
	padding: var(--se-space-5) var(--se-space-6);
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--se-space-5);
}

@media (min-width: 700px) {
	.se-price-facts {
		display: flex;
		flex-wrap: wrap;
		align-items: flex-start;
	}
	/* Items had no flex-grow before (2026-08-27 fix) -- with none, flex
	   items sit at their own content width and stay left-aligned,
	   leaving a large dead gap on the right of any wide card with only
	   2-4 short items (visibly "uneven"/asymmetric, flagged directly by
	   the user on the Postojna/Thermal Spas cards -- and, on closer
	   look, present on every .se-price-facts card sitewide, including
	   accommodation, just less noticeable there). flex-grow:1 makes
	   every item share the row's width evenly; the existing min-width
	   values still act as the wrap threshold. */
	.se-price-facts__item {
		flex: 1 1 0;
	}
	.se-price-facts--accommodation .se-price-facts__item {
		min-width: 140px;
	}
	.se-price-facts--group .se-price-facts__item {
		min-width: 220px;
	}
}

/* --group (se_render_price_facts_group(), 2026-08-27) can carry longer
   labels than accommodation's short "Budget/Mid-range/Comfort"
   ("Postojna Cave + Predjama Castle", "Terme 3000 (Moravske Toplice)")
   -- the base 2-column mobile grid crams those into ~50% width and
   wraps them across 3-4 lines. Single column on mobile instead; still
   flex-wraps normally at 700px+ where there's room. Double-class
   selector to guarantee this wins over the base rule regardless of
   source order (see "Известные грабли" on specificity/source-order in
   CLAUDE.md -- this project has hit that exact bug enough times to not
   risk it again on a same-specificity single-class override). */
.se-price-facts.se-price-facts--group {
	grid-template-columns: 1fr;
}

.se-price-facts__item {
	display: flex;
	flex-direction: column;
	gap: var(--se-space-1);
}

.se-price-facts__label {
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--se-text-muted);
}

.se-price-facts__value {
	font-family: var(--se-font-display);
	font-size: 1.25rem;
	font-weight: 600;
	color: var(--se-text);
}

.se-price-facts__note {
	font-family: var(--se-font-body);
	font-size: 0.85rem;
	font-weight: 400;
	color: var(--se-text-muted);
}

/* Source link spans the full card width, sitting under the value items
   rather than inside the flex row of items -- grid on mobile, basis:100%
   on desktop's flex-wrap so it forces its own line without needing a
   wrapper div around the .se-price-facts__item group. */
.se-price-facts__source {
	grid-column: 1 / -1;
	flex-basis: 100%;
	font-size: 0.78rem;
	color: var(--se-accent);
	text-decoration: underline;
	text-underline-offset: 2px;
}

.se-price-facts__source:hover {
	color: var(--se-primary-hover);
}

/* ==========================================================================
   Content-type pill (e.g. "City · Slovenia") — sits above the breadcrumb on
   single article templates, matches the original theme's meta-top pill.
   ========================================================================== */
.se-content-pill {
	margin-bottom: var(--se-space-3);
}

.se-content-pill .se-tag {
	background: var(--se-surface-warm);
	color: var(--se-text-muted);
}

/* ==========================================================================
   "You might also like" — see se_render_related_articles() in
   template-tags.php. Sits between the article body and the back-link.
   ========================================================================== */
.se-related-articles {
	margin-top: var(--se-space-7);
	padding-top: var(--se-space-6);
	border-top: 1px solid var(--se-border);
}

/* Avoid a second divider line stacking right under the first when both
   blocks render back to back — back-link keeps its own spacing, just not
   its own border/padding-top in this one case. */
.se-related-articles + .se-back-link-wrap {
	border-top: none;
	padding-top: 0;
	margin-top: var(--se-space-6);
}

/* ==========================================================================
   Back link ("← Back to X") — closes out every single article template,
   matches the original theme's back-to-hub link at the end of the article.
   ========================================================================== */
.se-back-link-wrap {
	margin-top: var(--se-space-7);
	padding-top: var(--se-space-6);
	border-top: 1px solid var(--se-border);
	text-align: center;
}

.se-back-link {
	display: inline-block;
	padding: var(--se-space-2) var(--se-space-5);
	border-radius: var(--se-radius-pill);
	border: 1px solid var(--se-border);
	background: var(--se-surface-warm);
	color: var(--se-text);
	font-size: 0.9rem;
	font-weight: 500;
	transition: background-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
}

.se-back-link:hover {
	background: var(--se-bg-alt);
	transform: translateY(-1px);
	box-shadow: var(--se-shadow-soft);
}

/* Pillar guide articles (one-day-routes/nature-trails/cities-towns overview
   guides) have no hero image in the original — just pill + breadcrumb, then
   a plain heading directly on the page background. See single-guide.php. */
.se-guide__pillar-title {
	max-width: var(--se-container-narrow);
	margin: var(--se-space-5) auto 0;
}

/* ==========================================================================
   Article prose
   ========================================================================== */
.se-prose {
	max-width: var(--se-container-narrow);
	margin-inline: auto;
	padding-block: var(--se-space-8);
}

.se-prose > * + * {
	margin-top: var(--se-space-5);
}

.se-prose {
	color: var(--se-text-soft);
}

.se-prose p {
	color: var(--se-text-soft);
	font-size: 1.05rem;
	line-height: 1.75;
}

.se-prose h2 {
	margin-top: var(--se-space-7);
}

.se-prose h3 {
	margin-top: var(--se-space-6);
}

.se-prose ul,
.se-prose ol {
	padding-left: 1.3em;
}

/* Small round tan dot instead of the default browser bullet — matches the
   original's list style (confirmed via computed styles on the live site).
   ol keeps its decimal numbers untouched. */
.se-prose ul {
	list-style: none;
}

.se-prose ul li {
	position: relative;
}

.se-prose ul li::before {
	content: '';
	position: absolute;
	left: -1.1em;
	top: 0.6em;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: #C5A78A;
}

.se-prose li + li {
	margin-top: var(--se-space-2);
}

.se-prose img {
	border-radius: var(--se-radius-card);
	width: 100%;
}

/* Section-lead editorial photo with caption. Replaces the older pattern of
   an <img> placed inside the following <h2>/<h3> (no breathing room between
   photo and heading). The figure carries its own vertical rhythm; the
   following .se-prose h2's margin-top (3rem) opens the gap to the heading. */
.se-prose figure.se-figure {
	margin: var(--se-space-6) 0 var(--se-space-2);
}

.se-prose figure.se-figure img {
	display: block;
	width: 100%;
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-soft);
}

.se-prose figure.se-figure figcaption {
	margin-top: var(--se-space-3);
	font-size: 0.86rem;
	line-height: 1.55;
	color: var(--se-text-muted);
	font-style: italic;
}

/* Small float-right figure for a tall/portrait in-content graphic that
   would otherwise take a full prose-width column of vertical space (the
   Slovenia speed-limit road-sign infographic in the Driving guide).
   se_fixup oversized-media filter in functions.php wraps the <img>.
   Under 640px there's no room to wrap text beside it, so it becomes a
   small centred block instead. */
.se-prose figure.se-fig-aside {
	float: right;
	width: 172px;
	margin: var(--se-space-1) 0 var(--se-space-4) var(--se-space-6);
}

/* Callout blocks after a .se-fig-aside float must start full-width below
   it, not wrap in a squeezed column beside the tall portrait figure
   (se_fixup filter adds this class to every .se-callout in that article). */
.se-prose .se-clear-float {
	clear: both;
}

.se-prose figure.se-fig-aside img {
	display: block;
	width: 100%;
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-soft);
}

@media (max-width: 640px) {
	.se-prose figure.se-fig-aside {
		float: none;
		width: 150px;
		margin: var(--se-space-4) auto;
	}
}

/* ~64px app-icon treatment for a square logo/icon pasted full-width into
   a callout card (EasyPark icon in the Driving guide). Floats left so the
   card's heading + copy wrap beside it. */
.se-prose img.se-inline-icon {
	float: left;
	width: 64px;
	height: auto;
	margin: 0 var(--se-space-4) var(--se-space-2) 0;
	border-radius: 14px;
}

/* "Premium button" for a bare source/official-portal link pasted on its
   own line in article content (se_buttonize bare-source-links filter in
   functions.php rewrites the <p><a>URL</a></p> into this). Left-aligned,
   auto width, sits on its own line with the same rhythm as a paragraph. */
.se-prose .se-source-link {
	margin: var(--se-space-4) 0;
}

.se-prose .se-source-link .se-source-link__btn {
	display: inline-flex;
	width: auto;
	font-size: 0.86rem;
	padding: var(--se-space-2) var(--se-space-4);
	word-break: break-word;
}

/* Editorial mood photo between prose sections (About/Vision/Collaborate
   pages). Default: single centered photo. Inside .se-prose--checkerboard
   (the 4 About-menu pages) this is overridden below to alternate left/right
   and wrap text, matching the original's alternating "image with text"
   layout (image_with_text_zW763W = right, image_with_text_HaitLY = left,
   etc — see old_code/page.about.json). */
.se-feature-photo {
	display: block;
	width: 100%;
	max-width: 420px;
	margin: var(--se-space-7) auto;
	box-shadow: var(--se-shadow-soft);
}

/* Checkerboard/alternating photo+text rows — restores the original's real
   side-by-side "image with text" sections (old_code/page.about.json:
   image_with_text_zW763W = text left/image right, image_with_text_HaitLY =
   image left/text right). A first attempt used CSS float + clear:both on
   the paired heading, but that pushed the heading (and its paragraphs)
   BELOW the image instead of beside it — clear:both forces the box below
   ALL earlier floats regardless of available side space, so nothing ever
   actually wrapped next to the photo. Fixed 2026-08-06: se_checkerboard_content()
   in template-tags.php now parses the content in PHP (DOMDocument) and
   groups each image with its immediately-following heading+paragraphs into
   an explicit 2-column grid row — real side-by-side layout, not a float
   wrap. Desktop only per explicit user request; mobile stacks (image above
   text) via the media query below. */
.se-checker-row {
	display: grid;
	grid-template-columns: minmax(0, 300px) minmax(0, 1fr);
	gap: var(--se-space-6);
	align-items: center;
	margin: var(--se-space-7) 0;
}

.se-checker-row--right {
	grid-template-columns: minmax(0, 1fr) minmax(0, 300px);
}

.se-checker-row--right .se-checker-row__media {
	order: 2;
}

.se-checker-row--right .se-checker-row__text {
	order: 1;
}

.se-checker-row__media img.se-feature-photo {
	width: 100%;
	max-width: none;
	margin: 0;
	box-shadow: var(--se-shadow-soft);
}

.se-checker-row__text > *:first-child {
	margin-top: 0;
}

@media (max-width: 720px) {
	.se-checker-row,
	.se-checker-row--right {
		grid-template-columns: 1fr;
	}

	/* Two-class selectors deliberately match the desktop --right rule's
	   specificity (0,2,0) — a plain .se-checker-row__media { order: unset }
	   here (0,1,0) loses to ".se-checker-row--right .se-checker-row__media"
	   regardless of media-query source order, since specificity is compared
	   before source order. Same bug class as .se-hero__img / .se-card
	   elsewhere in this file — see "Известные грабли" в CLAUDE.md. */
	.se-checker-row--right .se-checker-row__media,
	.se-checker-row--right .se-checker-row__text,
	.se-checker-row .se-checker-row__media,
	.se-checker-row .se-checker-row__text {
		order: unset;
	}

	.se-checker-row__media img.se-feature-photo {
		max-width: 100%;
	}
}

/* ==========================================================================
   About pages: "Let's talk" closing card (Collaborate With Us) and the
   Contact page's real submission form.
   ========================================================================== */
.se-lets-talk {
	padding-block: var(--se-space-8) var(--se-space-7);
}

.se-lets-talk__card {
	max-width: 900px;
	margin-inline: auto;
	display: grid;
	grid-template-columns: minmax(0, 0.85fr) minmax(0, 1fr);
	gap: var(--se-space-7);
	align-items: center;
	background: var(--se-surface-warm);
	border-radius: var(--se-radius-card);
	padding: var(--se-space-6);
	box-shadow: var(--se-shadow-soft);
}

.se-lets-talk__media img {
	display: block;
	width: 100%;
	height: 100%;
	max-height: 340px;
	object-fit: cover;
	border-radius: var(--se-radius-sm, 12px);
}

.se-lets-talk__text {
	text-align: center;
}

.se-lets-talk__heading {
	margin-top: 0;
}

.se-lets-talk__text p {
	color: var(--se-text-soft);
	line-height: 1.6;
}

.se-lets-talk__button {
	margin-top: var(--se-space-4);
}

@media (max-width: 720px) {
	.se-lets-talk__card {
		grid-template-columns: 1fr;
		padding: var(--se-space-5);
	}
}

.se-contact-form-wrap {
	max-width: var(--se-container-narrow);
	margin: 0 auto var(--se-space-7);
}

.se-contact-form {
	display: flex;
	flex-direction: column;
	gap: var(--se-space-4);
}

.se-contact-form__row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--se-space-4);
}

@media (max-width: 560px) {
	.se-contact-form__row {
		grid-template-columns: 1fr;
	}
}

.se-contact-form input,
.se-contact-form textarea {
	width: 100%;
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm, 12px);
	padding: var(--se-space-3) var(--se-space-4);
	font-family: inherit;
	font-size: 0.95rem;
	color: var(--se-text);
}

.se-contact-form textarea {
	resize: vertical;
}

.se-contact-form input:focus,
.se-contact-form textarea:focus {
	outline: none;
	border-color: var(--se-primary);
}

.se-contact-form__hp {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	opacity: 0;
	pointer-events: none;
}

.se-contact-form__submit {
	align-self: flex-start;
	cursor: pointer;
	font-family: inherit;
}

.se-form-notice {
	border-radius: var(--se-radius-sm, 12px);
	padding: var(--se-space-4) var(--se-space-5);
	margin-bottom: var(--se-space-5);
	font-size: 0.95rem;
}

.se-form-notice--success {
	background: color-mix(in srgb, var(--se-difficulty-easy) 14%, white);
	color: var(--se-text);
}

.se-form-notice--error {
	background: color-mix(in srgb, var(--se-difficulty-hard) 12%, white);
	color: var(--se-text);
}

/* ==========================================================================
   Guide lead magnet — Slovenia Trip Starter Kit (page-guide-lead-magnet.php)
   ========================================================================== */
.se-lead-magnet__hero {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--se-space-7);
	align-items: center;
	padding-block: var(--se-space-8) var(--se-space-7);
}

@media (min-width: 860px) {
	.se-lead-magnet__hero {
		grid-template-columns: 1.1fr 1fr;
	}
}

.se-lead-magnet__kicker {
	font-size: 11px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--se-text-muted);
	margin: 0 0 var(--se-space-3);
}

.se-lead-magnet__hero-text h1 {
	margin: 0 0 var(--se-space-4);
}

.se-lead-magnet__lede {
	color: var(--se-text-soft);
	font-size: 1.05rem;
	line-height: 1.65;
	margin: 0 0 var(--se-space-5);
	max-width: 46ch;
}

.se-lead-magnet__hero-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--se-space-4);
	margin-bottom: var(--se-space-5);
}

.se-lead-magnet__note {
	font-size: 0.85rem;
	color: var(--se-text-muted);
	margin: 0 0 var(--se-space-2);
}

.se-lead-magnet__cover img {
	display: block;
	width: 100%;
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-card);
}

.se-lead-magnet__problem {
	padding-block: var(--se-space-7);
	border-top: 1px solid var(--se-border);
}

.se-lead-magnet__problem h2,
.se-lead-magnet__inside h2 {
	max-width: 32ch;
}

.se-lead-magnet__problem p {
	color: var(--se-text-soft);
	max-width: 62ch;
	line-height: 1.65;
}

.se-lead-magnet__problem-grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--se-space-4);
	margin-top: var(--se-space-5);
}

@media (min-width: 700px) {
	.se-lead-magnet__problem-grid {
		grid-template-columns: repeat(4, 1fr);
	}
}

.se-lead-magnet__problem-item {
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm, 12px);
	padding: var(--se-space-4);
	font-size: 0.88rem;
	color: var(--se-text-soft);
	line-height: 1.4;
}

.se-lead-magnet__inside {
	padding-block: var(--se-space-7);
	border-top: 1px solid var(--se-border);
}

.se-lead-magnet__inside-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--se-space-4);
	margin-top: var(--se-space-5);
}

@media (min-width: 700px) {
	.se-lead-magnet__inside-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

.se-lead-magnet__inside-card {
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	padding: var(--se-space-5);
}

.se-lead-magnet__inside-card h3 {
	margin: 0 0 var(--se-space-2);
	font-size: 1.05rem;
}

.se-lead-magnet__inside-card p {
	margin: 0;
	color: var(--se-text-muted);
	font-size: 0.9rem;
	line-height: 1.55;
}

.se-lead-magnet__signup {
	scroll-margin-top: var(--se-space-6);
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--se-space-6);
	background: var(--se-surface-warm);
	border-radius: var(--se-radius-card);
	padding: var(--se-space-6);
	margin-top: var(--se-space-7);
}

@media (min-width: 760px) {
	.se-lead-magnet__signup {
		grid-template-columns: 1fr 1fr;
		align-items: center;
	}
}

.se-lead-magnet__signup-text h2 {
	margin-top: 0;
}

.se-lead-magnet__signup-text p {
	color: var(--se-text-soft);
	line-height: 1.6;
}

.se-lead-magnet__signup-form label {
	display: block;
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--se-text-muted);
	margin-bottom: var(--se-space-2);
}

.se-lead-magnet__signup-row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--se-space-3);
}

.se-lead-magnet__signup-row input {
	flex: 1;
	min-width: 200px;
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm, 12px);
	padding: var(--se-space-3) var(--se-space-4);
	font-family: inherit;
	font-size: 0.95rem;
	color: var(--se-text);
}

.se-lead-magnet__signup-row input:focus {
	outline: none;
	border-color: var(--se-primary);
}

.se-lead-magnet__disclaimer {
	font-size: 0.8rem;
	color: var(--se-text-muted);
	margin: var(--se-space-3) 0 0;
}

.se-lead-magnet__credit {
	text-align: center;
	padding-top: var(--se-space-7);
	margin-top: var(--se-space-6);
	border-top: 1px solid var(--se-border);
	color: var(--se-text-muted);
	font-size: 0.85rem;
}

/* ==========================================================================
   404 — matches old_code/se-404.liquid ("SE – 404 editorial")
   ========================================================================== */
.se-404 {
	position: relative;
	min-height: 72vh;
	display: grid;
	align-items: center;
	overflow: hidden;
}

.se-404__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.se-404__bg-img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* Darker gradient (was a light cream tint) — the first version washed the
   photo out almost flat and needed dark text on top of it, reading as
   "plain text on a background" rather than an editorial full-bleed photo
   moment. This matches how the rest of the site's full-bleed heroes work
   (.se-home-hero, .se-hub-hero): dark overlay, white text sitting directly
   on the photo. */
.se-404__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20, 17, 12, 0.32) 0%, rgba(20, 17, 12, 0.58) 100%);
}

.se-404__wrap {
	position: relative;
	z-index: 1;
}

.se-404__card {
	max-width: 720px;
	margin: var(--se-space-6) auto;
	padding: var(--se-space-7) var(--se-space-6);
	border-radius: var(--se-radius-card);
	border: 1px solid rgba(255, 255, 255, 0.28);
	background: rgba(255, 255, 255, 0.1);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);
	text-align: center;
}

.se-404__kicker {
	margin: 0 0 var(--se-space-3);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	font-size: 12px;
	color: rgba(255, 255, 255, 0.72);
}

.se-404 .se-404__title {
	margin: 0 0 var(--se-space-3);
	line-height: 1.1;
	letter-spacing: -0.01em;
	font-size: clamp(1.7rem, 1.4rem + 1.5vw, 2.6rem);
	color: #fff;
}

.se-404__text {
	margin: 0 auto var(--se-space-5);
	max-width: 52ch;
	line-height: 1.6;
	color: rgba(255, 255, 255, 0.85);
}

.se-404__search-form {
	display: flex;
	gap: var(--se-space-3);
	justify-content: center;
	align-items: center;
	max-width: 480px;
	margin: 0 auto var(--se-space-5);
}

.se-404__search-input {
	flex: 1;
	height: 48px;
	padding: 0 var(--se-space-4);
	border-radius: var(--se-radius-sm, 12px);
	border: 1px solid rgba(255, 255, 255, 0.4);
	background: rgba(255, 255, 255, 0.14);
	color: #fff;
	font-family: inherit;
	font-size: 0.95rem;
	outline: none;
}

.se-404__search-input::placeholder {
	color: rgba(255, 255, 255, 0.65);
}

.se-404__search-input:focus {
	border-color: #fff;
	background: rgba(255, 255, 255, 0.2);
}

.se-404__search-btn {
	height: 48px;
	width: 52px;
	flex: none;
	border-radius: var(--se-radius-sm, 12px);
	border: 1.5px solid rgba(255, 255, 255, 0.6);
	background: rgba(255, 255, 255, 0.14);
	color: #fff;
	cursor: pointer;
	font-size: 1.1rem;
}

.se-404__search-btn:hover {
	background: rgba(255, 255, 255, 0.26);
}

.se-404__cta-row {
	display: flex;
	gap: var(--se-space-3);
	justify-content: center;
	flex-wrap: wrap;
	margin-bottom: var(--se-space-6);
}

.se-404__links-title {
	margin: 0 0 var(--se-space-3);
	font-size: 12px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.72);
}

.se-404__link-list {
	display: flex;
	gap: var(--se-space-3);
	justify-content: center;
	flex-wrap: wrap;
	padding: 0;
	margin: 0;
	list-style: none;
}

.se-404__link {
	display: inline-flex;
	padding: var(--se-space-2) var(--se-space-4);
	border-radius: var(--se-radius-pill);
	border: 1px solid rgba(255, 255, 255, 0.4);
	background: rgba(255, 255, 255, 0.12);
	color: #fff;
	font-size: 0.85rem;
	text-decoration: none;
}

.se-404__link:hover {
	background: rgba(255, 255, 255, 0.24);
}

.se-404__fineprint {
	margin: var(--se-space-5) 0 0;
	font-size: 0.8rem;
	color: rgba(255, 255, 255, 0.65);
}

@media (max-width: 749px) {
	.se-404 {
		min-height: 66vh;
	}

	.se-404__card {
		padding: var(--se-space-5) var(--se-space-4);
	}
}

/* ==========================================================================
   Maintenance mode
   ========================================================================== */
.se-maintenance {
	position: relative;
	min-height: 70vh;
	display: flex;
	align-items: center;
	overflow: hidden;
}

.se-maintenance__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
}

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

.se-maintenance__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20, 17, 12, 0.35) 0%, rgba(20, 17, 12, 0.6) 100%);
}

.se-maintenance__wrap {
	position: relative;
	z-index: 1;
}

.se-maintenance__card {
	max-width: 560px;
	margin-inline: auto;
	text-align: center;
	padding: var(--se-space-7) var(--se-space-6);
	border-radius: var(--se-radius-card);
	border: 1px solid rgba(255, 255, 255, 0.28);
	background: rgba(255, 255, 255, 0.1);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);
}

.se-maintenance__card h1 {
	color: #fff;
}

.se-maintenance__kicker {
	margin: 0 0 var(--se-space-3);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	font-size: 12px;
	color: rgba(255, 255, 255, 0.72);
}

.se-maintenance__card p {
	color: rgba(255, 255, 255, 0.85);
	line-height: 1.6;
}

.se-maintenance__form {
	margin-top: var(--se-space-6);
}

.se-maintenance__form label {
	display: block;
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: rgba(255, 255, 255, 0.72);
	margin-bottom: var(--se-space-2);
}

.se-maintenance__form-row {
	display: flex;
	gap: var(--se-space-3);
	max-width: 340px;
	margin-inline: auto;
}

.se-maintenance__form-row input {
	flex: 1;
	background: rgba(255, 255, 255, 0.14);
	border: 1px solid rgba(255, 255, 255, 0.4);
	border-radius: var(--se-radius-sm, 12px);
	padding: var(--se-space-3) var(--se-space-4);
	font-family: inherit;
	font-size: 0.95rem;
	color: #fff;
}

.se-maintenance__form-row input:focus {
	outline: none;
	border-color: #fff;
	background: rgba(255, 255, 255, 0.2);
}

.se-maintenance__error {
	margin-top: var(--se-space-3);
	color: #ffb4a8;
	font-size: 0.85rem;
}

.se-unsubscribe {
	max-width: 480px;
	margin-inline: auto;
	text-align: center;
	padding-block: var(--se-space-8);
}

.se-unsubscribe p {
	color: var(--se-text-soft);
	line-height: 1.6;
	margin: 0 0 var(--se-space-6);
}

.se-prose--story {
	max-width: 680px;
}

.se-prose--story > p:first-of-type {
	font-family: var(--se-font-display);
	font-size: 1.3rem;
	line-height: 1.6;
	color: var(--se-text-soft);
}

.se-prose blockquote {
	font-family: var(--se-font-display);
	font-size: 1.25rem;
	font-style: italic;
	color: var(--se-text-soft);
	border-left: 3px solid var(--se-accent);
	padding-left: var(--se-space-5);
	margin: var(--se-space-6) 0;
}

/* ==========================================================================
   Callout boxes (mapped from the source content's tip/warning/highlight
   boxes — see se_clean_content_html() in the importer)
   ========================================================================== */
.se-callout {
	background: var(--se-surface-warm);
	border-left: 5px solid var(--se-border);
	border-radius: var(--se-radius-sm);
	padding: var(--se-space-4) var(--se-space-5);
	margin: var(--se-space-5) 0;
	box-shadow: var(--se-shadow-soft);
	/* Every embedded third-party affiliate widget (Aviasales, VisitorsCoverage,
	   Compensair, 12Go/Omio, BikesBooking, Radical Storage) shares this exact
	   class as its container. The vendor scripts inject a shadow-DOM/iframe
	   widget whose own intrinsic content can be wider than a mobile viewport
	   (a multi-field search form, for example) -- with no containment here,
	   that overflow was propagating all the way up to <html>, forcing the
	   whole page to scroll horizontally on phones. max-width:100% stops the
	   box itself from ever exceeding its container; overflow-x:auto means
	   that IF the injected content is still wider than the box, only the
	   box scrolls locally (pinch-scroll within the widget) instead of the
	   entire page. box-sizing:border-box keeps the padding inside that
	   100% instead of adding to it. */
	max-width: 100%;
	box-sizing: border-box;
	overflow-x: auto;
}

.se-callout > *:first-child {
	margin-top: 0;
}

.se-callout > *:last-child {
	margin-bottom: 0;
}

/* Narrow, float-right variant for embedded third-party widgets (a fixed-
   width form ~390-420px, not full prose width) -- lets surrounding
   paragraph text wrap beside it instead of leaving a mostly-empty wide
   box. .se-prose gets a clearfix below so the float never escapes its
   container; on narrow screens it drops back to a normal full-width
   block, since there's no room to wrap text next to it there anyway. */
.se-callout--narrow {
	max-width: 420px;
}

@media (min-width: 720px) {
	.se-callout--narrow {
		float: right;
		margin-left: var(--se-space-6);
	}
}

/* Centered, non-floating variant of the same fixed-width widget box --
   for spots where it follows a short bullet list rather than a real
   paragraph (nothing meaningful to wrap around it, so floating just
   leaves a big empty gap beside a short list instead). */
.se-callout--centered {
	max-width: 460px;
	margin-left: auto;
	margin-right: auto;
}

.se-prose::after {
	content: '';
	display: table;
	clear: both;
}

/* Headings must never sit beside a floated .se-callout--narrow widget --
   only paragraph text should wrap. Without this, a heading that happens
   to fall right after a float (nothing else queued to wrap around it)
   gets pulled up beside the box instead of starting a fresh line below
   it. Harmless no-op wherever nothing is floating. */
.se-prose h2,
.se-prose h3 {
	clear: both;
}

/* Callout color system — 4 semantic tiers, each with a real (not
   washed-out-to-near-white) tinted background so it actually reads as
   "pay attention" against the page's own warm-neutral tone, not just a
   thin border stripe on an almost-identical background:
     - neutral/tip  -> green   (plain info, "ideal for", positive tips)
     - warning      -> amber   (caution — common mistakes, "watch out")
     - critical      -> red     (real danger/safety — split out from
       warning, which se-import.php used to fold both into on import)
     - highlight     -> terracotta accent (featured takeaway — TL;DR,
       "MUST-SEE", "quick start") — a distinct 4th tier, not part of the
       info/caution/danger scale. */
.se-callout--neutral,
.se-callout--tip {
	border-left-color: var(--se-info);
	background: var(--se-info-soft);
}

.se-callout--highlight {
	border-left-color: var(--se-accent);
	background: var(--se-accent-soft);
}

.se-callout--warning {
	border-left-color: var(--se-caution);
	background: var(--se-caution-soft);
}

.se-callout--critical {
	border-left-color: var(--se-critical);
	background: var(--se-critical-soft);
}

/* ==========================================================================
   Mid-article "Free guide" promo (Slovenia Trip Starter Kit) — Guides and
   Experiences-menu articles only, inserted ~25% through the content by a
   the_content filter in functions.php. Same lead magnet as the header
   announcement bar; dark card so it reads as a deliberate promo break, not
   just another callout box.
   ========================================================================== */
.se-guide-promo {
	display: grid;
	grid-template-columns: 160px 1fr;
	gap: var(--se-space-5);
	align-items: center;
	background: var(--se-primary);
	color: #fff;
	border-radius: var(--se-radius-card);
	padding: var(--se-space-5);
	margin: var(--se-space-7) 0;
	box-shadow: var(--se-shadow-card);
}

.se-guide-promo__media {
	border-radius: var(--se-radius-sm);
	overflow: hidden;
	aspect-ratio: 3 / 4;
}

.se-guide-promo__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.se-guide-promo__kicker {
	display: inline-block;
	font-size: 0.72rem;
	font-weight: 800;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	background: rgba(255, 255, 255, 0.18);
	color: #fff;
	padding: 0.25em 0.7em;
	border-radius: var(--se-radius-pill);
	margin-bottom: var(--se-space-2);
}

/* Double-class selectors: the sitewide ".se h1,h2,h3,h4{color:var(--se-text)}"
   and ".se-prose p{color:var(--se-text-soft)}" rules (both 0,1,1) would
   otherwise beat a single-class ".se-guide-promo__title"/"__text" (0,1,0)
   and print dark brown-on-dark-brown here — same bug class documented
   elsewhere in this file. */
.se-guide-promo .se-guide-promo__title {
	color: #fff;
	margin: 0 0 var(--se-space-2);
	font-size: 1.25rem;
}

.se-guide-promo .se-guide-promo__text {
	color: rgba(255, 255, 255, 0.88);
	margin: 0 0 var(--se-space-4);
	font-size: 0.92rem;
	line-height: 1.6;
}

@media (max-width: 640px) {
	.se-guide-promo {
		grid-template-columns: 1fr;
	}
	.se-guide-promo__media {
		aspect-ratio: 16 / 9;
	}
}

.se-callout__title {
	font-size: 1.05rem;
	margin-bottom: var(--se-space-3);
}

.se-callout__eyebrow {
	display: block;
	font-size: 0.68rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--se-accent);
	margin-bottom: var(--se-space-2);
}

/* display:block + overflow-x:auto -- a bare content table (columns with
   labels/numbers that don't wrap, e.g. "Best Time"/"Safety"/pricing
   comparisons in guide and journey articles) is sized by table-layout:auto
   to fit its widest row, ignoring width:100% -- that's a preferred width,
   not a hard cap, so a wide table was blowing the whole page out
   horizontally on mobile with no way to scroll it back into view. Turning
   the table into a block-level scroll container (a standard, widely
   supported technique -- the element keeps rendering its rows/cells with
   table layout internally) contains any overflow to a horizontal scroll
   *within the table itself* instead of the whole page. */
.se-prose table {
	display: block;
	width: 100%;
	max-width: 100%;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	border-collapse: separate;
	border-spacing: 0;
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	font-size: 0.92rem;
}

.se-prose th,
.se-prose td {
	text-align: left;
	padding: var(--se-space-3) var(--se-space-4);
	border-bottom: 1px solid var(--se-border);
}

.se-prose thead th {
	background: var(--se-bg-alt);
	font-weight: 600;
}

.se-prose tbody tr:last-child td {
	border-bottom: none;
}

.se-inline-badge {
	display: inline-block;
	background: var(--se-primary);
	color: var(--se-on-primary);
	font-size: 0.68rem;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	padding: 3px 9px;
	border-radius: var(--se-radius-pill);
	margin-right: var(--se-space-2);
	vertical-align: middle;
}

/* Plain in-content links get a visible underline; CTA buttons opt out.
   Previously color:inherit (same as body text) + underline-color:
   --se-border (#E4DDD0, nearly the same as the #F7F4EF page background) —
   technically underlined but visually indistinguishable from plain prose.
   Found 2026-08-18 when a user couldn't spot 16 newly-added official-
   source links that were, in fact, present in the markup. */
.se-prose a:not(.se-button) {
	color: var(--se-accent);
	text-decoration: underline;
	text-decoration-color: var(--se-accent);
	text-underline-offset: 2px;
}

.se-prose a:not(.se-button):hover {
	color: var(--se-primary-hover);
	text-decoration-color: var(--se-primary-hover);
}

/* .se-route-push / .se-card are whole-card <a> elements injected into
   article content by the the_content filter (see se_build_route_push_node()
   in functions.php). Without this, .se-prose a:not(.se-button) above
   underlines the card's title, excerpt and CTA text as one run — matched
   specificity, so this later rule wins. Equal-specificity :hover variant
   keeps it off on hover too. */
.se-prose a.se-route-push,
.se-prose a.se-route-push:hover,
.se-prose a.se-card,
.se-prose a.se-card:hover {
	text-decoration: none;
}

/* Short italic aside next to an affiliate CTA (was .se-cta-tip). */
.se-note {
	font-size: 0.92rem;
	color: var(--se-text-muted);
	font-style: italic;
}

/* Row of affiliate booking buttons (Stay22 platform links) — usually 4
   (Booking.com / Hotels.com / Expedia / Vrbo). Equal-width grid instead of
   flex-wrap so button width doesn't just follow label length ("Booking.com"
   vs "Vrbo" no longer produces visibly mismatched pill sizes). */
.se-cta-row {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--se-space-3);
	margin: var(--se-space-4) 0;
}

.se-cta-row .se-button {
	justify-content: center;
	text-decoration: none !important;
}

@media (max-width: 480px) {
	.se-cta-row {
		grid-template-columns: 1fr;
	}
}

/* ==========================================================================
   Weather widget (Windy embed) — se-route-widget--weather in the source,
   used to be stripped at import time (no CSS/JS backing). Additive on top of
   .se-callout's own box chrome (border/background/padding) — see the class
   remap in se-import.php.
   ========================================================================== */
.se-weather-widget__embed {
	margin: var(--se-space-4) 0;
}

.se-weather-widget__frame iframe {
	display: block;
	width: 100%;
	border: 0;
}

.se-weather-widget__frame--desktop iframe {
	height: 450px;
}

.se-weather-widget__frame--mobile {
	display: none;
}

@media (max-width: 749px) {
	.se-weather-widget__frame--desktop {
		display: none;
	}
	.se-weather-widget__frame--mobile {
		display: block;
	}
	.se-weather-widget__frame--mobile iframe {
		height: 380px;
	}
}

/* Viator tour-booking widget (rendered entirely by Viator's own script —
   see se_enqueue_tour_widget_assets() in functions.php) and GetYourGuide
   (bare [data-gyg-widget] div, no wrapper class in the source markup at
   all). Both just need breathing room inside the article flow. */
.se-tours-widget,
[data-gyg-widget] {
	margin: var(--se-space-4) 0;
	display: block;
}

.se-stayblock-card {
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-soft);
	padding: var(--se-space-5);
	margin: var(--se-space-6) 0;
}

.se-stayblock-card > *:first-child {
	margin-top: 0;
}

.se-stayblock__map {
	margin: var(--se-space-4) 0;
	border-radius: var(--se-radius-sm);
	overflow: hidden;
}

.se-stayblock__map iframe {
	display: block;
	width: 100%;
	border: 0;
}

.se-stayblock-card .se-cta-row {
	margin-bottom: 0;
}

/* Travel-insurance affiliate widget (VisitorsCoverage/tpembd.com script,
   id="se-insurance-widget" in the raw article HTML). The markup still
   carries .se-callout classes for basic spacing, but a tinted
   tip/warning/highlight box is the wrong metaphor for it — this is a
   3rd-party quote widget, not editorial commentary, so it clashed
   visually (warm tint + accent border fighting the widget's own white
   comparison card). Restyled here via the unique #id — its specificity
   (1,0,0) cleanly overrides the .se-callout tier classes (0,1,0) without
   touching the HTML in any article, present or future. Matches
   .se-stayblock-card's plain white "product card" language instead. */
#se-insurance-widget {
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-soft);
	max-width: 480px;
	text-align: center;
	/* The inherited .se-callout rule only sets overflow-x:auto, no
	   overflow-y -- per spec, a 'visible' value on one axis is forced to
	   'auto' when the other axis isn't 'visible', so this box silently
	   got scrollbars on BOTH axes the instant the vendor's injected
	   widget was even a little taller/wider than the card -- the
	   "squeezed, needs to scroll to see it" look reported live. This
	   card doesn't need scroll protection of its own: the iframe/div
	   rules below already force the embed to respect the card's own
	   width, so the box can just grow to fit its content instead. */
	overflow: visible;
}

#se-insurance-widget > div {
	max-width: 100%;
	box-sizing: border-box;
}

#se-insurance-widget h3 {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var(--se-space-2);
	font-size: 1.05rem;
	margin-bottom: var(--se-space-2);
}

#se-insurance-widget h3::before {
	content: '';
	flex: 0 0 auto;
	width: 20px;
	height: 20px;
	background: var(--se-accent);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2 4 5v6c0 5 3.4 8.9 8 11 4.6-2.1 8-6 8-11V5l-8-3z'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2 4 5v6c0 5 3.4 8.9 8 11 4.6-2.1 8-6 8-11V5l-8-3z'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E") center / contain no-repeat;
}

#se-insurance-widget > p {
	color: var(--se-text-soft);
	font-size: 0.9rem;
	max-width: 36ch;
	margin-left: auto;
	margin-right: auto;
}

#se-insurance-widget iframe {
	max-width: 100%;
	margin-top: var(--se-space-4);
	border: 0;
}

/* "Related guides" numbered link-cards reuse .se-card, stacked in prose
   rather than laid out in a grid. */
.se-card-wrap {
	margin: var(--se-space-6) 0;
}

.se-card-wrap .se-card {
	max-width: 420px;
}

/* "Hidden gem" cards (image/heading/tags/excerpt/callouts as flat children —
   source markup isn't wrapped the way our own .se-card__image/__body are).
   Confirmed against the live original (getComputedStyle on .se-gem-card,
   both on this simple listicle-tile use AND the much larger "where to stay"
   composite use, see CLAUDE.md "merged callout" bug): background/box-shadow/
   padding are ALL transparent/zero there — it's a bare semantic wrapper, not
   a visual card. Our .se-card base class (shared with the real boxed
   .se-card-wrap "related guide" links) gives every .se-gem-card a white
   background + shadow + padding it was never meant to have — harmless on a
   small single-tile listicle entry, but on the "where to stay" guide each
   .se-gem-card wraps photo + tags + 2 callouts + an "Where to stay" H4 +
   the full Stay22 map/note/buttons + another callout, so the box read as
   one undifferentiated white sheet from photo to affiliate widget. Cancel
   the inherited box here instead of on .se-card (still correctly boxed
   for .se-card-wrap). */
/* Double-class selector: .se-card (declared further below, same 0,1,0
   specificity as a bare .se-card--gem) would otherwise win this tug-of-war
   on source order alone — same bug class as the .se-hero__img / .se-404
   title cases documented elsewhere in this file. */
.se-card.se-card--gem {
	display: block;
	background: transparent;
	box-shadow: none;
	overflow: visible;
	border-radius: 0;
}

.se-card--gem img {
	display: block;
	width: 100%;
	margin: 0 0 var(--se-space-4);
	max-width: none;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: var(--se-radius-card);
}

.se-card--gem h3 {
	font-family: var(--se-font-display);
	font-size: 1.1rem;
	margin: 0 0 var(--se-space-2);
}

.se-card--gem p {
	color: var(--se-text-muted);
	font-size: 0.92rem;
	margin: var(--se-space-2) 0 0;
}

.se-card--gem .se-callout {
	margin-top: var(--se-space-3);
}

.se-card--gem h4 {
	margin-top: var(--se-space-5);
}

.se-card--gem__tags {
	display: flex;
	flex-wrap: wrap;
	gap: var(--se-space-1);
}

.se-tag--gem {
	background: var(--se-bg-alt);
	color: var(--se-text-muted);
}

/* ==========================================================================
   Homepage
   ========================================================================== */
.se-home-hero {
	position: relative;
	min-height: 62vh;
	display: flex;
	align-items: center;
	justify-content: center;
	background-size: cover;
	background-position: center;
	color: #fff;
	text-align: center;
}

.se-home-hero::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20, 17, 12, 0.08) 0%, rgba(20, 17, 12, 0.32) 100%);
}

.se-home-hero__content {
	position: relative;
	z-index: 1;
	max-width: 800px;
	margin-inline: auto;
	padding-block: var(--se-space-8);
	margin-top: 8vh;
}

.se-home-hero h1 {
	color: #fff;
	font-size: clamp(2.1rem, 1.6rem + 2.2vw, 3.4rem);
}

.se-home-hero__line1,
.se-home-hero__line2 {
	display: block;
	white-space: nowrap;
}

.se-home-hero__line2 {
	font-size: 1.1em;
}

.se-home-hero__content p {
	font-size: 1.1rem;
	color: rgba(255, 255, 255, 0.92);
	margin-top: var(--se-space-4);
}

.se-home-hero__actions {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--se-space-3);
	margin-top: var(--se-space-6);
}

.se-home-hero__actions .se-button {
	min-width: 240px;
	justify-content: center;
}

.se-button--outline {
	background: transparent;
	color: #fff;
	border: 1px solid rgba(255, 255, 255, 0.7);
}

.se-button--outline:hover,
.se-button--outline:focus,
.se-button--outline:active,
.se-button--outline:visited {
	background: rgba(255, 255, 255, 0.12);
	color: #fff;
}

/* ==========================================================================
   Hub hero — full-bleed, same proportions as .se-home-hero above (per the
   original theme, hub pages use the same edge-to-edge "image-banner"
   section as the homepage, not a contained card). Optional --ambient
   modifier reproduces the original's slow drifting-zoom motion, used only
   on the 4 hubs under the "Discover Slovenia" menu — see page-hub.php.
   ========================================================================== */
.se-hub-hero {
	position: relative;
	/* Original uses a fixed min-height (720px "large" on the Discover
	   Slovenia hubs, 560px "medium" on the Experience-menu hubs — see
	   se_render_hub_hero()), not a viewport-relative one — confirmed via
	   computed styles. A vh-based height looked noticeably shorter than the
	   original on typical laptop window heights (800-900px tall). Callers
	   that need the 560px variant set --se-hub-hero-h inline. */
	min-height: var(--se-hub-hero-h, 720px);
	display: flex;
	align-items: flex-end;
	justify-content: center;
	overflow: hidden;
	color: #fff;
	text-align: center;
}

@media (max-width: 749px) {
	.se-hub-hero {
		min-height: 390px;
	}
}

.se-hub-hero__media {
	position: absolute;
	inset: 0;
}

/* Two-class selector deliberately out-specifies the sitewide
   ".se img { height: auto }" reset (specificity 0,1,1 beats our 0,1,0) —
   without it the img fell back to its own intrinsic aspect ratio instead
   of filling the hero box, which silently neutered object-position (there
   was little/nothing left to crop). Root cause of "the focal point field
   doesn't seem to do anything" — confirmed via computed styles: img height
   was resolving to ~893px (its own aspect ratio) inside a 720px-tall box. */
.se-hub-hero .se-hub-hero__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}

.se-hub-hero::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20, 17, 12, 0.08) 0%, rgba(20, 17, 12, 0.32) 100%);
}

.se-hub-hero__content {
	position: relative;
	z-index: 1;
	max-width: 890px;
	margin-inline: auto;
	padding: var(--se-space-8) var(--se-space-6);
}

.se-hub-hero h1 {
	color: #fff;
	font-size: clamp(1.8rem, 1.3rem + 1.6vw, 2.75rem);
}

.se-hub-hero__subtitle {
	font-size: 1.1rem;
	color: rgba(255, 255, 255, 0.92);
	margin-top: var(--se-space-4);
}

/* Optional CTA button under the hero subtitle, linking to a hub's "pillar"
   overview guide (one-day-routes-1, nature-trails-1, cities-towns — see
   se_get_pillar_back_link() for the matching back-link on the guide side).
   Reuses .se-button--outline: white/transparent, made for sitting on a dark
   photo — same variant already used for the homepage hero CTAs. */
.se-hub-hero__actions {
	margin-top: var(--se-space-5);
}

/* Stories hub: original uses content-align-left instead of center. */
.se-hub-hero--align-left {
	justify-content: flex-start;
	text-align: left;
}

.se-hub-hero--align-left .se-hub-hero__content {
	margin-inline: 0;
}

@media (prefers-reduced-motion: no-preference) {
	.se-hub-hero--ambient .se-hub-hero__img {
		animation: seHubAmbient 30s linear infinite;
	}
}

@keyframes seHubAmbient {
	0% { transform: rotate(0deg) translateX(1em) rotate(0deg) scale(1.2); }
	100% { transform: rotate(360deg) translateX(1em) rotate(-360deg) scale(1.2); }
}

.se-section__header {
	max-width: var(--se-container-narrow);
	margin-bottom: var(--se-space-7);
}

.se-section__header h2 {
	margin-top: var(--se-space-2);
}

.se-section__subtitle {
	color: var(--se-text-muted);
	font-size: 1.05rem;
	margin-top: var(--se-space-2);
}

/* ==========================================================================
   Card grid (archives / hubs)
   ========================================================================== */
.se-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--se-space-6);
}

@media (min-width: 640px) {
	.se-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1000px) {
	.se-grid { grid-template-columns: repeat(3, 1fr); }
}

.se-card {
	position: relative;
	display: block;
	background: var(--se-surface);
	border-radius: var(--se-radius-card);
	overflow: hidden;
	box-shadow: var(--se-shadow-soft);
	transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.se-card:hover {
	transform: translateY(-3px);
	box-shadow: var(--se-shadow-card);
}

/* ==========================================================================
   Live webcams grid (winter hub) -- same mobile-first fixed-column pattern
   as .se-grid just above (1 col / 2 col at 640px / 3 col at 1000px), not an
   auto-fit/minmax() track. That's deliberate: an auto-fit grid only avoids
   overflow if every child can shrink to fit its track, and a fixed-height
   iframe (Kranjska Gora's real embed) doesn't shrink on its own the way text
   does -- the exact class of bug already hit once on this project (GPX
   button in a narrow quick-facts column). Fixed 1/2/3-column breakpoints
   sidestep the whole problem instead of trying to out-clever it.
   ========================================================================== */
.se-webcams-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--se-space-5);
	margin-top: var(--se-space-5);
}

@media (min-width: 640px) {
	.se-webcams-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1000px) {
	.se-webcams-grid { grid-template-columns: repeat(3, 1fr); }
}

.se-webcam-card {
	/* Grid items default to min-width: auto -- belt-and-suspenders, even
	   though this card no longer holds a replaced element (iframe), since
	   the class of bug (GPX button in a narrow quick-facts column) came
	   from the same grid pattern. */
	min-width: 0;
	position: relative;
	display: block;
	aspect-ratio: 4 / 3;
	border-radius: var(--se-radius-card);
	overflow: hidden;
	background-color: var(--se-bg-alt);
	background-size: cover;
	background-position: center;
	box-shadow: var(--se-shadow-soft);
	text-decoration: none;
	color: var(--se-text);
	transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.se-webcam-card:hover {
	transform: translateY(-3px);
	box-shadow: 0 14px 30px rgba(74, 56, 38, 0.24);
}

/* Full-bleed overlay so the scrim and content always cover the whole
   card regardless of its rendered height -- the earlier flex-child
   version only sized itself to its own content, leaving the gradient
   confined to a thin strip near the bottom instead of spanning enough
   of the photo to guarantee contrast wherever the name/button land. */
.se-webcam-card__overlay {
	position: absolute;
	inset: 0;
	z-index: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: flex-end;
	gap: var(--se-space-3);
	padding: var(--se-space-4);
	text-align: center;
}

/* Cards with a real resort photo get a bottom-up dark scrim so the name
   and button stay legible over any photo -- cards without one (Golte has
   no free-licensed photo, see page-hub.php comment) keep the plain
   surface background and default text color instead of faking a photo. */
.se-webcam-card--photo .se-webcam-card__overlay {
	background: linear-gradient(to top, rgba(20, 14, 8, 0.92) 0%, rgba(20, 14, 8, 0.72) 30%, rgba(20, 14, 8, 0.25) 60%, rgba(20, 14, 8, 0) 100%);
}

.se-webcam-card__name {
	margin: 0;
	font-size: 1.05rem;
	font-weight: 600;
	/* Sitewide ".se h1,h2,h3,h4{color:var(--se-text)}" (0,1,1) directly
	   targets this <h3> and beats the inherited color from the card, so
	   the light-on-dark treatment has to be set explicitly right here,
	   not just assumed from the container -- same class of bug as the
	   guide-promo block and the GPX popup earlier in this project. */
	color: var(--se-text);
}

.se-webcam-card--photo .se-webcam-card__name {
	color: #fff;
	text-shadow: 0 1px 6px rgba(0, 0, 0, 0.35);
}

.se-webcam-card__cta {
	display: inline-flex;
	align-items: center;
	gap: var(--se-space-2);
	padding: var(--se-space-2) var(--se-space-3);
	border-radius: var(--se-radius-pill);
	border: 1.5px solid var(--se-text);
	font-size: 0.82rem;
	font-weight: 600;
	color: var(--se-text);
}

.se-webcam-card--photo .se-webcam-card__cta {
	border-color: rgba(255, 255, 255, 0.75);
	color: #fff;
	background: rgba(255, 255, 255, 0.12);
}

.se-webcam-card:hover .se-webcam-card__cta {
	background: var(--se-bg-alt);
}

.se-webcam-card--photo:hover .se-webcam-card__cta {
	background: rgba(255, 255, 255, 0.26);
}

.se-webcam-card__icon {
	width: 18px;
	height: 18px;
	flex-shrink: 0;
}

.se-webcams-credit {
	margin-top: var(--se-space-4);
	font-size: 0.78rem;
	color: var(--se-text-muted);
	opacity: 0.85;
}

/* .se-gem-card is a bare content group in the original (see the
   .se-card.se-card--gem override above) — it was never a hoverable card,
   so cancel .se-card:hover's lift/shadow for it too. */
.se-card.se-card--gem:hover {
	transform: none;
	box-shadow: none;
}

.se-card__image {
	aspect-ratio: 4 / 3;
	overflow: hidden;
}

.se-card__image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.se-card__body {
	padding: var(--se-space-5);
}

.se-card__title {
	font-family: var(--se-font-display);
	font-size: 1.15rem;
	font-weight: 600;
	margin: var(--se-space-2) 0 0;
}

.se-card__excerpt {
	color: var(--se-text-muted);
	font-size: 0.92rem;
	margin-top: var(--se-space-2);
}

.se-card__date {
	display: block;
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	color: var(--se-text-muted);
	margin-top: var(--se-space-1);
}

/* ==========================================================================
   Segment archive pagination (/blogs/{segment}/page/2/, ...) — matches the
   original Shopify blog's own page size (6/page, see se_segment_archive_
   query() in inc/rewrites.php) and numbered "1 2 3 ..." pagination.
   ========================================================================== */
.se-pagination {
	margin-top: var(--se-space-8);
	display: flex;
	justify-content: center;
}

.se-pagination ul.page-numbers {
	display: flex;
	flex-wrap: wrap;
	gap: var(--se-space-2);
	list-style: none;
	padding: 0;
	margin: 0;
}

.se-pagination .page-numbers li {
	display: block;
}

.se-pagination a.page-numbers,
.se-pagination span.page-numbers {
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	height: 40px;
	padding: 0 var(--se-space-3);
	border-radius: var(--se-radius-pill);
	border: 1.5px solid var(--se-border);
	color: var(--se-text);
	font-weight: 600;
	font-size: 0.9rem;
}

.se-pagination a.page-numbers:hover {
	background: var(--se-bg-alt);
	border-color: var(--se-text);
}

.se-pagination span.page-numbers.current {
	background: var(--se-primary);
	border-color: var(--se-primary);
	color: #fff;
}

.se-pagination span.page-numbers.dots {
	border: none;
	color: var(--se-text-muted);
}

/* ==========================================================================
   Footer
   ========================================================================== */
.se-footer {
	background: var(--se-primary);
	color: rgba(255, 255, 255, 0.85);
	padding-block: var(--se-space-8) var(--se-space-6);
	margin-top: var(--se-space-9);
}

.se-footer a:hover {
	color: #fff;
}

.se-footer__top {
	display: grid;
	gap: var(--se-space-7);
	grid-template-columns: 1fr;
	padding-bottom: var(--se-space-7);
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}

@media (min-width: 800px) {
	.se-footer__top {
		/* Wider than 1.3fr — the brand column also holds the 64px-tall
		   logo (~195px wide) before the nav links even start, so it needed
		   more room than the signup column to keep Our Story/Vision &
		   Mission/Contact/Collaborate on a single line without shrinking
		   the type past readable. */
		grid-template-columns: 1.6fr 1fr;
		align-items: start;
	}
}

.se-footer__brand {
	display: flex;
	align-items: flex-start;
	gap: var(--se-space-5);
}

.se-footer__logo {
	flex: none;
}

.se-footer__logo img {
	height: 64px;
	width: auto;
	/* the logo mark is dark-on-transparent; flip it to white for the dark
	   footer instead of needing a second logo asset */
	filter: brightness(0) invert(1);
}

.se-footer__brand-text {
	flex: 1;
	min-width: 0;
}

@media (max-width: 480px) {
	.se-footer__brand {
		flex-direction: column;
		gap: var(--se-space-4);
	}
}

.se-footer__logo-text {
	font-family: var(--se-font-display);
	font-size: 1.2rem;
	font-weight: 600;
	color: #fff;
}

.se-footer__tagline {
	max-width: 380px;
	margin-top: 0;
	font-size: 0.95rem;
	line-height: 1.6;
}

.se-footer__inline-links {
	list-style: none;
	margin: var(--se-space-4) 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--se-space-2) var(--se-space-4);
	font-size: 0.78rem;
	letter-spacing: 0.01em;
	text-transform: uppercase;
	white-space: nowrap;
}

/* Vertical padding lifts each link to a >=24px tap target (Lighthouse
   "touch targets" audit) without changing the row's visual layout width. */
.se-footer__inline-links a {
	display: inline-block;
	padding-block: 5px;
}

.se-footer__heading {
	font-family: var(--se-font-display);
	font-size: 1.1rem;
	color: #fff;
	margin-bottom: var(--se-space-2);
}

.se-footer__signup p {
	font-size: 0.9rem;
	margin: 0 0 var(--se-space-4);
}

.se-footer__signup-form {
	display: flex;
	max-width: 380px;
	border-radius: var(--se-radius-pill);
	background: rgba(255, 255, 255, 0.08);
	border: 1px solid rgba(255, 255, 255, 0.25);
	overflow: hidden;
}

.se-footer__signup-form input {
	flex: 1;
	background: transparent;
	border: none;
	color: #fff;
	padding: var(--se-space-3) var(--se-space-5);
	font: inherit;
}

.se-footer__signup-form input::placeholder {
	color: rgba(255, 255, 255, 0.55);
}

.se-footer__signup-form button {
	background: rgba(255, 255, 255, 0.14);
	border: none;
	color: #fff;
	width: 48px;
	font-size: 1.1rem;
	cursor: pointer;
	transition: background-color 0.15s ease;
}

.se-footer__signup-form button:hover {
	background: rgba(255, 255, 255, 0.26);
}

.se-footer__bottom {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	gap: var(--se-space-3);
	padding-top: var(--se-space-6);
	font-size: 0.82rem;
	opacity: 0.75;
}

.se-footer__legal {
	display: flex;
	gap: var(--se-space-4);
}

.se-footer__social {
	display: flex;
	align-items: center;
	gap: var(--se-space-3);
	text-transform: uppercase;
	letter-spacing: 0.04em;
	font-size: 0.78rem;
}

.se-footer__social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto; /* don't let the flex row shrink the icon below 28px */
	width: 28px;
	height: 28px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.12);
}

.se-footer__social a:hover {
	background: rgba(255, 255, 255, 0.22);
}

/* ==========================================================================
   Cookie consent banner — full-width bar pinned to the bottom of the
   viewport, two equal outline buttons (Decline / Accept). Shown once per
   browser (assets/js/cookie-consent.js checks localStorage before
   un-hiding it) — see footer.php for the markup. Made a full-width bar
   2026-09-06 (was a small bottom-right card) so it's actually noticed and
   the analytics opt-in isn't lost to people who never saw it.
   ========================================================================== */
.se-cookie-banner {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 200;
	background: var(--se-surface);
	color: var(--se-text);
	border-top: 1px solid var(--se-border);
	box-shadow: 0 -6px 28px -8px rgba(30, 25, 15, 0.28);
	padding: var(--se-space-4) var(--se-space-5);
	padding-bottom: calc(var(--se-space-4) + env(safe-area-inset-bottom, 0px));
	transition: opacity 0.2s ease, transform 0.2s ease;
}

.se-cookie-banner[hidden] {
	display: none;
}

.se-cookie-banner--hiding {
	opacity: 0;
	transform: translateY(100%);
	pointer-events: none;
}

.se-cookie-banner__inner {
	max-width: var(--se-container);
	margin: 0 auto;
	display: flex;
	align-items: center;
	gap: var(--se-space-5);
}

.se-cookie-banner__text {
	flex: 1 1 auto;
	margin: 0;
	font-size: 0.9rem;
	line-height: 1.5;
	color: var(--se-text);
}

.se-cookie-banner__text a {
	color: var(--se-text);
	text-decoration: underline;
	text-decoration-color: var(--se-border);
}

.se-cookie-banner__actions {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	gap: var(--se-space-3);
}

/* Both buttons are .se-button (outline pill); these tokens just make the
   pair a touch more compact than a body CTA and force them equal-width. */
.se-cookie-banner__btn {
	min-width: 128px;
	justify-content: center;
	padding: var(--se-space-2) var(--se-space-4);
	font-size: 0.88rem;
	white-space: nowrap;
}

@media (max-width: 640px) {
	.se-cookie-banner__inner {
		flex-direction: column;
		align-items: stretch;
		gap: var(--se-space-3);
	}
	.se-cookie-banner__btn {
		flex: 1;
	}
}

/* ==========================================================================
   GPX download button (in .se-quick-facts / single-journey.php's own block)
   + the email-capture modal it opens, see assets/js/gpx-modal.js
   ========================================================================== */
.se-quick-facts__item--gpx {
	justify-content: flex-start;
	align-items: flex-start;
}

@media (max-width: 699px) {
	/* At the 2-column mobile grid (repeat(2, 1fr)), each column is far
	   narrower than several languages' translated button label (confirmed
	   live: French "Télécharger la trace GPX" made the whole quick-facts
	   card overflow the viewport horizontally). Spanning the full row
	   gives the button the whole card's width to fit in instead of half. */
	.se-quick-facts__item--gpx {
		grid-column: 1 / -1;
		margin-top: var(--se-space-2);
	}
}

@media (min-width: 700px) {
	.se-quick-facts__item--gpx {
		/* Stay on the same flex line as the 4 stat items when there's
		   room -- margin-left:auto consumes all the leftover space on
		   that line, pinning the button flush against the card's right
		   padding edge (the same inset the first stat item has on the
		   left, since flex items never overflow past the padding box).
		   If the line genuinely doesn't have room (long DE/FR/ES labels
		   at narrower widths), flex-wrap wraps it to its own new row --
		   still flush against the same right inset, never past it. */
		margin-left: auto;
	}
}

.se-gpx-btn {
	white-space: nowrap;
}

.se-journey-gpx {
	margin-top: var(--se-space-5);
}

.se-gpx-modal-backdrop {
	position: fixed;
	inset: 0;
	background: rgba(20, 16, 10, 0.5);
	z-index: 300;
}

.se-gpx-modal-backdrop[hidden] {
	display: none;
}

.se-gpx-modal {
	position: fixed;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	/* Widened from 420px, plus the title copy itself was shortened (see
	   se_gpx_modal_strings()) -- together give every language's translated
	   title (French/German ran longest) enough room to sit on one line
	   instead of breaking mid-phrase ("this / route"). */
	width: min(460px, calc(100% - var(--se-space-6)));
	/* Warm cream instead of stark white -- matches the site's own surface
	   tone (already used for quick-facts callouts etc.) and the tone of the
	   HTML emails, rather than reading as a generic unbranded plugin popup. */
	background: var(--se-surface-warm);
	border-radius: var(--se-radius-card);
	/* Layered + warmed: the shared --se-shadow-card token is already
	   soft-edged, but this doubles it up with the site's actual brown
	   (--se-primary, 74/56/38) instead of the token's neutral dark-warm
	   rgba, and adds a second tighter layer for depth without a hard edge. */
	box-shadow: 0 32px 64px -24px rgba(74, 56, 38, 0.35), 0 10px 24px -12px rgba(74, 56, 38, 0.18);
	padding: var(--se-space-6);
	z-index: 301;
}

.se-gpx-modal[hidden] {
	display: none;
}

.se-gpx-modal__close {
	position: absolute;
	/* Pulled further from the corner (was --se-space-3/12px) so it no
	   longer visually crowds the title directly below/beside it. */
	top: var(--se-space-4);
	right: var(--se-space-4);
	/* Pinned on every box-model axis, not just width/height -- a bare
	   <button> picks up Kadence's (parent theme) own padding by default,
	   and even under this theme's .se * { box-sizing: border-box } reset
	   that was enough to render as an oval instead of a circle in
	   practice (confirmed live via screenshot). Zeroing padding/margin and
	   pinning min/max alongside width/height forces an exact 32x32 box
	   regardless of what else tries to size it. */
	box-sizing: border-box;
	width: 32px;
	height: 32px;
	min-width: 32px;
	min-height: 32px;
	max-width: 32px;
	max-height: 32px;
	padding: 0;
	margin: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	/* Same visual language as .se-button (the "Get the track" button right
	   below it) instead of a plain filled circle -- transparent fill, dark
	   outline -- so the two controls read as one family, not two different
	   UI kits. */
	background: transparent;
	border: 1.5px solid var(--se-text);
	border-radius: 50%;
	color: var(--se-text);
	font-size: 18px;
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.15s ease, box-shadow 0.15s ease;
}

/* Kadence (parent theme) styles bare <button> elements with its own
   palette-blue hover fill by default -- the same class of leak already
   documented elsewhere in this project (.se-hg-filters .se-pill, footer
   signup button). Needs an explicit override, not just a rest-state color.
   Matches .se-button:hover's own treatment (bg-alt tint + soft glow) for
   the same "same family" reason as the rest state above. */
.se-gpx-modal__close:hover {
	background: var(--se-bg-alt);
	box-shadow: 0 0 0 4px rgba(42, 36, 28, 0.1);
}

.se-gpx-modal__title-row {
	display: flex;
	align-items: center;
	gap: var(--se-space-3);
	margin: 0 0 var(--se-space-2);
	padding-right: var(--se-space-6);
}

.se-gpx-modal__icon {
	flex-shrink: 0;
	width: 28px;
	height: 28px;
	color: var(--se-accent);
}

.se-gpx-modal__title {
	margin: 0;
	font-size: 1.3rem;
}

.se-gpx-modal__text {
	/* More room before the form than before the title (var(--se-space-2)
	   above) -- the description reads as part of the "what is this"
	   intro block, then a clearer gap signals "now the actual form
	   starts", instead of title/text/input all sitting at the same
	   tight rhythm. */
	margin: 0 0 var(--se-space-6);
	color: var(--se-text-soft);
	font-size: 0.95rem;
	line-height: 1.5;
}

.se-gpx-modal__row {
	display: flex;
	gap: var(--se-space-3);
}

.se-gpx-modal__row input[type="email"] {
	flex: 1;
	min-width: 0;
	padding: var(--se-space-3) var(--se-space-4);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-sm);
	font-family: var(--se-font-body);
	font-size: 0.95rem;
	color: var(--se-text);
	background: var(--se-surface);
}

.se-gpx-modal__disclaimer {
	margin: var(--se-space-4) 0 0;
	/* Deliberately styled as a caption, not body copy: smaller than the
	   description text above it and visibly lighter, so it reads as fine
	   print rather than a third paragraph competing for attention. */
	font-size: 0.72rem;
	color: var(--se-text-muted);
	opacity: 0.85;
	line-height: 1.5;
}

.se-gpx-modal__error {
	margin: var(--se-space-3) 0 0;
	font-size: 0.85rem;
	color: var(--se-critical);
}

.se-gpx-modal__error[hidden] {
	display: none;
}

@media (max-width: 480px) {
	.se-gpx-modal__row {
		flex-direction: column;
	}
}

/* ==========================================================================
   "First time in Slovenia" page — bespoke Shopify section (se-first-time),
   no .liquid captured in old_code, reconstructed from the live original's
   DOM/computed styles. See page-first-time.php.
   ========================================================================== */
.se-first-time {
	max-width: none;
	color: var(--se-text-soft);
}

.se-first-time p {
	color: var(--se-text-soft);
	line-height: 1.7;
}

.se-first-time ul,
.se-first-time ol {
	padding-left: 1.3em;
}

.se-first-time li + li {
	margin-top: var(--se-space-2);
}

.se-first-time__block > * + * {
	margin-top: var(--se-space-4);
}

.se-first-time p a,
.se-first-time__links a {
	color: var(--se-primary);
	text-decoration: underline;
	text-underline-offset: 2px;
}

.se-first-time__hero {
	margin: 0 0 var(--se-space-6);
}

.se-first-time__eyebrow {
	margin: 0 0 var(--se-space-2);
	font-size: 0.95rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: rgba(42, 36, 28, 0.75);
}

.se-first-time__hero h1 {
	margin: 0 0 var(--se-space-3);
}

.se-first-time__lead {
	max-width: 640px;
	color: rgba(42, 36, 28, 0.85);
}

.se-first-time__quickbar {
	display: grid;
	/* minmax(0, 1fr), not bare 1fr: a bare 1fr track has an implicit
	   min-width of "auto" (its content's min-content size) -- if a child
	   ever contains something that refuses to shrink (like the injected
	   third-party widgets in .se-first-time__grid below), the track would
	   grow to fit it instead of clipping/scrolling, blowing out the whole
	   page on mobile. minmax(0, 1fr) removes that implicit floor. */
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--se-space-4);
	margin: var(--se-space-5) 0;
}

.se-first-time__quickitem {
	background: rgba(255, 255, 255, 0.9);
	border: 1px solid rgba(0, 0, 0, 0.05);
	border-radius: 16px;
	padding: var(--se-space-4) var(--se-space-5);
	box-shadow: 0 6px 18px rgba(0, 0, 0, 0.04);
}

.se-first-time__quickitem-title {
	display: block;
	margin-bottom: var(--se-space-1);
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	color: rgba(42, 36, 28, 0.75);
}

.se-first-time__quickitem p {
	margin: 0;
}

.se-first-time__callout {
	background: rgba(240, 247, 241, 0.95);
	border: 1px solid rgba(255, 255, 255, 0.9);
	border-radius: 12px;
	padding: var(--se-space-4) var(--se-space-5);
}

.se-first-time__callout p {
	margin: 0;
}

.se-first-time__cta {
	margin-top: var(--se-space-4);
}

.se-first-time__grid {
	display: grid;
	/* minmax(0, 1fr) -- see .se-first-time__quickbar above. This is the
	   grid that actually hosts the affiliate widgets (insurance/flights/
	   compensair/buses), so it's the one most exposed to the blowout. */
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--se-space-6);
	margin-top: var(--se-space-6);
}

.se-first-time__block {
	margin-bottom: var(--se-space-6);
}

.se-first-time__block:last-child {
	margin-bottom: 0;
}

.se-first-time__block h2 {
	font-size: 1.4rem;
}

.se-first-time__costs {
	margin-top: var(--se-space-4);
}

.se-first-time__costs h3 {
	font-size: 1.05rem;
	margin-bottom: var(--se-space-3);
}

.se-first-time__costs table {
	display: block;
	width: 100%;
	max-width: 100%;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	border-collapse: collapse;
}

.se-first-time__costs th,
.se-first-time__costs td {
	padding: var(--se-space-3) var(--se-space-4);
	border: 1px solid rgba(42, 36, 28, 0.15);
	text-align: left;
	font-weight: 400;
}

.se-first-time__costs th {
	font-weight: 700;
}

.se-first-time__two-up {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--se-space-6);
	margin-bottom: var(--se-space-6);
}

.se-first-time__two-up .se-first-time__block {
	margin-bottom: 0;
}

.se-first-time__destinations {
	margin-bottom: var(--se-space-6);
}

.se-first-time__cards {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--se-space-4);
	margin-top: var(--se-space-4);
}

.se-first-time .se-first-time__card {
	display: block;
	background: var(--se-surface-warm);
	border-radius: 14px;
	padding: var(--se-space-4) var(--se-space-5);
	box-shadow: 0 8px 20px rgba(0, 0, 0, 0.04);
	transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.se-first-time .se-first-time__card:hover {
	box-shadow: 0 12px 28px rgba(0, 0, 0, 0.08);
	transform: translateY(-2px);
}

.se-first-time__card h3 {
	margin: 0 0 var(--se-space-1);
	font-size: 1.05rem;
}

.se-first-time__card p {
	margin: 0;
	font-size: 0.9rem;
	color: rgba(42, 36, 28, 0.75);
}

.se-first-time__links ul {
	padding-left: var(--se-space-5);
}

.se-first-time__links a {
	color: var(--se-primary);
	text-decoration: underline;
	text-underline-offset: 2px;
}

.se-first-time__disclaimer {
	margin-top: var(--se-space-4);
	font-size: 0.85rem;
	color: rgba(42, 36, 28, 0.65);
}

@media (max-width: 900px) {
	.se-first-time__quickbar,
	.se-first-time__grid,
	.se-first-time__two-up,
	.se-first-time__cards {
		grid-template-columns: minmax(0, 1fr);
	}

	.se-first-time__cards {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 560px) {
	.se-first-time__cards {
		grid-template-columns: minmax(0, 1fr);
	}
}

.se-hero-credit {
	margin: var(--se-space-2) 0 0;
	text-align: right;
	font-size: 0.78rem;
	color: var(--se-text-muted);
}

.se-hero-credit a {
	color: inherit;
}

/* ==========================================================================
   Live Soča river conditions (rafting-and-kayaking guide). 3 live gauge
   boxes coloured by rafting-flow status + a fixed threshold table. Rendered
   server-side from ARSO data into the .se-soca-flow-marker placeholder
   (se_render_soca_flow() in functions.php).
   ========================================================================== */
.se-soca-flow {
	margin: var(--se-space-6) 0;
}

.se-soca-flow__eyebrow {
	font-size: 0.68rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--se-accent);
	margin-bottom: var(--se-space-3);
}

.se-soca-flow__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--se-space-4);
}

@media (min-width: 620px) {
	.se-soca-flow__grid {
		grid-template-columns: repeat(3, 1fr);
	}
}

.se-soca-flow__box {
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-left: 5px solid var(--se-border);
	border-radius: var(--se-radius-sm);
	padding: var(--se-space-4);
	box-shadow: var(--se-shadow-soft);
	display: flex;
	flex-direction: column;
	gap: 0.15em;
}

.se-soca-flow__box--low     { border-left-color: #3E7CB1; }
.se-soca-flow__box--normal  { border-left-color: var(--se-info); }
.se-soca-flow__box--high    { border-left-color: var(--se-caution); }
.se-soca-flow__box--danger  { border-left-color: var(--se-critical); }

.se-soca-flow__name {
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--se-text-muted);
}

.se-soca-flow__q {
	font-family: var(--se-font-display);
	font-size: 1.6rem;
	font-weight: 700;
	color: var(--se-text);
	line-height: 1.1;
}

.se-soca-flow__box--low .se-soca-flow__q     { color: #3E7CB1; }
.se-soca-flow__box--normal .se-soca-flow__q  { color: var(--se-info); }
.se-soca-flow__box--high .se-soca-flow__q    { color: var(--se-caution); }
.se-soca-flow__box--danger .se-soca-flow__q  { color: var(--se-critical); }

.se-soca-flow__meta {
	font-size: 0.82rem;
	color: var(--se-text-muted);
}

.se-soca-flow__src,
.se-soca-flow__note {
	font-size: 0.82rem;
	color: var(--se-text-muted);
	margin: var(--se-space-3) 0 0;
}

.se-soca-flow__note {
	font-style: italic;
}

.se-soca-flow__unit-note {
	font-style: normal;
	opacity: 0.75;
}

/* Threshold table -- a rounded card, gauge name + route stacked in the row
   header, the range values sitting under pill-shaped column headers. */
.se-soca-flow__table-wrap {
	margin: var(--se-space-4) 0 0;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	background: var(--se-surface);
	box-shadow: var(--se-shadow-soft);
}

.se-prose .se-soca-flow__table {
	display: table;
	width: 100%;
	min-width: 460px;
	margin: 0;
	border: 0;
	border-radius: 0;
	background: none;
	box-shadow: none;
	border-collapse: collapse;
	font-size: 0.92rem;
}

.se-soca-flow__table thead th {
	padding: var(--se-space-4) 0.7em var(--se-space-3);
	text-align: center;
	font-size: 0.7rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--se-text-muted);
}

.se-soca-flow__table thead th:first-child {
	text-align: left;
	padding-left: var(--se-space-5);
}

.se-soca-flow__pill {
	display: inline-block;
	padding: 0.2em 0.7em;
	border-radius: var(--se-radius-pill);
	font-size: 0.68rem;
	font-weight: 800;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: #fff;
}

.se-soca-flow__pill--low    { background: #3E7CB1; }
.se-soca-flow__pill--normal { background: var(--se-info); }
.se-soca-flow__pill--high   { background: var(--se-caution); }
.se-soca-flow__pill--danger { background: var(--se-critical); }

.se-soca-flow__table tbody tr + tr th,
.se-soca-flow__table tbody tr + tr td {
	border-top: 1px solid var(--se-border);
}

.se-soca-flow__table tbody th[scope="row"] {
	padding: var(--se-space-4) var(--se-space-5);
	text-align: left;
	font-weight: 400;
	max-width: 320px;
}

.se-soca-flow__table tbody th[scope="row"] b {
	display: block;
	font-family: var(--se-font-display);
	font-size: 1rem;
	font-weight: 600;
	color: var(--se-text);
}

.se-soca-flow__table tbody th[scope="row"] span {
	display: block;
	margin-top: 0.15em;
	font-size: 0.8rem;
	color: var(--se-text-muted);
}

.se-soca-flow__table tbody td {
	padding: var(--se-space-4) 0.7em;
	text-align: center;
	font-variant-numeric: tabular-nums;
	color: var(--se-text);
	white-space: nowrap;
}

.se-soca-flow__table tbody td.se-soca-flow__td--muted {
	color: var(--se-text-muted);
}

/* ==========================================================================
   "In this article" auto table of contents
   ========================================================================== */
.se-toc {
	background: var(--se-surface-warm);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	padding: var(--se-space-5) var(--se-space-5) var(--se-space-4);
	margin: 0 0 var(--se-space-7);
	box-shadow: var(--se-shadow-soft);
}

.se-toc__title {
	margin: 0 0 var(--se-space-3);
	font-family: var(--se-font-display);
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--se-accent);
}

.se-toc__list {
	margin: 0;
	padding: 0;
	list-style: none;
	counter-reset: se-toc;
	columns: 2;
	column-gap: var(--se-space-6);
}

@media (max-width: 640px) {
	.se-toc__list { columns: 1; }
}

.se-toc__list li {
	break-inside: avoid;
	margin: 0 0 0.45em;
	counter-increment: se-toc;
	line-height: 1.4;
}

.se-toc__list li::before {
	content: counter(se-toc) ". ";
	color: var(--se-text-muted);
	font-variant-numeric: tabular-nums;
}

.se-toc__list a {
	color: var(--se-text);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color 0.15s ease, color 0.15s ease;
}

.se-toc__list a:hover,
.se-toc__list a:focus-visible {
	color: var(--se-accent);
	border-bottom-color: var(--se-accent);
}

.se-prose h2 {
	scroll-margin-top: calc(var(--wp-admin--admin-bar--height, 0px) + 84px);
}

/* ==========================================================================
   Custom schematic map of the Soča boating sectors (inline SVG diagram)
   ========================================================================== */
.se-soca-map {
	margin: var(--se-space-7) auto;
	max-width: 940px;
	--se-soca-pin-bg: var(--se-surface);
	--se-soca-chip-bg: var(--se-surface);
	--se-soca-town: var(--se-primary);
	--se-soca-arrow: #6b6155;
	--se-soca-wash: rgba(247, 244, 239, 0.60);
	--se-toc-arrow: var(--se-primary);
}

:root[data-theme="dark"] .se-soca-map {
	--se-soca-arrow: #b9b0a4;
	--se-soca-wash: rgba(26, 22, 16, 0.62);
}

@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) .se-soca-map {
		--se-soca-arrow: #b9b0a4;
		--se-soca-wash: rgba(26, 22, 16, 0.62);
	}
}

/* the diagram opens an enlarged view on click -- the frame is the click
   target, but it is a plain <div> (no focusable wrapper), so nothing draws
   a browser focus/hover ring around the whole card. */
.se-soca-map__frame {
	position: relative;
	cursor: zoom-in;
	-webkit-tap-highlight-color: transparent;
	-webkit-user-select: none;
	user-select: none;
}

.se-soca-map__frame ::selection {
	background: transparent;
}

/* small real button for keyboard users / an explicit affordance */
.se-soca-map__hint {
	position: absolute;
	top: 12px;
	right: 12px;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	gap: 4px;
	margin: 0;
	padding: 5px 10px;
	font-family: inherit;
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--se-text);
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-radius: 999px;
	box-shadow: var(--se-shadow-soft);
	opacity: 0.9;
	cursor: zoom-in;
	transition: opacity 0.15s ease;
	-webkit-tap-highlight-color: transparent;
}

.se-soca-map__frame:hover .se-soca-map__hint {
	opacity: 1;
}

.se-soca-map__hint:focus {
	outline: none;
}

.se-soca-map__hint:focus-visible {
	outline: 2px solid #b9723f;
	outline-offset: 2px;
}

.se-soca-map svg {
	display: block;
	width: 100%;
	height: auto;
	background: var(--se-surface-warm);
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-card);
	box-shadow: var(--se-shadow-soft);
	overflow: visible;
}

.se-soca-map figcaption {
	margin-top: var(--se-space-3);
	font-size: 0.84rem;
	line-height: 1.55;
	color: var(--se-text-muted);
	font-style: italic;
	text-align: center;
}

/* enlarged (click) view */
.se-soca-map__lightbox {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: clamp(10px, 3vw, 28px);
	background: rgba(20, 16, 10, 0.86);
	animation: seSocaFade 0.16s ease;
}

@keyframes seSocaFade {
	from { opacity: 0; }
	to   { opacity: 1; }
}

/* sized to fit the viewport on both axes (1000:648 aspect), never overflow it */
.se-soca-map__lightbox-box {
	width: min(1060px, 92vw, calc(84vh * 1.543));
	max-height: 90vh;
	overflow: auto;
	background: var(--se-surface-warm);
	border-radius: var(--se-radius-card);
	box-shadow: 0 24px 60px rgba(0, 0, 0, 0.5);
}

.se-soca-map__lightbox-box svg {
	display: block;
	width: 100%;
	height: auto;
	border: 0;
	border-radius: var(--se-radius-card);
}

.se-soca-map__lightbox-x {
	position: absolute;
	top: 16px;
	right: 20px;
	width: 44px;
	height: 44px;
	font-size: 26px;
	line-height: 1;
	color: #fff;
	background: rgba(0, 0, 0, 0.35);
	border: 1px solid rgba(255, 255, 255, 0.4);
	border-radius: 50%;
	cursor: pointer;
	-webkit-tap-highlight-color: transparent;
}

.se-soca-map__lightbox-x:focus-visible {
	outline: 2px solid #fff;
	outline-offset: 2px;
}

/* loose labels sit over the faint photo backdrop -- give them a soft halo */
.se-soca-map__town,
.se-soca-map__pinlabel,
.se-soca-map__flow,
.se-soca-map__legend text {
	paint-order: stroke fill;
	stroke: var(--se-surface-warm);
	stroke-width: 2.75px;
	stroke-linejoin: round;
}

.se-soca-map__town {
	font-family: var(--se-font-display);
	font-size: 17px;
	font-weight: 700;
	fill: var(--se-text);
}

.se-soca-map__seclabel {
	font-size: 13px;
	font-weight: 800;
	letter-spacing: 0.03em;
	fill: #fff;
	text-transform: uppercase;
}

.se-soca-map__grade {
	font-size: 12.5px;
	font-weight: 800;
}

.se-soca-map__pinnum {
	font-size: 12px;
	font-weight: 800;
}

.se-soca-map__pinlabel {
	font-size: 13px;
	font-weight: 600;
	fill: var(--se-text);
}

.se-soca-map__pinlabel.is-basic {
	fill: var(--se-text-muted);
	font-weight: 500;
}

.se-soca-map__flow {
	font-size: 12px;
	font-style: italic;
	fill: var(--se-text-muted);
}

.se-soca-map__bang {
	font-size: 13px;
	font-weight: 900;
	fill: #fff;
}

.se-soca-map__legend text {
	font-size: 13px;
	fill: var(--se-text-soft, var(--se-text));
}

@media (max-width: 560px) {
	.se-soca-map__pinlabel,
	.se-soca-map__town,
	.se-soca-map__legend text {
		font-size: 15px;
	}
}

/* ------------------------------------------------------------------
   FAQ blocks — se_style_faq_blocks() wraps every run of consecutive
   "?"-ending <h3> + answer pairs (the site-wide Q&A convention) into
   .se-faq at render time. Raw post_content stays plain <h3>/<p> so
   se_extract_faq_pairs() / FAQPage schema is unaffected.
   ------------------------------------------------------------------ */
.se-faq {
	display: grid;
	gap: var(--se-space-3);
	margin: var(--se-space-5) 0 var(--se-space-6);
}

.se-faq__item {
	position: relative;
	background: var(--se-surface);
	border: 1px solid var(--se-border);
	border-left: 3px solid var(--se-accent);
	border-radius: var(--se-radius-sm);
	padding: var(--se-space-4) var(--se-space-5);
	box-shadow: var(--se-shadow-soft);
}

.se-faq__q {
	margin: 0;
	font-family: var(--se-font-display);
	font-size: 1.05rem;
	font-weight: 700;
	line-height: 1.35;
	color: var(--se-text);
	padding-left: 1.9rem;
}

.se-faq__q::before {
	content: "Q";
	position: absolute;
	left: var(--se-space-4);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.35rem;
	height: 1.35rem;
	border-radius: var(--se-radius-pill);
	background: var(--se-accent-soft);
	color: var(--se-accent);
	font-size: 0.8rem;
	font-weight: 800;
	line-height: 1;
}

.se-faq__a {
	margin-top: var(--se-space-2);
	padding-left: 1.9rem;
	color: var(--se-text-soft);
}

.se-faq__a > *:first-child { margin-top: 0; }
.se-faq__a > *:last-child { margin-bottom: 0; }

@media (max-width: 560px) {
	.se-faq__item { padding: var(--se-space-4); }
	.se-faq__q,
	.se-faq__a { padding-left: 1.7rem; }
	.se-faq__q::before { left: 0; }
	.se-faq__item { padding-left: calc(var(--se-space-4) + 0.2rem); }
}

/* ------------------------------------------------------------------
   Photo strip / slider — <div class="se-photostrip"> of <figure><img>
   [<figcaption>]. CSS is a horizontal scroll-snap track (works with
   touch, trackpad, scrollbar, arrow keys); assets/js/photostrip.js
   adds prev/next buttons and a wrapper on top. Used in-article when a
   route has more photos than fit inline.
   ------------------------------------------------------------------ */
.se-photostrip-wrap {
	position: relative;
	margin: var(--se-space-5) 0 var(--se-space-6);
}

.se-photostrip {
	display: flex;
	gap: var(--se-space-3);
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: thin;
	scrollbar-color: var(--se-border) transparent;
	padding-bottom: var(--se-space-3);
}
.se-photostrip-wrap > .se-photostrip { margin: 0; }

.se-photostrip::-webkit-scrollbar { height: 6px; }
.se-photostrip::-webkit-scrollbar-track { background: transparent; }
.se-photostrip::-webkit-scrollbar-thumb { background: var(--se-border); border-radius: var(--se-radius-pill); }

.se-photostrip > figure {
	flex: 0 0 min(82%, 460px);
	margin: 0;
	scroll-snap-align: start;
}

.se-photostrip > figure > img {
	display: block;
	width: 100%;
	height: 300px;
	object-fit: cover;
	border-radius: var(--se-radius-sm);
	background: var(--se-surface-warm);
}

.se-photostrip > figure > figcaption {
	margin-top: var(--se-space-2);
	font-size: 0.85rem;
	line-height: 1.4;
	color: var(--se-text-muted);
}

.se-photostrip__nav {
	position: absolute;
	top: calc(150px - 18px);
	width: 36px;
	height: 36px;
	display: none;
	align-items: center;
	justify-content: center;
	border: 1px solid var(--se-border);
	border-radius: var(--se-radius-pill);
	background: var(--se-surface);
	color: var(--se-text);
	box-shadow: var(--se-shadow-soft);
	cursor: pointer;
	font-size: 18px;
	line-height: 1;
	padding: 0;
	transition: opacity 0.15s ease;
}
.se-photostrip__nav--prev { left: -8px; }
.se-photostrip__nav--next { right: -8px; }
.se-photostrip__nav[disabled] { opacity: 0.25; cursor: default; }
.se-photostrip__nav:focus-visible { outline: 2px solid var(--se-accent); outline-offset: 2px; }

@media (hover: hover) and (min-width: 700px) {
	.se-photostrip-wrap.is-enhanced .se-photostrip__nav { display: flex; }
	.se-photostrip-wrap.is-enhanced .se-photostrip { scrollbar-width: none; }
	.se-photostrip-wrap.is-enhanced .se-photostrip::-webkit-scrollbar { height: 0; }
}

@media (max-width: 560px) {
	.se-photostrip > figure { flex-basis: 88%; }
	.se-photostrip > figure > img { height: 230px; }
}
