/*
Theme Name:   Hello Elementor Child
Description:  Blog post and blog listing templates for the Logic Square 2026 site. Reproduces the reference article's layout and section structure in the project's dark design system, and reuses the existing create-block/header and create-block/footer blocks rather than shipping its own chrome. See DESIGN-AUDIT.md.
Author:       Logic Square
Template:     hello-elementor
Version:      2.0.0
Requires PHP: 7.4
Text Domain:  hello-elementor-child
*/

/* =========================================================================
 * Design tokens.
 *
 * Palette, type and component values come from the project's own 2026 blocks
 * (INS = insight-what-a-21b-platform-taught-us, HDR = header, FTR = footer,
 * IFS = industry-financial-services). Layout and section structure come from
 * the reference article (REF). Every value is traced in DESIGN-AUDIT.md.
 * No color values appear anywhere below this block.
 *
 * Declared on :root rather than on the block, because the page shell rules
 * below target <html> and <body>, which sit above any wrapper. This
 * stylesheet is only enqueued on single posts and the blog listings, so
 * nothing leaks elsewhere.
 * ====================================================================== */

:root {
	/* surfaces */
	--ls-bg: #060B14;              /* INS page background */
	--ls-surface: #081120;         /* INS card background */
	--ls-placeholder: #F7F7F7;     /* neutral light grey, empty image panels (hero + cards) */
	--ls-surface-alt: #0A1524;     /* INS avatar / subscribe row */
	--ls-scroll-thumb: #223047;    /* INS scrollbar thumb */

	/* ink */
	--ls-title: #FFFFFF;           /* INS h1, prose strong */
	--ls-heading: #EDF2FA;         /* INS prose h2/h3, card titles */
	--ls-text: rgba(210, 222, 240, 0.85);   /* INS prose p */
	--ls-text-strong: rgba(226, 236, 250, 0.92); /* INS callout body */
	--ls-muted: rgba(199, 211, 230, 0.75);  /* INS faq body, author bio */
	--ls-meta: rgba(148, 163, 184, 0.8);    /* INS breadcrumb, meta */
	--ls-meta-dim: rgba(148, 163, 184, 0.6);/* INS tertiary meta */

	/* lines */
	--ls-border: rgba(148, 163, 184, 0.16);       /* INS card border */
	--ls-border-soft: rgba(148, 163, 184, 0.12);  /* INS hero rule */
	--ls-border-mid: rgba(148, 163, 184, 0.14);   /* INS divider */
	--ls-border-strong: rgba(148, 163, 184, 0.25);/* INS pill border */

	/* accent */
	--ls-accent: #4ADE80;          /* INS/HDR accent */
	--ls-accent-mid: #2FA45C;      /* INS rule, underline */
	--ls-accent-deep: #1B8A47;     /* INS cta hover, HDR button */
	--ls-accent-btn: #17743B;      /* INS cta button */
	--ls-accent-line: rgba(74, 222, 128, 0.4);  /* INS avatar ring, pill */
	--ls-accent-line-hi: rgba(74, 222, 128, 0.5); /* INS card hover border */
	--ls-accent-wash: rgba(74, 222, 128, 0.1);  /* INS subscribe hover */

	/* effects */
	--ls-glow: radial-gradient(800px 380px at 80% 0%, rgba(31, 58, 95, 0.4), transparent 70%); /* INS hero */
	--ls-glow-cta: radial-gradient(700px 420px at 50% 60%, rgba(46, 164, 92, 0.14), transparent 70%); /* INS cta */
	--ls-grid: linear-gradient(#fff 1px, transparent 1px), linear-gradient(90deg, #fff 1px, transparent 1px); /* INS grid overlay */
	--ls-fade-mask: linear-gradient(#000, transparent); /* alpha ramp, not a palette color */
	--ls-shadow-cta: 0 18px 36px -14px rgba(46, 164, 92, 0.6); /* INS cta hover */
	--ls-shadow-card: 0 18px 40px -24px rgba(0, 0, 0, 0.8);    /* derived from INS cta shadow form */
	--ls-media-fade: linear-gradient(180deg, rgba(6, 11, 20, 0) 0%, rgba(6, 11, 20, 0.92) 88%); /* REF meta overlay, recolored */

	/* type */
	--ls-font-display: "Source Serif 4", Georgia, serif;       /* INS headings */
	--ls-font-body: Inter, system-ui, sans-serif;              /* INS body */
	--ls-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace; /* INS eyebrows */

	/* layout */
	--ls-container: 1280px;                    /* HDR/FTR block container, so the article lines up with the site nav and footer */
	--ls-measure: 920px;                       /* INS article column, widened with the container */
	--ls-pad-x: clamp(20px, 4vw, 44px);        /* INS region padding */
	--ls-pad-top: clamp(96px, 10vw, 124px);    /* INS hero top, clears the fixed header */
	--ls-pad-bottom: clamp(48px, 6vw, 64px);   /* INS region bottom */
	--ls-gap-section: clamp(40px, 5vw, 56px);  /* INS section rhythm */
	--ls-gap-block: 48px;                      /* INS section margin-top */
	--ls-radius: 14px;                         /* INS cards */
	--ls-radius-sm: 12px;                      /* INS small cards */
	--ls-radius-btn: 8px;                      /* INS buttons */
	--ls-radius-pill: 999px;                   /* INS pills */
	--ls-anchor-offset: 96px;                  /* INS prose scroll-margin-top */
}

/* =========================================================================
 * Page shell. The post and the listing both carry the site's own header and
 * footer blocks, so the parent theme's chrome is hidden and the page
 * background matches them.
 *
 * Every rule here is gated on `:has(.ls-single)` or `:has(.ls-archive)`, which
 * are true only when one of this theme's templates actually rendered. That
 * matters: if an Elementor Single or Archive template ever takes over a view,
 * neither class is printed, none of this applies, and that page is left
 * exactly as Elementor drew it.
 * ====================================================================== */

html:has(.ls-single),
html:has(.ls-archive) {
	background: var(--ls-bg);
	scrollbar-color: var(--ls-scroll-thumb) var(--ls-bg);
	scrollbar-width: thin;
}

body:has(.ls-single),
body:has(.ls-archive) {
	background: var(--ls-bg);
}

/* The header and footer blocks each set `overflow-x: hidden` on html and body
   to contain their own full-bleed sections. On this template that makes body a
   scroll container, and a scroll container between a sticky element and the
   viewport is exactly what stops `position: sticky` from ever sticking, so the
   share rail scrolled away with the article instead of holding its place.
   `clip` contains the overflow identically and creates no scroll container.

   `!important` is required, not preferred: the block stylesheets are printed
   during body output and therefore land after this file, and their
   `body:has(.wp-block-create-block-footer)` selector carries exactly the same
   specificity as the one below, so source order would otherwise decide it. */
html:has(.ls-single),
body:has(.ls-single),
html:has(.ls-archive),
body:has(.ls-archive) {
	overflow-x: clip !important;
}

body:has(.ls-single) > header.site-header,
body:has(.ls-single) > footer.site-footer,
body:has(.ls-single) .site-header.dynamic-header,
body:has(.ls-single) .site-footer.dynamic-footer,
body:has(.ls-archive) > header.site-header,
body:has(.ls-archive) > footer.site-footer,
body:has(.ls-archive) .site-header.dynamic-header,
body:has(.ls-archive) .site-footer.dynamic-footer {
	display: none;
}

.ls-single {
	position: relative;
	background: var(--ls-bg);
	color: var(--ls-text);
	font-family: var(--ls-font-body);
	font-size: 16px;
	line-height: 1.65; /* INS body */
	-webkit-font-smoothing: antialiased;
	padding-top: var(--ls-pad-top);
	padding-bottom: var(--ls-pad-bottom);
	overflow-x: hidden;
	isolation: isolate;
}

/* The 2026 hero treatment, kept as a backdrop behind the top of the page
   rather than as its own band, so the title, image and share rail all start
   on the same line the way the reference article has them. */
.ls-single::before,
.ls-single::after {
	content: "";
	position: absolute;
	inset: 0 0 auto 0;
	height: 620px;
	z-index: -1;
	pointer-events: none;
}

.ls-single::before {
	opacity: 0.05; /* INS grid overlay */
	background-image: var(--ls-grid);
	background-size: 72px 72px;
	-webkit-mask-image: var(--ls-fade-mask);
	mask-image: var(--ls-fade-mask);
}

.ls-single::after {
	background: var(--ls-glow); /* INS hero glow */
}

.ls-single *,
.ls-single *::before,
.ls-single *::after,
.ls-archive *,
.ls-archive *::before,
.ls-archive *::after {
	box-sizing: border-box;
}

.ls-single img,
.ls-archive img {
	max-width: 100%;
	height: auto;
}

.ls-single__container {
	max-width: var(--ls-container);
	margin: 0 auto;
	padding-inline: var(--ls-pad-x);
}

/* Left column holds the title, image, article and CTA; the rail sits beside
   it and starts level with the title, exactly as the reference does. */
.ls-single__row {
	display: flex;
	flex-direction: column;
	gap: 24px;
	align-items: flex-start;
}

.ls-single__main {
	min-width: 0;
	width: 100%;
	max-width: var(--ls-measure);
}

.ls-single__article {
	min-width: 0;
	width: 100%;
}

.ls-single__rail {
	width: 100%;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.ls-single a:focus-visible,
.ls-single summary:focus-visible,
.ls-single button:focus-visible,
.ls-archive a:focus-visible,
.ls-archive button:focus-visible {
	outline: 2px solid var(--ls-accent);
	outline-offset: 3px;
}

@media (prefers-reduced-motion: no-preference) {
	html:has(.ls-single) {
		scroll-behavior: smooth;
	}
}

/* Shared eyebrow: mono, tracked, uppercase, accent. INS uses this everywhere. */
.ls-eyebrow {
	font-family: var(--ls-font-mono);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--ls-accent);
	margin: 0;
}

/* =========================================================================
 * 1. Title and deck, at the top of the left column.
 *    The breadcrumb, meta pill row and author byline were removed on request;
 *    the date, category and read time now sit on the featured image, which is
 *    where the reference article puts them.
 * ====================================================================== */

.ls-title {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: clamp(30px, 4vw, 50px); /* INS h1 */
	line-height: 1.1;
	letter-spacing: -0.018em;
	color: var(--ls-title);
	margin: 0;
}

.ls-deck {
	font-size: clamp(17px, 1.6vw, 20px); /* INS deck */
	color: var(--ls-muted);
	margin: 18px 0 0;
	max-width: 70ch;
}

/* =========================================================================
 * 2. Featured image.
 *    The figure is always present, in both states, and its box is identical
 *    either way: same width, same 16:9 height, same radius, border, shadow
 *    and margins. Only its contents differ, so the article below never moves
 *    and no layout shift is possible.
 *      state A  .ls-media          -> the image
 *      state B  .ls-media--empty   -> a plain light grey panel
 * ====================================================================== */

.ls-media {
	position: relative;
	margin: 28px 0 0;
	border-radius: var(--ls-radius);
	overflow: hidden;
	border: 1px solid var(--ls-border);
	background: var(--ls-surface);
	box-shadow: var(--ls-shadow-card);
}

.ls-media__img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 16 / 9;
	object-fit: cover;
}

/* State B. Same 16:9 box as the image, so the figure keeps its exact height.
   Deliberately empty: no icon, no text, no <img>, nothing to fail to load. */
.ls-media__placeholder {
	display: block;
	width: 100%;
	aspect-ratio: 16 / 9;
	background: var(--ls-placeholder);
}

.ls-media--empty {
	background: var(--ls-placeholder);
}

/* Date, category and read time, over a fade at the foot of the image. This is
   where the reference article puts them. */
.ls-media__meta {
	position: absolute;
	inset: auto 0 0 0;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px 18px;
	padding: 40px 20px 16px;
	background: var(--ls-media-fade);
	font-family: var(--ls-font-mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ls-muted);
}

.ls-media__meta a {
	color: var(--ls-accent);
	text-decoration: none;
	border: 1px solid var(--ls-accent-line);
	border-radius: var(--ls-radius-pill);
	padding: 4px 11px; /* INS category pill */
}

.ls-media__meta a:hover {
	border-color: var(--ls-accent);
}

/* =========================================================================
 * 3. Table of contents
 * ====================================================================== */

.ls-toc {
	margin-top: 36px; /* INS abar */
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius);
	background: var(--ls-surface);
	padding: clamp(20px, 2.6vw, 26px);
}

.ls-toc summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	cursor: pointer;
	list-style: none;
}

.ls-toc summary::-webkit-details-marker {
	display: none;
}

.ls-toc__toggle {
	font-family: var(--ls-font-mono);
	font-size: 20px;
	font-weight: 500;
	color: var(--ls-meta);
	line-height: 1;
	transition: transform 0.2s;
}

.ls-toc[open] .ls-toc__toggle {
	transform: rotate(45deg);
}

.ls-toc ol {
	list-style: none;
	margin: 16px 0 0;
	padding: 0;
	counter-reset: ls-toc;
}

.ls-toc ol ol {
	margin: 4px 0 0;
	padding-left: 20px;
}

.ls-toc li {
	counter-increment: ls-toc;
	padding: 4px 0;
}

.ls-toc a {
	display: inline-flex;
	gap: 10px;
	font-size: 15px;
	line-height: 1.5;
	color: var(--ls-muted);
	text-decoration: none;
	transition: color 0.2s;
}

.ls-toc a::before {
	content: counters(ls-toc, ".");
	font-family: var(--ls-font-mono);
	font-size: 11px;
	letter-spacing: 0.08em;
	color: var(--ls-accent);
	flex-shrink: 0;
	padding-top: 3px;
}

.ls-toc a:hover {
	color: var(--ls-heading);
}

/* =========================================================================
 * 4. Post content. Every Gutenberg element inherits the design, so no post
 *    ever needs styling by hand. Mirrors the INS `.prose` scale.
 * ====================================================================== */

.ls-prose {
	margin-top: var(--ls-gap-block);
}

.ls-prose > :first-child {
	margin-top: 0;
}

.ls-prose p {
	font-size: 17.5px;   /* INS prose p */
	line-height: 1.75;
	color: var(--ls-text);
	margin: 20px 0 0;
	max-width: 80ch;
}

.ls-prose :where(h2, h3, h4, h5, h6) {
	font-family: var(--ls-font-display);
	font-weight: 600;
	color: var(--ls-heading);
}

.ls-prose h2 {
	font-size: clamp(24px, 2.6vw, 32px); /* INS prose h2 */
	line-height: 1.18;
	letter-spacing: -0.015em;
	margin: 48px 0 0;
}

.ls-prose h3 {
	font-size: 21px; /* INS prose h3 */
	line-height: 1.22;
	margin: 32px 0 0;
}

.ls-prose h4 {
	font-size: 18px; /* INS faq heading */
	line-height: 1.28;
	margin: 26px 0 0;
}

.ls-prose h5,
.ls-prose h6 {
	font-size: 17px;
	line-height: 1.3;
	margin: 22px 0 0;
}

.ls-prose :where(h2, h3, h4)[id] {
	scroll-margin-top: var(--ls-anchor-offset); /* INS */
}

.ls-prose strong,
.ls-prose b {
	color: var(--ls-title); /* INS prose strong */
	font-weight: 600;
}

.ls-prose a {
	color: var(--ls-heading);
	text-decoration: underline;
	text-decoration-color: var(--ls-accent-mid); /* INS prose a */
	text-underline-offset: 3px;
}

.ls-prose a:hover {
	color: var(--ls-accent);
}

.ls-prose :where(ul, ol) {
	margin: 20px 0 0;
	padding-left: 22px;
	max-width: 80ch;
	color: var(--ls-text);
}

.ls-prose li {
	font-size: 17.5px;
	line-height: 1.75;
	padding: 4px 0;
}

.ls-prose li::marker {
	color: var(--ls-accent);
}

.ls-prose :where(ul, ol) :where(ul, ol) {
	margin-top: 4px;
}

.ls-prose blockquote {
	font-family: var(--ls-font-display);
	font-size: clamp(21px, 2.4vw, 28px); /* INS blockquote */
	line-height: 1.34;
	color: var(--ls-text-strong);
	border-left: 3px solid var(--ls-accent-mid);
	padding-left: 24px;
	margin: 32px 0;
	max-width: 72ch;
}

.ls-prose blockquote p {
	font-size: inherit;
	line-height: inherit;
	color: inherit;
	margin: 0;
	max-width: none;
}

.ls-prose blockquote cite {
	display: block;
	margin-top: 12px;
	font-family: var(--ls-font-mono);
	font-size: 11px;
	font-style: normal;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ls-meta);
}

.ls-prose figure {
	margin: 32px 0 0;
}

.ls-prose img {
	border-radius: var(--ls-radius-sm);
	border: 1px solid var(--ls-border);
}

/* Inline SVG pasted into a post carries a viewBox and no width or height.
   An <svg> in that state resolves to the full width of its column with a
   height taken from the viewBox ratio, so a 24px icon paints as a block the
   width of the article. `max-width: 100%` cannot catch it because the used
   width already is 100%. Nothing in body copy is meant to be taller than a
   line, so give it a line-sized box and let anything that states its own
   dimensions keep them. */
.ls-prose svg {
	width: 1.15em;
	height: 1.15em;
	vertical-align: -0.18em;
	flex-shrink: 0;
}

.ls-prose svg[width],
.ls-prose svg[height] {
	width: auto;
	height: auto;
	max-width: 100%;
}

/* Same class of overflow from embeds that arrive without a wrapper. */
.ls-prose :where(iframe, video, embed, object) {
	max-width: 100%;
}

.ls-prose figcaption {
	margin-top: 10px;
	font-size: 13px;
	color: var(--ls-meta);
}

.ls-prose hr {
	border: 0;
	border-top: 1px solid var(--ls-border-mid);
	margin: 40px 0 0;
}

.ls-prose :where(pre, code) {
	font-family: var(--ls-font-mono);
}

.ls-prose pre {
	margin: 24px 0 0;
	padding: 20px;
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius-sm);
	background: var(--ls-surface);
	font-size: 14px;
	line-height: 1.6;
	color: var(--ls-text-strong);
	overflow-x: auto;
}

.ls-prose code {
	font-size: 0.9em;
	background: var(--ls-surface);
	border: 1px solid var(--ls-border-soft);
	border-radius: 5px;
	padding: 2px 6px;
	color: var(--ls-heading);
}

.ls-prose pre code {
	background: none;
	border: 0;
	padding: 0;
}

.ls-table-scroll {
	margin: 28px 0 0;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius-sm);
}

/* The scroll wrapper alone was not enough on a phone. A table set to width
   100% and nothing else fits itself into whatever space it is given, so it
   squeezed to the viewport and wrapped every cell to one word per line rather
   than overflowing and scrolling. min-width is what makes it overflow, and
   overflow is what the wrapper was built to handle. */
.ls-prose table {
	width: 100%;
	min-width: 560px;
	border-collapse: collapse;
	font-size: 15.5px;
}

.ls-prose :where(th, td) {
	padding: 12px 16px;
	text-align: left;
	border-bottom: 1px solid var(--ls-border-soft);
}

.ls-prose th {
	font-family: var(--ls-font-mono);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ls-accent);
	background: var(--ls-surface);
}

.ls-prose tr:last-child :where(th, td) {
	border-bottom: 0;
}

/* Section takeaway: the bold italic closing line. */
.ls-prose p :where(strong em, em strong, b i, i b) {
	font-family: var(--ls-font-display);
	font-style: italic;
	font-weight: 600;
	color: var(--ls-heading);
}

.ls-pagelinks {
	margin-top: 32px;
	font-family: var(--ls-font-mono);
	font-size: 12px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--ls-meta);
}

/* =========================================================================
 * 5. AT A GLANCE callout
 * ====================================================================== */

.ls-glance {
	border-left: 3px solid var(--ls-accent-mid); /* INS TL;DR */
	background: var(--ls-surface);
	border-radius: 0 var(--ls-radius) var(--ls-radius) 0;
	padding: clamp(24px, 3vw, 32px);
	margin: 0 0 var(--ls-gap-block);
}

.ls-glance :where(h2, h3, h4, h5, h6) {
	font-family: var(--ls-font-mono);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--ls-accent);
	line-height: 1.4;
	margin: 0;
}

.ls-glance p {
	font-size: 17px; /* INS TL;DR body */
	line-height: 1.6;
	color: var(--ls-text-strong);
	margin: 12px 0 0;
	max-width: none;
}

.ls-glance > :last-child {
	margin-bottom: 0;
}

/* =========================================================================
 * 6. CTA band
 * ====================================================================== */

.ls-cta {
	position: relative;
	overflow: hidden;
	margin-top: var(--ls-gap-block);
	padding: clamp(32px, 5vw, 52px) clamp(22px, 3vw, 40px);
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius);
	background: var(--ls-surface);
	text-align: center;
}

.ls-cta::before {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--ls-glow-cta); /* INS cta glow */
	pointer-events: none;
}

.ls-cta > * {
	position: relative;
}

.ls-cta h2 {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: clamp(24px, 3.2vw, 36px); /* INS cta heading, scaled to column */
	line-height: 1.14;
	color: var(--ls-heading);
	margin: 12px 0 0;
	max-width: 24ch;
	margin-inline: auto;
}

.ls-cta__actions {
	margin: 28px 0 0;
}

.ls-btn {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	background: var(--ls-accent-btn); /* INS cta button */
	color: var(--ls-title);
	font-family: var(--ls-font-body);
	font-weight: 600;
	font-size: 15px;
	padding: 16px 32px;
	border: 0;
	border-radius: var(--ls-radius-btn);
	text-decoration: none;
	transition: transform 0.2s, box-shadow 0.2s, background 0.2s;
}

.ls-btn:hover,
.ls-btn:focus {
	transform: translateY(-2px);
	background: var(--ls-accent-deep);
	box-shadow: var(--ls-shadow-cta);
	color: var(--ls-title);
}

.ls-btn svg {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
}

/* =========================================================================
 * 7. Rail: share card.
 *    The rail holds the author card from section 13 and this share box, in
 *    that order.
 * ====================================================================== */

.ls-card {
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius);
	background: var(--ls-surface);
	padding: clamp(22px, 2.8vw, 30px); /* INS card padding */
}

.ls-card .ls-eyebrow {
	margin-bottom: 16px;
}

.ls-share {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ls-share a,
.ls-share button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 1px solid var(--ls-border-strong); /* INS pill border */
	border-radius: var(--ls-radius-btn);
	background: none;
	color: var(--ls-muted);
	transition: color 0.2s, border-color 0.2s, background 0.2s;
}

.ls-share button {
	cursor: pointer;
	font: inherit;
}

.ls-share a:hover,
.ls-share a:focus,
.ls-share button:hover,
.ls-share button:focus {
	color: var(--ls-accent);
	border-color: var(--ls-accent-line-hi);
	background: var(--ls-accent-wash); /* INS subscribe hover */
}

.ls-share svg {
	width: 16px;
	height: 16px;
}

/* Empty until the share button reports back, so the card does not reserve a
   blank line for a message that is usually absent. */
.ls-share__status {
	margin: 0;
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ls-accent);
}

.ls-share__status:not(:empty) {
	margin-top: 12px;
}

/* =========================================================================
 * 8. Related posts
 * ====================================================================== */

.ls-related {
	margin-top: var(--ls-gap-section);
}

.ls-related__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); /* INS keep-reading grid */
	gap: 16px;
	margin-top: 18px;
}

.ls-related__card {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius-sm);
	background: var(--ls-surface);
	overflow: hidden;
	transition: border-color 0.25s, transform 0.25s;
}

.ls-related__card:hover {
	border-color: var(--ls-accent-line-hi); /* INS card hover */
	transform: translateY(-2px);
}

/* The thumbnail box is always present, in both states. `padding-bottom` holds
   the 56% aspect box open before anything loads, so the card height is fixed
   whether an image arrives or not: same box, no layout shift, no CLS. */
.ls-related__thumb {
	display: block;
	position: relative;
	padding-bottom: 56%;
	background: var(--ls-surface-alt);
}

/* State B. Same box, filled with the same neutral grey as the post hero
   placeholder. Deliberately empty: no icon, no text, no <img>. */
.ls-related__thumb--empty {
	background: var(--ls-placeholder);
}

.ls-related__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 0;
	border: 0;
}

.ls-related__text {
	padding: 22px; /* INS card padding */
	display: flex;
	flex-direction: column;
	flex-grow: 1;
}

.ls-related__cat {
	font-family: var(--ls-font-mono);
	font-size: 10px; /* INS card eyebrow */
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ls-accent);
	margin: 0;
}

.ls-related__cardtitle {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: 17px; /* INS card title */
	line-height: 1.28;
	margin: 8px 0 0;
	color: var(--ls-heading);
}

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

.ls-related__excerpt {
	font-size: 14.5px;
	line-height: 1.6;
	color: var(--ls-muted);
	margin: 10px 0 0;
}

.ls-related__date {
	font-family: var(--ls-font-mono);
	font-size: 10px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ls-meta-dim);
	margin: 16px 0 0;
	padding-top: 14px;
	border-top: 1px solid var(--ls-border-soft);
}

/* =========================================================================
 * Breakpoints. Mobile first; 360 is covered by the base rules.
 * ====================================================================== */

@media (min-width: 768px) {
	.ls-media figcaption {
		padding: 32px 26px 18px;
	}

	.ls-cta {
		padding: clamp(40px, 5vw, 60px) clamp(30px, 4vw, 48px);
	}
}

@media (min-width: 1025px) {
	.ls-single__row {
		flex-direction: row;
		gap: 40px; /* REF gap between column and rail */
	}

	.ls-single__main {
		flex: 1;
		max-width: none;
		min-width: 0;
	}

	/* Beside the featured image, and it stays there while the article
	   scrolls. Proportion measured off the reference: roughly 75% article
	   to 21% rail inside the 1140 container. */
	.ls-single__rail {
		flex: 0 0 clamp(250px, 23%, 300px);
		width: auto;
		position: sticky;
		top: var(--ls-anchor-offset);
		align-self: flex-start;
	}

	.ls-related__grid {
		grid-template-columns: repeat(3, 1fr); /* REF three cards */
	}
}

@media (prefers-reduced-motion: reduce) {
	.ls-single *,
	.ls-single *::before,
	.ls-single *::after {
		transition-duration: 0.01ms !important;
		animation-duration: 0.01ms !important;
	}

	.ls-related__card:hover,
	.ls-btn:hover {
		transform: none;
	}
}

/* The rules that used to hide Elementor's empty featured image container were
   removed here. Keeping the container is now the required behaviour in both
   templates, so an Elementor-drawn post showing its own grey panel is correct
   and is left alone. */

/* =========================================================================
 * 12. Blog index and post archives.
 *
 * Drawn by template-parts/archive.php. Shares the token block above and the
 * page shell rules at the top of this file, so a reader moving from the list
 * to an article stays in one design. Nothing here introduces a colour: every
 * value resolves to a custom property already traced in DESIGN-AUDIT.md.
 * ====================================================================== */

.ls-archive {
	position: relative;
	background: var(--ls-bg);
	color: var(--ls-text);
	font-family: var(--ls-font-body);
	font-size: 16px;
	line-height: 1.65;
	-webkit-font-smoothing: antialiased;
	padding-top: var(--ls-pad-top);
	padding-bottom: var(--ls-pad-bottom);
	isolation: isolate;
}

/* The same hero glow the article uses, so the two pages share a horizon. */
.ls-archive::before {
	content: "";
	position: absolute;
	inset: 0 0 auto;
	height: 520px;
	background: var(--ls-glow);
	pointer-events: none;
	z-index: -1;
}

.ls-archive__container {
	max-width: var(--ls-container);
	margin: 0 auto;
	padding-inline: var(--ls-pad-x);
}

/* ---- Intro ---- */

.ls-archive__intro {
	max-width: var(--ls-measure);
}

/* The eyebrow is dropped on the main list, so whichever element comes first
   sits flush against the region padding either way. */
.ls-archive__intro > :first-child {
	margin-top: 0;
}

.ls-archive__title {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: clamp(34px, 5vw, 54px);
	line-height: 1.08;
	letter-spacing: -0.02em;
	color: var(--ls-title);
	margin: 14px 0 0;
}

.ls-archive__deck {
	font-size: clamp(16px, 1.7vw, 19px);
	line-height: 1.6;
	color: var(--ls-muted);
	margin: 16px 0 0;
	max-width: 68ch;
}

/* ---- Category pills ---- */

.ls-filters {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin-top: 32px;
	padding-bottom: 28px;
	border-bottom: 1px solid var(--ls-border-soft);
}

.ls-filters__pill {
	display: inline-flex;
	align-items: center;
	font-family: var(--ls-font-mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ls-meta);
	text-decoration: none;
	padding: 9px 16px;
	border: 1px solid var(--ls-border-strong);
	border-radius: var(--ls-radius-pill);
	transition: color 0.2s, border-color 0.2s, background 0.2s;
}

.ls-filters__pill:hover,
.ls-filters__pill:focus {
	color: var(--ls-accent);
	border-color: var(--ls-accent-line-hi);
	background: var(--ls-accent-wash);
}

.ls-filters__pill.is-current {
	color: var(--ls-accent);
	border-color: var(--ls-accent-line);
	background: var(--ls-accent-wash);
}

/* ---- Lead card ----
   One wide card at the head of page one. Stacked by default; the image moves
   beside the text at the desktop breakpoint. */

.ls-lead {
	display: grid;
	gap: 24px;
	margin-top: var(--ls-gap-section);
	padding-bottom: var(--ls-gap-section);
	border-bottom: 1px solid var(--ls-border-soft);
}

.ls-lead__media {
	display: block;
	position: relative;
	overflow: hidden;
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius);
	background: var(--ls-surface);
	aspect-ratio: 16 / 9;
	box-shadow: var(--ls-shadow-card);
}

.ls-lead__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	border: 0;
	border-radius: 0;
}

/* No image found. A plain panel holding exactly the space the image would
   have taken, so the row below never moves. No icon, no text, no <img>. */
.ls-lead__media--empty {
	background: var(--ls-placeholder);
}

.ls-lead__body {
	align-self: center;
}

.ls-lead__title {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: clamp(24px, 3vw, 34px);
	line-height: 1.16;
	letter-spacing: -0.015em;
	margin: 14px 0 0;
}

.ls-lead__title a {
	color: var(--ls-title);
	text-decoration: none;
	transition: color 0.2s;
}

.ls-lead__title a:hover,
.ls-lead__title a:focus {
	color: var(--ls-accent);
}

.ls-lead__excerpt {
	font-size: 16.5px;
	line-height: 1.7;
	color: var(--ls-muted);
	margin: 14px 0 0;
	max-width: 66ch;
}

/* ---- Grid ---- */

.ls-archive__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 28px 24px;
	margin-top: var(--ls-gap-section);
}

.ls-postcard {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius-sm);
	background: var(--ls-surface);
	overflow: hidden;
	transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s;
}

.ls-postcard:hover,
.ls-postcard:focus-within {
	transform: translateY(-3px);
	border-color: var(--ls-accent-line-hi);
	box-shadow: var(--ls-shadow-card);
}

.ls-postcard__media {
	display: block;
	position: relative;
	overflow: hidden;
	background: var(--ls-surface-alt);
	aspect-ratio: 16 / 9;
}

.ls-postcard__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	border: 0;
	border-radius: 0;
}

.ls-postcard__media--empty {
	background: var(--ls-placeholder);
}

.ls-postcard__body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: 20px 20px 22px;
}

.ls-postcard__cat,
.ls-lead__cat {
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	font-weight: 600;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ls-accent);
	margin: 0;
}

.ls-postcard__title {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: 19px;
	line-height: 1.26;
	margin: 10px 0 0;
}

.ls-postcard__title a {
	color: var(--ls-heading);
	text-decoration: none;
	transition: color 0.2s;
}

.ls-postcard__title a:hover,
.ls-postcard__title a:focus {
	color: var(--ls-accent);
}

.ls-postcard__excerpt {
	font-size: 14.5px;
	line-height: 1.65;
	color: var(--ls-muted);
	margin: 10px 0 0;
}

/* Pushed to the bottom of the card so a short excerpt does not float the
   meta line up and make a row of cards look ragged. */
.ls-postcard__meta,
.ls-lead__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px 14px;
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ls-meta-dim);
	margin: 18px 0 0;
}

.ls-postcard__meta {
	margin-top: auto;
	padding-top: 18px;
}

.ls-postcard__meta > * + *::before,
.ls-lead__meta > * + *::before {
	content: "";
	display: inline-block;
	width: 3px;
	height: 3px;
	border-radius: 50%;
	background: currentColor;
	vertical-align: middle;
	margin-right: 14px;
}

.ls-archive__empty {
	margin-top: var(--ls-gap-section);
	font-size: 17px;
	color: var(--ls-muted);
}

/* ---- Pagination ---- */

.ls-pager {
	margin-top: var(--ls-gap-section);
	padding-top: 32px;
	border-top: 1px solid var(--ls-border-soft);
}

.ls-pager__list {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	align-items: center;
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ls-pager .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 42px;
	height: 42px;
	padding: 0 14px;
	border: 1px solid var(--ls-border-strong);
	border-radius: var(--ls-radius-btn);
	font-family: var(--ls-font-mono);
	font-size: 12px;
	letter-spacing: 0.08em;
	color: var(--ls-muted);
	text-decoration: none;
	transition: color 0.2s, border-color 0.2s, background 0.2s;
}

.ls-pager a.page-numbers:hover,
.ls-pager a.page-numbers:focus {
	color: var(--ls-accent);
	border-color: var(--ls-accent-line-hi);
	background: var(--ls-accent-wash);
}

.ls-pager .page-numbers.current {
	color: var(--ls-title);
	background: var(--ls-accent-btn);
	border-color: var(--ls-accent-btn);
}

/* The ellipsis core prints between distant page numbers is not a control, so
   it loses the box and keeps only the type. */
.ls-pager .page-numbers.dots {
	border-color: transparent;
	background: none;
	min-width: 0;
	padding: 0 4px;
	color: var(--ls-meta-dim);
}

.ls-pager .prev,
.ls-pager .next {
	text-transform: uppercase;
}

/* The archive's CTA band reuses section 6 verbatim; only its rhythm against
   the list above it is set here. */
.ls-archive .ls-cta {
	margin-top: var(--ls-gap-section);
}

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

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

	.ls-lead {
		grid-template-columns: 1.05fr 1fr;
		gap: 40px;
		align-items: center;
	}
}

/* =========================================================================
 * 13. Author card.
 *
 * Sits above the share box in the rail, so it is styled for a column roughly
 * 220 to 280px wide: the identity block stacks beside a small avatar and the
 * bio runs full width underneath.
 * ====================================================================== */

.ls-author__head {
	display: flex;
	align-items: center;
	gap: 12px;
}

.ls-author__avatar {
	display: block;
	flex-shrink: 0;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	overflow: hidden;
	background: var(--ls-surface-alt);
	border: 1px solid var(--ls-accent-line);
}

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

/* Avatars turned off site wide. The ring keeps its size so the card and the
   share box below it do not move. */
.ls-author__avatar--empty {
	background: var(--ls-surface-alt);
}

.ls-author__id .ls-eyebrow {
	margin-bottom: 6px;
}

.ls-author__name {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: 17px;
	line-height: 1.2;
	color: var(--ls-title);
	margin: 0;
}

.ls-author__role {
	font-size: 12.5px;
	line-height: 1.45;
	color: var(--ls-meta);
	margin: 4px 0 0;
}

.ls-author__bio {
	font-size: 13.5px;
	line-height: 1.7;
	color: var(--ls-muted);
	margin: 16px 0 0;
}

/* A bordered pill rather than loose text and an icon, so it reads as a
   control and matches the share buttons directly below it. */
.ls-author__link {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	margin-top: 18px;
	padding: 9px 16px;
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ls-muted);
	text-decoration: none;
	border: 1px solid var(--ls-border-strong);
	border-radius: var(--ls-radius-pill);
	transition: color 0.2s, border-color 0.2s, background 0.2s;
}

.ls-author__link:hover,
.ls-author__link:focus {
	color: var(--ls-accent);
	border-color: var(--ls-accent-line-hi);
	background: var(--ls-accent-wash);
}

.ls-author__link svg {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
}

/* =========================================================================
 * 14. Comments.
 *
 * Selectors follow the default comment walker rather than a custom callback,
 * so threading, the awaiting-moderation notice and the reply link all arrive
 * already wired and only need dressing.
 * ====================================================================== */

.ls-comments {
	margin-top: var(--ls-gap-section);
	padding-top: var(--ls-gap-section);
	border-top: 1px solid var(--ls-border-soft);
}

.ls-comments__title,
.ls-comments .comment-reply-title {
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: clamp(21px, 2.2vw, 26px);
	line-height: 1.2;
	letter-spacing: -0.01em;
	color: var(--ls-title);
	margin: 0;
}

.ls-comments__list,
.ls-comments .children {
	list-style: none;
	margin: 28px 0 0;
	padding: 0;
}

/* Replies step in once and pick up a rule, so depth reads without indenting
   so far that a threaded comment runs out of column. */
.ls-comments .children {
	margin: 20px 0 0 16px;
	padding-left: 20px;
	border-left: 1px solid var(--ls-border-soft);
}

.ls-comments .comment,
.ls-comments .pingback {
	margin-top: 20px;
}

.ls-comments .comment:first-child,
.ls-comments .children > .comment:first-child {
	margin-top: 0;
}

.ls-comments .comment-body {
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius-sm);
	background: var(--ls-surface);
	padding: 20px 22px;
}

.ls-comments .comment-meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px 12px;
}

.ls-comments .comment-author {
	display: flex;
	align-items: center;
	gap: 10px;
	font-size: 14.5px;
	color: var(--ls-heading);
}

.ls-comments .comment-author .avatar {
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: 1px solid var(--ls-border-strong);
}

.ls-comments .comment-author .fn {
	font-weight: 600;
	font-style: normal;
	color: var(--ls-title);
}

.ls-comments .comment-author .says {
	display: none;
}

.ls-comments .comment-metadata,
.ls-comments .comment-metadata a {
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--ls-meta-dim);
	text-decoration: none;
}

.ls-comments .comment-metadata a:hover,
.ls-comments .comment-metadata a:focus {
	color: var(--ls-accent);
}

.ls-comments .comment-content {
	margin-top: 12px;
	font-size: 15.5px;
	line-height: 1.7;
	color: var(--ls-text);
}

.ls-comments .comment-content p {
	margin: 0 0 12px;
}

.ls-comments .comment-content > :last-child {
	margin-bottom: 0;
}

.ls-comments .comment-awaiting-moderation {
	display: block;
	margin-top: 10px;
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--ls-accent);
}

.ls-comments .reply {
	margin-top: 12px;
}

.ls-comments .comment-reply-link {
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ls-meta);
	text-decoration: none;
	border-bottom: 1px solid var(--ls-border-strong);
	padding-bottom: 2px;
	transition: color 0.2s, border-color 0.2s;
}

.ls-comments .comment-reply-link:hover,
.ls-comments .comment-reply-link:focus {
	color: var(--ls-accent);
	border-color: var(--ls-accent-line-hi);
}

.ls-comments__closed {
	margin-top: 24px;
	font-size: 14.5px;
	color: var(--ls-meta);
}

/* ---- Form ---- */

.ls-comments .comment-respond {
	margin-top: var(--ls-gap-section);
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius);
	background: var(--ls-surface);
	padding: clamp(22px, 2.8vw, 30px);
}

.ls-comments .comment-reply-title small {
	display: inline-block;
	margin-left: 12px;
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}

.ls-comments .comment-reply-title small a {
	color: var(--ls-meta);
	text-decoration: none;
}

.ls-comments .comment-reply-title small a:hover,
.ls-comments .comment-reply-title small a:focus {
	color: var(--ls-accent);
}

.ls-comments__note,
.ls-comments .comment-notes {
	margin: 12px 0 0;
	font-size: 13px;
	color: var(--ls-meta-dim);
}

.ls-comments .comment-form p {
	margin: 18px 0 0;
}

.ls-comments .comment-form label {
	display: block;
	margin-bottom: 8px;
	font-family: var(--ls-font-mono);
	font-size: 10.5px;
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ls-meta);
}

.ls-comments .comment-form input[type="text"],
.ls-comments .comment-form input[type="email"],
.ls-comments .comment-form input[type="url"],
.ls-comments .comment-form textarea {
	width: 100%;
	padding: 12px 14px;
	font-family: var(--ls-font-body);
	font-size: 15px;
	line-height: 1.6;
	color: var(--ls-text-strong);
	background: var(--ls-surface-alt);
	border: 1px solid var(--ls-border-strong);
	border-radius: var(--ls-radius-btn);
	transition: border-color 0.2s, background 0.2s;
}

.ls-comments .comment-form textarea {
	resize: vertical;
	min-height: 132px;
}

.ls-comments .comment-form :where(input, textarea):focus {
	outline: none;
	border-color: var(--ls-accent-line-hi);
	background: var(--ls-surface);
}

.ls-comments .comment-form :where(input, textarea)::placeholder {
	color: var(--ls-meta-dim);
}

/* The consent checkbox is the one row that must not stretch. */
.ls-comments .comment-form-cookies-consent {
	display: flex;
	align-items: flex-start;
	gap: 10px;
}

.ls-comments .comment-form-cookies-consent input {
	width: auto;
	margin-top: 3px;
	accent-color: var(--ls-accent);
}

.ls-comments .comment-form-cookies-consent label {
	margin: 0;
	font-family: var(--ls-font-body);
	font-size: 13px;
	letter-spacing: 0;
	text-transform: none;
	color: var(--ls-muted);
}

.ls-comments .form-submit {
	margin-top: 24px;
}

/* The submit button is a real <input>, so it cannot carry the arrow the CTA
   button does. Everything else matches section 6. */
.ls-comments .form-submit .ls-btn {
	cursor: pointer;
	font-size: 14px;
	padding: 14px 28px;
}

.ls-comments .ls-pager {
	margin-top: 32px;
}

/* =========================================================================
 * 15. FAQ accordion.
 *
 * Built by inc/faq.php from the question and answer paragraphs the content
 * arrives with. Native <details>, like the table of contents, so it opens and
 * closes, takes keyboard focus and is searchable in page without a line of
 * JavaScript.
 * ====================================================================== */

.ls-faq {
	margin-top: 28px;
	border: 1px solid var(--ls-border);
	border-radius: var(--ls-radius);
	background: var(--ls-surface);
	overflow: hidden;
}

.ls-faq__intro {
	margin: 0;
	padding: 20px clamp(18px, 2.4vw, 26px);
	font-size: 16px;
	line-height: 1.7;
	color: var(--ls-muted);
	border-bottom: 1px solid var(--ls-border-soft);
}

.ls-faq__item + .ls-faq__item {
	border-top: 1px solid var(--ls-border-soft);
}

.ls-faq__q {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 18px;
	padding: 20px clamp(18px, 2.4vw, 26px);
	cursor: pointer;
	font-family: var(--ls-font-display);
	font-weight: 600;
	font-size: 17px;
	line-height: 1.4;
	color: var(--ls-heading);
	list-style: none;
	transition: color 0.2s, background 0.2s;
}

/* Both are needed: the first hides the marker in Safari, the second in
   Chrome and Firefox. */
.ls-faq__q::-webkit-details-marker {
	display: none;
}

.ls-faq__q::marker {
	content: "";
}

.ls-faq__q:hover,
.ls-faq__item[open] > .ls-faq__q {
	color: var(--ls-accent);
}

/* A plus that loses its upright stroke when the row opens, so one element
   carries both states and there is no second icon to keep in sync. */
.ls-faq__mark {
	position: relative;
	flex-shrink: 0;
	width: 14px;
	height: 14px;
	margin-top: 5px;
	color: var(--ls-accent);
}

.ls-faq__mark::before,
.ls-faq__mark::after {
	content: "";
	position: absolute;
	background: currentColor;
	border-radius: 1px;
}

.ls-faq__mark::before {
	inset: 6px 0 auto 0;
	height: 2px;
}

.ls-faq__mark::after {
	inset: 0 6px 0 6px;
	transition: transform 0.2s ease;
}

.ls-faq__item[open] .ls-faq__mark::after {
	transform: scaleY(0);
}

.ls-faq__a {
	padding: 0 clamp(18px, 2.4vw, 26px) 22px;
}

.ls-faq__a p {
	margin: 0;
	font-size: 16px;
	line-height: 1.75;
	color: var(--ls-muted);
	max-width: none;
}

.ls-faq__a p + p {
	margin-top: 12px;
}

@media (max-width: 600px) {
	/* Cells give back the horizontal room they can spare, so a table that has
	   to scroll scrolls as little as possible. */
	.ls-prose :where(th, td) {
		padding: 11px 13px;
	}

	.ls-prose table {
		font-size: 14.5px;
	}

	.ls-faq__q {
		font-size: 16px;
	}
}
