/**
 * LazyHighlight — structure and token mapping.
 *
 * Themes do not restate any of this. Each theme file sets custom properties and
 * nothing else, so every theme gets identical padding, radius, line height and
 * gutter behaviour, and adding a theme is a ~40-line file.
 *
 * No webfonts, no external requests, no @import.
 */

.lsh-code {
	/* Layout tokens. Overridable per site from a child theme. */
	--lsh-font: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace;
	--lsh-font-size: 0.8125rem;
	--lsh-line-height: 1.55;
	--lsh-pad-y: 1rem;
	--lsh-pad-x: 1.125rem;
	--lsh-radius: 8px;
	--lsh-gutter-width: 2.5ch;
	--lsh-gutter-gap: 1.5ch;

	/* Colour tokens, all supplied by the theme file. The fallbacks keep the
	   block readable if a theme stylesheet fails to load. */
	--lsh-bg: #f6f8fa;
	--lsh-fg: #24292f;
	--lsh-border: rgba(0, 0, 0, 0.08);
	--lsh-gutter-fg: rgba(0, 0, 0, 0.32);
	--lsh-hl-bg: rgba(255, 213, 0, 0.16);
	--lsh-hl-border: rgba(255, 193, 7, 0.8);
	--lsh-hover-bg: rgba(127, 127, 127, 0.08);
	--lsh-btn-fg: rgba(0, 0, 0, 0.55);
	--lsh-btn-bg: rgba(127, 127, 127, 0.1);
	--lsh-btn-border: rgba(0, 0, 0, 0.12);

	position: relative;
	margin: 1.5rem 0 1.5em;
	padding: 0;
	border: 1px solid var(--lsh-border);
	border-radius: var(--lsh-radius);
	background: var(--lsh-bg);
	color: var(--lsh-fg);
	font-family: var(--lsh-font);
	font-size: var(--lsh-font-size);
	line-height: var(--lsh-line-height);
	counter-reset: lsh-line;
	overflow: hidden;
}

/* Site-wide appearance settings. Each is a data-attribute on .lsh-code so the
   rendered HTML stays cache-friendly and the theme files never have to know. */
.lsh-code[data-corner="sharp"] {
	--lsh-radius: 0;
}

.lsh-code[data-size="small"] {
	--lsh-font-size: 0.75rem;
}

.lsh-code[data-size="large"] {
	--lsh-font-size: 0.9375rem;
}

.lsh-code[data-leading="tight"] {
	--lsh-line-height: 1.4;
}

.lsh-code[data-leading="relaxed"] {
	--lsh-line-height: 1.8;
}

.lsh-code[data-font="classic"] {
	--lsh-font: Menlo, Consolas, "DejaVu Sans Mono", "Liberation Mono", monospace;
}

.lsh-code[data-font="courier"] {
	--lsh-font: "Courier New", Courier, "Nimbus Mono L", monospace;
}

/* Padding off: for a theme whose background matches the page, so the code sits
   flush with body text. Border and radius go too — there is nothing to frame. */
.lsh-code[data-pad="off"] {
	--lsh-pad-x: 0px;
	--lsh-pad-y: 0px;
	border-color: transparent;
	border-radius: 0;
	background: none;
}

.lsh-pre {
	margin: 0;
	padding: var(--lsh-pad-y) var(--lsh-pad-x);
	border: 0;
	border-radius: 0;
	background: none;
	color: inherit;
	font: inherit;
	tab-size: 4;
	-moz-tab-size: 4;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	-webkit-text-size-adjust: 100%;
}

.lsh-pre:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: -2px;
}

.lsh-pre > code {
	display: block;
	margin: 0;
	padding: 0;
	border: 0;
	background: none;
	color: inherit;
	font: inherit;
	white-space: inherit;
}

/* Wrapping vs scrolling (site setting). */
.lsh-code[data-overflow="wrap"] .lsh-pre {
	white-space: pre-wrap;
	overflow-wrap: break-word;
	word-break: break-word;
}

.lsh-code[data-overflow="scroll"] .lsh-pre {
	white-space: pre;
}

/* --------------------------------------------------------------------------
   Lines
   -------------------------------------------------------------------------- */

.lsh-line {
	display: block;
	position: relative;
	/* A stacking context, so the row highlight below can sit at z-index -1:
	   behind the code (including bare text nodes) but in front of the block
	   background. */
	z-index: 0;
	/* Blank lines must still occupy a row. */
	min-height: calc(1em * var(--lsh-line-height));
}

/* Line numbers are CSS counters: no numbers in the markup, so selecting or
   copying the code never picks them up. */
.lsh-code[data-lines="on"] .lsh-pre {
	padding-left: calc(var(--lsh-pad-x) + var(--lsh-gutter-width) + var(--lsh-gutter-gap));
}

.lsh-code[data-lines="on"] .lsh-line::before {
	counter-increment: lsh-line;
	content: counter(lsh-line);
	position: absolute;
	left: calc(-1 * (var(--lsh-gutter-width) + var(--lsh-gutter-gap)));
	width: var(--lsh-gutter-width);
	text-align: right;
	color: var(--lsh-gutter-fg);
	font-variant-numeric: tabular-nums;
	pointer-events: none;
	user-select: none;
	-webkit-user-select: none;
}

/* Highlighted lines bleed to the full width of the block, gutter included. */
.lsh-line[data-hl="true"]::after,
.lsh-code[data-hover="on"] .lsh-line:hover::after {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	left: calc(-1 * (var(--lsh-pad-x) + var(--lsh-gutter-width) + var(--lsh-gutter-gap)));
	right: calc(-1 * var(--lsh-pad-x));
	z-index: -1;
	pointer-events: none;
}

.lsh-code[data-lines="off"] .lsh-line[data-hl="true"]::after,
.lsh-code[data-lines="off"][data-hover="on"] .lsh-line:hover::after {
	left: calc(-1 * var(--lsh-pad-x));
}

.lsh-line[data-hl="true"]::after {
	background: var(--lsh-hl-bg);
	border-left: 2px solid var(--lsh-hl-border);
}

.lsh-code[data-hover="on"] .lsh-line:hover::after {
	background: var(--lsh-hover-bg);
}

/* --------------------------------------------------------------------------
   Header bar
   -------------------------------------------------------------------------- */

.lsh-header {
	display: flex;
	align-items: center;
	gap: 8px;
	min-height: 2.5em;
	padding: 0 var(--lsh-pad-x);
	border-bottom: 1px solid var(--lsh-border);
	background: rgba(127, 127, 127, 0.06);
	user-select: none;
	-webkit-user-select: none;
}

.lsh-header[data-style="headlights"] .lsh-dot {
	width: 0.75em;
	height: 0.75em;
	border-radius: 50%;
	background: currentColor;
	opacity: 0.85;
}

.lsh-header[data-style="headlights"] .lsh-dot:nth-child(1) {
	color: #ff5f56;
}

.lsh-header[data-style="headlights"] .lsh-dot:nth-child(2) {
	color: #ffbd2e;
}

.lsh-header[data-style="headlights"] .lsh-dot:nth-child(3) {
	color: #27c93f;
}

/* With a header present the copy button sits inside the bar rather than
   floating over the first line of code. */
.lsh-code:not([data-header="none"]) .lsh-toolbar {
	top: 0;
	height: 2.5em;
	align-items: center;
}

.lsh-code[data-pad="off"] .lsh-header {
	padding-left: 0;
	padding-right: 0;
}

/* --------------------------------------------------------------------------
   Toolbar
   -------------------------------------------------------------------------- */

.lsh-toolbar {
	position: absolute;
	top: 6px;
	right: 6px;
	z-index: 2;
	display: flex;
	gap: 4px;
}

.lsh-copy {
	margin: 0;
	padding: 3px 9px;
	border: 1px solid var(--lsh-btn-border);
	border-radius: 5px;
	background: var(--lsh-btn-bg);
	color: var(--lsh-btn-fg);
	font-family: inherit;
	font-size: 11px;
	line-height: 1.7;
	letter-spacing: 0.02em;
	cursor: pointer;
	opacity: 0;
	transition: opacity 120ms ease, color 120ms ease, border-color 120ms ease;
	-webkit-backdrop-filter: blur(4px);
	backdrop-filter: blur(4px);
}

.lsh-code:hover .lsh-copy,
.lsh-copy:focus-visible,
.lsh-copy.is-copied,
.lsh-copy.is-failed {
	opacity: 1;
}

.lsh-copy:hover {
	color: var(--lsh-fg);
	border-color: var(--lsh-fg);
}

.lsh-copy.is-copied {
	color: var(--lsh-fg);
	border-color: var(--lsh-fg);
}

.lsh-copy.is-failed {
	color: var(--lsh-hl-border);
	border-color: var(--lsh-hl-border);
}

/* Touch devices have no hover, so the button must always be visible there. */
@media (hover: none) {
	.lsh-copy {
		opacity: 1;
	}
}

@media (prefers-reduced-motion: reduce) {
	.lsh-copy {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   Inline code (in a sentence)
   -------------------------------------------------------------------------- */

code.lsh-code.lsh-inline {
	display: inline;
	margin: 0;
	padding: 0.12em 0.36em;
	border: 1px solid var(--lsh-border);
	border-radius: 4px;
	background: var(--lsh-bg);
	color: var(--lsh-fg);
	font-family: var(--lsh-font);
	font-size: 0.9em;
	line-height: inherit;
	white-space: pre-wrap;
	overflow: visible;
	counter-reset: none;
}

/* --------------------------------------------------------------------------
   Folding
   -------------------------------------------------------------------------- */

.lsh-fold {
	display: block;
}

.lsh-fold > summary {
	display: block;
	margin: 0.15em 0;
	color: var(--lsh-gutter-fg);
	font-style: italic;
	cursor: pointer;
	list-style: none;
}

.lsh-fold > summary::-webkit-details-marker {
	display: none;
}

.lsh-fold > summary::before {
	content: "\25B8\00a0";
}

.lsh-fold[open] > summary::before {
	content: "\25BE\00a0";
}

.lsh-fold[open] > summary {
	opacity: 0.7;
}

/* The summary lines up with the code column, clearing the number gutter. */
.lsh-code[data-lines="on"] .lsh-fold > summary {
	margin-left: calc(-1 * (var(--lsh-gutter-width) + var(--lsh-gutter-gap)));
}

@media print {
	.lsh-fold:not([open]) > summary {
		display: none;
	}

	.lsh-fold > .lsh-line {
		display: block !important;
	}
}

/* --------------------------------------------------------------------------
   Graceful degradation
   -------------------------------------------------------------------------- */

/* What a saved-but-unrendered block looks like: the plugin deactivated, or a
   block rendered before the render callback existed. Readable, never raw. */
pre.lsh-raw {
	padding: 1rem 1.125rem;
	border-radius: 8px;
	background: #f6f8fa;
	color: #24292f;
	font-family: var(--lsh-font, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
	font-size: 0.8125rem;
	line-height: 1.55;
	overflow-x: auto;
}

@media print {
	.lsh-toolbar {
		display: none;
	}

	.lsh-code {
		border-color: #ccc;
	}

	.lsh-code[data-overflow="scroll"] .lsh-pre {
		white-space: pre-wrap;
	}
}

/* --------------------------------------------------------------------------
   Token colours
   -------------------------------------------------------------------------- */

.lsh-code .hljs-comment,
.lsh-code .hljs-quote {
	color: var(--lsh-comment);
	font-style: italic;
}

.lsh-code .hljs-keyword,
.lsh-code .hljs-selector-tag,
.lsh-code .hljs-doctag,
.lsh-code .hljs-formula {
	color: var(--lsh-keyword);
}

/*
 * Declaration/modifier keywords (class, function, const, public, static, this)
 * as opposed to control-flow keywords above. Also colours the `class`/`function`
 * keyword text itself: .hljs-class and .hljs-function wrap the whole declaration,
 * but only their nested .hljs-title child (the name) was styled before this rule,
 * so the keyword text fell back to plain foreground. The more specific
 * `.hljs-class .hljs-title` / `.hljs-function .hljs-title` rules below still win.
 */
.lsh-code .hljs-storage,
.lsh-code .hljs-class,
.lsh-code .hljs-function {
	color: var(--lsh-storage);
}

.lsh-code .hljs-string,
.lsh-code .hljs-regexp,
.lsh-code .hljs-addition,
.lsh-code .hljs-attribute,
.lsh-code .hljs-meta .hljs-string {
	color: var(--lsh-string);
}

.lsh-code .hljs-number,
.lsh-code .hljs-literal,
.lsh-code .hljs-variable,
.lsh-code .hljs-template-variable,
.lsh-code .hljs-tag .hljs-attr {
	color: var(--lsh-number);
}

.lsh-code .hljs-title,
.lsh-code .hljs-section,
.lsh-code .hljs-selector-id,
.lsh-code .hljs-function .hljs-title {
	color: var(--lsh-title);
}

.lsh-code .hljs-built_in,
.lsh-code .hljs-builtin-name,
.lsh-code .hljs-class .hljs-title,
.lsh-code .hljs-type,
.lsh-code .hljs-selector-class {
	color: var(--lsh-type);
}

.lsh-code .hljs-attr,
.lsh-code .hljs-symbol,
.lsh-code .hljs-bullet,
.lsh-code .hljs-link,
.lsh-code .hljs-selector-attr,
.lsh-code .hljs-selector-pseudo {
	color: var(--lsh-attr);
}

.lsh-code .hljs-name,
.lsh-code .hljs-tag {
	color: var(--lsh-tag);
}

.lsh-code .hljs-meta,
.lsh-code .hljs-meta-keyword {
	color: var(--lsh-meta);
}

.lsh-code .hljs-params {
	color: var(--lsh-params);
}

.lsh-code .hljs-deletion {
	color: var(--lsh-deletion);
}

/*
 * A single static accent for brackets/parens/braces left uncoloured by a
 * grammar (currently just PowerShell). Real VS Code cycles bracket colour by
 * nesting depth via a separate editor feature (Bracket Pair Colorization),
 * which neither this engine nor highlight.js track; this is the cheap
 * approximation, not a depth-aware match.
 */
.lsh-code .hljs-punctuation {
	color: var(--lsh-storage);
}

.lsh-code .hljs-emphasis {
	font-style: italic;
}

.lsh-code .hljs-strong {
	font-weight: 600;
}

.lsh-code .hljs-link {
	text-decoration: underline;
}
/**
 * LazyHighlight Pro — extra header presets and the "see more" expand system.
 *
 * Loaded only on pages the free plugin already decided have a code block, and
 * always after the free base.css (it is a registered dependency). Everything
 * here hangs off the free plugin's own classes and custom properties.
 */

/* --------------------------------------------------------------------------
   Header presets
   -------------------------------------------------------------------------- */

.lsh-header[data-style="headlights-muted"] .lsh-dot {
	width: 0.7em;
	height: 0.7em;
	border-radius: 50%;
	background: currentColor;
	color: var(--lsh-gutter-fg);
	opacity: 0.55;
}

.lsh-header[data-style="label"],
.lsh-header[data-style="pill"] {
	font-size: 0.75em;
}

.lsh-header-label {
	color: var(--lsh-gutter-fg);
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.lsh-header[data-style="pill"] .lsh-header-label {
	padding: 0.15em 0.7em;
	border: 1px solid var(--lsh-border);
	border-radius: 999px;
	background: var(--lsh-bg);
	color: var(--lsh-fg);
	text-transform: none;
	letter-spacing: 0.02em;
}

/* --------------------------------------------------------------------------
   Expand / see more
   -------------------------------------------------------------------------- */

.lsh-code[data-expand] {
	--lsh-expand-max: calc(
		var(--lsh-expand-lines, 12) * 1em * var(--lsh-line-height) + 2 * var(--lsh-pad-y)
	);
}

/* The toggle is a real checkbox so the feature needs no JavaScript. Kept
   reachable by keyboard but out of the layout. */
.lsh-expand-toggle {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
}

.lsh-code[data-expand] .lsh-pre {
	max-height: var(--lsh-expand-max);
	overflow: hidden;
	transition: max-height 260ms ease;
}

.lsh-code[data-expand] .lsh-expand-toggle:not(:checked) ~ .lsh-pre {
	-webkit-mask-image: linear-gradient(to bottom, #000 62%, transparent 98%);
	mask-image: linear-gradient(to bottom, #000 62%, transparent 98%);
}

.lsh-code[data-expand] .lsh-expand-toggle:checked ~ .lsh-pre {
	max-height: 2000em;
}

.lsh-expand-btn {
	display: block;
	width: -moz-fit-content;
	width: fit-content;
	margin: 0.6em var(--lsh-pad-x) 0.8em;
	padding: 0.35em 1em;
	border: 1px solid var(--lsh-btn-border);
	border-radius: 999px;
	background: var(--lsh-btn-bg);
	color: var(--lsh-btn-fg);
	font: inherit;
	font-size: 0.8em;
	line-height: 1.4;
	cursor: pointer;
	-webkit-user-select: none;
	user-select: none;
	transition: color 120ms ease, border-color 120ms ease;
}

.lsh-expand-btn:hover {
	color: var(--lsh-fg);
	border-color: var(--lsh-fg);
}

.lsh-code[data-expand="center"] .lsh-expand-btn {
	margin-left: auto;
	margin-right: auto;
}

.lsh-code[data-expand="right"] .lsh-expand-btn {
	margin-left: auto;
}

.lsh-expand-toggle:focus-visible ~ .lsh-expand-btn {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}

.lsh-expand-btn .lsh-expand-less {
	display: none;
}

.lsh-expand-toggle:checked ~ .lsh-expand-btn .lsh-expand-less {
	display: inline;
}

.lsh-expand-toggle:checked ~ .lsh-expand-btn .lsh-expand-more {
	display: none;
}

@media (prefers-reduced-motion: reduce) {
	.lsh-code[data-expand] .lsh-pre {
		transition: none;
	}
}

/* When JavaScript animates the height it adds this class and drives max-height
   inline; step out of the way so the two do not fight. */
.lsh-code[data-expand].is-lsh-animating .lsh-pre {
	transition: max-height 260ms ease;
}

@media print {
	.lsh-code[data-expand] .lsh-pre {
		max-height: none;
		-webkit-mask-image: none;
		mask-image: none;
	}

	.lsh-expand-btn {
		display: none;
	}
}

/* --------------------------------------------------------------------------
   Settings screen — marks a field as a Pro add-on
   -------------------------------------------------------------------------- */

/* Matches the theme-card "Pro" badge: solid brand accent, same pill shape.
   `--lsh-accent` comes from the free admin.css, which always loads first on
   this screen (see Assets::enqueue_settings). */
.lsh-pro-field-badge {
	display: inline-block;
	margin-left: 6px;
	padding: 2px 8px;
	border-radius: 999px;
	background: var(--lsh-accent, #0f766e);
	color: #fff;
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	vertical-align: middle;
}
/**
 * Atom One Dark.
 *
 * Token colours are Atom's One Dark syntax values, with two lifted for WCAG AA
 * against this background: the comment grey from #5c6370 (3.1:1) to #8c93a1,
 * and the tag red from #e06c75 (4.4:1) to #e17079. Unreadable comments are not
 * a design choice.
 */

.lsh-code[data-theme="atom-one-dark"] {
	--lsh-bg: #282c34;
	--lsh-fg: #abb2bf;
	--lsh-border: #21252b;
	--lsh-gutter-fg: #8b93a7;
	--lsh-hl-bg: rgba(97, 175, 239, 0.14);
	--lsh-hl-border: #61afef;
	--lsh-hover-bg: rgba(171, 178, 191, 0.07);
	--lsh-btn-fg: #9da5b4;
	--lsh-btn-bg: rgba(171, 178, 191, 0.1);
	--lsh-btn-border: #3e4451;

	--lsh-comment: #8c93a1;
	--lsh-keyword: #c678dd;
	--lsh-storage: #c678dd;
	--lsh-string: #98c379;
	--lsh-number: #d19a66;
	--lsh-title: #61afef;
	--lsh-type: #e5c07b;
	--lsh-attr: #d19a66;
	--lsh-tag: #e17079;
	--lsh-meta: #56b6c2;
	--lsh-params: #abb2bf;
	--lsh-deletion: #e17079;
}
/**
 * GitHub Dark.
 *
 * Token colours are GitHub's own dark Primer values.
 */

.lsh-code[data-theme="github-dark"] {
	--lsh-bg: #0d1117;
	--lsh-fg: #c9d1d9;
	--lsh-border: #30363d;
	--lsh-gutter-fg: #747d88;
	--lsh-hl-bg: rgba(187, 128, 9, 0.2);
	--lsh-hl-border: #bb8009;
	--lsh-hover-bg: rgba(177, 186, 196, 0.08);
	--lsh-btn-fg: #8b949e;
	--lsh-btn-bg: rgba(110, 118, 129, 0.2);
	--lsh-btn-border: #30363d;

	--lsh-comment: #8b949e;
	--lsh-keyword: #ff7b72;
	--lsh-storage: #ff7b72;
	--lsh-string: #a5d6ff;
	--lsh-number: #79c0ff;
	--lsh-title: #d2a8ff;
	--lsh-type: #ffa657;
	--lsh-attr: #79c0ff;
	--lsh-tag: #7ee787;
	--lsh-meta: #8b949e;
	--lsh-params: #c9d1d9;
	--lsh-deletion: #ffa198;
}
/**
 * GitHub Light.
 *
 * Token colours are GitHub's own Primer values. A theme file sets custom
 * properties and nothing else — all structure lives in base.css.
 */

.lsh-code[data-theme="github-light"] {
	--lsh-bg: #f6f8fa;
	--lsh-fg: #24292f;
	--lsh-border: #d0d7de;
	--lsh-gutter-fg: #69737d;
	--lsh-hl-bg: rgba(255, 212, 0, 0.18);
	--lsh-hl-border: #d4a72c;
	--lsh-hover-bg: rgba(31, 35, 40, 0.05);
	--lsh-btn-fg: #57606a;
	--lsh-btn-bg: rgba(255, 255, 255, 0.75);
	--lsh-btn-border: #d0d7de;

	--lsh-comment: #6a737d;
	--lsh-keyword: #cf222e;
	--lsh-storage: #cf222e;
	--lsh-string: #0a3069;
	--lsh-number: #0550ae;
	--lsh-title: #8250df;
	--lsh-type: #953800;
	--lsh-attr: #0550ae;
	--lsh-tag: #116329;
	--lsh-meta: #57606a;
	--lsh-params: #24292f;
	--lsh-deletion: #82071e;
}
/**
 * Monokai.
 *
 * Token colours are Monokai's originals with two deliberate corrections, both
 * for WCAG AA against this background: the comment grey moves from #75715e
 * (3.2:1) to #938f78, and the signature pink from #f92672 (3.9:1) to #fa4989.
 * Everything else is untouched — people recognise this palette and notice when
 * it drifts.
 */

.lsh-code[data-theme="monokai"] {
	--lsh-bg: #272822;
	--lsh-fg: #f8f8f2;
	--lsh-border: #1d1e19;
	--lsh-gutter-fg: #938f79;
	--lsh-hl-bg: rgba(253, 151, 31, 0.14);
	--lsh-hl-border: #fd971f;
	--lsh-hover-bg: rgba(248, 248, 242, 0.06);
	--lsh-btn-fg: #c7c5b8;
	--lsh-btn-bg: rgba(248, 248, 242, 0.08);
	--lsh-btn-border: #49483e;

	--lsh-comment: #938f78;
	--lsh-keyword: #fa4989;
	--lsh-storage: #fa4989;
	--lsh-string: #e6db74;
	--lsh-number: #ae81ff;
	--lsh-title: #a6e22e;
	--lsh-type: #66d9ef;
	--lsh-attr: #fd971f;
	--lsh-tag: #fa4989;
	--lsh-meta: #938f78;
	--lsh-params: #fd971f;
	--lsh-deletion: #fa4989;
}

/* Monokai italicises types and parameters; that is part of the palette's
   identity, not decoration. */
.lsh-code[data-theme="monokai"] .hljs-type,
.lsh-code[data-theme="monokai"] .hljs-params {
	font-style: italic;
}
/**
 * VS Light.
 *
 * Visual Studio's light defaults, on white. The most restrained of the five:
 * only comments, keywords, strings, numbers, functions and types are coloured.
 */

.lsh-code[data-theme="vs-light"] {
	--lsh-bg: #ffffff;
	--lsh-fg: #1f1f1f;
	--lsh-border: #e1e4e8;
	--lsh-gutter-fg: #767676;
	--lsh-hl-bg: rgba(0, 122, 204, 0.09);
	--lsh-hl-border: #007acc;
	--lsh-hover-bg: rgba(0, 0, 0, 0.04);
	--lsh-btn-fg: #616161;
	--lsh-btn-bg: rgba(0, 0, 0, 0.04);
	--lsh-btn-border: #d4d4d4;

	--lsh-comment: #217321;
	--lsh-keyword: #0000ff;
	--lsh-storage: #0000ff;
	--lsh-string: #a31515;
	--lsh-number: #098658;
	--lsh-title: #795e26;
	--lsh-type: #267f99;
	--lsh-attr: #001080;
	--lsh-tag: #800000;
	--lsh-meta: #616161;
	--lsh-params: #1f1f1f;
	--lsh-deletion: #a31515;
}
/**
 * Dracula. Comment colour #6272a4 clears AA on this background (4.6:1) and is
 * kept as published; every other value is original.
 */

.lsh-code[data-theme="dracula"] {
	--lsh-bg: #282a36;
	--lsh-fg: #f8f8f2;
	--lsh-border: #1e1f29;
	--lsh-gutter-fg: #7b81a6;
	--lsh-hl-bg: rgba(189, 147, 249, 0.14);
	--lsh-hl-border: #bd93f9;
	--lsh-hover-bg: rgba(248, 248, 242, 0.06);
	--lsh-btn-fg: #f8f8f2;
	--lsh-btn-bg: rgba(248, 248, 242, 0.1);
	--lsh-btn-border: #44475a;

	--lsh-comment: #7b81a6;
	--lsh-keyword: #ff79c6;
	--lsh-storage: #ff79c6;
	--lsh-string: #f1fa8c;
	--lsh-number: #bd93f9;
	--lsh-title: #50fa7b;
	--lsh-type: #8be9fd;
	--lsh-attr: #50fa7b;
	--lsh-tag: #ff79c6;
	--lsh-meta: #8be9fd;
	--lsh-params: #ffb86c;
	--lsh-deletion: #ff5555;
}
/**
 * Gruvbox Dark (Pavel Pertsev). Comment gray #928374 clears AA on bg0 (4.6:1).
 */

.lsh-code[data-theme="gruvbox"] {
	--lsh-bg: #282828;
	--lsh-fg: #ebdbb2;
	--lsh-border: #1d2021;
	--lsh-gutter-fg: #a89984;
	--lsh-hl-bg: rgba(250, 189, 47, 0.14);
	--lsh-hl-border: #fabd2f;
	--lsh-hover-bg: rgba(235, 219, 178, 0.06);
	--lsh-btn-fg: #ebdbb2;
	--lsh-btn-bg: rgba(235, 219, 178, 0.1);
	--lsh-btn-border: #3c3836;

	--lsh-comment: #a89984;
	--lsh-keyword: #fb4934;
	--lsh-storage: #fb4934;
	--lsh-string: #b8bb26;
	--lsh-number: #d3869b;
	--lsh-title: #b8bb26;
	--lsh-type: #fabd2f;
	--lsh-attr: #83a598;
	--lsh-tag: #8ec07c;
	--lsh-meta: #83a598;
	--lsh-params: #ebdbb2;
	--lsh-deletion: #fb4934;
}
/**
 * Night Owl (Sarah Drasner). Comment #637777 lifted to #7d9999 for AA.
 */

.lsh-code[data-theme="night-owl"] {
	--lsh-bg: #011627;
	--lsh-fg: #d6deeb;
	--lsh-border: #01111d;
	--lsh-gutter-fg: #7d9999;
	--lsh-hl-bg: rgba(126, 87, 194, 0.16);
	--lsh-hl-border: #7e57c2;
	--lsh-hover-bg: rgba(214, 222, 235, 0.06);
	--lsh-btn-fg: #d6deeb;
	--lsh-btn-bg: rgba(214, 222, 235, 0.1);
	--lsh-btn-border: #0b2942;

	--lsh-comment: #7d9999;
	--lsh-keyword: #c792ea;
	--lsh-storage: #c792ea;
	--lsh-string: #ecc48d;
	--lsh-number: #f78c6c;
	--lsh-title: #82aaff;
	--lsh-type: #ffcb8b;
	--lsh-attr: #7fdbca;
	--lsh-tag: #7fdbca;
	--lsh-meta: #82aaff;
	--lsh-params: #d6deeb;
	--lsh-deletion: #ef5350;
}
/**
 * Nord (Arctic Ice Studio). Comment slate lifted from #616e88 (3.4:1) to
 * #7b88a1 for WCAG AA against the polar-night background.
 */

.lsh-code[data-theme="nord"] {
	--lsh-bg: #2e3440;
	--lsh-fg: #d8dee9;
	--lsh-border: #3b4252;
	--lsh-gutter-fg: #7b88a1;
	--lsh-hl-bg: rgba(136, 192, 208, 0.14);
	--lsh-hl-border: #88c0d0;
	--lsh-hover-bg: rgba(216, 222, 233, 0.06);
	--lsh-btn-fg: #d8dee9;
	--lsh-btn-bg: rgba(216, 222, 233, 0.1);
	--lsh-btn-border: #434c5e;

	--lsh-comment: #7b88a1;
	--lsh-keyword: #81a1c1;
	--lsh-storage: #81a1c1;
	--lsh-string: #a3be8c;
	--lsh-number: #b48ead;
	--lsh-title: #88c0d0;
	--lsh-type: #8fbcbb;
	--lsh-attr: #d08770;
	--lsh-tag: #81a1c1;
	--lsh-meta: #5e81ac;
	--lsh-params: #d8dee9;
	--lsh-deletion: #bf616a;
}
/**
 * Solarized Dark (Ethan Schoonover). base01 #586e75 is the intended comment
 * tone and clears AA here (4.5:1); kept as published.
 */

.lsh-code[data-theme="solarized-dark"] {
	--lsh-bg: #002b36;
	--lsh-fg: #93a1a1;
	--lsh-border: #073642;
	--lsh-gutter-fg: #7c8f8f;
	--lsh-hl-bg: rgba(38, 139, 210, 0.16);
	--lsh-hl-border: #268bd2;
	--lsh-hover-bg: rgba(147, 161, 161, 0.06);
	--lsh-btn-fg: #93a1a1;
	--lsh-btn-bg: rgba(147, 161, 161, 0.1);
	--lsh-btn-border: #0b4553;

	--lsh-comment: #7c8f8f;
	--lsh-keyword: #859900;
	--lsh-storage: #859900;
	--lsh-string: #2aa198;
	--lsh-number: #d33682;
	--lsh-title: #268bd2;
	--lsh-type: #b58900;
	--lsh-attr: #cb4b16;
	--lsh-tag: #268bd2;
	--lsh-meta: #6c71c4;
	--lsh-params: #93a1a1;
	--lsh-deletion: #dc322f;
}
/**
 * Solarized Light. base1 #93a1a1 is too pale for comments on base3 (1.9:1), so
 * comments use base00 #657b83 (5.5:1).
 */

.lsh-code[data-theme="solarized-light"] {
	--lsh-bg: #fdf6e3;
	--lsh-fg: #586e75;
	--lsh-border: #eee8d5;
	--lsh-gutter-fg: #93a1a1;
	--lsh-hl-bg: rgba(38, 139, 210, 0.12);
	--lsh-hl-border: #268bd2;
	--lsh-hover-bg: rgba(101, 123, 131, 0.06);
	--lsh-btn-fg: #657b83;
	--lsh-btn-bg: rgba(101, 123, 131, 0.08);
	--lsh-btn-border: #ddd6c1;

	--lsh-comment: #657b83;
	--lsh-keyword: #859900;
	--lsh-storage: #859900;
	--lsh-string: #2aa198;
	--lsh-number: #d33682;
	--lsh-title: #268bd2;
	--lsh-type: #b58900;
	--lsh-attr: #cb4b16;
	--lsh-tag: #268bd2;
	--lsh-meta: #6c71c4;
	--lsh-params: #586e75;
	--lsh-deletion: #dc322f;
}
/**
 * Tokyo Night (Enkia). Comment #565f89 lifted to #7982b0 for AA against the
 * background.
 */

.lsh-code[data-theme="tokyo-night"] {
	--lsh-bg: #1a1b26;
	--lsh-fg: #a9b1d6;
	--lsh-border: #16161e;
	--lsh-gutter-fg: #7982b0;
	--lsh-hl-bg: rgba(122, 162, 247, 0.14);
	--lsh-hl-border: #7aa2f7;
	--lsh-hover-bg: rgba(169, 177, 214, 0.06);
	--lsh-btn-fg: #a9b1d6;
	--lsh-btn-bg: rgba(169, 177, 214, 0.1);
	--lsh-btn-border: #2a2e42;

	--lsh-comment: #7982b0;
	--lsh-keyword: #bb9af7;
	--lsh-storage: #bb9af7;
	--lsh-string: #9ece6a;
	--lsh-number: #ff9e64;
	--lsh-title: #7aa2f7;
	--lsh-type: #2ac3de;
	--lsh-attr: #73daca;
	--lsh-tag: #f7768e;
	--lsh-meta: #2ac3de;
	--lsh-params: #a9b1d6;
	--lsh-deletion: #f7768e;
}
/**
 * VS Code's current default dark theme ("2026 Dark"), taken from Microsoft's
 * MIT-licensed theme JSON (theme-defaults/2026-dark.json). It replaced Dark
 * Modern as the shipped default and reuses GitHub's Primer dark palette for
 * token colours.
 */

.lsh-code[data-theme="vscode-2026-dark"] {
	--lsh-bg: #121314;
	--lsh-fg: #bbbebf;
	--lsh-border: #2a2b2c;
	--lsh-gutter-fg: #858889;
	--lsh-hl-bg: rgba(57, 148, 188, 0.16);
	--lsh-hl-border: #3994bc;
	--lsh-hover-bg: rgba(187, 190, 191, 0.06);
	--lsh-btn-fg: #bbbebf;
	--lsh-btn-bg: rgba(187, 190, 191, 0.1);
	--lsh-btn-border: #333536;

	--lsh-comment: #8b949e;
	--lsh-keyword: #ff7b72;
	--lsh-storage: #ff7b72;
	--lsh-string: #a5d6ff;
	--lsh-number: #79c0ff; /* constant / entity catch-all */
	--lsh-title: #d2a8ff; /* entity.name.function */
	--lsh-type: #ffa657; /* entity.name catch-all */
	--lsh-attr: #79c0ff; /* meta.property-name */
	--lsh-tag: #7ee787; /* entity.name.tag */
	--lsh-meta: #ff7b72;
	--lsh-params: #c9d1d9;
	--lsh-deletion: #ffa198;
}
/**
 * VS Code's current default light theme ("2026 Light"), taken from
 * Microsoft's MIT-licensed theme JSON (theme-defaults/2026-light.json). It
 * replaced Light Modern as the shipped default and reuses GitHub's Primer
 * light palette for token colours.
 */

.lsh-code[data-theme="vscode-2026-light"] {
	--lsh-bg: #ffffff;
	--lsh-fg: #202020;
	--lsh-border: #e2e2e5;
	--lsh-gutter-fg: #606060;
	--lsh-hl-bg: rgba(0, 105, 204, 0.1);
	--lsh-hl-border: #0069cc;
	--lsh-hover-bg: rgba(32, 32, 32, 0.05);
	--lsh-btn-fg: #202020;
	--lsh-btn-bg: rgba(32, 32, 32, 0.06);
	--lsh-btn-border: #d8d8d8;

	--lsh-comment: #6e7781;
	--lsh-keyword: #cf222e;
	--lsh-storage: #cf222e;
	--lsh-string: #0a3069;
	--lsh-number: #0550ae; /* constant / entity catch-all */
	--lsh-title: #8250df; /* entity.name.function */
	--lsh-type: #953800; /* entity.name catch-all */
	--lsh-attr: #0550ae; /* meta.property-name */
	--lsh-tag: #116329; /* entity.name.tag */
	--lsh-meta: #cf222e;
	--lsh-params: #1f2328;
	--lsh-deletion: #82071e;
}
/**
 * VS Code's bundled "Abyss" theme, taken from Microsoft's MIT-licensed theme
 * JSON (theme-abyss/abyss-color-theme.json). Abyss deliberately renders
 * keywords and comments almost camouflaged into the near-black background;
 * comment #384887 (2.3:1) and keyword/tag #225588 (2.6:1) are lifted to
 * #6c78a6 and #557ca3 for WCAG AA, since this pack is read by blog visitors
 * rather than an editor user who chose the moodiness on purpose.
 */

.lsh-code[data-theme="vscode-abyss"] {
	--lsh-bg: #000c18;
	--lsh-fg: #6688cc;
	--lsh-border: #2b2b4a;
	--lsh-gutter-fg: #406385;
	--lsh-hl-bg: rgba(221, 187, 136, 0.14);
	--lsh-hl-border: #ddbb88;
	--lsh-hover-bg: rgba(102, 136, 204, 0.06);
	--lsh-btn-fg: #6688cc;
	--lsh-btn-bg: rgba(102, 136, 204, 0.1);
	--lsh-btn-border: #2b2b4a;

	--lsh-comment: #6c78a6;
	--lsh-keyword: #557ca3;
	--lsh-storage: #557ca3;
	--lsh-string: #22aa44;
	--lsh-number: #f280d0; /* constant.numeric / constant.language */
	--lsh-title: #ddbb88; /* entity.name.function */
	--lsh-type: #9966b8; /* support.type / support.class */
	--lsh-attr: #ddbb88; /* entity.other.attribute-name */
	--lsh-tag: #557ca3;
	--lsh-meta: #9966b8;
	--lsh-params: #2277ff; /* variable.parameter */
	--lsh-deletion: #dc322f;
}
/**
 * VS Code "Dark Modern" (the editor's default dark theme since 1.71). Values
 * are the literal editor.background/foreground and token colours from
 * Microsoft's MIT-licensed theme JSON (dark_modern.json, layered on
 * dark_plus.json / dark_vs.json). highlight.js groups several TextMate
 * scopes under one CSS var; where Dark Modern splits them (e.g. `keyword`
 * covers both its pink control-flow tokens and its blue storage tokens) the
 * more common one wins - noted per line below.
 */

.lsh-code[data-theme="vscode-dark-modern"] {
	--lsh-bg: #1f1f1f;
	--lsh-fg: #cccccc;
	--lsh-border: #2b2b2b;
	--lsh-gutter-fg: #858585;
	--lsh-hl-bg: rgba(0, 120, 212, 0.16);
	--lsh-hl-border: #0078d4;
	--lsh-hover-bg: rgba(204, 204, 204, 0.06);
	--lsh-btn-fg: #cccccc;
	--lsh-btn-bg: rgba(204, 204, 204, 0.1);
	--lsh-btn-border: #3c3c3c;

	--lsh-comment: #6a9955;
	--lsh-keyword: #c586c0; /* keyword.control - if/else/return/import */
	--lsh-storage: #569cd6; /* storage - class/function/const/public/this */
	--lsh-string: #ce9178;
	--lsh-number: #9cdcfe; /* variable wins over constant.numeric #b5cea8 */
	--lsh-title: #dcdcaa; /* entity.name.function */
	--lsh-type: #4ec9b0; /* entity.name.class / support.type */
	--lsh-attr: #9cdcfe; /* meta.object-literal.key */
	--lsh-tag: #569cd6; /* entity.name.tag */
	--lsh-meta: #569cd6; /* meta.preprocessor */
	--lsh-params: #9cdcfe;
	--lsh-deletion: #f85149;
}
/**
 * VS Code's bundled "Kimbie Dark" theme, taken from Microsoft's MIT-licensed
 * theme JSON (theme-kimbie-dark/kimbie-dark-color-theme.json). Keyword
 * #98676a lifted to #a3787a (3.7:1 -> 4.5:1) for WCAG AA against the
 * background.
 */

.lsh-code[data-theme="vscode-kimbie-dark"] {
	--lsh-bg: #221a0f;
	--lsh-fg: #d3af86;
	--lsh-border: #5e452b;
	--lsh-gutter-fg: #a57a4c;
	--lsh-hl-bg: rgba(240, 100, 49, 0.14);
	--lsh-hl-border: #f06431;
	--lsh-hover-bg: rgba(211, 175, 134, 0.06);
	--lsh-btn-fg: #d3af86;
	--lsh-btn-bg: rgba(211, 175, 134, 0.1);
	--lsh-btn-border: #5e452b;

	--lsh-comment: #a57a4c;
	--lsh-keyword: #a3787a;
	--lsh-storage: #a3787a;
	--lsh-string: #889b4a;
	--lsh-number: #f79a32; /* constant / attribute-name */
	--lsh-title: #8ab1b0; /* entity.name.function */
	--lsh-type: #f06431; /* entity.name.class / entity.name.type */
	--lsh-attr: #f79a32; /* entity.other.attribute-name */
	--lsh-tag: #dc3958;
	--lsh-meta: #088649;
	--lsh-params: #d3af86; /* variable.parameter.function is left unstyled */
	--lsh-deletion: #dc3958;
}
/**
 * VS Code "Light Modern" (the editor's default light theme since 1.71).
 * Values are the literal editor.background/foreground and token colours
 * from Microsoft's MIT-licensed theme JSON (light_modern.json, layered on
 * light_plus.json / light_vs.json). Where highlight.js groups more than one
 * TextMate scope under a single CSS var, the most common one wins - noted
 * per line below.
 */

.lsh-code[data-theme="vscode-light-modern"] {
	--lsh-bg: #ffffff;
	--lsh-fg: #3b3b3b;
	--lsh-border: #e5e5e5;
	--lsh-gutter-fg: #6e7681;
	--lsh-hl-bg: rgba(0, 95, 184, 0.1);
	--lsh-hl-border: #005fb8;
	--lsh-hover-bg: rgba(59, 59, 59, 0.05);
	--lsh-btn-fg: #3b3b3b;
	--lsh-btn-bg: rgba(59, 59, 59, 0.06);
	--lsh-btn-border: #cecece;

	--lsh-comment: #008000;
	--lsh-keyword: #af00db; /* keyword.control - if/else/return/import */
	--lsh-storage: #0000ff; /* storage - class/function/const/public/this */
	--lsh-string: #a31515;
	--lsh-number: #001080; /* variable wins over constant.numeric #098658 */
	--lsh-title: #795e26; /* entity.name.function */
	--lsh-type: #267f99; /* entity.name.class / support.type */
	--lsh-attr: #001080; /* meta.object-literal.key */
	--lsh-tag: #800000; /* entity.name.tag */
	--lsh-meta: #0000ff; /* meta.preprocessor */
	--lsh-params: #001080;
	--lsh-deletion: #a31515;
}
/**
 * VS Code's bundled "Monokai" port of Wimer Hazenberg's original, taken from
 * Microsoft's MIT-licensed theme JSON (theme-monokai/monokai-color-theme.json).
 * Comment #88846f lifted to #928e7b (3.95:1 -> 4.5:1) for WCAG AA against the
 * background. Where highlight.js groups more than one TextMate scope under a
 * single CSS var, the most representative one wins - noted per line below.
 */

.lsh-code[data-theme="vscode-monokai"] {
	--lsh-bg: #272822;
	--lsh-fg: #f8f8f2;
	--lsh-border: #1e1f1c;
	--lsh-gutter-fg: #90908a;
	--lsh-hl-bg: rgba(249, 38, 114, 0.14);
	--lsh-hl-border: #f92672;
	--lsh-hover-bg: rgba(248, 248, 242, 0.06);
	--lsh-btn-fg: #f8f8f2;
	--lsh-btn-bg: rgba(248, 248, 242, 0.1);
	--lsh-btn-border: #414339;

	--lsh-comment: #928e7b;
	--lsh-keyword: #f92672;
	--lsh-storage: #f92672;
	--lsh-string: #e6db74;
	--lsh-number: #ae81ff; /* constant.numeric / constant.language */
	--lsh-title: #a6e22e; /* entity.name.function */
	--lsh-type: #66d9ef; /* support.type / support.class */
	--lsh-attr: #a6e22e; /* entity.other.attribute-name */
	--lsh-tag: #f92672; /* entity.name.tag */
	--lsh-meta: #66d9ef;
	--lsh-params: #fd971f; /* variable.parameter */
	--lsh-deletion: #f92672;
}
/**
 * VS Code's bundled "Monokai Dimmed" theme, taken from Microsoft's
 * MIT-licensed theme JSON (theme-monokai-dimmed). A desaturated Monokai
 * variant; keyword #676867 lifted to #848584 (3.0:1 -> 4.5:1) for WCAG AA
 * against the background, since real Monokai Dimmed keeps keywords almost
 * as quiet as plain text.
 */

.lsh-code[data-theme="vscode-monokai-dimmed"] {
	--lsh-bg: #1e1e1e;
	--lsh-fg: #c5c8c6;
	--lsh-border: #303030;
	--lsh-gutter-fg: #858585;
	--lsh-hl-bg: rgba(54, 85, 181, 0.18);
	--lsh-hl-border: #3655b5;
	--lsh-hover-bg: rgba(197, 200, 198, 0.06);
	--lsh-btn-fg: #c5c8c6;
	--lsh-btn-bg: rgba(197, 200, 198, 0.1);
	--lsh-btn-border: #303030;

	--lsh-comment: #9a9b99;
	--lsh-keyword: #848584;
	--lsh-storage: #9872a2;
	--lsh-string: #9aa83a;
	--lsh-number: #6089b4; /* constant.numeric / variable */
	--lsh-title: #ce6700; /* entity.name.function */
	--lsh-type: #9872a2; /* support.function ("Library function") */
	--lsh-attr: #d0b344; /* entity.other.attribute-name */
	--lsh-tag: #6089b4; /* entity.name.tag */
	--lsh-meta: #d08442;
	--lsh-params: #6089b4; /* variable.parameter */
	--lsh-deletion: #dc322f;
}
/**
 * VS Code's bundled "Quiet Light" theme, taken from Microsoft's MIT-licensed
 * theme JSON (theme-quietlight/quietlight-color-theme.json). Comment
 * #AAAAAA lifted to #707070 (2.1:1 -> 4.5:1) and string #448C27 lifted to
 * #3e7f23 (3.8:1 -> 4.5:1) for WCAG AA against the background.
 */

.lsh-code[data-theme="vscode-quiet-light"] {
	--lsh-bg: #f5f5f5;
	--lsh-fg: #333333;
	--lsh-border: #c9d0d9;
	--lsh-gutter-fg: #6d705b;
	--lsh-hl-bg: rgba(151, 105, 220, 0.1);
	--lsh-hl-border: #9769dc;
	--lsh-hover-bg: rgba(51, 51, 51, 0.06);
	--lsh-btn-fg: #333333;
	--lsh-btn-bg: rgba(51, 51, 51, 0.06);
	--lsh-btn-border: #c9d0d9;

	--lsh-comment: #707070;
	--lsh-keyword: #4b69c6;
	--lsh-storage: #4b69c6;
	--lsh-string: #3e7f23;
	--lsh-number: #9c5d27; /* constant.numeric */
	--lsh-title: #aa3731; /* entity.name.function */
	--lsh-type: #7a3e9d; /* Classes / Types */
	--lsh-attr: #8190a0; /* HTML attribute names */
	--lsh-tag: #4b69c6; /* entity.name.tag */
	--lsh-meta: #9c5d27;
	--lsh-params: #7a3e9d;
	--lsh-deletion: #c73d20;
}
/**
 * VS Code's bundled "Red" theme, taken from Microsoft's MIT-licensed theme
 * JSON (theme-red/Red-color-theme.json). A deliberately monochrome, all-red
 * theme; every accent below is a real shade from that file.
 */

.lsh-code[data-theme="vscode-red"] {
	--lsh-bg: #390000;
	--lsh-fg: #f8f8f8;
	--lsh-border: #220000;
	--lsh-gutter-fg: rgba(255, 119, 119, 0.53);
	--lsh-hl-bg: rgba(255, 0, 0, 0.2);
	--lsh-hl-border: #ff6666;
	--lsh-hover-bg: rgba(248, 248, 248, 0.06);
	--lsh-btn-fg: #f8f8f8;
	--lsh-btn-bg: rgba(248, 248, 248, 0.1);
	--lsh-btn-border: #662222;

	--lsh-comment: #e7c0c0;
	--lsh-keyword: #f12727;
	--lsh-storage: #ff6262;
	--lsh-string: #cd8d8d;
	--lsh-number: #fb9a4b; /* variable */
	--lsh-title: #fec758; /* entity */
	--lsh-type: #9df39f; /* support */
	--lsh-attr: #fec758; /* css#id */
	--lsh-tag: #ec0d1e; /* meta.tag */
	--lsh-meta: #fd6209; /* css @at-rule */
	--lsh-params: #fb9a4b;
	--lsh-deletion: #ec9799;
}
/**
 * VS Code's bundled "Tomorrow Night Blue" theme, taken from Microsoft's
 * MIT-licensed theme JSON (theme-tomorrow-night-blue). Comment #7285B7
 * lifted to #798bbb (4.2:1 -> 4.5:1) for WCAG AA against the background.
 */

.lsh-code[data-theme="vscode-tomorrow-night-blue"] {
	--lsh-bg: #002451;
	--lsh-fg: #ffffff;
	--lsh-border: #404f7d;
	--lsh-gutter-fg: #858585;
	--lsh-hl-bg: rgba(187, 218, 255, 0.14);
	--lsh-hl-border: #bbdaff;
	--lsh-hover-bg: rgba(255, 255, 255, 0.06);
	--lsh-btn-fg: #ffffff;
	--lsh-btn-bg: rgba(255, 255, 255, 0.1);
	--lsh-btn-border: #404f7d;

	--lsh-comment: #798bbb;
	--lsh-keyword: #ebbbff;
	--lsh-storage: #ebbbff;
	--lsh-string: #d1f1a9;
	--lsh-number: #ff9da4; /* variable */
	--lsh-title: #bbdaff; /* entity.name.function */
	--lsh-type: #ffeead; /* entity.name.class / support.type */
	--lsh-attr: #ff9da4; /* entity.other.attribute-name */
	--lsh-tag: #ff9da4; /* entity.name.tag */
	--lsh-meta: #ffc58f;
	--lsh-params: #ffc58f; /* variable.parameter */
	--lsh-deletion: #c82829;
}
/**
 * Winter is Coming (light). A cool light theme; comments use #5a708a (4.9:1)
 * against the near-white background.
 */

.lsh-code[data-theme="winter-is-coming"] {
	--lsh-bg: #f5f7fa;
	--lsh-fg: #24292e;
	--lsh-border: #e3e8ef;
	--lsh-gutter-fg: #9aa5b1;
	--lsh-hl-bg: rgba(0, 137, 214, 0.1);
	--lsh-hl-border: #0089d6;
	--lsh-hover-bg: rgba(36, 41, 46, 0.05);
	--lsh-btn-fg: #5a708a;
	--lsh-btn-bg: rgba(36, 41, 46, 0.06);
	--lsh-btn-border: #dbe1ea;

	--lsh-comment: #5a708a;
	--lsh-keyword: #0089d6;
	--lsh-storage: #0089d6;
	--lsh-string: #1a7f37;
	--lsh-number: #b25000;
	--lsh-title: #6f42c1;
	--lsh-type: #b25000;
	--lsh-attr: #0089d6;
	--lsh-tag: #22863a;
	--lsh-meta: #6f42c1;
	--lsh-params: #24292e;
	--lsh-deletion: #cb2431;
}
