Template Blocks


Icons

We reduce to the max.
A free opensource gallery from Phosphor Icons, adapted to the Energyology System.

All the Icons are in the Download Area


Buttons

Primary and Secondary

Container 900px. Label 18px, padding 16px on 40px, minimum width 200px. Buttons sit left on the body text axis.

Primary and Secondary

Container 768px. Size and spacing identical to desktop.

Primary and Secondary

Container fluid. Buttons go full width, label drops to 16px, padding to 14px on 24px.

Rules

  • Primary Outline in the signal colour. One per screen or per message. On hover it fills with Kline Blue in both modes and the label turns off white.
  • Secondary Outline in the text colour. It fills with the text colour on hover and the label takes the background colour.
  • Shape No corner radius anywhere. Both buttons keep an identical box height.
  • Hover Guarded behind a pointer query, so touch devices never get a stuck hover state.
  • Focus Visible outline on keyboard focus only, 2px with 3px offset. Never removed.
  • Ripple Web only, on pointer and on keyboard activation. It has no meaning in mail.
  • Label Names the action. It never wraps, and never carries a full stop.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.
  • Source of truth Custom properties on the container carry both modes. Never fork this file into two colour variants.

Colour Tokens

TokenLightDark
Background#FAFAFA#141414
Text#141414#FAFAFA
Signal, primary outline#002FA7#6B93FF
Signal fill on hover#002FA7#002FA7
Label on fill#FAFAFA#FAFAFA
Ripple, primary#141414#FAFAFA
Ripple, secondary#FAFAFA#141414

Geometry

TokenDesktop and TabletMobile
Label size18px16px
Label weight, web400400
Label weight, mail700700
Padding16px on 40px14px on 24px
Minimum width200pxfull width
Border1px1px
Corner radius00
Gap between buttons32px32px

Production CSS, web only

.rib-btn {
  position: relative;
  overflow: hidden;
  background: transparent;
  padding: 16px 40px;
  min-width: 200px;
  font-family: 'Geist', Helvetica, Arial, sans-serif;
  font-size: 18px;
  line-height: 1.6;
  letter-spacing: 0.014em;
  font-weight: 400;
  border-radius: 0;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.rib-btn .rib-label { position: relative; z-index: 2; pointer-events: none; }
.rib-btn .rib-ripple {
  position: absolute;
  border-radius: 50%;
  transform: scale(0);
  animation: ribRipple 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  pointer-events: none;
  z-index: 1;
  opacity: 1;
  transition: opacity 0.3s ease;
}
@keyframes ribRipple { to { transform: scale(3.5); } }

.rib-btn-primary { border: 1px solid #002FA7; color: #002FA7; }
.rib-btn-primary .rib-ripple { background-color: #141414; }
.rib-btn-primary:focus-visible { outline: 2px solid #002FA7; outline-offset: 3px; }
@media (hover: hover) and (pointer: fine) {
  .rib-btn-primary:hover { background: #002FA7; border-color: #002FA7; color: #FAFAFA; }
}
.rib-btn-primary.is-pressed .rib-label { color: #FAFAFA; }

.rib-btn-secondary { border: 1px solid #141414; color: #141414; }
.rib-btn-secondary .rib-ripple { background-color: #FAFAFA; }
.rib-btn-secondary:focus-visible { outline: 2px solid #141414; outline-offset: 3px; }
@media (hover: hover) and (pointer: fine) {
  .rib-btn-secondary:hover { background: #141414; border-color: #141414; color: #FAFAFA; }
}
.rib-btn-secondary.is-pressed .rib-label { color: #141414; }

@media (max-width: 767px) {
  .rib-btn { width: 100%; font-size: 16px; padding: 14px 24px; }
}
.rib-btn {
  position: relative;
  overflow: hidden;
  background: transparent;
  padding: 16px 40px;
  min-width: 200px;
  font-family: 'Geist', Helvetica, Arial, sans-serif;
  font-size: 18px;
  line-height: 1.6;
  letter-spacing: 0.014em;
  font-weight: 400;
  border-radius: 0;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.rib-btn .rib-label { position: relative; z-index: 2; pointer-events: none; }
.rib-btn .rib-ripple {
  position: absolute;
  border-radius: 50%;
  transform: scale(0);
  animation: ribRipple 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  pointer-events: none;
  z-index: 1;
  opacity: 1;
  transition: opacity 0.3s ease;
}
@keyframes ribRipple { to { transform: scale(3.5); } }

.rib-btn-primary { border: 1px solid #6B93FF; color: #6B93FF; }
.rib-btn-primary .rib-ripple { background-color: #FAFAFA; }
.rib-btn-primary:focus-visible { outline: 2px solid #6B93FF; outline-offset: 3px; }
@media (hover: hover) and (pointer: fine) {
  .rib-btn-primary:hover { background: #002FA7; border-color: #002FA7; color: #FAFAFA; }
}
.rib-btn-primary.is-pressed .rib-label { color: #141414; }

.rib-btn-secondary { border: 1px solid #FAFAFA; color: #FAFAFA; }
.rib-btn-secondary .rib-ripple { background-color: #141414; }
.rib-btn-secondary:focus-visible { outline: 2px solid #FAFAFA; outline-offset: 3px; }
@media (hover: hover) and (pointer: fine) {
  .rib-btn-secondary:hover { background: #FAFAFA; border-color: #FAFAFA; color: #141414; }
}
.rib-btn-secondary.is-pressed .rib-label { color: #FAFAFA; }

@media (max-width: 767px) {
  .rib-btn { width: 100%; font-size: 16px; padding: 14px 24px; }
}

Production HTML, mail

Mail carries no button element, no hover, no focus ring and no ripple. The mail button is a table with a bordered cell and a block level link. The label runs bold, because Arial has no reliable medium weight.

<table role="presentation" cellpadding="0" cellspacing="0" border="0">
  <tr>
    <td align="center" style="border:1px solid #002FA7; background-color:#FAFAFA;">
      <a href="{{action_url}}" style="display:inline-block; min-width:200px; padding:16px 40px; font-family:Arial,Helvetica,sans-serif; font-size:18px; line-height:24px; font-weight:bold; color:#002FA7; text-decoration:none;">Primary Action</a>
    </td>
  </tr>
</table>

<table role="presentation" cellpadding="0" cellspacing="0" border="0">
  <tr>
    <td align="center" style="border:1px solid #141414; background-color:#FAFAFA;">
      <a href="{{secondary_url}}" style="display:inline-block; min-width:200px; padding:16px 40px; font-family:Arial,Helvetica,sans-serif; font-size:18px; line-height:24px; font-weight:bold; color:#141414; text-decoration:none;">Secondary Action</a>
    </td>
  </tr>
</table>
<table role="presentation" cellpadding="0" cellspacing="0" border="0">
  <tr>
    <td align="center" style="border:1px solid #6B93FF; background-color:#141414;">
      <a href="{{action_url}}" style="display:inline-block; min-width:200px; padding:16px 40px; font-family:Arial,Helvetica,sans-serif; font-size:18px; line-height:24px; font-weight:bold; color:#6B93FF; text-decoration:none;">Primary Action</a>
    </td>
  </tr>
</table>

<table role="presentation" cellpadding="0" cellspacing="0" border="0">
  <tr>
    <td align="center" style="border:1px solid #FAFAFA; background-color:#141414;">
      <a href="{{secondary_url}}" style="display:inline-block; min-width:200px; padding:16px 40px; font-family:Arial,Helvetica,sans-serif; font-size:18px; line-height:24px; font-weight:bold; color:#FAFAFA; text-decoration:none;">Secondary Action</a>
    </td>
  </tr>
</table>

CTA & Button

Variant 1, stacked

Text and action centred, action below the text. Use when the card stands alone.

Passt dir dieser Termin?

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.

Variant 2, two columns

Text left, action right on the same line. Use inside a longer message.

Passt dir dieser Termin?

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.

Variant 1, stacked

Identical to desktop at 768px.

Passt dir dieser Termin?

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.

Variant 2, two columns

Still two columns at 768px. Below that the layout collapses.

Passt dir dieser Termin?

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.

Single variant

Both variants collapse into this. Text left aligned, action full width, padding 24px.

Passt dir dieser Termin?

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.

Rules

  • Purpose One card carries one action. A second action turns the card into a decision, and a decision belongs in the appointment block, not here.
  • Border 1px in the signal colour. This is the only component where the signal colour outlines a whole surface.
  • Glow Web only. Mail clients drop box shadow, so the mail card carries the border alone.
  • Layout Stacked when the card stands alone, two columns when it sits inside a longer message. Below 768px both collapse to stacked and left aligned.
  • Button Outline in the signal colour, fills with Kline Blue on hover in both modes. Identical to the primary button of the button component.
  • Sub line States the deadline in plain numbers. It is the only place in the message where the deadline appears twice, and both places must agree.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.
  • Source of truth Custom properties on the container carry both modes. Never fork this file into two colour variants.

Colour Tokens

TokenLightDark
Background#FAFAFA#141414
Headline#141414#FAFAFA
Sub line#5A5A5A#9CA3AF
Card border, button outline#002FA7#6B93FF
Button fill on hover#002FA7#002FA7
Label on fill#FAFAFA#FAFAFA
Glow opacity0.18 and 0.100.35 and 0.20

Geometry

TokenDesktopTabletMobile
Stage width900px768pxfluid
Card padding40px40px24px
Headline24px on 30px24px on 30px24px on 30px
Sub line16px on 26px16px on 26px16px on 26px
Text to button32px32px32px
Column gap40px40pxcollapsed
Button width200px minimum200px minimumfull width
Corner radius000

Production CSS, web only

.rib-card {
  background-color: #FAFAFA;
  border: 1px solid #002FA7;
  border-radius: 0;
  padding: 40px;
  box-shadow: 0 4px 20px rgba(0, 47, 167, 0.18), 0 0 40px rgba(0, 47, 167, 0.10);
}
.rib-card-h { margin: 0 0 16px 0; font-size: 24px; font-weight: 600; color: #141414; }
.rib-card-p { margin: 0; font-size: 16px; line-height: 1.6; color: #5A5A5A; }

.rib-cta {
  background: transparent;
  border: 1px solid #002FA7;
  color: #002FA7;
  border-radius: 0;
  padding: 16px 40px;
  min-width: 200px;
  font-size: 18px;
  line-height: 1.6;
  letter-spacing: 0.014em;
  font-weight: 400;
  cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
@media (hover: hover) and (pointer: fine) {
  .rib-cta:hover { background: #002FA7; border-color: #002FA7; color: #FAFAFA; }
}
.rib-cta:focus-visible { outline: 2px solid #002FA7; outline-offset: 3px; }
.rib-card {
  background-color: #141414;
  border: 1px solid #6B93FF;
  border-radius: 0;
  padding: 40px;
  box-shadow: 0 4px 20px rgba(107, 147, 255, 0.35), 0 0 40px rgba(107, 147, 255, 0.20);
}
.rib-card-h { margin: 0 0 16px 0; font-size: 24px; font-weight: 600; color: #FAFAFA; }
.rib-card-p { margin: 0; font-size: 16px; line-height: 1.6; color: #9CA3AF; }

.rib-cta {
  background: transparent;
  border: 1px solid #6B93FF;
  color: #6B93FF;
  border-radius: 0;
  padding: 16px 40px;
  min-width: 200px;
  font-size: 18px;
  line-height: 1.6;
  letter-spacing: 0.014em;
  font-weight: 400;
  cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
@media (hover: hover) and (pointer: fine) {
  .rib-cta:hover { background: #002FA7; border-color: #002FA7; color: #FAFAFA; }
}
.rib-cta:focus-visible { outline: 2px solid #6B93FF; outline-offset: 3px; }

Production HTML, mail

Mail carries no box shadow and no hover. The card is a bordered table, the button a bordered cell with a block level link. The glow is dropped, the border stays.

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#FAFAFA;">
  <tr>
    <td align="center" style="padding:0 24px;">
      <table role="presentation" width="552" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:552px; max-width:552px; border:1px solid #002FA7;">
        <tr>
          <td align="center" class="rib-cell" style="padding:40px;">
            <p style="margin:0 0 16px 0; font-family:Arial,Helvetica,sans-serif; font-size:24px; line-height:30px; font-weight:bold; color:#141414;">Passt dir dieser Termin?</p>
            <p style="margin:0 0 32px 0; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:26px; color:#5A5A5A;">Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.</p>
            <table role="presentation" cellpadding="0" cellspacing="0" border="0" align="center">
              <tr>
                <td align="center" style="border:1px solid #002FA7;">
                  <a href="{{confirm_url}}" style="display:inline-block; min-width:200px; padding:16px 40px; font-family:Arial,Helvetica,sans-serif; font-size:18px; line-height:24px; font-weight:bold; color:#002FA7; text-decoration:none;">Termin bestätigen</a>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#FAFAFA;">
  <tr>
    <td align="center" style="padding:0 24px;">
      <table role="presentation" width="552" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:552px; max-width:552px; border:1px solid #6B93FF;">
        <tr>
          <td align="center" class="rib-cell" style="padding:40px;">
            <p style="margin:0 0 16px 0; font-family:Arial,Helvetica,sans-serif; font-size:24px; line-height:30px; font-weight:bold; color:#FAFAFA;">Passt dir dieser Termin?</p>
            <p style="margin:0 0 32px 0; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:26px; color:#9CA3AF;">Du hast 48 Stunden Zeit, deinen Termin zu bestätigen.</p>
            <table role="presentation" cellpadding="0" cellspacing="0" border="0" align="center">
              <tr>
                <td align="center" style="border:1px solid #6B93FF;">
                  <a href="{{confirm_url}}" style="display:inline-block; min-width:200px; padding:16px 40px; font-family:Arial,Helvetica,sans-serif; font-size:18px; line-height:24px; font-weight:bold; color:#6B93FF; text-decoration:none;">Termin bestätigen</a>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>

CTA & Link

Variant 1, inside running text

Container 900px. Text 16px on 26px. The link sits in the sentence and keeps the reading flow.

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen. Bitte lies dir unsere Stornierungsbedingungen sorgfältig durch, bevor du fortfährst. Bei Fragen steht dir unser Support Team jederzeit zur Verfügung.

Variant 2, at the end of the text

The link closes the paragraph and carries no full stop after it.

Wir haben unsere Plattform aktualisiert, um dir ein noch besseres Erlebnis zu bieten. Entdecke alle neuen Features im aktuellen Changelog. Jetzt mehr erfahren

Variant 1, inside running text

Container 768px. Type and spacing identical to desktop.

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen. Bitte lies dir unsere Stornierungsbedingungen sorgfältig durch, bevor du fortfährst. Bei Fragen steht dir unser Support Team jederzeit zur Verfügung.

Variant 2, at the end of the text

The link closes the paragraph and carries no full stop after it.

Wir haben unsere Plattform aktualisiert, um dir ein noch besseres Erlebnis zu bieten. Entdecke alle neuen Features im aktuellen Changelog. Jetzt mehr erfahren

Variant 1, inside running text

Container fluid, padding 24px. Sentences are shortened so the link does not land alone on the last line.

Du hast 48 Stunden Zeit, deinen Termin zu bestätigen. Bitte lies dir unsere Stornierungsbedingungen sorgfältig durch, bevor du fortfährst.

Variant 2, at the end of the text

The link closes the paragraph and carries no full stop after it.

Entdecke alle neuen Features im aktuellen Changelog. Jetzt mehr erfahren

Usage Guidelines

  • Inline link or button An inline link carries a secondary action, a reference or a legal document. The primary action of a message is always a button. A message has one primary action, never two.
  • Placement Either inside the sentence or appended to the end of a thought. Never as a standalone line, that is a button.
  • Colour Signal colour of the active mode. In dark mode the signal is the brightened blue, because Kline Blue on a dark ground is unreadable.
  • Hover Both modes move to the primary text colour. The underline follows the text colour, the link never loses its underline.
  • Underline Mandatory. Colour alone is not a link marker and fails for readers who cannot separate the two hues.
  • Label Names its destination. Click here and read more are not labels.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.
  • Source of truth Custom properties on the container carry both modes. Never fork this file into two colour variants.

Colour Tokens

TokenLightDark
Background#FAFAFA#141414
Body text#141414#FAFAFA
Secondary text#5A5A5A#9CA3AF
Rule#E1E1E1#374151
Link#002FA7#6B93FF
Link hover#141414#FAFAFA

Geometry

TokenWebMail
Text size16px16px
Line height26px26px
Link weight700700
Underline1px, offset 4pxclient default
Hovertext colournot available
Corner radius00

Production CSS, web only

.rib-link {
  color: #002FA7;
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-thickness: 1px;
  font-weight: 500;
  transition: color 0.2s ease, text-decoration-color 0.2s ease;
}
.rib-link:hover {
  color: #141414;
  text-decoration-color: #141414;
}
.rib-link {
  color: #6B93FF;
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-thickness: 1px;
  font-weight: 500;
  transition: color 0.2s ease, text-decoration-color 0.2s ease;
}
.rib-link:hover {
  color: #FAFAFA;
  text-decoration-color: #FAFAFA;
}

Production HTML, mail

Mail clients ignore underline offset, underline thickness and hover. The mail version therefore carries colour, underline and bold weight only, all inline.

<p style="margin:0; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:26px; color:#141414;">
  Bitte lies dir unsere
  <a href="https://rico-brunner.com/agb" style="color:#002FA7; text-decoration:underline; font-weight:bold;">Stornierungsbedingungen</a>
  sorgfältig durch.
</p>
<p style="margin:0; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:26px; color:#FAFAFA;">
  Bitte lies dir unsere
  <a href="https://rico-brunner.com/agb" style="color:#6B93FF; text-decoration:underline; font-weight:bold;">Stornierungsbedingungen</a>
  sorgfältig durch.
</p>

Lists & Bulletpoints

Lists and Bullet Points

Table based list at 900px. Bullet cell 20px, item text 16px on 24px.

Lists and Bullet Points

Fluid container up to 768px. Bullet cell and type stay identical to desktop.

Lists and Bullet Points

Fluid container. Card padding drops to 24px. The bullet cell does not shrink.

IT Implementation Rule

Standard <ul> and <li> tags render unpredictably across Outlook and mobile clients. Bullet lists are built as tables with a dedicated bullet cell.

  • Bullet cell width Fixed at 20px in every viewport. Shrinking it breaks the text axis on the second line.
  • Bullet colour Signal colour of the active mode. This is the only place the signal colour appears in a list.
  • Item spacing 8px bottom padding per row, zero on the last row.
  • Vertical alignment Top on both cells, so multi line items keep the bullet at the first line.
  • Nesting Not supported. A second level means the list should be split into two blocks with a heading.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.
  • Source of truth Custom properties on the container carry both modes. Never fork this file into two colour variants.

Colour Tokens

TokenLightDark
Background#FAFAFA#141414
Item text#141414#FAFAFA
Secondary text#5A5A5A#9CA3AF
Rule#E1E1E1#374151
Signal, bullet and card border#002FA7#6B93FF

Geometry

TokenDesktopTabletMobile
Card width900px768pxfluid
Card padding40px40px24px
Bullet cell width20px20px20px
Bullet size20px20px20px
Item size16px16px16px
Item line height24px24px24px
Row spacing8px8px8px
Corner radius000

Production HTML

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="width:100%;">
  <tr>
    <td width="20" style="width:20px; vertical-align:top; color:#002FA7; font-family:Arial,Helvetica,sans-serif; font-size:20px; line-height:24px;">&bull;</td>
    <td style="padding-bottom:8px; color:#141414; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:24px;">List item text goes here.</td>
  </tr>
  <tr>
    <td width="20" style="width:20px; vertical-align:top; color:#002FA7; font-family:Arial,Helvetica,sans-serif; font-size:20px; line-height:24px;">&bull;</td>
    <td style="padding-bottom:0; color:#141414; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:24px;">Last item carries no bottom padding.</td>
  </tr>
</table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="width:100%;">
  <tr>
    <td width="20" style="width:20px; vertical-align:top; color:#6B93FF; font-family:Arial,Helvetica,sans-serif; font-size:20px; line-height:24px;">&bull;</td>
    <td style="padding-bottom:8px; color:#FAFAFA; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:24px;">List item text goes here.</td>
  </tr>
  <tr>
    <td width="20" style="width:20px; vertical-align:top; color:#6B93FF; font-family:Arial,Helvetica,sans-serif; font-size:20px; line-height:24px;">&bull;</td>
    <td style="padding-bottom:0; color:#FAFAFA; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:24px;">Last item carries no bottom padding.</td>
  </tr>
</table>

Header Email

Header Block

Fixed container at 600px. Logo 220px. Title 48px on 53px.

Header Block

Fluid container up to 600px. Logo 200px. Title 40px on 44px.

Header Block

Fluid container. Logo 160px. Title 36px on 40px.

Rules

  • Logo Black positive in light mode, white negative in dark mode. Two separate hosted assets, never a CSS filter applied to one file. Never on a contrasting patch, never inside a box.
  • Alignment Logo and title centred on all viewports.
  • Colors Primary text on background, nothing else. No blue in the header.
  • Font Arial is the sending font. Geist is not available in mail clients.
  • Spacing 32px between logo and title on desktop and tablet, 24px on mobile.
  • Alt Text Rico Brunner. The header must stay readable when images are blocked.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.
  • Source of truth Custom properties on the container carry both modes. Never fork this file into two colour variants.

Colour Tokens

TokenLightDark
Background#FAFAFA#141414
Primary text#141414#FAFAFA
Secondary text#5A5A5A#9CA3AF
Rule#E1E1E1#374151
Logo assetblack positivewhite negative
Font smoothingdefaultantialiased

Geometry

TokenDesktopTabletMobile
Container600pxfluidfluid
Logo width220px200px160px
Logo min width120px120px120px
Title size48px40px36px
Title line height53px44px40px
Title weight700700700
Padding top48px48px32px
Gap32px32px24px
Padding bottom40px40px32px
Side padding24px24px20px

Production HTML

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#FAFAFA;">
  <tr>
    <td align="center" style="padding:0;">
      <table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:600px; max-width:600px;">
        <tr>
          <td align="center" class="rib-logo-cell" style="padding:48px 24px 0 24px;">
            <img src="https://yourdomain.com/assets/rib-logo-black.png"
                 alt="Rico Brunner"
                 width="220"
                 class="rib-logo"
                 style="display:block; width:220px; max-width:220px; height:auto; border:0; outline:none; text-decoration:none;">
          </td>
        </tr>
        <tr>
          <td height="32" style="height:32px; line-height:32px; font-size:0;" class="rib-gap">&nbsp;</td>
        </tr>
        <tr>
          <td align="center" class="rib-title-cell" style="padding:0 24px 40px 24px;">
            <h1 class="rib-title" style="margin:0; font-family:Arial,Helvetica,sans-serif; font-size:48px; line-height:53px; font-weight:700; letter-spacing:0.7px; color:#141414;">
              Dein Termin steht
            </h1>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#FAFAFA;">
  <tr>
    <td align="center" style="padding:0;">
      <table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:600px; max-width:600px;">
        <tr>
          <td align="center" class="rib-logo-cell" style="padding:48px 24px 0 24px;">
            <img src="https://yourdomain.com/assets/rib-logo-white.png"
                 alt="Rico Brunner"
                 width="220"
                 class="rib-logo"
                 style="display:block; width:220px; max-width:220px; height:auto; border:0; outline:none; text-decoration:none;">
          </td>
        </tr>
        <tr>
          <td height="32" style="height:32px; line-height:32px; font-size:0;" class="rib-gap">&nbsp;</td>
        </tr>
        <tr>
          <td align="center" class="rib-title-cell" style="padding:0 24px 40px 24px;">
            <h1 class="rib-title" style="margin:0; font-family:Arial,Helvetica,sans-serif; font-size:48px; line-height:53px; font-weight:700; letter-spacing:0.7px; color:#FAFAFA;">
              Dein Termin steht
            </h1>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>

Media Queries

@media only screen and (max-width:620px) {
  .rib-container { width:100% !important; max-width:100% !important; }
  .rib-logo { width:200px !important; max-width:200px !important; }
  .rib-title { font-size:40px !important; line-height:44px !important; }
}
@media only screen and (max-width:480px) {
  .rib-logo-cell { padding:32px 20px 0 20px !important; }
  .rib-logo { width:160px !important; max-width:160px !important; }
  .rib-gap { height:24px !important; line-height:24px !important; }
  .rib-title-cell { padding:0 20px 32px 20px !important; }
  .rib-title { font-size:36px !important; line-height:40px !important; letter-spacing:0.5px !important; }
}

Footer Email

Footer and Legal Information

Fixed container at 600px. Left aligned on the body text axis. Body 14px on 22px.

Footer and Legal Information

Fluid container up to 600px. Padding and type stay identical to desktop.

Footer and Legal Information

Fluid container. Side padding drops to 20px. Type size stays at 14px.

Mandatory Content

  • Company Details Legal entity name, full postal address, phone number and a direct contact address. Rico Brunner AG, Zürcherstrasse 170, CH-9014 St. Gallen.
  • Legal Links Inline links to AGB and Datenschutzerklärung, underlined, in the link colour of the active mode.
  • Reason for Receipt One line stating why this message was sent. Not optional in Swiss practice.
  • Unsubscribe Explicit opt out for marketing mail, rendered as a link, never as an image.
  • Alignment Strict left alignment on the vertical body text axis defined in the Web and Email Grid System TDS.
  • Type Arial 14px on 22px. Never smaller. Legal text that cannot be read is not a disclosure.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.

Token Table

TokenLightDark
Background#FAFAFA#141414
Primary text#141414#FAFAFA
Secondary text#5C5C5C#9CA3AF
Rule#E1E1E1#374151
Link#002FA7#6B93FF

Spacing

TokenDesktopTabletMobile
Container600pxfluidfluid
Side padding24px24px20px
Rule to address32px32px32px
Address to links24px24px24px
Links to reason24px24px24px
Padding bottom40px40px32px
Body size14px14px14px
Body line height22px22px22px

Production HTML Light Mode

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#FAFAFA;">
  <tr>
    <td align="center" style="padding:0;">
      <table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:600px; max-width:600px;">
        <tr>
          <td class="rib-rule" style="padding:0 24px; font-size:0; line-height:0;">
            <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
              <tr><td height="1" style="height:1px; line-height:1px; font-size:0; background-color:#E1E1E1;">&nbsp;</td></tr>
            </table>
          </td>
        </tr>
        <tr>
          <td align="left" class="rib-cell" style="padding:32px 24px 0 24px; font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#5C5C5C;">
            <strong style="color:#141414; font-weight:700;">Rico Brunner AG</strong><br>
            Zürcherstrasse 170<br>
            CH-9014 St. Gallen<br>
            Tel: +41 (0)71 220 90 64<br>
            E-Mail: <a href="mailto:[email protected]" style="color:#002FA7; text-decoration:underline;">[email protected]</a>
          </td>
        </tr>
        <tr>
          <td align="left" class="rib-cell" style="padding:24px 24px 0 24px; font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#5C5C5C;">
            <a href="https://rico-brunner.com/agb" style="color:#002FA7; text-decoration:underline;">AGB</a>
            <span style="color:#5C5C5C; padding:0 8px;">|</span>
            <a href="https://rico-brunner.com/datenschutz" style="color:#002FA7; text-decoration:underline;">Datenschutzerklärung</a>
          </td>
        </tr>
        <tr>
          <td align="left" class="rib-cell" style="padding:24px 24px 40px 24px; font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#5C5C5C;">
            Du erhältst diese E-Mail als Bestätigung deiner Anfrage.<br>
            <a href="{unsubscribe_url}" style="color:#002FA7; text-decoration:underline;">Marketing-Mails abmelden</a>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>

Production HTML Dark Mode

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#141414;">
  <tr>
    <td align="center" style="padding:0;">
      <table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:600px; max-width:600px;">
        <tr>
          <td class="rib-rule" style="padding:0 24px; font-size:0; line-height:0;">
            <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
              <tr><td height="1" style="height:1px; line-height:1px; font-size:0; background-color:#374151;">&nbsp;</td></tr>
            </table>
          </td>
        </tr>
        <tr>
          <td align="left" class="rib-cell" style="padding:32px 24px 0 24px; font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#9CA3AF;">
            <strong style="color:#FAFAFA; font-weight:700;">Rico Brunner AG</strong><br>
            Zürcherstrasse 170<br>
            CH-9014 St. Gallen<br>
            Tel: +41 (0)71 220 90 64<br>
            E-Mail: <a href="mailto:[email protected]" style="color:#6B93FF; text-decoration:underline;">[email protected]</a>
          </td>
        </tr>
        <tr>
          <td align="left" class="rib-cell" style="padding:24px 24px 0 24px; font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#9CA3AF;">
            <a href="https://rico-brunner.com/agb" style="color:#6B93FF; text-decoration:underline;">AGB</a>
            <span style="color:#9CA3AF; padding:0 8px;">|</span>
            <a href="https://rico-brunner.com/datenschutz" style="color:#6B93FF; text-decoration:underline;">Datenschutzerklärung</a>
          </td>
        </tr>
        <tr>
          <td align="left" class="rib-cell" style="padding:24px 24px 40px 24px; font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#9CA3AF;">
            Du erhältst diese E-Mail als Bestätigung deiner Anfrage.<br>
            <a href="{unsubscribe_url}" style="color:#6B93FF; text-decoration:underline;">Marketing-Mails abmelden</a>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>

Media Queries

@media only screen and (max-width:620px) {
  .rib-container { width:100% !important; max-width:100% !important; }
}
@media only screen and (max-width:480px) {
  .rib-rule { padding:0 20px !important; }
  .rib-cell { padding-left:20px !important; padding-right:20px !important; }
  .rib-cell:last-child { padding-bottom:32px !important; }
}

Appointement Bubble Email

Appointment Block

Fixed container at 600px. Bubble 172px on the left, details on the right, actions below.

Appointment Block

Fluid container up to 600px. Layout and type identical to desktop.

Appointment Block

Everything stacks. Bubble stays 172px, buttons go full width, title drops to 20px.

Rules

  • Bubble Taken over unchanged. 172px outer circle, 2px dotted ring in link colour, 1px solid inner ring in text colour, three lines centred. Weekday muted, date in text colour, time in link colour.
  • Buttons Rectangular. No border radius anywhere in the block. Primary is a solid fill in text colour, secondary is a 1px outline in text colour. Both keep an identical box height.
  • Chips Rectangular for the same reason. Format chip carries the link colour, duration chip stays neutral.
  • Alignment Left aligned on the body text axis. The bubble does not centre on mobile.
  • Signal colour The link colour appears exactly twice, on the time and on the format chip. Adding a third use flattens the hierarchy.
  • Fine print 14px on 22px, directly below the actions, never above them.
  • Scope All styles are namespaced under the container id. Nothing leaks into the host page.

Colour Tokens

TokenLightDark
Background#FAFAFA#141414
Card border#E1E1E1#374151
Primary text#141414#FAFAFA
Secondary text#5C5C5C#9CA3AF
Signal#002FA7#6B93FF
Label on fill#FAFAFA#141414

Geometry

TokenDesktopTabletMobile
Container600pxfluidfluid
Card padding32px32px24px on 20px
Bubble outer172px172px172px
Bubble inner152px152px152px
Bubble ring2px dotted2px dotted2px dotted
Bubble to details24px24px24px stacked
Title size24px24px20px
Button padding16px on 32px16px on 32px16px full width
Button radius000
Details to actions32px32px32px
Actions to fine print24px24px24px

Merge Variables

VariableExample
weekdayDIENSTAG
date25. August 2026
time08:30 Uhr
appointment_typePersönlicher Termin
formatLive Beratung
duration60 Minuten
hostRico Brunner
guestSilv Graf
confirm_urltokenised, single use
cancel_urltokenised, single use

Production HTML Light Mode

<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#FAFAFA;">
  <tr>
    <td align="center" style="padding:0 24px;">
      <table role="presentation" width="552" cellpadding="0" cellspacing="0" border="0" class="rib-container" style="width:552px; max-width:552px; border:1px solid #E1E1E1;">
        <tr>
          <td style="padding:32px;">

            <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
              <tr>
                <td width="172" valign="top" class="rib-stack" style="width:172px; padding:0 24px 0 0;">
                  <table role="presentation" width="172" cellpadding="0" cellspacing="0" border="0" style="width:172px; height:172px; border:2px dotted #002FA7; border-radius:86px;">
                    <tr>
                      <td align="center" valign="middle" style="height:172px; font-family:Arial,Helvetica,sans-serif;">
                        <table role="presentation" width="152" cellpadding="0" cellspacing="0" border="0" style="width:152px; height:152px; border:1px solid #141414; border-radius:76px;">
                          <tr>
                            <td align="center" valign="middle" style="height:152px; padding:0 12px;">
                              <div style="font-size:11px; line-height:16px; letter-spacing:1.5px; color:#5C5C5C;">{{weekday}}</div>
                              <div style="font-size:16px; line-height:24px; font-weight:700; color:#141414;">{{date}}</div>
                              <div style="font-size:16px; line-height:24px; font-weight:700; color:#002FA7;">{{time}}</div>
                            </td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                  </table>
                </td>
                <td valign="top" class="rib-stack" style="font-family:Arial,Helvetica,sans-serif;">
                  <div style="font-size:11px; line-height:16px; letter-spacing:1.5px; color:#5C5C5C; padding-bottom:8px;">TERMIN</div>
                  <div style="font-size:24px; line-height:30px; font-weight:600; color:#141414; padding-bottom:16px;">{{appointment_type}}</div>
                  <table role="presentation" cellpadding="0" cellspacing="0" border="0">
                    <tr>
                      <td style="border:1px solid #002FA7; padding:8px 14px; font-size:14px; line-height:18px; color:#002FA7;">{{format}}</td>
                      <td width="8" style="width:8px;">&nbsp;</td>
                      <td style="border:1px solid #E1E1E1; padding:8px 14px; font-size:14px; line-height:18px; color:#5C5C5C;">{{duration}}</td>
                    </tr>
                  </table>
                  <div style="font-size:14px; line-height:22px; color:#5C5C5C; padding-top:16px;">
                    MIT <strong style="color:#141414;">{{host}}</strong>
                    &nbsp;&nbsp;&nbsp;
                    FÜR <strong style="color:#141414;">{{guest}}</strong>
                  </div>
                </td>
              </tr>
            </table>

            <table role="presentation" cellpadding="0" cellspacing="0" border="0" style="padding-top:32px;">
              <tr>
                <td class="rib-stack" style="background-color:#141414;">
                  <a href="{{confirm_url}}" style="display:block; padding:16px 32px; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:20px; font-weight:700; color:#FAFAFA; text-decoration:none;">Termin bestätigen</a>
                </td>
                <td width="12" class="rib-stack" style="width:12px;">&nbsp;</td>
                <td class="rib-stack" style="border:1px solid #141414;">
                  <a href="{{cancel_url}}" style="display:block; padding:15px 32px; font-family:Arial,Helvetica,sans-serif; font-size:16px; line-height:20px; font-weight:700; color:#141414; text-decoration:none;">Termin absagen</a>
                </td>
              </tr>
            </table>

            <div style="font-family:Arial,Helvetica,sans-serif; font-size:14px; line-height:22px; color:#5C5C5C; padding-top:24px;">
              Du hast 48 Stunden Zeit, deinen Termin zu bestätigen. Andernfalls verfällt er.<br>
              Beim Absagen kannst du angeben, wann es dir besser passt.
            </div>

          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>

Media Queries

@media only screen and (max-width:620px) {
  .rib-container { width:100% !important; max-width:100% !important; }
}
@media only screen and (max-width:480px) {
  .rib-stack {
    display:block !important;
    width:100% !important;
    padding:0 0 12px 0 !important;
  }
}