Nachhaltige Lösungen
für die Energiewende

Organisation, Prozesse, Change Management
Operatives Projektmanagement
Konzeptionelles Projektmanagement
Integrierte Managementsysteme
Schulungen, Coachings, Wissensmanagement
Konzepte für die Energiewende,
Recherchen, Studien
Wirtschaftlichkeitsbetrachtung, M&A-Unterstützung,
Make or Buy
Digitalisierung


Organisation, Prozesse, Change Management


Operatives Projektmanagement


Konzeptionelles Projektmanagement


Integrierte Managementsysteme


Schulungen, Coachings, Wissensmanagement


Konzepte für die Energiewende,
Recherchen, Studien


Wirtschaftlichkeits-
betrachtung,
M&A-Unterstützung,
Make or Buy


Digitalisierung

:root {
–grid-gap: 35px;
–background: white;
–foreground: white;
}

.icon-container-t {
position: relative;
background-color: var(–background);
display: grid;
margin: auto;

width: 35%;
aspect-ratio: 0.5;

grid-template: „icon-1 icon-2“
„icon-3 icon-4“
„icon-5 icon-6“
„icon-7 icon-8“;

grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
grid-gap: var(–grid-gap);
}

.animated-icon-t,
.animated-icon-t * {
transition: all 0.5s ease;
right: 0
}

.animated-icon-t {
position: relative;

z-index: 1;

width: 100%;
height: 100%;

aspect-ratio: 1;
}

.animated-icon-t.r.passive {
transform: translateX(100%);
}

.animated-icon-t.l.passive {
transform: translateX(-100%);
}

.animated-icon-t.active {
transform: translateX(100%) translate(-8px, 8px);
}

.animated-icon-t.l * {
left: 0;
}

.animated-icon-t.l.active {
transform: translateX(-100%) translate(8px, 8px);
}

.animated-icon-t>.background {
background-color: var(–background);
position: absolute;
width: 100%;
height: 100%;

border: 2px solid #ddd;
}

.animated-icon-t.active>.background {
background-color: var(–foreground);
width: 300%;

border-color: var(–foreground);
box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.2);
}

.animated-icon-t>.border {
position: absolute;
z-index: -10;
background-color: var(–background);

width: 100%;
height: 100%;

border: 2px solid transparent;
}

.animated-icon-t.active>.border {
transform: translate(10px, -10px);
width: 300%;

border-image: 1;
border-image-source: linear-gradient(90deg, #b61620, #f33f3f);
}

.animated-icon-t.l.active>.border {
transform: translate(-10px, -10px);
border-image-source: linear-gradient(-90deg, #b61620, #f33f3f);
}

.animated-icon-t img {
position: absolute;
top: 0;
left: 0;

width: 100%;
height: 100%;

padding: 30%;
overflow: visible;
}

.animated-icon-t:not(.active) img {
filter: brightness(0%) invert(100%) brightness(86%);
}

.animated-icon-t span {
position: absolute;
padding: 0px;

top: 50%;
left: 40%;
width: 200%;
max-height: 100%;
transform: translateY(-50%);

opacity: 0;

–awb-text-font-family: „Inter“;
–awb-text-font-style: bold;
–awb-text-font-weight: 500;
–awb-font-size: 12px;
text-align: center;
line-height: 1.5;

transition-duration: 0.25s;
pointer-events: none;
}

.animated-icon-t.r span {
left: -140%;
}

.animated-icon-t.active span {
opacity: 1;
left: 100%;

transition-duration: 0.5s;
}

.animated-icon-t.r.active span {
left: -200%;
}

.animated-icon-t::after {
content: “;
position: absolute;

top: 50%;
left: 50%;
transform: translate(-50%, -50%);

width: 100%;
height: 70%;

border: solid #ddd;
border-width: 0px 1px 0px 0px;

opacity: 0;
transition: all 0.5s ease;
}

.animated-icon-t.r::after {
border-width: 0px 0px 0px 1px;
}

.animated-icon-t.active::after {
opacity: 1;
}

function onLoadTablet() {
// Die Dauer zwischen den einzelnen Animationen in Millisekunden
const displayDur = 5000;

const icons = document.getElementsByClassName(‚animated-icon-t‘);

// Ein Zeitstempel um festzuhalten wann die Animation gestartet ist
let startTs = null;

// Ein Zeitstempel, der festhält wie lang die Animation schon lief,
// als sie pausiert wurde (z.B. wenn der Nutzer den Tab wechselt)
let elapsedWhenPaused = 0;

// Diese Funktion animiert eine der Reihen
// row: Wählt die Reihe aus
// index: Wählt das Icon in der Reihe aus, welches größer werden soll
const animateRow = function(row, index) {
// Setzt das ausgewählte Icon auf aktive
icons[2 * row + index].classList.add(‚active‘);

// Setzt das andere Icon auf passiv
icons[2 * row + (1 – index)].classList.add(‚passive‘);
};

// Resettet eine ganze Reihe in den Normalzustand
const resetRow = function(row) {
icons[2 * row].classList.remove(‚active‘);
icons[2 * row].classList.remove(‚passive‘);
icons[2 * row + 1].classList.remove(‚active‘);
icons[2 * row + 1].classList.remove(‚passive‘);
};

// Resettet alle Reihen
const resetAll = function() {
for (let i = 0; i < 4; i++)
resetRow(i);
};

// Diese Funktion wird in einer Schleife aufgerufen und
// kontrolliert die einzelnen Schritte der Animation
const step = function(ts) {
// Wenn der Browser nicht sichtbar ist, (z.B. minimiert)
// dann tue nichts, und gehe zum nächsten Animationsschritt
if (document.hidden)
return window.requestAnimationFrame(step);

if (startTs === null) startTs = ts;

// Speicher wie viel Zeit seit begin der Animation vergangen ist
const elapsed = ts – startTs;

// Zeige die jeweiligen Animationen nacheinander an
if (elapsed < displayDur) {
resetAll();
animateRow(0, 0);
animateRow(1, 1);
} else if (elapsed < 2 * displayDur) {
resetAll();
animateRow(0, 1);
animateRow(1, 0);
} else if (elapsed < 2 * displayDur + 500) {
resetAll();
} else if (elapsed < 3 * displayDur + 500) {
animateRow(2, 0);
animateRow(3, 1);
} else if (elapsed < 4 * displayDur + 500) {
resetAll();
animateRow(2, 1);
animateRow(3, 0);
} else if (elapsed 4 * displayDur + 1000) {
startTs = ts;
}

// Rufe den nächsten Animationsschritt auf
window.requestAnimationFrame(step);
}

// Starte die Animation
window.requestAnimationFrame(step);

// Wenn der Tab gewechselt wird, oder der Browser minimiert wird,
// speicher den aktuellen Stand der Animation und beginne von dort aus wieder,
// wenn der Tab wieder sichtbar wird
document.addEventListener(‚visibilitychange‘, event => {
if (document.hidden)
elapsedWhenPaused = document.timeline.currentTime – startTs;
else
startTs = document.timeline.currentTime – elapsedWhenPaused;
});
}

// Starte die gesammte Animation erst dann, wenn die Seite geladen ist
window.addEventListener(‚load‘, onLoadTablet);


Organisation, Prozesse, Change Management


Operatives Projektmanagement


Konzeptionelles Projektmanagement


Integrierte Managementsysteme


Schulungen, Coachings, Wissensmanagement


Konzepte für die Energiewende,
Recherchen, Studien


Wirtschaftlichkeits-
betrachtung,
M&A-Unterstützung,
Make or Buy


Digitalisierung

:root {
–grid-gap: 35px;
–background: white;
–foreground: white;
}

.icon-container-m {
position: relative;
background-color: var(–background);
display: grid;
margin: auto;

width: 50%;
aspect-ratio: 0.5;

grid-template: „icon-1 icon-2“
„icon-3 icon-4“
„icon-5 icon-6“
„icon-7 icon-8“;

grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
grid-gap: var(–grid-gap);
}

.animated-icon-m,
.animated-icon-m * {
transition: all 0.5s ease;
right: 0
}

.animated-icon-m {
position: relative;

z-index: 1;

width: 100%;
height: 100%;

aspect-ratio: 1;
}

.animated-icon-m.r.passive {
transform: translateX(100%);
}

.animated-icon-m.l.passive {
transform: translateX(-100%);
}

.animated-icon-m.active {
transform: translateX(100%) translate(-8px, 8px);
}

.animated-icon-m.l * {
left: 0;
}

.animated-icon-m.l.active {
transform: translateX(-100%) translate(8px, 8px);
}

.animated-icon-m>.background {
background-color: var(–background);
position: absolute;
width: 100%;
height: 100%;

border: 2px solid #ddd;
}

.animated-icon-m.active>.background {
background-color: var(–foreground);
width: 300%;

border-color: var(–foreground);
box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.2);
}

.animated-icon-m>.border {
position: absolute;
z-index: -10;
background-color: var(–background);

width: 100%;
height: 100%;

border: 2px solid transparent;
}

.animated-icon-m.active>.border {
transform: translate(10px, -10px);
width: 300%;

border-image: 1;
border-image-source: linear-gradient(90deg, #b61620, #f33f3f);
}

.animated-icon-m.l.active>.border {
transform: translate(-10px, -10px);
border-image-source: linear-gradient(-90deg, #b61620, #f33f3f);
}

.animated-icon-m img {
position: absolute;
top: 0;
left: 0;

width: 100%;
height: 100%;

padding: 30%;
overflow: visible;
}

.animated-icon-m:not(.active) img {
filter: brightness(0%) invert(100%) brightness(86%);
}

.animated-icon-m span {
position: absolute;
padding: 0px;

top: 50%;
left: 40%;
width: 200%;
max-height: 100%;
transform: translateY(-50%);

opacity: 0;

–awb-text-font-family: „Inter“;
–awb-text-font-style: bold;
–awb-text-font-weight: 500;
–awb-font-size: 12px;
text-align: center;
line-height: 1.5;

transition-duration: 0.25s;
pointer-events: none;
}

.animated-icon-m.r span {
left: -140%;
}

.animated-icon-m.active span {
opacity: 1;
left: 100%;

transition-duration: 0.5s;
}

.animated-icon-m.r.active span {
left: -200%;
}

.animated-icon-m::after {
content: “;
position: absolute;

top: 50%;
left: 50%;
transform: translate(-50%, -50%);

width: 100%;
height: 70%;

border: solid #ddd;
border-width: 0px 1px 0px 0px;

opacity: 0;
transition: all 0.5s ease;
}

.animated-icon-m.r::after {
border-width: 0px 0px 0px 1px;
}

.animated-icon-m.active::after {
opacity: 1;
}

function onLoadMobile() {
// Die Dauer zwischen den einzelnen Animationen in Millisekunden
const displayDur = 5000;

const icons = document.getElementsByClassName(‚animated-icon-m‘);

// Ein Zeitstempel um festzuhalten wann die Animation gestartet ist
let startTs = null;

// Ein Zeitstempel, der festhält wie lang die Animation schon lief,
// als sie pausiert wurde (z.B. wenn der Nutzer den Tab wechselt)
let elapsedWhenPaused = 0;

// Diese Funktion animiert eine der Reihen
// row: Wählt die Reihe aus
// index: Wählt das Icon in der Reihe aus, welches größer werden soll
const animateRow = function(row, index) {
icons[2 * row + index].classList.add(‚active‘);
icons[2 * row + (1 – index)].classList.add(‚passive‘);
};

// Resettet eine ganze Reihe in den Normalzustand
const resetRow = function(row) {
icons[2 * row].classList.remove(‚active‘);
icons[2 * row].classList.remove(‚passive‘);
icons[2 * row + 1].classList.remove(‚active‘);
icons[2 * row + 1].classList.remove(‚passive‘);
};

// Resettet alle Reihen
const resetAll = function() {
for (let i = 0; i < 4; i++)
resetRow(i);
};

// Diese Funktion wird in einer Schleife aufgerufen und
// kontrolloiert die einzelnen Schritte der Animation
const step = function(ts) {
// Wenn der Browser nicht sichtbar ist, (z.B. minimiert)
// dann tue nichts, und gehe zum nächsten Animationsschritt
if (document.hidden)
return window.requestAnimationFrame(step);

if (startTs === null) startTs = ts;

// Speicher wie viel Zeit seit Beginn der Animation vergangen ist
const elapsed = ts – startTs;

// Zeige die jeweiligen Animationen nacheinander an
if (elapsed < displayDur) {
resetAll();
animateRow(0, 0);
animateRow(1, 1);
} else if (elapsed < 2 * displayDur) {
resetAll();
animateRow(0, 1);
animateRow(1, 0);
} else if (elapsed < 2 * displayDur + 500) {
resetAll();
} else if (elapsed < 3 * displayDur + 500) {
animateRow(2, 0);
animateRow(3, 1);
} else if (elapsed < 4 * displayDur + 500) {
resetAll();
animateRow(2, 1);
animateRow(3, 0);
} else if (elapsed 4 * displayDur + 1000) {
startTs = ts;
}

// Rufe den nächsten Animationsschritt auf
window.requestAnimationFrame(step);
}

// Starte die Animation
window.requestAnimationFrame(step);

// Wenn der Tab gewechselt wird, oder der Browser minimiert wird,
// speicher den aktuellen Stand der Animation und beginne von dort aus wieder,
// wenn der Tab wieder sichtbar wird
document.addEventListener(‚visibilitychange‘, event => {
if (document.hidden)
elapsedWhenPaused = document.timeline.currentTime – startTs;
else
startTs = document.timeline.currentTime – elapsedWhenPaused;
});
}

// Starte die gesammte Animation erst dann, wenn die Seite geladen ist
window.addEventListener(‚load‘, onLoadMobile);

Unsere Kunden

Strom- und Wärmeerzeuger

  • Großkraftwerksbetreiber
  • Erzeuger erneuerbarer Energie

Netzbetreiber

  • Übertragungsnetzbetreiber
  • Verteilnetzbetreiber
  • Betreiber von Datennetzen

Strom-, Gas- und Wasserversorger

  • Stadtwerke
  • Entsorgungsunternehmen
  • Kommunale Versorger

Betreiber von Daten- und IT-Infrastruktur

  • Abrechnungsdienstleister
  • Telekomunikations- unternehmen

ENLITE stellt Sie als Führungskraft der Energiewirtschaft
in den Mittelpunkt aller Aktivitäten.

Wir sind Ihr Partner und begleiten Sie kompetent auf dem Weg durch die Energiewende.

Unser hoher Anspruch an Qualität spiegelt sich in unseren Zertifizierungen nach ISO 9001, ISO 27001 und ISO 45001 wieder.

Wir bieten Ihnen ganzheitliche und technologisch geprägte Beratungsleistungen mit spürbarem Nutzen und hoher Qualität.

Wir sind Teamplayer und arbeiten mit interdisziplinären Kompetenzen Hand in Hand gemeinsam mit den Teams unserer Kunden.

Langjährige Kundenbeziehungen unterstreichen unseren Anspruch an höchste Verlässlichkeit, Kompetenz und Flexibilität.

Partnerschaften

ENLITE unterhält ein gut gepflegtes Netzwerk aus strategischen und operativen Partnerschaften. Die Kombination aus Technologiepartnern, Verbänden, Projektunterstützern, Schulungsanbietern, Methodenkennern und Beratungshäusern angrenzender Disziplinen ermöglicht uns, stets sehr gute Lösungen aus einer Hand liefern zu können. Denn wir sind überzeugt, dass nur eine Leistung mit Mehrwert für unsere Kunden eine gute Leistung sein kann!

Dr. Robert van de Sandt
Geschäftsführer