<!doctype html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="/assets/main.css" />
    <title>{{ title }}</title>
  </head>
  <body>
    <header class="site-header">
      <a class="brand" href="/">{{ brand }}</a>
      <nav aria-label="Hauptmenü"> … </nav>
    </header>
    <main class="hero">
      <h1 class="hero__title" data-reveal>{{ headline }}</h1>
    </main>
  </body>
</html>

/* assets/main.css */
:root { --accent: #2b6fff; --ink: #0b0c0d }
.hero { min-height: 100vh; display: grid; place-items: center }
.hero__title { font-weight: 800; letter-spacing: -.03em; line-height: 1 }
@keyframes reveal { from { opacity: 0; transform: translateY(40px) } to { opacity: 1 } }
.reveal { animation: reveal .9s cubic-bezier(.16, 1, .3, 1) both }

// app.js
const items = document.querySelectorAll("[data-reveal]");
const io = new IntersectionObserver((entries) => {
  for (const e of entries)
    if (e.isIntersecting) e.target.classList.add("reveal");
});
items.forEach((el) => io.observe(el));

async function load() {
  const res = await fetch("/data/content.json");
  render(await res.json());
}
load();
<!doctype html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="/assets/main.css" />
    <title>{{ title }}</title>
  </head>
  <body>
    <header class="site-header">
      <a class="brand" href="/">{{ brand }}</a>
      <nav aria-label="Hauptmenü"> … </nav>
    </header>
    <main class="hero">
      <h1 class="hero__title" data-reveal>{{ headline }}</h1>
    </main>
  </body>
</html>

/* assets/main.css */
:root { --accent: #2b6fff; --ink: #0b0c0d }
.hero { min-height: 100vh; display: grid; place-items: center }
.hero__title { font-weight: 800; letter-spacing: -.03em; line-height: 1 }
@keyframes reveal { from { opacity: 0; transform: translateY(40px) } to { opacity: 1 } }
.reveal { animation: reveal .9s cubic-bezier(.16, 1, .3, 1) both }

// app.js
const items = document.querySelectorAll("[data-reveal]");
const io = new IntersectionObserver((entries) => {
  for (const e of entries)
    if (e.isIntersecting) e.target.classList.add("reveal");
});
items.forEach((el) => io.observe(el));

async function load() {
  const res = await fetch("/data/content.json");
  render(await res.json());
}
load();
STO · Vorschau-Umgebung

Was Sie hier sehen, ist erst der Anfang.

Hier begleiten wir Projekte vom Entwurf bis kurz vor dem Launch — diskret, präzise, kreativ. Sie denken über eine eigene Website oder eine Beratung nach? Sprechen wir darüber.

Vertraut unter anderem von AbbVieBayerTakeda Impressum