This is a Slidev theme following ekino's design system (Brand Playbook, September 2026) and its official PowerPoint template ("Masque", October 2026).
Contributions are welcome ! 🤓
-
Create a Slidev project following the docs.
-
Install the
@ekino/slidev-theme-ekinodependency:
pnpm install @ekino/slidev-theme-ekino
- Use it as your theme in
slides.md:
---
theme: "@ekino/slidev-theme-ekino"
title: My presentation
themeConfig:
project: My project # shown at the top of every slide, defaults to `title`
confidential: true # appends `_[CONFIDENTIAL]` to the project name
date: Octobre 2026 # shown on the cover and on the last slide
# copyright: Copyright © 2026 ekino # defaults to the current year
---The theme sets a 1280 Ă— 720 canvas (the geometry of the PowerPoint template): do not override canvasWidth nor fonts.sans.
The ekino design system uses the PP Neue Corp font family by Pangram Pangram, which is a commercial font. It is therefore not distributed with this theme: installing it is the responsibility of the theme's user.
ekino employees can download it from the ekino Communication SharePoint. Install the three following faces on your computer:
- PP Neue Corp Normal Regular
- PP Neue Corp Normal Semibold
- PP Neue Corp Extended Ultrabold
The theme picks them up automatically from your system fonts. Without them, slides fall back to Helvetica / Arial and will not match the design system.
Keep this in mind when you build or export a deck (
slidev build,slidev export): the font must be installed on the machine that renders the slides, and a deck deployed as a static website will only display it for viewers who have it installed too.
- Backgrounds: dark (
#2B2B2B) for title pages only (cover, part, quote, end), grey (#A5A5A5) for the table of contents, white for every content slide. - Chrome on every content slide: the "ekino." logotype, the project name, the slide number (
_12), the top rule, and the copyright. - Typography: the title of a content slide (
#) is a sub-title in sentence case (PP Neue Corp Normal semibold, 28 pt); display titles in Extended Ultrabold capitals are reserved to title pages and key figures, and automatically step down the size scale so they never overflow. - Code blocks: monochrome syntax highlighting, the only place where a monospace font is allowed.
A few rules remain yours: one accented information per slide at most, no emoji, no long dash nor middle dot, "ekino" always in lowercase, the ekino grain on every illustration photo (use <EkinoImage>).
| Layout | Background | Use |
|---|---|---|
cover |
dark | opening slide |
toc |
grey | table of contents |
title |
dark | part title page |
default |
white | content |
two-cols |
white | text on the left, content on the right |
center |
white | centered message |
quote |
dark | verbatim |
point |
white, dark disc | transition, must be followed by a dark slide |
thank-you |
dark | end of the deck |
Content layouts (default, two-cols, center) accept two optional frontmatter props:
eyebrow: the small capitalized text above the title, to situate the subject;source: the source of the data shown on the slide, displayed at the bottom left.
The default layout of any Slidev slide.
---
eyebrow: Context
source: ekino, 2026 survey
---
# The title says the message, in sentence case
## An optional small sub-title
Body text.The layout of the first slide, with the full ekino brand block. The title is displayed in display capitals at the bottom; a paragraph is displayed above it. The project name and date come from themeConfig (date can be overridden in the slide frontmatter).
The layout accepts an optional ::logo:: slot, displayed next to the ekino brand block for co-branded presentations.
---
layout: cover
---
# Presentation title
A sub-title
::logo::
<img src="./client-logo.svg" />The table of contents, on a grey background. Write the parts as an ordered list, with an optional nested list for their sub-titles.
---
layout: toc
---
# Sommaire
1. Part title
- Part sub-title
2. Another partThe part title page ("PARTIE .01"). Provide the part number with number, and optionally a portrait image, which gets the ekino grain (see <EkinoImage>). A paragraph is displayed above the title.
---
layout: title
number: "01"
---
# Context
An optional framing sentence.The 5/7 composition of the template: the title and text on the left, a vertical rule, then the ::right:: slot. The optional ::left:: slot is appended below the default content in the left column.
---
layout: two-cols
---
# Text on the left, content on the right
Some text
::right::
A layout that centers the content both horizontally and vertically on the slide.
---
layout: center
---
# Centered content
This content is centered on the slide.A verbatim on a dark background. Text in **bold** is highlighted with the accent color.
---
layout: quote
author: Firstname Lastname
role: Job title
---
A short quote, with **one highlighted part**.The "le point" transition: a dark disc grows over the slide, then a sentence of twelve words at most appears. Use it once per deck, and always follow it with a dark slide (title, quote or thank-you).
---
layout: point
---
Nos ingénieurs, votre projet.The layout to end your presentation. The heading prop changes the default "Thank you" title.
This layout provides an optional ::speaker:: slot, where you can use the <SpeakerCard> component.
---
layout: thank-you
heading: Merci
---
::speaker::
<SpeakerCard name="Maxime Dubourg" title="Ingénieur Front-end Sénior">
<p>maxime.dubourg@ekino.com</p>
<p>+33 1 23 45 67 89</p>
</SpeakerCard>A component to display a speaker's name, title and contact information. Particularly well-suited for the speaker slot in the thank-you layout.
<SpeakerCard name="Maxime Dubourg" title="Ingénieur Front-end Sénior">
<p>maxime.dubourg@ekino.com</p>
<p>+33 1 23 45 67 89</p>
</SpeakerCard>A component to display a QR code linking to a feedback form, along with custom text if needed.
<Feedback url="https://example.com/feedback" size="medium" text="Rate my presentation" />Props:
url(required): The URL to encode in the QR code for the feedback linksize(optional): The size of the QR code and text. Options:'small','medium'(default),'large'text(optional): A custom text to display below the qrcode
Displays a photo with the ekino grain: the dithering of the ekino.fr website (Atkinson dithering on the "Chaotic Neutral" palette in color, on black and white otherwise), computed in the browser with the exact same recipe as the ekino-trame script. The photo first shows up in black and white grain, then its color grain version fades in 3 seconds after the slide appears. Exports, overviews and prefers-reduced-motion show the final color state.
The component fills its parent (cropped like object-fit: cover), and the grain size follows its displayed size on the slide.
<EkinoImage src="./photo.jpg" alt="Our office" />Props:
src(required): the image URL. Prefer a local image: a remote one must be served with CORS headers, otherwise the grain cannot be computed and a grey fallback is displayed (with a warning in the console)alt(optional): the image descriptionnb(optional): black and white grain only, without the revealreveal(optional, defaulttrue): set it tofalseto display the color grain right awayposition(optional, default50% 50%): the crop anchor, like CSSobject-position
Never use it on a profile picture, a screenshot or a logo: those stay sharp.
The official "ekino." logotype and "ekino. A Havas Company" brand block, as inline SVG in currentColor. They are already placed by the layouts: do not use them elsewhere.
| Class | Use |
|---|---|
ek-t1 to ek-t7 |
display sizes (Extended Ultrabold capitals), for key figures only |
ek-c1, ek-c2, ek-c3 |
body sizes (19, 16 and 13 px) |
ek-eyebrow |
small capitalized label |
ek-caption |
caption, secondary information |
ek-accent |
the accent color, for one information per slide |
ek-muted |
secondary text color |
The palette is available as CSS variables: --ek-grey-dark, --ek-grey-line, --ek-grey-medium, --ek-white, --ek-accent, --ek-surface, --ek-grey-text, and the accent shades --ek-accent-90 to --ek-accent-10 (for charts only).
- The yellow (
#FFD900) and the Graphik font are gone, replaced by the 2026 palette and PP Neue Corp, which is no longer bundled with the theme (see Font installation). - The canvas is now 1280 Ă— 720: absolute positions in your slides may need to be adjusted.
coverandthank-youare dark;titleis now a dark part title page, taking anumberprop;thank-youno longer displays the multilingual "Thank you" text, use theheadingprop instead.two-colsnow puts the title and the default slot in the left column (5/7 composition).- New layouts:
toc,quoteandpoint. NewthemeConfigoptions:project,confidential,date,copyright.
Thank you for considering contributing to this project!
To begin, just clone the project locally. Once you're set and ready to merge your changes, create a new Pull Request targeting the master branch for review.
-
Bump the
versionfield inpackage.json -
Commit the changes and push it to
main -
Create and push a tag that matches the bumped
version -
Create a release with changelog on GitHub
-
Run
pnpm publish