Open beta, Since 19 October 2026See the roadmapRoadmap

DE EN
Brand handbook Corporate Identity · Version 3.0

A brand that keeps everything in view.

The design language of EagleDesk: refined industrial-electric. Graphite as the foundation, bone as breathing room, amber as the one precisely placed accent. This page is reference and proof at once: it is built entirely from its own tokens, and every value can be copied with a click.

  • Direction industrial-electric
  • Display Archivo
  • Text IBM Plex Sans
  • Mono IBM Plex Mono
  • Primary
  • Fonts self-hosted · GDPR

Every value with a dashed outline can be copied to the clipboard with a click or Enter.

Essence

Overview, not a toolbox.

Anyone who places temporary workers keeps a machinery of deadlines, contracts and responsibility running. EagleDesk gives that machinery a calm, dependable surface: technical, precise, trustworthy. No playful start-up pastels, no sterile office grey, but brushed graphite with a single point of amber light.

Core values: dependable · precise · sovereign · Austrian matter-of-fact

01 — Colours

Graphite leads. Amber accents.

Dominance instead of an even split: bone is the ground, graphite carries, amber is the light and never surface without a reason. Each tile names the token and hex value (both copyable with a click) and the calculated WCAG 2.x contrast to bone and to graphite.

Distribution rule 70 / 22 / 8

Roughly 70 % bone ground, 22 % graphite, 8 % amber. If you need more amber, you usually have too many main actions.

  • 70 % Bone (--paper)
  • 22 % Graphite (--ink)
  • 8 % High-voltage amber (--volt)
  • Graphite

    Primary text, buttons, footer

    on bone
    16.3:1 AAA
  • Graphite light

    Depth surfaces, cards on dark

    on bone
    13.7:1 AAA
    on graphite
    1.1:1 below AA
  • Graphite line

    Lead text, lines on dark

    on bone
    9.5:1 AAA
    on graphite
    1.7:1 below AA
  • Bone

    Page background

    on graphite
    16.3:1 AAA
  • Bone light

    Cards, inputs

    on bone
    1.0:1 below AA
    on graphite
    17.7:1 AAA
  • Hairline

    Dividers, decorative

    on bone
    1.2:1 below AA
    on graphite
    13.5:1 AAA

    Decorative: no approved text or UI pairing.

  • Hairline strong

    Outlines of inputs and buttons

    on bone
    1.3:1 below AA
    on graphite
    11.6:1 AAA

    Decorative: no approved text or UI pairing.

  • High-voltage amber

    Primary accent: the one main action, status, output

    on bone
    1.8:1 below AA
    on graphite
    8.6:1 AAA
  • Amber dark

    Amber for small text, WCAG AA

    on bone
    5.5:1 AA
    on graphite
    2.9:1 below AA
  • Amber deep

    Hover and depth

    on bone
    6.6:1 AA
    on graphite
    2.4:1 below AA
  • Copper

    Warm secondary note, expired

    on bone
    4.7:1 AA
    on graphite
    3.4:1 AA large
  • Amber glow

    Translucent halo behind the main action and on the focus ring

    Transparent: no contrast claim.

  • Warm grey

    Muted text, helper text

    on bone
    5.3:1 AA
    on graphite
    3.0:1 AA large
  • Success

    Success, compliance OK

    on bone
    4.4:1 AA large
    on graphite
    3.6:1 AA large

Contrast rules in short

  • Amber (--volt) is surface or symbol, as text only on graphite. On bone it is too light for text.
  • Small amber-toned text on bone uses --volt-d or --volt-deep.
  • Success green (--ok) narrowly misses 4.5:1 on bone: as text on light bone (--paper-2), on bone only large or as a symbol.
  • Hairlines (--line, --line-2) are decorative and carry no information.

Approved contrast pairs

Only pairings that pass by calculation. Body text needs at least 4.5:1 (AA), large text and controls at least 3:1. The ratio is truncated to one decimal, never rounded up.

Approved contrast pairs with calculated ratio
Sample Foreground Background Use Ratio Minimum Result
Body text 16.3:1 AAA 4.5:1 passed
Body text 17.7:1 AAA 4.5:1 passed
Body text 8.6:1 AAA 4.5:1 passed
Body text 13.7:1 AAA 4.5:1 passed
Body text 14.9:1 AAA 4.5:1 passed
Body text 9.5:1 AAA 4.5:1 passed
Body text 10.4:1 AAA 4.5:1 passed
Body text 16.3:1 AAA 4.5:1 passed
Body text 13.7:1 AAA 4.5:1 passed
Body text 9.5:1 AAA 4.5:1 passed
Body text 17.7:1 AAA 4.5:1 passed
Body text 14.9:1 AAA 4.5:1 passed
Body text 10.4:1 AAA 4.5:1 passed
Body text 8.6:1 AAA 4.5:1 passed
Body text 7.3:1 AAA 4.5:1 passed
Body text 5.5:1 AA 4.5:1 passed
Body text 6.0:1 AA 4.5:1 passed
Body text 6.6:1 AA 4.5:1 passed
Body text 7.2:1 AAA 4.5:1 passed
Body text 4.7:1 AA 4.5:1 passed
Body text 5.1:1 AA 4.5:1 passed
UI and graphics 3.4:1 AA large 3.0:1 passed
Body text 5.3:1 AA 4.5:1 passed
Body text 5.8:1 AA 4.5:1 passed
Body text 4.8:1 AA 4.5:1 passed
Large text 4.4:1 AA large 3.0:1 passed
UI and graphics 3.6:1 AA large 3.0:1 passed

02 — Typography

Archivo strikes. AK Sans carries.

Archivo (grotesque, angular, 800) for display and headlines, set tight, with an amber underline as the signature. IBM Plex Sans for running text (humanist, calm). IBM Plex Mono for labels, data and eyebrows, the technical voice.

Typefaces

Archivo

Headlines and display (Archivo)

  • Weight 500 Deadlines under control
  • Weight 700 Deadlines under control
  • Weight 800 Deadlines under control

IBM Plex Sans

Running text (IBM Plex Sans)

  • Weight 400 Every assignment, every deadline, recorded cleanly.
  • Weight 500 Every assignment, every deadline, recorded cleanly.
  • Weight 600 Every assignment, every deadline, recorded cleanly.

IBM Plex Mono

Data, labels, eyebrow (IBM Plex Mono)

  • Weight 500 EID-2026-0042 · € 1,184.50

Scale and roles

The table lists the real values from ci.css; the samples next to it are capped at 60 px.

DisplayArchivo · 800
Deadlines under control
Title (H1)Archivo · 800
Compliance, automated
Headline (H2)Archivo · 700
Deadlines and contracts
Subline (H3)IBM Plex Sans · 600
Next due date
LeadIBM Plex Sans · 400
Everything important first, the rest one level deeper.
Body textIBM Plex Sans · 400
Every placed worker, every assignment, every expiring examination: recorded cleanly, encrypted per tenant, reported on time.
Small (navigation, footer)IBM Plex Sans · 400
Legal notice · Privacy
EyebrowIBM Plex Mono · 500
Module 19 · Deadline traffic light
ButtonIBM Plex Mono · 500
Create assignment
Data (mono)IBM Plex Mono · 500
EID-2026-0042 · € 1,184.50 · 12 W
Type scale with role, typeface, size, line height, weight and letter spacing
Role Typeface Size Line height Weight Letter spacing CSS
Display Archivo
--font-display
clamp(40px,7vw,82px) .98 800 -.035em
Title (H1) Archivo
--font-display
clamp(30px,5vw,46px) 1.04 800 -.02em
Headline (H2) Archivo
--font-display
20px 1.04 700 -.02em
Subline (H3) IBM Plex Sans
--font-body
16px 1.65 600 normal
Lead IBM Plex Sans
--font-body
17px 1.65 400 normal
Body text IBM Plex Sans
--font-body
16px 1.65 400 normal
Small (navigation, footer) IBM Plex Sans
--font-body
14.5px 1.65 400 normal
Eyebrow IBM Plex Mono
--font-mono
12px 1.65 500 2px
Button IBM Plex Mono
--font-mono
14px 1.65 500 .3px
Data (mono) IBM Plex Mono
--font-mono
13.5px 1.9 500 normal

Self-hosted, no Google CDN

Archivo and IBM Plex are served as woff2 files from /fonts on our own domain. Loading the page transfers no data to third parties. The adapted versions of IBM Plex (subsets, SIL OFL 1.1; licence text at /fonts/LIZENZ-OFL.txt) are called AK Sans and AK Mono in the stylesheets.

Files: /fonts/archivo-500.woff2 /fonts/archivo-700.woff2 /fonts/archivo-800.woff2 /fonts/plexsans-400.woff2 /fonts/plexsans-500.woff2 /fonts/plexsans-600.woff2 /fonts/plexmono-500.woff2

03 — Shapes

Radii, shadows, gradients, spacing.

Few, repeatable shape values. Every preview is built with the real token, and the CSS next to it can be copied directly.

Radii

Cards and panels use --radius-md (14 px, as --radius before), pills use --radius-pill. Inputs keep their 11 px; the buttons of the previous marketing site are square, marketing site D is rounded (shape language D, below).

  • Card radius (legacy, = radius-md)

  • Pills, chips, badges

  • Small elements: tags, code chips

  • Cards, panels, tables

  • Large surfaces: hero cards, dialogs

Shadows

Graphite-tinted, widely diffused and pulled inwards: shadows lift, they do not dramatise. The glow belongs to the main action only.

  • Subtle lift: chips, table rows

  • Cards on hover, select lists

  • Dialogs and overlays

  • Amber halo behind the main action

Gradients

Gradients are built exclusively from existing colour tokens. Use the signal gradient (amber to copper) sparingly and never behind body text.

  • Signal: amber to copper, sparingly for hero accents

  • Dark surfaces: graphite gradient

Spacing

A 4 px grid with eight steps. Padding and gaps come from this series, no in-between values.

  • Tight: icon to text

  • Compact: chips, rows

  • Padding of small elements

  • Default: small card padding

  • Groups and form fields

  • Card padding, block spacing

  • Small section spacing

  • Large section spacing

Shape language D

Marketing site D is rounded (plan 3.5): the square surfaces of the previous marketing site are gone. The main roles use the radius tokens below. Fixed values remain on small controls (icon, menu and small buttons, skip link: 12 px), on tabs (22 and 26 px), on the phone device frame (40 and 28 px) and on identifiers (8 px); marketing site D does not use --radius-sm yet. The System D section shows the layers E0 to E3.

Radii of shape language D by role
Role Token Value Preview
Chips, status pill, toggles 999px
Buttons and input fields 14px
Cards, panels, glass tiles 22px
Large surfaces (band, symbolic photos, form and closing card) 28px

04 — Tokens

The variable set.

All CSS custom properties from :root in /css/ci.css, complete and with their role. Build on these and you build on brand.

64 tokens in 9 groups

All CSS custom properties of the CI with value, role and CSS usage
Token Value Role In CSS
Colours
Graphite
Graphite light
Graphite line
Bone
Bone light
Hairline
Hairline strong
High-voltage amber
Amber dark
Amber deep
Copper
Amber glow
Warm grey
Success
Roles (light and dark)
Page background (bone in light, graphite in dark)
Cards, fields, tables
Inverted surface: table header, toast, read-only mode
Text on an inverted surface
Primary text
Secondary text, lead
Help text, placeholders, icons at rest
Dividers (decorative)
Stronger lines (decorative)
Outlines of inputs and controls (at least 3:1)
Amber for small text and active marks
Focus ring
Typefaces
Headlines and display (Archivo)
Running text (IBM Plex Sans)
Data, labels, eyebrow (IBM Plex Mono)
Layout
Maximum content width
Radii
Card radius (legacy, = radius-md)
Pills, chips, badges
Small elements: tags, code chips
Cards, panels, tables
Large surfaces: hero cards, dialogs
Shadows
Subtle lift: chips, table rows
Cards on hover, select lists
Dialogs and overlays
Amber halo behind the main action
Gradients
Signal: amber to copper, sparingly for hero accents
Dark surfaces: graphite gradient
Spacing
Tight: icon to text
Compact: chips, rows
Padding of small elements
Default: small card padding
Groups and form fields
Card padding, block spacing
Small section spacing
Large section spacing
Motion
Hover and colour change
Menus and overlays
Reveal on load
Default curve: quick in, soft out
Press and toggle
Colour-mode change, expand and collapse
Reveal on scroll, bars
Numbers count up (once)
Width animation of the main headline
Lines draw, the conduit extends (once)
In (same as the default curve)
Out
Flow, sheen, breathing
Stagger, at most eight steps
Distance when revealing

/css/ci.css is authoritative. This table comes from the same data source as the tiles and is checked against the file automatically.

06 — In use

The logo in its place.

Seven mockups in HTML and CSS, using the real logo files, as the target picture of the logo system: existing surfaces are being aligned step by step. With tenant white label, the tenant logo appears, the EagleDesk logo at most as a discreet “powered by”.

Filament sidebar

At the top left of the sidebar sits the horizontal logo in the variant of the colour mode: light uses “Horizontal logo, light”, dark uses “Horizontal logo, dark”.

Light · Mockup
Dark · Mockup

Favicon in the browser tab

Only the compact mark appears in the tab, never the wordmark. It stays recognisable at 16 px: the SVG adapts to light and dark tabs, ICO and PNG sit on the graphite tile.

Mockup

Social avatar

The app icon shows the compact mark in light lines on the graphite tile with an amber eye: it stays legible in any crop, whether round, rounded or square.

Mockup

PDF letterhead of the operator

The horizontal logo at the top left, below it the sender line, at the bottom the mandatory details. All texts are placeholders; no company and no number appears. For a tenant, the tenant logo appears instead.

Mockup

Portal header

The header belongs to the tenant: tenant logo or app name. The EagleDesk logo does not appear there, at most a discreet “powered by” at the end of the page. Mockup at 375 px width.

Mockup

Platform mail header

Platform mails, for example about the trial, carry the brand mail header on graphite at the top. Tenant mails show the tenant logo, the EagleDesk logo only discreetly as “powered by”.

Mockup

07 — Downloads

Everything to take along.

Every asset as SVG (vector, lettering converted to paths) and as PNG, plus the complete brand kit as a ZIP. The files are ready on the server; nothing is generated on request.

Brand kit

All files in this list in one ZIP, plus a README with the short rules in German and English.

44 files plus README, 668.2 KB

All URLs are absolute and carry a version parameter (?v=) that changes with the file. After a replacement, caches never show the old version.

Mark

Downloads: Mark
Preview Asset and use SVG PNG
Mark, light Mark for light backgrounds: graphite lines, amber eye. Avatar, loading indicator, watermark. SVG Vector · 823 B PNG 512 × 512 px · 11.2 KB
Mark, dark Mark for dark backgrounds: bone lines, amber eye. SVG Vector · 832 B PNG 512 × 512 px · 11.1 KB
Mark, black Single colour black: stamps, fax, engraving, foil. SVG Vector · 841 B PNG 512 × 512 px · 8.3 KB
Mark, white Single colour white: on dark and coloured areas with enough contrast. SVG Vector · 831 B PNG 512 × 512 px · 9.1 KB

Wordmark

Downloads: Wordmark
Preview Asset and use SVG PNG
Wordmark, light The lettering only, for light backgrounds, in graphite. SVG Vector · 5.5 KB PNG 931 × 192 px · 23.2 KB
Wordmark, dark The lettering only, for dark backgrounds, in paper white. SVG Vector · 5.5 KB PNG 931 × 192 px · 20.1 KB
Wordmark, black Lettering in single colour black: stamps, fax, engraving. SVG Vector · 5.5 KB PNG 931 × 192 px · 15.6 KB
Wordmark, white Lettering in single colour white: on dark and coloured areas. SVG Vector · 5.5 KB PNG 931 × 192 px · 17.6 KB

Favicon and app icon

Downloads: Favicon and app icon
Preview Asset and use SVG PNG
Favicon Browser tab and bookmarks: the compact mark on the graphite tile (16 to 48 px). On the website the SVG favicon adapts to light and dark tabs. SVG Vector · 888 B PNG 48 × 48 px · 1.4 KB
App icon App icon and profile picture: the compact mark on the graphite tile with an amber eye; the system rounds the corners itself. SVG Vector · 1.4 KB PNG 1024 × 1024 px · 77.9 KB

Preview image

Downloads: Preview image
Preview Asset and use SVG PNG
Preview image, dark Link preview (Open Graph, LinkedIn, X, messengers), standard for dark backgrounds, aspect ratio 1.91:1. SVG Vector · 7.8 KB PNG 1200 × 630 px · 93.5 KB
Preview image, light Link preview for light surroundings, aspect ratio 1.91:1. SVG Vector · 7.7 KB PNG 1200 × 630 px · 104.8 KB

Mail header

Downloads: Mail header
Preview Asset and use SVG PNG
Mail header, light Small horizontal logo for mail headers and signatures on light backgrounds, from 20 px high (mail programs do not show SVG: use the PNG). SVG Vector · 5.9 KB PNG 256 × 56 px · 5.9 KB
Mail header, dark Small horizontal logo for mail headers on dark backgrounds, from 20 px high; this is how it appears in platform mails. SVG Vector · 5.9 KB PNG 256 × 56 px · 5.1 KB

08 — Sharing

Preview images for sharing.

The preview image for link previews: the brand only, for both languages, for dark and light backgrounds. The meta snippet embeds it with absolute URLs.

Link preview 1200 × 630 px

For link previews (Open Graph, LinkedIn, X, messengers), aspect ratio 1.91:1. The image shows only the brand and works for both languages; each page sets its own title and description.

  • Preview image 1200 × 630 px, Preview image, dark. The EagleDesk logo: eagle-head mark and wordmark.
    Preview image, dark PNG
  • Preview image 1200 × 630 px, Preview image, light. The EagleDesk logo: eagle-head mark and wordmark.
    Preview image, light PNG

Meta snippet

To paste into the head of a page that should show the preview image. The URLs are absolute and carry the version parameter; the page itself sets title and description.

Meta snippet, German
<meta property="og:image" content="https://eagledesk.at/brand/og/og-dunkel.png?v=1792121061">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Logo von EagleDesk: Adlerkopf-Zeichen und Schriftzug.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://eagledesk.at/brand/og/og-dunkel.png?v=1792121061">
<meta name="twitter:image:alt" content="Logo von EagleDesk: Adlerkopf-Zeichen und Schriftzug.">
Meta snippet, English
<meta property="og:image" content="https://eagledesk.at/brand/og/og-dunkel.png?v=1792121061">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="The EagleDesk logo: eagle-head mark and wordmark.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://eagledesk.at/brand/og/og-dunkel.png?v=1792121061">
<meta name="twitter:image:alt" content="The EagleDesk logo: eagle-head mark and wordmark.">

09 — Components

Components, ready to use.

Buttons, pills, badges, banners, cards, tables, empty states and toasts, rendered with the real CI classes. Every example has a copyable HTML snippet. Principles: one main action per area, status with text and a mark rather than colour alone, focus always visible. Adapt IDs and heading levels in the copied code to your own page.

Buttons

The buttons of the marketing site: 52 px tall (M 46 px, S 40 px), square, Archivo in capitals. Amber (.btn-volt) belongs to the one main action only. All other actions sit quietly next to it: position and label rank them, not colour.

Primary, secondary, ghost

Primary is amber. Secondary (.btn-primary) and ghost (.btn-ghost) carry a graphite outline and look the same on the marketing site; the ranking comes from position and label.

Show HTML: Primary, secondary, ghost
<div class="ci-reihe">
    <button type="button" class="btn btn-volt">Create assignment</button>
    <button type="button" class="btn btn-primary">Log in</button>
    <button type="button" class="btn btn-ghost">Learn more</button>
</div>

Right: one primary per area

  • The main action is amber (.btn-volt); every other action is ghost or secondary.
  • Further actions go into the More menu instead of competing with the main action.

Wrong: two primaries

  • Two amber buttons side by side: the eye does not know where to start.
  • Amber as decoration on secondary actions.
  • Dangerous actions in amber without a confirmation.

Dangerous

Copper surface with light text for deleting and irreversible actions. Always with a confirmation, never as a primary next to an amber button.

Show HTML: Dangerous
<div class="ci-reihe">
    <button type="button" class="btn btn-danger">Delete permanently</button>
</div>

Disabled

The disabled attribute for buttons without an alternative. aria-disabled when the button should stay reachable and explain why.

Approving is only possible once all hours are confirmed.

Show HTML: Disabled
<div class="ci-reihe">
    <button type="button" class="btn btn-volt" disabled>Save</button>
    <button type="button" class="btn btn-ghost" aria-disabled="true" aria-describedby="btn-grund">Approve</button>
</div>
<p class="feld-hilfe" id="btn-grund">Approving is only possible once all hours are confirmed.</p>

With icon

The icon comes before the text for actions and after it for follow-ups. A button with only an icon carries an aria-label and a 44 px target.

Show HTML: With icon
<div class="ci-reihe">
    <button type="button" class="btn btn-volt"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 4.5v15m7.5-7.5h-15"/></svg>Create assignment</button>
    <button type="button" class="btn btn-ghost">Learn more<svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/></svg></button>
    <button type="button" class="btn btn-ghost btn-icon" aria-label="Delete"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"/></svg></button>
</div>

Sizes

Default 52 px, M 46 px, S 40 px tall (marketing site). In the back office Filament sets the sizes.

Show HTML: Sizes
<div class="ci-reihe">
    <button type="button" class="btn btn-volt btn-s">Small</button>
    <button type="button" class="btn btn-volt btn-m">Medium</button>
    <button type="button" class="btn btn-volt">Default</button>
</div>

Pills

Pills name a state in one line: trial, read-only mode, project status. Round (--radius-pill), AK Mono, with a mark before the text: ring = trial, square = read-only, hatched = in development, half filled = beta, diamond = new. The shape carries the meaning; colour only supports it.

State pills

Trial, read-only mode, in development, beta, new. The trial length comes from the product configuration.

Trial · 14 days Read-only mode Open beta · Since 19 October 2026 Beta New
Show HTML: State pills
<div class="ci-reihe">
    <span class="pille pille-test">Trial · 14 days</span>
    <span class="pille pille-lesen">Read-only mode</span>
    <span class="pille pille-dev">Open beta · Since 19 October 2026</span>
    <span class="pille pille-beta">Beta</span>
    <span class="pille pille-neu">New</span>
</div>
  • A pill names exactly one state and sits next to what it describes.
  • Always text, never just a coloured dot: the mark before the text is an addition.
  • The project status names the stage honestly (“Open beta · Since 19 October 2026”) and promises no individual features.
  • The amber fill (New) at most once per view.

Status badges

Badges are the compact form for lists and tables: dot plus text. Grey is neutral. The identifiers are the values in the product: the licence status of a tenant and the level of an announcement.

Licence status

Trial, active, cancelled, read-only mode.

Trial Active Cancelled Read-only mode
Show HTML: Licence status
<div class="ci-reihe">
        <span class="badge b-volt">Trial</span>
        <span class="badge b-ok">Active</span>
        <span class="badge b-grau">Cancelled</span>
        <span class="badge b-ink">Read-only mode</span>
</div>

Announcement levels

Info, new, maintenance, urgent.

Info New Maintenance Urgent
Show HTML: Announcement levels
<div class="ci-reihe">
        <span class="badge b-grau">Info</span>
        <span class="badge b-volt">New</span>
        <span class="badge b-ink">Maintenance</span>
        <span class="badge b-copper">Urgent</span>
</div>
Status identifiers and their meaning
Group Identifier Meaning
Licence status Trial running: full scope of functions until the trial ends.
Licence status Running contract, full operation. An empty value counts as active.
Licence status Contract cancelled: full operation until the end, read-only mode afterwards.
Licence status Data stays readable and exportable; changes are possible again once a plan has been chosen.
Announcement General notice, can be dismissed.
Announcement New feature or improvement, can be dismissed.
Announcement Planned maintenance window, can be dismissed.
Announcement Incident or security notice, cannot be dismissed.

Banners

The same classes and values as in the panel (akw-lizenz-banner, akw-ankuendigung): trial = light amber, read-only mode and maintenance = graphite, cancellation and urgent = light red. Every banner states the situation in text and, where there is one, the next step.

Licence banners: trial, read-only mode, cancellation

Sits above every page of the tenant. role=status with aria-live=polite; links only when the target exists.

Trial Premium All In: 14 days left (until DD.MM.)
Read-only mode since 9 Oct 2026 – your data is kept Choose a plan Export data
Contract cancelled as of 31 Dec 2026 – read-only mode afterwards, your data is kept
Show HTML: Licence banners: trial, read-only mode, cancellation
<div class="ci-banner-stapel">
    <div class="akw-lizenz-banner akw-lizenz-banner--test" role="status" aria-live="polite">
        <span class="akw-lizenz-banner-text">Trial Premium All In: 14 days left (until DD.MM.)</span>
    </div>
    <div class="akw-lizenz-banner akw-lizenz-banner--nur_lesen" role="status" aria-live="polite">
        <span class="akw-lizenz-banner-text">Read-only mode since 9 Oct 2026 – your data is kept</span>
        <span class="akw-lizenz-banner-links">
            <a class="akw-lizenz-banner-link" href="#">Choose a plan</a>
            <a class="akw-lizenz-banner-link" href="#">Export data</a>
        </span>
    </div>
    <div class="akw-lizenz-banner akw-lizenz-banner--gekuendigt" role="status" aria-live="polite">
        <span class="akw-lizenz-banner-text">Contract cancelled as of 31 Dec 2026 – read-only mode afterwards, your data is kept</span>
    </div>
</div>

Announcements: new, maintenance, urgent, info

Title in bold, text beside it. Urgent notices cannot be dismissed and carry role=alert in operation; the preview stays silent, the snippet carries the real role.

New: deadline dashboard

All deadlines of a tenant in one view, with a traffic light.

Maintenance on Sunday

From 02:00 to 03:00 the system is briefly unavailable.

Incident

The time tracking import is disrupted. We are working on a fix.

Notice

The manual now includes the chapter on month-end closing.

Show HTML: Announcements: new, maintenance, urgent, info
<div class="akw-ankuendigungen">
    <div class="akw-ankuendigung akw-ankuendigung--neu" role="status">
        <div class="akw-ankuendigung-inhalt">
            <strong class="akw-ankuendigung-titel">New: deadline dashboard</strong>
            <div class="akw-ankuendigung-text"><p>All deadlines of a tenant in one view, with a traffic light.</p></div>
        </div>
        <button type="button" class="akw-ankuendigung-schliessen" aria-label="Dismiss">&times;</button>
    </div>
    <div class="akw-ankuendigung akw-ankuendigung--wartung" role="status">
        <div class="akw-ankuendigung-inhalt">
            <strong class="akw-ankuendigung-titel">Maintenance on Sunday</strong>
            <div class="akw-ankuendigung-text"><p>From 02:00 to 03:00 the system is briefly unavailable.</p></div>
        </div>
        <button type="button" class="akw-ankuendigung-schliessen" aria-label="Dismiss">&times;</button>
    </div>
    <div class="akw-ankuendigung akw-ankuendigung--dringend" role="alert">
        <div class="akw-ankuendigung-inhalt">
            <strong class="akw-ankuendigung-titel">Incident</strong>
            <div class="akw-ankuendigung-text"><p>The time tracking import is disrupted. We are working on a fix.</p></div>
        </div>
    </div>
    <div class="akw-ankuendigung" role="status">
        <div class="akw-ankuendigung-inhalt">
            <strong class="akw-ankuendigung-titel">Notice</strong>
            <div class="akw-ankuendigung-text"><p>The manual now includes the chapter on month-end closing.</p></div>
        </div>
    </div>
</div>

Cards, tables, empty states, toasts

Cards group, tables compare, empty states lead to the next action, toasts report the result. The sample data are placeholders.

Card

Card with icon tile. Lifts 2 px on hover (transform and shadow, 150 ms).

Deadline engine

Seven sources, one traffic light. Reminder, warning, expired: automatic, separated by tenant.

Show HTML: Card
<div class="ccard">
    <div class="ic"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg></div>
    <h5>Deadline engine</h5>
    <p>Seven sources, one traffic light. Reminder, warning, expired: automatic, separated by tenant.</p>
</div>

Empty state

One or two sentences and the one main action: an empty state guides instead of apologising.

No assignments yet

Create the first assignment. It then appears in scheduling and in time tracking.

Show HTML: Empty state
<div class="leer">
    <div class="ic"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z"/></svg></div>
    <h5>No assignments yet</h5>
    <p>Create the first assignment. It then appears in scheduling and in time tracking.</p>
    <button type="button" class="btn btn-volt btn-m"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 4.5v15m7.5-7.5h-15"/></svg>Create assignment</button>
</div>

Table

Graphite header row in mono capitals, numbers right-aligned and tabular, status as a badge. On narrow screens the region scrolls sideways and can be reached by keyboard.

Assignments with hours and status
No. Customer Hours Status
E-0001 Musterbau GmbH 38,5 approved
E-0002 Sample Logistics Ltd 40,0 expires soon
E-0003 Demo Metall e. U. 12,0 expired
Show HTML: Table
<div class="tabelle-wrap" role="region" tabindex="0" aria-label="Sample table, scrolls horizontally">
    <table class="tabelle">
        <caption>Assignments with hours and status</caption>
        <thead>
            <tr>
                <th scope="col">No.</th>
                <th scope="col">Customer</th>
                <th scope="col" class="num">Hours</th>
                <th scope="col">Status</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th scope="row">E-0001</th>
                <td>Musterbau GmbH</td>
                <td class="num">38,5</td>
                <td><span class="badge b-ok">approved</span></td>
            </tr>
            <tr>
                <th scope="row">E-0002</th>
                <td>Sample Logistics Ltd</td>
                <td class="num">40,0</td>
                <td><span class="badge b-volt">expires soon</span></td>
            </tr>
            <tr>
                <th scope="row">E-0003</th>
                <td>Demo Metall e. U.</td>
                <td class="num">12,0</td>
                <td><span class="badge b-copper">expired</span></td>
            </tr>
        </tbody>
    </table>
</div>

Toasts

Short feedback after an action. role=status when shown, role=alert for errors. Errors do not disappear on their own.

Assignment saved
The export is being prepared. You will receive a message.
Cannot save: the end date is before the start date.
Show HTML: Toasts
<div class="ci-toast-stapel">
    <div class="toast toast-ok" role="status">
        <svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/></svg>                <span>Assignment saved</span>
    </div>
    <div class="toast" role="status">
        <svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z"/></svg>                <span>The export is being prepared. You will receive a message.</span>
    </div>
    <div class="toast toast-fehler" role="alert">
        <svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"/></svg>                <span>Cannot save: the end date is before the start date.</span>
    </div>
</div>

Marketing site patterns

From site-2026.css: status bar, status and plan badges and grid of the previous marketing site (design switch “alt”). The patterns of marketing site D follow in the next block.

Status bar (on every public page)

.statusbar · mono, capitals. The text comes from the marketing site itself, so the preview always shows the real wording.

Open beta · Since 19 October 2026

See the roadmapRoadmap
Show HTML: Status bar (on every public page)
<div class="statusbar">
    <div class="sb-in">
        <span class="sb-led" aria-hidden="true"></span>
        <p class="sb-text"><strong>Open beta</strong><span class="sb-sep"> · </span>Since 19 October 2026</p>
        <span class="sb-link"><span class="sb-long">See the roadmap</span><span class="sb-short">Roadmap</span><span aria-hidden="true">→</span></span>
    </div>
</div>

Status and plan badges (square, mono)

Square instead of round: shape instead of colour. Solid = available, hatched = in development. Plans: dashed (Premium), solid line (PremiumPlus), filled (Premium All In).

Available now In development Premium PremiumPlus Premium All In
Show HTML: Status and plan badges (square, mono)
<div class="ci-reihe">
    <span class="st-badge b-live">Available now</span>
    <span class="st-badge b-dev">In development</span>
    <span class="tier tier-premium">Premium</span>
    <span class="tier tier-premium_plus">PremiumPlus</span>
    <span class="tier tier-all_in">Premium All In</span>
</div>

Blueprint grid (atmosphere)

.grid-bg: grid behind hero areas, purely decorative and hidden from screen readers.

Show HTML: Blueprint grid (atmosphere)
<div class="gridmini grid-bg" aria-hidden="true"></div>

Patterns of marketing site D

Building blocks of marketing site D “Lichtwerk” (views public/v2027/*): prefix .w-* for home and shared parts, .u-* for the sub-pages; drawn only via role tokens --d-*. Visible to everyone from design switch “new” (today: “new”).

Patterns of marketing site D with entry class, pages and rule
Pattern Class Pages Rule
Glass header (layer 3) all pages Blur only here and in the menu; below 1100 px a full-screen menu with a focus trap.
Status pill all pages Project status from the beta texts, visible exactly once per screen width, links to the roadmap.
Pause button all pages “Pause animations” in header, menu and footer; the state is in aria-pressed.
Colour mode all pages Follow the system (default), light or dark; remembered in the browser and set before the first paint.
Glow button and glass button all pages One main action per page in the glow gradient — on the marketing site “Request beta access” (header, menu, hero, closing), on the trial page the enquiry form; all other actions as glass buttons.
Kinetic H1 home page Archivo 800, width 76 %, capitals; starts visible and moves only via transform and filter.
Glow word home page Exactly one word per page in the glow gradient.
Energy core home page See graphic system D in the System D section.
Flow line home page Six step cards on the line; the detail text sits in a disclosure.
Glass card with pointer light home page Layer 1, lifts by 3 px on hover; the light follows the pointer only on pointer devices and not when paused.
Status chip all pages “Available now” (dot), “In development” (ring), “Current” (filled): shape and text, never colour alone.
Package selector home page Filters counters and building blocks at once; the chosen level carries a tick and an inner ring, the message sits in a status region.
Tabs home page Tabs with arrow keys, Home and End; without script all areas stand one below the other.
Timeline all pages Bars grow once; the cut-over date sits on its own line.
Accordion (FAQ) all pages Disclosures with a shared name: at most one answer open; the content is fully in the document (FAQPage 1:1).
Form card home page Light in both modes; input outline at least 3 : 1, focus ring from --d-fokus, errors with symbol and text.
Sub-page header sub-pages Breadcrumbs, kicker, H1 and a line that draws itself once.
Toolbar (features) sub-pages Search, status filter, open or close all, result message; sticky only on large screens.
Table of contents (legal texts) sub-pages Built from the subheadings; the current section is marked.
Footer with settings all pages Language, colour mode and pause; contact links at least 32 px high.

10 — Forms

Clearly labelled. Never preselected.

Label, help text, required mark, error message, focus ring, consent, honeypot and the trial registration form as a pattern. Every example is copyable and linked for accessibility.

Fields, help text and error message

Every field has a visible label (for and id), a help text via aria-describedby and, when needed, an error message in text. The outline of an input is --muted (1.5 px, well above 3:1 against the background), not the hairline --line-2.

Text field with label, help text and required mark

Label above the field, help text below. The asterisk marks it as required, and the required attribute tells assistive technology as well.

We send the confirmation link to this address.

Show HTML: Text field with label, help text and required mark
<div class="feld">
    <label class="feld-label" for="bsp-feld-email">Email address<span class="pflicht" aria-hidden="true">*</span></label>
    <input class="inp" type="email" id="bsp-feld-email" name="email" autocomplete="email" required aria-describedby="bsp-feld-email-hilfe">
    <p class="feld-hilfe" id="bsp-feld-email-hilfe">We send the confirmation link to this address.</p>
</div>

Error message

aria-invalid and aria-describedby connect field and message. The message is text with an icon below the field, and the outline carries an extra bar: colour is never the only cue.

We send the confirmation link to this address.

Please enter a valid email address.

Show HTML: Error message
<div class="feld">
    <label class="feld-label" for="bsp-fehler-email">Email address<span class="pflicht" aria-hidden="true">*</span></label>
    <input class="inp" type="email" id="bsp-fehler-email" name="email" value="name@" autocomplete="email" required aria-invalid="true" aria-describedby="bsp-fehler-email-hilfe bsp-fehler-email-meldung">
    <p class="feld-hilfe" id="bsp-fehler-email-hilfe">We send the confirmation link to this address.</p>
    <p class="feld-fehler" id="bsp-fehler-email-meldung"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"/></svg>Please enter a valid email address.</p>
</div>

Required field

  • The label is visible and sits above the field, never only as a placeholder.
  • Required: an asterisk in the label (hidden from screen readers) and the required attribute. The legend “Required field” appears once per form.
  • Errors as text with an icon, never only as a red outline. Messages that appear dynamically get role=alert or live in an aria-live region.
  • The message says what to do (“Please enter a valid email address.”), not only what went wrong.
  • Text size in fields at least 16 px (no zooming in on mobile devices), field height at least 44 px.

Focus ring

Focus is always visible: a 2 px outline in --ci-fokus (graphite in light, bone in dark) with an offset, plus the amber glow as an addition. The glow alone is never enough, and the outline is never switched off.

Focus ring on an input

Left: click into the field or tab into it. Right: the same ring as a permanent state of the preview. The CSS uses tokens only.

Focus it with Tab to see the ring.

Preview only (class is-fokus).

Show CSS: Focus ring on an input
.inp:focus-visible {
    outline: 2px solid var(--ci-fokus);
    outline-offset: 2px;
    border-color: var(--volt);
    box-shadow: 0 0 0 4px var(--glow);
}

Consent

Agreements are checkboxes of their own: never preselected, never bundled, with clear text. Required (trial terms) and optional (setup tips) stay separate.

Consent checkboxes

One required agreement and one optional consent. Both start empty.

Show HTML: Consent checkboxes
<label class="chk" for="bsp-einw-bedingungen">
    <input type="checkbox" id="bsp-einw-bedingungen" name="bedingungen" value="1" required>
    <span>I accept the trial terms and have read the privacy notice. (<a href="#">privacy notice</a>)<span class="pflicht" aria-hidden="true">*</span></span>
</label>
<label class="chk" for="bsp-einw-tipps">
    <input type="checkbox" id="bsp-einw-tipps" name="tipps" value="1">
    <span>Yes, I would like to receive setup tips by email during the trial (voluntary, can be withdrawn at any time).</span>
</label>
  • Never preselected: the checked attribute is taboo for consent; agreeing is an active step.
  • Optional consents stay apart from required agreements and are labelled as optional and revocable.
  • The whole row is clickable (the label wraps the field), minimum height 44 px; the box itself is 24 px.
  • Links in the row are underlined and name their target (“privacy notice”).

Honeypot

A hidden field catches simple bots without a CAPTCHA. People do not see it, assistive technology skips it, and whoever fills it in is quietly turned away.

Honeypot field

The preview makes the field visible so you can see it. In the snippet it sits outside the screen.

Invisible in the application (class hp).

Show HTML: Honeypot field
<div class="hp" aria-hidden="true">
    <label for="website">Website (please leave empty)</label>
    <input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
</div>
  • Visually hidden with the class hp (off screen), not with display:none: simple bots skip fields that are hidden that way.
  • aria-hidden="true" on the wrapper, tabindex="-1" and autocomplete="off" on the field: keyboard and screen reader do not reach it, and browser autofill usually does not either.
  • The label stays understandable (“please leave empty”) in case the field is ever reached.
  • A filled trap is discarded on the server, and the answer is the same neutral page as for a success.

Example: trial registration

The target pattern modelled on the registration form of the marketing site, static and with all building blocks: honeypot, required fields, separate consents and exactly one main action.

Trial registration

Static: the fields can be filled in, nothing is sent. In the application this is a POST form with a CSRF token.

Try it free for 14 days

ATU followed by eight digits, or another EU VAT ID

Required

You will receive an email with a confirmation link. Only then do you set your password.

Show HTML: Trial registration
<form class="ci-formular" method="post" action="#" novalidate aria-labelledby="bsp-reg-titel">
    <h5 class="ci-formular-titel" id="bsp-reg-titel">Try it free for 14 days</h5>
    <!-- Insert CSRF token and form timestamp (_ts) -->
    <div class="hp" aria-hidden="true">
        <label for="bsp-reg-website">Website (please leave empty)</label>
        <input type="text" id="bsp-reg-website" name="website" tabindex="-1" autocomplete="off">
    </div>
    <div class="feld">
        <label class="feld-label" for="bsp-reg-firma">Company<span class="pflicht" aria-hidden="true">*</span></label>
        <input class="inp" type="text" id="bsp-reg-firma" name="firma" maxlength="150" autocomplete="organization" required>
    </div>
    <div class="ci-feld-reihe">
        <div class="feld">
            <label class="feld-label" for="bsp-reg-vorname">First name<span class="pflicht" aria-hidden="true">*</span></label>
            <input class="inp" type="text" id="bsp-reg-vorname" name="vorname" maxlength="80" autocomplete="given-name" required>
        </div>
        <div class="feld">
            <label class="feld-label" for="bsp-reg-nachname">Last name<span class="pflicht" aria-hidden="true">*</span></label>
            <input class="inp" type="text" id="bsp-reg-nachname" name="nachname" maxlength="80" autocomplete="family-name" required>
        </div>
    </div>
    <div class="feld">
        <label class="feld-label" for="bsp-reg-email">Business email<span class="pflicht" aria-hidden="true">*</span></label>
        <input class="inp" type="email" id="bsp-reg-email" name="email" maxlength="190" autocomplete="email" required>
    </div>
    <div class="feld">
        <label class="feld-label" for="bsp-reg-uid">VAT ID (optional)</label>
        <input class="inp" type="text" id="bsp-reg-uid" name="uid" maxlength="20" autocomplete="off" aria-describedby="bsp-reg-uid-hilfe">
        <p class="feld-hilfe" id="bsp-reg-uid-hilfe">ATU followed by eight digits, or another EU VAT ID</p>
    </div>
    <label class="chk" for="bsp-reg-bedingungen">
        <input type="checkbox" id="bsp-reg-bedingungen" name="bedingungen" value="1" required>
        <span>I accept the trial terms and have read the privacy notice. (<a href="#">privacy notice</a>)<span class="pflicht" aria-hidden="true">*</span></span>
    </label>
    <label class="chk" for="bsp-reg-tipps">
        <input type="checkbox" id="bsp-reg-tipps" name="tipps" value="1">
        <span>Yes, I would like to receive setup tips by email during the trial (voluntary, can be withdrawn at any time).</span>
    </label>
    <p class="feld-hilfe"><span aria-hidden="true">*</span> Required</p>
    <button type="submit" class="btn btn-volt">Request trial access</button>
    <p class="feld-hilfe">You will receive an email with a confirmation link. Only then do you set your password.</p>
</form>

Rules for forms

How we build forms

  • Visible label, help text via aria-describedby, errors as text with an icon.
  • Leave consents empty and ask for them separately.
  • One main action per form, cancel as a ghost button next to it.
  • Show errors where they occur and list them in a summary on submit.

Not like this

  • A placeholder instead of a label.
  • Preselected ticks for consent.
  • Marking errors with red colour only.
  • Input outlines in hairline colour: too weak, below 3:1.

11 — Icons and imagery

Thin line. Real work.

Heroicons outline as in the back office, three sizes, amber only in the active state. Images show real working environments, with consent and without recognisable people lacking approval.

The icon set

Heroicons, outline variant: the same symbols as in the back office (Filament). An icon shows an action or a state and never replaces text. Every SVG can be copied.

  • Power, action
  • Warning, error
  • Information
  • Security, compliance
  • Refresh, repeat
  • Appointment, assignment
  • Download, export
  • Time, deadline
  • Success, done
  • Cancelled, rejected
  • Delete
  • Locked, protected
  • Edit
  • People, team
  • Add
  • Document
  • Search
  • Company, customer
  • Next, link

Heroicons (Tailwind Labs) are released under the MIT licence. The paths are embedded in the page; nothing is loaded from elsewhere.

Sizes and stroke weight

The icons are drawn on a 24 grid with a stroke weight of 1.5. A class sets the size on screen, and the stroke scales with it.

Sizes 16, 20 and 24 px

From left to right: .ico-16 in buttons and running text, .ico (20 px) as the default, .ico-24 in tiles and empty states.

Show HTML: Sizes 16, 20 and 24 px
<div class="ci-reihe ci-icon-groessen">
<svg class="ico ico-16" viewBox="0 0 24 24" aria-hidden="true"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg>            <svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg>            <svg class="ico ico-24" viewBox="0 0 24 24" aria-hidden="true"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg>        </div>
Icon sizes with class and calculated stroke weight
Size Class Stroke on screen Use
16 px 1 px In buttons, badges and running text
20 px 1.25 px Default in lists and navigation
24 px 1.5 px In tiles, cards and empty states

States

Muted grey at rest, text colour on hover, amber only in the active state and never as the only cue there: a bar, bold text and aria-current come with it. Amber icons on a light background use --volt-d (via --ci-akzent-text), on graphite --volt.

Navigation items: at rest and active

The active item carries amber on the icon, a bar on the left and bold text.

Show HTML: Navigation items: at rest and active
<nav class="ci-nav-demo" aria-label="Sample navigation">
    <a class="navpunkt" href="#"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z"/></svg>Assignments</a>
    <a class="navpunkt" href="#" aria-current="page"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"/></svg>Staff</a>
    <a class="navpunkt" href="#"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"/></svg>Documents</a>
</nav>
  • Decorative icons carry aria-hidden="true". A button with only an icon needs an aria-label.
  • One meaning, one icon: the same symbol stands for the same action everywhere.
  • No emoji as icons and no custom stroke weights.

Imagery

Real working environments instead of stock clichés: construction site, warehouse, shop floor. Images show work, not poses, and only people who have agreed.

  • Construction

    Show
    Scaffolding, formwork, tools in use; light as it is on site; protective equipment worn correctly.
    Avoid
    Staged handshakes in front of new buildings, spotless helmets on white backgrounds, photo montages.
  • Logistics

    Show
    Warehouse, loading dock, order picking, forklifts in operation; hi-vis vest, order, walkways.
    Avoid
    People in front of shelves with a headset smile, empty pallets as scenery, exaggerated wide angles.
  • Production

    Show
    Machine, workpiece, hand movement; crops that show skill; calm light without filters.
    Avoid
    Robot arms from an image library, sparks as an effect, amber filters over photos.

Image formats and safe margin

Three aspect ratios. The dashed box is the safe margin (10 %): subject and text stay inside.

  • 16:9 Hero and header areas
  • 3:2 Cards and teasers
  • 1:1 Avatars and social posts

Rules

  • Real working environments from our customers’ everyday work, no stock clichés (handshake, laptop smile, helmet pose).
  • Consent: every person shown has agreed in writing (right to one’s own image and GDPR). Consent can be withdrawn and is documented.
  • No recognisable employees without approval: when in doubt, backs, hands, details or blur; no name tags, no legible plates.
  • Safety shown correctly: protective equipment appears as it is required.
  • Calm colour treatment: no amber filters, no black and white as an effect; images stay natural.
  • Every image has alternative text that says what can be seen, not “photo of …”.

Check before publishing

  1. Is consent on file for every recognisable person?
  2. Is the environment real and plausible for the target group?
  3. Does the crop work in all three formats?
  4. Has the alternative text been written?
  5. Are file name and metadata free of names and places?

12 — Dark mode

Dark is graphite, not black.

The mapping of tokens from light to dark, the calculated contrast pairs and the rules: no pure black, amber stays an accent.

Token mapping from light to dark

Components write their colours through roles (--ci-*). In the scope .ci-dunkel the roles point at dark values, identical to the dark mode of the marketing site. No new colour is created. Every value can be copied.

Role variables with their mapping in light and in dark mode
Role Light Dark Marketing site variable Use
Page background (bone in light, graphite in dark)
Cards, fields, tables
Inverted surface: table header, toast, read-only mode
Text on an inverted surface
Primary text
Secondary text, lead
Help text, placeholders, icons at rest
Dividers (decorative)
Stronger lines (decorative)
no counterpart Outlines of inputs and controls (at least 3:1)
Amber for small text and active marks
Focus ring

The roles live in /css/ci.css: light in :root, dark in .ci-dunkel, with data-theme dark and with a dark system setting. The values are matched with those of the marketing site. The back office panel deliberately stays light only.

Contrast pairs in dark mode

Every pair is calculated: semi-transparent text is mixed over the background first and then compared according to WCAG 2.x. Running text reaches at least 4.5:1 everywhere. Copper and success green sit only just above 3:1 on graphite, so they are marks or outlines, never text.

Contrast pairs light and dark with calculated ratio
Sample Foreground Background Use Light Dark Minimum Result
Body text 16.3:1 AAA 16.3:1 AAA 4.5:1 passed
Body text 17.7:1 AAA 15.0:1 AAA 4.5:1 passed
Body text 9.5:1 AAA 11.7:1 AAA 4.5:1 passed
Body text 10.4:1 AAA 10.9:1 AAA 4.5:1 passed
Body text 5.3:1 AA 7.9:1 AAA 4.5:1 passed
Body text 5.8:1 AA 7.5:1 AAA 4.5:1 passed
Body text 5.5:1 AA 8.6:1 AAA 4.5:1 passed
Body text 6.0:1 AA 7.9:1 AAA 4.5:1 passed
Body text 8.6:1 AAA 7.3:1 AAA 4.5:1 passed
Body text 17.7:1 AAA 13.7:1 AAA 4.5:1 passed
Body text 8.6:1 AAA 8.6:1 AAA 4.5:1 passed
Body text 5.1:1 AA 5.1:1 AA 4.5:1 passed
UI and graphics 5.3:1 AA 7.9:1 AAA 3.0:1 passed
UI and graphics 5.8:1 AA 7.5:1 AAA 3.0:1 passed
UI and graphics 16.3:1 AAA 16.3:1 AAA 3.0:1 passed
UI and graphics 17.7:1 AAA 15.0:1 AAA 3.0:1 passed
UI and graphics 4.7:1 AA 3.4:1 AA large 3.0:1 passed
UI and graphics 5.1:1 AA 3.1:1 AA large 3.0:1 passed
UI and graphics 4.4:1 AA large 3.6:1 AA large 3.0:1 passed
UI and graphics 4.8:1 AA 3.3:1 AA large 3.0:1 passed

Rules for dark mode

  • No pure black: the darkest background is graphite (#15171c), the surface above it #1c1f26. No pure white either: text is bone (#f6f4ef).
  • Depth comes from lighter surfaces and lines in bone transparency, not from black shadows.
  • The amber share stays small (guide value 8 %): amber is action, accent and small text, there as --volt instead of --volt-d.
  • Text on amber stays graphite, in both modes.
  • In dark mode copper and success green carry no text: the text stays bone, the colour shows an outline, dot or icon.
  • The mode follows the system setting or the switch of the marketing site; the back office panel stays light.

Live demo

The preview is a container with the class ci-dunkel. All components inside use the same classes as in light mode.

Components in dark mode

Buttons, pills, badges, card, error field and toast inside the scope ci-dunkel.

Trial · 14 days Read-only mode Beta New
expires soon approved expired Sec. 12 AÜG Info
Deadline engine

Seven sources, one traffic light. Reminder, warning, expired: automatic, separated by tenant.

Please enter a valid email address.

Assignment saved
Show HTML: Components in dark mode
<div class="ci-dunkel ci-dunkel-demo">
    <div class="ci-reihe">
        <button type="button" class="btn btn-volt">Create assignment</button>
        <button type="button" class="btn btn-ghost">Learn more</button>
        <button type="button" class="btn btn-danger">Delete permanently</button>
    </div>
    <div class="ci-reihe">
        <span class="pille pille-test">Trial · 14 days</span>
        <span class="pille pille-lesen">Read-only mode</span>
        <span class="pille pille-beta">Beta</span>
        <span class="pille pille-neu">New</span>
    </div>
    <div class="ci-reihe">
        <span class="badge b-volt">expires soon</span>
        <span class="badge b-ok">approved</span>
        <span class="badge b-copper">expired</span>
        <span class="badge b-ink">Sec. 12 AÜG</span>
        <span class="badge b-grau">Info</span>
    </div>
    <div class="ci-feld-reihe">
        <div class="ccard">
            <div class="ic"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/></svg></div>
            <h5>Deadline engine</h5>
            <p>Seven sources, one traffic light. Reminder, warning, expired: automatic, separated by tenant.</p>
        </div>
        <div class="feld">
            <label class="feld-label" for="dm-email">Email address<span class="pflicht" aria-hidden="true">*</span></label>
            <input class="inp" type="email" id="dm-email" name="email" value="name@" autocomplete="email" required aria-invalid="true" aria-describedby="dm-email-meldung">
            <p class="feld-fehler" id="dm-email-meldung"><svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"/></svg>Please enter a valid email address.</p>
        </div>
    </div>
    <div class="toast toast-ok" role="status">
        <svg class="ico" viewBox="0 0 24 24" aria-hidden="true"><path d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/></svg>                <span>Assignment saved</span>
    </div>
</div>

13 — Motion

Calmly in motion.

Duration and easing tokens, the permitted motions, the duty to honour prefers-reduced-motion and a demo with a switch.

Duration and curve

Three durations and one curve: 150 ms for hover and colour changes, 260 ms for overlays, 700 ms for fading in on load, all with --ease. The CSS contains tokens only, never numbers.

Permitted motions with duration and curve token
Motion Duration Curve Properties CSS
Fade in 700ms cubic-bezier(.2,.7,.2,1) opacity, transform
Hover lift 150ms cubic-bezier(.2,.7,.2,1) transform, box-shadow
Colour and shadow change 150ms cubic-bezier(.2,.7,.2,1) background-color, border-color, color
Overlays and toasts 260ms cubic-bezier(.2,.7,.2,1) opacity, transform

Further durations and curves (System D)

Addition for motion system D: press, colour mode, reveal on scroll, counting, lines and staggering. The values live in the :root of ci.css; they are in use on marketing site D (akw-bewegung.css/.js, the site-2027 stylesheets), back office and portals follow with their stages. Endless loops only run with a run lock (visible, not paused, no reduced motion), see motion D.

Motion tokens of System D
Token Value Use
Press and toggle
Colour-mode change, expand and collapse
Reveal on scroll, bars
Numbers count up (once)
Width animation of the main headline
Lines draw, the conduit extends (once)
In (same as the default curve)
Out
Flow, sheen, breathing
Stagger, at most eight steps
Distance when revealing

Permitted motions

  • Fade in

    On load, content rises 16 px and fades in (700 ms), staggered in 150 ms steps. One orchestrated build-up per page, no scattered micro-animations.

  • Hover lift

    Cards lift 2 px on hover and gain a shadow (150 ms). Buttons on the marketing site do not move; only shadow and colour change there.

  • Colour and shadow change

    Buttons, fields and links change background, outline and colour in 150 ms. Nothing moves in the process.

  • Overlays and toasts

    Menus, dialogs and toasts fade in within 260 ms (opacity, transform). Closing may happen at once.

Not permitted

  • Endless loops and flashing: nothing moves for longer than 5 seconds without a stop, nothing flashes more than three times a second.
  • Parallax, bounce and overshoot: curves come from --ease, motion ends softly.
  • Motion as the only cue: every change is also visible as text or state.
  • Moving text while reading (tickers, carousels without a stop).
  • Custom numbers in CSS: duration and curve only through tokens.

Marketing site D is live: every loop has a run lock, a pause button and an idle pause (WCAG 2.2.2). The earlier deviation of the previous marketing site no longer applies.

Motion D (marketing site D)

How marketing site D “Lichtwerk” moves: tell once, then rest. Loops exist only there, only while visible and always with a pause; content never depends on motion. The building blocks live in akw-bewegung.css/.js, the page rules in site-2027.css and site-2027-start.css.

Motion of marketing site D with type, timing and behaviour with reduced motion or pause
Motion Type Duration With “reduce motion” or pause
Kinetic H1: stretch and blur resolve to sharp once per view final state at once; the H1 starts visible (LCP)
Sheen across the glow word once per view 2,8 s omitted
Reveal on scroll, staggered once per view visible at once
Key figures count up once per view final value at once; screen readers only read the final value
Lines and bars draw themselves (line, timeline) once per view final state at once
Ring of the “current” lamp: three runs, then rest once per view 2,4 s × 3 static
Aura breathes loop with run lock 9–12 s static
Floor grid moves loop with run lock 3,6 s static; level “lean”: hidden
Energy core: orbit of the areas, sphere pulse, rotating rings loop with run lock 46 s / 4,8 s / 30–60 s static row of tiles with all areas
Line: pulse runs, nodes light up loop with run lock 7,2 s line static, nodes static
Tab change in the product tour feedback to an action jumps
Accordion opens smoothly (FAQ, details) feedback to an action opens at once
Page change (view transitions) feedback to an action off

Performance levels (automatic)

  • Full

    Desktop: glass with blur in header and menu, energy core with all areas, aura and grid in motion.

  • Lean

    Up to 900 px, with “reduce transparency” or data saver: no blur, aura static, no floor grid, six instead of 9 cards in orbit.

  • Calm

    With “reduce motion” or pause: everything in its final state, no loop.

Mandatory rules

  • Run lock: a loop only runs while its element and the tab are visible, no pause applies and reduced motion is not set (attribute data-laeuft, set by the script). A test forbids “infinite” without this lock.
  • The “Pause animations” button sits in header, menu and footer (WCAG 2.2.2); the browser remembers the choice (localStorage, with error handling).
  • After two minutes without input everything stops by itself; any input wakes the page again.
  • Only transform, opacity and filter move: no layout shift, no flashing, no parallax. Two deliberate exceptions on the home page: the sheen across the glow word shifts the gradient once (background-position, 2.8 s), and the sphere pulse changes its brightness via filter in its loop (only under the run lock).
  • The final state is in the HTML: without script, with pause and with reduced motion everything is complete at once; with pause the cross-fade on page change is off too.

Reduced motion is mandatory

Anyone who selects “reduce motion” in the operating system gets no animation and no transition: everything is in its final state at once. The rule lives in /css/ci.css and applies to every page that loads it. New motion needs no exception of its own.

Media block prefers-reduced-motion

The block is read verbatim from ci.css here, so it can never differ from the file.

No preview: the block works through the operating system setting.

Show CSS: Media block prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
  *,*::before,*::after{
    animation-duration:.001ms!important;
    animation-iteration-count:1!important;
    animation-delay:0s!important;
    transition-duration:.001ms!important;
    transition-delay:0s!important;
    scroll-behavior:auto!important;
  }
  .ccard:hover{transform:none}
}

Live demo with a switch

Three cards fade in one after another and lift on hover. The switch simulates “reduce motion” on the stage; the real system setting affects the whole page.

Fade in and hover

The switch lets you check the reduced mode without changing the system setting.

System setting: motion normal. The switch is off.

Deadline detected

Sample card for the fade in.

Time recorded

Sample card for the fade in.

Document checked

Sample card for the fade in.

Show HTML: Fade in and hover
<div class="ccard einblenden">…</div>
<div class="ccard einblenden einblenden-2">…</div>
<div class="ccard einblenden einblenden-3">…</div>

Rules for motion

How we move

  • One orchestrated fade in per page, staggered in 150 ms steps.
  • Only transform and opacity move; everything else changes colour or shadow.
  • Duration and curve from the tokens, reduced motion respected.
  • Hover lifts by 2 px at most.

Not like this

  • Endless loops, pulsing and flashing.
  • Fidgeting: elements that jump with every mouse movement.
  • Motion without a reduced variant.
  • Numbers instead of tokens in CSS.

14 — Accessibility

Usable by everyone.

WCAG 2.2 AA as a checklist: contrast, focus, target sizes, language, error messages as text and keyboard operation.

Checklist for WCAG 2.2 AA

The CI builds on WCAG 2.2, level AA. Each row names the success criterion and the rule that follows from it for design and build. Motion deliberately goes beyond AA.

WCAG 2.2 checkpoints with the rule in the CI
Topic Criterion Level Rule in the CI
Contrast 1.4.3 AA Running text at least 4.5:1, large text at least 3:1. Only approved pairs apply (colours, dark mode); amber is not text on bone.
Controls and graphics 1.4.11 AA Outlines of fields, focus rings and marks at least 3:1 against the background. The input outline is --muted, never the hairline.
Never colour alone 1.4.1 A Status carries text, shape or an icon: pill with a mark, error with icon and text, active item with a bar.
Focus visible 2.4.7 · 2.4.11 AA 2 px outline with an offset, never switched off. Fixed headers do not cover the focus (anchor offset in the CSS).
Target size 2.5.8 AA At least 24 × 24 px, touch elements 44 × 44 px. Spacing counts.
Keyboard 2.1.1 A Everything works with Tab, Enter and Space, no keyboard traps, a skip link at the top, a logical order.
Language 3.1.1 · 3.1.2 AA lang on the html element (de-AT, en-GB), foreign-language text with its own lang, one content per language.
Errors and help 3.3.1 · 3.3.3 AA The error message is text next to the field and linked via aria-describedby. It says what to do.
Names and roles 4.1.2 · 2.5.3 A Every field has a label (for and id). The accessible name contains the visible text; icons without text have an aria-label.
Motion 2.2.2 · 2.3.3 AAA prefers-reduced-motion stops animations. Nothing moves for longer than 5 seconds without a stop, nothing flashes.
Reflow 1.4.10 AA Content wraps without sideways scrolling of the page (test width 375 px). Wide tables and code blocks scroll inside a focusable region.

Calculated examples

From the same contrast class as the colours: the ratio in light and in dark mode, not estimated.

Contrast examples for outline, focus, amber text and help text
What for Pair Light Dark Minimum
Input outline --ci-kontur / --ci-flaeche 5.8:1 AA 7.5:1 AAA 3.0:1
Focus ring --ci-fokus / --ci-grund 16.3:1 AAA 16.3:1 AAA 3.0:1
Amber text (active state) --ci-akzent-text / --ci-flaeche 6.0:1 AA 7.9:1 AAA 4.5:1
Help text --ci-gedaempft / --ci-flaeche 5.8:1 AA 7.5:1 AAA 4.5:1

Target sizes

At least 24 × 24 px, for touch 44 × 44 px. The squares are drawn at their real size.

  • 24 × 24 px Minimum (WCAG 2.2, 2.5.8)
  • 44 × 44 px Touch target (rule of the CI)

Keyboard operation

Every element of the page works without a mouse, including the copy buttons of this manual and the scrollable tables.

Keys and what they do
Key Effect
Tab Move to the next operable element
Shift + Tab Move to the previous element
Enter Activate a button or link, copy a value
Space Activate a button, toggle a checkbox or switch
Arrow keys Scroll sideways inside a scrollable region (table, jump bar)
Esc Close an overlay, menu or dialog

Marking up language

The html element carries the language of the page (de-AT or en-GB). Foreign words and sentences get their own lang attribute so that screen readers pronounce them correctly.

Foreign-language term in text

The lang attribute on the enclosing element.

The legal term Arbeitskräfteüberlassung stays in German.

Show HTML: Foreign-language term in text
<p>The legal term <span lang="de">Arbeitskräfteüberlassung</span> stays in German.</p>

Rules for accessibility

How we build

  • Calculate contrast, do not estimate it.
  • Keep focus visible and test with the keyboard.
  • Show status with text and shape.
  • Respect reduced motion.

Not like this

  • Hairlines as an input outline.
  • Switching focus off with outline:0.
  • Colour as the only cue.
  • Tiny click areas below 24 px.

15 — White label

Who carries which brand?

Every output has exactly one branding source: the tenant (logo, app name and colours from the tenant profile) or the operator (EagleDesk). The table names the source per output and is checked against the code.

One output, one source

Every output carries either the tenant’s branding or the operator’s, in principle never a mix. The tenant appears with its own name and, where connected, with logo and primary colour; the table below shows where. The operator appears where EagleDesk itself speaks: the website, this handbook, platform emails and the platform.

Tenant Tenant branding

Comes centrally from the tenant profile: logo, app name and three colours. This is the intended single source; new outputs do not read company fields directly.

Operator Operator branding

EagleDesk: logo, wordmark and the colours of this handbook. Tenant colours and tenant logos never appear in these outputs.

Building blocks of tenant branding

Logo (light and dark), app name and three colours from the tenant profile make up the branding. The column “Effective today in” lists the main outputs that read the value.

Building blocks of tenant branding and the outputs in which they take effect today
Block Effective today in
Logo letterhead of the PDF documents, back office, careers page
Logo (dark) in no output that is wired up (at most as a placeholder in document templates)
Primary colour letterhead of the PDF documents, Employee Web App and customer portal, business card, email signature, careers page, public tenant pages (status, approval and signature links), whistleblowing channel
Secondary colour in no output that is wired up (at most as a placeholder in document templates)
Accent colour in no output that is wired up (at most as a placeholder in document templates)
App name back office, Employee Web App and customer portal, letterhead of the PDF documents, careers page, public tenant pages (status, approval and signature links), whistleblowing channel

Which output carries which branding

Exactly one source per row. The statements are checked against the code and updated when it changes.

Branding source per output: tenant or operator
Output Source What appears Note
Tenant branding
Section 11 employment statement (PDF) Tenant Logo or app name and primary colour in the letterhead, company details in header and footer. —
Section 12 notification (PDF) Tenant Like the employment statement: logo or app name and primary colour in the letterhead, company details in header and footer. —
Tenant invoice (PDF) Tenant Logo or app name, primary colour, company and bank details; a location can have its own header, footer and bank details. This is the tenant’s invoice to its customer, not the operator’s invoice to the tenant.
Workplace information (PDF) Tenant Like the employment statement: logo or app name and primary colour in the letterhead, company details in header and footer. —
Employee Web App Tenant App name and primary colour in the header bar and on the main button; the text on it is white or graphite. Today without a tenant logo in the header bar; the logo there is a target picture.
Customer portal Tenant App name and primary colour in the header bar and on the main button; the text on it is white or graphite. Today without a tenant logo in the header bar; the logo there is a target picture.
Tenant emails Tenant Sender name (app name) and sender address of the tenant, where stored; sending runs only through the tenant’s own SMTP access. Without a configured access the email waits; the platform never sends it as a substitute. The emails are plain and have no logo header.
Business card (PDF) Tenant Company name and primary colour of the tenant, plus contact details of the person and the address of the company. —
Email signature Tenant Name of the person and links in the tenant’s primary colour, plus company name and contact details. —
Back office: logo and app name Tenant The tenant logo in the top bar, if one is stored; the tenant’s app name appears in the page title (browser tab). Without a stored tenant logo the top bar shows the EagleDesk logo.
Operator branding
Back office: accent colour Operator Always amber; the tenant’s primary colour has no effect in the back office. The back office is light; graphite and bone stay fixed.
Favicon and app icon of back office and portals Operator The EagleDesk mark, also as the app icon when the web app or customer portal is added to the home screen. The app name remains the tenant’s. There is no tenant favicon or app icon today.
Website Operator EagleDesk: logo, wordmark, graphite, bone and amber. —
Brand handbook (this page) Operator EagleDesk, fixed to light mode. —
Platform emails Operator Graphite header with wordmark, amber stripe and the operator’s mandatory details in the footer: trial, contract, invitations, system notices. Sent through the platform’s mail access, never through a tenant’s SMTP access. The back office’s sign-in and security emails (password, email confirmation) use the standard layout.
Platform invoices Operator Invoices from the operator to the tenant for the subscription, shown in the back office as a list with a link to the invoice at the payment provider. Issued by the operator’s payment provider, not from the tenant’s branding.
Platform console Operator Always the operator brand; the page title names “Platform”. Never the colour or logo of a tenant. A visible brand line “Platform” next to the logo is a target picture; blocked for search engines (noindex).

Rules for branding

  • Target: everything tenant-related comes centrally from the tenant profile. New outputs do not read company fields directly; a few older places still do.
  • The tenant colour is an accent: line in the letterhead, header bar and main button in the portal, name in the signature. Surfaces and body text stay neutral, so legibility does not depend on the tenant’s colour choice.
  • On the tenant colour, text is white or graphite, whichever gives the higher contrast (section “Portals”).
  • The EagleDesk logo does not appear in tenant outputs (exceptions: the fall-back logo in the back office without a tenant logo, the favicon and the app icon).
  • Operator outputs never use the colour or logo of a tenant, even when a tenant is part of the context.
  • Tenant emails never go through the platform’s access; platform emails never through a tenant’s access.
  • In the back office amber stays the accent colour; app name and logo are the tenant’s.

Known limits

  • Secondary and accent colour can be maintained in the tenant profile but have no effect in any output that is wired up yet.
  • The tenant logo appears in the letterhead of the PDFs, in the back office and on the careers page, not in the portals and not in emails.
  • A second logo variant for dark surfaces can be stored in the tenant profile but is not read by any output that is wired up yet.

“powered by” is a target picture

A discreet “powered by EagleDesk” at the bottom of the page (10 px at most) is intended as an option if the operator allows it. The product has neither a switch nor an output for it; the models in the section “In use” show it only as a target picture.

16 — Documents and PDF

Documents at a glance.

Letterhead structure, type and table style in the PDF, and four examples (section 11 employment statement, section 12 notification, invoice, timesheet) as A4 models of the fictitious Musterfirma Personal GmbH. All values are placeholders; the template in the system is always authoritative.

Target picture, not the current state

The models show the target picture of the document design with the fictitious Musterfirma Personal GmbH. Where today’s PDF layout differs, it is noted (“Today”). This handbook does not change the templates in the system.

Everything in square brackets is a placeholder. The samples contain no real data, no VAT number and no company register number.

Structure of the letterhead

The zones of a document from top to bottom. Fold and punch marks sit at the left edge.

Structure of the letterhead · Example, abridged – the template in the system is authoritative
Zones of a document with rule and current state
No. Zone Rule Today
1 Logo zone Top left the tenant logo (in the product at most 46 px high and 220 px wide) or, without a logo, the app name in the primary colour. To its right the company details of the tenant. Yes
2 Sender line and address field A small line with company and address above the address field (window envelope). Today the sender is a block at the top right of the header; there is no separate sender line. No
3 Title A level-1 heading with the document type, below it a grey line with number, date and legal basis, for example “pursuant to § 12 AÜG”. Yes
4 Content Sections with a level-2 heading, details as a two-column table (label left, value right), items as a table. Yes
5 Footer with mandatory details Company, VAT number, company register number and IBAN of the tenant in one line, “Page n / N” on the right. If a detail is missing in the tenant profile, it is left out. Today the line also carries the document name and a confidentiality note. Partly
6 Fold and punch marks Small ticks at the left edge for folding and punching (form B of DIN 5008: fold marks at 105 and 210 mm, punch mark at 148.5 mm). They belong on the tenant’s letterhead paper; the system does not draw them. No

Type in the PDF

Target picture: IBM Plex Sans in two weights (400 and 600). The samples are shown at real size (1 pt = 1.33 px) and include the smallest permitted size.

Type roles in the PDF with size, weight and sample
Role Size Weight Sample
Title 14 pt 600 Temporary agency work 1,234.50
Section heading 11 pt 600 Temporary agency work 1,234.50
Body text 10 pt 400 Temporary agency work 1,234.50
Table text 9 pt 400 Temporary agency work 1,234.50
Table header 9 pt 600 Temporary agency work 1,234.50
Footer 9 pt 400 Temporary agency work 1,234.50

The smallest type in the PDF is 9 pt. Below that even a footer is hard to read on paper.

Today: type in the PDF

Today the PDF layout uses DejaVu Sans, a font bundled with the PDF generator; AK Sans would need to be embedded as a TrueType file. Body text is 11 px (8.25 pt), the footer 8 px (6 pt) and thus below the minimum. The handbook shows the target picture; changing the layout is a separate undertaking.

Table style in the PDF

Calm and print-friendly: no filled areas, and colour never carries the meaning on its own.

  • Header row in AK Sans 600 with a graphite line below it, without a fill (saves toner and stays legible in black and white).
  • Rows with a fine line in --line-2, no zebra striping.
  • Text left-aligned, numbers and amounts right-aligned with the same number of decimals.
  • Total row with a line above and bold type.
Example: service table · Example, abridged – the template in the system is authoritative

Today: table style

Today the PDF layout fills the table header with a light amber tone; the target picture omits it.

Four examples

A4 models of the fictitious Musterfirma Personal GmbH with demo branding. The header and the first sections are shown; the rest is abridged with “…”.

Section 11 employment statement · Example, abridged – the template in the system is authoritative
Section 12 notification · Example, abridged – the template in the system is authoritative
Invoice · Example, abridged – the template in the system is authoritative
Timesheet · Example, abridged – the template in the system is authoritative

17 — Portals

Small, clear, tappable.

Employee Web App and customer portal at 375 px width, with the rules for target sizes, tenant colour and contrast.

Rules for both portals

The models below show the layout at 375 px width. Surfaces and type are the target picture in CI tokens; the tenant colour comes from the tenant profile.

  • Tappable targets are at least 44 px high. In the product a main button is at least 44 px high (14 px padding top and bottom plus 16 px type); the buttons in the header bar (help, sign out) are only 32 px high and therefore fall short of the rule.
  • The tenant colour is only an accent: header bar, main button, edge lines, active tabs and progress. Cards, text and input fields stay neutral.
  • On the tenant colour, text is white or graphite, whichever gives the higher contrast (see below).
  • The standard fields (text, password, date, number, select, text area) use 16 px type so that smartphones do not zoom when tapped.
  • The content fits into 375 px width without horizontal scrolling; tiles wrap to one column when space runs out.
  • The header bar shows the tenant’s app name. A tenant logo in the header bar is a target picture (section “In use”); in the product only the name appears there today.

Employee Web App

Home, assignment schedule and entering hours. All details are placeholders.

Home · Model
Schedule · Model
Enter hours · Model

Customer portal

Approving hours: one card per assignment with one main action “Approve”; rejecting is the second choice.

Hours approval · Model

Text on the tenant colour

For text on the tenant colour the portal chooses white or graphite, whichever gives the higher contrast. With an amber that is too light, that is graphite. The values are calculated according to WCAG 2.x.

Chosen text colour and contrast for four example tenant colours
Tenant colour Text Contrast Sample
Light amber #f59e0b Graphite 8.3:1 AAA Approve
Dark petrol #1d5d7a White 7.2:1 AAA Approve
Orange #e0603a Graphite 5.0:1 AA Approve
Mid grey (limit case) #7a7a7a White 4.2:1 AA large Approve

Limit of the colour choice

Limit: the portal chooses only between these two text colours. If a tenant colour is such that neither reaches 4.5:1 (example: mid grey), the better choice stays, and the tenant profile does not warn. In the PDF the primary colour is the line and, without a logo, the colour of the app name on white; nothing is checked there. Recommendation: check the tenant colour against white and graphite when setting it up.

18 — Filament admin

The back office in CI style.

The panel’s class catalogue is built from the stylesheet on every request. Plus live examples, a sidebar and a table model, and the rule: Filament components before custom views.

Rules for back office pages

  • Filament components before custom Blade views: sections, tables, badges, buttons and forms come from Filament. A custom view is the exception.
  • No Tailwind utilities in custom views: Filament does not ship them there, so they have no effect. Custom views use only the akw classes of the panel stylesheet (or the akw-tw wrapper, which reproduces a few utilities).
  • Colours, fonts and spacing come from the CI tokens; the back office is light, the accent is amber, graphite and bone form the ground.
  • All texts live in the language files (German and English), not in the Blade view; the back office consistently says “Mitarbeiter:in” in German.
  • A new class belongs in the panel stylesheet, not in the view. It then appears automatically in the catalogue below.

Sidebar and table

Two models from HTML and CSS with the values of the panel stylesheet: group heading in AK Mono, active item with an amber tint, cards with a 14 px radius. On the desktop the logo sits in the top bar; it appears in the sidebar only on smartphones.

Sidebar · Model
Table · Model

Live examples

Building blocks from the panel stylesheet, rendered here without Filament. Every akw class in these examples is in the catalogue and works without a Filament selector. Banners and announcements are in the section “Components”.

In the panel these places hold Filament components (section, button, badge); the snippet shows only the akw classes.

Workflow bar

The core workflow on the dashboard: next step and six stations with open tasks.

Show HTML: Workflow bar
<div class="akw-ablauf-rahmen">
    <div class="akw-ablauf-next">
        <span class="akw-ablauf-next-body">
            <span class="akw-ablauf-next-label">Next step</span>
            <span class="akw-ablauf-next-titel">Check hours</span>
            <span class="akw-ablauf-next-text">Timesheets for several assignments are ready for approval.</span>
        </span>
    </div>
    <ol class="akw-ablauf-leiste" aria-label="Core workflow">
                                                <li class="akw-ablauf-li">
                <a class="akw-ablauf-schritt is-offen" href="#">
                    <span class="akw-ablauf-nr">Step 1</span>
                    <span class="akw-ablauf-titel">Request</span>
                    <span class="akw-ablauf-zahl">2</span>
                    <span class="akw-ablauf-text">open</span>
                </a>
            </li>
                                                <li class="akw-ablauf-li">
                <a class="akw-ablauf-schritt is-offen" href="#">
                    <span class="akw-ablauf-nr">Step 2</span>
                    <span class="akw-ablauf-titel">Assignment</span>
                    <span class="akw-ablauf-zahl">1</span>
                    <span class="akw-ablauf-text">open</span>
                </a>
            </li>
                                                <li class="akw-ablauf-li">
                <a class="akw-ablauf-schritt is-offen" href="#">
                    <span class="akw-ablauf-nr">Step 3</span>
                    <span class="akw-ablauf-titel">Hours</span>
                    <span class="akw-ablauf-zahl">5</span>
                    <span class="akw-ablauf-text">open</span>
                </a>
            </li>
                                                <li class="akw-ablauf-li">
                <a class="akw-ablauf-schritt is-offen" href="#">
                    <span class="akw-ablauf-nr">Step 4</span>
                    <span class="akw-ablauf-titel">Approval</span>
                    <span class="akw-ablauf-zahl">3</span>
                    <span class="akw-ablauf-text">open</span>
                </a>
            </li>
                                                <li class="akw-ablauf-li">
                <a class="akw-ablauf-schritt is-offen" href="#">
                    <span class="akw-ablauf-nr">Step 5</span>
                    <span class="akw-ablauf-titel">Invoice</span>
                    <span class="akw-ablauf-zahl">1</span>
                    <span class="akw-ablauf-text">open</span>
                </a>
            </li>
                                                <li class="akw-ablauf-li">
                <a class="akw-ablauf-schritt is-offen" href="#">
                    <span class="akw-ablauf-nr">Step 6</span>
                    <span class="akw-ablauf-titel">Payment</span>
                    <span class="akw-ablauf-zahl">4</span>
                    <span class="akw-ablauf-text">open</span>
                </a>
            </li>
                    </ol>
</div>

Traffic-light pills

Four states, each with text: colour reinforces the meaning, it never carries it alone.

Within range Tight Exceeded No data
Show HTML: Traffic-light pills
<div class="ci-reihe">
    <span class="akw-kalk-ampel akw-kalk-ampel--gruen">Within range</span>
    <span class="akw-kalk-ampel akw-kalk-ampel--gelb">Tight</span>
    <span class="akw-kalk-ampel akw-kalk-ampel--rot">Exceeded</span>
    <span class="akw-kalk-ampel akw-kalk-ampel--grau">No data</span>
</div>

Key figure tiles

Small cards with a label and a value in AK Mono; a negative value gets the class for deviations.

Revenue [Amount]
Costs [Amount]
Contribution margin [−Amount]
Show HTML: Key figure tiles
<div class="akw-db">
    <div class="akw-db-kennzahlen">
                            <div class="akw-db-kz">
                <span class="akw-db-kz-label">Revenue</span>
                <span class="akw-db-kz-wert">[Amount]</span>
            </div>
                            <div class="akw-db-kz">
                <span class="akw-db-kz-label">Costs</span>
                <span class="akw-db-kz-wert">[Amount]</span>
            </div>
                            <div class="akw-db-kz">
                <span class="akw-db-kz-label">Contribution margin</span>
                <span class="akw-db-kz-wert akw-db-neg">[−Amount]</span>
            </div>
                    </div>
</div>

Setup assistant

Progress bar and list of steps with example steps: completed steps struck through, open ones with an action.

1 of 3 steps completed
  • Company details (done) Name, address and VAT number in the tenant profile.
  • Logo and colour Upload the logo and choose the primary colour. Open
  • Mail access Set up your own SMTP access. Open
Show HTML: Setup assistant
<div class="akw-einrichtung-kopf">
    <span class="akw-einrichtung-zaehler">1 of 3 steps completed</span>
    <span class="akw-einrichtung-balken"><span class="akw-einrichtung-balken-wert" style="width:33%"></span></span>
</div>
<ul class="akw-einrichtung-liste" role="list">
                                    <li class="akw-einrichtung-schritt is-erledigt">
            <span class="akw-einrichtung-ic" aria-hidden="true">✓</span>
            <span class="akw-einrichtung-body">
                <span class="akw-einrichtung-titel">Company details<span class="sr-only"> (done)</span></span>
                <span class="akw-einrichtung-text">Name, address and VAT number in the tenant profile.</span>
            </span>
                            </li>
                                    <li class="akw-einrichtung-schritt">
            <span class="akw-einrichtung-ic" aria-hidden="true">2</span>
            <span class="akw-einrichtung-body">
                <span class="akw-einrichtung-titel">Logo and colour</span>
                <span class="akw-einrichtung-text">Upload the logo and choose the primary colour.</span>
            </span>
                                    <span class="akw-einrichtung-aktion"><a class="btn btn-ghost" href="#">Open</a></span>
                            </li>
                                    <li class="akw-einrichtung-schritt">
            <span class="akw-einrichtung-ic" aria-hidden="true">3</span>
            <span class="akw-einrichtung-body">
                <span class="akw-einrichtung-titel">Mail access</span>
                <span class="akw-einrichtung-text">Set up your own SMTP access.</span>
            </span>
                                    <span class="akw-einrichtung-aktion"><a class="btn btn-ghost" href="#">Open</a></span>
                            </li>
            </ul>

Kanban column

A column with a counter and cards, next to it an empty column with a dashed border.

New 2
[Name]
[Position]
[Name]
[Position]
Documents complete
In review 0
No cards
Show HTML: Kanban column
<div class="akw-kanban" role="region" tabindex="0" aria-label="Board with two columns">
            <div class="akw-kanban-col">
    <div class="akw-kanban-colhead">
        <span class="akw-kanban-coltitle">New</span>
        <span class="akw-kanban-count">2</span>
    </div>
    <div class="akw-kanban-cards">
                                                                    <div class="akw-kanban-card">
                    <div class="akw-kanban-card-title">[Name]</div>
                    <div class="akw-kanban-card-sub">[Position]</div>
                                                    </div>
                                            <div class="akw-kanban-card">
                    <div class="akw-kanban-card-title">[Name]</div>
                    <div class="akw-kanban-card-sub">[Position]</div>
                                                            <div class="akw-kanban-card-ok">Documents complete</div>
                                                    </div>
                                                        </div>
</div>
            <div class="akw-kanban-col">
    <div class="akw-kanban-colhead">
        <span class="akw-kanban-coltitle">In review</span>
        <span class="akw-kanban-count">0</span>
    </div>
    <div class="akw-kanban-cards">
                                    <div class="akw-kanban-empty">No cards</div>
                            </div>
</div>
    </div>

Class catalogue

This catalogue is built from the panel’s stylesheet on every request: a new class appears here by itself, a removed one disappears. “Standalone” means there is a rule for the class that requires neither Filament (classes and variables) nor dark mode; only such classes can be shown as a live example without the panel.

769 classes in 51 families, 765 of them standalone.

Families of akw classes with count and class list
Family Meaning Classes Standalone List
akw-ablauf-* Dashboard workflow bar 23 23 / 23
Show: akw-ablauf
  • akw-ablauf-bald
  • akw-ablauf-chip
  • akw-ablauf-fehlend
  • akw-ablauf-fehlend-svg
  • akw-ablauf-leiste
  • akw-ablauf-li
  • akw-ablauf-next
  • akw-ablauf-next-aktion
  • akw-ablauf-next-body
  • akw-ablauf-next-ic
  • akw-ablauf-next-label
  • akw-ablauf-next-svg
  • akw-ablauf-next-text
  • akw-ablauf-next-titel
  • akw-ablauf-nr
  • akw-ablauf-rahmen
  • akw-ablauf-schritt
  • akw-ablauf-text
  • akw-ablauf-titel
  • akw-ablauf-warn
  • akw-ablauf-weitere
  • akw-ablauf-weitere-label
  • akw-ablauf-zahl
akw-ankuendigung-* Platform announcements 9 9 / 9
Show: akw-ankuendigung
  • akw-ankuendigung
  • akw-ankuendigung--dringend
  • akw-ankuendigung--neu
  • akw-ankuendigung--wartung
  • akw-ankuendigung-inhalt
  • akw-ankuendigung-schliessen
  • akw-ankuendigung-sprache
  • akw-ankuendigung-text
  • akw-ankuendigung-titel
akw-ankuendigungen-* Container of the announcements 1 1 / 1
Show: akw-ankuendigungen
  • akw-ankuendigungen
akw-anruf-* Caller display of the telephony integration 17 17 / 17
Show: akw-anruf
  • akw-anruf-abschnitt
  • akw-anruf-aktionen
  • akw-anruf-foto
  • akw-anruf-hinweis
  • akw-anruf-karte
  • akw-anruf-karte--entwurf
  • akw-anruf-knopf
  • akw-anruf-knopf--haupt
  • akw-anruf-kopf
  • akw-anruf-liste
  • akw-anruf-meta
  • akw-anruf-name
  • akw-anruf-notiz
  • akw-anruf-person
  • akw-anruf-schliessen
  • akw-anruf-stapel
  • akw-anruf-titel
akw-ansicht-* View switcher 1 0 / 1
Show: akw-ansicht
  • akw-ansicht-aktiv (panel only)
akw-anzeige-* Comparison of job ad versions 3 3 / 3
Show: akw-anzeige
  • akw-anzeige-vergleich
  • akw-anzeige-vergleich-leer
  • akw-anzeige-vergleich-marke
akw-azg-* Working time warning 1 1 / 1
Show: akw-azg
  • akw-azg-warnung
akw-azm-* Working time notice 1 1 / 1
Show: akw-azm
  • akw-azm-hinweis
akw-befehl-* Command palette 28 28 / 28
Show: akw-befehl
  • akw-befehl-aktionen
  • akw-befehl-beschreibung
  • akw-befehl-eingabe
  • akw-befehl-eintrag
  • akw-befehl-eintrag-knopf
  • akw-befehl-fehler
  • akw-befehl-feld
  • akw-befehl-feld-label
  • akw-befehl-felder
  • akw-befehl-h
  • akw-befehl-inhalt
  • akw-befehl-ki
  • akw-befehl-ki-knopf
  • akw-befehl-kopfknopf
  • akw-befehl-kopfknopf-text
  • akw-befehl-kuerzel
  • akw-befehl-leer
  • akw-befehl-link
  • akw-befehl-liste
  • akw-befehl-marke
  • akw-befehl-maske
  • akw-befehl-meldung
  • akw-befehl-meldung--fehler
  • akw-befehl-sr
  • akw-befehl-stern
  • akw-befehl-tabelle
  • akw-befehl-tipp
  • akw-befehl-zusammenfassung
akw-br-* Demand radar (also used by the margin radar) 43 43 / 43
Show: akw-br
  • akw-br-angebot
  • akw-br-betrag
  • akw-br-druck-0
  • akw-br-druck-1
  • akw-br-druck-2
  • akw-br-druck-3
  • akw-br-gruende
  • akw-br-hebel
  • akw-br-hebel-aktionen
  • akw-br-hebel-eintrag
  • akw-br-hebel-kopf
  • akw-br-hebel-zahlen
  • akw-br-hinweis
  • akw-br-kennzahl
  • akw-br-kennzahl-label
  • akw-br-kennzahl-sub
  • akw-br-kennzahl-wert
  • akw-br-kennzahlen
  • akw-br-knopf
  • akw-br-kunde
  • akw-br-kw
  • akw-br-leer
  • akw-br-legende
  • akw-br-legende-eintrag
  • akw-br-leise
  • akw-br-link
  • akw-br-matrix
  • akw-br-muster
  • akw-br-nachfrage
  • akw-br-name
  • akw-br-quali
  • akw-br-rang
  • akw-br-rechts
  • akw-br-scroll
  • akw-br-spitze
  • akw-br-sticky
  • akw-br-stufe-0
  • akw-br-stufe-1
  • akw-br-stufe-2
  • akw-br-stufe-3
  • akw-br-table
  • akw-br-warn
  • akw-br-zelle
akw-cell-* Day status cells of the planning board 13 13 / 13
Show: akw-cell
  • akw-cell--abweichung
  • akw-cell--feiertag
  • akw-cell--grau
  • akw-cell--rot
  • akw-cell--tagesart
  • akw-cell--tagesart-danger
  • akw-cell--tagesart-gray
  • akw-cell--tagesart-info
  • akw-cell--tagesart-primary
  • akw-cell--tagesart-success
  • akw-cell--tagesart-warning
  • akw-cell--weiss
  • akw-cell--wochenende
akw-db-* Contribution margin and key figures 19 18 / 19
Show: akw-db
  • akw-db
  • akw-db-block
  • akw-db-block-titel
  • akw-db-code
  • akw-db-formel
  • akw-db-info (panel only)
  • akw-db-kennzahlen
  • akw-db-kz
  • akw-db-kz-label
  • akw-db-kz-wert
  • akw-db-legende
  • akw-db-leise
  • akw-db-neg
  • akw-db-nur-protokoll
  • akw-db-scroll
  • akw-db-seite
  • akw-db-table
  • akw-db-warn
  • akw-db-zahl
akw-dc-* Deal check (margin guard) 14 14 / 14
Show: akw-dc
  • akw-dc
  • akw-dc--gelb
  • akw-dc--grau
  • akw-dc--gruen
  • akw-dc--rot
  • akw-dc-ampel
  • akw-dc-freigabe
  • akw-dc-hinweis
  • akw-dc-kommentar
  • akw-dc-kopf
  • akw-dc-link
  • akw-dc-text
  • akw-dc-zahl
  • akw-dc-zahlen
akw-ds-* Dispatcher statistics 2 1 / 2
Show: akw-ds
  • akw-ds-info (panel only)
  • akw-ds-schnitt
akw-einrichtung-* Setup assistant 14 14 / 14
Show: akw-einrichtung
  • akw-einrichtung-aktion
  • akw-einrichtung-balken
  • akw-einrichtung-balken-wert
  • akw-einrichtung-body
  • akw-einrichtung-fertig
  • akw-einrichtung-ic
  • akw-einrichtung-ic-svg
  • akw-einrichtung-kopf
  • akw-einrichtung-lesemodus
  • akw-einrichtung-liste
  • akw-einrichtung-schritt
  • akw-einrichtung-text
  • akw-einrichtung-titel
  • akw-einrichtung-zaehler
akw-einst-* Settings: topic tiles 19 19 / 19
Show: akw-einst
  • akw-einst
  • akw-einst-bereich
  • akw-einst-bereiche
  • akw-einst-body
  • akw-einst-h
  • akw-einst-hinweis
  • akw-einst-ic
  • akw-einst-intro
  • akw-einst-kachel
  • akw-einst-kopf
  • akw-einst-label
  • akw-einst-leer
  • akw-einst-li
  • akw-einst-pfeil
  • akw-einst-raster
  • akw-einst-sr
  • akw-einst-suche
  • akw-einst-svg
  • akw-einst-text
akw-eu-* Assignment overview 28 28 / 28
Show: akw-eu
  • akw-eu
  • akw-eu-datum
  • akw-eu-feld
  • akw-eu-filter
  • akw-eu-gruppe
  • akw-eu-gruppe-badges
  • akw-eu-gruppe-titel
  • akw-eu-gruppe-zahlen
  • akw-eu-hinweis
  • akw-eu-label
  • akw-eu-leer
  • akw-eu-leer-icon
  • akw-eu-leer-titel
  • akw-eu-leerzustand
  • akw-eu-link
  • akw-eu-liste
  • akw-eu-liste-wert
  • akw-eu-name
  • akw-eu-scroll
  • akw-eu-stat
  • akw-eu-stat-label
  • akw-eu-stat-text
  • akw-eu-stat-wert
  • akw-eu-stats
  • akw-eu-sub
  • akw-eu-summary
  • akw-eu-table
  • akw-eu-zahl
akw-fg-* Approvals 19 19 / 19
Show: akw-fg
  • akw-fg
  • akw-fg-aktionen
  • akw-fg-karte
  • akw-fg-kopf
  • akw-fg-leer
  • akw-fg-liste
  • akw-fg-meta
  • akw-fg-push
  • akw-fg-push-knopf
  • akw-fg-push-text
  • akw-fg-status
  • akw-fg-tab
  • akw-fg-tabs
  • akw-fg-text
  • akw-fg-titel
  • akw-fg-typ
  • akw-fg-zaehler
  • akw-fg-zahl
  • akw-fg-zahlen
akw-fibu-* Accounting audit report 6 6 / 6
Show: akw-fibu
  • akw-fibu-link
  • akw-fibu-liste
  • akw-fibu-name
  • akw-fibu-scroll
  • akw-fibu-table
  • akw-fibu-zahl
akw-glbg-* Job ad: equal treatment check 5 5 / 5
Show: akw-glbg
  • akw-glbg-befund
  • akw-glbg-befund--fehler
  • akw-glbg-befunde
  • akw-glbg-maengel
  • akw-glbg-ok
akw-hilfe-* Help window 20 20 / 20
Show: akw-hilfe
  • akw-hilfe-block
  • akw-hilfe-doku
  • akw-hilfe-fuss
  • akw-hilfe-h
  • akw-hilfe-hinweis
  • akw-hilfe-inhalt
  • akw-hilfe-knopf
  • akw-hilfe-kurz
  • akw-hilfe-leer
  • akw-hilfe-marke
  • akw-hilfe-schritte
  • akw-hilfe-sr
  • akw-hilfe-suche
  • akw-hilfe-tipps
  • akw-hilfe-titel
  • akw-hilfe-treffer
  • akw-hilfe-treffer-knopf
  • akw-hilfe-treffer-kurz
  • akw-hilfe-treffer-titel
  • akw-hilfe-zurueck
akw-isk-* Insights: key figure tiles 1 1 / 1
Show: akw-isk
  • akw-isk-kachel
akw-kalender-* Appointment calendar 15 15 / 15
Show: akw-kalender
  • akw-kalender
  • akw-kalender-anzahl
  • akw-kalender-bar
  • akw-kalender-betreff
  • akw-kalender-bezug
  • akw-kalender-datum
  • akw-kalender-eintrag
  • akw-kalender-grid
  • akw-kalender-kopf
  • akw-kalender-legende
  • akw-kalender-nav
  • akw-kalender-prio
  • akw-kalender-tag
  • akw-kalender-titel
  • akw-kalender-zeit
akw-kalk-* Calculation and rate tables with traffic light 11 11 / 11
Show: akw-kalk
  • akw-kalk
  • akw-kalk-ampel
  • akw-kalk-ampel--gelb
  • akw-kalk-ampel--grau
  • akw-kalk-ampel--gruen
  • akw-kalk-ampel--rot
  • akw-kalk-leer
  • akw-kalk-leise
  • akw-kalk-meta
  • akw-kalk-tabelle
  • akw-kalk-warnungen
akw-kanban-* Kanban boards 21 20 / 21
Show: akw-kanban
  • akw-kanban
  • akw-kanban-alert
  • akw-kanban-bar
  • akw-kanban-barbtn
  • akw-kanban-card
  • akw-kanban-card-ok
  • akw-kanban-card-sub
  • akw-kanban-card-title
  • akw-kanban-cardhead
  • akw-kanban-cards
  • akw-kanban-col
  • akw-kanban-colhead
  • akw-kanban-coltitle
  • akw-kanban-count
  • akw-kanban-dnd (panel only)
  • akw-kanban-dropbtn
  • akw-kanban-empty
  • akw-kanban-grip
  • akw-kanban-hint
  • akw-kanban-nodrop
  • akw-kanban-select
akw-karte-* Map 27 27 / 27
Show: akw-karte
  • akw-karte
  • akw-karte-eintraege
  • akw-karte-hinweis
  • akw-karte-leer
  • akw-karte-legende
  • akw-karte-legende-eintrag
  • akw-karte-link
  • akw-karte-liste
  • akw-karte-map
  • akw-karte-ohne
  • akw-karte-ort
  • akw-karte-popup
  • akw-karte-popup-kopf
  • akw-karte-popup-liste
  • akw-karte-popup-zusatz
  • akw-karte-punkt
  • akw-karte-punkt--filialen
  • akw-karte-punkt--kunden
  • akw-karte-punkt--leads
  • akw-karte-punkt--marktstellen
  • akw-karte-punkt--vakanzen
  • akw-karte-punkt--verfuegbare_ma
  • akw-karte-quelle
  • akw-karte-scroll
  • akw-karte-tabelle
  • akw-karte-zahl
  • akw-karte-zusatz
akw-ki-* AI: sources and transcript 2 2 / 2
Show: akw-ki
  • akw-ki-quellen
  • akw-ki-transkript
akw-kic-* AI insights chat 19 19 / 19
Show: akw-kic
  • akw-kic
  • akw-kic-aktionen
  • akw-kic-ampel
  • akw-kic-antwort
  • akw-kic-chips
  • akw-kic-code
  • akw-kic-diagramm
  • akw-kic-frage
  • akw-kic-grundlage
  • akw-kic-ki
  • akw-kic-kopf
  • akw-kic-label
  • akw-kic-leer
  • akw-kic-liste
  • akw-kic-meta
  • akw-kic-text
  • akw-kic-verlauf
  • akw-kic-vorschlaege
  • akw-kic-zug
akw-kp-* Customer portfolio 16 16 / 16
Show: akw-kp
  • akw-kp-absichern
  • akw-kp-ausbauen
  • akw-kp-beenden_pruefen
  • akw-kp-feld
  • akw-kp-feld-kopf
  • akw-kp-feld-text
  • akw-kp-feld-titel
  • akw-kp-feld-zahl
  • akw-kp-hinweis
  • akw-kp-leer
  • akw-kp-link
  • akw-kp-liste
  • akw-kp-matrix
  • akw-kp-name
  • akw-kp-preis_nachverhandeln
  • akw-kp-werte
akw-link-* External links 1 1 / 1
Show: akw-link
  • akw-link-extern
akw-lizenz-* Licence status banner 7 7 / 7
Show: akw-lizenz
  • akw-lizenz-banner
  • akw-lizenz-banner--gekuendigt
  • akw-lizenz-banner--nur_lesen
  • akw-lizenz-banner--test
  • akw-lizenz-banner-link
  • akw-lizenz-banner-links
  • akw-lizenz-banner-text
akw-ma-* Month-end closing 6 6 / 6
Show: akw-ma
  • akw-ma-feld
  • akw-ma-filter
  • akw-ma-label
  • akw-ma-leise
  • akw-ma-raster
  • akw-ma-text
akw-mr-* Margin radar 17 17 / 17
Show: akw-mr
  • akw-mr-ampel
  • akw-mr-ampel--gelb
  • akw-mr-ampel--gruen
  • akw-mr-ampel--rot
  • akw-mr-check
  • akw-mr-detail
  • akw-mr-h
  • akw-mr-hinweis
  • akw-mr-label
  • akw-mr-leer
  • akw-mr-leise
  • akw-mr-leiste
  • akw-mr-link
  • akw-mr-segmente
  • akw-mr-select
  • akw-mr-szenario-marke
  • akw-mr-unter
akw-paket-* Book a package 2 2 / 2
Show: akw-paket
  • akw-paket-hinweis
  • akw-paket-liste
akw-plantafel-* Planning board 76 76 / 76
Show: akw-plantafel
  • akw-plantafel
  • akw-plantafel-aktion
  • akw-plantafel-auswahl
  • akw-plantafel-auswahl-info
  • akw-plantafel-auswahl-leiste
  • akw-plantafel-box
  • akw-plantafel-box-titel
  • akw-plantafel-drop
  • akw-plantafel-drop--bereit
  • akw-plantafel-drop--ueber
  • akw-plantafel-fehler
  • akw-plantafel-feld
  • akw-plantafel-feld-label
  • akw-plantafel-felder
  • akw-plantafel-filterinfo
  • akw-plantafel-funktion
  • akw-plantafel-griff
  • akw-plantafel-gruppe-anzahl
  • akw-plantafel-gruppe-kopf
  • akw-plantafel-gruppe-text
  • akw-plantafel-haupt
  • akw-plantafel-hinweis
  • akw-plantafel-k
  • akw-plantafel-kandidaten
  • akw-plantafel-karte
  • akw-plantafel-karte--gezogen
  • akw-plantafel-karte--inaktiv
  • akw-plantafel-karte--ziehbar
  • akw-plantafel-karte-aktion
  • akw-plantafel-karte-kopf
  • akw-plantafel-karte-name
  • akw-plantafel-ko
  • akw-plantafel-kopf
  • akw-plantafel-kopf--feiertag
  • akw-plantafel-kopf--heute
  • akw-plantafel-kopf--wochenende
  • akw-plantafel-kopf-datum
  • akw-plantafel-kopf-tag
  • akw-plantafel-layout
  • akw-plantafel-leer
  • akw-plantafel-leerstart
  • akw-plantafel-leerstart-aktionen
  • akw-plantafel-leerstart-text
  • akw-plantafel-leerstart-titel
  • akw-plantafel-legende
  • akw-plantafel-legende-eintrag
  • akw-plantafel-legende-muster
  • akw-plantafel-legende-titel
  • akw-plantafel-luecken
  • akw-plantafel-nachweis
  • akw-plantafel-name
  • akw-plantafel-name--auswahl
  • akw-plantafel-name-text
  • akw-plantafel-nav
  • akw-plantafel-pnr
  • akw-plantafel-raster
  • akw-plantafel-schalter
  • akw-plantafel-score
  • akw-plantafel-score--bewerber
  • akw-plantafel-score--grau
  • akw-plantafel-score--kandidat
  • akw-plantafel-seite
  • akw-plantafel-seiten
  • akw-plantafel-seiten-steuerung
  • akw-plantafel-stufe
  • akw-plantafel-tabelle
  • akw-plantafel-td
  • akw-plantafel-titel
  • akw-plantafel-treffer
  • akw-plantafel-werkzeug
  • akw-plantafel-zelle
  • akw-plantafel-zelle--erledigt
  • akw-plantafel-zelle--funktion
  • akw-plantafel-zelle--klickbar
  • akw-plantafel-zelle--kunde
  • akw-plantafel-zelle--offen
akw-plausi-* Plausibility notices 3 3 / 3
Show: akw-plausi
  • akw-plausi-kennzahlen
  • akw-plausi-kennzahlen-leise
  • akw-plausi-monate
akw-preis-* no description 30 30 / 30
Show: akw-preis
  • akw-preis
  • akw-preis-fehler
  • akw-preis-fehler-titel
  • akw-preis-fuss
  • akw-preis-gross
  • akw-preis-h
  • akw-preis-hervor
  • akw-preis-hinweise
  • akw-preis-kopf
  • akw-preis-label
  • akw-preis-leer
  • akw-preis-module
  • akw-preis-paket
  • akw-preis-paket-inkl
  • akw-preis-paket-meta
  • akw-preis-paket-name
  • akw-preis-paket-preis
  • akw-preis-paket-quelle
  • akw-preis-pakete
  • akw-preis-rabatt
  • akw-preis-rechts
  • akw-preis-regel
  • akw-preis-regeln
  • akw-preis-scroll
  • akw-preis-sticky
  • akw-preis-sub
  • akw-preis-summe
  • akw-preis-summen
  • akw-preis-uebersicht
  • akw-preis-zeilen
akw-profil-* User profile: image preview 5 5 / 5
Show: akw-profil
  • akw-profil-einstellung
  • akw-profil-foto
  • akw-profil-grafik
  • akw-profil-hinweis
  • akw-profil-leer
akw-rl-* Invoice run 17 17 / 17
Show: akw-rl
  • akw-rl
  • akw-rl-block
  • akw-rl-block-titel
  • akw-rl-gelb
  • akw-rl-kennzahl
  • akw-rl-kennzahl-label
  • akw-rl-kennzahl-sub
  • akw-rl-kennzahl-wert
  • akw-rl-kennzahlen
  • akw-rl-leer
  • akw-rl-leise
  • akw-rl-liste
  • akw-rl-rot
  • akw-rl-scroll
  • akw-rl-table
  • akw-rl-warn
  • akw-rl-zahl
akw-schicht-* Shift plan 22 22 / 22
Show: akw-schicht
  • akw-schicht-ab
  • akw-schicht-amber
  • akw-schicht-aus
  • akw-schicht-blau
  • akw-schicht-braun
  • akw-schicht-fixiert
  • akw-schicht-frei
  • akw-schicht-ft
  • akw-schicht-grau
  • akw-schicht-gruen
  • akw-schicht-heute
  • akw-schicht-hinweise
  • akw-schicht-kopf
  • akw-schicht-leer
  • akw-schicht-nav
  • akw-schicht-rot
  • akw-schicht-tuerkis
  • akw-schicht-violett
  • akw-schicht-warn-icon
  • akw-schicht-warnung
  • akw-schicht-we
  • akw-schicht-zelle
akw-sigpad-* Signature pad 6 6 / 6
Show: akw-sigpad
  • akw-sigpad
  • akw-sigpad-fehler
  • akw-sigpad-flaeche
  • akw-sigpad-hinweis
  • akw-sigpad-leiste
  • akw-sigpad-loeschen
akw-sn-* Timesheet overview 35 35 / 35
Show: akw-sn
  • akw-sn
  • akw-sn-chip
  • akw-sn-chip--erbracht
  • akw-sn-chip--erforderlich
  • akw-sn-chip--muster
  • akw-sn-chip--nicht_noetig
  • akw-sn-chips
  • akw-sn-datum
  • akw-sn-eid
  • akw-sn-einsatz
  • akw-sn-feld
  • akw-sn-filter
  • akw-sn-hinweis
  • akw-sn-keine
  • akw-sn-kunde
  • akw-sn-kw
  • akw-sn-label
  • akw-sn-leer
  • akw-sn-legende
  • akw-sn-legende-eintrag
  • akw-sn-legende-titel
  • akw-sn-name
  • akw-sn-person
  • akw-sn-pnr
  • akw-sn-scroll
  • akw-sn-sticky
  • akw-sn-summe
  • akw-sn-summe-offen
  • akw-sn-summen
  • akw-sn-table
  • akw-sn-telbtn
  • akw-sn-telicon
  • akw-sn-woche
  • akw-sn-zeitraum
  • akw-sn-zelle
akw-sr-* Screen readers only 1 1 / 1
Show: akw-sr
  • akw-sr-only
akw-sso-* Sign-in with company account 8 8 / 8
Show: akw-sso
  • akw-sso-eingabe
  • akw-sso-form
  • akw-sso-hinweis
  • akw-sso-knopf
  • akw-sso-label
  • akw-sso-login
  • akw-sso-meldung
  • akw-sso-weiter
akw-sz-* Review form for timesheets 9 9 / 9
Show: akw-sz
  • akw-sz
  • akw-sz-befund
  • akw-sz-bild
  • akw-sz-leer
  • akw-sz-links
  • akw-sz-meta
  • akw-sz-note
  • akw-sz-rechts
  • akw-sz-text
akw-tw-* Reproduction of a few Tailwind utilities 1 1 / 1
Show: akw-tw
  • akw-tw
akw-ueberblick-* Overview tiles 1 1 / 1
Show: akw-ueberblick
  • akw-ueberblick
akw-ze-* Time recording 87 87 / 87
Show: akw-ze
  • akw-ze
  • akw-ze-auswahl
  • akw-ze-check
  • akw-ze-chip
  • akw-ze-chip--abwesenheit
  • akw-ze-chip--arbeit
  • akw-ze-chip--zuschlag
  • akw-ze-eid
  • akw-ze-ergebnis
  • akw-ze-fehler-titel
  • akw-ze-fehlerliste
  • akw-ze-feiertag
  • akw-ze-feld
  • akw-ze-feld--breit
  • akw-ze-feld--knopf
  • akw-ze-format
  • akw-ze-hinweis
  • akw-ze-info
  • akw-ze-input
  • akw-ze-kalender
  • akw-ze-kalender-kopf
  • akw-ze-kompakt
  • akw-ze-kunde
  • akw-ze-kw
  • akw-ze-label
  • akw-ze-legende
  • akw-ze-legende-eintrag
  • akw-ze-links
  • akw-ze-marke
  • akw-ze-mehr
  • akw-ze-muster
  • akw-ze-na--andere
  • akw-ze-na--arbeitsunfall
  • akw-ze-na--dienstverhinderung
  • akw-ze-na--fehlzeit
  • akw-ze-na--feiertag
  • akw-ze-na--krank
  • akw-ze-na--pflegefreistellung
  • akw-ze-na--schlechtwetter
  • akw-ze-na--sonstige
  • akw-ze-na--stehzeit
  • akw-ze-na--unbezahlt
  • akw-ze-na--urlaub
  • akw-ze-na--zeitausgleich
  • akw-ze-punkt
  • akw-ze-punkt--abwesenheit
  • akw-ze-punkt--arbeit
  • akw-ze-punkt--zuschlag
  • akw-ze-sammel
  • akw-ze-scroll
  • akw-ze-select
  • akw-ze-soll
  • akw-ze-sr
  • akw-ze-standard
  • akw-ze-sticky
  • akw-ze-summe
  • akw-ze-summen
  • akw-ze-summen-trenner
  • akw-ze-summenzeile
  • akw-ze-table
  • akw-ze-tag
  • akw-ze-tag--aus
  • akw-ze-tag--feiertag
  • akw-ze-tag--leer
  • akw-ze-tag--wochenende
  • akw-ze-tag-kopf
  • akw-ze-tag-nr
  • akw-ze-th-datum
  • akw-ze-th-tag
  • akw-ze-th-wt
  • akw-ze-toolbar
  • akw-ze-toolbar--ende
  • akw-ze-warnicon
  • akw-ze-warnung
  • akw-ze-weitere
  • akw-ze-wsumme
  • akw-ze-zeile
  • akw-ze-zeile--abwesenheit
  • akw-ze-zeile--andere
  • akw-ze-zeile--arbeit
  • akw-ze-zeile--aufwand
  • akw-ze-zeile--ausloese_steuerfrei
  • akw-ze-zeile--ausloese_steuerpflichtig
  • akw-ze-zeile--sonderzahlung
  • akw-ze-zeile--zulage
  • akw-ze-zeile--zuschlag
  • akw-ze-zelle
akw-zi-* Time import: preview 4 4 / 4
Show: akw-zi
  • akw-zi-fehler
  • akw-zi-scroll
  • akw-zi-table
  • akw-zi-zeile-fehler
akw-zt-* Surcharge types 6 6 / 6
Show: akw-zt
  • akw-zt-fehler
  • akw-zt-hinweis
  • akw-zt-klein
  • akw-zt-ok
  • akw-zt-protokoll
  • akw-zt-tabelle
akw-zu-* Time overview and matrix tables 27 27 / 27
Show: akw-zu
  • akw-zu
  • akw-zu-aktion
  • akw-zu-auswahl
  • akw-zu-caption
  • akw-zu-einheit
  • akw-zu-fehler
  • akw-zu-feld
  • akw-zu-feld--breit
  • akw-zu-form
  • akw-zu-hinweis
  • akw-zu-label
  • akw-zu-leiste
  • akw-zu-matrix
  • akw-zu-name
  • akw-zu-num
  • akw-zu-pnr
  • akw-zu-raster
  • akw-zu-scroll
  • akw-zu-spalte
  • akw-zu-sr
  • akw-zu-sticky
  • akw-zu-summe
  • akw-zu-summen
  • akw-zu-summenzeile
  • akw-zu-table
  • akw-zu-teil
  • akw-zu-zelle

19 — Emails and platform

Two senders, two faces.

The operator’s platform email compared with the tenant email, and how the platform console is labelled.

Platform email and tenant email

This is how the two email types are built today. All tenant emails are plain. All texts in the models are placeholders.

Platform email · Model
Tenant email · Model
Platform email and tenant email compared
Feature Platform email Tenant email
Sender Operator, through the platform’s mail access Tenant, through the tenant’s own SMTP access
Header Graphite band with kicker line in amber, brand mail header and amber stripe none: text on a white ground
Logo Brand mail header as a PNG embedded in the email (not loaded from the web); without images the name shows as alternative text none
Width up to 600 px, full width below up to 640 px
Font Segoe UI with fall-back to system fonts Arial
Footer Mandatory details of the operator Signature of the tenant; unsubscribe link in promotional bulk emails
Exceptions none none

Brand mail header

Implemented: the header of the platform email shows the brand mail header (section “In use”). The image is embedded in the email and not loaded from the web; tenant emails stay without images.

Colours in the layout

The colours are set in the email layout itself; the handbook calculates the contrast for them. Emails use inline colours because mail clients do not know tokens.

Text colours of the emails with ground and calculated contrast
Role Text Ground Contrast
Platform email: kicker line #f2a516 #15171c 8.6:1 AAA
Platform email: wordmark #ffffff #15171c 17.9:1 AAA
Platform email: text #4a4742 #fffefb 9.1:1 AAA
Platform email: footer #6b6358 #fffefb 5.8:1 AA
Tenant email: text #15171c #ffffff 17.9:1 AAA

Rules for emails

  • Platform emails come from the operator and carry the operator branding; the footer states the operator’s mandatory details.
  • Tenant emails come from the tenant, through its own SMTP access. Without an access the email waits; it never goes out through the platform as a substitute.
  • The kicker line of a platform email briefly names the occasion (for example “Contract”); contract and trial emails to customers carry a neutral kicker line.
  • Emails use inline styles and table layout, no web fonts and no images that would be needed for reading.
  • Promotional bulk emails contain the unsubscribe link.

Platform console

The operator’s platform console always carries the operator brand; its name appears in every page title.

Model · The dashed drawing is the target picture: the visible brand line “Platform”.

Labelling

  • The console’s name is “EagleDesk · Platform” and appears in every page title (browser tab).
  • The header bar shows the operator logo, never the name, logo or colour of a tenant.
  • Target picture: the brand line “Platform” is visible next to the logo.
  • The same panel CI as in the back office: light, amber as accent, graphite and bone.
  • Blocked for search engines (noindex).

20 — Voice and tone

Matter-of-fact. Concrete. At eye level.

We talk like a dependable foreman, not like an ad agency. Active instead of passive, numbers instead of adjectives, plain British English. Never hype, never scare tactics, never officialese.

This is how EagleDesk sounds

  • “The examination expires in 4 weeks. We have informed dispatch.”
  • “Only approved hours go into invoicing.”
  • “Encrypted per tenant: your data stays under your own key.”
  • Concrete nouns: assignment, deadline, record, approval.

Not like this

  • “Revolutionise your HR with our all-in-one platform!”
  • “Never miss a deadline again!!!” (fear, exclamation-mark inflation)
  • “With regard to the implementation of measures in this respect …” (officialese)
  • Empty adjectives: innovative, seamless, effortless, next-level.

Five principles for texts

The examples above show the tone; these five rules say how to recognise it. They apply to the marketing site, back office, portals, e-mails and documents.

  1. Clear. One thought per sentence, active instead of passive, concrete nouns such as assignment, deadline, record and approval, numbers instead of adjectives.
  2. Technically correct under Austrian AÜG. We use the terms of Austrian law (Überlassung, Beschäftiger, Überlassungsmitteilung) and no German constructs. A legal reference names the act and section only when it is right; when in doubt, the term stands alone.
  3. No hype. No superlatives, no exclamation marks, no empty adjectives such as innovative, seamless or effortless. Today the marketing site gets by without exclamation marks.
  4. Honest about the stage of development. What does not run yet is called “in development”, with a period once it is fixed. The status line and the trial sentence name the open beta and trial access after a personal conversation; no text pretends something is already there.
  5. Form of address by output. The marketing site, product, portals, e-mails and legal texts all address people formally (“Sie” in German). An output does not switch form halfway through a text.

Word list

One spelling per term, derived from the back office glossary and the existing texts. “Applies to” names where the rule is enforced today.

Word list: the thing meant, preferred and avoided spellings
Meant We write Not like this Applies to Note
People in the employee records employee · employees worker · temp staff · agency staff Back office, help, tours “Leased worker” (heading of the § 12 notification), “assigned worker” (other texts on assignments under the AÜG) and “active workers” (quota of the plan) are the only places for “worker”.
Worker as a legal term and in the pricing model assigned worker · active workers worker (on its own) Back office, help, tours For the person in the employee records, use “employee”. The marketing site uses “workforce” and “workers” more broadly, for example in the claim; the rule does not apply there.
The business and the companies temporary staffing · temporary agency work — Marketing site, back office, portals In German, “Personalleasing” appears only as an explanation in brackets after “Arbeitskräfteüberlassung”.
The company where an employee is deployed client company · customer — Marketing site, back office, portals The client company in the legal context, the customer in the business relationship (customer records, invoice, customer portal).
The deployment of an employee at the client company assignment · assignments job Marketing site, back office, portals Recruiting compounds such as job board and job profile stay.
People in the application process applicant · applicants candidate Back office, help, tours “Candidate profile” stays.
Access for the customers’ contact persons customer portal client portal · Portal active · Portal access Back office, help, tours —
Access for employees in the browser or on the home screen Employee Web App — Marketing site, back office, portals Older and abbreviated app names are replaced in all texts and deliberately not listed here.
The three packages Premium · PremiumPlus · Premium All In Premium Plus · Premium All-In Marketing site, back office, portals —

Form of address by output

Every German-language output addresses people formally (“Sie”), regardless of the author’s taste. The table describes what exists today; each example appears word for word in the German texts. The English texts use “you” throughout.

Form of address by output with an example from the texts
Output Address Example from the texts
Marketing site (public pages) formal “Sie” „Sprechen Sie mit uns“
Trial registration formal “Sie” „Sie erhalten eine E-Mail mit einem Bestätigungslink.“
Back office, help and tours formal “Sie” „Die Personen in Ihrem Mitarbeiterstamm“
Employee Web App and customer portal formal “Sie” „Bitte vergeben Sie ein neues, persönliches Passwort“
Platform e-mails formal “Sie” „Sie haben diese Nachricht nicht erwartet?“
Legal texts (legal notice, privacy, withdrawal) formal “Sie” „informiert Sie umfassend darüber“

What we do not say

These statements appear in no text: not on the marketing site, nor in e-mails, documents or sharing texts. When unsure, describe what the system does today.

  • No promise of live payroll operation.
  • No promise of reports to social insurance or to authorities.
  • No figures about competitors (prices, customer numbers, market share) and no comparisons with named third-party products; comparisons are made factually against the classic desktop installation.

Standard sentences

The sentences come unchanged from the marketing site’s texts; when a sentence changes there, it changes here too. They are copied unchanged: a reworded sentence would be a new claim.

The number of trial days comes from the platform setting (currently 14 days).

Claim

Used in: footer of every public page

Everything in view. Software for temporary staffing – from request to invoice.

Hero title

Used in: home page, header area

Your workforce. Everything in view . Software for temporary staffing.

Hero subline

Used in: home page, below the title

Software for temporary staffing.

Status line

Used in: status bar of every public page

Open beta · Since 19 October 2026

Trial sentence

Used in: sharing texts in the kit (no longer on the public site)

14-day free trial — after a personal conversation

Trial note

Used in: home page, trial section

In the open beta we set up every trial account personally: after a short conversation you receive an invitation and try EagleDesk free of charge and without obligation for 14 days. There is no self-registration.

21 — Principles

Seven rules.

These principles apply to every surface: landing page, panel, PDF, e-mail, portal.

  1. White label first

    The brand is a default, not a constraint. Every tenant overrides name, logo and CI colours: no hard-coded brand name.

  2. Amber is the light

    An accent, not the theme. Graphite and bone carry; amber shows only what matters most: action, status, output.

  3. GDPR by design

    Self-hosted fonts, no third-party CDN at runtime. No tracking on public pages. Data minimisation made visible.

  4. Accessible

    Small text uses --volt-d (at least 4.5:1). Focus always visible (graphite outline, amber glow on top). Motion respects prefers-reduced-motion.

  5. Technical voice

    Mono for data and labels. Tabular numbers. Precision is shown, not claimed.

  6. Calm motion

    One orchestrated load with a staggered rise beats scattered micro-animations. −2 px hover, never fidgety.

  7. Tokens are law

    Colours, radii and typefaces come from /css/ci.css. No value is invented in the markup.

22 — Company data

Company data to copy.

The operator’s details from the platform’s operator configuration, each one copyable. The legal notice remains authoritative; if a detail is missing, it is not shown here.

Operator details

The source is the platform’s operator configuration. The legal notice remains authoritative; if a detail is missing, it is not shown here.

Operator company data with copy buttons
Detail Value
Company
Product
Owner
Address
Commercial register number
Register court
VAT ID
Phone
E-mail
Website

Details in one line

For footers of e-mails and letters: company, address, commercial register and VAT ID in one line.

Webagentur Hochmeir e.U. · Moorweg 7, 4845 Rutzenmoos, Österreich · FN 597527 t · Landesgericht Wels · VAT ID ATU78855106

All details

One line per detail, with its label.

Company: Webagentur Hochmeir e.U. Product: EagleDesk Owner: Jonathan Hochmeir Address: Moorweg 7, 4845 Rutzenmoos, Österreich Commercial register number: FN 597527 t Register court: Landesgericht Wels VAT ID: ATU78855106 Phone: +43 680 2208354 E-mail: hello@eagledesk.at Website: https://eagledesk.at

23 — E-mail signature

A signature without detours.

A generator for the operator’s e-mail signature: inputs, live preview and copying as rich text or plain text. Everything runs in the browser; nothing is stored or sent.

For the operator, not for tenants

This generator creates the operator’s signatures. Tenants use their own e-mail signature instead: it is built in the back office from the business card and the tenant profile.

How the generator works

  • All inputs are treated as text and escaped; special characters never run as markup.
  • Links are created only for http(s), mailto and tel. Everything else, such as javascript:, is discarded; an invalid phone number or e-mail address stays text without a link.
  • The logo is an absolute image address (PNG, light variant) on this server; the e-mail program loads it when the message is read.
  • The table has a white background and fixed text colours so that the signature stays legible in an e-mail program’s dark mode.
  • Nothing is stored and nothing is sent; the inputs stay in the browser.

Generator

Copy as rich text and paste it into the signature settings of the e-mail program. Programs without rich-text signatures take the plain text.

Inputs

With country code; it becomes the tel link.

It becomes the mailto link.

Preview

The company lines below the logo come from the company data above.

24 — Sharing texts

Sharing without overselling.

Three texts for LinkedIn and e-mail, each in German and English. They consist only of sentences from the marketing site, state the beta status and end with the link.

Three texts, two languages

Each text consists only of sentences from the marketing site plus the link, and states the beta status. The number of trial days comes from the platform setting (currently 14 days).

LinkedIn · Introduction

Claim, status and link.

Deutsch

Alles im Blick. Die Software für Arbeitskräfteüberlassung – von der Anfrage bis zur Rechnung. Open Beta · Seit 19. Oktober 2026 https://eagledesk.at

English

Everything in view. Software for temporary staffing – from request to invoice. Open beta · Since 19 October 2026 https://eagledesk.at/en

LinkedIn · Trial access

Hero title, trial sentence, status and link.

Deutsch

Ihr Personal. Alles im Blick . Software für Arbeitskräfteüberlassung. 14 Tage kostenlos testen — nach persönlichem Gespräch Open Beta · Seit 19. Oktober 2026 https://eagledesk.at

English

Your workforce. Everything in view . Software for temporary staffing. 14-day free trial — after a personal conversation Open beta · Since 19 October 2026 https://eagledesk.at/en

E-mail · Invitation to the trial

Subject and text with claim, trial note, status and link.

Deutsch

Subject

Software für Arbeitskräfteüberlassung (AÜG) | EagleDesk

Text

Alles im Blick. Die Software für Arbeitskräfteüberlassung – von der Anfrage bis zur Rechnung. In der Open Beta richten wir jeden Testzugang persönlich ein: Nach einem kurzen Gespräch erhalten Sie eine Einladung und testen 14 Tage kostenlos und unverbindlich. Eine Selbstregistrierung gibt es nicht. Open Beta · Seit 19. Oktober 2026 https://eagledesk.at

English

Subject

Software for Temporary Staffing (AÜG) | EagleDesk

Text

Everything in view. Software for temporary staffing – from request to invoice. In the open beta we set up every trial account personally: after a short conversation you receive an invitation and try EagleDesk free of charge and without obligation for 14 days. There is no self-registration. Open beta · Since 19 October 2026 https://eagledesk.at/en

25 — System D (marketing site live)

System D “Lichtwerk”: marketing site live, back office and portals to follow.

The tokens of the new design: roles for dark and light, glass, glow, layers, type scale and a calculated contrast matrix down to the worst point over the aura. They apply only inside their own scope. The marketing site already uses the new design; the back office, the Employee Web App and the customer portal follow.

Marketing site live, back office and portals to follow

Scope and colour mode

The tokens deliberately do not live on the root element but in a scope of their own. Existing pages do not carry it and therefore inherit nothing. Light is the default. Dark applies with data-theme="dark" on the scope or on an ancestor, and without either it follows the system setting; data-theme="light" on the scope or on the root element forces light. A nested scope without its own data-theme follows the root element and the system setting, not the scope above it: whoever forces a mode repeats data-theme on every nested scope. Building blocks do not carry d-system themselves, because the scope sets the ground and the text colour.

Scope and mode

A container with the class d-system or the attribute data-design="2027" (for the whole page on body, the mode as data-theme on html if needed) switches the tokens on. The d-t-… classes of the type scale need the scope for their font family.

d-system · dark
d-system · light
Show HTML: Scope and mode
<!-- Standard hell, nach Systemeinstellung -->
<div class="d-system">…</div>

<!-- Dunkel erzwingen (auch an einem Vorfahren möglich) -->
<div class="d-system" data-theme="dark">…</div>

<!-- Ganze Seite: Scope am body, Modus bei Bedarf am html -->
<html data-theme="dark">
<body data-design="2027">

Preview in dark and light

Both surfaces sit in the same document and resolve the tokens through data-theme on the scope. The preview consists of text and shapes only; nothing in it is operable.

Dark · Assignment 0042

An example in glow.

Łukasz Wiśniewski · Ștefan Țurcanu · Győző Szűcs · Iğdır

What needs doing?

Three assignments are waiting for approval. The next step is marked.

  • Done
  • Due soon
  • Overdue
  • Note
Approve Later Focus ring
  • E0 GroundPage background, no edge.
  • E1 GlassGradient and edge, no blur.
  • E2 raisedOn hover 4 px higher, amber edge, glow.
  • E3 OverlayBlur of 16 px, only for header bars, menus and the bottom bar.

Light · Assignment 0042

An example in glow.

Łukasz Wiśniewski · Ștefan Țurcanu · Győző Szűcs · Iğdır

What needs doing?

Three assignments are waiting for approval. The next step is marked.

  • Done
  • Due soon
  • Overdue
  • Note
Approve Later Focus ring
  • E0 GroundPage background, no edge.
  • E1 GlassGradient and edge, no blur.
  • E2 raisedOn hover 4 px higher, amber edge, glow.
  • E3 OverlayBlur of 16 px, only for header bars, menus and the bottom bar.

Roles and values

Components write roles, never hex values and never the product name. Each role has a dark and a light value; constants apply in both modes. Every value can be copied.

System D tokens with their value in dark and in light mode
Token Dark Light Role
Ground and surfaces
Page ground (dark for apps, light sand)
Page ground of the marketing site (dark slightly deeper, light same as the ground)
Solid surface: nodes, fields, overlays without transparency
Glass and edges
Glass surface for cards, panels and tiles, light
Glass surface, strong (hover, highlighted card)
Layer 1: glass as a gradient, no blur
Edge of glass surfaces (decorative)
Stronger edge (decorative)
Outline of inputs and controls (at least 3:1)
Text
Primary text
Body text
Help text and labels (not free on the aura)
Accent and glow
Amber: main action, active step, lamp; in the portals the tenant colour
Amber as text or icon
Text and icon on an accent surface
Glow gradient for the one display word per page (large type only)
Light glow for shadows, derived from the accent
Focus ring (2 px, offset 3 px)
Status
Done, in order
Due soon (always with text and shape)
Overdue, fault
Information (steel, replaces the Filament blue)
Tracks in charts (decorative; data carries shape and text)
Atmosphere (aura)
Amber aura, peak value (decorative)
Steel aura, peak value (decorative)
Layers
Layer 2: shadow of the raised card
Same in both modes Layer 2: amber edge on hover
Same in both modes Layer 3: surface for header bars, menus and the bottom bar
Same in both modes Layer 3: blur, allowed only here
Shapes
Same in both modes Largest rounding: Today card, phone surfaces
Same in both modes Edge width (2 px with more contrast)
Target sizes
Same in both modes Smallest target size (WCAG 2.5.8)
Same in both modes Target size of main actions
Same in both modes Target size in the portals
Fonts
Same in both modes Display: Archivo with width axis
Same in both modes Text and controls: AK Sans
Same in both modes Labels and identifiers: AK Mono

The RD-0-01 block at the end of /css/ci.css is authoritative. This table comes from the same data source as the preview and is checked against the file automatically.

Type scale D

Eleven roles as d-t-… classes in ci.css. Display and numbers use the Archivo width axis (76 to 100 %); portals and backoffice body text stay in AK Sans. Capitals only for display roles; sentence case applies in portals.

  • For ÄÖÜ Staffing

    Display, marketing site (H1)

    Font
    Archivo AKW
    Size
    clamp(44px,6.1vw,104px)
    Line height
    .95
    Weight
    800
    Letter spacing
    -.005em
    Width
    76% · Capitals
  • From order to invoice

    Section title, marketing site (H2)

    Font
    Archivo AKW
    Size
    clamp(38px,5.4vw,86px)
    Line height
    .95
    Weight
    800
    Letter spacing
    normal
    Width
    80% · Capitals
  • Time tracking

    Card title (H3)

    Font
    Archivo AKW
    Size
    23px
    Line height
    1
    Weight
    800
    Letter spacing
    normal
    Width
    84% · Capitals
  • Overview

    Page title in the backoffice

    Font
    Archivo AKW
    Size
    40px
    Line height
    1
    Weight
    800
    Letter spacing
    -.01em
    Width
    86%
  • What needs doing?

    Panel heading

    Font
    Archivo AKW
    Size
    17px
    Line height
    1.2
    Weight
    700
    Letter spacing
    .01em
    Width
    100%
  • 1,284

    Key figure (tabular digits)

    Font
    Archivo AKW
    Size
    36px
    Line height
    1
    Weight
    800
    Letter spacing
    normal
    Width
    80%
  • Good morning, Ștefan

    Title in the portals

    Font
    AK Sans
    Size
    26px
    Line height
    1.15
    Weight
    600
    Letter spacing
    -.01em
    Width
    no width axis
  • A paragraph that introduces a topic.

    Introduction

    Font
    AK Sans
    Size
    clamp(16px,1.3vw,18.5px)
    Line height
    1.55
    Weight
    400
    Letter spacing
    normal
    Width
    no width axis
  • Łukasz Wiśniewski, Ștefan Țurcanu, Győző Szűcs, Iğdır, Žofia Černá

    Text and controls

    Font
    AK Sans
    Size
    16px
    Line height
    1.55
    Weight
    400
    Letter spacing
    normal
    Width
    no width axis
  • Help text below a field.

    Help text and captions

    Font
    AK Sans
    Size
    13.5px
    Line height
    1.5
    Weight
    400
    Letter spacing
    normal
    Width
    no width axis
  • Assignment 0042 · Identifier

    Label and identifier

    Font
    AK Mono
    Size
    12px
    Line height
    1.5
    Weight
    500
    Letter spacing
    .16em
    Width
    no width axis · Capitals

Contrast matrix

Calculated to WCAG 2.x, not asserted: semi-transparent colours are mixed over their background, and backgrounds are layers (ground, aura, glass, overlay). The auras stand for the worst case, the lightest point behind text in dark mode and the darkest in light mode. Body text needs 4.5:1, large type and graphics 3:1; for a gradient the least favourable stop decides.

Each cell gives the calculated ratio and the use it is approved for: text (4.5:1), large (display type, 3:1) or graphic (lamps, lines, outlines, 3:1). “not allowed” means the ratio is below the threshold of that use; the test proves it. “not intended” says nothing about the contrast.

Dark

Contrast matrix in Dark mode: foreground against background
Foreground Ground Ground of the marketing site Surface Glass, strong Accent surface Amber aura Amber aura on the marketing ground Steel aura Glass card over the amber aura Both auras on top of each other Glass card over both auras (lightest point) Glow behind the glow word over the aura Overlay over the amber aura
17.6:1 text 17.9:1 text 16.0:1 text 14.9:1 text 1.8:1 text: not allowed 8.6:1 text 8.9:1 text 13.4:1 text 7.0:1 text 6.6:1 text 5.5:1 text not intended 15.2:1 text
11.3:1 text 11.4:1 text 10.5:1 text 9.9:1 text not intended 6.2:1 text 6.4:1 text 9.0:1 text 5.2:1 text 4.9:1 text 4.1:1 text: not allowed not intended 10.1:1 text
7.0:1 text 7.0:1 text 6.8:1 text 6.5:1 text not intended 4.4:1 text: not allowed not intended 6.0:1 text 3.8:1 text: not allowed 3.6:1 text: not allowed 3.2:1 text: not allowed not intended 6.5:1 text
12.9:1 text 13.1:1 text 11.7:1 text 10.9:1 text 1.3:1 text: not allowed 6.3:1 text 6.5:1 text 9.8:1 text 5.1:1 text 4.9:1 text 4.0:1 text: not allowed not intended 11.1:1 text
9.2:1 text 9.3:1 text 8.3:1 text 7.8:1 text not intended 4.5:1 graphic 4.6:1 graphic 7.0:1 text 3.6:1 graphic text: not allowed 3.4:1 graphic text: not allowed 2.8:1 text: not allowedgraphic: not allowed not intended 7.9:1 text
7.2:1 text 7.3:1 text 6.5:1 text 6.1:1 text not intended 3.5:1 graphic text: not allowed 3.6:1 graphic text: not allowed 5.4:1 text 2.8:1 text: not allowedgraphic: not allowed 2.7:1 text: not allowedgraphic: not allowed 2.2:1 text: not allowedgraphic: not allowed not intended 6.2:1 text
8.4:1 text 8.5:1 text 7.6:1 text 7.1:1 text not intended 4.1:1 graphic text: not allowed 4.2:1 graphic text: not allowed 6.4:1 text 3.3:1 graphic text: not allowed 3.2:1 graphic text: not allowed 2.6:1 text: not allowedgraphic: not allowed not intended 7.2:1 text
9.4:1 graphic 9.5:1 graphic 8.5:1 graphic 7.9:1 graphic not intended 4.6:1 graphic 4.7:1 graphic 7.1:1 graphic 3.7:1 graphic 3.5:1 graphic 2.9:1 graphic: not allowed not intended not intended
6.7:1 graphic 6.7:1 graphic 6.4:1 graphic 6.2:1 graphic not intended 4.2:1 graphic 4.3:1 graphic 5.8:1 graphic 3.6:1 graphic 3.5:1 graphic 3.1:1 graphic not intended not intended
12.9:1 graphic 13.1:1 graphic 11.7:1 graphic 10.9:1 graphic not intended 6.3:1 graphic 6.5:1 graphic 9.8:1 graphic 5.1:1 graphic 4.9:1 graphic 4.0:1 graphic not intended 11.1:1 graphic
8.2:1 large 8.3:1 large 7.4:1 large 6.9:1 large not intended 4.0:1 large 4.1:1 large 6.2:1 large 3.2:1 large 3.1:1 large 2.5:1 large: not allowed 1.6:1 large: not allowed not intended
not intended not intended not intended not intended 8.6:1 text not intended not intended not intended not intended not intended not intended not intended not intended

Light

Contrast matrix in Light mode: foreground against background
Foreground Ground Surface Glass Accent surface Amber aura Steel aura Both auras on top of each other Overlay over the amber aura
15.0:1 text 17.7:1 text 16.8:1 text not intended 13.3:1 text 12.8:1 text 11.6:1 text 14.5:1 text
9.5:1 text 11.3:1 text 10.7:1 text not intended 8.4:1 text 8.1:1 text 7.4:1 text 9.2:1 text
6.1:1 text 7.2:1 text 6.8:1 text not intended 5.4:1 text 5.2:1 text 4.7:1 text 5.9:1 text
5.1:1 text 6.0:1 text 5.7:1 text 2.9:1 text: not allowed 4.5:1 text 4.3:1 text: not allowed 3.9:1 text: not allowed 4.9:1 text
4.1:1 graphic text: not allowed 4.8:1 text 4.6:1 text not intended 3.6:1 graphic text: not allowed 3.5:1 graphic text: not allowed 3.2:1 graphic text: not allowed 4.0:1 graphic text: not allowed
4.3:1 graphic text: not allowed 5.1:1 text 4.8:1 text not intended 3.8:1 graphic text: not allowed 3.7:1 graphic text: not allowed 3.3:1 graphic text: not allowed 4.2:1 graphic text: not allowed
5.3:1 text 6.3:1 text 6.0:1 text not intended 4.7:1 text 4.5:1 text 4.1:1 graphic text: not allowed 5.1:1 text
4.4:1 graphic 4.6:1 graphic 4.6:1 graphic not intended 4.2:1 graphic 4.1:1 graphic 4.0:1 graphic 4.3:1 graphic
15.0:1 graphic 17.7:1 graphic 16.8:1 graphic not intended 13.3:1 graphic 12.8:1 graphic 11.6:1 graphic 14.5:1 graphic
4.3:1 large 5.1:1 large 4.8:1 large not intended 3.8:1 large 3.7:1 large 3.3:1 large 4.2:1 large
not intended not intended not intended 8.6:1 text not intended not intended not intended not intended
1.7:1 graphic: not allowed 2.0:1 graphic: not allowed 1.9:1 graphic: not allowed not intended 1.5:1 graphic: not allowed not intended not intended not intended

The backgrounds of the matrix

Backgrounds of the contrast matrix with their build-up and flattened colour
Background Build-up (bottom to top) Dark Light
Ground --d-grund #0b0d11 #efebe3
Ground of the marketing site --d-grund-werbung #090b0f #efebe3
Surface --d-flaeche #151920 #fffefb
Glass --d-grund → --d-glas #16171b #f9f8f5
Glass, strong --d-grund → --d-glas-2 #1e1f23 #fdfdfc
Accent surface --d-akzent #f2a516 #f2a516
Amber aura --d-grund → --d-aura-1 #5a4113 #f0dcb6
Amber aura on the marketing ground --d-grund-werbung → --d-aura-1 #583f11 #f0dcb6
Steel aura --d-grund → --d-aura-2 #21292f #dadbd6
Glass card over the amber aura --d-grund → --d-aura-1 → --d-glas-2 #664f25 #fefcf8
Both auras on top of each other --d-grund → --d-aura-2 → --d-aura-1 #685327 #dfcfac
Glass card over both auras (lightest point) --d-grund → --d-aura-2 → --d-aura-1 → --d-glas-2 #736037 #fcfaf7
Glow behind the glow word over the aura --d-grund → --d-aura-1 → --d-glow #ae7815 #f1ca83
Overlay over the amber aura --d-grund → --d-aura-1 → --d-ebene-3 #231d12 #efe7d6

Adjustments to system settings

The tokens react to two operating system settings by themselves, in every mode. Forced colours (forced-colors) are up to the components: system colours, lamps keep their shape.

Values that system settings lay over the roles
Setting Token Value
Reduce transparency
prefers-reduced-transparency:reduce
Increase contrast
prefers-contrast:more

Rules for glass and glow

  • Text never sits free on the aura below 4.5:1. In dark mode --d-text-3 is not allowed there (4.45:1 on the amber aura); over glass on both auras only --d-text carries, accent and status text sits on a surface.
  • Amber is not text in light mode: --d-akzent-text (graphite brown) for text and icons, --d-akzent only as a surface with --d-auf-akzent or as a graphic with a graphite outline.
  • Green and critical text sits only on a surface or glass in light mode; on the ground they are graphics or large type. Info text carries on the ground, but not on both auras at once.
  • The glow word is large type. In light mode the glow runs from amber brown to copper, because the light gradient of the dark version would fall below 3:1 on sand. No light glow sits behind the word over the aura peak: the matrix measures only 1.6:1 there.
  • Blur (backdrop-filter) exists only on layer 3. With reduced transparency glass becomes solid, with more contrast there are 2 px edges and no glow.
  • Target sizes: at least 24 px, main actions 44 px, portals 48 px.
  • Portals replace --d-akzent with the tenant colour and --d-auf-akzent through the automatic text colour; the glow follows. The contrast against the ground is checked before use.

Graphic system D

Seven building blocks carry the imagery of D. Whatever glows or flows stands for a real process; every block also shows its state as text and shape.

Building blocks of graphic system D with use and rule
Building block Use Rule
Energy core Home page: sphere with the brand mark, the areas in orbit; names and counters from the feature catalogue. Role “image” with a complete text list; calm as a static row of tiles; never fixed numbers in the code.
Line Core flow request → assignment → hours → approval → invoice → payment as a glowing line with nodes; horizontal from 1160 px, otherwise vertical. Pulse only under the run lock; every node carries number and text.
Lamps State per step: filled = done, amber with ring = active, outline = open, triangle = fault. Always with text, never colour alone; system colours in Windows high contrast, the shape stays.
Gauges Arc gauge, segment ring, stack, sparkline and line for back office and portals. SVG with a table alternative; colours from the data palette; never on the aura.
Pictograms 24 px grid, 1.5 stroke, round caps, colour via currentColor; one sprite for all areas. Same meaning, same symbol; decorative without a name, otherwise with a title.
Symbolic photos Photos from Unsplash, self-hosted (AVIF/WebP), used sparingly alongside the graphics. No identifiable people, no manufacturer brands, never as evidence of customers or places; credits in the imprint (decisions 127 and 137).
Atmosphere Aura (radial glow), floor grid and grain, only on the marketing site and only decorative. Hidden from assistive technology; no helper text (text-3) on top; hidden with more contrast and reduced transparency.

Building blocks live, light and dark

The chart building blocks with invented sample values in the d-system scope. State is shown as text, shape and colour.

Dark

  1. Request done
  2. Approval open
  3. Invoice open
  4. Payment open
Utilisation (sample value)
LabelValue
Utilisation (sample value) 72%
  • team
  • beschaeftiger
  • schichtplan
  • stempeluhr
  • rechnung
  • auszahlung
  • kosten
  • dokumente
  • schutz

Light

  1. Request done
  2. Approval open
  3. Invoice open
  4. Payment open
Utilisation (sample value)
LabelValue
Utilisation (sample value) 72%
  • team
  • beschaeftiger
  • schichtplan
  • stempeluhr
  • rechnung
  • auszahlung
  • kosten
  • dokumente
  • schutz

Data palette

Fixed order for charts: Amber · Steel · Glow · Sand · Copper · Green. Only this order keeps every neighbour pair in both modes at ΔE ≥ 15 for normal vision and ΔE ≥ 8 for colour vision deficiency; every colour reaches at least 3.0 : 1 on ground, surface and glass. Charts never sit on the aura. Handbook and charts read order and values from the same source in the code.

Data palette D in fixed order with values and lowest contrast
No. Colour Token Dark Light Lowest contrast (dark / light) Distance to the next colour (ΔE dark / light)
1 Amber 7.97 : 1 / 3.20 : 1 20.6 / 22.6
2 Steel 7.18 : 1 / 5.36 : 1 21.8 / 25.8
3 Glow 6.99 : 1 / 3.16 : 1 15.3 / 15.4
4 Sand 6.09 : 1 / 4.21 : 1 17.9 / 15.1
5 Copper 3.86 : 1 / 4.36 : 1 29.4 / 22.9
6 Green 7.83 : 1 / 4.15 : 1 last colour