Anfahrt-Abschnitt als gemeinsamer Baustein (map_section) für Start, Unternehmen und Kontakt; Datenschutzerklärung entsprechend ergänzt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
624 lines
37 KiB
CSS
624 lines
37 KiB
CSS
/* ==========================================================================
|
||
Kirschner Gebäudeservice — Design-System „Präzision in Blau"
|
||
Referenz: design-references/entries/gebaeudedienstleister-de.md
|
||
Details und Begründungen: DESIGN.md
|
||
========================================================================== */
|
||
|
||
/* ---------- Font: Archivo Variable (wght 100–900, wdth 62–125), OFL ---------- */
|
||
@font-face {
|
||
font-family: "Archivo";
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 100 900;
|
||
font-stretch: 62% 125%;
|
||
src: url("fonts/archivo-latin-ext-wdth-normal.woff2") format("woff2-variations");
|
||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||
}
|
||
@font-face {
|
||
font-family: "Archivo";
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 100 900;
|
||
font-stretch: 62% 125%;
|
||
src: url("fonts/archivo-latin-wdth-normal.woff2") format("woff2-variations");
|
||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||
}
|
||
|
||
/* ---------- Tokens ---------- */
|
||
:root {
|
||
/* Nacht — blau getönte Dunkeltöne */
|
||
--night-950: #0A1424;
|
||
--night-900: #0F1D33;
|
||
--night-800: #16263F;
|
||
--night-700: #1F3354;
|
||
/* Papier — blau getöntes Off-White */
|
||
--paper: #F2F5F9;
|
||
--paper-2: #E6ECF4;
|
||
--white: #FFFFFF;
|
||
/* Text */
|
||
--ink: #0A1424; /* auf Papier */
|
||
--ink-soft: #4A5873; /* auf Papier, 6.5:1 */
|
||
--fog: #E8EEF6; /* auf Nacht, 15.8:1 */
|
||
--fog-soft: #A9B7CC; /* auf Nacht, 9.1:1 */
|
||
--fog-mute: #8C9BB3; /* auf Nacht, 6.5:1 — nur Labels */
|
||
/* Der eine Akzent: Logo-Mittelblau */
|
||
--kk: #5B8AD6; /* auf Nacht 5.3:1 */
|
||
--kk-bright: #6E9AE3;
|
||
--kk-ink: #2F5FAE; /* Akzent als Text auf Papier, 5.7:1 */
|
||
--kk-deep: #3B6CC0;
|
||
/* Linien */
|
||
--line-dark: rgba(169, 183, 204, .16);
|
||
--line-light: rgba(10, 20, 36, .12);
|
||
|
||
/* Typo */
|
||
--font: "Archivo", "Helvetica Neue", Arial, sans-serif;
|
||
--fs-mega: clamp(3.25rem, 9.6vw, 8.5rem);
|
||
--fs-display: clamp(2.6rem, 6.4vw, 5.75rem);
|
||
--fs-title: clamp(1.75rem, 3.2vw, 2.75rem);
|
||
--fs-lead: clamp(1.15rem, 1.5vw, 1.375rem);
|
||
--fs-body: 1.0625rem;
|
||
--fs-label: .8125rem;
|
||
|
||
/* Raum — 8px-Skala */
|
||
--s1: .5rem; --s2: 1rem; --s3: 1.5rem; --s4: 2rem; --s5: 3rem; --s6: 4rem; --s7: 6rem;
|
||
--section: clamp(6rem, 12vw, 10rem);
|
||
--gutter: clamp(1.25rem, 4vw, 4rem);
|
||
--max: 1680px;
|
||
--radius: 4px;
|
||
|
||
/* Motion */
|
||
--ease: cubic-bezier(.16, 1, .3, 1);
|
||
--ease-io: cubic-bezier(.65, 0, .35, 1);
|
||
--t-fast: 200ms;
|
||
--t-mid: 450ms;
|
||
|
||
/* Chevron-Winkel (Signatur) — Tiefe des „<" */
|
||
--chev: 18%;
|
||
}
|
||
|
||
/* ---------- Reset / Basis ---------- */
|
||
*, *::before, *::after { box-sizing: border-box; }
|
||
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-padding-top: 96px; }
|
||
html.lenis, html.lenis body { height: auto; }
|
||
.lenis.lenis-smooth { scroll-behavior: auto !important; }
|
||
.lenis.lenis-stopped { overflow: clip; }
|
||
body {
|
||
margin: 0;
|
||
font-family: var(--font);
|
||
font-size: var(--fs-body);
|
||
font-stretch: 100%;
|
||
line-height: 1.6;
|
||
color: var(--fog);
|
||
background: var(--night-950);
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
text-rendering: optimizeLegibility;
|
||
overflow-wrap: break-word;
|
||
overflow-x: clip;
|
||
}
|
||
img, svg, picture { display: block; max-width: 100%; }
|
||
img { height: auto; }
|
||
a { color: inherit; text-decoration: none; }
|
||
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
|
||
h1, h2, h3, h4, p, ul, ol, figure, dl, dd { margin: 0; }
|
||
ul[role="list"], ol[role="list"] { list-style: none; padding: 0; }
|
||
::selection { background: var(--kk); color: var(--night-950); }
|
||
:focus-visible { outline: 2px solid var(--kk-bright); outline-offset: 3px; border-radius: 2px; }
|
||
.theme-light :focus-visible { outline-color: var(--kk-ink); }
|
||
|
||
.skip-link {
|
||
position: fixed; left: var(--s2); top: var(--s2); z-index: 200;
|
||
padding: .75rem 1.25rem; background: var(--kk); color: var(--night-950); font-weight: 700;
|
||
transform: translateY(-160%); transition: transform var(--t-fast) var(--ease);
|
||
}
|
||
.skip-link:focus { transform: none; }
|
||
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
||
|
||
/* ---------- Layout ---------- */
|
||
.wrap { width: min(100% - 2 * var(--gutter), var(--max)); margin-inline: auto; }
|
||
.section { padding-block: var(--section); position: relative; }
|
||
.theme-light { background: var(--paper); color: var(--ink); }
|
||
.theme-white { background: var(--white); color: var(--ink); }
|
||
.theme-deep { background: var(--night-900); }
|
||
.grid-12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--s4) var(--gutter); }
|
||
|
||
/* ---------- Typo ---------- */
|
||
.mega, .display, .title {
|
||
font-stretch: 125%;
|
||
font-weight: 800;
|
||
letter-spacing: -.035em;
|
||
line-height: .92;
|
||
text-wrap: balance;
|
||
}
|
||
.mega { font-size: var(--fs-mega); }
|
||
.display { font-size: var(--fs-display); line-height: .95; }
|
||
.title { font-size: var(--fs-title); line-height: 1.02; letter-spacing: -.025em; }
|
||
.lead { font-size: var(--fs-lead); line-height: 1.5; color: var(--fog-soft); max-width: 48ch; }
|
||
.theme-light .lead, .theme-white .lead { color: var(--ink-soft); }
|
||
.prose p + p { margin-top: 1em; }
|
||
.muted { color: var(--fog-soft); }
|
||
.theme-light .muted, .theme-white .muted { color: var(--ink-soft); }
|
||
.accent { color: var(--kk); }
|
||
.theme-light .accent, .theme-white .accent { color: var(--kk-ink); }
|
||
|
||
|
||
/* Zeilen-Maske für SplitText */
|
||
.line-mask { display: block; overflow: clip; padding-bottom: .06em; margin-bottom: -.06em; }
|
||
|
||
/* ---------- Chevron-Motiv ---------- */
|
||
.chev-mark { width: 44px; height: 32px; flex: none; }
|
||
.chev { fill: currentColor; }
|
||
|
||
/* Winkel-Reveal: --x läuft von 118% auf 0%, die Spitze „<" führt */
|
||
.reveal-img { --x: 0%; clip-path: polygon(100% 0, var(--x) 0, calc(var(--x) - var(--chev)) 50%, var(--x) 100%, 100% 100%); }
|
||
.reveal-img img { transform-origin: 70% 50%; }
|
||
|
||
/* ---------- Buttons ---------- */
|
||
.btn {
|
||
--bg: var(--kk); --fg: var(--night-950);
|
||
position: relative; display: inline-flex; align-items: center; gap: .9rem;
|
||
min-height: 56px; padding: 0 1.5rem 0 1.75rem;
|
||
font-weight: 650; font-stretch: 110%; letter-spacing: -.005em; font-size: 1rem;
|
||
color: var(--fg); background: var(--bg);
|
||
border-radius: var(--radius);
|
||
overflow: hidden; isolation: isolate;
|
||
transition: color var(--t-mid) var(--ease);
|
||
will-change: transform;
|
||
}
|
||
.btn::before {
|
||
/* Füllung wischt im Chevron-Winkel von rechts herein */
|
||
content: ""; position: absolute; inset: 0; z-index: -1;
|
||
background: var(--fog);
|
||
clip-path: polygon(100% 0, 120% 0, 100% 50%, 120% 100%, 100% 100%);
|
||
transition: clip-path var(--t-mid) var(--ease);
|
||
}
|
||
.btn:hover::before, .btn:focus-visible::before { clip-path: polygon(100% 0, 0 0, -20% 50%, 0 100%, 100% 100%); }
|
||
.btn__arrow { width: 18px; height: 18px; flex: none; transition: transform var(--t-mid) var(--ease); }
|
||
.btn:hover .btn__arrow { transform: translateX(4px); }
|
||
.btn--ghost { --bg: transparent; --fg: var(--fog); box-shadow: inset 0 0 0 1px var(--line-dark); }
|
||
.btn--ghost:hover { --fg: var(--night-950); }
|
||
.theme-light .btn--ghost, .theme-white .btn--ghost { --fg: var(--ink); box-shadow: inset 0 0 0 1px var(--line-light); }
|
||
.theme-light .btn::before, .theme-white .btn::before { background: var(--night-950); }
|
||
.theme-light .btn:not(.btn--ghost), .theme-white .btn:not(.btn--ghost) { --bg: var(--kk-ink); --fg: var(--white); }
|
||
.theme-light .btn--ghost:hover, .theme-white .btn--ghost:hover { --fg: var(--white); }
|
||
.btn-row { display: flex; flex-wrap: wrap; gap: var(--s2); align-items: center; }
|
||
|
||
.link-arrow {
|
||
display: inline-flex; align-items: center; gap: .5rem; font-weight: 600;
|
||
background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat;
|
||
transition: background-size var(--t-mid) var(--ease);
|
||
padding-bottom: 2px;
|
||
}
|
||
.link-arrow:hover { background-size: 100% 1px; }
|
||
.link-arrow svg { width: 14px; height: 14px; transition: transform var(--t-mid) var(--ease); }
|
||
.link-arrow:hover svg { transform: translateX(3px); }
|
||
|
||
/* ---------- Header ---------- */
|
||
.site-header {
|
||
position: fixed; inset: 0 0 auto; z-index: 100;
|
||
transition: transform .5s var(--ease), background-color .4s var(--ease), box-shadow .4s var(--ease);
|
||
}
|
||
.site-header.is-solid {
|
||
background: rgba(10, 20, 36, .72);
|
||
-webkit-backdrop-filter: saturate(160%) blur(16px);
|
||
backdrop-filter: saturate(160%) blur(16px);
|
||
box-shadow: 0 1px 0 var(--line-dark);
|
||
}
|
||
.site-header.is-hidden { transform: translateY(-100%); }
|
||
.site-header__inner { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); height: 84px; }
|
||
.brand { display: inline-flex; align-items: center; gap: .75rem; color: var(--fog); }
|
||
.brand .chev-mark { color: var(--kk); }
|
||
.brand__name { display: grid; line-height: 1; }
|
||
.brand__name b { font-weight: 800; font-stretch: 125%; letter-spacing: .02em; font-size: 1.05rem; }
|
||
.brand__name span { font-size: .6875rem; letter-spacing: .24em; text-transform: uppercase; color: var(--fog-soft); margin-top: .3rem; }
|
||
.nav { display: flex; align-items: center; gap: clamp(1.25rem, 2.4vw, 2.25rem); }
|
||
.nav__link { position: relative; font-weight: 500; font-size: .96875rem; color: var(--fog-soft); transition: color var(--t-fast) var(--ease); padding-block: .5rem; }
|
||
.nav__link::after {
|
||
content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px; background: var(--kk);
|
||
transform: scaleX(0); transform-origin: right; transition: transform var(--t-mid) var(--ease);
|
||
}
|
||
.nav__link:hover, .nav__link[aria-current="page"] { color: var(--fog); }
|
||
.nav__link:hover::after, .nav__link[aria-current="page"]::after { transform: scaleX(1); transform-origin: left; }
|
||
.header-cta { display: flex; align-items: center; gap: var(--s2); }
|
||
.header-phone { display: inline-flex; align-items: center; gap: .5rem; font-weight: 600; font-variant-numeric: tabular-nums; font-size: .96875rem; }
|
||
.header-phone svg { width: 16px; height: 16px; color: var(--kk); }
|
||
.header-cta .btn { min-height: 44px; padding: 0 1.1rem 0 1.25rem; font-size: .9375rem; }
|
||
|
||
.menu-toggle { display: none; width: 48px; height: 48px; place-items: center; border-radius: var(--radius); box-shadow: inset 0 0 0 1px var(--line-dark); }
|
||
.menu-toggle__bars { position: relative; width: 20px; height: 12px; }
|
||
.menu-toggle__bars::before, .menu-toggle__bars::after {
|
||
content: ""; position: absolute; left: 0; right: 0; height: 2px; background: var(--fog);
|
||
transition: transform var(--t-mid) var(--ease), top var(--t-mid) var(--ease);
|
||
}
|
||
.menu-toggle__bars::before { top: 0; }
|
||
.menu-toggle__bars::after { top: 10px; }
|
||
[aria-expanded="true"] .menu-toggle__bars::before { top: 5px; transform: rotate(45deg); }
|
||
[aria-expanded="true"] .menu-toggle__bars::after { top: 5px; transform: rotate(-45deg); }
|
||
|
||
.mobile-nav {
|
||
position: fixed; inset: 0; z-index: 90; background: var(--night-900);
|
||
display: flex; flex-direction: column; justify-content: flex-end;
|
||
padding: 110px var(--gutter) var(--s5);
|
||
clip-path: polygon(100% 0, 118% 0, 100% 50%, 118% 100%, 100% 100%);
|
||
transition: clip-path .7s var(--ease-io), visibility 0s .7s;
|
||
visibility: hidden;
|
||
}
|
||
.mobile-nav.is-open { clip-path: polygon(100% 0, 0 0, -18% 50%, 0 100%, 100% 100%); visibility: visible; transition: clip-path .7s var(--ease-io), visibility 0s; }
|
||
.mobile-nav ul { display: grid; gap: .25rem; }
|
||
.mobile-nav a.mobile-nav__link { display: block; font-size: clamp(2.25rem, 10vw, 3.5rem); font-weight: 800; font-stretch: 125%; letter-spacing: -.03em; line-height: 1.1; }
|
||
.mobile-nav a.mobile-nav__link[aria-current="page"] { color: var(--kk); }
|
||
.mobile-nav__meta { margin-top: var(--s5); display: grid; gap: .5rem; color: var(--fog-soft); }
|
||
.mobile-nav__meta a { color: var(--fog); font-weight: 600; }
|
||
|
||
@media (max-width: 1080px) {
|
||
.nav, .header-phone { display: none; }
|
||
.menu-toggle { display: grid; }
|
||
}
|
||
@media (max-width: 520px) {
|
||
.header-cta .btn { display: none; }
|
||
}
|
||
|
||
/* ---------- Hero ---------- */
|
||
.hero {
|
||
position: relative; min-height: 100svh; display: grid; align-items: end;
|
||
padding: 140px 0 var(--s5); overflow: clip; isolation: isolate;
|
||
}
|
||
.hero__media { position: absolute; inset: 0; z-index: -2; }
|
||
.hero__media img { width: 100%; height: 115%; object-fit: cover; object-position: 60% 40%; }
|
||
.hero__media::after {
|
||
content: ""; position: absolute; inset: 0;
|
||
background:
|
||
linear-gradient(90deg, rgba(10, 20, 36, .96) 0%, rgba(10, 20, 36, .82) 42%, rgba(10, 20, 36, .35) 100%),
|
||
linear-gradient(0deg, rgba(10, 20, 36, 1) 0%, rgba(10, 20, 36, 0) 45%);
|
||
}
|
||
.hero__chevrons { position: absolute; right: -6vw; top: 50%; z-index: -1; width: min(62vw, 880px); translate: 0 -50%; color: var(--kk); pointer-events: none; }
|
||
.hero__chevrons path { fill: none; stroke: currentColor; stroke-width: 1.2; vector-effect: non-scaling-stroke; }
|
||
.hero__chevrons path:nth-child(2) { opacity: .55; }
|
||
.hero__chevrons path:nth-child(3) { opacity: .28; }
|
||
.hero__content { display: grid; gap: var(--s4); }
|
||
.hero h1 { max-width: none; }
|
||
.hero .lead { max-width: 40ch; }
|
||
.hero__foot {
|
||
margin-top: var(--s6); padding-top: var(--s3); border-top: 1px solid var(--line-dark);
|
||
display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--s2) var(--s4);
|
||
font-size: .875rem; color: var(--fog-mute); letter-spacing: .04em;
|
||
}
|
||
.hero__foot ul { display: flex; flex-wrap: wrap; gap: var(--s1) var(--s4); list-style: none; padding: 0; }
|
||
.hero__foot li { display: inline-flex; align-items: center; gap: .6rem; }
|
||
.hero__foot li::before { content: ""; width: 6px; height: 6px; background: var(--kk); clip-path: polygon(100% 0, 0 50%, 100% 100%); }
|
||
.scroll-hint { display: inline-flex; align-items: center; gap: .6rem; }
|
||
.scroll-hint__line { width: 1px; height: 28px; background: var(--line-dark); position: relative; overflow: hidden; }
|
||
.scroll-hint__line::after { content: ""; position: absolute; inset: 0; background: var(--kk); transform: translateY(-100%); animation: scroll-hint 2.2s var(--ease-io) infinite; }
|
||
@keyframes scroll-hint { 0% { transform: translateY(-100%); } 60%, 100% { transform: translateY(100%); } }
|
||
|
||
/* Unterseiten-Hero */
|
||
.page-hero { position: relative; padding: 180px 0 var(--s6); overflow: clip; isolation: isolate; }
|
||
.page-hero--image { min-height: 78svh; display: grid; align-content: end; }
|
||
.page-hero--small { padding-bottom: var(--s5); }
|
||
.page-hero .hero__chevrons { width: min(48vw, 620px); right: -8vw; opacity: .7; }
|
||
.page-hero__grid { display: grid; gap: var(--s4); align-items: end; }
|
||
.page-hero h1 { max-width: 18ch; font-size: var(--fs-mega); }
|
||
.page-hero--small h1 { font-size: var(--fs-display); }
|
||
@media (min-width: 900px) { .page-hero__grid { grid-template-columns: 1.4fr 1fr; } }
|
||
|
||
/* ---------- Leistungen: horizontale Sektion ---------- */
|
||
.services-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: var(--s3); margin-bottom: var(--s6); }
|
||
.section--flush-bottom { padding-bottom: 0; }
|
||
.hscroll:not(.is-pinned) { padding-bottom: var(--section); }
|
||
.hscroll { position: relative; }
|
||
.hscroll__track { display: grid; gap: var(--s5); }
|
||
.panel { display: grid; gap: var(--s3); }
|
||
.panel__media { position: relative; aspect-ratio: 4 / 3; overflow: hidden; border-radius: var(--radius); background: var(--night-800); }
|
||
.panel__media img { width: 100%; height: 100%; object-fit: cover; }
|
||
.panel__media picture, .service-row__media picture, .hero__media picture, .compare picture { display: block; width: 100%; height: 100%; }
|
||
.panel__num { position: absolute; left: var(--s3); top: var(--s2); font-weight: 800; font-stretch: 125%; font-size: 1rem; letter-spacing: .06em; color: var(--fog); mix-blend-mode: normal; text-shadow: 0 1px 12px rgba(10,20,36,.5); }
|
||
.panel__body { display: grid; gap: var(--s2); max-width: 48ch; }
|
||
.panel h3, .service-row h3, .job summary h3, .contact-card strong { hyphens: auto; -webkit-hyphens: auto; }
|
||
.panel h3 { font-size: clamp(1.75rem, 2.6vw, 2.5rem); font-weight: 800; font-stretch: 120%; letter-spacing: -.03em; line-height: 1; }
|
||
.panel p { color: var(--fog-soft); }
|
||
.hscroll__progress { display: none; }
|
||
.hscroll:not(.is-pinned) .hscroll__track { width: min(100% - 2 * var(--gutter), var(--max)); margin-inline: auto; }
|
||
|
||
@media (min-width: 1024px) {
|
||
.hscroll.is-pinned { height: 100vh; overflow: clip; display: flex; flex-direction: column; justify-content: center; }
|
||
.hscroll.is-pinned .hscroll__track {
|
||
display: flex; gap: clamp(2rem, 4vw, 4rem); width: max-content;
|
||
padding-inline: max(var(--gutter), (100vw - var(--max)) / 2);
|
||
}
|
||
.hscroll.is-pinned .panel { width: clamp(420px, 38vw, 560px); flex: none; }
|
||
.hscroll.is-pinned .panel:nth-child(even) { margin-top: 8vh; }
|
||
.hscroll.is-pinned .panel__media { aspect-ratio: auto; height: min(44vh, 400px); }
|
||
.hscroll.is-pinned .hscroll__progress {
|
||
display: flex; align-items: center; gap: var(--s3);
|
||
width: min(100% - 2 * var(--gutter), var(--max)); margin: var(--s5) auto 0;
|
||
font-size: var(--fs-label); letter-spacing: .12em; color: var(--fog-mute); font-variant-numeric: tabular-nums;
|
||
}
|
||
.hscroll__bar { flex: 1; height: 2px; background: var(--line-dark); position: relative; overflow: hidden; }
|
||
.hscroll__bar i { position: absolute; inset: 0; background: var(--kk); transform-origin: left; transform: scaleX(0); }
|
||
}
|
||
@media (min-width: 700px) and (max-width: 1023px) {
|
||
.hscroll__track { grid-template-columns: 1fr 1fr; }
|
||
}
|
||
|
||
/* ---------- Osmose-Feature + Vorher/Nachher ---------- */
|
||
.feature { display: grid; gap: var(--s5); align-items: center; }
|
||
@media (min-width: 960px) { .feature { grid-template-columns: 1fr 1.15fr; gap: var(--s6); } }
|
||
.feature__copy { display: grid; gap: var(--s3); }
|
||
|
||
.compare {
|
||
--pos: 50%;
|
||
position: relative; aspect-ratio: 4 / 3; border-radius: var(--radius); overflow: hidden;
|
||
user-select: none; touch-action: pan-y; background: var(--night-800); cursor: ew-resize;
|
||
}
|
||
.compare img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; pointer-events: none; }
|
||
.compare__before { position: absolute; inset: 0; clip-path: inset(0 calc(100% - var(--pos)) 0 0); }
|
||
.compare__handle {
|
||
position: absolute; top: 0; bottom: 0; left: var(--pos); width: 2px; margin-left: -1px;
|
||
background: var(--white); box-shadow: 0 0 0 1px rgba(10,20,36,.2);
|
||
}
|
||
.compare__knob {
|
||
position: absolute; top: 50%; left: 50%; width: 56px; height: 56px; transform: translate(-50%, -50%);
|
||
display: grid; place-items: center; border-radius: 50%; background: var(--white); color: var(--night-950);
|
||
box-shadow: 0 10px 30px rgba(10,20,36,.35);
|
||
transition: transform var(--t-fast) var(--ease);
|
||
}
|
||
.compare:active .compare__knob, .compare:focus-visible .compare__knob { transform: translate(-50%, -50%) scale(1.08); }
|
||
.compare__knob svg { width: 26px; height: 26px; }
|
||
.compare__tag {
|
||
position: absolute; bottom: var(--s2); padding: .35rem .7rem; border-radius: 999px;
|
||
font-size: .75rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
|
||
background: rgba(10,20,36,.72); color: var(--fog); backdrop-filter: blur(6px);
|
||
}
|
||
.compare__tag--before { left: var(--s2); }
|
||
.compare__tag--after { right: var(--s2); background: var(--kk); color: var(--night-950); }
|
||
.compare:focus-visible { outline-offset: 4px; }
|
||
.figure-note { margin-top: .75rem; font-size: .8125rem; color: var(--ink-soft); }
|
||
|
||
/* ---------- Philosophie ---------- */
|
||
.philosophy { text-align: left; }
|
||
.philosophy--image { position: relative; isolation: isolate; overflow: clip; padding-block: clamp(9rem, 20vw, 18rem); }
|
||
.philosophy__media { position: absolute; inset: 0; z-index: -1; }
|
||
.philosophy__media picture { position: absolute; left: 0; right: 0; top: -12%; height: 124%; }
|
||
.philosophy__media img { width: 100%; height: 100%; object-fit: cover; }
|
||
.philosophy__media::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(10,20,36,.9) 0%, rgba(10,20,36,.62) 100%); }
|
||
.philosophy__words { font-size: var(--fs-mega); font-weight: 800; font-stretch: 125%; letter-spacing: -.045em; line-height: .95; }
|
||
.philosophy__words .word { display: inline-block; }
|
||
.philosophy__words .dot { color: var(--kk); }
|
||
|
||
/* ---------- Karriere-Band ---------- */
|
||
.band { background: var(--kk); color: var(--night-950); position: relative; overflow: clip; isolation: isolate; }
|
||
.band__inner { display: grid; gap: var(--s4); padding-block: clamp(4rem, 9vw, 7rem); }
|
||
@media (min-width: 900px) { .band__inner { grid-template-columns: 1.4fr auto; align-items: end; } }
|
||
.band p { max-width: 50ch; font-size: var(--fs-lead); line-height: 1.5; }
|
||
.band .btn { --bg: var(--night-950); --fg: var(--fog); }
|
||
.band .btn::before { background: var(--white); }
|
||
.band .btn:hover { --fg: var(--night-950); }
|
||
.band__chev { position: absolute; right: -4%; top: 50%; width: 46%; translate: 0 -50%; z-index: -1; color: var(--night-950); opacity: .08; }
|
||
.band__chev path { fill: currentColor; }
|
||
|
||
/* ---------- Footer ---------- */
|
||
.site-footer { background: var(--night-950); border-top: 1px solid var(--line-dark); padding: var(--s6) 0 var(--s4); color: var(--fog-soft); font-size: .9375rem; }
|
||
.footer-grid { display: grid; gap: var(--s5); }
|
||
@media (min-width: 860px) { .footer-grid { grid-template-columns: 1.4fr 1fr 1fr 1fr; } }
|
||
.footer-grid h2 { font-size: var(--fs-label); letter-spacing: .12em; text-transform: uppercase; color: var(--fog-mute); font-weight: 600; margin-bottom: var(--s2); }
|
||
.footer-grid ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .5rem; }
|
||
.footer-grid a { color: var(--fog); transition: color var(--t-fast); }
|
||
.footer-grid a:hover { color: var(--kk-bright); }
|
||
.footer-bottom { margin-top: var(--s6); padding-top: var(--s3); border-top: 1px solid var(--line-dark); display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--s2); font-size: .8125rem; color: var(--fog-mute); }
|
||
.footer-bottom nav { display: flex; gap: var(--s3); }
|
||
.footer-bottom a:hover { color: var(--fog); }
|
||
|
||
/* ---------- Notruf-Pille ---------- */
|
||
.sos {
|
||
position: fixed; right: var(--gutter); bottom: var(--gutter); z-index: 80;
|
||
display: inline-flex; align-items: center; gap: .7rem;
|
||
padding: .7rem 1.1rem .7rem .9rem; border-radius: 999px;
|
||
background: var(--fog); color: var(--night-950); font-weight: 650; font-size: .9375rem;
|
||
box-shadow: 0 14px 40px rgba(10,20,36,.35);
|
||
transform: translateY(calc(100% + 2rem)); opacity: 0;
|
||
transition: transform .6s var(--ease), opacity .4s var(--ease);
|
||
}
|
||
.sos.is-visible { transform: none; opacity: 1; }
|
||
.sos__dot { position: relative; width: 10px; height: 10px; border-radius: 50%; background: var(--kk-deep); }
|
||
.sos__dot::after { content: ""; position: absolute; inset: 0; border-radius: 50%; background: var(--kk-deep); animation: pulse 2.4s var(--ease) infinite; }
|
||
@keyframes pulse { 0% { transform: scale(1); opacity: .6; } 70%, 100% { transform: scale(2.8); opacity: 0; } }
|
||
.sos small { display: block; font-size: .6875rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft); line-height: 1.2; }
|
||
.sos b { font-variant-numeric: tabular-nums; line-height: 1.2; }
|
||
html:not(.js) .sos { transform: none; opacity: 1; position: static; margin: var(--s3); }
|
||
|
||
/* ---------- Intro (nur Startseite, 1× pro Session) ---------- */
|
||
.intro { display: none; }
|
||
html.has-intro .intro {
|
||
display: grid; place-items: center; position: fixed; inset: 0; z-index: 300; background: var(--night-950);
|
||
/* Sicherheitsnetz: falls JS nicht läuft, verschwindet das Intro nach 2.4s von selbst */
|
||
animation: intro-failsafe 0s 2.4s forwards;
|
||
}
|
||
@keyframes intro-failsafe { to { visibility: hidden; } }
|
||
.intro__mark { display: flex; align-items: center; gap: 1.1rem; color: var(--kk); }
|
||
.intro__mark svg { width: 88px; height: 64px; }
|
||
.intro__word { overflow: clip; }
|
||
.intro__word span { display: block; font-weight: 800; font-stretch: 125%; font-size: clamp(1.5rem, 4vw, 2.25rem); letter-spacing: .04em; color: var(--fog); line-height: 1; }
|
||
.intro__word small { display: block; font-size: .75rem; letter-spacing: .3em; text-transform: uppercase; color: var(--fog-soft); margin-top: .5rem; }
|
||
|
||
/* ---------- Leistungsseite ---------- */
|
||
|
||
.service-rows { display: grid; gap: var(--s7); }
|
||
.service-row { display: grid; gap: var(--s4); align-items: center; }
|
||
.service-row__media { aspect-ratio: 5 / 4; border-radius: var(--radius); overflow: hidden; background: var(--night-800); }
|
||
.service-row__media img { width: 100%; height: 100%; object-fit: cover; }
|
||
.service-row__body { display: grid; gap: var(--s3); max-width: 52ch; }
|
||
.service-row__num { font-weight: 800; font-stretch: 125%; color: var(--kk); letter-spacing: .06em; }
|
||
@media (min-width: 960px) {
|
||
.service-row { grid-template-columns: 1.1fr 1fr; gap: var(--s6); }
|
||
.service-row:nth-child(even) .service-row__media { order: 2; }
|
||
}
|
||
|
||
.downloads { display: grid; gap: var(--s2); }
|
||
@media (min-width: 760px) { .downloads { grid-template-columns: 1fr 1fr; } }
|
||
.download {
|
||
display: grid; grid-template-columns: auto 1fr auto; gap: var(--s3); align-items: center;
|
||
padding: var(--s3); border-radius: var(--radius); background: var(--white); box-shadow: inset 0 0 0 1px var(--line-light);
|
||
transition: box-shadow var(--t-mid) var(--ease), transform var(--t-mid) var(--ease);
|
||
}
|
||
.download:hover { box-shadow: inset 0 0 0 1px var(--kk-ink), 0 18px 40px rgba(10,20,36,.08); transform: translateY(-2px); }
|
||
.download__icon { width: 48px; height: 56px; display: grid; place-items: end center; padding-bottom: 8px; background: var(--night-950); color: var(--fog); font-size: .625rem; font-weight: 800; letter-spacing: .08em; clip-path: polygon(0 0, 70% 0, 100% 22%, 100% 100%, 0 100%); }
|
||
.download b { display: block; font-weight: 700; font-stretch: 108%; }
|
||
.download span { color: var(--ink-soft); font-size: .875rem; }
|
||
.download svg { width: 22px; height: 22px; color: var(--kk-ink); }
|
||
|
||
/* ---------- Unternehmen ---------- */
|
||
.timeline { position: relative; display: grid; gap: var(--s6); padding-left: clamp(2rem, 6vw, 5rem); }
|
||
.timeline__line { position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: var(--line-light); }
|
||
.timeline__line i { position: absolute; inset: 0; background: var(--kk-ink); transform-origin: top; }
|
||
.tl-item { position: relative; display: grid; gap: var(--s2); }
|
||
@media (min-width: 900px) { .tl-item { grid-template-columns: 220px 1fr; gap: var(--s5); } }
|
||
.tl-item::before {
|
||
content: ""; position: absolute; left: calc(-1 * clamp(2rem, 6vw, 5rem) - 7px); top: .55em; width: 16px; height: 16px;
|
||
background: var(--paper); box-shadow: inset 0 0 0 2px var(--kk-ink); border-radius: 50%;
|
||
}
|
||
.tl-item__year { font-size: clamp(2.5rem, 5vw, 4rem); font-weight: 800; font-stretch: 125%; letter-spacing: -.04em; line-height: .9; color: var(--ink); font-variant-numeric: tabular-nums; }
|
||
.tl-item h3 { font-size: 1.375rem; font-weight: 700; font-stretch: 112%; letter-spacing: -.01em; margin-bottom: .5rem; }
|
||
.tl-item p { color: var(--ink-soft); max-width: 60ch; }
|
||
|
||
.team { display: grid; gap: var(--gutter); grid-template-columns: repeat(2, 1fr); }
|
||
@media (min-width: 720px) { .team { grid-template-columns: repeat(3, 1fr); } }
|
||
@media (min-width: 1200px) { .team { grid-template-columns: repeat(6, 1fr); } }
|
||
.member { position: relative; display: grid; gap: var(--s2); }
|
||
.member__photo {
|
||
position: relative; aspect-ratio: 4 / 5; border-radius: var(--radius); overflow: hidden;
|
||
background: linear-gradient(160deg, var(--night-700), var(--night-900));
|
||
display: grid; place-items: center;
|
||
}
|
||
.member__initials { font-size: clamp(3rem, 6vw, 4.5rem); font-weight: 800; font-stretch: 125%; letter-spacing: -.04em; color: var(--kk); transition: transform .8s var(--ease); }
|
||
.member__photo svg { position: absolute; right: -18%; bottom: -10%; width: 80%; color: var(--kk); opacity: .12; transition: transform .8s var(--ease), opacity .8s var(--ease); }
|
||
.member:hover .member__initials { transform: scale(1.06); }
|
||
.member:hover .member__photo svg { transform: translateX(-8%); opacity: .22; }
|
||
.member__photo small { position: absolute; left: var(--s2); bottom: var(--s2); font-size: .6875rem; letter-spacing: .12em; text-transform: uppercase; color: var(--fog-mute); }
|
||
.member b { font-weight: 700; font-stretch: 112%; font-size: 1.125rem; display: block; }
|
||
.member span { color: var(--ink-soft); }
|
||
.member--more .member__photo { background: transparent; box-shadow: inset 0 0 0 1px var(--line-light); }
|
||
.member--more .member__initials { color: var(--ink); font-size: clamp(2.5rem, 5vw, 3.5rem); }
|
||
|
||
.map-card { display: grid; gap: var(--s4); align-items: stretch; }
|
||
.map-card > .stack { align-content: start; }
|
||
@media (min-width: 900px) { .map-card { grid-template-columns: 1fr 1.3fr; } }
|
||
.map {
|
||
position: relative; min-height: clamp(360px, 36vw, 620px); border-radius: var(--radius); overflow: hidden; background: var(--night-900);
|
||
color: var(--fog);
|
||
}
|
||
.map svg { position: absolute; inset: 0; width: 100%; height: 100%; }
|
||
.map__placeholder { position: absolute; inset: 0; transition: opacity .8s var(--ease); }
|
||
.map .map__canvas { position: absolute; inset: 0; opacity: 0; transition: opacity 1s var(--ease); } /* schlägt .maplibregl-map { position: relative } */
|
||
.map.is-live .map__canvas { opacity: 1; }
|
||
.map.is-live .map__placeholder { opacity: 0; pointer-events: none; }
|
||
.map-marker { display: grid; justify-items: center; gap: .45rem; pointer-events: none; }
|
||
.map-marker__label { padding: .45rem .8rem; background: var(--kk); color: var(--night-950); font: 700 .875rem/1.2 var(--font); border-radius: var(--radius); white-space: nowrap; box-shadow: 0 10px 30px rgba(10,20,36,.45); }
|
||
.map-marker__dot { position: relative; width: 16px; height: 16px; border-radius: 50%; background: var(--kk); box-shadow: 0 0 0 4px rgba(10,20,36,.9); }
|
||
.map-marker__dot::after { content: ""; position: absolute; inset: 0; border-radius: 50%; background: var(--kk); animation: pulse 2.4s var(--ease) infinite; }
|
||
/* MapLibre-Bedienelemente im Seitenstil */
|
||
.map .maplibregl-ctrl-group { background: var(--night-900); box-shadow: inset 0 0 0 1px var(--line-dark); border-radius: var(--radius); }
|
||
.map .maplibregl-ctrl-group button + button { border-top-color: var(--line-dark); }
|
||
.map .maplibregl-ctrl-group button .maplibregl-ctrl-icon { filter: invert(1) brightness(1.4); }
|
||
.map .maplibregl-ctrl.maplibregl-ctrl-attrib, .map .maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact-show { background: rgba(10,20,36,.85); color: var(--fog-mute); font: 400 .6875rem/1.4 var(--font); }
|
||
.map .maplibregl-ctrl-attrib-inner, .map .maplibregl-ctrl-attrib a { color: var(--fog-soft); }
|
||
.map .maplibregl-ctrl-attrib-button { filter: invert(1); }
|
||
.map .maplibregl-cooperative-gesture-screen { background: rgba(10,20,36,.72); color: var(--fog); font: 600 1rem/1.4 var(--font); }
|
||
.map__pin { position: absolute; left: 56%; top: 46%; transform: translate(-50%, -100%); display: grid; justify-items: center; gap: .4rem; }
|
||
.map__pin span { padding: .45rem .8rem; background: var(--kk); color: var(--night-950); font-weight: 700; font-size: .875rem; border-radius: var(--radius); white-space: nowrap; }
|
||
.map__pin i { width: 14px; height: 14px; border-radius: 50%; background: var(--kk); box-shadow: 0 0 0 6px rgba(91,138,214,.25); }
|
||
|
||
/* ---------- Karriere ---------- */
|
||
|
||
.jobs { display: grid; border-top: 1px solid var(--line-light); }
|
||
.job { border-bottom: 1px solid var(--line-light); }
|
||
.job summary {
|
||
list-style: none; cursor: pointer; display: grid; grid-template-columns: 1fr auto; gap: var(--s3); align-items: center;
|
||
padding: var(--s4) 0;
|
||
}
|
||
.job summary::-webkit-details-marker { display: none; }
|
||
.job summary h3 { font-size: clamp(1.5rem, 3vw, 2.5rem); font-weight: 800; font-stretch: 122%; letter-spacing: -.03em; line-height: 1.02; }
|
||
.job summary .job__meta { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .75rem; }
|
||
.job summary .job__meta span { font-size: .8125rem; padding: .3rem .7rem; border-radius: 999px; box-shadow: inset 0 0 0 1px var(--line-light); color: var(--ink-soft); }
|
||
.job__toggle { width: 56px; height: 56px; border-radius: 50%; display: grid; place-items: center; box-shadow: inset 0 0 0 1px var(--line-light); transition: background-color var(--t-mid) var(--ease), transform var(--t-mid) var(--ease); }
|
||
.job__toggle svg { width: 20px; height: 20px; transition: transform var(--t-mid) var(--ease); }
|
||
.job[open] .job__toggle { background: var(--night-950); color: var(--fog); }
|
||
.job[open] .job__toggle svg { transform: rotate(45deg); }
|
||
.job summary:hover .job__toggle { transform: scale(1.06); }
|
||
.job__body { display: grid; gap: var(--s4); padding-bottom: var(--s5); }
|
||
@media (min-width: 900px) { .job__body { grid-template-columns: 1fr 1fr; } }
|
||
.job__body h4 { font-size: var(--fs-label); letter-spacing: .12em; text-transform: uppercase; color: var(--ink-soft); font-weight: 600; margin-bottom: var(--s2); }
|
||
.job__body ul { padding: 0; margin: 0; list-style: none; display: grid; gap: .6rem; }
|
||
.job__body li { display: grid; grid-template-columns: 14px 1fr; gap: .75rem; }
|
||
.job__body li::before { content: ""; width: 9px; height: 9px; margin-top: .55em; background: var(--kk-ink); clip-path: polygon(0 0, 45% 0, 100% 50%, 45% 100%, 0 100%, 55% 50%); }
|
||
.job__text { grid-column: 1 / -1; color: var(--ink-soft); max-width: 70ch; }
|
||
.job__text p + p { margin-top: .75em; }
|
||
.job__apply { grid-column: 1 / -1; }
|
||
|
||
/* ---------- Kontaktseite ---------- */
|
||
.contact-grid { display: grid; gap: var(--gutter); }
|
||
@media (min-width: 900px) { .contact-grid { grid-template-columns: repeat(3, 1fr); } }
|
||
.contact-card {
|
||
position: relative; display: grid; gap: var(--s2); align-content: start; padding: var(--s4); min-height: 220px;
|
||
border-radius: var(--radius); background: var(--night-900); box-shadow: inset 0 0 0 1px var(--line-dark);
|
||
overflow: hidden; isolation: isolate;
|
||
transition: box-shadow var(--t-mid) var(--ease);
|
||
}
|
||
.contact-card::before {
|
||
content: ""; position: absolute; inset: 0; z-index: -1; background: var(--night-800);
|
||
clip-path: polygon(100% 0, 118% 0, 100% 50%, 118% 100%, 100% 100%);
|
||
transition: clip-path .7s var(--ease);
|
||
}
|
||
a.contact-card:hover::before { clip-path: polygon(100% 0, 0 0, -18% 50%, 0 100%, 100% 100%); }
|
||
a.contact-card:hover { box-shadow: inset 0 0 0 1px var(--kk); }
|
||
.contact-card small { font-size: var(--fs-label); letter-spacing: .12em; text-transform: uppercase; color: var(--fog-mute); }
|
||
.contact-card strong { font-size: clamp(1.5rem, 2.4vw, 2rem); font-weight: 800; font-stretch: 118%; letter-spacing: -.02em; line-height: 1.1; font-variant-numeric: tabular-nums; word-break: break-word; }
|
||
.contact-card p { color: var(--fog-soft); }
|
||
.contact-card__go { margin-top: auto; display: inline-flex; align-items: center; gap: .5rem; color: var(--kk); font-weight: 600; }
|
||
.contact-card__go svg { width: 16px; height: 16px; transition: transform var(--t-mid) var(--ease); }
|
||
a.contact-card:hover .contact-card__go svg { transform: translateX(4px); }
|
||
.contact-card--sos { background: var(--kk); color: var(--night-950); box-shadow: none; }
|
||
.contact-card--sos::before { background: var(--kk-bright); }
|
||
.contact-card--sos small, .contact-card--sos p, .contact-card--sos .contact-card__go { color: var(--night-950); }
|
||
a.contact-card--sos:hover { box-shadow: none; }
|
||
|
||
/* ---------- Rechtstexte ---------- */
|
||
.legal { max-width: 72ch; }
|
||
.legal h2 { font-size: 1.5rem; font-weight: 800; font-stretch: 115%; letter-spacing: -.015em; margin: var(--s5) 0 var(--s2); }
|
||
.legal h3 { font-size: 1.125rem; font-weight: 700; margin: var(--s4) 0 var(--s1); }
|
||
.legal p, .legal li { color: var(--ink-soft); }
|
||
.legal p + p { margin-top: .9em; }
|
||
.legal ul { padding-left: 1.2rem; display: grid; gap: .4rem; margin: .75rem 0; }
|
||
.legal a { color: var(--kk-ink); text-decoration: underline; text-underline-offset: 3px; }
|
||
.legal address { font-style: normal; color: var(--ink); line-height: 1.7; }
|
||
.todo { display: block; margin: var(--s2) 0; padding: var(--s2) var(--s3); border: 2px dashed #B3261E; border-radius: var(--radius); color: #8C1D18; background: #FCEEEE; font-size: .9375rem; }
|
||
|
||
/* ---------- Reveal-Startzustände (nur mit JS, nur mit Motion) ---------- */
|
||
@media (prefers-reduced-motion: no-preference) {
|
||
html.js [data-reveal] { opacity: 0; transform: translateY(28px); }
|
||
html.js .reveal-img { --x: 118%; }
|
||
html.js [data-split] { visibility: hidden; }
|
||
html.js [data-split].is-split { visibility: visible; }
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
*, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; scroll-behavior: auto !important; }
|
||
}
|
||
|
||
/* ---------- Seitenübergänge: Cross-Document View Transitions ---------- */
|
||
@media (prefers-reduced-motion: no-preference) {
|
||
@view-transition { navigation: auto; }
|
||
::view-transition-old(root) { animation: vt-out .6s var(--ease-io) both; }
|
||
::view-transition-new(root) { animation: vt-in .75s var(--ease-io) both; }
|
||
::view-transition-old(site-header), ::view-transition-new(site-header) { animation: none; }
|
||
.site-header { view-transition-name: site-header; }
|
||
}
|
||
@keyframes vt-out { to { opacity: .35; transform: translateX(-4%); } }
|
||
@keyframes vt-in {
|
||
from { clip-path: polygon(100% 0, 120% 0, 100% 50%, 120% 100%, 100% 100%); }
|
||
to { clip-path: polygon(100% 0, 0 0, -20% 50%, 0 100%, 100% 100%); }
|
||
}
|
||
|
||
/* ---------- Hilfen ---------- */
|
||
.mt-2 { margin-top: var(--s2); } .mt-3 { margin-top: var(--s3); } .mt-4 { margin-top: var(--s4); } .mt-5 { margin-top: var(--s5); } .mt-6 { margin-top: var(--s6); }
|
||
.stack { display: grid; gap: var(--s3); }
|
||
.section-head { display: grid; gap: var(--s3); margin-bottom: var(--s6); max-width: 60rem; }
|