mdeck 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +1 -1
- package/assets/extensions/palettes/cobalt/extension.toml +30 -0
- package/assets/extensions/palettes/greyscale/extension.toml +57 -0
- package/assets/extensions/themes/glass/extension.toml +59 -0
- package/assets/extensions/themes/glass/styles.css +754 -0
- package/assets/extensions/themes/plain/extension.toml +58 -0
- package/assets/extensions/themes/plain/styles.css +471 -0
- package/assets/extensions/themes/work/extension.toml +57 -0
- package/assets/extensions/themes/work/styles.css +512 -0
- package/docs/reference/authoring.md +25 -8
- package/docs/reference/palettes.md +4 -3
- package/docs/reference/themes.md +5 -3
- package/docs/site/content/appearance.md +24 -10
- package/docs/site/content/audience.md +14 -0
- package/docs/site/content/theme-repository.md +7 -7
- package/docs/site/images/themes/academic-dark.webp +0 -0
- package/docs/site/images/themes/academic-light.webp +0 -0
- package/docs/site/images/themes/academic.webp +0 -0
- package/docs/site/images/themes/glass-dark.webp +0 -0
- package/docs/site/images/themes/glass-light.webp +0 -0
- package/docs/site/images/themes/glass.webp +0 -0
- package/docs/site/images/themes/minimal-dark.webp +0 -0
- package/docs/site/images/themes/minimal-light.webp +0 -0
- package/docs/site/images/themes/minimal.webp +0 -0
- package/docs/site/images/themes/neue-dark.webp +0 -0
- package/docs/site/images/themes/neue-light.webp +0 -0
- package/docs/site/images/themes/neue.webp +0 -0
- package/docs/site/images/themes/plain-dark.webp +0 -0
- package/docs/site/images/themes/plain-light.webp +0 -0
- package/docs/site/images/themes/plain.webp +0 -0
- package/docs/site/images/themes/work-dark.webp +0 -0
- package/docs/site/images/themes/work-light.webp +0 -0
- package/docs/site/images/themes/work.webp +0 -0
- package/examples/showcase/slides.md +2 -2
- package/package.json +4 -1
- package/skills/write-slides/SKILL.md +2 -2
- package/src/build/slidesPlugin.js +16 -15
- package/src/components/Poll.jsx +17 -5
- package/src/components/inlineText.js +38 -15
- package/src/components/poll.css +3 -0
- package/src/core/editDeck.js +4 -5
- package/src/core/pollList.js +66 -0
- package/src/core/tags.js +195 -0
- package/src/extensions/discover.js +2 -2
- package/src/extensions/moved.js +4 -4
- package/src/layouts/layoutApi.jsx +20 -10
- package/src/live/roomTag.js +11 -19
- package/src/runtime/main.jsx +2 -1
- package/src/runtime/markedSetup.js +3 -0
- package/assets/extensions/palettes/neon/extension.toml +0 -30
- package/assets/extensions/themes/aurora/extension.toml +0 -40
- package/assets/extensions/themes/aurora/styles.css +0 -670
- package/docs/site/images/themes/aurora-dark.webp +0 -0
- package/docs/site/images/themes/aurora-light.webp +0 -0
- package/docs/site/images/themes/aurora.webp +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
schema = 1
|
|
2
|
+
kind = "theme"
|
|
3
|
+
id = "plain"
|
|
4
|
+
title = "Plain"
|
|
5
|
+
description = "Black on white and lots of room: Inter, the heading in a column of its own beside the content, lists of short titles with a line under each, the accent only in small places; in greyscale, dark is the same, inverted."
|
|
6
|
+
version = "0.1.0"
|
|
7
|
+
author = "Tilman Schieber"
|
|
8
|
+
license = "MIT"
|
|
9
|
+
# The palette this theme uses unless the deck sets one; colours come only from palettes.
|
|
10
|
+
# Black, white and greys: in dark, exactly the inverse.
|
|
11
|
+
palette = "greyscale"
|
|
12
|
+
fonts = [
|
|
13
|
+
"https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,400;0,14..32,500;0,14..32,600;0,14..32,700;1,14..32,400;1,14..32,600&display=swap",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
[files]
|
|
17
|
+
styles = "styles.css"
|
|
18
|
+
|
|
19
|
+
# Type, spacing and fonts used by styles.css; colours come from the palette.
|
|
20
|
+
# Deck settings (params) override these. The headings are only a little
|
|
21
|
+
# larger than the text: the room around them does the work.
|
|
22
|
+
[tokens]
|
|
23
|
+
|
|
24
|
+
# Type scale (px) — projection-appropriate at 1920×1080
|
|
25
|
+
"--fs-display" = "88px"
|
|
26
|
+
"--fs-title" = "72px"
|
|
27
|
+
"--fs-focus" = "64px"
|
|
28
|
+
"--fs-h" = "52px"
|
|
29
|
+
"--fs-sub" = "34px"
|
|
30
|
+
"--fs-body" = "29px"
|
|
31
|
+
"--fs-small" = "19px"
|
|
32
|
+
"--fs-eyebrow" = "21px"
|
|
33
|
+
|
|
34
|
+
# Spacing
|
|
35
|
+
"--pad-x" = "128px"
|
|
36
|
+
"--pad-y" = "64px"
|
|
37
|
+
"--gap-title" = "36px"
|
|
38
|
+
"--gap-item" = "30px"
|
|
39
|
+
|
|
40
|
+
# How wide the column with the heading is, beside the content.
|
|
41
|
+
"--side" = "560px"
|
|
42
|
+
|
|
43
|
+
# Type families
|
|
44
|
+
"--font-display" = "\"Inter\", -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif"
|
|
45
|
+
"--font-body" = "\"Inter\", -apple-system, \"Segoe UI\", Helvetica, Arial, sans-serif"
|
|
46
|
+
"--font-mono" = "ui-monospace, \"SF Mono\", Menlo, Consolas, monospace"
|
|
47
|
+
|
|
48
|
+
[params.fontDisplay]
|
|
49
|
+
token = "--font-display"
|
|
50
|
+
title = "Display font"
|
|
51
|
+
|
|
52
|
+
[params.fontBody]
|
|
53
|
+
token = "--font-body"
|
|
54
|
+
title = "Body font"
|
|
55
|
+
|
|
56
|
+
[params.side]
|
|
57
|
+
token = "--side"
|
|
58
|
+
title = "Width of the heading column"
|
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/* Plain — black on white and lots of room.
|
|
2
|
+
Nothing on the slides but the words, set in Inter: no band, no rules, no
|
|
3
|
+
boxes worth the name. What gives it its look is the arrangement: on a
|
|
4
|
+
content slide the heading stands in a column of its own at the left,
|
|
5
|
+
and everything else to the right of it; a statement with a label puts
|
|
6
|
+
the label there too, and a split slide with a heading becomes the
|
|
7
|
+
heading and two columns beside it. A list item that starts in bold is a
|
|
8
|
+
short title with a line of description under it. Headings are only a
|
|
9
|
+
little larger than the text. The header and the page number are small
|
|
10
|
+
and grey. The palette's accent shows only in small places: emphasis,
|
|
11
|
+
links, labels, list numbers, the edge of a callout. All colours are the
|
|
12
|
+
palette's; in greyscale the accent is black, and dark is the exact
|
|
13
|
+
inverse of light. */
|
|
14
|
+
|
|
15
|
+
/* ─────────────────────────────────────────────
|
|
16
|
+
HEADER / FOOTER — small and grey
|
|
17
|
+
───────────────────────────────────────────── */
|
|
18
|
+
.slide-header, .slide-footer {
|
|
19
|
+
font-family: var(--font-body);
|
|
20
|
+
font-size: var(--fs-small);
|
|
21
|
+
font-weight: 500;
|
|
22
|
+
color: var(--muted);
|
|
23
|
+
min-height: 28px;
|
|
24
|
+
}
|
|
25
|
+
.slide-header .brand { color: var(--ink); font-weight: 600; }
|
|
26
|
+
.slide-footer > span:last-child:not(:first-child) { font-variant-numeric: tabular-nums; }
|
|
27
|
+
.slide-logo {
|
|
28
|
+
position: absolute;
|
|
29
|
+
top: var(--pad-y);
|
|
30
|
+
left: var(--pad-x);
|
|
31
|
+
height: 48px;
|
|
32
|
+
width: auto;
|
|
33
|
+
max-width: 280px;
|
|
34
|
+
object-fit: contain;
|
|
35
|
+
object-position: left center;
|
|
36
|
+
filter: var(--logo-filter, none);
|
|
37
|
+
transform: translateY(calc(14px - 50%));
|
|
38
|
+
}
|
|
39
|
+
.slide-header:has(.slide-logo) .brand { visibility: hidden; width: 0; }
|
|
40
|
+
|
|
41
|
+
/* ─────────────────────────────────────────────
|
|
42
|
+
TYPOGRAPHY
|
|
43
|
+
───────────────────────────────────────────── */
|
|
44
|
+
.eyebrow {
|
|
45
|
+
font-family: var(--font-body);
|
|
46
|
+
font-size: var(--fs-eyebrow);
|
|
47
|
+
font-weight: 600;
|
|
48
|
+
color: var(--muted);
|
|
49
|
+
margin: 0;
|
|
50
|
+
}
|
|
51
|
+
.display {
|
|
52
|
+
font-family: var(--font-display);
|
|
53
|
+
font-size: var(--fs-display);
|
|
54
|
+
font-weight: 700;
|
|
55
|
+
line-height: 1.08;
|
|
56
|
+
letter-spacing: -0.025em;
|
|
57
|
+
color: var(--ink);
|
|
58
|
+
margin: 0;
|
|
59
|
+
text-wrap: balance;
|
|
60
|
+
}
|
|
61
|
+
.title {
|
|
62
|
+
font-family: var(--font-display);
|
|
63
|
+
font-size: var(--fs-h);
|
|
64
|
+
font-weight: 700;
|
|
65
|
+
line-height: 1.15;
|
|
66
|
+
letter-spacing: -0.02em;
|
|
67
|
+
color: var(--ink);
|
|
68
|
+
margin: 0;
|
|
69
|
+
text-wrap: balance;
|
|
70
|
+
}
|
|
71
|
+
.subtitle {
|
|
72
|
+
font-family: var(--font-body);
|
|
73
|
+
font-size: var(--fs-body);
|
|
74
|
+
font-weight: 400;
|
|
75
|
+
line-height: 1.4;
|
|
76
|
+
color: var(--ink-soft);
|
|
77
|
+
margin: 0;
|
|
78
|
+
text-wrap: pretty;
|
|
79
|
+
}
|
|
80
|
+
.body-text {
|
|
81
|
+
font-family: var(--font-body);
|
|
82
|
+
font-size: var(--fs-body);
|
|
83
|
+
line-height: 1.5;
|
|
84
|
+
color: var(--ink-soft);
|
|
85
|
+
margin: 0;
|
|
86
|
+
text-wrap: pretty;
|
|
87
|
+
}
|
|
88
|
+
.meta { font-family: var(--font-body); font-size: var(--fs-small); color: var(--muted); }
|
|
89
|
+
|
|
90
|
+
/* The palette's accent, in a few small places: emphasis, links, labels,
|
|
91
|
+
numbers, the edge of a callout. In greyscale it is black and grey. */
|
|
92
|
+
em { font-style: italic; color: var(--accent); }
|
|
93
|
+
strong { font-weight: 600; color: var(--ink); }
|
|
94
|
+
.slide a { color: var(--accent); text-decoration: underline; text-decoration-thickness: 0.06em; text-underline-offset: 0.18em; }
|
|
95
|
+
.slide :not(pre) > code {
|
|
96
|
+
font-family: var(--font-mono);
|
|
97
|
+
font-size: 0.86em;
|
|
98
|
+
padding: 0.08em 0.32em;
|
|
99
|
+
border-radius: 5px;
|
|
100
|
+
background: var(--surface);
|
|
101
|
+
color: var(--ink);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ─────────────────────────────────────────────
|
|
105
|
+
CONTENT SLIDE — the heading in a column of its own, the content beside it
|
|
106
|
+
───────────────────────────────────────────── */
|
|
107
|
+
.slide-body h1 {
|
|
108
|
+
font-family: var(--font-display);
|
|
109
|
+
font-size: var(--fs-h);
|
|
110
|
+
font-weight: 700;
|
|
111
|
+
line-height: 1.15;
|
|
112
|
+
letter-spacing: -0.02em;
|
|
113
|
+
color: var(--ink);
|
|
114
|
+
margin: 0 0 var(--gap-title) 0;
|
|
115
|
+
text-wrap: balance;
|
|
116
|
+
}
|
|
117
|
+
.slide-body h2 {
|
|
118
|
+
font-family: var(--font-display);
|
|
119
|
+
font-size: var(--fs-sub);
|
|
120
|
+
font-weight: 600;
|
|
121
|
+
line-height: 1.25;
|
|
122
|
+
letter-spacing: -0.01em;
|
|
123
|
+
color: var(--ink);
|
|
124
|
+
margin: 0 0 var(--gap-item) 0;
|
|
125
|
+
}
|
|
126
|
+
.slide-body h3 {
|
|
127
|
+
font-family: var(--font-display);
|
|
128
|
+
font-size: var(--fs-body);
|
|
129
|
+
font-weight: 600;
|
|
130
|
+
color: var(--ink);
|
|
131
|
+
margin: 0 0 8px 0;
|
|
132
|
+
}
|
|
133
|
+
.slide-body p {
|
|
134
|
+
font-family: var(--font-body);
|
|
135
|
+
font-size: var(--fs-body);
|
|
136
|
+
line-height: 1.5;
|
|
137
|
+
color: var(--ink-soft);
|
|
138
|
+
margin: 0 0 var(--gap-item) 0;
|
|
139
|
+
text-wrap: pretty;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.slide:not(.slide--title, .slide--chapter, .slide--focus, .slide--image-text, .slide--split, .slide--full-bleed-image) > .slide-body:has(> h1) {
|
|
143
|
+
display: grid;
|
|
144
|
+
grid-template-columns: var(--side) minmax(0, 1fr);
|
|
145
|
+
column-gap: 96px;
|
|
146
|
+
align-content: center;
|
|
147
|
+
align-items: start;
|
|
148
|
+
}
|
|
149
|
+
.slide:not(.slide--title, .slide--chapter, .slide--focus, .slide--image-text, .slide--split, .slide--full-bleed-image) > .slide-body:has(> h1) > * { grid-column: 2; min-width: 0; }
|
|
150
|
+
/* The heading stands beside all of it, at the middle of its height. */
|
|
151
|
+
.slide:not(.slide--title, .slide--chapter, .slide--focus, .slide--image-text, .slide--split, .slide--full-bleed-image) > .slide-body:has(> h1) > h1 {
|
|
152
|
+
grid-column: 1;
|
|
153
|
+
grid-row: 1 / span 40;
|
|
154
|
+
align-self: center;
|
|
155
|
+
margin: 0;
|
|
156
|
+
padding-right: 24px;
|
|
157
|
+
}
|
|
158
|
+
.slide-body > :last-child { margin-bottom: 0; }
|
|
159
|
+
|
|
160
|
+
/* ─────────────────────────────────────────────
|
|
161
|
+
LISTS — a short title with a line under it; plain lines otherwise
|
|
162
|
+
───────────────────────────────────────────── */
|
|
163
|
+
.slide-body ul > li { line-height: 1.45; padding-left: 34px; }
|
|
164
|
+
.slide-body ul > li::before {
|
|
165
|
+
content: '\2013';
|
|
166
|
+
position: absolute;
|
|
167
|
+
left: 0;
|
|
168
|
+
top: 0;
|
|
169
|
+
color: var(--muted);
|
|
170
|
+
}
|
|
171
|
+
/* An item that starts in bold: the bold part is a title on its own line,
|
|
172
|
+
the rest a smaller description under it, and no marker. */
|
|
173
|
+
.slide-body ul > li:has(> strong:first-child) {
|
|
174
|
+
padding-left: 0;
|
|
175
|
+
font-size: calc(var(--fs-body) * 0.86);
|
|
176
|
+
line-height: 1.45;
|
|
177
|
+
color: var(--ink-soft);
|
|
178
|
+
}
|
|
179
|
+
.slide-body ul > li:has(> strong:first-child)::before { content: none; }
|
|
180
|
+
.slide-body li > strong:first-child {
|
|
181
|
+
display: block;
|
|
182
|
+
font-size: calc(var(--fs-body) / 0.86);
|
|
183
|
+
font-weight: 600;
|
|
184
|
+
color: var(--ink);
|
|
185
|
+
margin-bottom: 4px;
|
|
186
|
+
}
|
|
187
|
+
.slide-body ol > li { line-height: 1.45; padding-left: 46px; }
|
|
188
|
+
.slide-body ol > li::before {
|
|
189
|
+
content: counter(slide-ol) '.';
|
|
190
|
+
position: absolute;
|
|
191
|
+
left: 0;
|
|
192
|
+
top: 0;
|
|
193
|
+
font-variant-numeric: tabular-nums;
|
|
194
|
+
color: var(--accent);
|
|
195
|
+
}
|
|
196
|
+
.slide-body ol > li > strong:first-child { font-size: inherit; }
|
|
197
|
+
.slide-body li :is(ul, ol) { font-size: calc(var(--fs-body) * 0.9); }
|
|
198
|
+
|
|
199
|
+
/* ─────────────────────────────────────────────
|
|
200
|
+
LAYOUT: TITLE — at the left, in the middle of the slide
|
|
201
|
+
───────────────────────────────────────────── */
|
|
202
|
+
.slide--title .slide-body { justify-content: center; align-items: flex-start; }
|
|
203
|
+
.slide--title .title-text { display: flex; flex-direction: column; align-items: flex-start; max-width: 1300px; }
|
|
204
|
+
/* The title is an h1: as large as .display, not a content heading. */
|
|
205
|
+
.slide--title .display { font-size: var(--fs-display); margin: 0; }
|
|
206
|
+
.slide--title .subtitle { margin-top: 20px; max-width: 1100px; }
|
|
207
|
+
.slide--title.has-image .slide-body {
|
|
208
|
+
display: grid;
|
|
209
|
+
grid-template-columns: 1fr 1fr;
|
|
210
|
+
column-gap: 96px;
|
|
211
|
+
align-items: center;
|
|
212
|
+
}
|
|
213
|
+
.slide--title.has-image .title-image {
|
|
214
|
+
align-self: stretch;
|
|
215
|
+
width: 100%;
|
|
216
|
+
height: 100%;
|
|
217
|
+
min-height: 0;
|
|
218
|
+
object-fit: cover;
|
|
219
|
+
border-radius: 6px;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* ─────────────────────────────────────────────
|
|
223
|
+
LAYOUT: CHAPTER — the section's title at the left, a line about it under
|
|
224
|
+
───────────────────────────────────────────── */
|
|
225
|
+
.slide--chapter .slide-body { justify-content: center; align-items: flex-start; }
|
|
226
|
+
/* "Chapter 2" on one line above the title (the layout writes the number first). */
|
|
227
|
+
.slide--chapter .chapter-content { display: grid; grid-template-columns: auto 1fr; column-gap: 0.3em; align-items: baseline; justify-items: start; }
|
|
228
|
+
.slide--chapter .chapter-content > * { grid-column: 1 / -1; }
|
|
229
|
+
.slide--chapter .chapter-content > .chapter-meta { grid-column: 1; grid-row: 1; }
|
|
230
|
+
.slide--chapter .chapter-content > .chapter-num { grid-column: 2; grid-row: 1; }
|
|
231
|
+
.chapter-meta, .chapter-num {
|
|
232
|
+
font-family: var(--font-body);
|
|
233
|
+
font-size: var(--fs-eyebrow);
|
|
234
|
+
font-weight: 600;
|
|
235
|
+
color: var(--accent);
|
|
236
|
+
margin: 0 0 18px 0;
|
|
237
|
+
}
|
|
238
|
+
.slide--chapter .chapter-title {
|
|
239
|
+
font-family: var(--font-display);
|
|
240
|
+
font-size: var(--fs-title);
|
|
241
|
+
font-weight: 700;
|
|
242
|
+
line-height: 1.1;
|
|
243
|
+
letter-spacing: -0.025em;
|
|
244
|
+
color: var(--ink);
|
|
245
|
+
margin: 0 0 20px 0;
|
|
246
|
+
max-width: 1300px;
|
|
247
|
+
text-wrap: balance;
|
|
248
|
+
}
|
|
249
|
+
.slide--chapter .chapter-desc {
|
|
250
|
+
font-family: var(--font-body);
|
|
251
|
+
font-size: var(--fs-body);
|
|
252
|
+
line-height: 1.45;
|
|
253
|
+
color: var(--ink-soft);
|
|
254
|
+
max-width: 1000px;
|
|
255
|
+
margin: 0;
|
|
256
|
+
}
|
|
257
|
+
.slide--chapter.has-image .slide-body {
|
|
258
|
+
display: grid;
|
|
259
|
+
grid-template-columns: 1fr 1fr;
|
|
260
|
+
column-gap: 96px;
|
|
261
|
+
align-items: center;
|
|
262
|
+
}
|
|
263
|
+
.slide--chapter.has-image .chapter-title { font-size: calc(var(--fs-title) * 0.8); }
|
|
264
|
+
.slide--chapter.has-image .chapter-image {
|
|
265
|
+
align-self: stretch;
|
|
266
|
+
width: 100%;
|
|
267
|
+
height: 100%;
|
|
268
|
+
min-height: 0;
|
|
269
|
+
object-fit: cover;
|
|
270
|
+
border-radius: 6px;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/* ─────────────────────────────────────────────
|
|
274
|
+
LAYOUT: FOCUS — with a label, the label at the left as a heading and
|
|
275
|
+
the statement beside it; without one, the statement alone in the middle
|
|
276
|
+
───────────────────────────────────────────── */
|
|
277
|
+
.slide--focus .slide-body { justify-content: center; align-items: center; text-align: center; }
|
|
278
|
+
.focus-content { display: flex; flex-direction: column; align-items: center; }
|
|
279
|
+
.focus-statement,
|
|
280
|
+
.slide--focus .focus-content h1,
|
|
281
|
+
.slide--focus .focus-content p {
|
|
282
|
+
font-family: var(--font-display);
|
|
283
|
+
font-size: var(--fs-focus);
|
|
284
|
+
font-weight: 700;
|
|
285
|
+
line-height: 1.15;
|
|
286
|
+
letter-spacing: -0.025em;
|
|
287
|
+
color: var(--ink);
|
|
288
|
+
max-width: 1400px;
|
|
289
|
+
margin: 0;
|
|
290
|
+
text-wrap: balance;
|
|
291
|
+
}
|
|
292
|
+
.focus-eyebrow {
|
|
293
|
+
font-family: var(--font-display);
|
|
294
|
+
font-size: var(--fs-h);
|
|
295
|
+
font-weight: 700;
|
|
296
|
+
line-height: 1.15;
|
|
297
|
+
letter-spacing: -0.02em;
|
|
298
|
+
color: var(--accent);
|
|
299
|
+
}
|
|
300
|
+
.focus-attribution {
|
|
301
|
+
font-family: var(--font-body);
|
|
302
|
+
font-size: var(--fs-body);
|
|
303
|
+
color: var(--muted);
|
|
304
|
+
margin: 28px 0 0 0;
|
|
305
|
+
}
|
|
306
|
+
.slide--focus .slide-body:has(> .focus-eyebrow) {
|
|
307
|
+
display: grid;
|
|
308
|
+
grid-template-columns: var(--side) minmax(0, 1fr);
|
|
309
|
+
column-gap: 96px;
|
|
310
|
+
align-content: center;
|
|
311
|
+
align-items: start;
|
|
312
|
+
text-align: left;
|
|
313
|
+
}
|
|
314
|
+
.slide--focus .slide-body:has(> .focus-eyebrow) > * { grid-column: 2; }
|
|
315
|
+
.slide--focus .slide-body:has(> .focus-eyebrow) > .focus-eyebrow { grid-column: 1; grid-row: 1 / span 2; align-self: center; padding-right: 24px; }
|
|
316
|
+
.slide--focus .slide-body:has(> .focus-eyebrow) .focus-content { align-items: flex-start; }
|
|
317
|
+
.slide--focus .slide-body:has(> .focus-eyebrow) :is(.focus-statement, .focus-content h1, .focus-content p) {
|
|
318
|
+
font-family: var(--font-body);
|
|
319
|
+
font-size: var(--fs-sub);
|
|
320
|
+
font-weight: 400;
|
|
321
|
+
line-height: 1.4;
|
|
322
|
+
letter-spacing: -0.005em;
|
|
323
|
+
max-width: 900px;
|
|
324
|
+
text-align: left;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/* ─────────────────────────────────────────────
|
|
328
|
+
LAYOUT: IMAGE + TEXT
|
|
329
|
+
───────────────────────────────────────────── */
|
|
330
|
+
.slide--image-text .slide-body { gap: 96px; }
|
|
331
|
+
.image-pane {
|
|
332
|
+
flex: 1.1;
|
|
333
|
+
min-width: 0;
|
|
334
|
+
display: flex;
|
|
335
|
+
align-items: center;
|
|
336
|
+
justify-content: center;
|
|
337
|
+
overflow: hidden;
|
|
338
|
+
position: relative;
|
|
339
|
+
background: var(--surface);
|
|
340
|
+
border-radius: 6px;
|
|
341
|
+
}
|
|
342
|
+
.image-placeholder {
|
|
343
|
+
width: 100%;
|
|
344
|
+
height: 100%;
|
|
345
|
+
background: repeating-linear-gradient(135deg, var(--surface) 0 22px, var(--bg) 22px 44px);
|
|
346
|
+
}
|
|
347
|
+
.image-placeholder span {
|
|
348
|
+
font-family: var(--font-body);
|
|
349
|
+
font-size: 20px;
|
|
350
|
+
color: var(--muted);
|
|
351
|
+
background: var(--bg);
|
|
352
|
+
padding: 10px 16px;
|
|
353
|
+
border-radius: 6px;
|
|
354
|
+
}
|
|
355
|
+
.text-pane .title { font-size: var(--fs-h); }
|
|
356
|
+
.text-pane .eyebrow { margin-bottom: -8px; }
|
|
357
|
+
.text-pane .body-text + .body-text { margin-top: 8px; }
|
|
358
|
+
|
|
359
|
+
/* ─────────────────────────────────────────────
|
|
360
|
+
LAYOUT: SPLIT — with a heading: the heading at the left, two columns
|
|
361
|
+
beside it
|
|
362
|
+
───────────────────────────────────────────── */
|
|
363
|
+
.split-columns { gap: 64px; }
|
|
364
|
+
.slide--split .slide-body:has(> .split-heading) {
|
|
365
|
+
display: grid;
|
|
366
|
+
/* A narrower heading column: two columns of content need the room. */
|
|
367
|
+
grid-template-columns: calc(var(--side) * 0.72) minmax(0, 1fr);
|
|
368
|
+
column-gap: 80px;
|
|
369
|
+
align-items: center;
|
|
370
|
+
}
|
|
371
|
+
.slide--split .split-heading { margin: 0; padding-right: 24px; }
|
|
372
|
+
.slide--split .split-heading h1 { margin: 0; }
|
|
373
|
+
.slide--split .slide-body:has(> .split-heading) .split-columns { align-self: stretch; }
|
|
374
|
+
|
|
375
|
+
/* ─────────────────────────────────────────────
|
|
376
|
+
LAYOUT: FULL-BLEED IMAGE — the title in white at the lower left
|
|
377
|
+
───────────────────────────────────────────── */
|
|
378
|
+
.slide--full-bleed-image .slide-body { align-items: flex-start; }
|
|
379
|
+
.slide--full-bleed-image.has-overlay .slide-bg::after {
|
|
380
|
+
content: '';
|
|
381
|
+
position: absolute;
|
|
382
|
+
inset: 0;
|
|
383
|
+
background: linear-gradient(to top, color-mix(in oklab, light-dark(var(--ink), var(--bg)) 55%, transparent), transparent 55%);
|
|
384
|
+
}
|
|
385
|
+
.slide--full-bleed-image .overlay-title {
|
|
386
|
+
font-family: var(--font-display);
|
|
387
|
+
font-size: var(--fs-h);
|
|
388
|
+
font-weight: 700;
|
|
389
|
+
line-height: 1.15;
|
|
390
|
+
letter-spacing: -0.02em;
|
|
391
|
+
color: light-dark(var(--bg), var(--ink));
|
|
392
|
+
text-shadow: 0 1px 18px color-mix(in oklab, light-dark(var(--ink), var(--bg)) 40%, transparent);
|
|
393
|
+
margin: 0;
|
|
394
|
+
max-width: 1300px;
|
|
395
|
+
text-wrap: balance;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/* ─────────────────────────────────────────────
|
|
399
|
+
CALLOUTS — a quiet grey field with a thin edge in the accent, the
|
|
400
|
+
title in bold; warnings in their own colour
|
|
401
|
+
───────────────────────────────────────────── */
|
|
402
|
+
.slide-body .callout {
|
|
403
|
+
background: var(--surface);
|
|
404
|
+
border: 0;
|
|
405
|
+
border-left: 3px solid var(--accent);
|
|
406
|
+
border-radius: 0 8px 8px 0;
|
|
407
|
+
padding: 20px 28px 22px;
|
|
408
|
+
margin: 0 0 16px;
|
|
409
|
+
}
|
|
410
|
+
.slide-body .callout-title {
|
|
411
|
+
font-family: var(--font-body);
|
|
412
|
+
font-size: var(--fs-body);
|
|
413
|
+
font-weight: 600;
|
|
414
|
+
letter-spacing: 0;
|
|
415
|
+
text-transform: none;
|
|
416
|
+
color: var(--ink);
|
|
417
|
+
margin: 0 0 4px 0;
|
|
418
|
+
}
|
|
419
|
+
.slide-body .callout p { padding-left: 0; margin: 0; color: var(--ink-soft); }
|
|
420
|
+
.slide-body .callout :is(.callout-title) { color: var(--ink); }
|
|
421
|
+
.slide-body .callout:is(.callout-warning, .callout-caution) { border-left-color: var(--callout-warning); }
|
|
422
|
+
.slide-body .callout.callout-caution { border-left-color: var(--callout-caution); }
|
|
423
|
+
.slide-body .callout.callout-proof { background: none; border: 0; padding: 0; }
|
|
424
|
+
|
|
425
|
+
/* ─────────────────────────────────────────────
|
|
426
|
+
CODE, TABLES, QUOTATIONS
|
|
427
|
+
───────────────────────────────────────────── */
|
|
428
|
+
.code-block {
|
|
429
|
+
--code-bg: var(--surface);
|
|
430
|
+
--code-radius: 8px;
|
|
431
|
+
background: var(--code-bg);
|
|
432
|
+
border-radius: var(--code-radius);
|
|
433
|
+
padding: 26px 32px;
|
|
434
|
+
margin: 0;
|
|
435
|
+
overflow: hidden;
|
|
436
|
+
font-family: var(--font-mono);
|
|
437
|
+
font-size: var(--code-size);
|
|
438
|
+
line-height: 1.6;
|
|
439
|
+
}
|
|
440
|
+
/* The size is set on the slide, so the split layout's smaller code (on its
|
|
441
|
+
columns) reaches the block. */
|
|
442
|
+
.slide { --code-size: 24px; }
|
|
443
|
+
.slide--split .code-block { padding: 22px 26px; }
|
|
444
|
+
.code-block code { font-family: inherit; font-size: inherit; background: none; padding: 0; }
|
|
445
|
+
.slide-body .code-block-wrapper { margin: 0 0 var(--gap-item); }
|
|
446
|
+
|
|
447
|
+
.slide-body table { font-size: calc(var(--fs-body) * 0.9); font-variant-numeric: tabular-nums; }
|
|
448
|
+
.slide-body :is(th, td) { padding: 12px 24px 12px 0; }
|
|
449
|
+
.slide-body th { font-weight: 600; color: var(--ink); border-bottom: 1px solid var(--ink); }
|
|
450
|
+
.slide-body td { border-bottom: 1px solid var(--rule); }
|
|
451
|
+
|
|
452
|
+
/* A quotation is just larger text, with nothing round it. */
|
|
453
|
+
.slide-body blockquote {
|
|
454
|
+
margin: 0 0 var(--gap-item);
|
|
455
|
+
padding: 0;
|
|
456
|
+
border: 0;
|
|
457
|
+
font-size: var(--fs-sub);
|
|
458
|
+
font-weight: 500;
|
|
459
|
+
line-height: 1.35;
|
|
460
|
+
letter-spacing: -0.01em;
|
|
461
|
+
color: var(--ink);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/* ─────────────────────────────────────────────
|
|
465
|
+
FOOTNOTES, MATH, AUDIENCE QUESTIONS
|
|
466
|
+
───────────────────────────────────────────── */
|
|
467
|
+
.slide-footnotes, .slide-citations { font-family: var(--font-body); }
|
|
468
|
+
.slide .katex-display { font-size: var(--fs-sub); margin: 24px 0; overflow-x: auto; overflow-y: hidden; text-align: left; }
|
|
469
|
+
.slide .poll-track, .slide .scale-track { border-radius: 4px; background: var(--surface); }
|
|
470
|
+
.slide .poll-fill, .slide .scale-fill { border-radius: 4px; background: var(--accent); }
|
|
471
|
+
.slide .question-cards li { border-radius: 8px; border-left: 0; background: var(--surface); }
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
schema = 1
|
|
2
|
+
kind = "theme"
|
|
3
|
+
id = "work"
|
|
4
|
+
title = "Work"
|
|
5
|
+
description = "An everyday company template: IBM Plex Sans, an accent band along the top, the logo top left, headings in a fixed place, section dividers with a large number in the accent, a quiet footer with the page number."
|
|
6
|
+
version = "0.1.0"
|
|
7
|
+
author = "Tilman Schieber"
|
|
8
|
+
license = "MIT"
|
|
9
|
+
# The palette this theme uses unless the deck sets one; colours come only from palettes.
|
|
10
|
+
# A company blue with an orange second accent; any palette makes it your company's.
|
|
11
|
+
palette = "cobalt"
|
|
12
|
+
fonts = [
|
|
13
|
+
"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400;1,500&family=IBM+Plex+Mono:wght@400;500&display=swap",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
[files]
|
|
17
|
+
styles = "styles.css"
|
|
18
|
+
|
|
19
|
+
# Type, spacing and fonts used by styles.css; colours come from the palette.
|
|
20
|
+
# Deck settings (params) override these.
|
|
21
|
+
[tokens]
|
|
22
|
+
|
|
23
|
+
# Type scale (px) — projection-appropriate at 1920×1080
|
|
24
|
+
"--fs-display" = "116px"
|
|
25
|
+
"--fs-title" = "100px"
|
|
26
|
+
"--fs-focus" = "72px"
|
|
27
|
+
"--fs-h" = "60px"
|
|
28
|
+
"--fs-sub" = "38px"
|
|
29
|
+
"--fs-body" = "31px"
|
|
30
|
+
"--fs-small" = "22px"
|
|
31
|
+
"--fs-eyebrow" = "22px"
|
|
32
|
+
|
|
33
|
+
# Spacing
|
|
34
|
+
"--pad-x" = "112px"
|
|
35
|
+
"--pad-y" = "64px"
|
|
36
|
+
"--gap-title" = "44px"
|
|
37
|
+
"--gap-item" = "20px"
|
|
38
|
+
|
|
39
|
+
# The accent band along the top of every slide.
|
|
40
|
+
"--band" = "14px"
|
|
41
|
+
|
|
42
|
+
# Type families
|
|
43
|
+
"--font-display" = "\"IBM Plex Sans\", \"Helvetica Neue\", Arial, sans-serif"
|
|
44
|
+
"--font-body" = "\"IBM Plex Sans\", \"Helvetica Neue\", Arial, sans-serif"
|
|
45
|
+
"--font-mono" = "\"IBM Plex Mono\", ui-monospace, Menlo, Consolas, monospace"
|
|
46
|
+
|
|
47
|
+
[params.fontDisplay]
|
|
48
|
+
token = "--font-display"
|
|
49
|
+
title = "Display font"
|
|
50
|
+
|
|
51
|
+
[params.fontBody]
|
|
52
|
+
token = "--font-body"
|
|
53
|
+
title = "Body font"
|
|
54
|
+
|
|
55
|
+
[params.band]
|
|
56
|
+
token = "--band"
|
|
57
|
+
title = "Height of the band along the top (0px for none)"
|