Electric Studio · 钴蓝工作室
Bold, clean, professional, high-contrast split-panel decks. Theme locked to the Electric Studio preset (section 2 of STYLE_PRESETS.md) from the MIT-licensed zarazhangrui/frontend-slides.
Start from example.html in this plugin folder. It is the proven seed: keep its stage CSS (full viewport-base.css contents), the split-panel shell, the corner-marks chrome, the :root tokens, and the entire SlidePresentation controller script verbatim — replace slide content only. Do not rewrite the design; do not introduce any color or font outside this spec.
Locked design tokens (:root — complete list, no additions)
:root {
--bg-dark: #0a0a0a; /* edge bar, dark text, stage letterbox */
--bg-white: #ffffff; /* upper panel */
--accent-blue: #4361ee; /* cobalt panel, chips, bars, numerals */
--text-dark: #0a0a0a;
--text-light: #ffffff;
--text-dark-soft: rgba(10, 10, 10, 0.58);
--text-light-soft: rgba(255, 255, 255, 0.72);
--line-dark: rgba(10, 10, 10, 0.14);
--line-light: rgba(255, 255, 255, 0.28);
--blue-soft: rgba(67, 97, 238, 0.10); /* tick boxes, outline bar fills */
--stage-bg: var(--bg-dark);
--slide-bg: var(--bg-white);
--font: 'Manrope', sans-serif; /* the ONLY typeface */
--title-size: 152px;
--h2-size: 88px;
--lede-size: 33px;
--body-size: 27px;
--slide-pad-x: 110px;
--edge-bar-h: 14px;
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
--duration-normal: 0.7s;
}
Forbidden: any other hue, gradients, purple/indigo (#6366f1), warm accents, photography, illustrations, drop shadows, rounded hero cards. The palette is exactly white / cobalt / near-black plus their soft alphas.
Typography (all Manrope, Google Fonts weights 400/500/800)
- Display / H2 — Manrope 800, tight negative letter-spacing (
-0.025em to -0.035em), line-height ≤ 1.08. Title ~152px, H2 60–88px. A terminal period in --accent-blue (<span class="blue">.</span>) is a signature flourish.
- Quote hero — Manrope 800 at
92px with an oversized cobalt “ mark (220px): quote typography is the deck's hero visual.
- Kicker — 22px, 800, uppercase,
letter-spacing: 0.34em, cobalt on white / white on cobalt.
- Body / lede — 400/500, 25–33px. Support copy on the white panel uses
--text-dark-soft; body copy on the cobalt panel stays full --text-light for WCAG AA contrast (the soft light alpha is reserved for bold uppercase chrome: marks, hints, separators).
- Marks — 19px, 800, uppercase,
letter-spacing: 0.22em.
- Never substitute Inter, Roboto, Arial, serifs, or any second typeface.
Locked layout system — vertical split panels
Every slide is the same shell:
<section class="slide s-<master>">
<div class="split">
<div class="panel panel-white panel-pad"> … </div>
<div class="edge-bar"></div> <!-- 14px #0a0a0a accent bar on the panel seam -->
<div class="panel panel-blue panel-pad"> … </div>
</div>
<div class="mark mark-tl dark"><span class="chip"></span>Brand</div>
<div class="mark mark-tr dark"><span class="soft">Section</span></div>
<div class="mark mark-bl light"><span class="soft">Deck label</span></div>
<div class="mark mark-br light">NN / NN</div>
</section>
- White above, cobalt #4361ee below — always. Vary only the split ratio per master; never side-by-side splits, never blue-over-white.
- Edge bar (
.edge-bar, 14px, --bg-dark) sits on the seam of every slide; use .edge-bar.light (white) only when a slide reads as cobalt-dominant and needs the inverse.
- Brand marks in corners are the chrome (no breadcrumbs, no baseline rule): top-left cobalt chip (16px square) + wordmark; top-right section label; bottom-left deck label; bottom-right
NN / NN page mark. Marks over the white panel use .dark, marks over the cobalt panel use .light.
- Horizontal padding is
--slide-pad-x (110px) on both panels; spacing stays confident and restrained — generous margins, no cramming.
Master pages (compose decks from these; all present in the seed)
| Master |
Split |
Content |
s-title |
50/50 |
Kicker + giant statement title on white; lede + meta row on blue |
s-agenda |
348px / rest |
H2 on white; numbered hairline rows (--line-light) on blue with idx + hint |
s-divider |
150px / rest |
Empty white strip; giant outlined number (-webkit-text-stroke: 3px var(--bg-white)) + label on cobalt |
s-bullets |
deep / 240px |
Kicker + H2 + ≤3 tick points (cobalt-bordered .tick with inline-SVG check) on white; one bold takeaway on blue |
s-stat |
deep / 300px |
Oversized cobalt number (~400px, 800) on white; label + note on blue |
s-quote |
deep / 220px |
Cobalt “ + 92px statement quote on white; attribution on blue |
s-compare |
50/50 |
The split IS the contrast: "their way" on white vs "our way" on cobalt, dash-topped list items |
s-grid |
300px / rest |
H2 on white; 2×2 .gcard grid (2px --line-light borders) on cobalt |
s-chart |
deep / 200px |
Pure-CSS bar chart on white: cobalt bars (.solid fill or --blue-soft + cobalt border), scaleY(0)→1 entrance; takeaway on blue |
s-close |
150px / rest |
Cobalt-dominant statement ("Let's make something electric.") + inline-SVG contact links |
Fixed 16:9 stage — NON-NEGOTIABLE scaling system
- Author every slide on a fixed 1920×1080 canvas:
.deck-viewport (fills the window) wraps .deck-stage (1920×1080, transform-origin: 0 0).
- JavaScript scales the whole stage uniformly:
factor = min(innerWidth/1920, innerHeight/1080), then translate(x, y) scale(factor) to center with letterbox/pillarbox; re-run on resize.
- Never reflow content per device; no responsive breakpoints inside slides; all measurements are fixed px at design size.
- Keep the FULL viewport-base.css block from the seed (stage, slide stacking, print styles,
prefers-reduced-motion).
- Slide switching toggles
.active/.visible (visibility/opacity/pointer-events) — never display: none.
- Navigation runtime (keep the seed's
SlidePresentation controller verbatim): ←/→/↑/↓/Space/PageUp/PageDown/Home/End, debounced wheel (~650ms), touch swipe (≥40px), #/<index> hash routing with deep-link restore, page counter pill in .deck-controls fixed outside the scaled stage.
Motion
- Entrances only:
.reveal elements transition when the slide gains .visible; stagger via transition-delay in ~0.1s steps.
- One signature easing:
cubic-bezier(0.16, 1, 0.3, 1). Animate only transform and opacity. Chart bars enter via scaleY.
prefers-reduced-motion support is mandatory (in the base CSS).
Output contract
- Single self-contained
.html: all CSS/JS inline, zero build, zero external JS, no CDN scripts. Google Fonts link for Manrope is the only external reference.
- Icons are inline SVG (stroke
#4361ee on white, #ffffff on cobalt). Charts are pure CSS. No remote images.
- No scrolling, no overflow: split content into more slides instead of shrinking type. Low-density speaker-led decks: one idea per slide, 1–3 bullets. High-density reading-first decks: structured grids, max 4–6 cards.
- Comment every section:
/* === SECTION NAME === */. Never negate CSS functions directly (-clamp() is silently ignored) — use calc(-1 * clamp(...)).
Attribution
Theme, fixed-stage model, and workflow come from the upstream MIT-licensed zarazhangrui/frontend-slides (© 2025 Zara Zhang), Electric Studio preset (STYLE_PRESETS.md section 2). The LICENSE file ships in this plugin folder; keep it in place when redistributing.
1---2name: fs-electric-studio3description: OpenDesign as an enterprise design platform: a buyer-forwardable proposal for a design-org's economic buyer — pain, value, ROI, rollout. Built as a decision-grade B2B sales deck for economic buyer, design VP, procurement.4---5
6# Electric Studio · 钴蓝工作室
7
8Bold, clean, professional, high-contrast split-panel decks. Theme locked to the **Electric Studio** preset (section 2 of `STYLE_PRESETS.md`) from the MIT-licensed [zarazhangrui/frontend-slides](https://github.com/zarazhangrui/frontend-slides).
9
10**Start from `example.html` in this plugin folder. It is the proven seed: keep its stage CSS (full viewport-base.css contents), the split-panel shell, the corner-marks chrome, the `:root` tokens, and the entire `SlidePresentation` controller script verbatim — replace slide content only. Do not rewrite the design; do not introduce any color or font outside this spec.**
11
12## Locked design tokens (`:root` — complete list, no additions)
13
14```css
15:root {
16 --bg-dark: #0a0a0a; /* edge bar, dark text, stage letterbox */
17 --bg-white: #ffffff; /* upper panel */
18 --accent-blue: #4361ee; /* cobalt panel, chips, bars, numerals */
19 --text-dark: #0a0a0a;
20 --text-light: #ffffff;
21 --text-dark-soft: rgba(10, 10, 10, 0.58);
22 --text-light-soft: rgba(255, 255, 255, 0.72);
23 --line-dark: rgba(10, 10, 10, 0.14);
24 --line-light: rgba(255, 255, 255, 0.28);
25 --blue-soft: rgba(67, 97, 238, 0.10); /* tick boxes, outline bar fills */
26
27 --stage-bg: var(--bg-dark);
28 --slide-bg: var(--bg-white);
29
30 --font: 'Manrope', sans-serif; /* the ONLY typeface */
31 --title-size: 152px;
32 --h2-size: 88px;
33 --lede-size: 33px;
34 --body-size: 27px;
35
36 --slide-pad-x: 110px;
37 --edge-bar-h: 14px;
38
39 --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
40 --duration-normal: 0.7s;
41}
42```
43
44Forbidden: any other hue, gradients, purple/indigo (#6366f1), warm accents, photography, illustrations, drop shadows, rounded hero cards. The palette is exactly white / cobalt / near-black plus their soft alphas.
45
46## Typography (all Manrope, Google Fonts weights 400/500/800)
47
48- **Display / H2** — Manrope 800, tight negative letter-spacing (`-0.025em` to `-0.035em`), line-height ≤ 1.08. Title ~152px, H2 60–88px. A terminal period in `--accent-blue` (`<span class="blue">.</span>`) is a signature flourish.
49- **Quote hero** — Manrope 800 at ~92px with an oversized cobalt `“` mark (~220px): **quote typography is the deck's hero visual.**
50- **Kicker** — 22px, 800, uppercase, `letter-spacing: 0.34em`, cobalt on white / white on cobalt.
51- **Body / lede** — 400/500, 25–33px. Support copy on the white panel uses `--text-dark-soft`; body copy on the cobalt panel stays full `--text-light` for WCAG AA contrast (the soft light alpha is reserved for bold uppercase chrome: marks, hints, separators).
52- **Marks** — 19px, 800, uppercase, `letter-spacing: 0.22em`.
53- Never substitute Inter, Roboto, Arial, serifs, or any second typeface.
54
55## Locked layout system — vertical split panels
56
57Every slide is the same shell:
58
59```html
60<section class="slide s-<master>">
61 <div class="split">
62 <div class="panel panel-white panel-pad"> … </div>
63 <div class="edge-bar"></div> <!-- 14px #0a0a0a accent bar on the panel seam -->
64 <div class="panel panel-blue panel-pad"> … </div>
65 </div>
66 <div class="mark mark-tl dark"><span class="chip"></span>Brand</div>
67 <div class="mark mark-tr dark"><span class="soft">Section</span></div>
68 <div class="mark mark-bl light"><span class="soft">Deck label</span></div>
69 <div class="mark mark-br light">NN / NN</div>
70</section>
71```
72
73- **White above, cobalt #4361ee below — always.** Vary only the split ratio per master; never side-by-side splits, never blue-over-white.
74- **Edge bar** (`.edge-bar`, 14px, `--bg-dark`) sits on the seam of every slide; use `.edge-bar.light` (white) only when a slide reads as cobalt-dominant and needs the inverse.
75- **Brand marks in corners** are the chrome (no breadcrumbs, no baseline rule): top-left cobalt chip (16px square) + wordmark; top-right section label; bottom-left deck label; bottom-right `NN / NN` page mark. Marks over the white panel use `.dark`, marks over the cobalt panel use `.light`.
76- Horizontal padding is `--slide-pad-x` (110px) on both panels; spacing stays confident and restrained — generous margins, no cramming.
77
78## Master pages (compose decks from these; all present in the seed)
79
80| Master | Split | Content |
81| ------ | ----- | ------- |
82| `s-title` | 50/50 | Kicker + giant statement title on white; lede + meta row on blue |
83| `s-agenda` | 348px / rest | H2 on white; numbered hairline rows (`--line-light`) on blue with idx + hint |
84| `s-divider` | 150px / rest | Empty white strip; giant outlined number (`-webkit-text-stroke: 3px var(--bg-white)`) + label on cobalt |
85| `s-bullets` | deep / 240px | Kicker + H2 + ≤3 tick points (cobalt-bordered `.tick` with inline-SVG check) on white; one bold takeaway on blue |
86| `s-stat` | deep / 300px | Oversized cobalt number (~400px, 800) on white; label + note on blue |
87| `s-quote` | deep / 220px | Cobalt `“` + 92px statement quote on white; attribution on blue |
88| `s-compare` | 50/50 | The split IS the contrast: "their way" on white vs "our way" on cobalt, dash-topped list items |
89| `s-grid` | 300px / rest | H2 on white; 2×2 `.gcard` grid (2px `--line-light` borders) on cobalt |
90| `s-chart` | deep / 200px | Pure-CSS bar chart on white: cobalt bars (`.solid` fill or `--blue-soft` + cobalt border), `scaleY(0)→1` entrance; takeaway on blue |
91| `s-close` | 150px / rest | Cobalt-dominant statement ("Let's make something electric.") + inline-SVG contact links |
92
93## Fixed 16:9 stage — NON-NEGOTIABLE scaling system
94
95- Author every slide on a fixed **1920×1080** canvas: `.deck-viewport` (fills the window) wraps `.deck-stage` (1920×1080, `transform-origin: 0 0`).
96- JavaScript scales the whole stage uniformly: `factor = min(innerWidth/1920, innerHeight/1080)`, then `translate(x, y) scale(factor)` to center with letterbox/pillarbox; re-run on `resize`.
97- Never reflow content per device; no responsive breakpoints inside slides; all measurements are fixed px at design size.
98- Keep the FULL viewport-base.css block from the seed (stage, slide stacking, print styles, `prefers-reduced-motion`).
99- Slide switching toggles `.active`/`.visible` (visibility/opacity/pointer-events) — **never `display: none`**.
100- Navigation runtime (keep the seed's `SlidePresentation` controller verbatim): `←`/`→`/`↑`/`↓`/`Space`/`PageUp`/`PageDown`/`Home`/`End`, debounced wheel (~650ms), touch swipe (≥40px), `#/<index>` hash routing with deep-link restore, page counter pill in `.deck-controls` fixed **outside** the scaled stage.
101
102## Motion
103
104- Entrances only: `.reveal` elements transition when the slide gains `.visible`; stagger via `transition-delay` in ~0.1s steps.
105- One signature easing: `cubic-bezier(0.16, 1, 0.3, 1)`. Animate only `transform` and `opacity`. Chart bars enter via `scaleY`.
106- `prefers-reduced-motion` support is mandatory (in the base CSS).
107
108## Output contract
109
110- Single self-contained `.html`: all CSS/JS inline, zero build, zero external JS, no CDN scripts. Google Fonts link for Manrope is the only external reference.
111- Icons are inline SVG (stroke `#4361ee` on white, `#ffffff` on cobalt). Charts are pure CSS. No remote images.
112- No scrolling, no overflow: split content into more slides instead of shrinking type. Low-density speaker-led decks: one idea per slide, 1–3 bullets. High-density reading-first decks: structured grids, max 4–6 cards.
113- Comment every section: `/* === SECTION NAME === */`. Never negate CSS functions directly (`-clamp()` is silently ignored) — use `calc(-1 * clamp(...))`.
114
115## Attribution
116
117Theme, fixed-stage model, and workflow come from the upstream MIT-licensed [zarazhangrui/frontend-slides](https://github.com/zarazhangrui/frontend-slides) (© 2025 Zara Zhang), Electric Studio preset (STYLE_PRESETS.md section 2). The LICENSE file ships in this plugin folder; keep it in place when redistributing.