Files

342 lines
9.1 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"$if(lang)$ lang="$lang$" xml:lang="$lang$"$endif$$if(dir)$ dir="$dir$"$endif$>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
$for(author-meta)$
<meta name="author" content="$author-meta$" />
$endfor$
$if(date-meta)$
<meta name="dcterms.date" content="$date-meta$" />
$endif$
$if(keywords)$
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
$endif$
$if(description-meta)$
<meta name="description" content="$description-meta$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--color-bg: #ffffff;
--color-surface: #f8f9fa;
--color-border: #e2e8f0;
--color-text: #1a202c;
--color-muted: #718096;
--color-accent: #4f46e5;
--color-accent-bg: #eef2ff;
--color-code-bg: #f1f5f9;
--color-link: #4f46e5;
--radius: 6px;
--font-body: 'Inter', system-ui, sans-serif;
--font-heading: 'Avenir Next LT Pro Demi', 'Avenir Next', Avenir, 'Segoe UI', sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
--max-width: 740px;
}
@media (prefers-color-scheme: dark) {
:root {
--color-bg: #0f1117;
--color-surface: #1a1d27;
--color-border: #2d3348;
--color-text: #e2e8f0;
--color-muted: #8892a4;
--color-accent: #818cf8;
--color-accent-bg: #1e1b4b;
--color-code-bg: #1e2130;
--color-link: #818cf8;
}
}
html { font-size: 16px; scroll-behavior: smooth; }
body {
font-family: var(--font-body);
background: var(--color-bg);
color: var(--color-text);
line-height: 1.75;
padding: 2rem 1.5rem 4rem;
}
/* ── Layout ── */
#title-block-header, nav#TOC, body > * {
max-width: var(--max-width);
margin-left: auto;
margin-right: auto;
}
/* ── Title block ── */
#title-block-header {
border-bottom: 2px solid var(--color-accent);
padding-bottom: 1.5rem;
margin-bottom: 2.5rem;
}
h1.title {
font-size: 2.25rem;
font-weight: 700;
letter-spacing: -0.02em;
color: var(--color-text);
line-height: 1.2;
margin-bottom: 0.5rem;
}
p.subtitle {
font-size: 1.15rem;
color: var(--color-muted);
margin-bottom: 1rem;
}
p.author {
font-size: 0.9rem;
font-weight: 600;
color: var(--color-accent);
margin-bottom: 0.2rem;
}
p.date {
font-size: 0.85rem;
color: var(--color-muted);
}
/* ── Abstract ── */
.abstract {
background: var(--color-accent-bg);
border-left: 4px solid var(--color-accent);
border-radius: var(--radius);
padding: 1rem 1.25rem;
margin-top: 1.25rem;
}
.abstract-title {
font-weight: 700;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--color-accent);
margin-bottom: 0.4rem;
}
/* ── Table of Contents ── */
nav#TOC {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius);
padding: 1.25rem 1.5rem;
margin-bottom: 2.5rem;
font-size: 0.9rem;
}
nav#TOC h2 {
font-size: 0.75rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-muted);
margin-bottom: 0.75rem;
border: none;
padding: 0;
}
nav#TOC ul { list-style: none; padding-left: 0; }
nav#TOC ul ul { padding-left: 1.25rem; }
nav#TOC li { margin: 0.2rem 0; }
nav#TOC a { color: var(--color-text); text-decoration: none; }
nav#TOC a:hover { color: var(--color-accent); text-decoration: underline; }
/* ── Headings ── */
h1, h2, h3, h4, h5, h6 {
max-width: var(--max-width);
margin: 2rem auto 0.75rem;
font-weight: 700;
line-height: 1.3;
letter-spacing: -0.01em;
color: var(--color-text);
}
h1 { font-size: 1.875rem; color: #B83A4A; font-family: var(--font-heading); }
h2 { font-size: 1.5rem; color: #891401; font-family: var(--font-heading); border-bottom: 1px solid var(--color-border); padding-bottom: 0.4rem; }
h3 { font-size: 1.25rem; color: #AC3600; font-family: var(--font-heading); }
h4 { font-size: 1.05rem; }
h5, h6 { font-size: 0.95rem; color: var(--color-muted); }
/* ── Prose ── */
p {
max-width: var(--max-width);
margin: 0 auto 1.1rem;
}
a { color: var(--color-link); text-decoration: underline; text-underline-offset: 3px; }
a:hover { opacity: 0.8; }
strong { font-weight: 600; }
em { font-style: italic; }
/* ── Lists ── */
ul, ol {
max-width: var(--max-width);
margin: 0 auto 1.1rem;
padding-left: 1.5rem;
}
li { margin-bottom: 0.3rem; }
/* ── Blockquote ── */
blockquote {
max-width: var(--max-width);
margin: 1.5rem auto;
border-left: 4px solid var(--color-accent);
background: var(--color-surface);
padding: 0.75rem 1.25rem;
border-radius: 0 var(--radius) var(--radius) 0;
color: var(--color-muted);
font-style: italic;
}
blockquote p { margin: 0; }
/* ── Code ── */
code {
font-family: var(--font-mono);
font-size: 0.875em;
background: var(--color-code-bg);
padding: 0.15em 0.4em;
border-radius: 4px;
color: var(--color-text);
}
pre {
max-width: var(--max-width);
margin: 1.5rem auto;
background: var(--color-code-bg);
border: 1px solid var(--color-border);
border-radius: var(--radius);
padding: 1.25rem 1.5rem;
overflow-x: auto;
font-size: 0.875rem;
line-height: 1.6;
}
pre code {
background: none;
padding: 0;
font-size: inherit;
}
/* ── Tables ── */
table {
max-width: var(--max-width);
width: 100%;
margin: 1.5rem auto;
border-collapse: separate;
border-spacing: 0;
border: 1px solid var(--color-border);
border-radius: var(--radius);
overflow: hidden;
font-size: 0.9rem;
}
th {
background: var(--color-surface);
font-weight: 600;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-muted);
padding: 0.6rem 1rem;
border-bottom: 2px solid var(--color-border);
border-right: 1px solid var(--color-border);
text-align: left;
}
th:last-child { border-right: none; }
td {
padding: 0.6rem 1rem;
border-bottom: 1px solid var(--color-border);
border-right: 1px solid var(--color-border);
vertical-align: top;
}
td:last-child { border-right: none; }
tr:last-child td { border-bottom: none; }
tbody tr:hover { background: var(--color-surface); }
/* ── Horizontal Rule ── */
hr {
max-width: var(--max-width);
margin: 2rem auto;
border: none;
border-top: 1px solid var(--color-border);
}
/* ── Images ── */
img {
max-width: 100%;
height: auto;
border-radius: var(--radius);
display: block;
margin: 1.5rem auto;
}
/* ── Footnotes ── */
.footnotes {
max-width: var(--max-width);
margin: 3rem auto 0;
padding-top: 1rem;
border-top: 1px solid var(--color-border);
font-size: 0.85rem;
color: var(--color-muted);
}
@media print {
body { padding: 0; font-size: 11pt; }
nav#TOC, #title-block-header { page-break-after: avoid; }
h2, h3 { page-break-after: avoid; }
pre, blockquote, table { page-break-inside: avoid; }
}
</style>
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
$for(header-includes)$
$header-includes$
$endfor$
$if(math)$
$math$
$endif$
</head>
<body>
$for(include-before)$
$include-before$
$endfor$
$if(title)$
<header id="title-block-header">
<h1 class="title">$title$</h1>
$if(subtitle)$
<p class="subtitle">$subtitle$</p>
$endif$
$for(author)$
<p class="author">$author$</p>
$endfor$
$if(date)$
<p class="date">$date$</p>
$endif$
$if(abstract)$
<div class="abstract">
<div class="abstract-title">$abstract-title$</div>
$abstract$
</div>
$endif$
</header>
$endif$
$if(toc)$
<nav id="$idprefix$TOC" role="doc-toc">
$if(toc-title)$
<h2 id="$idprefix$toc-title">$toc-title$</h2>
$endif$
$table-of-contents$
</nav>
$endif$
$body$
$for(include-after)$
$include-after$
$endfor$
</body>
</html>