Version 1.0August 2026Machine-readable reference

TEISENDA CI Guide (for AI use)

Reading this by machine? ci.teisenda.com/llms.txt carries the same rules as plain text at roughly a third of the tokens, and points to /icons/index.json, /flaggen/index.json and /bilder/index.json for the asset lists. It is generated from this page, so the two cannot drift.

TEISENDA sells content that doesn't read as generated. That promise is only credible if the brand carrying it doesn't look generated either. This guide exists to hold that line — in every asset, in every language, in every channel.

What we are

The marketing operating system for small and mid-sized B2B companies. Two modules on one foundation: the Studio Engine for daily work with AI, the Content Engine for everything the online presence needs. Content in five languages: German, English, French, Spanish, Portuguese.

Who we talk to

Owners, managing directors and one-person marketing departments in the German-speaking mid-market. People with too many tools, no team, and a list of things that never get done. They are practitioners, not buyers of vision.

We are the proof of our own product.

Three commitments this guide enforces

  • One violet, not two. The identity leads with the deep violet from our own logo. The bright interface violet is a UI colour and nothing more.
  • One family, set with discipline. Instrument Sans does every job. The difference between a headline and a caption is weight, size and tracking — not a second typeface.
  • Our graphics come from the butterfly. Faceted, constructed, ours. No particle fields, no glowing orbs, no stock neural networks.
03
Section 03

Color

The identity leads with Teisenda Violet #432B78 — the deepest tone in our own logo. It is quieter, older and more credible than the bright violet the product interface currently leads with, and it is the reason a mid-market managing director takes us seriously.

Brand colors

Teisenda Violet#432B78 · violet-700The lead. Headlines on pale grounds, filled panels, print, social key visuals, chart primaries.
Wing Violet#6A4394 · violet-600Second surface. Panel-on-panel, gradients within the violet family, secondary chart series.
Edge Violet#765BA3 · violet-500Quiet accents, rules, dividers, section numerals, third chart series.

All three are lifted directly from the logo artwork. Using them means brand and mark finally agree.

Interface colors

These belong to the product, not to the brand. They appear inside the app and on the website's interactive elements. They never lead a piece of communication.

Interface Violet#8250E6Buttons, links, focus rings, active states. Never body text on dark.
Violet 300#B49BF0Violet text on dark grounds. The only violet legible as type on the canvas.
Lavender#D8CBF2Muted headings on dark, hairlines, disabled states.
Violet 50#F2EDFBTinted surfaces on paper: callouts, table stripes, quiet cards.

Grounds and ink

Canvas#141020Product and web dark ground.
Surface#1E1836Cards on canvas.
Paper#FBFAFDDocuments, guides, print, decks.
Ink#1D1D1BText black. Taken from the logo file — not pure #000.

Signal colors

One accent, used sparingly, plus two status colors that exist only in the interface. Amber is the single warm note in the system: it marks what is new, in beta or worth attention.

Signal Amber#EDA938"In beta", "New", highlights on dark. On paper, use #8A5B08 for text.
Jade#1E7A5ASuccess states. Interface only.
Critical#B3323AErrors and destructive actions. Interface only.

Contrast, checked

PairingRatioVerdict
#432B78 on Paper11.3 : 1Passes AAA. The default for headlines and body on light.
White on #432B7811.3 : 1Passes AAA. Filled violet panels are safe at any type size.
White on #8250E64.95 : 1Passes AA. Fine for button labels; do not shrink below 14 px.
#8250E6 on Canvas3.8 : 1Fails for body text. Large headings and UI borders only.
#B49BF0 on Canvas7.95 : 1Passes AAA. Use this whenever violet type sits on dark.
#432B78 on Canvas1.7 : 1Never. The lead violet does not exist as type on dark.

Rules

  • Lead with violet, not with black. A piece of TEISENDA communication should read violet from across the room — either as filled area or as headline colour.
  • One accent per surface. Amber and violet may share a page. They may not share a component.
  • Gradients stay inside the violet family and stay under 25% of any surface. #432B78 to #6A4394 is the only approved pair.
  • No violet-to-blue or violet-to-pink gradients. That combination is the visual shorthand for "AI startup" and we are deliberately not using it.
  • No neon glow behind violet elements.
  • No new colours introduced per campaign. If a campaign needs a colour we do not have, it needs a different idea.
04
Section 04

Typography

One family: Instrument Sans. A neo-grotesque with enough character in the R, a and t to avoid reading as a system default. Headlines use the same font as captions, set tighter, heavier, larger. Open source, self-hostable, verified against every character the 16 site languages need.

Display · 600, tracking −0.036em
Aa Gg Rt

Headlines live on tight tracking. The closer the letters sit, the more the type reads as a designed object rather than default output. Below 24 px, negative tracking stops helping and starts hurting.

Text & UI · 400 / 500, tracking 0
Aa Gg Rt

Body copy runs at default tracking with generous leading. This is where the family earns its keep: it handles a 70-character measure and a dense data table with the same face.

Why one family works here

Hierarchy comes from scale and weight, not a second voice. Two available faces is how a small team picks the wrong one. If more separation is ever needed, add a text face, never a second display face.

Get the font

Instrument Sans by Rodrigo Fuenzalida and Jordan Egstad, SIL Open Font License. Two variable fonts from the Google Fonts repository, unmodified. Use these rather than a static cut: one file covers 400 to 700.

Upright
InstrumentSans-Variable.ttf wght 400–700 · wdth 75–100
190 KB · TrueType
Download
Italic
InstrumentSans-Italic-Variable.ttf wght 400–700 · wdth 75–100
197 KB · TrueType
Download
Licence
OFL.txt SIL Open Font License 1.1
4 KB · plain text
Read it

Three separate files at ci.teisenda.com/fonts/, nothing zipped. Send the link, not the attachment — an agency that downloads from here gets the same file we do. The width axis sits at 100 for everything in this guide; treat anything below that as a decision, not a default.

The scale

RoleFaceSize / lineNotes
HeroSans 600clamp 40–78 px / 1.03Tracking −0.042em. Max three lines. Never uppercase.
Section headSans 60027–42 px / 1.06Tracking −0.034em. Sentence case, always.
SubheadSans 60019 px / 1.30Tracking −0.012em.
BodySans 40016 px / 1.62Measure 60–70 characters. Never justified.
Lead paragraphSans 40019 px / 1.55One per section, directly under the head.
Label / eyebrowSans 60010.5 px / 1.4Uppercase, tracking 0.19em. The only uppercase in the system.
UI & buttonsSans 60014 pxSentence case. Never all caps.
DataSans 500—Always font-variant-numeric: tabular-nums.

Language coverage

The site runs in sixteen languages. The font files were read character by character against every accented letter those sixteen need, rather than trusting the words "Latin Extended" on a spec sheet. Shown at display weight and at body weight:

Größe · Qualité · ¿Preparado? · Ação · Możliwość
Příležitost · Lehetőség · Mogućnost · Måltid · Șansă
ÄÖÜ ß · àâçêëîôùû œ · áéíóúñ ¡¿ · ãõ · ąćęłńśźż · áčďěňřšťůýž · áőúűö · čćđšž · ăâîșț · åäöøæ · « » „ “ ‚ ‘ – — …

One gap. Romanian takes ș ț, comma below, U+0219 and U+021B. Both present. The cedilla forms ş ţ are not: ţ is absent, so legacy Romanian text falls back on that one letter. Convert before layout.

Punctuation localises too. German takes „…“, French « … » with hair spaces, Spanish opens a question with ¿, Polish uses „…”, and the Nordic languages take ”…”. A translated string with English quotes around it is a translated string that nobody finished.

Rules

  • Tracking is tied to size. −0.042em above 40 px, −0.034em from 27–42 px, −0.012em at subhead size, zero below that. Tight tracking on 14 px text just makes it hard to read.
  • Sentence case everywhere except eyebrow labels. Title Case Headlines Look Like Press Releases.
  • Emphasis is weight, not italic. 600 inside body copy. Italic is reserved for a named thing quoted in running text — In beta, a module name, a term being defined.
  • Two type sizes per surface is usually enough. A slide with five sizes is a slide nobody reads.
  • No Space Grotesk, no Inter, no Poppins, no Montserrat — including in decks assembled by third parties.
  • No colour change mid-headline and no gradient text. If a word matters, the sentence should make that obvious.
  • No letter-spacing on lowercase text. Ever.
05
Section 05

Product names

TEISENDA is the brand. Studio Engine and Content Engine are modules of it — never standalone brands, never with logos of their own.

Correct lockups
TEISENDA Studio Engine
TEISENDA Content Engine
iconStudio EngineIn beta
  • Set in Instrument Sans 600, never in the logo's rounded style and never redrawn from the logo artwork.
  • "TEISENDA" first, always — on first mention in any document, deck or page. After that, "the Studio Engine" is fine.
  • Module names take Title Case because they are proper names. Everything else stays sentence case.
  • Status labels — In beta, In development — use Signal Amber and the eyebrow style. They are facts, not decoration; remove them the day they stop being true.
  • No separate icon, symbol or colour per module. Two modules with two identities is two brands.
  • No "TEISENDA Studio Engine™", no ®, no "by TEISENDA" suffix.
  • Do not invent a name outside the Engine pattern. New capability goes inside an existing module until there is a strategic reason it cannot.

What each module is

Descriptions below match teisenda.com as published. When the product moves, the site moves first and this page follows.

In beta

TEISENDA Studio Engine

Four AI providers in one interface: Anthropic, OpenAI, Google, Perplexity. You switch provider mid-conversation and the history, the attachments and your instructions come along. What gets made belongs to the team rather than to one person's account.

  • Thinking depth set per message, not per conversation.
  • Projects that carry their own standing instructions.
  • Files and PDFs read in place.
  • A gallery that collects everything generated.
  • Sharing decided per conversation, and several people writing in one.
  • Administration sets the permitted providers, the depth ceiling and the monthly budget.
In development

TEISENDA Content Engine

Everything the online presence needs, built from the positioning rather than assembled from text blocks: website, landing pages, blog, lead magnets, sales material. It runs on the same foundation as the Studio Engine.

  • Strategy, writing and ongoing management in one place.
  • Business context goes in once. No questionnaires, no workshops.
  • TEISENDA itself ships in the 16 largest languages and builds content in over 140.
  • No date and no booking. Saying so is the point, not an omission.

The engines that follow

The roadmap on /ueber-teisenda names seven engines. That makes <Noun> Engine a naming system rather than two product names, and it is the reason a new module never gets an invented name of its own.

ModuleStatusScope as published
Studio EngineIn betaMulti-provider chat, projects, sharing, cost control
Content EngineIn developmentWebsite, blog, SEO/AEO, landing pages
Data EngineRoadmapEnrichment, live research
Audience EngineRoadmapICP, personas, audiences
Campaign EngineRoadmapAds, campaigns, optimisation
Sales EngineRoadmapOffers, pricing, checkout
Flow EngineRoadmapConversion flows, lead routing

Only the first two carry a status label. The other five are roadmap and must be described as roadmap.

06
Section 06

Graphic language

Our butterfly is built from flat triangular facets. That geometry — not a generic tech aesthetic — is the source of every graphic element we make. Constructed, angular, faceted, in violet with silver-grey.

Facet field · generated from the mark's geometryApproved

Use as a hero ground, a slide divider, a social background, a card texture. Keep it behind a solid panel wherever type sits on top — the facets are a surface, not a stage for copy.

The butterfly field

The particle butterfly on teisenda.com is brand property. 20,000 points trace the Temple Fay butterfly curve; the wingbeat is a travelling wave in the shader. One 14 KB file, no dependencies, no build step. Custom element: plain HTML, React, Vue, Svelte, Astro.

butterfly-field · live, brand configurationApproved

A flat violet panel above means the component switched itself off. It does that under reduced-motion, data-saver, slow connections, and on devices under 4 GB RAM or four cores. Intended: it is decoration, and it yields.

Embedding it

Load once, then place the element. It fills its nearest positioned box, so the parent needs position:relative and a height.

<!-- once per page -->
<script src="https://ci.teisenda.com/effects/butterfly-field.js" defer></script>

<!-- then wherever it belongs -->
<section style="position:relative;min-height:100vh">
  <butterfly-field style="position:absolute;inset:0"
    gradient="#2C1B52,#1E1836,#141020"
    color-deep="#2C1B52"
    color-primary="#8250E6"
    color-lavender="#D8CBF2"></butterfly-field>

  <h1 style="position:relative">Your headline</h1>
</section>

These four colour values are the brand configuration, the only one approved for outward-facing work. Omit gradient and the particles draw over the existing CSS background. Everything else has a default.

AttributeDefaultWhat it does
gradientnoneThree hex values, top to bottom, painted behind the particles. Omit for transparent.
color-deep#3A2C63Body tone. Brand value is #2C1B52.
color-primary#8250E6Wing tone. Already the brand value.
color-lavender#D8CBF2Tip tone. Already the brand value.
count20000 / 7000Particles. The lower figure applies below 900 px viewport width.
intensity0.7Brightness. Lower it until type on top stays readable.
glow0.25Flare on each wingbeat.
size13Point size.
materialize1.8Assembly time in seconds on load. 0 turns it off.
fps30Frame rate.
height0Vertical position in world units. Positive sits higher.
parallaxonparallax="off" drops the mouse response.
force—Overrides the self-disabling above. Use it for a screenshot, never in production.
debug—Logs failures. Without it the effect fails silently.

The files

Three files, nothing zipped. Link the component from here and every site stays on one version.

Component
butterfly-field.js 14.2 KB · the only file you need Download
Worked example
demo.html 2.2 KB · full hero and card, side by side Open it
Reference
README.md 4.9 KB · every option, React and Vue setup Download

Icons

2035 icons from Lucide 1.34.0 under the ISC licence, unmodified. They are not a new decision: the icons already on teisenda.com carry exactly this profile — 24×24, fill:none, stroke-width:2, round caps and joins.

138 of them are grouped for the work we actually do — the Curated chip and the eleven beside it narrow the list to those. Each card copies its SVG source or downloads the file. Machine-readable index: /icons/index.json — name, group and byte size for all 2035.

How to use them

The stroke is currentColor. There is nothing to recolour: set color and the icon follows, which is why an icon never carries a hex value of its own. That only works when the SVG is part of the page — paste the markup, or use the file as a CSS mask. Loaded through <img src> the file is a document of its own, currentColor finds no context and the icon renders black. The grid above uses the mask route, which is why these icons take the colour of their card.

/* the icon takes the colour of its context */
.icon{ width:20px; height:20px; stroke-width:2; }

/* default on dark */
.icon        { color:#B49BF0; }
/* a signal, and only where something needs attention */
.icon--alert { color:#EDA938; }
/* inside a violet button the icon is simply white */
.btn .icon   { color:#fff; }

/* the mask route: an external file that still takes its colour */
.icon--file{ width:20px; height:20px; background-color:currentColor;
             -webkit-mask:url("/icons/brain.svg") center/contain no-repeat;
                     mask:url("/icons/brain.svg") center/contain no-repeat; }
  • One size per surface. 20 px next to body copy, 24 px in a card heading, 16 px inside a dense table. Three sizes in one view is two too many.
  • Keep stroke-width at 2. The whole set is drawn for it. A thinner stroke at 16 px looks refined in isolation and falls apart in a row of icons.
  • An icon labels, it does not decorate. If a heading reads fine without one, leave it out.
  • Decorative icons get aria-hidden="true". An icon that carries meaning on its own gets a label instead.
  • No filled or duotone icons. This set is one weight and stays one weight.
  • No icons from a second library. Two grids and two stroke widths read as two brands.
  • No emoji as icons. Same reason as the flags: every platform draws them differently.
  • No #8250E6 as icon colour on the dark canvas. It clears the 3:1 for a control, and an icon is closer to text — use #B49BF0.

Flags

271 flags as SVG, 249 of them ISO countries and the rest regions and organisations such as the EU, the UN, England and Scotland. Original artwork with the coats of arms intact, in 4:3 and 1:1. From flag-icons 7.5.0 under the MIT licence, unmodified — LICENSE.txt ships with them.

Machine-readable index: /flaggen/index.json — code, name, continent and byte sizes for all 271. The grid is rendered from it.

Every card copies its SVG source and downloads both ratios. Sizes run from 178 bytes for Indonesia to 177 KB for Serbia, which is the whole argument for referencing a file rather than pasting markup: <img src="/flaggen/4x3/de.svg" class="flag" alt=""> keeps a flag one file across every surface. Set weight: 1.9 MB for 4:3, 1.9 MB for 1:1.

The CSS that goes with them

Without this the SVG fills its container. flex:none is a guard: flags sit in flex rows, and a flex item with the default flex-shrink:1 gets squeezed out of ratio when the row runs tight. A square flag such as Switzerland shows it first.

.flag{ height:15px; width:auto; flex:none;
       border-radius:2px; display:inline-block; vertical-align:-3px;
       box-shadow:0 0 0 1px rgba(255,255,255,.14); }

15 px is the production size and the cards above show 26 px so the drawing is legible. The 1 px white glow replaces a border: without it a white flag such as Finland or Poland has no edge on a dark ground, and a stroke inside the artwork would be wrong.

  • No emoji flags. They render as a different picture in every operating system and some platforms show two letters instead.
  • No PNG flags. At 15 px a raster is soft on every second display.
  • Do not redraw a flag by hand. These carry the correct coats of arms and the correct proportions; a simplified copy is wrong the moment it is used above about 20 px.
  • A flag stands for a country, never for a language. A language menu is labelled Deutsch, not with a German flag: Austria and Switzerland speak it too.

Image library

105 images from teisenda.com, two downloads each: original PNG, and WebP at 1600 px. Use WebP in pages and decks, PNG for editing, print and resampling. The filter searches headline, filename and topic, German and English.

Machine-readable index: /bilder/index.json — slug, headline, keywords and byte sizes for all 105. The grid below is rendered from it.

Set weight: 188.8 MB as PNG, 3.1 MB as WebP, 61× lighter. Flat gradients are what PNG handles worst and WebP best. Send the WebP unless somebody needs the PNG. Thumbnails are 400 px WebP, loaded on scroll, 429 KB in total.

Rules

  • Straight edges, flat fills, visible seams. Every facet is one solid tone. No soft gradients inside a facet, no blur.
  • Violet leads, silver-grey supports. The butterfly's left wing is grey for a reason — it gives the violet somewhere to be brightest.
  • Illustration over photography for anything abstract. Photography is for people: real customers, real team, real rooms.
  • Interface screenshots are the strongest asset we have. A real screen beats any illustration of one.
  • No particle field other than butterfly-field. Ours earns its particles by drawing the mark. Star dust, drifting dot clouds and floating sparks draw nothing, and they are the most recognisable generated-website element there is.
  • No glowing orbs, no blurred violet blobs, no aurora gradients.
  • No stock imagery of brains, circuit boards, robots, humanoid assistants or glowing hands touching screens.
  • No AI-generated photography of people presented as our customers or team.
07
Section 07

Voice & writing

This is the section that matters most. We sell content that doesn't read as generated — so our own copy has to survive the test we're asking customers to apply. Right now it doesn't.

Four principles

Practitioner, not vendor

We have run agencies, sat in the seat, missed the deadline. We write like someone who has done the work, not someone who has read about it.

Specific over impressive

"Four AI providers in one interface" beats "cutting-edge multi-model orchestration". Name the tool, the number, the hour.

Say the awkward part

Beta means beta. In development means not built yet. Admitting a limit is the cheapest credibility available to us.

Short, then long

Rhythm is what separates written from generated. Vary sentence length on purpose. Let one sentence run long, then stop.

Tone of voice, measured

Measured, not aspirational. Read off four published pages of teisenda.com — home, both module pages, about. 115 sentences. Adjectives ("clear, confident, human") give a writer nothing to check a draft against; these numbers do.

11
Median words per sentence
33%
Sentences of 8 words or fewer
15%
Sentences carrying a number
30%
Sentences addressing the reader

Mean 13.8 words against a median of 11, range 3 to 75. That gap is the voice. Mean and median sitting on top of each other means levelled-out rhythm, the most reliable tell of generated prose.

The five habits that produce it

Name the thing

"Anthropic, OpenAI, Google und Perplexity", not "leading AI providers". "CRM, CMS, Website, Ads-Kampagnen" rather than "your entire stack". A named thing can be checked; a category cannot.

Describe the reader's day, physically

"Drei Handgriffe, die heute vier Browserfenster und einen Kopiervorgang kosten." The pain is a window count and a paste, not "inefficiency" or "friction".

Second person, present tense, active

"Du schreibst deine Frage in ein Feld." The reader does the verb. Passive constructions and nominalisations are where product copy goes to die.

Say the limit out loud

"Es gibt weder einen Termin noch eine Buchung." And on model names: "sie stünden hier schneller falsch als richtig." Naming what is missing is the cheapest credibility available.

Headline as a sentence, with a full stop

"Zwei Module, ein System." "So arbeitest du damit." The full stop is a house habit and it is what stops a headline reading like a slogan.

Where the site breaks its own rule

"Wachstum, das sich unfair anfühlt" is an abstract selling itself, and 13% of sentences use a dash as a beat. Both are on the list further down this page. The guide describes the target, and the site has not fully arrived.

How we address people

16 site languages. Address form is decided per language, not per brand: nine familiar, seven formal. Order below matches the language menu on teisenda.com.

LanguageAddressNote
DeutschduConsistent across the whole brand, including sales material and the cover note on an invoice. Never switch to Sie mid-funnel.
EnglishyouBritish spelling. "Organisation", "optimise", "colour".
FrançaisvousFrench B2B does not tutoyer a stranger. Informality reads as careless rather than friendly.
EspañoltúPeninsular Spanish. Not usted, not vos.
ItalianoLeiCapitalised, third person. tu belongs to consumer apps; an Italian managing director expects otherwise.
PortuguêsvocêBrazilian Portuguese unless a client specifies European.
PolskiPan / PaniWith the third-person verb. Polish offers no neutral middle ground, and ty to a stranger lands as an insult.
NederlandsjeDutch business dropped the formal register decades ago. Switch to u only when a client writes it first.
RomânădumneavoastrăFormal throughout, including subject lines. tu is for friends.
SvenskaduUniversal since the du-reform of the sixties. ni sounds archaic at best and sarcastic at worst.
ČeštinavyVykání is the business default. Capitalise Vy when writing to one person.
DanskduDe survives in royal address and nowhere else.
Norsk bokmålduAs in Danish and Swedish. De is out of use.
SuomisinäFinland dropped formal address in everyday business. te now reads as distance, not respect.
MagyarÖnFormal, third person. te is for people you already know.
HrvatskiViCapitalised when writing to one person.

The chosen form holds for every asset in that language: ads, landing pages, email, onboarding, invoices. Never mix registers inside one language. Sie in an ad and du on the page reads as nobody being in charge.

The patterns we do not use

Each of these appears on teisenda.com today. Individually they are fine. Together, in the same rhythm, across every section, they are the signature of generated copy — and a reader who has seen a hundred AI landing pages recognises it in about four seconds.

Avoid

"Two modules, one system."

The antithetical pair. Symmetrical, quotable, and the single most over-produced sentence shape in AI copy.

Instead

"Two modules. They share the same brand profile, so what you write in one shows up correctly in the other."

Says what "one system" actually buys the reader.

Avoid

"One works with you, the other works for you."

The mirrored preposition. Elegant, empty, and immediately familiar.

Instead

"In the Studio Engine you're in the chat. The Content Engine runs without you and hands back finished pages."

Two concrete situations instead of one clever line.

Avoid

"Growth that feels unfair."

Borrowed from a decade of SaaS taglines. It also promises something we can't evidence.

Instead

"Marketing output that used to need three freelancers."

A claim a managing director can price.

Avoid

„Zu viele Werkzeuge, zu wenig Zeit."

German, from the current homepage. The three-beat parallel construction — same shape, same length, same rhythm — used in every section heading.

Instead

„Sieben Tools, ein Marketer, und das Whitepaper liegt seit März rum."

Same insight, but it sounds like it came from a specific person's week.

  • The rule of three as a default rhythm. "Faster, cheaper, better." Use two items, or four. Break the beat.
  • "Not X, but Y" as a sentence engine. Once per page is a choice. Four times is a tell.
  • The em dash as a rhythm device — dropped in every third sentence — for cadence rather than grammar.
  • Uniform sentence length. If every sentence in a paragraph is 12–18 words, a machine wrote it or a machine could have.
  • Opening on "In today's…", "Whether you're…", "Imagine…" or a rhetorical question.
  • Abstract nouns doing the selling: seamless, holistic, powerful, robust, cutting-edge, game-changing, effortless, unlock, elevate, empower, revolutionise, leverage, supercharge.
  • Claiming outcomes we cannot measure. No "10× your pipeline". If we haven't measured it with a customer, we don't print it.

Words

Use

set up · run · hand back · in your tone of voice · brand profile · module · agent · finished page · in beta · in development · mid-market · in five languages · in under three hours

Don't use

solution (unqualified) · seamless · holistic · cutting-edge · AI-powered · next-generation · game-changer · unlock · elevate · supercharge · unfair advantage · 10× · effortless · revolutionary

One exception worth defending: "Growth Solution" is in the company name. Leave it there. Do not let the word spread into body copy.

If a sentence could sit on any competitor's homepage, it isn't ours yet.

Before you publish

  • Read it aloud. Anything you'd never say to a customer in a meeting comes out.
  • Count the em dashes. More than one per 150 words, cut.
  • Check the sentence lengths in one paragraph. If they're all the same, rewrite two.
  • Find the specific detail. If there isn't one — a number, a tool name, a real situation — the piece isn't finished.
08
Section 08

In use

The same system across the places it actually shows up. Dark canvas for the product and the web, paper for documents and print.

Website header and hero

Your marketing, set up in an afternoon.

Four AI providers in one interface, a brand profile both modules read from, and finished pages in five languages. The Studio Engine is in beta now.

Hero at 600 with tight tracking, deck at 400, one violet button. No particles, no gradient text, no mid-sentence colour change.

Social key visual

Seven tools, one marketer, and the whitepaper has been sitting there since March.

TEISENDAteisenda.com

Email signature

TEISENDA
Emma Woelk
Co-founder · TEISENDA GmbH
teisenda.com · Hedingen, Switzerland

Primary logo, Instrument Sans, no image banner, no quote, no social icon row.

Slide

Deck · section divider
02 · The problem
Mid-market marketing is a stack of tools nobody has time to connect.
09
Section 09

Handoff

Paste this into the stylesheet and the identity is enforced in code rather than in review comments.

/* TEISENDA — brand tokens v1.0 */
:root{
  /* brand — lead with these */
  --v-700:#432B78; /* Teisenda Violet — the lead */
  --v-600:#6A4394; --v-500:#765BA3;

  /* interface only — never the face of the brand */
  --v-400:#8250E6; /* buttons, links, focus */
  --v-300:#B49BF0; /* violet type on dark */
  --v-100:#D8CBF2; --v-050:#F2EDFB;

  /* grounds */
  --canvas:#141020; --surface:#1E1836; --raised:#2A2145; --dark-border:#3A3255;
  --paper:#FBFAFD; --ink:#1D1D1B;

  /* signal */
  --amber:#EDA938; --amber-ink:#8A5B08; --jade:#1E7A5A; --critical:#B3323A;

  /* type */
  --font:"Instrument Sans", system-ui, sans-serif;  /* one family, two registers */
  --track-hero:-.042em; --track-head:-.034em; --track-sub:-.012em; --track-body:0;
}

Interface chrome: the scrollbar

The browser draws the scrollbar, and left alone it draws grey. On #141020 that grey belongs to nobody. Every TEISENDA surface sets it, this page included.

/* Two syntaxes, because both are needed. scrollbar-color covers Firefox and
   Chrome from 121; ::-webkit-scrollbar covers the rest. Where an engine
   understands scrollbar-color it ignores the WebKit rules. Both routes reach
   the same violet, and scrollbar-color inherits, so it applies in every
   nested scroll area without further work. */
html{ scrollbar-color: #8250E6 #1E1836; }

::-webkit-scrollbar       { width:13px; height:13px; }
::-webkit-scrollbar-track { background:#1E1836; }
::-webkit-scrollbar-thumb { background:#8250E6; border-radius:99px;
                            border:3px solid #1E1836; }
::-webkit-scrollbar-thumb:hover { background:#B49BF0; }
::-webkit-scrollbar-corner{ background:#1E1836; }

Thumb is #8250E6, not the logo violet. Against the canvas #432B78 reaches 1.63:1 and disappears; #8250E6 reaches 3.75:1 and clears the 3:1 WCAG asks of an interface control. #8250E6 is barred as text on dark and correct as a control.

Any panel with its own scroll area inherits the colour and only needs scrollbar-width: thin if a narrower bar suits it better.

Type

Self-host as woff2 under /fonts/, replacing the current Space Grotesk and Inter files. Weights 400, 500, 600, 700 plus italic 400. Subset latin + latin-ext. Point --font-display and --font-body at it, apply the tracking variables to the heading levels.