.reveal-cover h1,
.reveal-cover h2 {
    font-size: 3em;
    line-height: 1.1;
    margin: 0;
}

.reveal-cover h3 {
    font-size: 2.8em;
    margin: 1em 0 1rem;
}

.reveal-cover p {
    font-size: 1.4em;
    margin: 0;
}

/* Cover image — sits above the heading via normal block flow. min(60%, 500px)
   keeps it readable on both wide and narrow slide canvases. */
.reveal-cover-image {
    margin-bottom: 1.5rem;
}

.reveal-cover-image img {
    max-width: 30%;
    height: auto;
}

.reveal-cover .cover-wordmark {
	font-family: 'Montserrat', sans-serif;
	font-weight: 800;
	font-size: 7em;
	line-height: 0.95;
	color: var(--cmp-accent);
	text-transform: uppercase;
}

/* Auto-fit wrapper injected by the deck init script (Pages/Revealjs.html)
   around each slide section's children. When the slide's content height
   exceeds reveal's logical canvas (default 700px), the script applies a
   transform: scale(ratio) here so the content shrinks to fit. The wrapper
   needs an explicit block layout for the script's scrollHeight measurement
   to work correctly. transform-origin is also set inline by the script
   (top center) — declared here too as a sensible default in case the
   script-set value is ever cleared mid-flight. */
.reveal-fit-wrapper {
	display: block;
	width: 100%;
	transform-origin: top center;
}

.reveal-logo {
	z-index: 30;
	pointer-events: none;
	-webkit-user-select: none;
	user-select: none;
	width: auto;
	height: 6vh;
	box-shadow: none;
	background: 0 0;
	border: 0;
	position: fixed;
	top: 4vh;
	right: 0;
}

/* Code-block shell — `<pre data-monaco>` wrappers emitted by
   Container/Code.html. RevealMonacoMount.js mounts a Monaco editor
   (read-only for anonymous viewers, editable in visual_editor's
   preview iframe) inside each block on DOMContentLoaded.

   We only own the OUTER shell here (deck-layout sizing — 90% width,
   drop shadow, vs-dark placeholder background). Monaco brings its own
   chrome via the vendored editor.css stylesheet (RevealMonacoMount.js
   injects a <link> tag pointing at Vendor/monaco/editor.css on first
   load); the resulting `.monaco-editor` div inside the `<pre>` carries
   carets, selection, line gutter, etc.

   No fixed height — RevealMonacoMount.js sets `pre.style.height` from
   `editor.getContentHeight()` on every content change, so the block
   auto-grows with the source. The `min-height: 3em` keeps an empty
   editor visible before the first mount completes. Tall content is
   handled deck-wide by the reveal-fit-wrapper transform in
   Pages/Revealjs.html (scales the whole slide down when its scrollHeight
   exceeds reveal's canvas) — no need for a fixed cap here.

   Pre-mount colouring: vs-dark's chrome (#1e1e1e) is painted on the
   `<pre>` directly so the brief moment between page load and Monaco
   finishing isn't a white-on-default flash. Once Monaco mounts, its
   own theme styles paint over the placeholder. */
.reveal pre[data-monaco] {
	display: block;
	margin: var(--r-block-margin) auto;
	padding: 0;
	min-height: 3em;
	text-align: left;
	box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
	background-color: #1e1e1e;  /* vs-dark placeholder until Monaco paints over */
	color: #d4d4d4;
	border-radius: 4px;
	overflow: hidden;
}

/* Inline `<code>` emitted by CKEditor's Code plugin (Revealjs.yaml's
   `code` toolbar button). Reveal.js stock themes mostly leave inline
   <code> at the browser default (monospace, no chrome) which reads as
   indistinguishable from surrounding prose. This rule gives it a
   subtle dark token-style background so it pops out visually inside
   slide prose — matches the vs-dark family the Monaco code blocks use
   so prose and block code share the same visual vocabulary. */
.reveal :not(pre) > code {
	display: inline;
	padding: 0.1em 0.35em;
	background-color: rgba(30, 30, 30, 0.85);
	color: #d4d4d4;
	font-family: var(--r-code-font, Menlo, Monaco, "Courier New", monospace);
	font-size: 0.8em;
	border-radius: 3px;
	white-space: nowrap;
}

/* Author wordmark — mirrors .reveal-logo but anchored to the opposite
   corner. pointer-events: none keeps it from intercepting clicks on
   slide content (e.g. reveal's overview-mode hit targets). */
.reveal-author {
	z-index: 30;
	pointer-events: none;
	-webkit-user-select: none;
	user-select: none;
	position: fixed;
	bottom: 4vh;
	left: 4vh;
	color: var(--cmp-accent, currentColor);
	font-size: 0.8em;
	letter-spacing: 0.05em;
	opacity: 0.7;
}
