Files
jared 136c53643c
R-CMD-check / R CMD check (push) Successful in 3m52s
feat: add Quarto themes and templates (revealjs, HTML, PDF, Typst)
Integrate Civilytics Reveal.js slide extension, HTML/PDF/Typst document
themes, and _brand.yml into the package under inst/quarto/. Three new
helper functions (use_civilytics_revealjs, use_civilytics_theme,
use_civilytics_brand) copy assets into a user's Quarto project. Logos
are stored once in inst/img/ and distributed at install time.
2026-05-20 09:39:27 -06:00

1057 lines
29 KiB
SCSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*-- scss:defaults --*/
// Civilytics Reveal.js theme — defaults
// These map into Reveal/Quarto's theme variables so built-in
// components (lists, links, code, etc.) pick up the brand.
// Fonts — loaded by the extension's @import block below
$font-family-sans-serif: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif !default;
$font-family-serif: "Source Serif 4", "Source Serif Pro", Georgia, "Times New Roman", serif !default;
$font-family-monospace: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace !default;
$font-family-display: "Libre Franklin", "Franklin Gothic", "Inter", system-ui, sans-serif !default;
$presentation-font-size-root: 32px !default;
$presentation-font-smaller: 0.7 !default;
$presentation-line-height: 1.45 !default;
$body-bg: #FAF7F2 !default;
$body-color: #0E1A2B !default;
$link-color: #22406A !default;
$link-color-hover: #1A2E4A !default;
$selection-bg: #F8C8A3 !default;
$selection-color: #0E1A2B !default;
$presentation-heading-font: $font-family-display !default;
$presentation-heading-color: #0E1A2B !default;
$presentation-heading-font-weight: 800 !default;
$presentation-heading-line-height: 1.08 !default;
$presentation-heading-letter-spacing: -0.025em !default;
$presentation-heading-text-transform: none !default;
$presentation-h1-font-size: 2.4em !default;
$presentation-h2-font-size: 1.7em !default;
$presentation-h3-font-size: 1.3em !default;
$presentation-h4-font-size: 1.1em !default;
$code-block-bg: #0E1A2B !default;
$code-block-color: #FAF7F2 !default;
$code-color: #923D00 !default;
/*-- scss:rules --*/
/* ==========================================================
Civilytics Reveal.js theme — rules
Editorial, serif-led slides. Designed for Quarto + Pandoc.
Tokens mirror /colors_and_type.css from the Civilytics DS.
========================================================== */
@import url('https://fonts.googleapis.com/css2?family=Libre+Franklin:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,700&family=Source+Serif+4:opsz,wght@8..60,400;8..60,500;8..60,600;8..60,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
:root {
/* Civilytics tokens — keep names in sync with the design system */
--paper: #FAF7F2;
--paper-2: #F2EDE4;
--paper-3: #E6DFD1;
--rule: #D6CEBD;
--rule-strong: #B8AE97;
--ink: #0E1A2B;
--ink-2: #2B3A52;
--ink-3: #5A6A82;
--ink-4: #8C97AB;
--navy-900: #0E1A2B;
--navy-700: #1A2E4A;
--navy-600: #22406A;
--navy-500: #2E5590;
--navy-100: #DDE6F2;
--accent-900: #451A00;
--accent-700: #923D00;
--accent-600: #C25311;
--accent-500: #DB6C25;
--accent-300: #F2A976;
--accent-200: #F8C8A3;
--accent-100: #FBE0C6;
--teal-600: #1F6F70;
--plum-600: #6B3A5E;
--moss-600: #4A6B2F;
--brass-600: #B8751C;
--font-display: "Libre Franklin", "Franklin Gothic", "Inter", system-ui, sans-serif;
--font-serif: "Source Serif 4", "Source Serif Pro", Georgia, serif;
--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
--font-mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
--tracking-caps: 0.08em;
}
/* -----------------------------------------------------------
Reveal root & slide chrome
----------------------------------------------------------- */
.reveal-viewport {
background: var(--paper);
}
.reveal {
font-family: var(--font-sans);
font-size: 32px;
font-weight: 400;
color: var(--ink);
letter-spacing: 0;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
.reveal ::selection { background: var(--accent-200); color: var(--ink); }
.reveal ::-moz-selection { background: var(--accent-200); color: var(--ink); }
.reveal .slides {
text-align: left;
}
.reveal .slides > section,
.reveal .slides > section > section {
padding: 48px 72px;
line-height: 1.45;
font-weight: inherit;
box-sizing: border-box;
height: 100%;
}
/* -----------------------------------------------------------
Headings
----------------------------------------------------------- */
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
font-family: var(--font-display);
color: var(--ink);
font-weight: 800;
line-height: 1.08;
letter-spacing: -0.025em;
text-transform: none;
text-wrap: balance;
margin: 0 0 0.5em;
}
.reveal h1 { font-size: 2.4em; font-weight: 900; letter-spacing: -0.035em; line-height: 1.0; }
.reveal h2 { font-size: 1.7em; font-weight: 800; letter-spacing: -0.03em; }
.reveal h3 { font-size: 1.3em; font-weight: 700; letter-spacing: -0.022em; }
.reveal h4 { font-size: 1.1em; font-weight: 700; letter-spacing: -0.018em; }
/* Eyebrow kicker — used above headlines on many layouts */
.reveal .eyebrow,
.reveal [data-eyebrow]::before {
display: inline-flex;
align-items: center;
gap: 10px;
font-family: var(--font-sans);
font-size: 0.5em;
font-weight: 600;
color: var(--accent-600);
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
margin: 0 0 18px;
}
.reveal .eyebrow::before {
content: "";
display: inline-block;
width: 28px;
height: 2px;
background: var(--accent-600);
}
.reveal [data-eyebrow]::before {
content: attr(data-eyebrow);
}
/* -----------------------------------------------------------
Body copy, lists, links
----------------------------------------------------------- */
.reveal p {
font-family: var(--font-sans);
line-height: 1.55;
margin: 0 0 0.75em;
text-wrap: pretty;
}
.reveal .lead,
.reveal p.lead {
font-family: var(--font-serif);
font-size: 1.15em;
font-weight: 400;
line-height: 1.5;
color: var(--ink);
max-width: 26em;
padding-left: 0.75em;
border-left: 2px solid var(--accent-600);
margin: 0.5em 0 1em;
}
.reveal ul, .reveal ol {
display: block;
margin: 0.25em 0 0.75em;
padding-left: 1.3em;
}
.reveal li {
margin: 0.35em 0;
line-height: 1.5;
}
.reveal ul { list-style: none; }
.reveal ul > li { position: relative; }
.reveal ul > li::before {
content: "";
position: absolute;
left: -1.1em;
top: 0.7em;
width: 10px;
height: 2px;
background: var(--accent-600);
}
.reveal ol { list-style: decimal; }
.reveal ol > li::marker {
color: var(--accent-600);
font-family: var(--font-mono);
font-weight: 600;
}
.reveal a {
color: var(--navy-600);
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 3px;
transition: color 120ms ease-out, text-decoration-thickness 120ms ease-out;
}
.reveal a:hover {
color: var(--navy-700);
text-decoration-thickness: 2px;
}
.reveal hr {
border: none;
border-top: 1px solid var(--rule);
margin: 0.75em 0;
}
.reveal strong, .reveal b { font-weight: 700; color: var(--ink); }
.reveal em, .reveal i { font-style: italic; }
/* Small caps helper — for metadata rows */
.reveal .smallcaps,
.reveal .meta {
font-family: var(--font-sans);
font-size: 0.55em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--ink-3);
}
/* -----------------------------------------------------------
Block quote / pullquote
----------------------------------------------------------- */
.reveal blockquote {
font-family: var(--font-serif);
font-size: 1.1em;
font-style: italic;
line-height: 1.4;
color: var(--ink);
border-left: 3px solid var(--accent-600);
padding: 0.25em 0 0.25em 1em;
margin: 0.75em 0;
background: transparent;
box-shadow: none;
width: auto;
}
/* Big pullquote layout — .pullquote on a section */
.reveal section.pullquote {
display: flex;
flex-direction: column;
justify-content: center;
}
.reveal section.pullquote blockquote {
font-size: 1.8em;
font-style: italic;
line-height: 1.2;
border-left: none;
padding: 0;
max-width: 22em;
letter-spacing: -0.01em;
}
.reveal section.pullquote blockquote::before {
content: "\201C";
display: block;
font-family: var(--font-serif);
font-size: 2.2em;
line-height: 0.9;
color: var(--accent-600);
margin-bottom: 0.1em;
font-style: normal;
}
.reveal section.pullquote .attribution,
.reveal section.pullquote footer {
margin-top: 1em;
font-family: var(--font-sans);
font-size: 0.55em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--ink-3);
font-style: normal;
}
.reveal section.pullquote .attribution::before {
content: "— ";
color: var(--accent-600);
}
/* -----------------------------------------------------------
Code
----------------------------------------------------------- */
.reveal code {
font-family: var(--font-mono);
font-size: 0.85em;
color: var(--accent-700);
background: var(--paper-2);
padding: 0.08em 0.35em;
border-radius: 2px;
font-feature-settings: "tnum" 1, "zero" 1;
}
.reveal pre {
font-family: var(--font-mono);
font-size: 0.55em;
line-height: 1.5;
background: var(--ink);
color: var(--paper);
padding: 1em 1.25em;
border-radius: 8px;
box-shadow: none;
width: 100%;
max-width: 100%;
overflow: auto;
margin: 0.5em 0;
}
.reveal pre code {
background: transparent;
color: inherit;
padding: 0;
font-size: 1em;
display: block;
overflow: visible;
white-space: pre;
max-height: none;
}
/* Quarto code-line-number + highlight markers */
.reveal pre code .hljs-ln-numbers,
.reveal pre code .code-line-number {
color: var(--ink-4);
padding-right: 1em;
user-select: none;
}
.reveal div.sourceCode {
background: transparent;
border: none;
margin: 0.5em 0;
}
.reveal code span.co { color: #8C97AB; font-style: italic; } /* comments */
.reveal code span.st { color: #F2A976; } /* strings */
.reveal code span.dv,
.reveal code span.fl { color: #F8C8A3; } /* numbers */
.reveal code span.kw { color: #EA8A49; font-weight: 600; } /* keywords */
.reveal code span.cf { color: #EA8A49; font-weight: 600; } /* control flow */
.reveal code span.fu { color: #B3C6E0; } /* function */
.reveal code span.op { color: #D6CEBD; } /* operator */
.reveal code span.cn,
.reveal code span.va { color: #7CB3B3; } /* variables */
.reveal code span.at { color: #7CB3B3; }
/* Quarto line-highlighting */
.reveal pre code.sourceCode > span.has-line-highlight {
background: rgba(248, 200, 163, 0.14);
}
/* -----------------------------------------------------------
Tables
----------------------------------------------------------- */
.reveal table {
font-family: var(--font-sans);
font-size: 0.7em;
border-collapse: collapse;
margin: 0.5em 0;
width: 100%;
font-variant-numeric: tabular-nums;
}
.reveal table th,
.reveal table td {
padding: 0.55em 0.9em;
text-align: left;
border: none;
border-bottom: 1px solid var(--rule);
vertical-align: baseline;
}
.reveal table th {
font-family: var(--font-sans);
font-size: 0.82em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--ink-3);
border-bottom: 2px solid var(--ink);
padding-bottom: 0.4em;
background: transparent;
}
.reveal table tbody tr:nth-child(even) td {
background: var(--paper-2);
}
.reveal table tbody tr:last-child td {
border-bottom: 2px solid var(--ink);
}
/* Numeric columns — add .numeric to a <td>/<th> */
.reveal table td.numeric,
.reveal table th.numeric,
.reveal table td[align="right"],
.reveal table th[align="right"] {
text-align: right;
font-family: var(--font-mono);
font-variant-numeric: tabular-nums;
}
.reveal table caption {
caption-side: top;
text-align: left;
font-family: var(--font-sans);
font-size: 0.55em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--accent-600);
margin-bottom: 0.5em;
}
/* -----------------------------------------------------------
Images & figures
----------------------------------------------------------- */
.reveal img,
.reveal section img {
background: transparent;
border: none;
box-shadow: none;
margin: 0.25em 0;
max-width: 100%;
height: auto;
}
.reveal figure {
margin: 0.5em 0;
}
.reveal figure img {
display: block;
border: 1px solid var(--rule);
}
.reveal figure figcaption,
.reveal .caption {
font-family: var(--font-sans);
font-size: 0.55em;
line-height: 1.4;
color: var(--ink-3);
margin-top: 0.5em;
max-width: 42em;
}
.reveal figure figcaption strong,
.reveal .caption strong {
color: var(--accent-600);
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
font-size: 0.9em;
display: inline-block;
margin-right: 0.5em;
}
/* -----------------------------------------------------------
TITLE SLIDE
Quarto renders the title slide with #title-slide + <h1 class="title">
----------------------------------------------------------- */
.reveal #title-slide,
.reveal section.title-slide {
padding: 72px 80px;
display: flex !important;
flex-direction: column;
justify-content: space-between;
text-align: left;
background:
linear-gradient(180deg, var(--paper) 0%, var(--paper) 58%, var(--paper-2) 100%);
}
.reveal #title-slide .civilytics-mark,
.reveal section.title-slide .civilytics-mark {
display: block;
width: 72px;
height: 72px;
margin-bottom: 32px;
object-fit: contain;
}
/* Civilytics wordmark lockup — bold serif "Civilytics" + inline pulse accent.
Rendered as an <img> tag pointing at the official wordmark SVG asset
(assets/civilytics-wordmark.svg for ink-on-paper slides,
assets/civilytics-wordmark-reverse.svg for paper-on-ink slides).
Source viewBox is 558×160 (aspect ratio ≈ 3.4875). */
img.civilytics-wordmark,
.reveal img.civilytics-wordmark,
.reveal .civilytics-wordmark {
display: block;
height: 48px;
width: 167.4px; /* 558/160 aspect * 48px height */
flex: 0 0 auto;
align-self: flex-start;
object-fit: contain;
margin: 0 0 36px;
}
.reveal #title-slide .civilytics-wordmark,
.reveal section.title-slide .civilytics-wordmark {
height: 48px;
width: 167.4px;
margin: 0 0 36px;
color: var(--ink);
}
.reveal #title-slide .title,
.reveal section.title-slide h1.title,
.reveal section.title-slide h1:first-of-type {
font-family: var(--font-display);
font-size: 2.6em;
font-weight: 900;
letter-spacing: -0.035em;
line-height: 0.98;
color: var(--ink);
margin: 0 0 0.3em;
max-width: 18em;
text-wrap: balance;
}
.reveal #title-slide .subtitle,
.reveal section.title-slide p.subtitle,
.reveal section.title-slide .subtitle {
font-family: var(--font-serif);
font-size: 1.05em;
font-weight: 400;
font-style: italic;
line-height: 1.35;
color: var(--ink-2);
margin: 0 0 1em;
max-width: 28em;
padding-left: 0.75em;
border-left: 2px solid var(--accent-600);
}
/* Author / date / affiliation block */
.reveal #title-slide .quarto-title-authors,
.reveal #title-slide .quarto-title-author-name,
.reveal section.title-slide .author,
.reveal section.title-slide .date,
.reveal section.title-slide .affiliation {
font-family: var(--font-sans);
color: var(--ink-2);
}
.reveal #title-slide .author,
.reveal #title-slide .quarto-title-author-name,
.reveal section.title-slide .author {
font-size: 0.7em;
font-weight: 600;
color: var(--ink);
margin: 0.2em 0 0;
letter-spacing: 0;
}
.reveal #title-slide .affiliation,
.reveal #title-slide .quarto-title-affiliation,
.reveal section.title-slide .affiliation {
font-size: 0.55em;
font-weight: 500;
color: var(--ink-3);
letter-spacing: var(--tracking-caps);
text-transform: uppercase;
margin: 0.15em 0 0;
}
.reveal #title-slide .date,
.reveal section.title-slide .date {
font-size: 0.5em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--accent-600);
margin-top: 1em;
padding-top: 0.8em;
border-top: 3px double var(--ink);
display: inline-block;
}
/* Editorial thick-top / thin-bottom rule block around title */
.reveal section.title-slide .quarto-title-block,
.reveal section.title-slide .title-block {
border-top: 6px solid var(--ink);
border-bottom: 1px solid var(--rule);
padding: 0.5em 0 1em;
}
/* -----------------------------------------------------------
SECTION DIVIDER — <section class="section-divider"> or
Quarto's {.section} header
----------------------------------------------------------- */
.reveal section.section-divider,
.reveal section.section {
background: var(--ink);
color: var(--paper);
display: flex !important;
flex-direction: column;
justify-content: center;
padding: 80px 96px;
}
.reveal section.section-divider::before,
.reveal section.section::before {
content: "";
display: block;
width: 72px;
height: 2px;
background: var(--accent-600);
margin-bottom: 24px;
}
.reveal section.section-divider h1,
.reveal section.section-divider h2,
.reveal section.section-divider h3,
.reveal section.section h1,
.reveal section.section h2,
.reveal section.section h3 {
color: var(--paper);
font-size: 2.8em;
font-weight: 900;
letter-spacing: -0.035em;
line-height: 1.0;
max-width: 18em;
}
.reveal section.section-divider .eyebrow,
.reveal section.section .eyebrow {
color: var(--accent-300);
}
.reveal section.section-divider .eyebrow::before,
.reveal section.section .eyebrow::before {
background: var(--accent-300);
}
.reveal section.section-divider p,
.reveal section.section p {
color: var(--paper);
opacity: 0.82;
font-family: var(--font-serif);
font-size: 1.05em;
font-style: italic;
max-width: 28em;
}
.reveal section.section-divider .section-number,
.reveal section.section .section-number {
font-family: var(--font-mono);
font-size: 0.6em;
font-weight: 600;
color: var(--accent-300);
letter-spacing: var(--tracking-caps);
text-transform: uppercase;
margin-bottom: 0.5em;
}
/* -----------------------------------------------------------
FULL-BLEED IMAGE — <section class="full-bleed" data-background-image="...">
----------------------------------------------------------- */
.reveal section.full-bleed {
padding: 0 !important;
}
.reveal section.full-bleed .caption,
.reveal section.full-bleed figcaption {
position: absolute;
left: 48px;
right: 48px;
bottom: 48px;
background: var(--paper);
padding: 14px 18px;
border-left: 3px solid var(--accent-600);
font-family: var(--font-sans);
font-size: 0.5em;
line-height: 1.45;
color: var(--ink);
max-width: 36em;
box-shadow: 0 4px 12px rgba(14, 26, 43, 0.12);
}
.reveal section.full-bleed .caption strong,
.reveal section.full-bleed figcaption strong {
display: block;
font-size: 0.85em;
font-weight: 700;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--accent-600);
margin-bottom: 4px;
}
/* -----------------------------------------------------------
BIG STAT / DATA CALLOUT — .big-stat section or .stat block
----------------------------------------------------------- */
.reveal .stat-number {
font-family: var(--font-serif);
font-weight: 700;
font-size: 3.6em;
line-height: 1;
letter-spacing: -0.02em;
font-variant-numeric: tabular-nums;
color: var(--ink);
margin: 0 0 0.1em;
display: block;
}
.reveal .stat-label {
font-family: var(--font-sans);
font-size: 0.55em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--ink-3);
}
.reveal .stat-note {
font-family: var(--font-serif);
font-style: italic;
font-size: 0.9em;
color: var(--ink-2);
max-width: 22em;
margin-top: 0.6em;
}
.reveal section.big-stat {
display: flex !important;
flex-direction: column;
justify-content: center;
}
.reveal section.big-stat .stat-number {
font-size: 5em;
}
/* Stat grid — multiple stats side-by-side */
.reveal .stat-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 2em 3em;
margin: 1em 0;
}
.reveal .stat-grid .stat {
border-top: 3px solid var(--ink);
padding-top: 0.6em;
}
.reveal .stat-grid .stat .stat-number { font-size: 2.8em; }
/* -----------------------------------------------------------
TWO-COLUMN — Quarto renders {.columns}{.column width=50%}
----------------------------------------------------------- */
.reveal .columns {
display: flex;
gap: 3em;
align-items: flex-start;
margin: 0.25em 0;
}
.reveal .column {
flex: 1;
min-width: 0;
}
.reveal .column > :first-child { margin-top: 0; }
/* Hand-rolled two-col for pandoc (non-Quarto) users */
.reveal .two-col {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3em;
align-items: start;
}
.reveal .two-col--wide-left { grid-template-columns: 2fr 1fr; }
.reveal .two-col--wide-right { grid-template-columns: 1fr 2fr; }
/* -----------------------------------------------------------
AGENDA / TOC slide — <section class="agenda">
Pair with an ordered list; we restyle it.
----------------------------------------------------------- */
.reveal section.agenda ol {
list-style: none;
counter-reset: agenda;
padding: 0;
margin: 0.5em 0;
}
.reveal section.agenda ol > li {
counter-increment: agenda;
display: grid;
grid-template-columns: 2.4em 1fr auto;
gap: 0.6em 1.2em;
align-items: baseline;
padding: 0.55em 0;
border-top: 1px solid var(--rule);
font-family: var(--font-serif);
font-size: 1.05em;
}
.reveal section.agenda ol > li:last-child { border-bottom: 1px solid var(--rule); }
.reveal section.agenda ol > li::before {
content: counter(agenda, decimal-leading-zero);
font-family: var(--font-mono);
font-weight: 600;
font-size: 0.7em;
color: var(--accent-600);
letter-spacing: var(--tracking-caps);
}
.reveal section.agenda ol > li .meta,
.reveal section.agenda ol > li em {
font-family: var(--font-sans);
font-style: normal;
font-size: 0.7em;
color: var(--ink-3);
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
justify-self: end;
}
/* -----------------------------------------------------------
THANK-YOU / END slide — <section class="thank-you">
----------------------------------------------------------- */
.reveal section.thank-you {
background: var(--ink);
color: var(--paper);
display: flex !important;
flex-direction: column;
justify-content: center;
padding: 80px 96px;
}
.reveal section.thank-you .civilytics-mark {
display: block;
width: 56px;
height: 56px;
margin-bottom: 28px;
object-fit: contain;
}
.reveal section.thank-you .civilytics-wordmark {
height: 40px;
width: 139.5px; /* 558/160 aspect * 40 */
flex: 0 0 auto;
align-self: flex-start;
margin: 0 0 32px;
}
.reveal section.thank-you h1,
.reveal section.thank-you h2 {
color: var(--paper);
font-size: 3em;
font-weight: 900;
letter-spacing: -0.035em;
margin-bottom: 0.2em;
}
.reveal section.thank-you p {
color: var(--paper);
opacity: 0.85;
font-family: var(--font-serif);
font-size: 1.1em;
font-style: italic;
max-width: 26em;
}
.reveal section.thank-you .contact,
.reveal section.thank-you ul.contact {
list-style: none;
padding: 0;
margin: 1.5em 0 0;
font-family: var(--font-sans);
font-size: 0.6em;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--accent-300);
}
.reveal section.thank-you .contact li,
.reveal section.thank-you ul.contact li {
margin: 0.3em 0;
}
.reveal section.thank-you .contact li::before,
.reveal section.thank-you ul.contact li::before { display: none; }
.reveal section.thank-you a { color: var(--paper); text-decoration: underline; text-decoration-color: var(--accent-600); }
.reveal section.thank-you a:hover { color: var(--accent-300); }
/* -----------------------------------------------------------
REFERENCES / SOURCES — small, tight
----------------------------------------------------------- */
.reveal .references,
.reveal section.references {
font-size: 0.72em;
}
.reveal section.references h2 { font-size: 1.4em; }
.reveal .references ol,
.reveal .references ul {
padding-left: 1.4em;
}
.reveal .references li {
font-family: var(--font-sans);
font-size: 0.95em;
line-height: 1.4;
color: var(--ink-2);
margin: 0.35em 0;
}
.reveal .references li::before { display: none; }
/* Footnotes (Pandoc / Quarto) */
.reveal .footnotes,
.reveal div.footnotes {
font-size: 0.6em;
color: var(--ink-3);
border-top: 1px solid var(--rule);
padding-top: 0.6em;
margin-top: 1em;
}
.reveal a.footnote-ref,
.reveal sup a {
color: var(--accent-600);
text-decoration: none;
font-family: var(--font-mono);
font-size: 0.7em;
font-weight: 600;
margin: 0 0.15em;
}
/* -----------------------------------------------------------
MATH — KaTeX / MathJax
----------------------------------------------------------- */
.reveal .katex,
.reveal .MathJax {
font-size: 1em !important;
color: var(--ink);
}
.reveal .katex-display,
.reveal mjx-container[display="true"] {
margin: 0.5em 0 !important;
padding: 0.5em 0;
border-left: 2px solid var(--accent-600);
padding-left: 1em;
}
/* -----------------------------------------------------------
CALLOUTS (Quarto)
----------------------------------------------------------- */
.reveal div.callout {
border: 1px solid var(--rule);
border-left: 3px solid var(--accent-600);
border-radius: 4px;
background: var(--paper-2);
margin: 0.75em 0;
font-size: 0.78em;
overflow: hidden;
}
.reveal div.callout > div.callout-header {
background: transparent;
padding: 0.5em 0.9em 0.2em;
font-family: var(--font-sans);
font-weight: 600;
font-size: 0.9em;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--accent-600);
}
.reveal div.callout > div.callout-body,
.reveal div.callout-body-container {
padding: 0.2em 0.9em 0.6em;
}
.reveal div.callout.callout-note { border-left-color: var(--navy-600); }
.reveal div.callout.callout-note > div.callout-header { color: var(--navy-600); }
.reveal div.callout.callout-warning { border-left-color: #9A5F18; }
.reveal div.callout.callout-warning > div.callout-header { color: #9A5F18; }
.reveal div.callout.callout-important,
.reveal div.callout.callout-caution { border-left-color: #A6271D; }
.reveal div.callout.callout-important > div.callout-header,
.reveal div.callout.callout-caution > div.callout-header { color: #A6271D; }
.reveal div.callout.callout-tip { border-left-color: var(--moss-600); }
.reveal div.callout.callout-tip > div.callout-header { color: var(--moss-600); }
/* -----------------------------------------------------------
SLIDE NUMBER + FOOTER BRAND CHROME
----------------------------------------------------------- */
.reveal .slide-number {
font-family: var(--font-mono);
font-size: 14px;
font-weight: 600;
color: var(--ink-3);
background: transparent;
right: 24px;
bottom: 18px;
letter-spacing: var(--tracking-caps);
}
.reveal .slide-number a { color: inherit; }
/* Brand footer mark — inserted by extension JS */
.reveal .civilytics-footer {
position: absolute;
left: 24px;
bottom: 18px;
display: flex;
align-items: center;
gap: 10px;
font-family: var(--font-sans);
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: var(--tracking-caps);
color: var(--ink-3);
pointer-events: none;
z-index: 30;
}
.reveal .civilytics-footer img,
.reveal .civilytics-footer svg {
width: 22px;
height: auto;
opacity: 0.85;
flex: 0 0 auto;
}
/* Hide chrome on title / section / thank-you / full-bleed slides */
.reveal .slides > section.title-slide ~ *,
.reveal #title-slide.present ~ .civilytics-footer { /* no-op, readable marker */ }
.reveal .slides > section.title-slide.present ~ .controls,
.reveal .slides > section.section-divider.present ~ .controls,
.reveal .slides > section.thank-you.present ~ .controls { }
body.civilytics-hide-chrome .civilytics-footer,
body.civilytics-hide-chrome .slide-number {
display: none !important;
}
/* -----------------------------------------------------------
PROGRESS BAR
----------------------------------------------------------- */
.reveal .progress {
color: var(--accent-600);
height: 3px;
background: rgba(14, 26, 43, 0.08);
}
/* -----------------------------------------------------------
CONTROLS
----------------------------------------------------------- */
.reveal .controls {
color: var(--ink-3);
}
.reveal .controls button { color: var(--ink-3) !important; }
.reveal .controls button:hover { color: var(--accent-600) !important; }
/* -----------------------------------------------------------
PRINT / PDF EXPORT
----------------------------------------------------------- */
@media print {
.reveal .civilytics-footer,
.reveal .slide-number { color: var(--ink-3); }
.reveal section { break-inside: avoid; }
}
/* -----------------------------------------------------------
SMALL-SCREEN GUARDRAILS
Reveal scales slides, but the narrowest keep-legible margins.
----------------------------------------------------------- */
@media (max-width: 640px) {
.reveal .slides > section,
.reveal .slides > section > section {
padding: 32px 36px;
}
.reveal section.section-divider,
.reveal section.thank-you {
padding: 48px 48px;
}
}