/* ============================================================================
   Shining Awards — Single news article (premium editorial layer)
   A magazine-grade reading experience for K-Pop / K-Drama posts: a stronger
   entry header + branded meta bar, a comfortable measure, and premium block
   styling for every element an editor can drop in — headings, quotes, lists,
   figures, tables, callouts, buttons. Token-driven, loaded after skin.css so it
   tracks the active palette. Scoped to `.single` so archives are untouched.

   The auto-enhance filter (shining/single-post.php) adds a few hook classes to
   plain editor markup — `.sa-lead`, `.sa-quote`, `.sa-statement`, `.sa-callout`
   — so old posts pick up the same treatment as block-authored ones.
   ============================================================================ */

/* ── Reading rhythm ───────────────────────────────────────────────────────
   Jannah forces `#the-post .entry-content p { font-size:15px }` inline; we beat
   it on specificity (`.single #the-post …`) with a roomier, more legible scale. */
.single #the-post .entry-content,
.single #the-post .entry-content p,
.single #the-post .entry-content li {
	font-size: 1.0625rem;      /* ~17px */
	line-height: 1.75;
}
.single #the-post .entry-content { color: var(--sa-text); }
.single .entry-content > * { margin-top: 0; }
.single .entry-content p { margin: 0 0 1.35rem; }
.single .entry-content strong,
.single .entry-content b { color: #fff; font-weight: 700; }

/* ── Inline article links ─────────────────────────────────────────────────
   The hover/active treatment is configurable in Shining Awards → Links, which
   stamps `sa-link-{id}` on <html>. The BASE below is the default "Clean fade":
   the palette accent colour, NO underline at rest, a gentle brighten on hover.
   The colour is `--sa-link` (set by the Links studio's "Custom colour" option),
   falling back to the palette accent `--sa-violet-light` so links always track
   the active preset instead of the base theme's leftover red. Jannah's own red
   `#the-post .entry-content a` rule is neutralised in links-studio.php so this
   wins cleanly. The decorations below follow `currentColor` so they match it. */
.single .entry-content a {
	text-decoration: none;
	background-image: none;
	transition: filter .16s ease, background-size .2s ease, text-decoration-color .16s ease;
}
/* Colour: palette accent (or the Links-studio custom colour). `:not(.sa-shico-btn)`
   lifts specificity to (0,3,1) so it beats the base theme's `.dark-skin body .entry a`
   (#0033dd) rule, while leaving the share buttons — which set their own colours — alone. */
.single .entry-content a:not(.sa-shico-btn) {
	color: var(--sa-link, var(--sa-violet-light, #FF7AC6));
}
.single .entry-content a:hover,
.single .entry-content a:focus-visible {
	filter: brightness(1.18);
}

/* ── PROSE LINKS ONLY ────────────────────────────────────────────────────────
   The three decoration styles below are for links an editor writes INSIDE the
   article. But the theme also injects whole components into the_content — the
   share block, Related, the nominee list, the info panel — and their links are
   buttons and cards, not prose.

   `html.sa-link-* .single .entry-content a` has specificity (0,3,2), which
   outranks every component's own rules (e.g. `.sa-shareinline--a .sa-shico-btn`
   at (0,2,0)). With "Sweep" active that turned the round brand share circles
   into padded 4px rectangles on live sites — the Copy control, a <button>, kept
   its circle, which is how the leak was spotted.

   `:not([class*="sa-"])` is the guard: every link the theme injects carries an
   `sa-*` class (sa-shico-btn / sa-nom__item / sa-relcard / sa-rel-slide /
   sa-pinfo__tut), and prose links written in the editor carry none. Keep this
   guard on any new rule added here. */

/* Grow-underline — a rule in the link's own colour wipes in from the left. */
html.sa-link-grow .single .entry-content a:not([class*="sa-"]) {
	background-image: linear-gradient(currentColor, currentColor);
	background-size: 0% 2px;
	background-repeat: no-repeat;
	background-position: 0 100%;
	padding-bottom: 1px;
}
html.sa-link-grow .single .entry-content a:not([class*="sa-"]):hover,
html.sa-link-grow .single .entry-content a:not([class*="sa-"]):focus-visible {
	background-size: 100% 2px;
}

/* Highlight sweep — a soft wash in the link's colour rises to fill it on hover. */
html.sa-link-sweep .single .entry-content a:not([class*="sa-"]) {
	border-radius: 4px;
	padding: .05em .18em;
	margin: 0 -.05em;
	background-image: linear-gradient(
		color-mix(in srgb, currentColor 16%, transparent),
		color-mix(in srgb, currentColor 16%, transparent));
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 100% 0%;
}
html.sa-link-sweep .single .entry-content a:not([class*="sa-"]):hover,
html.sa-link-sweep .single .entry-content a:not([class*="sa-"]):focus-visible {
	background-size: 100% 100%;
}

/* Subtle underline — a soft underline in the link's own colour, always on. */
html.sa-link-underline .single .entry-content a:not([class*="sa-"]) {
	text-decoration: underline;
	text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
	text-underline-offset: 3px;
	text-decoration-thickness: 1.5px;
}
html.sa-link-underline .single .entry-content a:not([class*="sa-"]):hover,
html.sa-link-underline .single .entry-content a:not([class*="sa-"]):focus-visible {
	text-decoration-color: currentColor;
}

/* ── Entry header ─────────────────────────────────────────────────────────*/
.single .entry-header-outer { position: relative; margin-bottom: 1.4rem; }
.single .entry-header { padding-bottom: .2rem; }
.single .entry-header .post-cat-wrap { display: block; margin-bottom: 1rem; }
/* Category pill — branded gradient chip. */
.single .entry-header .post-cat-wrap .post-cat {
	display: inline-block;
	font-weight: 700;
	font-size: .74rem;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--sa-on-accent) !important;
	background: var(--sa-gradient);
	padding: .5em 1.1em;
	border-radius: var(--sa-radius-pill);
	box-shadow: 0 6px 20px color-mix(in srgb, var(--sa-violet) 34%, transparent);
}
/* Big editorial title — display face, fluid scale, subtle top-lit sheen. */
.single .entry-header h1.post-title.entry-title {
	font-family: var(--sa-font-display);
	font-size: clamp(2rem, 4.4vw, 3.15rem);
	font-weight: 700;
	line-height: 1.1;
	letter-spacing: -.015em;
	margin: 0 0 0;
	text-wrap: balance;
	background: linear-gradient(180deg, #fff 0%, var(--sa-text) 58%, color-mix(in srgb, var(--sa-text) 62%, var(--sa-violet-deep)) 100%);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}
.single .entry-header .entry-sub-title {
	font-family: var(--sa-font-body);
	font-size: 1.1rem;
	color: var(--sa-text-muted);
	font-weight: 400;
	margin: .9rem 0 0;
}
/* Accent bar under the header, tracks the preset. */
.single .entry-header-outer::after {
	content: ""; display: block;
	width: 3.6rem; height: 4px; margin-top: 1.15rem;
	border-radius: var(--sa-radius-pill);
	background: var(--sa-gradient);
}
/* Voting posts frame a TotalPoll widget, not an editorial article — drop the
   byline meta bar (hidden in PHP) and its decorative gradient underline. */
.single.shining-vote-post .entry-header-outer::after { display: none; }
/* Jannah's native meta row. When our Article Header bar owns the byline,
   dedupe.php blanks the row's contents in PHP and stamps `sa-mb-ownmeta`; hide
   the leftover wrapper here. The `:empty` rule is kept as a belt-and-braces
   fallback, but it must NOT be the only guard — Jannah emits whitespace inside
   the div in some layouts, and whitespace defeats `:empty`. */
html.sa-mb-ownmeta .single .single-post-meta { display: none; }
.single .single-post-meta:empty { display: none; }

/* ── Premium article-header meta bar (byline · category · date) ────────────
   Five layouts (sa-metabar--a..e), each driven from the Article Header studio.
   No author avatar, no reading-time indicator — by design. The `--sa-mb-accent`
   custom property (set inline when a custom accent colour is chosen) overrides
   the palette gradient/heart everywhere the `--accent-custom` modifier is set. */
.sa-metabar {
	--sa-mb-cat: var(--sa-violet-light);          /* solid fallback for links etc. */
	display: flex; flex-wrap: wrap; align-items: center;
	gap: .55rem .8rem;
	margin: 1.15rem 0 0;
	font-size: .88rem; line-height: 1.3;
	color: var(--sa-text-muted);
}
/* When our bar owns the category, drop the base theme's pill above the title. */
html.sa-mb-owncat .single .entry-header .post-cat-wrap { display: none; }

/* Shared pieces ----------------------------------------------------------- */
.sa-metabar__author { display: inline-flex; align-items: baseline; gap: .3em; }
.sa-metabar__by { color: var(--sa-text-dim); font-weight: 600; }
.sa-metabar__name { color: var(--sa-text); font-weight: 700; text-decoration: none; }
a.sa-metabar__name:hover { color: var(--sa-violet-light); }

.sa-metabar__date { display: inline-flex; align-items: center; gap: .4em; color: var(--sa-text-muted); }
.sa-metabar__date time { font-variant-numeric: tabular-nums; }
.sa-metabar__ic { width: 14px; height: 14px; color: var(--sa-mb-cat); flex: 0 0 auto; }

/* Category — gradient-clipped text by default. */
.sa-metabar__cat {
	font-weight: 700; font-size: .74rem; letter-spacing: .1em; text-transform: uppercase;
	text-decoration: none;
	background: var(--sa-gradient); -webkit-background-clip: text; background-clip: text; color: transparent;
}
a.sa-metabar__cat:hover { filter: brightness(1.12); }

/* Separator glyph — dot | heart | slash (set by sa-mb-div-* on the bar). */
.sa-metabar__sep { flex: 0 0 auto; }
.sa-mb-div-dot .sa-metabar__sep { width: 3px; height: 3px; border-radius: 50%; background: var(--sa-heart); }
.sa-mb-div-heart .sa-metabar__sep {
	width: 11px; height: 11px; background: var(--sa-heart);
	-webkit-mask: var(--sa-heart-mask) center/contain no-repeat; mask: var(--sa-heart-mask) center/contain no-repeat;
}
.sa-mb-div-slash .sa-metabar__sep { color: var(--sa-border-strong); font-weight: 400; }
.sa-mb-div-slash .sa-metabar__sep::before { content: "/"; }

/* Framed — the optional frosted card box. */
.sa-metabar--framed {
	padding: .75rem 1.05rem;
	border: 1px solid var(--sa-border); border-radius: var(--sa-radius);
	background: linear-gradient(180deg,
		color-mix(in srgb, var(--sa-surface-2) 55%, transparent),
		color-mix(in srgb, var(--sa-surface-1) 35%, transparent));
	-webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
}

/* b (Author lead) — category becomes a soft frosted chip pushed to the right. */
.sa-metabar--b .sa-metabar__cat {
	margin-left: auto;
	-webkit-text-fill-color: var(--sa-violet-light); color: var(--sa-violet-light);
	background: color-mix(in srgb, var(--sa-violet) 10%, transparent);
	border: 1px solid var(--sa-border-strong); border-radius: var(--sa-radius-pill);
	padding: .32em .9em;
}
.sa-metabar--b { flex-wrap: nowrap; }
.sa-metabar--b > .sa-metabar__sep:last-of-type { display: none; }

/* c (Editorial kicker) — gradient accent bar + stacked rows. */
.sa-metabar--c { align-items: center; gap: .8rem; }
.sa-metabar__bar { flex: 0 0 auto; width: 4px; align-self: stretch; min-height: 34px; border-radius: 2px; background: var(--sa-gradient); }
.sa-metabar__stack { display: flex; flex-direction: column; gap: .2rem; }
.sa-metabar__row1 { font-size: .95rem; }
.sa-metabar__row2 { display: inline-flex; align-items: center; gap: .5em; font-size: .82rem; }

/* d (Centered premium) — eyebrow pill, heart divider, centered byline. */
.sa-metabar--d { flex-direction: column; align-items: center; text-align: center; gap: .5rem; }
.sa-metabar__eyebrow .sa-metabar__cat {
	-webkit-text-fill-color: var(--sa-violet-light); color: var(--sa-violet-light);
	display: inline-flex; align-items: center; gap: .45em;
	background: color-mix(in srgb, var(--sa-violet) 8%, transparent);
	border: 1px solid var(--sa-border-strong); border-radius: var(--sa-radius-pill);
	padding: .38em 1em; font-size: .68rem;
}
.sa-metabar__div { display: block; width: 46px; height: 1px; background: linear-gradient(90deg, transparent, var(--sa-heart), transparent); }
.sa-metabar--d .sa-metabar__center { display: inline-flex; align-items: center; gap: .5em; flex-wrap: wrap; justify-content: center; }

/* e (Balanced row) — author+category left, date right, gradient hairline. */
.sa-metabar--e { justify-content: space-between; gap: .5rem .9rem; padding-bottom: .7rem; position: relative; border-bottom: 1px solid var(--sa-border); }
.sa-metabar--e::after { content: ""; position: absolute; left: 0; bottom: -1px; width: 56px; height: 2px; border-radius: 2px; background: var(--sa-gradient); }
.sa-metabar__left { display: inline-flex; align-items: center; gap: .5em; flex-wrap: wrap; }
.sa-metabar__right { display: inline-flex; align-items: center; }

/* Custom accent — a single chosen colour replaces the gradient/heart. */
.sa-metabar--accent-custom { --sa-mb-cat: var(--sa-mb-accent); }
.sa-metabar--accent-custom .sa-metabar__cat { background: none; -webkit-text-fill-color: var(--sa-mb-accent); color: var(--sa-mb-accent); }
.sa-metabar--accent-custom.sa-metabar--b .sa-metabar__cat,
.sa-metabar--accent-custom .sa-metabar__eyebrow .sa-metabar__cat {
	background: color-mix(in srgb, var(--sa-mb-accent) 10%, transparent);
	border-color: color-mix(in srgb, var(--sa-mb-accent) 40%, transparent);
}
.sa-metabar--accent-custom .sa-metabar__bar,
.sa-metabar--accent-custom.sa-metabar--e::after { background: var(--sa-mb-accent); }
.sa-metabar--accent-custom .sa-metabar__div { background: linear-gradient(90deg, transparent, var(--sa-mb-accent), transparent); }
.sa-metabar--accent-custom.sa-mb-div-dot .sa-metabar__sep,
.sa-metabar--accent-custom.sa-mb-div-heart .sa-metabar__sep { background: var(--sa-mb-accent); }

/* ── Reading-progress bar (retint Jannah's saved blue) ────────────────────*/
#tie-wrapper #reading-position-indicator {
	background: var(--sa-gradient) !important;
	box-shadow: 0 0 12px color-mix(in srgb, var(--sa-violet) 60%, transparent) !important;
}

/* ── Featured + in-article images ─────────────────────────────────────────*/
.single .single-featured-image img,
.single .entry-content img,
.single .entry-content .wp-block-image img {
	border-radius: var(--sa-radius-sm);
}
.single .single-featured-image {
	border-radius: var(--sa-radius);
	overflow: hidden;
	border: 1px solid var(--sa-border);
	box-shadow: var(--sa-shadow-card);
}
.single .single-featured-image img { border-radius: 0; display: block; }
.single .entry-content figure { margin: 2rem 0; }
.single .entry-content figure img {
	border: 1px solid var(--sa-border);
	box-shadow: var(--sa-shadow-card);
}
/* 🔴 The `:not([class*="sa-"])` guard is the .entry-content leak rule again:
   our injected components live INSIDE .entry-content, so this prose caption
   style was landing on the Poster Wall's <figcaption>. It kept its 2px accent
   border while the component's own `padding: 0` removed the 1rem that made
   that border readable — which is the blue line jammed against the nominee
   name. Prose captions keep the treatment; our components opt out. */
.single .entry-content figcaption:not([class*="sa-"]),
.single .single-featured-image + .wp-caption-text,
.single .wp-caption-text {
	margin-top: .7rem;
	font-size: .82rem;
	color: var(--sa-text-dim);
	padding-left: 1rem;
	border-left: 2px solid var(--sa-border-strong);
	line-height: 1.5;
}

/* ── Lead paragraph + drop cap ────────────────────────────────────────────*/
.single .entry-content p.sa-lead {
	font-size: 1.16rem;
	line-height: 1.7;
	color: #fff;
}
.single .entry-content p.sa-lead::first-letter {
	font-family: var(--sa-font-display);
	font-weight: 700;
	float: left;
	font-size: 3.4em;
	line-height: .78;
	padding: .04em .12em 0 0;
	margin-top: .04em;
	background: var(--sa-gradient);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

/* ── Headings inside the article ──────────────────────────────────────────
   Guarded with :not([class*="sa-"]): these rules dress the AUTHOR's prose
   headings only. Every heading our injected components render (standings,
   follow CTA, nominee grid…) carries an sa- class and styles itself — without
   the guard the accent bar, padding-left and prose sizing leak into them at
   higher specificity (the .entry-content leak rule). */
.single .entry-content h2:not([class*="sa-"]),
.single .entry-content h3:not([class*="sa-"]),
.single .entry-content h4:not([class*="sa-"]) {
	font-family: var(--sa-font-display);
	color: #fff;
	position: relative;
	letter-spacing: -.01em;
	text-wrap: balance;
}
.single .entry-content h2:not([class*="sa-"]) {
	font-size: clamp(1.5rem, 2.8vw, 2rem);
	font-weight: 600;
	line-height: 1.18;
	margin: 2.6rem 0 1rem;
	padding-left: 1rem;
}
.single .entry-content h2:not([class*="sa-"])::before {
	content: ""; position: absolute; left: 0; top: .14em; bottom: .14em;
	width: 5px; border-radius: var(--sa-radius-pill);
	background: var(--sa-gradient);
	box-shadow: 0 0 14px color-mix(in srgb, var(--sa-violet) 50%, transparent);
}
/* Optional eyebrow above an H2 (block authors can add <span class="kicker">). */
.single .entry-content h2 .kicker {
	display: block;
	font-family: var(--sa-font-body);
	font-size: .72rem; font-weight: 700;
	letter-spacing: .16em; text-transform: uppercase;
	color: var(--sa-violet-light);
	margin-bottom: .35em;
}
.single .entry-content h3:not([class*="sa-"]) {
	font-size: 1.34rem;
	font-weight: 600;
	margin: 2.1rem 0 .8rem;
	color: var(--sa-text);
}
.single .entry-content h4:not([class*="sa-"]) {
	font-size: 1.12rem;
	font-weight: 600;
	margin: 1.8rem 0 .7rem;
	color: var(--sa-text);
}

/* ── Blockquotes — "Spotlight card" (native + auto `.sa-quote`) ────────────
   An elevated surface with a giant watermark quote mark, display-face pull and
   a rose-heart byline — reads like a magazine interview feature. The mark is a
   decorative `::before`; `::after` is reset (an old style used it). */
/* Embed blockquotes (tweets, IG, TikTok, Reddit) are NOT prose quotes — their
   own scripts swap them for an iframe. Exclude them so they never flash as a
   spotlight card. */
.single .entry-content blockquote:not(.twitter-tweet):not(.instagram-media):not(.tiktok-embed):not(.reddit-card):not(.wp-embedded-content),
.single .entry-content blockquote.sa-quote {
	margin: 2.2rem 0;
	padding: 2.2rem 2rem 1.7rem;
	position: relative;
	border: 1px solid var(--sa-border);
	border-radius: 20px;
	background:
		radial-gradient(120% 100% at 100% 0%,
			color-mix(in srgb, var(--sa-violet) 16%, transparent), transparent 60%),
		var(--sa-surface-1);
	box-shadow: 0 20px 50px -24px color-mix(in srgb, var(--sa-violet) 55%, transparent);
	overflow: hidden;
}
/* Giant watermark quote mark, top-right (clipped by the card). */
.single .entry-content blockquote:not(.twitter-tweet):not(.instagram-media):not(.tiktok-embed):not(.reddit-card):not(.wp-embedded-content)::before {
	content: "\201C";
	position: absolute; right: 1rem; top: -.7rem;
	font-family: var(--sa-font-display); font-weight: 700;
	font-size: 8rem; line-height: 1;
	background: var(--sa-gradient);
	-webkit-background-clip: text; background-clip: text; color: transparent;
	opacity: .14; pointer-events: none;
}
.single .entry-content blockquote::after { content: none; }
/* `#the-post` matches the reading-rhythm rule's ID so the pull text can grow
   past the 17px body size. */
.single #the-post .entry-content blockquote:not(.twitter-tweet):not(.instagram-media):not(.tiktok-embed):not(.reddit-card):not(.wp-embedded-content) p {
	position: relative;
	font-family: var(--sa-font-display); font-weight: 500;
	font-size: 1.4rem; line-height: 1.42; letter-spacing: -.01em;
	color: #fff;
	margin: 0 0 1.1rem;
}
.single .entry-content blockquote p:last-child { margin-bottom: 0; }
.single .entry-content blockquote em { font-style: italic; }
/* The byline — a small gradient rose-heart, then the name in bright text. */
.single .entry-content blockquote cite {
	position: relative;
	font-style: normal; font-size: .92rem; font-weight: 700;
	letter-spacing: .01em; text-transform: none;
	color: var(--sa-text);
	display: inline-flex; align-items: center; gap: .55em;
}
.single .entry-content blockquote cite::before {
	content: ""; width: 1.05em; height: 1.05em; flex: 0 0 auto;
	background: var(--sa-gradient);
	-webkit-mask: var(--sa-heart-mask) center / contain no-repeat;
	mask: var(--sa-heart-mask) center / contain no-repeat;
}

/* Pull-quote block — big centred statement. */
.single .entry-content .wp-block-pullquote {
	margin: 2.6rem 0; text-align: center; padding: 1.4rem 0;
	border-top: 1px solid var(--sa-border);
	border-bottom: 1px solid var(--sa-border);
	background: none;
}
.single .entry-content .wp-block-pullquote blockquote,
.single .entry-content .wp-block-pullquote p {
	border: 0; background: none; padding: 0; margin: 0;
}
.single .entry-content .wp-block-pullquote::before,
.single .entry-content .wp-block-pullquote blockquote::before,
.single .entry-content .wp-block-pullquote blockquote::after { content: none; }
.single .entry-content .wp-block-pullquote p {
	font-family: var(--sa-font-display); font-weight: 600;
	font-size: clamp(1.4rem, 3vw, 2rem); line-height: 1.28;
	color: #fff;
}

/* ── "Official statement" panel (auto `.sa-statement`) ────────────────────*/
.single .entry-content .sa-statement {
	margin: 2rem 0;
	padding: 1.5rem 1.6rem;
	border: 1px solid var(--sa-border);
	border-left: 4px solid transparent;
	border-image: var(--sa-gradient) 1;
	border-radius: 0 var(--sa-radius) var(--sa-radius) 0;
	background: color-mix(in srgb, var(--sa-surface-1) 70%, transparent);
}
.single .entry-content .sa-statement p {
	color: var(--sa-text-muted);
	margin: 0 0 1rem;
}
.single .entry-content .sa-statement p:last-child { margin-bottom: 0; }
.single .entry-content .sa-statement em { font-style: italic; color: var(--sa-text); }

/* ── Lists — branded markers ──────────────────────────────────────────────*/
.single .entry-content ul,
.single .entry-content ol { margin: 1.4rem 0; padding: 0; }
.single .entry-content ul { list-style: none; }
.single .entry-content ul > li {
	position: relative; padding-left: 1.9rem; margin: 0 0 .7rem; list-style: none;
}
.single .entry-content ul > li::before {
	content: ""; position: absolute; left: .1rem; top: .62em;
	width: 10px; height: 10px; border-radius: 3px;
	background: var(--sa-gradient);
	box-shadow: 0 0 10px color-mix(in srgb, var(--sa-violet) 50%, transparent);
	transform: rotate(45deg);
}
.single .entry-content ol {
	list-style: none; counter-reset: sa-ol;
}
.single .entry-content ol > li {
	position: relative; padding-left: 3rem; margin: 0 0 .85rem;
	counter-increment: sa-ol; min-height: 2rem;
	list-style: none;
}
.single .entry-content ol > li::before {
	content: counter(sa-ol);
	position: absolute; left: 0; top: .05em;
	width: 2rem; height: 2rem; border-radius: 9px;
	display: grid; place-items: center;
	font-family: var(--sa-font-display); font-weight: 700; font-size: .95rem;
	color: var(--sa-on-accent);
	background: var(--sa-gradient);
	box-shadow: 0 5px 16px color-mix(in srgb, var(--sa-violet) 32%, transparent);
}

/* ── "SEE ALSO" callout (auto `.sa-callout`) ──────────────────────────────*/
.single .entry-content .sa-callout {
	margin: 2rem 0;
	display: flex; align-items: center; gap: 1rem;
	padding: 1.05rem 1.25rem;
	border: 1px solid var(--sa-border);
	border-radius: var(--sa-radius);
	background: linear-gradient(135deg,
		color-mix(in srgb, var(--sa-gold) 8%, transparent),
		color-mix(in srgb, var(--sa-violet) 6%, transparent));
	position: relative; overflow: hidden;
}
.single .entry-content .sa-callout::before {
	content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
	background: linear-gradient(180deg, var(--sa-gold), var(--sa-violet));
}
.single .entry-content .sa-callout__ic {
	flex: 0 0 auto; width: 40px; height: 40px; border-radius: 11px;
	display: grid; place-items: center;
	background: color-mix(in srgb, var(--sa-gold) 14%, transparent);
	color: var(--sa-gold);
}
.single .entry-content .sa-callout__ic svg { width: 20px; height: 20px; }
.single .entry-content .sa-callout__body { display: block; }
.single .entry-content .sa-callout__lbl {
	display: block;
	font-size: .68rem; font-weight: 700; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sa-gold); margin-bottom: .1em;
}
.single .entry-content .sa-callout__link,
.single .entry-content .sa-callout__link a {
	color: #fff; font-weight: 700; font-size: 1.02rem; line-height: 1.35;
	background: none; text-decoration: none;
}
.single .entry-content .sa-callout__link a:hover { color: var(--sa-violet-light); }

/* ── Tables ───────────────────────────────────────────────────────────────*/
.single .entry-content table {
	border-collapse: collapse; width: 100%;
	font-size: .94rem; margin: 2rem 0;
	border: 1px solid var(--sa-border);
	border-radius: var(--sa-radius); overflow: hidden;
}
.single .entry-content thead th,
.single .entry-content table th {
	background: var(--sa-surface-2); text-align: left;
	padding: .8rem 1.1rem;
	font-family: var(--sa-font-display); font-weight: 600;
	color: #fff; font-size: .8rem; letter-spacing: .04em; text-transform: uppercase;
}
.single .entry-content td {
	padding: .78rem 1.1rem; border-top: 1px solid var(--sa-border);
	color: var(--sa-text-muted);
}
.single .entry-content tbody tr:nth-child(even) td {
	background: color-mix(in srgb, var(--sa-surface-2) 40%, transparent);
}

/* ── Buttons (wp-block-button) ────────────────────────────────────────────*/
.single .entry-content .wp-block-button__link {
	background: var(--sa-gradient) !important;
	color: var(--sa-on-accent) !important;
	border: 0; border-radius: var(--sa-radius-pill);
	font-weight: 700; padding: .7em 1.6em;
	box-shadow: 0 8px 22px color-mix(in srgb, var(--sa-violet) 30%, transparent);
	transition: transform .16s ease, box-shadow .16s ease;
}
.single .entry-content .wp-block-button__link:hover {
	transform: translateY(-2px);
	box-shadow: 0 12px 28px color-mix(in srgb, var(--sa-violet) 40%, transparent);
}
.single .entry-content .wp-block-button.is-style-outline .wp-block-button__link {
	background: transparent !important;
	color: var(--sa-violet-light) !important;
	border: 1px solid var(--sa-border-strong);
	box-shadow: none;
}

/* ── Inline code / preformatted ───────────────────────────────────────────*/
.single .entry-content code {
	background: var(--sa-surface-2);
	border: 1px solid var(--sa-border);
	border-radius: 6px; padding: .12em .45em;
	font-size: .9em; color: var(--sa-pink);
}
.single .entry-content pre {
	background: var(--sa-bg-2);
	border: 1px solid var(--sa-border);
	border-radius: var(--sa-radius-sm);
	padding: 1.1rem 1.25rem; overflow-x: auto;
}
.single .entry-content pre code { background: none; border: 0; padding: 0; color: var(--sa-text); }

/* ── Divider (heart) ──────────────────────────────────────────────────────
   A hairline that fades in from both edges with the rose heart centred on it.

   Every declaration here is !important, and that is not defensive noise — it
   is the only thing that works. WordPress' own separator block CSS ships
   rules our natural selector CANNOT outrank:

     .wp-block-separator:not(.is-style-wide):not(.is-style-dots) { width:100px }
       → three classes (0,3,0) vs our (0,2,1), so core wins and the divider
         renders as a stranded 100px stub instead of spanning the column.
     .wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots)
       { height:2px }  → (0,4,0), same story.

   On top of that, an editor who tints a separator in Gutenberg gets
   `has-<name>-background-color`, and WordPress emits preset colour classes as
   `!important` — so a flat colour paints over our gradient no matter how
   specific we get. (This site had one set to vivid red: the divider showed as
   a short red dash.) Winning inside the !important cascade needs specificity,
   which our two classes + element already have against core's single class.

   It only surfaced in production because the block stylesheets are dequeued on
   block-less views by lite mode, so a page without these blocks looks correct
   locally while a real article does not. See docs: .entry-content leak rule.

   `is-style-dots` is left alone — that style draws its own ··· glyph, and our
   heart would sit on top of it. */
.single .entry-content hr:not(.is-style-dots) {
	border: 0 !important;
	width: 100% !important;
	max-width: 100% !important;
	height: 1px !important;
	opacity: 1 !important;
	margin: 2.6rem auto !important;
	position: relative;
	background-color: transparent !important;
	background-image: linear-gradient(90deg, transparent, var(--sa-border-strong), transparent) !important;
}
.single .entry-content hr:not(.is-style-dots)::after {
	content: ""; position: absolute; left: 50%; top: 50%;
	width: 14px; height: 14px; transform: translate(-50%, -50%);
	background: var(--sa-heart);
	-webkit-mask: var(--sa-heart-mask) center/contain no-repeat;
	mask: var(--sa-heart-mask) center/contain no-repeat;
}

/* ── Share buttons (top + bottom) ─────────────────────────────────────────*/
.single .share-buttons .share-links.icons-only a[class*="-share-btn"] {
	border-radius: var(--sa-radius-pill) !important;
	background: var(--sa-surface-1) !important;
	border: 1px solid var(--sa-border) !important;
	color: var(--sa-text-muted) !important;
	transition: transform .16s ease, background .16s ease, border-color .16s ease, color .16s ease !important;
}
.single .share-buttons .share-links.icons-only a[class*="-share-btn"]:hover {
	transform: translateY(-3px);
	background: var(--sa-gradient) !important;
	border-color: transparent !important;
	color: var(--sa-on-accent) !important;
}
.single #share-buttons-top,
.single .post-components {
	background: var(--sa-surface-1);
	border: 1px solid var(--sa-border);
	border-radius: var(--sa-radius-sm);
	padding: .75rem 1rem;
	margin: 1.4rem 0;
}

/* ── Author box / tags / related ──────────────────────────────────────────*/
.single .about-author,
.single .related-posts,
.single .post-tags {
	background: var(--sa-surface-1);
	border: 1px solid var(--sa-border);
	border-radius: var(--sa-radius-sm);
}
.single .post-tags a {
	background: var(--sa-surface-2);
	border: 1px solid var(--sa-border);
	border-radius: var(--sa-radius-pill);
	color: var(--sa-text-muted);
	transition: background .16s ease, color .16s ease, border-color .16s ease;
}
.single .post-tags a:hover {
	background: var(--sa-gradient);
	border-color: transparent;
	color: var(--sa-on-accent);
}

/* ── Comfortable measure on wide (sidebar-less) layouts ───────────────────
   When the post has no sidebar the content column can get very wide; cap the
   prose to a readable measure while letting media/tables use the full width. */
@media (min-width: 1100px) {
	.single .tie-col-full .entry-content > p,
	.single .tie-col-full .entry-content > h2,
	.single .tie-col-full .entry-content > h3,
	.single .tie-col-full .entry-content > h4,
	.single .tie-col-full .entry-content > ul,
	.single .tie-col-full .entry-content > ol,
	.single .tie-col-full .entry-content > blockquote {
		max-width: 48rem;
	}
}

@media (max-width: 640px) {
	.single #the-post .entry-content,
	.single #the-post .entry-content p,
	.single #the-post .entry-content li { font-size: 1rem; }
	.sa-metabar { gap: .45rem .7rem; font-size: .84rem; }
	.sa-metabar--framed { padding: .65rem .85rem; }
	.sa-metabar--e { flex-wrap: wrap; }
	.sa-metabar--b { flex-wrap: wrap; }
	.sa-metabar--b .sa-metabar__cat { margin-left: 0; }
	.single .entry-content p.sa-lead::first-letter { font-size: 3em; }
	/* Spotlight quote card — tighter on phones. */
	.single .entry-content blockquote,
	.single .entry-content blockquote.sa-quote { padding: 1.6rem 1.3rem 1.3rem; }
	.single #the-post .entry-content blockquote p { font-size: 1.2rem; }
	.single .entry-content blockquote::before { font-size: 6rem; right: .6rem; }
}
