@kadal/theme-seriph 0.0.0-stage → 0.4.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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Slidev.js Team (the original theme, @slidev/theme-seriph)
4
+ Copyright (c) 2026 Mithunish Prabhakaran (the Kadal Deck port, @kadal/theme-seriph)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,47 @@
1
- # Temporary Holding Version
1
+ # @kadal/theme-seriph
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **Seriph**, a theme for [Kadal Deck](https://deck.kadal.cc): Slidev's seriph theme, ported. PT
4
+ Serif for everything, PT Mono for code, headings in the primary colour (a slate teal) except on
5
+ the cover, and a centred cover over a dimmed background picture. Light and dark.
6
+
7
+ ```bash
8
+ npm install @kadal/theme-seriph
9
+ ```
10
+
11
+ ```yaml
12
+ ---
13
+ theme: seriph
14
+ layout: cover
15
+ background: /cover.jpg
16
+ themeConfig:
17
+ primary: "#5d8392" # → --theme-primary: the headings, links on hover, the progress bar
18
+ ---
19
+ ```
20
+
21
+ ## Layouts
22
+
23
+ Every engine layout is styled. The theme's own:
24
+
25
+ | layout | frontmatter | what |
26
+ |---|---|---|
27
+ | `cover` | `background` | the title centred; a picture background gets Slidev's dim and white words |
28
+
29
+ `intro`, `section`, `statement`, `fact` and `quote` keep their Slidev look. Slidev's seriph
30
+ falls back to a random picture from source.unsplash.com when a cover names none; that service no
31
+ longer exists, so a cover without `background:` here is simply plain.
32
+
33
+ ## Develop
34
+
35
+ The preview deck (`preview/deck.mdx`) is the original theme's own example deck, slide for slide:
36
+
37
+ ```bash
38
+ npm run dev # the preview deck, live
39
+ npm run check # lint it
40
+ ```
41
+
42
+ ## Licence and attribution
43
+
44
+ MIT. This package is a port of [`@slidev/theme-seriph`](https://github.com/slidevjs/themes), MIT License,
45
+ Copyright (c) 2021 Slidev.js Team (the theme by Anthony Fu). The look, the layouts and their frontmatter are
46
+ theirs; the React layouts and the stylesheet were rewritten for Kadal Deck. The full notice is in
47
+ [LICENSE](./LICENSE).
package/index.tsx ADDED
@@ -0,0 +1,34 @@
1
+ import type { LayoutProps, SlideBackground } from "@kadal/deck";
2
+
3
+ /**
4
+ * Seriph: Slidev's seriph theme (@slidev/theme-seriph, MIT) for Kadal Deck.
5
+ *
6
+ * Slidev's theme ships six layouts: cover, intro, fact, quote, section and statement. Five of them
7
+ * are a `.slidev-layout <name>` box with the slot centred inside, which is exactly the markup
8
+ * Kadal's built-in layouts of the same names already give (`.deck-layout-<name>`), so style.css
9
+ * styles those and nothing here replaces them. The cover is the one with behaviour: a
10
+ * `background:` that is a picture gets Slidev's dim (a #0005 → #0008 gradient) and white words,
11
+ * centred. (Slidev's seriph also falls back to a random picture from source.unsplash.com when the
12
+ * cover names none; that service is gone, so a Kadal cover without `background:` stays plain.)
13
+ * The picture itself is painted by the engine's background layer, as on any slide.
14
+ */
15
+
16
+ /** Is this background a picture or a film, rather than a colour (Slidev's handleBackground)? */
17
+ function isPicture(bg: SlideBackground | null | undefined): boolean {
18
+ return !!bg && !!(bg.image || bg.video);
19
+ }
20
+
21
+ /** `layout: cover` with Slidev's `background:` behaviour. */
22
+ function Cover({ options, children }: LayoutProps) {
23
+ const picture = isPicture(options.background);
24
+ return (
25
+ <div className={`deck-layout deck-layout-cover${picture ? " seriph-on-image" : ""}`}>
26
+ {picture ? <div className="seriph-dim" aria-hidden="true" /> : null}
27
+ {children}
28
+ </div>
29
+ );
30
+ }
31
+
32
+ export default {
33
+ layouts: { cover: Cover },
34
+ };
package/package.json CHANGED
@@ -1,6 +1,89 @@
1
1
  {
2
2
  "name": "@kadal/theme-seriph",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.4.0",
4
+ "description": "Seriph: Slidev's seriph theme, ported to Kadal Deck. PT Serif, headings in a slate-teal primary, a centred cover; light and dark.",
5
+ "keywords": [
6
+ "kadal-theme",
7
+ "kadal-deck",
8
+ "presentation",
9
+ "slides",
10
+ "theme",
11
+ "slidev-port"
12
+ ],
13
+ "homepage": "https://deck.kadal.cc/docs/",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/kadalcc/deck.git",
17
+ "directory": "packages/theme-seriph"
18
+ },
19
+ "bugs": {
20
+ "url": "https://github.com/kadalcc/deck/issues"
21
+ },
22
+ "license": "MIT",
23
+ "author": "Mithunish Prabhakaran <pmithunish@gmail.com>",
24
+ "type": "module",
25
+ "files": [
26
+ "style.css",
27
+ "index.tsx",
28
+ "README.md",
29
+ "LICENSE"
30
+ ],
31
+ "exports": {
32
+ ".": "./index.tsx",
33
+ "./style.css": "./style.css",
34
+ "./package.json": "./package.json"
35
+ },
36
+ "kadal": {
37
+ "theme": {
38
+ "name": "seriph",
39
+ "title": "Seriph",
40
+ "description": "Slidev's seriph theme: PT Serif, headings in the primary colour, a centred cover.",
41
+ "colorScheme": "both",
42
+ "themeConfig": {
43
+ "primary": "#5d8392"
44
+ },
45
+ "config": {
46
+ "fonts": {
47
+ "sans": "PT Serif",
48
+ "serif": "PT Serif",
49
+ "mono": "PT Mono",
50
+ "italic": true,
51
+ "weights": "400,700"
52
+ }
53
+ },
54
+ "shiki": {
55
+ "light": "vitesse-light",
56
+ "dark": "vitesse-dark"
57
+ },
58
+ "defaults": {},
59
+ "layouts": [
60
+ "cover"
61
+ ],
62
+ "components": []
63
+ }
64
+ },
65
+ "publishConfig": {
66
+ "access": "public",
67
+ "provenance": true
68
+ },
69
+ "scripts": {
70
+ "dev": "kadal-deck dev -C preview",
71
+ "build": "kadal-deck build -C preview",
72
+ "check": "kadal-deck check -C preview",
73
+ "typecheck": "tsc --noEmit"
74
+ },
75
+ "peerDependencies": {
76
+ "@kadal/deck": "^0.4.0",
77
+ "react": "^19.2.0"
78
+ },
79
+ "devDependencies": {
80
+ "@kadal/deck": "workspace:*",
81
+ "@types/react": "^19.2.0",
82
+ "@types/react-dom": "^19.2.0",
83
+ "@vitejs/plugin-react": "^6.0.2",
84
+ "react": "^19.2.7",
85
+ "react-dom": "^19.2.7",
86
+ "typescript": "^6.0.3",
87
+ "vite": "^8.0.16"
88
+ }
89
+ }
package/style.css ADDED
@@ -0,0 +1,362 @@
1
+ /* Seriph — a port of Slidev's seriph theme (@slidev/theme-seriph, MIT, © 2021 Slidev.js Team)
2
+ to Kadal Deck. PT Serif for everything, PT Mono for code, headings in the primary colour (slate
3
+ teal, #5d8392) except on the cover and intro, a centred cover over a dimmed picture; white on
4
+ #121212 in the dark.
5
+
6
+ Units. Slidev draws on a 980px-wide canvas with a 16px rem and a 1.1rem body; Kadal draws on a
7
+ 1920px one. Everything here is in `--seriph-rem`, one Slidev rem at Kadal's scale, worked out
8
+ from the slide's base size the way Slidev's body is (1.1rem), so the proportions are Slidev's
9
+ exactly and a deck that changes --deck-base-size scales the whole theme with it.
10
+
11
+ Headings are weight 400 unless a layout says otherwise: Slidev's reset (Uno's preflight) makes
12
+ every heading inherit the body weight, and the theme never sets one back.
13
+
14
+ themeConfig: `primary` → --theme-primary (the headings, links on hover, the quote's rule, the
15
+ progress bar). Slidev's README spells it `themeConfig: { primary: '#5d8392' }`; so does Kadal. */
16
+
17
+ .theme-seriph {
18
+ --seriph-rem: calc(var(--deck-base-size) / 1.1);
19
+ /* colour (Slidev's bg-main / text-main / border-main / code background) */
20
+ --deck-bg: #ffffff;
21
+ --deck-fg: #181818;
22
+ --deck-muted: #737373;
23
+ --deck-accent: var(--theme-primary, #5d8392);
24
+ --deck-accent-2: #4d7534;
25
+ --deck-surface: #f5f5f5;
26
+ --deck-border: rgba(156, 163, 175, 0.2);
27
+ --deck-live: var(--theme-primary, #5d8392);
28
+ /* type: the fonts mechanism (config.fonts in package.json) loads PT Serif and PT Mono */
29
+ --deck-heading-font: "PT Serif", ui-serif, Georgia, Cambria, "Times New Roman", serif;
30
+ --deck-body-font: "PT Serif", ui-serif, Georgia, Cambria, "Times New Roman", serif;
31
+ --deck-mono-font: "PT Mono", ui-monospace, "SF Mono", Menlo, monospace;
32
+ --deck-serif-font: "PT Serif", ui-serif, Georgia, Cambria, "Times New Roman", serif;
33
+ --deck-base-size: 34.5px;
34
+ /* code */
35
+ --deck-code-bg: #f5f5f5;
36
+ --deck-code-fg: #1b1b1b;
37
+ --deck-code-active: rgba(93, 131, 146, 0.12);
38
+ /* shape: Slidev's 2.5rem × 3.5rem page padding; --deck-pad is the wider of the two */
39
+ --deck-radius: calc(var(--seriph-rem) * 0.25);
40
+ --deck-pad: calc(var(--seriph-rem) * 3.5);
41
+ --deck-transition: 500ms;
42
+ --deck-controls-color: var(--deck-fg);
43
+ }
44
+ .theme-seriph[data-color-scheme="dark"] {
45
+ --deck-bg: #121212;
46
+ --deck-fg: #dddddd;
47
+ --deck-muted: #8a8a8a;
48
+ --deck-accent-2: #7fa36a;
49
+ --deck-surface: #1b1b1b;
50
+ --deck-border: rgba(156, 163, 175, 0.2);
51
+ --deck-code-bg: #1b1b1b;
52
+ --deck-code-fg: #eeeeee;
53
+ --deck-code-active: rgba(93, 131, 146, 0.2);
54
+ }
55
+
56
+ /* ── the page ─────────────────────────────────────────────────────────── */
57
+ .theme-seriph .deck-slide {
58
+ padding: calc(var(--seriph-rem) * 2.5) calc(var(--seriph-rem) * 3.5);
59
+ line-height: 1.5;
60
+ }
61
+ /* A `background:` covers the padding box: undo the two paddings, not one --deck-pad. */
62
+ .theme-seriph .deck-slide-background {
63
+ inset: calc(var(--seriph-rem) * -2.5) calc(var(--seriph-rem) * -3.5);
64
+ }
65
+
66
+ /* ── type (Slidev's layouts-base.css and the theme's layouts.css) ─────── */
67
+ .theme-seriph .deck-slide :is(h1, h2, h3, h4, h5, h6) {
68
+ font-family: var(--deck-heading-font);
69
+ font-weight: 400;
70
+ letter-spacing: normal;
71
+ margin: 0;
72
+ text-wrap: wrap;
73
+ }
74
+ .theme-seriph .deck-slide h1 {
75
+ color: var(--deck-accent);
76
+ font-size: calc(var(--seriph-rem) * 2.25);
77
+ line-height: calc(var(--seriph-rem) * 2.5);
78
+ margin-bottom: var(--seriph-rem);
79
+ margin-inline-start: -0.05em;
80
+ }
81
+ .theme-seriph .deck-slide h2 {
82
+ font-size: calc(var(--seriph-rem) * 1.875);
83
+ line-height: calc(var(--seriph-rem) * 2.25);
84
+ }
85
+ .theme-seriph .deck-slide h3 {
86
+ font-size: calc(var(--seriph-rem) * 1.5);
87
+ line-height: calc(var(--seriph-rem) * 2);
88
+ }
89
+ .theme-seriph .deck-slide h4 {
90
+ font-size: calc(var(--seriph-rem) * 1.25);
91
+ line-height: calc(var(--seriph-rem) * 1.75);
92
+ }
93
+ .theme-seriph .deck-slide h5 {
94
+ font-size: var(--seriph-rem);
95
+ line-height: calc(var(--seriph-rem) * 1.5);
96
+ }
97
+ .theme-seriph .deck-slide h6 {
98
+ font-size: calc(var(--seriph-rem) * 0.875);
99
+ line-height: calc(var(--seriph-rem) * 1.25);
100
+ padding-top: calc(var(--seriph-rem) * 0.25);
101
+ text-transform: uppercase;
102
+ letter-spacing: 0.1em;
103
+ font-weight: 500;
104
+ margin-inline-start: -0.05em;
105
+ }
106
+ .theme-seriph .deck-slide h6:not(.opacity-100) {
107
+ opacity: 0.4;
108
+ }
109
+ .theme-seriph .deck-slide p {
110
+ margin: var(--seriph-rem) 0;
111
+ line-height: calc(var(--seriph-rem) * 1.5);
112
+ }
113
+ .theme-seriph .deck-slide h1 + p {
114
+ margin-top: calc(var(--seriph-rem) * -0.5);
115
+ margin-bottom: var(--seriph-rem);
116
+ opacity: 0.5;
117
+ }
118
+ .theme-seriph .deck-slide :is(p, ul, table) + h2 {
119
+ margin-top: calc(var(--seriph-rem) * 2.5);
120
+ }
121
+ .theme-seriph .deck-slide :is(ul, ol) {
122
+ margin: 0;
123
+ padding: 0;
124
+ }
125
+ .theme-seriph .deck-slide ul {
126
+ list-style: square;
127
+ }
128
+ .theme-seriph .deck-slide ol {
129
+ list-style: decimal;
130
+ }
131
+ .theme-seriph .deck-slide li {
132
+ margin: 0 0 0 1.1em;
133
+ padding-inline-start: 0.2em;
134
+ line-height: 1.8em;
135
+ }
136
+ .theme-seriph .deck-slide blockquote {
137
+ margin: 0;
138
+ padding: calc(var(--seriph-rem) * 0.25) calc(var(--seriph-rem) * 0.5);
139
+ font-size: calc(var(--seriph-rem) * 0.875);
140
+ line-height: calc(var(--seriph-rem) * 1.25);
141
+ font-style: normal;
142
+ color: var(--deck-code-fg);
143
+ background: var(--deck-code-bg);
144
+ border: 0;
145
+ border-inline-start: 1px solid var(--deck-accent);
146
+ border-radius: calc(var(--seriph-rem) * 0.25);
147
+ }
148
+ .theme-seriph .deck-slide blockquote > * {
149
+ margin-block: 0;
150
+ }
151
+ .theme-seriph .deck-slide table {
152
+ width: 100%;
153
+ font-size: 1em;
154
+ line-height: calc(var(--seriph-rem) * 1.5);
155
+ }
156
+ .theme-seriph .deck-slide :is(th, td) {
157
+ padding: calc(var(--seriph-rem) * 0.75) calc(var(--seriph-rem) * 0.5);
158
+ border-bottom: 1px solid var(--deck-border);
159
+ }
160
+ .theme-seriph .deck-slide th {
161
+ text-align: left;
162
+ font-size: 1em;
163
+ font-weight: 400;
164
+ text-transform: none;
165
+ letter-spacing: normal;
166
+ color: inherit;
167
+ }
168
+ .theme-seriph .deck-slide a {
169
+ color: inherit;
170
+ text-decoration: none;
171
+ border-bottom: 1px dashed currentColor;
172
+ }
173
+ .theme-seriph .deck-slide a:hover {
174
+ color: var(--deck-accent);
175
+ border-bottom-style: solid;
176
+ }
177
+ .theme-seriph .deck-slide :is(b, strong) {
178
+ font-weight: 600;
179
+ }
180
+ .theme-seriph .deck-slide :not(pre) > code {
181
+ font-family: var(--deck-mono-font);
182
+ font-size: 0.9em;
183
+ font-weight: 300;
184
+ padding: calc(var(--seriph-rem) * 0.125) calc(var(--seriph-rem) * 0.375);
185
+ background: var(--deck-code-bg);
186
+ border-radius: calc(var(--seriph-rem) * 0.25);
187
+ }
188
+ .theme-seriph .deck-slide :is(kbd, .deck-kbd) {
189
+ font-family: var(--deck-mono-font);
190
+ font-size: calc(var(--seriph-rem) * 0.75);
191
+ padding: calc(var(--seriph-rem) * 0.125) calc(var(--seriph-rem) * 0.25);
192
+ border: 1px solid var(--deck-border);
193
+ border-bottom-width: 2px;
194
+ border-radius: calc(var(--seriph-rem) * 0.25);
195
+ background: rgba(156, 163, 175, 0.05);
196
+ box-shadow: none;
197
+ }
198
+
199
+ /* ── code: Slidev's 12px / 18px blocks with a 4px corner and no border ── */
200
+ .theme-seriph .deck-code-block {
201
+ margin: calc(var(--seriph-rem) * 0.25) 0;
202
+ border: 0;
203
+ border-radius: calc(var(--seriph-rem) * 0.25);
204
+ }
205
+ .theme-seriph pre.deck-code,
206
+ .theme-seriph .shiki-magic-move-wrap {
207
+ font-size: calc(var(--seriph-rem) * 0.75);
208
+ line-height: calc(var(--seriph-rem) * 1.125);
209
+ padding: calc(var(--seriph-rem) * 0.5) 0;
210
+ }
211
+ .theme-seriph .shiki-magic-move-wrap {
212
+ padding-inline: calc(var(--seriph-rem) * 0.5);
213
+ }
214
+ .theme-seriph pre.deck-code .line {
215
+ padding: 0 calc(var(--seriph-rem) * 0.5);
216
+ }
217
+ .theme-seriph pre.deck-code .line.is-dim {
218
+ opacity: 0.3;
219
+ }
220
+ .theme-seriph .deck-code-title {
221
+ font-size: calc(var(--seriph-rem) * 0.75);
222
+ padding: calc(var(--seriph-rem) * 0.5);
223
+ border-bottom-color: var(--deck-border);
224
+ }
225
+
226
+ /* ── the layouts ──────────────────────────────────────────────────────── */
227
+ .theme-seriph .deck-layout-default {
228
+ justify-content: flex-start;
229
+ }
230
+ /* Slidev's center does not centre the text by itself (its examples add `text-center`); Kadal's
231
+ does, which reads the same for a title and better for a line or two. */
232
+ .theme-seriph .deck-layout-center {
233
+ justify-content: center;
234
+ }
235
+ .theme-seriph :is(.deck-layout-cover, .deck-layout-intro) {
236
+ align-items: stretch;
237
+ text-align: start;
238
+ }
239
+ .theme-seriph :is(.deck-layout-cover, .deck-layout-intro) h1 {
240
+ color: inherit;
241
+ font-size: calc(var(--seriph-rem) * 3.75);
242
+ line-height: calc(var(--seriph-rem) * 5);
243
+ }
244
+ /* seriph's cover is centred (Slidev's `cover text-center`) */
245
+ .theme-seriph .deck-layout-cover {
246
+ text-align: center;
247
+ }
248
+ /* cover with a background image: Slidev's dim (#0005 → #0008) and white words */
249
+ .theme-seriph .deck-layout-cover.seriph-on-image {
250
+ color: #fff;
251
+ }
252
+ .theme-seriph .seriph-dim {
253
+ position: absolute;
254
+ inset: calc(var(--seriph-rem) * -2.5) calc(var(--seriph-rem) * -3.5);
255
+ background: linear-gradient(rgba(0, 0, 0, 0.333), rgba(0, 0, 0, 0.533));
256
+ pointer-events: none;
257
+ }
258
+ /* The dim sits under the words without lifting each one (`position: relative` on every child
259
+ would pin a deck's own `absolute` corners, Slidev's `abs-br`, back into the flow). */
260
+ .theme-seriph .deck-layout-cover.seriph-on-image {
261
+ isolation: isolate;
262
+ }
263
+ .theme-seriph .seriph-on-image > .seriph-dim {
264
+ z-index: -1;
265
+ }
266
+ .theme-seriph .deck-layout-section {
267
+ align-items: stretch;
268
+ text-align: center;
269
+ }
270
+ .theme-seriph .deck-layout-section h1 {
271
+ font-size: calc(var(--seriph-rem) * 3.75);
272
+ line-height: calc(var(--seriph-rem) * 5);
273
+ font-weight: 500;
274
+ }
275
+ .theme-seriph .deck-layout-statement {
276
+ text-align: center;
277
+ }
278
+ .theme-seriph .deck-layout-statement h1 {
279
+ font-size: calc(var(--seriph-rem) * 3.75);
280
+ line-height: 1;
281
+ font-weight: 700;
282
+ }
283
+ .theme-seriph .deck-layout-fact {
284
+ text-align: center;
285
+ }
286
+ .theme-seriph .deck-layout-fact > :is(h1, h2, p, .deck-counter) {
287
+ letter-spacing: normal;
288
+ }
289
+ .theme-seriph .deck-layout-fact h1 {
290
+ font-size: calc(var(--seriph-rem) * 6);
291
+ line-height: 1;
292
+ font-weight: 700;
293
+ }
294
+ .theme-seriph .deck-layout-fact h1 + p {
295
+ font-size: calc(var(--seriph-rem) * 1.5);
296
+ line-height: calc(var(--seriph-rem) * 2);
297
+ font-weight: 700;
298
+ }
299
+ .theme-seriph .deck-layout-quote {
300
+ padding-inline: 0;
301
+ font-size: 1em;
302
+ font-style: normal;
303
+ align-items: stretch;
304
+ }
305
+ .theme-seriph .deck-layout-quote h1 + p {
306
+ margin-top: calc(var(--seriph-rem) * 0.5);
307
+ }
308
+ /* Slidev's built-in end: white letters, spaced, on black, "END" when the slide is empty */
309
+ .theme-seriph .deck-slide.layout-end {
310
+ background: #000;
311
+ }
312
+ .theme-seriph .deck-layout-end {
313
+ color: rgba(255, 255, 255, 0.85);
314
+ font-size: calc(var(--seriph-rem) * 1.25);
315
+ letter-spacing: 0.1em;
316
+ user-select: none;
317
+ }
318
+ .theme-seriph .deck-layout-end:empty::before {
319
+ content: "END";
320
+ }
321
+ .theme-seriph .deck-layout-full {
322
+ padding: 0;
323
+ }
324
+ .theme-seriph .deck-layout-two-cols {
325
+ column-gap: var(--seriph-rem);
326
+ }
327
+ .theme-seriph .deck-layout-two-cols-header {
328
+ column-gap: var(--seriph-rem);
329
+ }
330
+ /* image-left / image-right / image: the picture flush to the edge, the words on Slidev's page
331
+ padding from the top (a .slidev-layout default beside the picture), not centred */
332
+ .theme-seriph :is(.deck-layout-image-left, .deck-layout-image-right) .deck-layout-image-content,
333
+ .theme-seriph :is(.deck-layout-iframe-left, .deck-layout-iframe-right) .deck-layout-iframe-content {
334
+ justify-content: flex-start;
335
+ padding: calc(var(--seriph-rem) * 2.5) calc(var(--seriph-rem) * 3.5);
336
+ }
337
+ .theme-seriph .deck-layout-image .deck-layout-image-content {
338
+ inset: 0;
339
+ justify-content: flex-start;
340
+ padding: calc(var(--seriph-rem) * 2.5) calc(var(--seriph-rem) * 3.5);
341
+ background: none;
342
+ }
343
+ .theme-seriph .deck-layout-image .deck-layout-image-content:empty {
344
+ display: none;
345
+ }
346
+ .theme-seriph :is(.deck-layout-iframe, .deck-layout-iframe-left, .deck-layout-iframe-right) {
347
+ padding: 0;
348
+ gap: 0;
349
+ }
350
+ .theme-seriph .deck-frame.deck-layout-iframe-pane {
351
+ border: 0;
352
+ border-radius: 0;
353
+ box-shadow: none;
354
+ }
355
+ .theme-seriph .deck-layout-two-cols-header > .deck-slot-bottom {
356
+ align-self: end;
357
+ }
358
+
359
+ /* ── chrome ───────────────────────────────────────────────────────────── */
360
+ .theme-seriph .deck-progress span {
361
+ background: var(--deck-accent);
362
+ }