diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml
index a4df268..77742d9 100644
--- a/.github/workflows/build-preview.yml
+++ b/.github/workflows/build-preview.yml
@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
name: Build Preview Site and Upload Build Artifact
env:
- HUGO_VERSION: 0.143.1
+ HUGO_VERSION: 0.161.1
steps:
- name: Install Hugo CLI
run: |
diff --git a/.github/workflows/hugo.yml b/.github/workflows/hugo.yml
index 5a81142..a4c8e67 100644
--- a/.github/workflows/hugo.yml
+++ b/.github/workflows/hugo.yml
@@ -32,7 +32,7 @@ jobs:
build:
runs-on: ubuntu-latest
env:
- HUGO_VERSION: 0.143.1
+ HUGO_VERSION: 0.161.1
steps:
- name: Install Hugo CLI
run: |
diff --git a/.gitignore b/.gitignore
index 7ee0891..b17f5f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,7 @@
/public/
.DS_Store
.direnv
+.claude
+.idea
+/relaunch/
+/CLAUDE.md
diff --git a/.hugo-version b/.hugo-version
new file mode 100644
index 0000000..e7fa6f1
--- /dev/null
+++ b/.hugo-version
@@ -0,0 +1 @@
+0.161.1
diff --git a/assets/css/base.css b/assets/css/base.css
new file mode 100644
index 0000000..faa9c02
--- /dev/null
+++ b/assets/css/base.css
@@ -0,0 +1,294 @@
+/* =====================================================================
+ BRAND IDENTITY
+
+ Three brand colors, defined by the logo
+ (`static/images/peakscale-logo*.svg`):
+
+ Dark blue #091836 rgb(9, 24, 54) → --dark-blue
+ Bright blue #0580c4 rgb(5, 128, 196) → --bright-blue
+ White #ffffff → --bg-white
+
+ Everything else is supportive palette — keeps the page readable and
+ gives cards their lift, but is not part of the brand identity. Use
+ sparingly.
+ ===================================================================== */
+
+:root {
+ /* Page surfaces */
+ --bg: rgb(240, 248, 252); /* icy blue-white page bg */
+ --bg-white: rgb(255, 255, 255); /* [BRAND] white */
+
+ /* Brand blues */
+ --dark-blue: rgb(9, 24, 54); /* [BRAND] display, dark surfaces, hover ink */
+ --bright-blue: rgb(5, 128, 196); /* [BRAND] eyebrows, dots, links, primary buttons */
+
+ /* Supporting greys */
+ --fg-muted: rgb(81, 87, 99); /* body copy */
+ --fg-subtle: rgb(165, 171, 183); /* meta */
+
+ /* Hairlines */
+ --border: rgb(208, 214, 227);
+ --border-faint: rgba(208, 214, 227, .5);
+
+ /* Dark sections */
+ --stroke-on-dark: rgba(255, 255, 255, .16);
+ --text-on-dark: rgba(255, 255, 255, .78);
+ --accent-on-dark: rgb(122, 192, 232); /* lighter blue for eyebrows / meta */
+
+ /* Accents (small dosage: checkmarks, tags, status, illustration details) */
+ --accent-yellow: rgb(232, 184, 60); /* warm honey / amber */
+ --accent-yellow-soft: rgb(252, 238, 180); /* pale wash */
+ --accent-green: rgb(125, 175, 75); /* fresh grass */
+ --accent-green-soft: rgb(228, 240, 210); /* pale wash */
+
+ /* Photo overlay — subtle navy → blue wash applied above section
+ background-images so the photo stays readable. Used inline in
+ templates as the first layer of `background-image`. */
+ --overlay-photo: linear-gradient(135deg, rgba(7,19,44,.4), rgba(5,128,196,.2));
+
+ /* Shadows */
+ --shadow-brand: 0 3px 6px 0 rgba(5, 128, 196, .10),
+ 0 11px 11px 0 rgba(5, 128, 196, .09),
+ 0 24px 14px 0 rgba(5, 128, 196, .05),
+ 0 43px 17px 0 rgba(5, 128, 196, .01);
+ --shadow-float: 0 8px 24px -8px rgba(9, 24, 54, .18),
+ 0 2px 8px -2px rgba(9, 24, 54, .08);
+ --shadow-soft: 0px 6px 12px rgba(9, 24, 54, .05);
+}
+
+/* ---------- Typography ---------- */
+
+@import url('https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,200;9..40,300;9..40,400;9..40,500;9..40,700;9..40,900&family=Inter:wght@400;600;700&display=swap');
+
+:root {
+ --font-sans: 'DM Sans', system-ui, -apple-system, BlinkMacSystemFont,
+ 'Segoe UI', Roboto, sans-serif;
+ --font-ui: 'Inter', system-ui, sans-serif;
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
+
+ /* 7-step type scale. Display sizes scale fluidly; the rest are fixed.
+ Pull-quote / lifecycle stage / prose h2 collapse into title-lg. */
+ --text-display: clamp(40px, 5.6vw, 72px); /* hero only */
+ --text-display-sm: clamp(28px, 3.4vw, 48px); /* section headings */
+ --text-title-lg: 22px; /* feature cards, pull quote */
+ --text-title: 18px; /* all card h3 */
+ --text-body: 16px; /* body, hero lead, lead */
+ --text-sm: 14px; /* descriptions, captions */
+ --text-eyebrow: 12px; /* uppercase labels, nav, micro */
+
+ --w-extralight: 200;
+ --w-light: 300;
+ --w-regular: 400;
+ --w-medium: 500;
+ --w-bold: 700;
+ --w-black: 900;
+
+ --leading-display: 1.1;
+ --leading-tight: 1.2;
+ --leading-snug: 1.4;
+ --leading-normal: 1.6;
+
+ --tracking-tight: -0.02em;
+ --tracking-eyebrow: 0.1em;
+}
+
+/* ---------- Spacing, radius ---------- */
+
+:root {
+ --space-1: 4px;
+ --space-2: 8px;
+ --space-3: 12px;
+ --space-4: 16px;
+ --space-6: 24px;
+ --space-8: 32px;
+ --space-12: 48px;
+ --space-16: 64px;
+ --space-20: 80px;
+ --space-24: 96px;
+ --space-30: 120px;
+
+ --radius-sm: 4px;
+ --radius-md: 8px;
+ --radius-lg: 16px;
+ --radius-xl: 24px;
+ --radius-pill: 60px;
+ --radius-full: 9999px;
+
+ --layout-max: 1200px;
+ --layout-gutter: 360px;
+}
+
+/* ---------- Element styles ---------- */
+
+html, body {
+ font-family: var(--font-sans);
+ font-size: var(--text-body);
+ line-height: var(--leading-normal);
+ color: var(--dark-blue);
+ background: var(--bg);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+h1, .h1 {
+ font-family: var(--font-sans);
+ font-size: var(--text-display);
+ font-weight: var(--w-medium);
+ line-height: var(--leading-display);
+ letter-spacing: var(--tracking-tight);
+ color: var(--dark-blue);
+ margin: 0 0 var(--space-6);
+ text-wrap: balance;
+}
+
+h2, .h2, .display-xl {
+ font-size: var(--text-display-sm);
+ font-weight: var(--w-medium);
+ line-height: var(--leading-tight);
+ letter-spacing: var(--tracking-tight);
+ margin: 0 0 var(--space-6);
+ text-wrap: balance;
+}
+
+h3, .h3 {
+ font-size: var(--text-title);
+ font-weight: var(--w-medium);
+ line-height: var(--leading-tight);
+ margin: 0 0 var(--space-4);
+}
+
+h4, .h4 {
+ font-size: var(--text-title-lg);
+ font-weight: var(--w-medium);
+ line-height: var(--leading-tight);
+ margin: 0 0 var(--space-3);
+}
+
+.lead {
+ font-size: var(--text-body);
+ font-weight: var(--w-regular);
+ line-height: var(--leading-normal);
+ color: var(--fg-muted);
+}
+
+p, .body {
+ font-size: var(--text-body);
+ line-height: var(--leading-snug);
+ color: var(--fg-muted);
+ margin: 0 0 var(--space-4);
+ text-wrap: pretty;
+}
+
+.eyebrow {
+ font-family: var(--font-ui);
+ font-size: var(--text-eyebrow);
+ font-weight: var(--w-bold);
+ text-transform: uppercase;
+ letter-spacing: var(--tracking-eyebrow);
+ color: var(--bright-blue);
+ display: inline-block;
+}
+
+.mono, code, kbd, samp, pre {
+ font-family: var(--font-mono);
+ font-size: .9em;
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+ transition: color .18s ease, opacity .18s ease;
+}
+
+a:hover {
+ color: var(--bright-blue);
+}
+
+hr {
+ border: 0;
+ border-top: 1px solid var(--border);
+ margin: var(--space-12) 0;
+}
+
+/* ---------- Re-usable element classes ---------- */
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ padding: 14px 28px;
+ border-radius: var(--radius-pill);
+ font-family: var(--font-sans);
+ font-size: var(--text-sm);
+ font-weight: var(--w-medium);
+ line-height: 1;
+ border: 1px solid transparent;
+ cursor: pointer;
+ transition: background .2s ease, color .2s ease, border-color .2s ease, transform .1s ease, box-shadow .2s ease;
+ white-space: nowrap;
+}
+
+.btn:active {
+ transform: scale(.98);
+}
+
+.btn--primary {
+ background: var(--bright-blue);
+ color: var(--bg-white);
+}
+
+.btn--primary:hover {
+ background: var(--dark-blue);
+}
+
+.btn--inverse {
+ background: var(--bg-white);
+ color: var(--bright-blue);
+ border-color: var(--bg-white);
+}
+
+.btn--inverse:hover {
+ background: var(--bg);
+}
+
+.btn--ghost {
+ background: transparent;
+ color: var(--dark-blue);
+ border-color: var(--border);
+}
+
+.btn--ghost:hover {
+ border-color: var(--bright-blue);
+ color: var(--bright-blue);
+}
+
+.card {
+ background: var(--bg-white);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-lg);
+ padding: var(--space-8);
+ box-shadow: var(--shadow-brand);
+ transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
+}
+
+a.card {
+ color: inherit;
+ text-decoration: none;
+}
+
+a.card:hover,
+.card:has(a):hover {
+ transform: translateY(-2px);
+ border-color: var(--bright-blue);
+}
+
+.dot-square {
+ display: inline-block;
+ width: 6px;
+ height: 6px;
+ background: var(--bright-blue);
+ transform: rotate(45deg);
+ border-radius: 2px;
+ vertical-align: middle;
+}
diff --git a/assets/css/site.css b/assets/css/site.css
new file mode 100644
index 0000000..b9c89af
--- /dev/null
+++ b/assets/css/site.css
@@ -0,0 +1,1269 @@
+/* Peak Scale — site styles. base.css is concatenated ahead of this file. */
+
+*, *::before, *::after { box-sizing: border-box; }
+html { scroll-behavior: smooth; }
+body { margin: 0; min-height: 100vh; }
+
+img, svg, video { max-width: 100%; height: auto; display: block; }
+ul.reset, ol.reset { list-style: none; padding: 0; margin: 0; }
+
+.sr-only {
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
+ overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
+}
+
+.skip-link {
+ position: absolute; left: 16px; top: -100px; z-index: 100;
+ background: var(--bright-blue); color: #fff; padding: 12px 18px;
+ border-radius: var(--radius-pill); font-size: var(--text-sm); font-weight: 500;
+}
+.skip-link:focus { top: 16px; }
+
+:focus-visible {
+ outline: 2px solid var(--bright-blue);
+ outline-offset: 3px;
+ border-radius: 4px;
+}
+
+/* ---------- Layout ---------- */
+
+.container {
+ width: 100%;
+ max-width: 1200px;
+ margin: 0 auto;
+ padding-left: clamp(20px, 4vw, 40px);
+ padding-right: clamp(20px, 4vw, 40px);
+}
+
+.section {
+ padding: clamp(56px, 8vw, 120px) 0;
+}
+.section--alt {
+ background: var(--bg-white);
+ border-top: 1px solid var(--border-faint);
+ border-bottom: 1px solid var(--border-faint);
+}
+.section--dark {
+ background: var(--dark-blue);
+ color: #fff;
+ position: relative;
+ overflow: hidden;
+}
+.section--dark .eyebrow { color: var(--accent-on-dark); }
+.section--dark p { color: var(--text-on-dark); }
+.section--dark h1, .section--dark h2, .section--dark h3, .section--dark h4 { color: #fff; }
+.section--dark .lead { color: var(--text-on-dark); }
+
+.section__head {
+ max-width: 760px;
+ margin: 0 auto var(--space-12);
+ text-align: center;
+}
+.section__head--left {
+ margin-left: 0;
+ margin-right: auto;
+ text-align: left;
+}
+.section__head .eyebrow { margin-bottom: var(--space-4); }
+.section__head .lead {
+ margin: var(--space-4) auto 0;
+ max-width: 640px;
+}
+.section__head--left .lead { margin-left: 0; margin-right: 0; }
+.section__head h2 { text-wrap: balance; }
+
+.section__icon {
+ width: 56px; height: 56px; border-radius: 9999px;
+ background: rgba(5, 128, 196, .08); color: var(--bright-blue);
+ display: inline-flex; align-items: center; justify-content: center;
+ margin-bottom: var(--space-4);
+}
+.section--dark .section__icon {
+ background: rgba(255,255,255,.08); color: var(--accent-on-dark);
+}
+
+/* ---------- Grids ---------- */
+
+.grid {
+ display: grid;
+ gap: var(--space-6);
+}
+.grid--2 { grid-template-columns: repeat(2, 1fr); }
+.grid--3 { grid-template-columns: repeat(3, 1fr); }
+.grid--4 { grid-template-columns: repeat(4, 1fr); }
+.grid--5 { grid-template-columns: repeat(5, 1fr); }
+
+@media (max-width: 960px) {
+ .grid--3, .grid--4, .grid--5 { grid-template-columns: repeat(2, 1fr); }
+}
+@media (max-width: 600px) {
+ .grid--2, .grid--3, .grid--4, .grid--5 { grid-template-columns: 1fr; }
+}
+
+/* ---------- Header (floating pill) ---------- */
+
+.site-header {
+ position: sticky;
+ top: 16px;
+ z-index: 30;
+ padding: 0 16px;
+ margin-top: 16px;
+}
+.site-header__pill {
+ max-width: 1140px;
+ margin: 0 auto;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 16px;
+ padding: 12px 22px;
+ border-radius: var(--radius-pill);
+ background: var(--text-on-dark);
+ backdrop-filter: blur(16px);
+ -webkit-backdrop-filter: blur(16px);
+ border: 1px solid var(--border-faint);
+ box-shadow: var(--shadow-float);
+}
+.site-header__brand {
+ display: flex; align-items: center;
+ color: var(--dark-blue);
+ flex-shrink: 0;
+}
+.site-header__brand:hover { color: var(--dark-blue); }
+.site-header__brand img {
+ height: 30px; width: auto; display: block;
+}
+
+.site-header__nav {
+ display: flex; align-items: center; gap: 14px;
+}
+.site-header__nav a {
+ font-size: var(--text-eyebrow); font-weight: 600; color: var(--fg-muted);
+ text-transform: uppercase; letter-spacing: 0.08em;
+ padding: 4px 0; transition: color .18s ease;
+}
+.site-header__nav a:hover { color: var(--bright-blue); }
+.site-header__nav a.is-active { color: var(--bright-blue); }
+
+.site-header__actions {
+ display: flex; align-items: center; gap: 12px;
+}
+
+.lang-switch {
+ display: inline-flex; align-items: center;
+ background: var(--bg); border-radius: 9999px; padding: 2px;
+}
+.lang-switch a {
+ padding: 4px 12px; font-size: var(--text-eyebrow); font-weight: 500;
+ border-radius: 9999px; color: var(--fg-muted);
+ transition: background .18s ease, color .18s ease;
+}
+.lang-switch a.is-active {
+ background: #fff; color: var(--bright-blue); box-shadow: var(--shadow-soft);
+}
+
+.site-header__menu-toggle {
+ display: none;
+ border: 0; background: transparent; padding: 6px; cursor: pointer;
+ color: var(--dark-blue);
+}
+
+@media (max-width: 860px) {
+ .site-header__nav,
+ .site-header__actions .lang-switch { display: none; }
+ .site-header__menu-toggle { display: inline-flex; }
+}
+
+/* ---------- Mobile menu overlay ---------- */
+
+.mobile-menu {
+ position: fixed; inset: 0; z-index: 60;
+ background: var(--bg);
+ padding: 24px;
+ display: flex; flex-direction: column;
+}
+.mobile-menu[hidden] { display: none; }
+.mobile-menu__head {
+ display: flex; justify-content: space-between; align-items: center;
+ margin-bottom: 48px;
+}
+.mobile-menu__close {
+ border: 0; background: transparent; cursor: pointer; color: var(--dark-blue);
+ padding: 6px;
+}
+.mobile-menu__list {
+ list-style: none; padding: 0; margin: 0;
+ display: flex; flex-direction: column; gap: 4px;
+}
+.mobile-menu__list a {
+ font-size: var(--text-title-lg); font-weight: 500; color: var(--dark-blue);
+ display: inline-block; padding: 8px 0;
+}
+.mobile-menu__list a.is-active { color: var(--bright-blue); }
+.mobile-menu__footer {
+ margin-top: auto; display: flex; flex-direction: column; gap: 16px;
+ padding-top: 24px; border-top: 1px solid var(--border);
+}
+
+/* ---------- Floating contact button ---------- */
+
+.contact-fab {
+ position: fixed; right: 22px; bottom: 22px; z-index: 40;
+ width: 56px; height: 56px; border-radius: 9999px; border: 0; cursor: pointer;
+ background: var(--bright-blue); color: #fff;
+ box-shadow: var(--shadow-float);
+ display: flex; align-items: center; justify-content: center;
+ text-decoration: none;
+ transition: background .2s ease, transform .1s ease;
+}
+.contact-fab:hover { background: var(--dark-blue); color: #fff; }
+.contact-fab:active { transform: scale(.96); }
+
+@supports (padding: env(safe-area-inset-bottom)) {
+ .contact-fab {
+ bottom: calc(22px + env(safe-area-inset-bottom));
+ right: calc(22px + env(safe-area-inset-right));
+ }
+}
+
+/* ---------- Hero (centered) ---------- */
+
+.hero {
+ position: relative;
+ padding: clamp(56px, 8vw, 120px) 0 clamp(40px, 6vw, 80px);
+ text-align: center;
+ overflow: hidden;
+}
+.hero::before {
+ content: "";
+ position: absolute;
+ top: 44%;
+ left: 58%;
+ width: 1750px;
+ aspect-ratio: 177 / 91;
+ transform: translate(-50%, -50%);
+ background: url('/images/peakscale-watermark.svg') center / contain no-repeat;
+ pointer-events: none;
+ z-index: 0;
+}
+.hero__inner, .hero > .container { position: relative; z-index: 1; }
+.hero__inner {
+ max-width: 880px;
+ margin: 0 auto;
+}
+.hero__title {
+ font-size: var(--text-display);
+ line-height: 1.05;
+ font-weight: 500;
+ letter-spacing: -0.02em;
+ margin: 0 0 var(--space-6);
+ color: var(--dark-blue);
+ text-wrap: balance;
+}
+.hero__lead {
+ margin: 0 auto var(--space-6);
+ max-width: 640px;
+ font-size: var(--text-body);
+ line-height: 1.6;
+ color: var(--fg-muted);
+}
+.hero__kicker {
+ display: inline-block;
+ margin: 0 auto var(--space-8);
+ padding: 8px 18px;
+ background: var(--bg-white);
+ border-radius: var(--radius-pill);
+ font-family: var(--font-ui);
+ font-size: var(--text-eyebrow); font-weight: 700;
+ text-transform: uppercase; letter-spacing: var(--tracking-eyebrow);
+ color: var(--bright-blue);
+}
+.hero__ctas {
+ display: flex; gap: 12px; flex-wrap: wrap; justify-content: center;
+ margin-top: var(--space-2);
+}
+.hero__ctas .btn {
+ padding: 14px 28px;
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ font-size: var(--text-eyebrow);
+ font-weight: 700;
+}
+/* Match the .next-steps__cta arrow badge so the home-hero CTA reads as the
+ same component family: colored circle with white arrow at the end of the
+ pill. Inside the bright-blue primary button we use --dark-blue so the
+ circle has contrast against the button background. */
+.hero__ctas .btn--primary svg {
+ background: var(--dark-blue); border-radius: 9999px; padding: 4px;
+ width: 22px; height: 22px; color: #fff;
+}
+
+/* ---------- Accent helper for partial heading words ---------- */
+.accent {
+ color: var(--bright-blue);
+}
+.section--dark .accent,
+.next-steps .accent { color: var(--accent-on-dark); }
+
+.hero-photo {
+ margin: clamp(32px, 5vw, 56px) auto 0;
+ max-width: 1200px;
+ border-radius: var(--radius-lg);
+ overflow: hidden;
+ position: relative;
+ aspect-ratio: 16/7;
+ background-size: cover; background-position: center;
+ box-shadow: var(--shadow-soft);
+}
+.hero-photo__svg { position: absolute; inset: 0; width: 100%; height: 100%; }
+
+.hero-photo__tags {
+ position: absolute; inset: 0;
+ pointer-events: none;
+}
+.hero-photo__tag {
+ position: absolute;
+ background: rgba(255,255,255,.92);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+ padding: 10px 18px;
+ border-radius: var(--radius-pill);
+ font-size: var(--text-sm); font-weight: 500; color: var(--dark-blue);
+ box-shadow: var(--shadow-soft);
+ white-space: nowrap;
+}
+.hero-photo__tag--1 { top: 10%; left: 42%; }
+.hero-photo__tag--4 { top: 70%; right: 4%; }
+.hero-photo__tag--2 { top: 35%; right: 20%; }
+.hero-photo__tag--3 { bottom: 28%; left: 10%; }
+@media (max-width: 720px) {
+ .hero-photo__tag { font-size: var(--text-eyebrow); padding: 6px 12px; }
+}
+
+/* ---------- Cards ---------- */
+
+.card h3 { font-size: var(--text-title); font-weight: 500; margin: 0 0 10px; color: var(--dark-blue); }
+.card p { font-size: var(--text-sm); color: var(--fg-muted); margin: 0 0 18px; line-height: 1.55; }
+.card .card__link {
+ font-size: var(--text-sm); font-weight: 500; color: var(--bright-blue);
+ display: inline-flex; align-items: center; gap: 6px;
+}
+.card .card__link:hover { color: var(--dark-blue); }
+
+.card__icon {
+ display: inline-flex; align-items: center; justify-content: center;
+ width: 52px; height: 52px; margin-bottom: 18px;
+ color: var(--bright-blue);
+}
+.card__icon svg { stroke-width: 1.5; }
+
+/* ---------- Why grid (6 tiles, 3 columns; first card featured & dark with topo image) ---------- */
+
+.why-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-6); }
+.why-grid--2 { grid-template-columns: repeat(2, 1fr); }
+@media (max-width: 960px) { .why-grid { grid-template-columns: repeat(2, 1fr); } }
+@media (max-width: 560px) {
+ .why-grid, .why-grid--2 { grid-template-columns: 1fr; }
+ .why-grid > .card { min-height: 280px; }
+}
+
+.why-grid .card--feature {
+ background: linear-gradient(160deg, var(--dark-blue) 0%, rgba(5,128,196,.25) 100%);
+ color: #fff;
+ position: relative;
+ overflow: hidden;
+ border-color: transparent;
+}
+/* Image fills the full card; headline overlays the upper area (where the
+ source image is dark and blends into the gradient). */
+.why-grid .card--feature h3 {
+ position: relative;
+ z-index: 1;
+ color: #fff;
+ font-weight: 400;
+ line-height: 1.3;
+}
+.why-grid .card--feature h3 strong { font-weight: 700; color: #fff; }
+.why-grid .card--feature p { position: relative; z-index: 1; color: var(--text-on-dark); }
+.why-grid .card--feature::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ background: var(--feature-image) center calc(100% + 150px) / 120% auto no-repeat;
+ mix-blend-mode: screen;
+ filter: saturate(1.4) brightness(1.15);
+ pointer-events: none;
+}
+
+/* ---------- Lifecycle: horizontal arrow path ---------- */
+
+.lifecycle-path {
+ display: flex; align-items: center; justify-content: center;
+ flex-wrap: wrap;
+ gap: var(--space-3) var(--space-4);
+ font-family: var(--font-ui);
+ font-size: var(--text-sm); font-weight: 700;
+ letter-spacing: var(--tracking-eyebrow);
+ text-transform: uppercase;
+ color: var(--bright-blue);
+}
+.lifecycle-path__step { white-space: nowrap; }
+.lifecycle-path__arrow {
+ color: var(--bright-blue); opacity: .6;
+ font-family: var(--font-sans); font-weight: 400;
+}
+
+/* ---------- Customer logo carousel (boxed tiles, JS-scrolled, arrows) ---------- */
+
+.logo-carousel {
+ position: relative;
+ padding: var(--space-6) 56px; /* leave room for the arrow buttons */
+}
+.logo-carousel__viewport {
+ overflow: hidden;
+ /* Vertical slack so the tile's translateY(-2px) hover lift and its
+ top border aren't clipped by the overflow boundary. */
+ padding: 6px 0;
+ /* Fade edges into the section background */
+ -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 4%, #000 96%, transparent 100%);
+ mask-image: linear-gradient(90deg, transparent 0, #000 4%, #000 96%, transparent 100%);
+}
+.logo-carousel__track {
+ display: flex;
+ gap: var(--space-4);
+ transform: translateX(0);
+ transition: transform .5s ease;
+ will-change: transform;
+}
+@media (prefers-reduced-motion: reduce) {
+ .logo-carousel__track { transition: none; }
+}
+
+.logo-carousel__nav {
+ position: absolute;
+ top: 50%; transform: translateY(-50%);
+ z-index: 2;
+ width: 44px; height: 44px; padding: 0;
+ border-radius: 9999px;
+ background: var(--bg-white);
+ border: 1px solid var(--border);
+ color: var(--bright-blue);
+ font-size: 20px; line-height: 1;
+ cursor: pointer;
+ box-shadow: var(--shadow-soft);
+ display: inline-flex; align-items: center; justify-content: center;
+ transition: border-color .2s ease, color .2s ease, transform .1s ease;
+}
+.logo-carousel__nav:hover { border-color: var(--bright-blue); color: var(--dark-blue); }
+.logo-carousel__nav:active { transform: translateY(-50%) scale(.96); }
+.logo-carousel__nav--prev { left: 0; }
+.logo-carousel__nav--next { right: 0; }
+
+.logo-tile {
+ flex: 0 0 auto;
+ display: inline-flex; align-items: center; justify-content: center;
+ width: 220px; height: 110px;
+ /* Generous, even padding on all sides — this is the visible
+ "border" around every logo. Each logo then fills the full
+ interior so the surrounding whitespace is consistent regardless
+ of the logo's aspect ratio. */
+ padding: 18px 32px;
+ background: var(--bg-white);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-md);
+ box-shadow: var(--shadow-soft);
+ transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
+}
+.logo-tile:hover {
+ border-color: var(--bright-blue);
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-float);
+}
+/* Each img fills the entire tile interior; object-fit: contain then
+ scales the SVG to the largest size that fits, so portrait marks
+ (BFH) and landscape marks (Mobiliar) both reach an edge of the
+ interior box. */
+.logo-tile img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+ filter: grayscale(1);
+ opacity: .65;
+ transition: filter .2s ease, opacity .2s ease;
+}
+.logo-tile:hover img { filter: none; opacity: 1; }
+
+@media (max-width: 560px) {
+ .logo-tile { width: 180px; height: 90px; padding: 14px 24px; }
+}
+
+/* ---------- Partner logos (4 plain tiles, large logo) ---------- */
+
+/* Partner logos: same tile treatment as the customer logo strip but as a
+ static centered grid (no carousel). Uniform 220×110 white cards so each
+ logo's surrounding whitespace is consistent regardless of aspect ratio. */
+.partner-logos {
+ display: grid;
+ grid-template-columns: repeat(4, 220px);
+ gap: var(--space-6);
+ justify-content: center;
+ align-items: center;
+ padding: var(--space-8) 0;
+}
+.partner-logos__item {
+ display: inline-flex; align-items: center; justify-content: center;
+ width: 220px; height: 110px;
+ padding: 18px 32px;
+ background: var(--bg-white);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-md);
+ box-shadow: var(--shadow-soft);
+ transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
+}
+.partner-logos__item:hover {
+ border-color: var(--bright-blue);
+ transform: translateY(-2px);
+ box-shadow: var(--shadow-float);
+}
+.partner-logos__item img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+ filter: grayscale(1);
+ opacity: .65;
+ transition: filter .2s ease, opacity .2s ease;
+}
+.partner-logos__item:hover img { filter: none; opacity: 1; }
+
+@media (max-width: 960px) { .partner-logos { grid-template-columns: repeat(2, 220px); } }
+@media (max-width: 480px) {
+ .partner-logos { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); }
+ .partner-logos__item { width: 100%; height: 90px; padding: 14px 20px; }
+}
+
+/* ---------- Testimonial (centered with chevrons) ---------- */
+
+.testimonial-carousel {
+ position: relative;
+ max-width: 880px; margin: 0 auto;
+ text-align: center;
+ padding: var(--space-8) 0;
+}
+.testimonial-carousel__bg {
+ position: absolute; inset: 0;
+ background: radial-gradient(circle at center, rgba(5,128,196,.08) 0%, transparent 70%);
+ pointer-events: none;
+ z-index: 0;
+}
+.testimonial-carousel__bg::before,
+.testimonial-carousel__bg::after {
+ content: ""; position: absolute; left: 50%; top: 50%;
+ border: 1px solid rgba(5,128,196,.12); border-radius: 50%;
+ transform: translate(-50%,-50%);
+}
+.testimonial-carousel__bg::before { width: 360px; height: 360px; }
+.testimonial-carousel__bg::after { width: 580px; height: 580px; }
+
+.testimonial-carousel__viewport { position: relative; z-index: 1; min-height: 200px; padding: 0 56px; }
+.testimonial { margin: 0; }
+.testimonial__quote {
+ margin: 0;
+ font-size: var(--text-title-lg);
+ line-height: 1.45; color: var(--dark-blue); font-weight: 400;
+ font-style: italic;
+}
+.testimonial__quote::before { content: "“"; }
+.testimonial__quote::after { content: "”"; }
+.section--dark .testimonial__quote { color: #fff; }
+.testimonial__cite { margin-top: 24px; font-size: var(--text-sm); color: var(--fg-muted); }
+.section--dark .testimonial__cite { color: var(--text-on-dark); }
+
+.testimonial-carousel__nav {
+ position: absolute; top: 50%; transform: translateY(-50%);
+ background: var(--bright-blue); border: 1px solid var(--bright-blue);
+ width: 56px; height: 56px; border-radius: 9999px;
+ display: inline-flex; align-items: center; justify-content: center;
+ color: #fff; cursor: pointer; padding: 0;
+ font-size: 22px; line-height: 1;
+ z-index: 2;
+ box-shadow: var(--shadow-soft);
+ transition: background .2s ease, transform .1s ease;
+}
+.testimonial-carousel__nav:hover { background: var(--dark-blue); border-color: var(--dark-blue); color: #fff; }
+.testimonial-carousel__nav:active { transform: translateY(-50%) scale(.96); }
+.testimonial-carousel__nav--prev { left: 0; }
+.testimonial-carousel__nav--next { right: 0; }
+
+.testimonial-carousel__dots {
+ display: flex; gap: 8px; margin-top: 28px; justify-content: center;
+ position: relative; z-index: 1;
+}
+.testimonial-carousel__dots button {
+ width: 8px; height: 8px; border-radius: 9999px;
+ background: rgba(165,171,183,.4); border: 0; padding: 0; cursor: pointer;
+ transition: all .2s ease;
+}
+.testimonial-carousel__dots button.is-active {
+ width: 24px; background: var(--bright-blue); border-radius: 4px;
+}
+
+/* Yellow side-card testimonial (Services page) */
+.testimonial-side {
+ background: var(--accent-yellow-soft);
+ border-radius: var(--radius-lg);
+ padding: var(--space-8);
+ border: 1px solid rgba(184,169,120,.3);
+ position: relative;
+ display: flex; flex-direction: column; gap: var(--space-3);
+ margin: 0;
+}
+.testimonial-side__mark {
+ font-family: Georgia, serif; font-size: 64px; line-height: 1;
+ color: rgba(184,169,120,.5);
+ position: absolute; top: 8px; left: 16px;
+}
+.testimonial-side__quote {
+ margin: 0; font-style: italic; font-size: var(--text-body); line-height: 1.55;
+ color: var(--dark-blue); position: relative; z-index: 1;
+ margin-top: 28px;
+}
+.testimonial-side__cite { font-size: var(--text-sm); color: var(--fg-muted); margin: 0; }
+
+.tag-arbeitsweise {
+ background: var(--accent-green-soft);
+ border-radius: var(--radius-md);
+ padding: var(--space-4) var(--space-6);
+ border: 1px solid rgba(144,202,125,.3);
+ font-size: var(--text-sm); color: var(--dark-blue);
+}
+.tag-arbeitsweise strong { color: var(--dark-blue); display: block; margin-bottom: 4px; }
+
+/* ---------- Lifecycle rows (dark, 4 horizontal rows with image + text) ---------- */
+
+.lifecycle-rows { display: flex; flex-direction: column; gap: var(--space-6); }
+.lifecycle-rows__row {
+ display: grid;
+ grid-template-columns: 200px 1fr 1fr;
+ gap: var(--space-6);
+ align-items: stretch;
+}
+.lifecycle-rows__title {
+ font-size: var(--text-title-lg); font-weight: 500; color: #fff;
+ letter-spacing: -0.01em; margin: 0; line-height: 1.2;
+ align-self: center;
+}
+.lifecycle-rows__media {
+ aspect-ratio: 16/10;
+ border-radius: var(--radius-lg);
+ background: linear-gradient(135deg, rgba(5,128,196,.4) 0%, rgba(9,24,54,.85) 100%);
+ background-size: cover; background-position: center;
+ border: 1px solid var(--stroke-on-dark);
+}
+@media (max-width: 760px) {
+ .lifecycle-rows__row { grid-template-columns: 1fr; }
+ .lifecycle-rows__media { display: none; }
+}
+
+/* ---------- Glass challenges card ---------- */
+
+.challenges-glass {
+ position: relative;
+ border-radius: var(--radius-lg);
+ overflow: hidden;
+ background: var(--dark-blue);
+ min-height: 360px;
+ padding: clamp(32px, 5vw, 64px);
+ color: #fff;
+}
+.challenges-glass__bg {
+ position: absolute; inset: 0; z-index: 0;
+ background-image: linear-gradient(135deg, rgba(7,19,44,.85) 0%, rgba(5,128,196,.4) 100%),
+ var(--challenges-bg, none);
+ background-size: cover; background-position: center;
+}
+.challenges-glass__inner { position: relative; z-index: 1; }
+.challenges-glass__item {
+ background: rgba(255,255,255,.06);
+ border: 1px solid rgba(255,255,255,.12);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ border-radius: var(--radius-md);
+ padding: var(--space-6);
+}
+.challenges-glass__item h3 { font-size: var(--text-title); font-weight: 500; color: #fff; margin: 0 0 10px; }
+.challenges-glass__item p { font-size: var(--text-sm); color: var(--text-on-dark); margin: 0; line-height: 1.55; }
+
+/* Split variant: heading on the left, stacked cards on the right */
+.challenges-glass--split { padding: clamp(40px, 5vw, 72px); min-height: 420px; }
+.challenges-glass__inner--split {
+ display: grid;
+ grid-template-columns: 1fr 1.1fr;
+ gap: clamp(32px, 5vw, 64px);
+ align-items: start;
+}
+.challenges-glass__intro h2 {
+ font-size: var(--text-display-sm);
+ line-height: 1.1; font-weight: 500; letter-spacing: -0.01em;
+ margin: 0 0 var(--space-4);
+}
+.challenges-glass__intro .lead { margin: 0; color: var(--text-on-dark); }
+.challenges-glass__stack { display: flex; flex-direction: column; gap: var(--space-3); }
+.challenges-glass__stack .challenges-glass__item { padding: 20px var(--space-6); }
+.challenges-glass__item--featured {
+ background: rgba(255,255,255,.94);
+ border-color: rgba(255,255,255,.94);
+}
+.challenges-glass__item--featured h3 { color: var(--dark-blue); }
+.challenges-glass__item--featured p { color: var(--fg-muted); }
+@media (max-width: 860px) {
+ .challenges-glass__inner--split { grid-template-columns: 1fr; }
+}
+
+/* ---------- Next-step cross-link cards (dark gradient) ---------- */
+
+.next-steps {
+ display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-6);
+}
+@media (max-width: 760px) { .next-steps { grid-template-columns: 1fr; } }
+
+/* Mosaic variant: 1 large primary on the left, 2 stacked variants on the right */
+.next-steps--mosaic {
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr 1fr;
+ gap: var(--space-6);
+ max-width: 980px; margin: 0 auto;
+}
+.next-steps--mosaic .next-steps__card--primary {
+ grid-row: 1 / span 2;
+}
+@media (max-width: 760px) {
+ .next-steps--mosaic { grid-template-columns: 1fr; grid-template-rows: auto; }
+ .next-steps--mosaic .next-steps__card--primary { grid-row: auto; }
+}
+
+.next-steps__card {
+ display: flex; flex-direction: column; gap: var(--space-4);
+ padding: var(--space-12) var(--space-8);
+ background: linear-gradient(160deg, var(--dark-blue) 0%, rgba(5,128,196,.55) 100%);
+ border: 1px solid rgba(255,255,255,.1);
+ border-radius: var(--radius-lg);
+ box-shadow: var(--shadow-soft);
+ color: #fff;
+ position: relative;
+ overflow: hidden;
+ transition: transform .2s ease, border-color .2s ease;
+ min-height: 260px;
+}
+.next-steps__card--gold {
+ background: linear-gradient(135deg, rgba(184,169,120,.85) 0%, rgba(167,154,110,.95) 100%);
+ border-color: rgba(252,238,180,.35);
+}
+.next-steps__card--sage {
+ background: linear-gradient(135deg, rgba(80,140,90,.95) 0%, rgba(120,170,110,.85) 100%);
+ border-color: rgba(228,240,210,.35);
+}
+.next-steps__card::after {
+ content: ""; position: absolute; right: -20%; top: -20%;
+ width: 240px; height: 240px;
+ background: radial-gradient(closest-side, rgba(255,255,255,.16), transparent 70%);
+ pointer-events: none;
+}
+.next-steps__card:hover { transform: translateY(-2px); border-color: rgba(255,255,255,.45); color: #fff; }
+.next-steps__eyebrow {
+ display: inline-block;
+ font-family: var(--font-ui); font-size: var(--text-eyebrow); font-weight: 700;
+ letter-spacing: var(--tracking-eyebrow); text-transform: uppercase;
+ color: var(--accent-on-dark);
+ background: rgba(122,192,232,.12);
+ padding: 4px 12px; border-radius: var(--radius-sm);
+ align-self: flex-start;
+ border: 1px solid rgba(122,192,232,.3);
+}
+.next-steps__card--gold .next-steps__eyebrow {
+ color: var(--accent-yellow-soft); background: rgba(252,238,180,.18);
+ border-color: rgba(252,238,180,.45);
+}
+.next-steps__card--sage .next-steps__eyebrow {
+ color: var(--accent-green-soft); background: rgba(228,240,210,.18);
+ border-color: rgba(228,240,210,.45);
+}
+.next-steps__title { font-size: var(--text-title-lg); font-weight: 500; margin: 0; color: #fff; line-height: 1.25; letter-spacing: -0.01em; text-wrap: balance; }
+.next-steps__desc { color: var(--text-on-dark); margin: 0; font-size: var(--text-sm); line-height: 1.55; }
+.next-steps__checklist {
+ list-style: none; padding: 0; margin: var(--space-4) 0 0;
+ display: flex; flex-direction: column; gap: 12px;
+ color: #fff; font-size: var(--text-sm);
+}
+.next-steps__checklist li {
+ display: flex; align-items: center; gap: 12px;
+}
+.next-steps__check {
+ display: inline-flex; align-items: center; justify-content: center;
+ width: 18px; height: 18px; border-radius: 9999px;
+ background: var(--accent-on-dark); color: var(--dark-blue);
+ font-size: var(--text-eyebrow); font-weight: 700;
+ flex-shrink: 0;
+}
+.next-steps__cta {
+ margin-top: auto; align-self: flex-start;
+ display: inline-flex; align-items: center; gap: 8px;
+ background: rgba(255,255,255,.12); color: #fff;
+ padding: 10px 18px; border-radius: var(--radius-pill);
+ border: 1px solid rgba(255,255,255,.22);
+ font-size: var(--text-eyebrow); font-weight: 700;
+ text-transform: uppercase; letter-spacing: 0.06em;
+}
+.next-steps__cta svg {
+ background: var(--bright-blue); border-radius: 9999px; padding: 4px; width: 22px; height: 22px;
+ color: #fff;
+}
+.next-steps__card--gold .next-steps__cta svg { background: var(--accent-yellow); }
+.next-steps__card--sage .next-steps__cta svg { background: var(--accent-green); }
+.next-steps__card:hover .next-steps__cta { background: rgba(255,255,255,.2); }
+
+/* ---------- Team grid + member cards ---------- */
+
+/* ---------- Team grid: featured "Unser Team" card + member cards (why-grid 2-col) ---------- */
+
+.why-grid > .team-feature {
+ grid-row: span 2;
+ display: flex; flex-direction: column; gap: var(--space-3);
+ background: linear-gradient(180deg, var(--bright-blue) 0%, var(--dark-blue) 100%);
+}
+.team-feature__icon {
+ width: 48px; height: 48px; border-radius: 9999px;
+ background: rgba(255,255,255,.15);
+ display: inline-flex; align-items: center; justify-content: center;
+ margin-bottom: var(--space-2);
+}
+.team-feature__title { color: #fff; font-size: var(--text-title-lg); font-weight: 500; margin: 0 0 var(--space-3); }
+.team-feature__lead { color: var(--text-on-dark); margin: 0; font-size: var(--text-sm); line-height: 1.55; }
+.team-feature__cta {
+ margin-top: auto; align-self: flex-start;
+ display: inline-flex; align-items: center; gap: 8px;
+ background: rgba(255,255,255,.15); color: #fff;
+ padding: 10px 16px; border-radius: var(--radius-pill);
+ font-size: var(--text-sm); font-weight: 500;
+ border: 1px solid rgba(255,255,255,.24);
+ text-transform: uppercase; letter-spacing: 0.05em;
+}
+.team-feature:hover .team-feature__cta { background: rgba(255,255,255,.25); color: #fff; }
+
+.team-member {
+ position: relative;
+ display: grid;
+ grid-template-columns: 96px 1fr;
+ column-gap: var(--space-4);
+ row-gap: var(--space-3);
+ align-items: center;
+ transition: border-color .2s ease, transform .2s ease;
+}
+.team-member__avatar {
+ width: 96px; height: 96px; border-radius: 9999px; object-fit: cover;
+ background: var(--bg);
+}
+.team-member__avatar--placeholder {
+ display: inline-flex; align-items: center; justify-content: center;
+ background: linear-gradient(135deg, var(--dark-blue), var(--bright-blue));
+ color: #fff;
+ font-family: var(--font-ui);
+ font-size: 30px; font-weight: 500; letter-spacing: 0.02em;
+ text-transform: uppercase;
+}
+.team-member__body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
+.team-member__name { font-size: var(--text-title); font-weight: 500; color: var(--dark-blue); margin: 0; }
+.team-member__role { font-size: var(--text-sm); color: var(--fg-muted); margin: 0; }
+.team-member__focus {
+ grid-column: 1 / -1;
+ margin-top: var(--space-4);
+ display: flex; flex-direction: column; gap: 4px;
+ font-family: var(--font-ui); font-size: var(--text-sm); color: var(--fg-muted);
+}
+.team-member__focus p.team-member__focus-text { margin: 0; }
+.team-member__focus-label {
+ width: 100%;
+ display: inline-flex; align-items: center; gap: 6px;
+ color: var(--bright-blue);
+ font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; font-size: var(--text-eyebrow);
+ margin-bottom: 2px;
+}
+.team-member__focus-label svg {
+ fill: var(--fg-subtle);
+ stroke: none;
+}
+.team-member__linkedin {
+ position: absolute;
+ top: var(--space-6);
+ right: var(--space-6);
+ display: inline-flex; align-items: center; justify-content: center;
+ color: var(--bright-blue);
+ transition: color .2s ease;
+}
+.team-member:hover .team-member__linkedin { color: var(--dark-blue); }
+
+@media (max-width: 560px) {
+ .why-grid > .team-feature { grid-row: auto; }
+ .team-member { grid-template-columns: 80px 1fr; }
+ .team-member__avatar { width: 80px; height: 80px; }
+ .team-member__avatar--placeholder { font-size: 26px; }
+}
+
+/* ---------- Icon tile (shared: icon + title, optional body) ----------
+ Used by home (lifecycle rows), team (how-we-work, why-cloud-native),
+ services (assessment cards). Light by default; flips dark inside
+ `.section--dark`. `--stack` puts the icon above the text; `--feature`
+ highlights the tile with the accent-green fill. */
+.icon-tile {
+ display: flex; align-items: center; gap: var(--space-4);
+ padding: var(--space-4) var(--space-6);
+ background: var(--bg-white);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-lg);
+}
+.icon-tile--stack {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: var(--space-3);
+ padding: var(--space-6);
+ justify-content: center;
+}
+.icon-tile__icon {
+ width: 48px; height: 48px; border-radius: 9999px;
+ background: rgba(5,128,196,.08); color: var(--bright-blue);
+ display: inline-flex; align-items: center; justify-content: center;
+ flex-shrink: 0;
+}
+.icon-tile__title {
+ margin: 0; color: var(--dark-blue);
+ font-size: var(--text-title); font-weight: 500; line-height: 1.3;
+}
+.icon-tile__body {
+ margin: 0; color: var(--fg-muted);
+ font-size: var(--text-sm); line-height: 1.55;
+}
+.section--dark .icon-tile {
+ background: rgba(255,255,255,.04);
+ border-color: var(--stroke-on-dark);
+}
+.section--dark .icon-tile__icon {
+ background: rgba(122,192,232,.12); color: var(--accent-on-dark);
+}
+.section--dark .icon-tile__title { color: #fff; }
+.section--dark .icon-tile__body { color: var(--text-on-dark); }
+
+/* Werte — 5 rows with photo + copy */
+.values-list { display: flex; flex-direction: column; gap: var(--space-4); max-width: 980px; margin-left: auto; margin-right: auto; }
+.values-list__row {
+ display: grid;
+ grid-template-columns: 200px 240px 1fr;
+ gap: var(--space-6);
+ align-items: center;
+ padding: var(--space-3) 0;
+ border-bottom: 1px solid var(--stroke-on-dark);
+}
+.values-list__row:last-child { border-bottom: 0; }
+.values-list__title { color: #fff; font-size: var(--text-title-lg); font-weight: 500; margin: 0; }
+.values-list__media {
+ aspect-ratio: 5/3;
+ border-radius: var(--radius-md);
+ background-size: cover; background-position: center;
+ background-color: rgba(5,128,196,.2);
+}
+.values-list__desc { color: var(--text-on-dark); font-size: var(--text-sm); margin: 0; line-height: 1.55; }
+@media (max-width: 760px) {
+ .values-list__row { grid-template-columns: 1fr; gap: var(--space-3); }
+ .values-list__media { display: none; }
+}
+
+/* ---------- Team page: community, contact CTA ---------- */
+
+.section--gold { background: var(--accent-yellow-soft); }
+.section__icon--gold {
+ background: rgba(184,169,120,.2);
+ color: var(--accent-yellow);
+}
+
+.contact-cta {
+ max-width: 720px; margin: 0 auto; text-align: center;
+}
+.contact-cta__eyebrow { color: var(--accent-on-dark); }
+.contact-cta__title { margin-top: 12px; }
+.contact-cta__actions { margin-top: var(--space-6); }
+
+/* ---------- Service columns (Services page) ---------- */
+
+.service-stack { display: flex; flex-direction: column; gap: var(--space-6); }
+.service-stack--tight { gap: var(--space-4); }
+.service-card__items {
+ display: flex; flex-direction: column; gap: 6px;
+ font-size: var(--text-sm); color: var(--fg-muted);
+}
+.card__eyebrow { margin-top: 18px; margin-bottom: 8px; }
+.tag-arbeitsweise__list { margin-top: 6px; }
+.assessment-cards { margin-bottom: var(--space-8); }
+.output-block { display: flex; flex-direction: column; gap: var(--space-4); }
+.output-block__title { color: var(--accent-on-dark); }
+.output-block__list { display: grid; grid-template-columns: repeat(3, 1fr); }
+@media (max-width: 760px) { .output-block__list { grid-template-columns: 1fr; } }
+
+/* ---------- Journey banner (Produkte) ---------- */
+
+.journey-banner {
+ aspect-ratio: 16/4;
+ margin: 0 auto var(--space-8);
+ max-width: 880px;
+ border-radius: var(--radius-lg);
+ background-size: cover; background-position: center;
+ border: 1px solid var(--stroke-on-dark);
+}
+
+/* ---------- Partner cards (Produkte) ---------- */
+
+.partner-cards { max-width: 980px; margin: 0 auto; }
+.partner-card__logo { height: 36px; width: auto; margin-bottom: var(--space-4); }
+.partner-card__role { margin-top: 4px; margin-bottom: 8px; color: var(--bright-blue); }
+.partner-card__themes-title { margin-top: 14px; margin-bottom: 8px; color: var(--fg-subtle); }
+
+/* ---------- Own-solutions cards (Produkte) ---------- */
+
+.own-cards { display: flex; flex-direction: column; gap: var(--space-6); }
+.own-card__icon {
+ width: 52px; height: 52px; border-radius: 9999px;
+ background: rgba(5, 128, 196, .08); color: var(--bright-blue);
+ display: inline-flex; align-items: center; justify-content: center;
+ margin-bottom: var(--space-4);
+}
+.own-card__title { font-size: var(--text-title-lg); }
+.own-card__eyebrow { margin-top: 18px; margin-bottom: 8px; }
+
+/* ---------- Fit-for block (Produkte cards "Geeignet für") ---------- */
+
+.fit-block {
+ margin-top: 20px;
+ padding: var(--space-4) 20px;
+ background: rgba(154, 199, 132, .14);
+ border: 1px solid rgba(154, 199, 132, .35);
+ border-radius: var(--radius-md);
+}
+.fit-block__title {
+ font-size: var(--text-sm);
+ font-weight: 600;
+ color: var(--dark-blue);
+ margin-bottom: 10px;
+}
+.fit-block__list {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ font-size: var(--text-sm);
+ color: var(--fg-muted);
+}
+.fit-block__list li { display: flex; gap: 8px; }
+.fit-block__check { color: var(--accent-green); font-weight: 600; }
+
+/* ---------- Service block (engineering categories) ---------- */
+
+.cat-subhead {
+ font-size: var(--text-sm);
+ font-weight: 600;
+ color: var(--dark-blue);
+ margin-bottom: var(--space-4);
+}
+.cat-card__title {
+ font-size: var(--text-title); font-weight: 500;
+ color: var(--dark-blue);
+ margin: 0 0 14px;
+ line-height: 1.3;
+}
+.cat-card__items {
+ display: flex; flex-wrap: wrap; gap: 6px;
+ list-style: none; margin: 0; padding: 0;
+}
+.cat-card__items li {
+ font-family: var(--font-mono); font-size: var(--text-eyebrow);
+ padding: 5px 12px; border: 1px solid var(--border);
+ border-radius: var(--radius-md);
+ color: var(--dark-blue); background: var(--bg);
+}
+
+/* ---------- Generic helpers for repeated layout patterns ---------- */
+
+.col-narrow { max-width: 880px; margin-left: auto; margin-right: auto; }
+.col-narrow--md { max-width: 720px; margin-left: auto; margin-right: auto; }
+.training-cards { margin-bottom: var(--space-12); }
+
+.section--deep { background: var(--dark-blue); }
+
+.section__footnote {
+ text-align: center; max-width: 720px;
+ margin: var(--space-6) auto 0;
+ color: var(--fg-muted); font-size: var(--text-sm);
+}
+
+/* Checkmark bullet list — variants for grid layout and dark sections.
+ Templates write `
` and just list s; the
+ green checkmark comes from ::before. */
+.checklist {
+ list-style: none; padding: 0; margin: 0;
+ display: flex; flex-direction: column; gap: 6px;
+ font-size: var(--text-sm); color: var(--fg-muted);
+}
+.checklist li { display: flex; align-items: flex-start; gap: 8px; }
+.checklist li::before {
+ content: "✓"; color: var(--accent-green);
+ flex-shrink: 0; font-weight: 600;
+}
+.checklist--grid-2 {
+ display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px 16px;
+}
+.checklist--md { font-size: var(--text-sm); }
+.checklist--on-dark { color: #fff; font-size: var(--text-sm); line-height: 1.5; }
+.checklist--on-dark li::before { font-size: var(--text-title); line-height: 1; }
+
+/* Numbered step (centered, dark section) — used in produkte journey. */
+.numbered-step {
+ display: flex; flex-direction: column; align-items: center;
+ text-align: center; gap: var(--space-3);
+}
+.numbered-step__num {
+ width: 44px; height: 44px; border-radius: 9999px;
+ background: rgba(255,255,255,.1);
+ border: 1px solid var(--stroke-on-dark);
+ display: inline-flex; align-items: center; justify-content: center;
+ color: #fff; font-size: var(--text-title); font-weight: 500;
+}
+.numbered-step h3 { color: #fff; font-size: var(--text-title); font-weight: 500; margin: 0; }
+.numbered-step p { color: var(--text-on-dark); font-size: var(--text-sm); line-height: 1.55; margin: 0; }
+
+/* 2-col grid for icon tiles. Used by how-we-work, mission.
+ `grid-auto-rows: 1fr` keeps every tile the same height even when
+ titles wrap to two lines. */
+.icon-tile-grid {
+ display: grid; grid-template-columns: repeat(2, 1fr);
+ grid-auto-rows: 1fr;
+ gap: var(--space-4);
+}
+@media (max-width: 720px) {
+ .icon-tile-grid { grid-template-columns: 1fr; }
+}
+
+/* Eyebrow line above how-we-work tiles. */
+.how-we-work__intro {
+ margin: 0 0 var(--space-6);
+ color: var(--accent-on-dark);
+ font-family: var(--font-ui);
+ font-size: var(--text-sm); font-weight: 700;
+ letter-spacing: var(--tracking-eyebrow); text-transform: uppercase;
+}
+
+/* ---------- Footer ---------- */
+
+.site-footer {
+ background: var(--dark-blue); color: #fff;
+ padding: 80px 0 32px; position: relative; overflow: hidden;
+}
+.site-footer::before {
+ content: ""; position: absolute; right: -180px; top: -120px;
+ width: 480px; height: 480px; border-radius: 50%;
+ background: radial-gradient(circle, rgba(5,128,196,.18) 0%, rgba(5,128,196,0) 70%);
+ pointer-events: none;
+}
+.site-footer__grid {
+ display: grid;
+ grid-template-columns: 2fr 1fr 1fr;
+ gap: var(--space-12);
+ position: relative;
+}
+@media (max-width: 760px) {
+ .site-footer__grid { grid-template-columns: 1fr 1fr; }
+}
+@media (max-width: 460px) {
+ .site-footer__grid { grid-template-columns: 1fr; }
+}
+.site-footer__brand-col {
+ display: flex; flex-direction: column; gap: 16px;
+}
+.site-footer__brand {
+ display: inline-flex; align-items: center; color: #fff;
+}
+.site-footer__brand img { height: 44px; width: auto; display: block; }
+.site-footer__about {
+ font-size: var(--text-sm); line-height: 1.6;
+ color: rgba(255,255,255,.55); margin: 0; max-width: 360px;
+}
+.site-footer__linkedin-icon {
+ display: inline-flex; align-items: center; justify-content: center;
+ width: 28px; height: 28px; border-radius: 4px;
+ background: var(--bright-blue); color: #fff;
+}
+.site-footer__linkedin-icon:hover { background: var(--dark-blue); color: #fff; }
+
+.footer-col__title {
+ color: var(--accent-on-dark);
+ font-family: var(--font-ui); font-size: var(--text-eyebrow); font-weight: 700;
+ text-transform: uppercase; letter-spacing: 0.12em;
+ margin-bottom: 18px; display: block;
+}
+.footer-col__list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 12px; }
+.footer-col__list a {
+ font-size: var(--text-sm); color: var(--text-on-dark);
+ display: inline-flex; align-items: center; gap: 8px;
+}
+.footer-col__list a:hover { color: #fff; }
+.footer-col__arrow {
+ color: var(--accent-on-dark);
+ font-size: var(--text-eyebrow);
+ display: inline-block;
+}
+
+.site-footer__bottom {
+ margin-top: 64px; padding-top: 24px;
+ border-top: 1px solid rgba(255,255,255,.1);
+ display: flex; justify-content: space-between; gap: 16px;
+ font-size: var(--text-eyebrow); color: rgba(255,255,255,.45); position: relative;
+ flex-wrap: wrap;
+}
+.site-footer__bottom a { color: rgba(255,255,255,.6); }
+.site-footer__bottom a:hover { color: #fff; }
+
+/* ---------- Markdown prose (legal pages) ---------- */
+
+.prose {
+ max-width: 760px; margin: 0 auto;
+ color: var(--fg-muted); font-size: var(--text-body); line-height: 1.7;
+}
+.prose h1 { font-size: var(--text-display-sm); margin-bottom: var(--space-8); color: var(--dark-blue); }
+.prose h2 { font-size: var(--text-title-lg); margin: var(--space-12) 0 var(--space-4); color: var(--dark-blue); }
+.prose h3 { font-size: var(--text-title); margin: var(--space-8) 0 var(--space-3); color: var(--dark-blue); }
+.prose p, .prose li { color: var(--fg-muted); }
+.prose a { color: var(--bright-blue); text-decoration: underline; text-underline-offset: 2px; }
+.prose a:hover { color: var(--dark-blue); }
+.prose ul, .prose ol { padding-left: 24px; }
+.prose li { margin-bottom: var(--space-2); }
+.prose strong { color: var(--dark-blue); }
+.prose code {
+ background: rgba(5, 128, 196, .08); color: var(--dark-blue);
+ padding: 2px 6px; border-radius: var(--radius-sm);
+}
+
+/* ---------- Reduced motion ---------- */
+
+@media (prefers-reduced-motion: reduce) {
+ *, *::before, *::after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ }
+ html { scroll-behavior: auto; }
+}
+
+/* ---------- Print ---------- */
+
+@media print {
+ .site-header, .contact-fab, .mobile-menu,
+ .testimonial-carousel__dots, .testimonial-carousel__nav,
+ .logo-carousel__nav { display: none !important; }
+ body { background: #fff; color: #000; }
+ .section--dark, .site-footer { background: #fff; color: #000; }
+ a { color: #000; text-decoration: underline; }
+}
diff --git a/assets/download-icons.sh b/assets/download-icons.sh
deleted file mode 100755
index 6ffe03f..0000000
--- a/assets/download-icons.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-set -ex
-icons="logo-linkedin arrow-up moon sunny close menu"
-dest=ionicons
-url=https://unpkg.com/ionicons@7.1.0/dist/svg/
-mkdir -p "${dest}"
-for icon in $icons; do
- icon="${icon}.svg"
- curl -o "${dest}/${icon}" "${url}/${icon}"
-done
diff --git a/assets/icons/arrow-up-right.svg b/assets/icons/arrow-up-right.svg
new file mode 100644
index 0000000..abe8dbd
--- /dev/null
+++ b/assets/icons/arrow-up-right.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/boxes.svg b/assets/icons/boxes.svg
new file mode 100644
index 0000000..d342333
--- /dev/null
+++ b/assets/icons/boxes.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/building.svg b/assets/icons/building.svg
new file mode 100644
index 0000000..681ebd7
--- /dev/null
+++ b/assets/icons/building.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/chevron-left.svg b/assets/icons/chevron-left.svg
new file mode 100644
index 0000000..4fa611f
--- /dev/null
+++ b/assets/icons/chevron-left.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/chevron-right.svg b/assets/icons/chevron-right.svg
new file mode 100644
index 0000000..8b0814d
--- /dev/null
+++ b/assets/icons/chevron-right.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/clipboard.svg b/assets/icons/clipboard.svg
new file mode 100644
index 0000000..c8f58c4
--- /dev/null
+++ b/assets/icons/clipboard.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/cloud.svg b/assets/icons/cloud.svg
new file mode 100644
index 0000000..3e8d433
--- /dev/null
+++ b/assets/icons/cloud.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/code.svg b/assets/icons/code.svg
new file mode 100644
index 0000000..447d732
--- /dev/null
+++ b/assets/icons/code.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/compass.svg b/assets/icons/compass.svg
new file mode 100644
index 0000000..8c63bd1
--- /dev/null
+++ b/assets/icons/compass.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/globe.svg b/assets/icons/globe.svg
new file mode 100644
index 0000000..a151407
--- /dev/null
+++ b/assets/icons/globe.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/graduation.svg b/assets/icons/graduation.svg
new file mode 100644
index 0000000..3285f4c
--- /dev/null
+++ b/assets/icons/graduation.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/linkedin.svg b/assets/icons/linkedin.svg
new file mode 100644
index 0000000..bf3a08c
--- /dev/null
+++ b/assets/icons/linkedin.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/mail.svg b/assets/icons/mail.svg
new file mode 100644
index 0000000..a98b5de
--- /dev/null
+++ b/assets/icons/mail.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/menu.svg b/assets/icons/menu.svg
new file mode 100644
index 0000000..ca9d2bd
--- /dev/null
+++ b/assets/icons/menu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/rocket.svg b/assets/icons/rocket.svg
new file mode 100644
index 0000000..8ac26f8
--- /dev/null
+++ b/assets/icons/rocket.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/settings.svg b/assets/icons/settings.svg
new file mode 100644
index 0000000..c882d83
--- /dev/null
+++ b/assets/icons/settings.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/shield.svg b/assets/icons/shield.svg
new file mode 100644
index 0000000..07551ae
--- /dev/null
+++ b/assets/icons/shield.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/spark.svg b/assets/icons/spark.svg
new file mode 100644
index 0000000..17660e4
--- /dev/null
+++ b/assets/icons/spark.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/users.svg b/assets/icons/users.svg
new file mode 100644
index 0000000..5851922
--- /dev/null
+++ b/assets/icons/users.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/x.svg b/assets/icons/x.svg
new file mode 100644
index 0000000..9604592
--- /dev/null
+++ b/assets/icons/x.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/zap.svg b/assets/icons/zap.svg
new file mode 100644
index 0000000..d32de00
--- /dev/null
+++ b/assets/icons/zap.svg
@@ -0,0 +1 @@
+
diff --git a/assets/ionicons/arrow-up.svg b/assets/ionicons/arrow-up.svg
deleted file mode 100644
index 4e38e4b..0000000
--- a/assets/ionicons/arrow-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/ionicons/close.svg b/assets/ionicons/close.svg
deleted file mode 100644
index 18cced5..0000000
--- a/assets/ionicons/close.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/ionicons/logo-linkedin.svg b/assets/ionicons/logo-linkedin.svg
deleted file mode 100644
index 6d84892..0000000
--- a/assets/ionicons/logo-linkedin.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/ionicons/menu.svg b/assets/ionicons/menu.svg
deleted file mode 100644
index 3ee6d6d..0000000
--- a/assets/ionicons/menu.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/ionicons/moon.svg b/assets/ionicons/moon.svg
deleted file mode 100644
index 9b936f2..0000000
--- a/assets/ionicons/moon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/ionicons/sunny.svg b/assets/ionicons/sunny.svg
deleted file mode 100644
index d1bf35f..0000000
--- a/assets/ionicons/sunny.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/js/common.js b/assets/js/common.js
deleted file mode 100755
index 1d5ff2c..0000000
--- a/assets/js/common.js
+++ /dev/null
@@ -1,80 +0,0 @@
-document.addEventListener("DOMContentLoaded", function() {
- 'use strict';
-
- var html = document.querySelector('html'),
- menuOpenIcon = document.querySelector(".nav__icon-menu"),
- menuCloseIcon = document.querySelector(".nav__icon-close"),
- menuList = document.querySelector(".main-nav"),
- toggleTheme = document.querySelector(".toggle-theme"),
- btnScrollToTop = document.querySelector(".top");
-
-
- /* =======================================================
- // Menu + Theme Switcher + Toggle list view
- ======================================================= */
- menuOpenIcon.addEventListener("click", () => {
- menuOpen();
- });
-
- menuCloseIcon.addEventListener("click", () => {
- menuClose();
- });
-
- toggleTheme.addEventListener("click", () => {
- toogleTheme();
- });
-
- function menuOpen() {
- menuList.classList.add("is-open");
- }
-
- function menuClose() {
- menuList.classList.remove("is-open");
- }
-
-
- // Theme Switcher
- function toogleTheme() {
- if (html.classList.contains('dark-mode')) {
- html.classList.remove('dark-mode');
- localStorage.setItem("theme", "light");
- document.documentElement.removeAttribute("dark");
- } else {
- html.classList.add('dark-mode');
- localStorage.setItem("theme", "dark");
- document.documentElement.setAttribute("dark", "");
- }
- }
-
- /* =================================
- // Smooth scroll to the tags page
- ================================= */
- document.querySelectorAll(".tag__link").forEach(anchor => {
- anchor.addEventListener("click", function (e) {
- e.preventDefault();
-
- document.querySelector(this.getAttribute("href")).scrollIntoView({
- behavior: "smooth"
- });
- });
- });
-
-
- /* =======================
- // Scroll Top Button
- ======================= */
- window.addEventListener("scroll", function () {
- window.scrollY > window.innerHeight ? btnScrollToTop.classList.add("is-active") : btnScrollToTop.classList.remove("is-active");
- });
-
- btnScrollToTop.addEventListener("click", function () {
- if (window.scrollY != 0) {
- window.scrollTo({
- top: 0,
- left: 0,
- behavior: "smooth"
- })
- }
- });
-
-});
diff --git a/assets/js/peakscale.js b/assets/js/peakscale.js
new file mode 100644
index 0000000..f471fb5
--- /dev/null
+++ b/assets/js/peakscale.js
@@ -0,0 +1,162 @@
+/* Peak Scale — minimal client JS.
+ Mobile menu toggle, testimonial carousel (chevrons + dots). */
+
+(function () {
+ 'use strict';
+
+ // ---------- Mobile menu ----------
+ const menuToggle = document.querySelector('[data-menu-toggle]');
+ const menu = document.querySelector('[data-menu]');
+ const menuClose = document.querySelector('[data-menu-close]');
+
+ function openMenu() {
+ if (!menu) return;
+ menu.removeAttribute('hidden');
+ document.body.style.overflow = 'hidden';
+ const firstLink = menu.querySelector('a');
+ if (firstLink) firstLink.focus();
+ }
+ function closeMenu() {
+ if (!menu) return;
+ menu.setAttribute('hidden', '');
+ document.body.style.overflow = '';
+ if (menuToggle) menuToggle.focus();
+ }
+
+ if (menuToggle) menuToggle.addEventListener('click', openMenu);
+ if (menuClose) menuClose.addEventListener('click', closeMenu);
+ document.addEventListener('keydown', function (e) {
+ if (e.key === 'Escape' && menu && !menu.hasAttribute('hidden')) closeMenu();
+ });
+
+ // ---------- Testimonial carousel ----------
+ document.querySelectorAll('[data-carousel]').forEach(function (carousel) {
+ const slides = carousel.querySelectorAll('[data-slide]');
+ const dotsWrap = carousel.querySelector('[data-dots]');
+ const prevBtn = carousel.querySelector('[data-prev]');
+ const nextBtn = carousel.querySelector('[data-next]');
+ if (slides.length <= 1) {
+ if (prevBtn) prevBtn.style.display = 'none';
+ if (nextBtn) nextBtn.style.display = 'none';
+ if (dotsWrap) dotsWrap.style.display = 'none';
+ return;
+ }
+
+ let active = 0;
+ function go(i) {
+ active = (i + slides.length) % slides.length;
+ slides.forEach(function (s, idx) {
+ s.style.display = idx === active ? '' : 'none';
+ });
+ if (dotsWrap) {
+ dotsWrap.querySelectorAll('button').forEach(function (b, idx) {
+ b.classList.toggle('is-active', idx === active);
+ });
+ }
+ }
+ if (dotsWrap) {
+ slides.forEach(function (_, idx) {
+ const b = document.createElement('button');
+ b.type = 'button';
+ b.setAttribute('aria-label', 'Slide ' + (idx + 1));
+ if (idx === 0) b.classList.add('is-active');
+ b.addEventListener('click', function () { go(idx); });
+ dotsWrap.appendChild(b);
+ });
+ }
+ if (prevBtn) prevBtn.addEventListener('click', function () { go(active - 1); });
+ if (nextBtn) nextBtn.addEventListener('click', function () { go(active + 1); });
+ slides.forEach(function (s, idx) { if (idx !== 0) s.style.display = 'none'; });
+ });
+
+ // ---------- Logo carousel (shuffled, infinite, transform-based) ----------
+ document.querySelectorAll('[data-logo-carousel]').forEach(function (carousel) {
+ const track = carousel.querySelector('[data-logo-track]');
+ const prev = carousel.querySelector('[data-logo-prev]');
+ const next = carousel.querySelector('[data-logo-next]');
+ if (!track) return;
+
+ // 1. Shuffle the source tiles in place (Fisher-Yates) so each visit
+ // sees customers in a different order.
+ const originals = Array.from(track.children);
+ for (let i = originals.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [originals[i], originals[j]] = [originals[j], originals[i]];
+ }
+ originals.forEach(function (t) { track.appendChild(t); }); // re-order
+
+ // 2. Append a single clone of the (shuffled) set so the track is
+ // twice the width of one copy — this is what makes the wrap-around
+ // invisible: when we slide past the end of the originals, the
+ // second copy is already in view, and we instantly snap the
+ // transform back by one set-width without the user noticing.
+ Array.from(track.children).forEach(function (tile) {
+ const clone = tile.cloneNode(true);
+ clone.setAttribute('aria-hidden', 'true');
+ clone.tabIndex = -1;
+ track.appendChild(clone);
+ });
+
+ let offset = 0;
+
+ function tileStep() {
+ const tile = track.querySelector('.logo-tile');
+ if (!tile) return 220;
+ const gap = parseFloat(getComputedStyle(track).gap) || 0;
+ return tile.getBoundingClientRect().width + gap;
+ }
+ function setWidth() { return track.scrollWidth / 2; }
+ function apply() { track.style.transform = 'translateX(-' + offset + 'px)'; }
+
+ // Set transform with no transition (used for the invisible wrap-snap).
+ function snap(target) {
+ track.style.transition = 'none';
+ offset = target;
+ apply();
+ void track.offsetWidth; // flush
+ track.style.transition = '';
+ }
+ // Halt any in-flight transition by snapping to the currently-rendered
+ // position. Otherwise on hover/click the track keeps sliding for up
+ // to .5s and tiles slip out from under the cursor.
+ function freezeAtRendered() {
+ const m = new DOMMatrixReadOnly(getComputedStyle(track).transform);
+ snap(-m.m41);
+ }
+ function nudge(dir) {
+ const step = tileStep();
+ // Going backwards from the start: invisibly jump forward by one
+ // set-width to the mirror position on the second copy, then animate
+ // backward from there. Looks like a normal leftward slide.
+ if (dir < 0 && offset - step < 0) snap(offset + setWidth());
+ offset += dir * step;
+ apply();
+ }
+
+ // After every animated step, if we've slid past the first copy,
+ // snap back by one set-width. The two copies are identical at the
+ // boundary, so the snap is invisible.
+ track.addEventListener('transitionend', function () {
+ if (offset >= setWidth()) snap(offset - setWidth());
+ });
+
+ if (prev) prev.addEventListener('click', function () { freezeAtRendered(); nudge(-1); });
+ if (next) next.addEventListener('click', function () { freezeAtRendered(); nudge(1); });
+
+ // Auto-advance, paused on hover / focus / reduced motion.
+ const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
+ let timer = null;
+ function start() { if (!timer && !reduced) timer = setInterval(function () { nudge(1); }, 3500); }
+ function stop() { if (timer) { clearInterval(timer); timer = null; } freezeAtRendered(); }
+ carousel.addEventListener('mouseenter', stop);
+ carousel.addEventListener('mouseleave', start);
+ carousel.addEventListener('focusin', stop);
+ carousel.addEventListener('focusout', start);
+ // Re-clamp on resize so we never end up beyond the new set-width.
+ window.addEventListener('resize', function () {
+ const w = setWidth();
+ if (w > 0 && offset >= w) { offset -= w; apply(); }
+ });
+ start();
+ });
+})();
diff --git a/assets/sass/0-settings/_color-scheme-bright.scss b/assets/sass/0-settings/_color-scheme-bright.scss
deleted file mode 100644
index b02a408..0000000
--- a/assets/sass/0-settings/_color-scheme-bright.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Bright Color Scheme */
-:root {
- --brand-blue-dark: #091836;
- --brand-blue-bright: #0580c4;
- --white: #ffffff;
- --light-gray: #f0f0f0;
- --gray: #555555;
-
- --background-color: var(--white);
- --background-alt-color: var(--light-gray);
-
- --text-color: var(--brand-blue-dark);
- --text-alt-color: var(--gray);
-
- --heading-font-color: var(--brand-blue-dark);
-
- --link-color: var(--brand-blue-dark);
- --link-color-hover: var(--brand-blue-dark);
-
- --button-color: var(--white);
- --button-background-color: var(--brand-blue-bright);
- --button-background-hover: var(--brand-blue-dark);
-
- --border-color: var(--light-gray);
- --border-color-alt: var(--light-gray);
-
- --th-color: var(--light-gray);
- --tr-color: var(--light-gray);
-
- --syntax-highlighting-background: var(--light-gray);
-}
diff --git a/assets/sass/0-settings/_color-scheme-dark.scss b/assets/sass/0-settings/_color-scheme-dark.scss
deleted file mode 100644
index b145861..0000000
--- a/assets/sass/0-settings/_color-scheme-dark.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Dark Color Scheme */
-:root[dark] {
- --brand-blue-dark: #091836;
- --brand-blue-bright: #0580c4;
- --white: #ffffff;
- --light-gray: #f0f0f0;
- --gray: #9e9e9e;
-
- --background-color: var(--brand-blue-dark);
- --background-alt-color: var(--light-gray);
-
- --text-color: var(--gray);
- --text-alt-color: var(--gray);
-
- --heading-font-color: var(--light-gray);
-
- --link-color: var(--light-gray);
- --link-color-hover: var(--light-gray);
-
- --button-color: var(--white);
- --button-background-color: var(--brand-blue-bright);
- --button-background-hover: var(--brand-blue-dark);
-
- --border-color: var(--brand-blue-dark);
- --border-color-alt: var(--brand-blue-dark);
-
- --th-color: var(--brand-blue-dark);
- --tr-color: var(--brand-blue-dark);
-
- --syntax-highlighting-background: var(--brand-blue-dark);
-}
diff --git a/assets/sass/0-settings/_helpers.scss b/assets/sass/0-settings/_helpers.scss
deleted file mode 100755
index be0baca..0000000
--- a/assets/sass/0-settings/_helpers.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-// Lists Reset
-.list-reset {
- @include list-reset();
-}
-
-// Clearfix
-.clearfix {
- @include clearfix();
-}
-
-// Screen Reader
-.screen-reader-text {
- @include screen-reader();
-}
\ No newline at end of file
diff --git a/assets/sass/0-settings/_mixins.scss b/assets/sass/0-settings/_mixins.scss
deleted file mode 100755
index 7ec57d8..0000000
--- a/assets/sass/0-settings/_mixins.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-// Clearfix
-@mixin clearfix() {
- &::after,
- ::before {
- content: "";
- display: table;
- clear: both;
- }
-}
-
-// Reset list
-@mixin list-reset() {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li:before {
- content: none;
- }
-}
-
-// Screen reader text
-@mixin screen-reader() {
- clip: rect(1px, 1px, 1px, 1px);
- height: 1px;
- overflow: hidden;
- position: absolute !important;
- width: 1px;
- word-wrap: normal !important;
-}
diff --git a/assets/sass/0-settings/_variables.scss b/assets/sass/0-settings/_variables.scss
deleted file mode 100755
index ec640e1..0000000
--- a/assets/sass/0-settings/_variables.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-// *****************
-// Global Variables
-// *****************
-
-// Spaces
-$base-spacing-unit: 16px;
-
-// Border radius
-$global-radius: 3px;
-
-// Transition
-$global-transition: all .35s;
-
-
-// *****************
-// Typography
-// *****************
-$base-font-size: 20px;
-$base-font-style: normal;
-$base-font-variant: normal;
-$base-font-weight: normal;
-$base-font-family: 'DM Sans', Helvetica Neue, Helvetica, Arial, sans-serif;
-$base-line-height: 1.5;
-
-// Headings
-$heading-font-weight: 700;
-$heading-font-family: 'DM Sans', Helvetica Neue, Helvetica, Arial, sans-serif;
-
-$font-size-h1: 36px;
-$font-size-h2: 28px;
-$font-size-h3: 24px;
-$font-size-h4: 20px;
-$font-size-h5: 18px;
-$font-size-h6: 16px;
-
-$heading-line-height: 1.3;
-$heading-letter-spacing: -1px;
diff --git a/assets/sass/1-tools/_animate.scss b/assets/sass/1-tools/_animate.scss
deleted file mode 100644
index e89ca7a..0000000
--- a/assets/sass/1-tools/_animate.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Animate */
-.animate {
- animation: animateElement cubic-bezier(.300,.450,.450,.950) .75s;
- animation-duration: 0.5s;
- animation-iteration-count: 1;
- transition: transform .15s;
-
- @keyframes animateElement {
- 0% {
- transform: translate(0px,50px);
- }
- 100% {
- transform: translate(0px,0px);
- }
- }
-}
\ No newline at end of file
diff --git a/assets/sass/1-tools/_glightbox.scss b/assets/sass/1-tools/_glightbox.scss
deleted file mode 100644
index 3d3ce6f..0000000
--- a/assets/sass/1-tools/_glightbox.scss
+++ /dev/null
@@ -1,952 +0,0 @@
-.glightbox-container {
- width: 100%;
- height: 100%;
- position: fixed;
- top: 0;
- left: 0;
- z-index: 999999 !important;
- overflow: hidden;
- -ms-touch-action: none;
- touch-action: none;
- -webkit-text-size-adjust: 100%;
- -moz-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
- text-size-adjust: 100%;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- outline: none;
- overflow: hidden;
-}
-
-.glightbox-container.inactive {
- display: none;
-}
-
-.glightbox-container .gcontainer {
- position: relative;
- width: 100%;
- height: 100%;
- z-index: 9999;
- overflow: hidden;
-}
-
-.glightbox-container .gslider {
- -webkit-transition: -webkit-transform 0.4s ease;
- transition: -webkit-transform 0.4s ease;
- transition: transform 0.4s ease;
- transition: transform 0.4s ease, -webkit-transform 0.4s ease;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
- position: relative;
- overflow: hidden;
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-
-.glightbox-container .gslide {
- width: 100%;
- position: absolute;
- opacity: 1;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- opacity: 0;
-}
-
-.glightbox-container .gslide.current {
- opacity: 1;
- z-index: 99999;
- position: relative;
-}
-
-.glightbox-container .gslide.prev {
- opacity: 1;
- z-index: 9999;
-}
-
-.glightbox-container .gslide-inner-content {
- width: 100%;
-}
-
-.glightbox-container .ginner-container {
- position: relative;
- width: 100%;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- max-width: 100%;
- margin: auto;
- height: 100vh;
-}
-
-.glightbox-container .ginner-container.gvideo-container {
- width: 100%;
-}
-
-.glightbox-container .ginner-container.desc-bottom,
-.glightbox-container .ginner-container.desc-top {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
-}
-
-.glightbox-container .ginner-container.desc-left,
-.glightbox-container .ginner-container.desc-right {
- max-width: 100% !important;
-}
-
-.gslide iframe,
-.gslide video {
- outline: none !important;
- border: none;
- min-height: 165px;
- -webkit-overflow-scrolling: touch;
- -ms-touch-action: auto;
- touch-action: auto;
-}
-
-.gslide-image {
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
-}
-
-.gslide-image img {
- max-height: 100vh;
- display: block;
- padding: 0;
- float: none;
- outline: none;
- border: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- max-width: 100vw;
- width: auto;
- height: auto;
- -o-object-fit: cover;
- object-fit: cover;
- -ms-touch-action: none;
- touch-action: none;
- margin: auto;
- min-width: 200px;
-}
-
-.desc-top .gslide-image img,
- .desc-bottom .gslide-image img {
- width: auto;
-}
-
-.desc-left .gslide-image img,
- .desc-right .gslide-image img {
- width: auto;
- max-width: 100%;
-}
-
-.gslide-image img.zoomable {
- position: relative;
-}
-
-.gslide-image img.dragging {
- cursor: -webkit-grabbing !important;
- cursor: grabbing !important;
- -webkit-transition: none;
- transition: none;
-}
-
-.gslide-video {
- position: relative;
- max-width: 100vh;
- width: 100% !important;
-}
-
-.gslide-video .gvideo-wrapper {
- width: 100%;
- /* max-width: 160vmin; */
- margin: auto;
-}
-
-.gslide-video::before {
- content: '';
- display: block;
- position: absolute;
- width: 100%;
- height: 100%;
- background: rgba(255, 0, 0, 0.34);
- display: none;
-}
-
-.gslide-video.playing::before {
- display: none;
-}
-
-.gslide-video.fullscreen {
- max-width: 100% !important;
- min-width: 100%;
- height: 75vh;
-}
-
-.gslide-video.fullscreen video {
- max-width: 100% !important;
- width: 100% !important;
-}
-
-.gslide-inline {
- background: #fff;
- text-align: left;
- max-height: calc(100vh - 40px);
- overflow: auto;
- max-width: 100%;
-}
-
-.gslide-inline .ginlined-content {
- padding: 20px;
- width: 100%;
-}
-
-.gslide-inline .dragging {
- cursor: -webkit-grabbing !important;
- cursor: grabbing !important;
- -webkit-transition: none;
- transition: none;
-}
-
-.ginlined-content {
- overflow: auto;
- display: block !important;
- opacity: 1;
-}
-
-.gslide-external {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- width: 100%;
- min-width: 100%;
- background: #fff;
- padding: 0;
- overflow: auto;
- max-height: 75vh;
- height: 100%;
-}
-
-.gslide-media {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- width: auto;
-}
-
-.zoomed .gslide-media {
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
-}
-
-.desc-top .gslide-media,
- .desc-bottom .gslide-media {
- margin: 0 auto;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
-}
-
-.gslide-description {
- position: relative;
- -webkit-box-flex: 1;
- -ms-flex: 1 0 100%;
- flex: 1 0 100%;
-}
-
-.gslide-description.description-left,
- .gslide-description.description-right {
- max-width: 100%;
-}
-
-.gslide-description.description-bottom,
- .gslide-description.description-top {
- margin: 0 auto;
- width: 100%;
-}
-
-.gslide-description p {
- margin-bottom: 12px;
-}
-
-.gslide-description p:last-child {
- margin-bottom: 0;
-}
-
-.zoomed .gslide-description {
- display: none;
-}
-
-.glightbox-button-hidden {
- display: none;
-}
-
-
-/*
- * Description for mobiles
- * something like facebook does the description
- * for the photos
-*/
-
-.glightbox-mobile .glightbox-container .gslide-description {
- height: auto !important;
- width: 100%;
- background: transparent;
- position: absolute;
- bottom: 0;
- max-width: 100vw !important;
- -webkit-box-ordinal-group: 3 !important;
- -ms-flex-order: 2 !important;
- order: 2 !important;
- max-height: 78vh;
-}
-
-.glightbox-mobile .glightbox-container .gslide-title {
- color: #f0f0f0;
- font-size: 1em;
-}
-
-.glightbox-mobile .glightbox-container .gslide-desc a {
- color: #f0f0f0;
-}
-
-.glightbox-mobile .glightbox-container .gslide-desc * {
- color: inherit;
-}
-
-.glightbox-mobile .glightbox-container .gslide-desc string {
- color: #f0f0f0;
-}
-
-.glightbox-mobile .glightbox-container .gslide-desc .desc-more {
- color: #f0f0f0;
- opacity: 0.4;
-}
-
-.glightbox-mobile .glightbox-clean .gdesc-inner {
- bottom: 40px;
- background: transparent;
-}
-
-.glightbox-mobile .gdesc-inner .gslide-desc {
- line-height: 1.3;
-}
-
-.gdesc-open .gslide-media {
- -webkit-transition: opacity 0.5s ease;
- transition: opacity 0.5s ease;
- opacity: 0.4;
-}
-
-.gdesc-open .gdesc-inner {
- padding-bottom: 30px;
-}
-
-.gdesc-closed .gslide-media {
- -webkit-transition: opacity 0.5s ease;
- transition: opacity 0.5s ease;
- opacity: 1;
-}
-
-.greset {
- -webkit-transition: all 0.3s ease;
- transition: all 0.3s ease;
-}
-
-.gabsolute {
- position: absolute;
-}
-
-.grelative {
- position: relative;
-}
-
-.glightbox-desc {
- display: none !important;
-}
-
-.glightbox-open {
- overflow: hidden;
-}
-
-.gloader {
- height: 25px;
- width: 25px;
- -webkit-animation: lightboxLoader 0.8s infinite linear;
- animation: lightboxLoader 0.8s infinite linear;
- border: 2px solid #fff;
- border-right-color: transparent;
- border-radius: 50%;
- position: absolute;
- display: block;
- z-index: 9999;
- left: 0;
- right: 0;
- margin: 0 auto;
- top: 47%;
-}
-
-.goverlay {
- width: 100%;
- height: calc(100vh + 1px);
- position: fixed;
- top: -1px;
- left: 0;
- background: #000;
- will-change: opacity;
-}
-
-.glightbox-mobile .goverlay {
- background: #000;
-}
-
-.gprev,
-.gnext,
-.gclose {
- z-index: 99999;
- cursor: pointer;
- width: 26px;
- height: 44px;
- border: none;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
-}
-
-.gprev svg,
-.gnext svg,
-.gclose svg {
- display: block;
- width: 25px;
- height: auto;
- margin: 0;
- padding: 0;
-}
-
-.gprev.disabled,
-.gnext.disabled,
-.gclose.disabled {
- opacity: 0.1;
-}
-
-.gprev .garrow,
-.gnext .garrow,
-.gclose .garrow {
- stroke: #fff;
-}
-
-iframe.wait-autoplay {
- opacity: 0;
-}
-
-.glightbox-closing .gnext,
- .glightbox-closing .gprev,
- .glightbox-closing .gclose {
- opacity: 0 !important;
-}
-
-
-/*Skin */
-
-.glightbox-clean .gslide-description {
- background: transparent;
-}
-
-.glightbox-clean .gdesc-inner {
- position: absolute;
- bottom: 0;
- width: calc(100% + 1px);
- margin-left: -1px;
- padding: 24px;
- text-align: center;
- background: rgba(0, 0, 0, 0.9);
-}
-
-.glightbox-clean .gslide-title {
- font-size: 1em;
- margin-bottom: 8px;
- line-height: 1;
- color: #f0f0f0;
-}
-
-.glightbox-clean .gslide-desc {
- font-size: 15px;
- margin-bottom: 0;
- line-height: 1.4;
- color: #f0f0f0;
-}
-
-.gslide-desc {
- a {
- text-decoration: underline;
- text-decoration-color: transparent;
- color: #9e9e9e !important;
-
- &:hover {
- text-decoration-color: #fff;
- color: #fff !important;
- }
- }
-}
-
-.glightbox-clean .gslide-video {
- background: #000;
-}
-
-.glightbox-clean .gprev,
- .glightbox-clean .gnext,
- .glightbox-clean .gclose {
- background-color: rgba(0, 0, 0, 0.75);
- border-radius: 4px;
-}
-
-.glightbox-clean .gprev path,
-.glightbox-clean .gnext path,
-.glightbox-clean .gclose path {
- fill: #fff;
-}
-
-.glightbox-clean button:focus:not(.focused):not(.disabled) {
- outline: none;
-}
-
-.glightbox-clean .gprev {
- position: absolute;
- top: -100%;
- left: 30px;
- width: 40px;
- height: 50px;
-}
-
-.glightbox-clean .gnext {
- position: absolute;
- top: -100%;
- right: 30px;
- width: 40px;
- height: 50px;
-}
-
-.glightbox-clean .gclose {
- width: 35px;
- height: 35px;
- top: 15px;
- right: 10px;
- position: absolute;
-}
-
-.glightbox-clean .gclose svg {
- width: 18px;
- height: auto;
-}
-
-.glightbox-clean .gclose:hover {
- opacity: 1;
-}
-
-
-/*CSS Animations*/
-
-.gfadeIn {
- -webkit-animation: gfadeIn 0.5s ease;
- animation: gfadeIn 0.5s ease;
-}
-
-.gfadeOut {
- -webkit-animation: gfadeOut 0.5s ease;
- animation: gfadeOut 0.5s ease;
-}
-
-.gslideOutLeft {
- -webkit-animation: gslideOutLeft 0.3s ease;
- animation: gslideOutLeft 0.3s ease;
-}
-
-.gslideInLeft {
- -webkit-animation: gslideInLeft 0.3s ease;
- animation: gslideInLeft 0.3s ease;
-}
-
-.gslideOutRight {
- -webkit-animation: gslideOutRight 0.3s ease;
- animation: gslideOutRight 0.3s ease;
-}
-
-.gslideInRight {
- -webkit-animation: gslideInRight 0.3s ease;
- animation: gslideInRight 0.3s ease;
-}
-
-.gzoomIn {
- -webkit-animation: gzoomIn 0.35s ease;
- animation: gzoomIn 0.35s ease;
-}
-
-.gzoomOut {
- -webkit-animation: gzoomOut 0.35s ease;
- animation: gzoomOut 0.35s ease;
-}
-
-@-webkit-keyframes lightboxLoader {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-
-@keyframes lightboxLoader {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-
-@-webkit-keyframes gfadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-
-@keyframes gfadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-
-@-webkit-keyframes gfadeOut {
- from {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
-}
-
-@keyframes gfadeOut {
- from {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
-}
-
-@-webkit-keyframes gslideInLeft {
- from {
- opacity: 0;
- -webkit-transform: translate3d(-60%, 0, 0);
- transform: translate3d(-60%, 0, 0);
- }
- to {
- visibility: visible;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1;
- }
-}
-
-@keyframes gslideInLeft {
- from {
- opacity: 0;
- -webkit-transform: translate3d(-60%, 0, 0);
- transform: translate3d(-60%, 0, 0);
- }
- to {
- visibility: visible;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1;
- }
-}
-
-@-webkit-keyframes gslideOutLeft {
- from {
- opacity: 1;
- visibility: visible;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- -webkit-transform: translate3d(-60%, 0, 0);
- transform: translate3d(-60%, 0, 0);
- opacity: 0;
- visibility: hidden;
- }
-}
-
-@keyframes gslideOutLeft {
- from {
- opacity: 1;
- visibility: visible;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- -webkit-transform: translate3d(-60%, 0, 0);
- transform: translate3d(-60%, 0, 0);
- opacity: 0;
- visibility: hidden;
- }
-}
-
-@-webkit-keyframes gslideInRight {
- from {
- opacity: 0;
- visibility: visible;
- -webkit-transform: translate3d(60%, 0, 0);
- transform: translate3d(60%, 0, 0);
- }
- to {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1;
- }
-}
-
-@keyframes gslideInRight {
- from {
- opacity: 0;
- visibility: visible;
- -webkit-transform: translate3d(60%, 0, 0);
- transform: translate3d(60%, 0, 0);
- }
- to {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1;
- }
-}
-
-@-webkit-keyframes gslideOutRight {
- from {
- opacity: 1;
- visibility: visible;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- -webkit-transform: translate3d(60%, 0, 0);
- transform: translate3d(60%, 0, 0);
- opacity: 0;
- }
-}
-
-@keyframes gslideOutRight {
- from {
- opacity: 1;
- visibility: visible;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- -webkit-transform: translate3d(60%, 0, 0);
- transform: translate3d(60%, 0, 0);
- opacity: 0;
- }
-}
-
-@-webkit-keyframes gzoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 1;
- }
-}
-
-@keyframes gzoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 1;
- }
-}
-
-@-webkit-keyframes gzoomOut {
- from {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 0;
- }
-}
-
-@keyframes gzoomOut {
- from {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- -webkit-transform: scale3d(0.3, 0.3, 0.3);
- transform: scale3d(0.3, 0.3, 0.3);
- }
- to {
- opacity: 0;
- }
-}
-
-@media (min-width: 769px) {
- .glightbox-container .ginner-container {
- width: auto;
- height: auto;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- }
- .glightbox-container .ginner-container.desc-top .gslide-description {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
- }
- .glightbox-container .ginner-container.desc-top .gslide-image,
- .glightbox-container .ginner-container.desc-top .gslide-image img {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- }
- .glightbox-container .ginner-container.desc-left .gslide-description {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0;
- }
- .glightbox-container .ginner-container.desc-left .gslide-image {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- }
- .gslide-image img {
- max-height: 97vh;
- max-width: 100%;
- }
- .gslide-image img.zoomable {
- cursor: -webkit-zoom-in;
- cursor: zoom-in;
- }
- .zoomed .gslide-image img.zoomable {
- cursor: -webkit-grab;
- cursor: grab;
- }
- .gslide-inline {
- max-height: 95vh;
- }
- .gslide-external {
- max-height: 100vh;
- }
- .gslide-description.description-left,
- .gslide-description.description-right {
- max-width: 275px;
- }
- .glightbox-open {
- height: auto;
- }
- .goverlay {
- background: rgba(0, 0, 0, 0.92);
- }
- .glightbox-clean .gslide-media {
- -webkit-box-shadow: 1px 2px 9px 0px rgba(0, 0, 0, 0.65);
- box-shadow: 1px 2px 9px 0px rgba(0, 0, 0, 0.65);
- }
- .glightbox-clean .description-left .gdesc-inner,
-.glightbox-clean .description-right .gdesc-inner {
- position: absolute;
- height: 100%;
- overflow-y: auto;
- }
- .glightbox-clean .gprev,
- .glightbox-clean .gnext,
- .glightbox-clean .gclose {
- background-color: rgba(0, 0, 0, 0.32);
- }
- .glightbox-clean .gprev:hover,
-.glightbox-clean .gnext:hover,
-.glightbox-clean .gclose:hover {
- background-color: rgba(0, 0, 0, 0.7);
- }
- .glightbox-clean .gprev {
- top: 45%;
- }
- .glightbox-clean .gnext {
- top: 45%;
- }
-}
-
-@media (min-width: 992px) {
- .glightbox-clean .gclose {
- opacity: 0.7;
- right: 20px;
- }
-}
-
-@media screen and (max-height: 420px) {
- .goverlay {
- background: #000;
- }
-}
diff --git a/assets/sass/1-tools/_grid.scss b/assets/sass/1-tools/_grid.scss
deleted file mode 100755
index 077edb0..0000000
--- a/assets/sass/1-tools/_grid.scss
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Grid */
-$columns: 12;
-$container-base-width: 1140px;
-$container-offset: $base-spacing-unit;
-
-$desktop: 1024px;
-$tablet: 768px;
-$mobile: 576px;
-
-$mq: ( $mobile:$columns, $tablet:$columns, $desktop:$columns );
-
-.container {
- max-width: $container-base-width;
- padding-left: $container-offset;
- padding-right: $container-offset;
- margin: 0 auto;
-
- @media only screen and (max-width: 1140px) {
- max-width: 1000px;
- }
-
- @media only screen and (max-width: $desktop) {
- max-width: 740px;
- }
-
- @media only screen and (max-width: $tablet) {
- max-width: 560px;
- }
-
- @media only screen and (max-width: $mobile) {
- max-width: 480px;
- }
-}
-
-.row {
- display: flex;
- flex-wrap: wrap;
- flex: 0 1 auto;
- flex-direction: row;
- box-sizing: border-box;
- margin-left: ($base-spacing-unit * -1);
- margin-right: ($base-spacing-unit * -1);
-}
-
-.col {
- padding-left: $base-spacing-unit;
- padding-right: $base-spacing-unit;
-}
-
-[class^="col-"] {
- flex: auto;
-}
-
-
-@for $i from 0 through $columns {
- .col-#{$i} {
- width: percentage( $i / $columns );
- }
-}
-
-@for $i from 0 through $columns {
- .push-#{$i} {
- margin-left: percentage( $i / $columns );
- }
-}
-
-@for $i from 0 through $columns {
- .pull-#{$i} {
- margin-right: percentage( $i / $columns );
- }
-}
-
-
-@each $key, $val in $mq {
-
- // DESKTOP
- @media(max-width: $desktop) {
-
- @for $i from 0 through $columns {
- .col-d-#{$i} {
- width: percentage( $i / $columns );
- }
- }
-
- @for $i from 0 through $columns {
- .push-d-#{$i} {
- margin-left: percentage( $i / $columns );
- }
- }
-
- @for $i from 0 through $columns {
- .pull-d-#{$i} {
- margin-right: percentage( $i / $columns );
- }
- }
- }
-
-
- // TABLET
- @media(max-width: $tablet) {
-
- @for $i from 0 through $columns {
- .col-t-#{$i} {
- width: percentage( $i / $columns );
- }
- }
-
- @for $i from 0 through $columns {
- .push-t-#{$i} {
- margin-left: percentage( $i / $columns );
- }
- }
-
- @for $i from 0 through $columns {
- .pull-t-#{$i} {
- margin-right: percentage( $i / $columns );
- }
- }
- }
-
- // MOBILE
- @media(max-width: $mobile) {
-
- @for $i from 0 through $columns {
- .col-m-#{$i} {
- width: percentage( $i / $columns );
- }
- }
-
- @for $i from 0 through $columns {
- .push-m-#{$i} {
- margin-left: percentage( $i / $columns );
- }
- }
-
- @for $i from 0 through $columns {
- .pull-m-#{$i} {
- margin-right: percentage( $i / $columns );
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/assets/sass/1-tools/_normalize.scss b/assets/sass/1-tools/_normalize.scss
deleted file mode 100755
index 47b010e..0000000
--- a/assets/sass/1-tools/_normalize.scss
+++ /dev/null
@@ -1,341 +0,0 @@
-/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
-
-/* Document
- ========================================================================== */
-
-/**
- * 1. Correct the line height in all browsers.
- * 2. Prevent adjustments of font size after orientation changes in iOS.
- */
-
-html {
- line-height: 1.15; /* 1 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/* Sections
- ========================================================================== */
-
-/**
- * Remove the margin in all browsers.
- */
-
-body {
- margin: 0;
-}
-
-/**
- * Correct the font size and margin on `h1` elements within `section` and
- * `article` contexts in Chrome, Firefox, and Safari.
- */
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * 1. Add the correct box sizing in Firefox.
- * 2. Show the overflow in Edge and IE.
- */
-
-hr {
- box-sizing: content-box; /* 1 */
- height: 0; /* 1 */
- overflow: visible; /* 2 */
-}
-
-/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
-
-pre {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Remove the gray background on active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * 1. Remove the bottom border in Chrome 57-
- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
- */
-
-abbr[title] {
- border-bottom: none; /* 1 */
- text-decoration: underline; /* 2 */
- text-decoration: underline dotted; /* 2 */
-}
-
-/**
- * Add the correct font weight in Chrome, Edge, and Safari.
- */
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
-
-code,
-kbd,
-samp {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
-}
-
-/**
- * Add the correct font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` elements from affecting the line height in
- * all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove the border on images inside links in IE 10.
- */
-
-img {
- border-style: none;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * 1. Change the font styles in all browsers.
- * 2. Remove the margin in Firefox and Safari.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: inherit; /* 1 */
- font-size: 100%; /* 1 */
- line-height: 1.15; /* 1 */
- margin: 0; /* 2 */
-}
-
-/**
- * Show the overflow in IE.
- * 1. Show the overflow in Edge.
- */
-
-button,
-input { /* 1 */
- overflow: visible;
-}
-
-/**
- * Remove the inheritance of text transform in Edge, Firefox, and IE.
- * 1. Remove the inheritance of text transform in Firefox.
- */
-
-button,
-select { /* 1 */
- text-transform: none;
-}
-
-/**
- * Correct the inability to style clickable types in iOS and Safari.
- */
-
-button,
-[type="button"],
-[type="reset"],
-[type="submit"] {
- -webkit-appearance: button;
-}
-
-/**
- * Remove the inner border and padding in Firefox.
- */
-
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner,
-[type="reset"]::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
- border-style: none;
- padding: 0;
-}
-
-/**
- * Restore the focus styles unset by the previous rule.
- */
-
-button:-moz-focusring,
-[type="button"]:-moz-focusring,
-[type="reset"]:-moz-focusring,
-[type="submit"]:-moz-focusring {
- outline: 1px dotted ButtonText;
-}
-
-/**
- * Correct the padding in Firefox.
- */
-
-fieldset {
- padding: 0.35em 0.75em 0.625em;
-}
-
-/**
- * 1. Correct the text wrapping in Edge and IE.
- * 2. Correct the color inheritance from `fieldset` elements in IE.
- * 3. Remove the padding so developers are not caught out when they zero out
- * `fieldset` elements in all browsers.
- */
-
-legend {
- box-sizing: border-box; /* 1 */
- color: inherit; /* 2 */
- display: table; /* 1 */
- max-width: 100%; /* 1 */
- padding: 0; /* 3 */
- white-space: normal; /* 1 */
-}
-
-/**
- * Add the correct vertical alignment in Chrome, Firefox, and Opera.
- */
-
-progress {
- vertical-align: baseline;
-}
-
-/**
- * Remove the default vertical scrollbar in IE 10+.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * 1. Add the correct box sizing in IE 10.
- * 2. Remove the padding in IE 10.
- */
-
-[type="checkbox"],
-[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Correct the cursor style of increment and decrement buttons in Chrome.
- */
-
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Correct the odd appearance in Chrome and Safari.
- * 2. Correct the outline style in Safari.
- */
-
-[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- outline-offset: -2px; /* 2 */
-}
-
-/**
- * Remove the inner padding in Chrome and Safari on macOS.
- */
-
-[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * 1. Correct the inability to style clickable types in iOS and Safari.
- * 2. Change font properties to `inherit` in Safari.
- */
-
-::-webkit-file-upload-button {
- -webkit-appearance: button; /* 1 */
- font: inherit; /* 2 */
-}
-
-/* Interactive
- ========================================================================== */
-
-/*
- * Add the correct display in Edge, IE 10+, and Firefox.
- */
-
-details {
- display: block;
-}
-
-/*
- * Add the correct display in all browsers.
- */
-
-summary {
- display: list-item;
-}
-
-/* Misc
- ========================================================================== */
-
-/**
- * Add the correct display in IE 10+.
- */
-
-template {
- display: none;
-}
-
-/**
- * Add the correct display in IE 10.
- */
-
-[hidden] {
- display: none;
-}
diff --git a/assets/sass/1-tools/_reset.scss b/assets/sass/1-tools/_reset.scss
deleted file mode 100755
index c3b0932..0000000
--- a/assets/sass/1-tools/_reset.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * A very simple reset that sits on top of Normalize.css.
-*/
-
-body,
-h1, h2, h3, h4, h5, h6,
-p, blockquote, pre,
-dl, dd, ol, ul,
-fieldset, legend,
-figure,
-hr {
- margin: 0;
- padding: 0;
-}
-
-
-/**
- * Remove trailing margins from nested lists.
- */
-
-li > {
-
- ul,
- ol {
- margin-bottom: 0;
- }
-
-}
-
-
-/**
- * Remove default table spacing.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
diff --git a/assets/sass/1-tools/_shared.scss b/assets/sass/1-tools/_shared.scss
deleted file mode 100755
index 4bf4cf5..0000000
--- a/assets/sass/1-tools/_shared.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Shared declarations for certain elements.
- */
-
-h1, h2, h3, h4, h5, h6,
-ul, ol, dl,
-blockquote, p, address,
-hr,
-table,
-fieldset, figure,
-pre {
- margin-top: 16px;
- margin-bottom: 32px;
-}
-
-
-/**
- * Consistent indentation for lists.
- */
-
-ul, ol,
-dd {
- margin-left: 20px;
-}
-
-ul, ol {
- li {
- margin-bottom: 10px;
- }
-}
-
-ul {
- list-style-type: none;
-}
-
-ul li:before {
- content: '\2013';
- position: absolute;
- margin-left: -20px;
-}
diff --git a/assets/sass/1-tools/_syntax-highlighting.scss b/assets/sass/1-tools/_syntax-highlighting.scss
deleted file mode 100755
index 52b8451..0000000
--- a/assets/sass/1-tools/_syntax-highlighting.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- Syntax Highlighting
-*/
-
-.highlight {
- margin-bottom: 32px;
- background: var(--syntax-highlighting-background);
-
- .highlighter-rouge & {
- background: var(--syntax-highlighting-background);
- }
-
- .c { color: #998; font-style: italic } // Comment
- .err { color: #a61717; background-color: #e3d2d2 } // Error
- .k { font-weight: bold } // Keyword
- .o { font-weight: bold } // Operator
- .cm { color: #998; font-style: italic } // Comment.Multiline
- .cp { color: #999; font-weight: bold } // Comment.Preproc
- .c1 { color: #998; font-style: italic } // Comment.Single
- .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
- .gd { color: #000; background-color: #fdd } // Generic.Deleted
- .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
- .ge { font-style: italic } // Generic.Emph
- .gr { color: #a00 } // Generic.Error
- .gh { color: #999 } // Generic.Heading
- .gi { color: #000; background-color: #dfd } // Generic.Inserted
- .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
- .go { color: #888 } // Generic.Output
- .gp { color: #555 } // Generic.Prompt
- .gs { font-weight: bold } // Generic.Strong
- .gu { color: #aaa } // Generic.Subheading
- .gt { color: #a00 } // Generic.Traceback
- .kc { font-weight: bold } // Keyword.Constant
- .kd { font-weight: bold } // Keyword.Declaration
- .kp { font-weight: bold } // Keyword.Pseudo
- .kr { font-weight: bold } // Keyword.Reserved
- .kt { color: #5d76bf; font-weight: bold } // Keyword.Type
- .m { color: #099 } // Literal.Number
- .s { color: #ec2355 } // Literal.String
- .na { color: #008080 } // Name.Attribute
- .nb { color: #0086B3 } // Name.Builtin
- .nc { color: #5d76bf; font-weight: bold } // Name.Class
- .no { color: #008080 } // Name.Constant
- .ni { color: #800080 } // Name.Entity
- .ne { color: #900; font-weight: bold } // Name.Exception
- .nf { color: #900; font-weight: bold } // Name.Function
- .nn { color: #555 } // Name.Namespace
- .nt { color: #4d65dc } // Name.Tag
- .nv { color: #008080 } // Name.Variable
- .ow { font-weight: bold } // Operator.Word
- .w { color: #bbb } // Text.Whitespace
- .mf { color: #099 } // Literal.Number.Float
- .mh { color: #099 } // Literal.Number.Hex
- .mi { color: #099 } // Literal.Number.Integer
- .mo { color: #099 } // Literal.Number.Oct
- .sb { color: #ec2355 } // Literal.String.Backtick
- .sc { color: #ec2355 } // Literal.String.Char
- .sd { color: #ec2355 } // Literal.String.Doc
- .s2 { color: #ec2355 } // Literal.String.Double
- .se { color: #ec2355 } // Literal.String.Escape
- .sh { color: #ec2355 } // Literal.String.Heredoc
- .si { color: #ec2355 } // Literal.String.Interpol
- .sx { color: #ec2355 } // Literal.String.Other
- .sr { color: #009926 } // Literal.String.Regex
- .s1 { color: #ec2355 } // Literal.String.Single
- .ss { color: #990073 } // Literal.String.Symbol
- .bp { color: #999 } // Name.Builtin.Pseudo
- .vc { color: #008080 } // Name.Variable.Class
- .vg { color: #008080 } // Name.Variable.Global
- .vi { color: #008080 } // Name.Variable.Instance
- .il { color: #099 } // Literal.Number.Integer.Long
-}
diff --git a/assets/sass/2-base/_base.scss b/assets/sass/2-base/_base.scss
deleted file mode 100755
index 05ef7b8..0000000
--- a/assets/sass/2-base/_base.scss
+++ /dev/null
@@ -1,278 +0,0 @@
-*, *::after, *::before {
- box-sizing: border-box;
-}
-
-body {
- font-family: $base-font-family;
- font-size: $base-font-size;
- line-height: $base-line-height;
- color: var(--text-color);
- background-color: var(--background-color);
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
- @media only screen and (max-width: $mobile) {
- font-size: 18px;
- }
-}
-
-*::selection {
- color: var(--white);
- background-color: var(--brand-blue-bright);
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-family: $heading-font-family;
- font-weight: $heading-font-weight;
- line-height: $heading-line-height;
- letter-spacing: $heading-letter-spacing;
- color: var(--heading-font-color);
-}
-
-h1 {
- font-size: $font-size-h1;
-}
-
-h2 {
- font-size: $font-size-h2;
-}
-
-h3 {
- font-size: $font-size-h3;
-}
-
-h4 {
- font-size: $font-size-h4;
-}
-
-h5 {
- font-size: $font-size-h5;
-}
-
-h6 {
- font-size: $font-size-h6;
-}
-
-blockquote {
- position: relative;
- margin: 40px 0;
- padding-left: 26px;
- font-size: 24px;
- line-height: 1.7;
- font-weight: 500;
- border-left: 4px solid var(--heading-font-color);
- color: var(--heading-font-color);
-
- p {
- margin-bottom: 10px;
- }
-
- cite {
- display: inline-block;
- margin-top: 8px;
- font-size: 14px;
- font-weight: 700;
- font-style: normal;
- color: var(--heading-font-color);
-
- }
-
- @media only screen and (max-width: $mobile) {
- font-size: 21px;
- }
-}
-
-pre {
- overflow: auto;
- padding: 15px;
- margin-bottom: 0;
- font-size: 14px;
- white-space: pre-wrap;
- word-wrap: break-word;
- word-break: break-all;
- color: var(--heading-font-color);
-}
-
-img,
-.lightense-wrap {
- max-width: 100%;
- height: auto;
- vertical-align: middle;
-}
-
-img,
-.lightense-wrap,
-.gallery {
- &+em {
- display: block;
- margin-top: 20px;
- font-size: 12px;
- line-height: 22px;
- font-style: normal;
- font-weight: normal;
- text-align: center;
- color: var(--heading-font-color);
-
- a {
- font-weight: 500;
- border-bottom: 1px solid var(--border-color);
- transition: $global-transition;
-
- &:hover {
- color: var(--link-color);
- border-color: var(--link-color-hover);
- }
- }
-
- @media only screen and (max-width: $mobile) {
- margin-top: 12px;
- }
- }
-}
-
-.border {
- padding: 16px;
- @media only screen and (max-width: $mobile) {
- padding: 8px;
- }
-}
-
-div.sqr_border {
- padding: 16px;
- border-radius: 16px;
- background: var(--background-alt-color);
- @media only screen and (max-width: $mobile) {
- padding: 8px;
- border-radius: 8px;
- }
-}
-
-div.sqr {
- position: relative;
- transform: translate(0);
- display: block;
- height: 0;
- padding-bottom: 100%;
- border-radius: 16px;
- overflow: hidden;
- background: white;
- @media only screen and (max-width: $mobile) {
- border-radius: 8px;
- }
-
- img {
- position: absolute;
- width: 100%;
- height: 100%;
- object-fit: contain;
- }
-}
-
-.scl {
- border-bottom: none !important;
- vertical-align: middle;
-
- i {
- font-size: 24px;
- }
-}
-
-a {
- text-decoration: none;
- color: var(--link-color);
- transition: $global-transition;
-
- &:hover {
- color: var(--link-color-hover);
- }
-}
-
-hr {
- width: 100%;
- height: 1px;
- margin: 60px 0;
- border: 0;
- background: var(--background-alt-color);
-}
-
-.table-container {
- display: block;
- max-width: 100%;
- overflow-x: auto;
-}
-
-table {
- font-size: 12px;
- color: var(--brand-blue-dark);
- width: 100%;
- border-width: 1px;
- border-color: var(--background-alt-color);
- border-collapse: collapse;
- color: var(--heading-font-color);
-}
-
-table th {
- padding: 10px;
- font-size: 16px;
- text-align: left;
- border: 1px solid var(--th-color);
- color: var(--heading-font-color);
- font-weight: 700;
- background-color: var(--th-color);
-}
-
-table tr {
- background-color: var(--tr-color);
- transition: all .3s ease;
- &:nth-child(even) {
- background-color: transparent;
- }
-}
-
-table td {
- padding: 10px;
- font-size: 14px;
- border: 1px solid var(--background-alt-color);
-}
-
-.button {
- display: inline-block;
- padding: 20px 40px;
- font-size: 16px;
- font-weight: 700;
- text-decoration: none;
- border-radius: 8px;
- border: none;
- outline: none;
- cursor: pointer;
- transition: all .25s;
- color: var(--heading-font-color);
- background: var(--background-alt-color);
-
- &--primary {
- color: var(--white);
- background-color: var(--button-background-color);
-
- &:hover {
- background: var(--button-background-hover);
- }
- }
-}
-
-.lazy {
- opacity: 0;
- transition: opacity 0.3s ease-in-out;
-}
-
-.lazy.loaded {
- opacity: 1;
-}
-
-.lightense-backdrop {
- background-color: var(--background-alt-color) !important;
-}
diff --git a/assets/sass/3-modules/_article.scss b/assets/sass/3-modules/_article.scss
deleted file mode 100644
index b9fd1d9..0000000
--- a/assets/sass/3-modules/_article.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Article */
-.article__hover {
- margin-bottom: 32px;
- will-change: transform;
- transition: transform .2s;
-
- &:hover {
- transform: translateY(-3px);
-
- .article__title a {
- text-decoration: underline;
- text-decoration-color: var(--link-color-hover);
- }
- }
-}
-
-.article {
- margin-bottom: 32px;
-}
-
-.article__head {
- position: relative;
- margin-bottom: 8px;
-}
-
-.article__content {
- margin-top: 16px;
-}
-
-.article__date {
- position: absolute;
- z-index: 1;
- top: 20px;
- left: 20px;
- display: inline-block;
- padding: 8px 12px;
- font-size: 12px;
- line-height: 1;
- font-weight: 500;
- border-radius: 8px;
- color: var(--heading-font-color);
- background: var(--background-alt-color);
- pointer-events: none;
-}
-
-.article__image {
- position: relative;
- transform: translate(0);
- display: block;
- height: 0;
- padding-bottom: 62%;
- border-radius: 16px;
- overflow: hidden;
- background: var(--background-alt-color);
-
- img {
- position: absolute;
- width: 100%;
- height: 100%;
- object-fit: cover;
- }
-}
-
-.article__title {
- margin-bottom: 5px;
- font-size: 20px;
-
- a {
- text-decoration: underline;
- text-decoration-color: transparent;
-
- &:hover {
- color: var(--heading-font-color);
- }
- }
-}
-
-.article__excerpt {
- margin-top: 5px;
- margin-bottom: 0;
- font-size: 16px;
- color: var(--text-alt-color);
-}
diff --git a/assets/sass/3-modules/_contact.scss b/assets/sass/3-modules/_contact.scss
deleted file mode 100644
index eff98e4..0000000
--- a/assets/sass/3-modules/_contact.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Contact */
-.contact-head {
- margin-bottom: 32px;
-}
-
-.form__group {
- margin-bottom: 20px;
-
- &:last-child {
- margin-bottom: 0;
- }
-}
-
-.form__input {
- width: 100%;
- padding: 20px;
- font-size: 14px;
- font-weight: 500;
- border: 2px solid var(--border-color);
- border-radius: 2px;
- outline: none;
- transition: .25s ease-in-out;
- resize: vertical;
- color: var(--heading-font-color);
- background-color: var(--background-color);
-
- &::placeholder {
- color: var(--text-color);
- }
-
- &:focus {
- border-color: var(--heading-font-color);
- }
-}
-
-.form__label {
- font-size: 14px;
-}
diff --git a/assets/sass/3-modules/_footer.scss b/assets/sass/3-modules/_footer.scss
deleted file mode 100644
index 6fe6041..0000000
--- a/assets/sass/3-modules/_footer.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Footer */
-.footer {
- margin: 80px 0 68px;
-
- @media only screen and (max-width: $mobile) {
- margin: 80px 0 48px;
- }
-}
-
-.social {
- margin-bottom: 34px;
-
- .social__list {
- display: flex;
- justify-content: center;
- align-items: center;
- flex-wrap: wrap;
- }
-
- .social__item {
- margin-bottom: 6px;
- margin-right: 36px;
-
- &:last-child {
- margin-right: 0;
- }
- }
-
- .social__link {
- display: flex;
- align-items: center;
- font-size: 18px;
- font-weight: 500;
- color: var(--heading-font-color);
-
- i {
- margin-right: 14px;
- }
- }
-
- @media only screen and (max-width: $tablet) {
- .social__item {
- margin-right: 24px;
- }
-
- .social__link {
- font-size: 17px;
- }
- }
-
- @media only screen and (max-width: $mobile) {
- .social__item {
- margin-right: 16px;
- }
-
- .social__link i {
- margin-right: 8px;
- }
- }
-}
-
-.copyright {
- font-size: 14px;
- font-weight: 500;
- text-align: center;
- color: var(--heading-font-color);
-
- a {
- text-decoration: underline;
- text-decoration-color: transparent;
- color: var(--heading-font-color);
-
- &:hover {
- text-decoration-color: var(--heading-font-color);
- color: var(--heading-font-color);
- }
- }
-}
\ No newline at end of file
diff --git a/assets/sass/3-modules/_gallery.scss b/assets/sass/3-modules/_gallery.scss
deleted file mode 100644
index 37ae099..0000000
--- a/assets/sass/3-modules/_gallery.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Gallery */
-.gallery-box {
- margin: 40px 0;
-}
-
-.gallery {
- display: grid;
- grid-template-columns: repeat(3, auto);
- justify-content: center;
- align-content: center;
- grid-gap: 10px;
-
- .gallery__image {
- background: var(--background-color);
-
- img {
- display: block;
- width: 100%;
- height: auto;
- object-fit: cover;
- }
- }
-}
\ No newline at end of file
diff --git a/assets/sass/3-modules/_header.scss b/assets/sass/3-modules/_header.scss
deleted file mode 100644
index 5565091..0000000
--- a/assets/sass/3-modules/_header.scss
+++ /dev/null
@@ -1,269 +0,0 @@
-/* Header */
-.header {
- .header__inner {
- position: relative;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- padding: 60px $base-spacing-unit;
-
- @media only screen and (max-width: $tablet) {
- padding: 40px $base-spacing-unit;
- }
- }
-}
-
-/* Logo */
-.logo__link {
- padding: 4px 0;
- font-family: $heading-font-family;
- font-size: 36px;
- letter-spacing: -1px;
- line-height: 1;
- font-weight: 700;
- transition: none;
-
- &:hover {
- color: var(--heading-font-color);
- }
-
- @media only screen and (max-width: $mobile) {
- font-size: 32px;
- }
-}
-
-/* Nav */
-.main-nav {
- margin-left: auto;
-
- @media only screen and (max-width: $desktop) {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 100;
- opacity: 0;
- visibility: hidden;
- background-color: var(--background-color);
-
- &.is-open {
- opacity: 1;
- visibility: visible;
- transition: all .25s ease;
- }
-
- .nav__list {
- flex-direction: column;
- width: 100%;
-
- .nav__item {
- display: block;
- margin: 0;
-
- .nav__link {
- display: inline-block;
- padding: 20px 0;
- font-size: 21px;
-
- &:hover {
- &::after {
- content: none;
- }
- }
-
- &.nav__link__current {
- color: var(--brand-blue-bright);
-
- &::after {
- content: none;
- }
- }
- }
- }
- }
- }
-}
-
-.main-nav__box {
- display: flex;
- align-items: center;
-
- .nav__icon-close {
- display: none;
- justify-content: center;
- align-items: center;
- width: 36px;
- height: 36px;
- font-size: 24px;
- line-height: 1;
- border-radius: 50%;
- color: var(--heading-font-color);
- background: var(--background-alt-color);
- cursor: pointer;
-
- &:hover {
- .ion-md-close {
- transform: rotate(90deg);
- }
- }
-
- .ion-md-close {
- transition: $global-transition;
- }
- }
-
- .nav__title {
- display: none;
- }
-
- @media only screen and (max-width: $desktop) {
- display: block;
-
- align-items: center;
- width: 80%;
- height: 80vh;
- padding-top: 180px;
- margin: 0 auto;
- text-align: center;
- overflow-y: auto;
-
- .nav__icon-close {
- display: flex;
- position: absolute;
- top: 40px;
- right: 40px;
- }
-
- .nav__title {
- display: inline-block;
- margin-bottom: 20px;
- font-family: $heading-font-family;
- font-size: 36px;
- font-weight: 700;
- letter-spacing: -1px;
- color: var(--heading-font-color);
- }
- }
-
- @media only screen and (max-width: $tablet) {
- padding-top: 100px;
- }
-}
-
-.nav__list {
- display: flex;
- align-items: center;
-
- .nav__item {
- display: inline-block;
- margin-right: 48px;
- margin-bottom: 0;
-
- &:last-child {
- margin-right: 0;
- }
-
- .nav__link {
- position: relative;
- padding: 4px 0;
- font-size: 16px;
- line-height: 1;
- font-weight: 700;
- transition: none;
-
- &.nav__link__current {
- &::after {
- transform: scaleX(1);
- transition: none;
- background: var(--brand-blue-bright);
- }
- }
-
- &:hover {
- color: var(--link-color);
-
- &::after {
- transform: scaleX(1);
- }
- }
-
- &::after {
- content: "";
- position: absolute;
- left: 0;
- bottom: -2px;
- width: 100%;
- height: 2px;
- transform-origin: center;
- transform: scaleX(0);
- will-change: transform;
- transition: all 0.25s;
- background: var(--link-color);
- }
- }
- }
-}
-
-.nav-button {
- display: flex;
- align-items: center;
- font-size: 21px;
- color: var(--link-color);
- cursor: pointer;
-
- .nav__icon {
- transition: $global-transition;
- }
-
- .nav__icon-menu {
- display: none;
- }
-
- @media only screen and (max-width: $desktop) {
- margin-left: auto;
- font-size: 26px;
-
- .nav__icon-menu {
- display: block;
- }
- }
-}
-
-/* Toggle Theme */
-.toggle-theme {
- position: relative;
- justify-content: center;
- align-items: center;
- width: 24px;
- height: 24px;
- user-select: none;
- cursor: pointer;
-
- @media only screen and (max-width: $desktop) {
- padding: 20px 0;
- }
-}
-
-.toggle-sun,
-.toggle-moon {
- position: absolute;
- font-size: 20px;
- color: var(--heading-font-color);
- transition: $global-transition;
-}
-
-.toggle-sun {
- display: none;
-}
-
-.dark-mode {
- .toggle-sun {
- display: block;
- fill: white;
- }
-
- .toggle-moon {
- display: none;
- }
-}
diff --git a/assets/sass/3-modules/_icons.scss b/assets/sass/3-modules/_icons.scss
deleted file mode 100644
index 3f43a42..0000000
--- a/assets/sass/3-modules/_icons.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-.inline-svg {
- position: relative;
- display: inline-block;
- height: 1em;
- width: 1em;
-}
-
-.logo-linkedin-icon {
- fill: #0580c4;
-}
-
-.arrow-up-icon {
- color: var(--brand-blue-dark);
-}
-
-.close-icon {
- top: 2px;
-}
-
-footer .logo-linkedin-icon {
- margin-right: 5px;
- top: -3px;
-}
diff --git a/assets/sass/3-modules/_pagination.scss b/assets/sass/3-modules/_pagination.scss
deleted file mode 100644
index 13a628e..0000000
--- a/assets/sass/3-modules/_pagination.scss
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Pagination */
-.pagination {
- margin: 40px 0 160px;
-
- @media only screen and (max-width: $mobile) {
- margin: 40px 0 80px;
- }
-}
-
-.pagination__inner {
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.pagination__list {
- display: flex;
- justify-content: space-between;
- align-items: center;
- width: 100%;
- font-size: 15px;
- font-weight: 700;
- line-height: 1;
- text-transform: uppercase;
- color: var(--text-color);
-
- @media only screen and (max-width: $mobile) {
- align-items: stretch;
- font-size: 14px;
- }
-}
-
-.pagination__item {
- display: flex;
- justify-content: center;
- width: 100%;
- padding: 24px 20px;
- text-align: center;
- border-radius: 16px;
- background: var(--background-alt-color);
-
- @media only screen and (max-width: $mobile) {
- align-items: center;
- padding: 20px;
- border-radius: 8px;
- }
-}
-
-.pagination__count {
- margin: 0 32px;
- font-size: 14px;
- color: var(--text-alt-color);
-
- @media only screen and (max-width: $desktop) {
- margin: 0 16px;
- }
-
- @media only screen and (max-width: $tablet) {
- margin: 0 12px;
- }
-}
-
-.pagination__next,
-.pagination__prev {
- &:hover {
- color: var(--heading-font-color);
- }
-
- i {
- font-size: 14px;
- transition: transform .15s ease;
- will-change: transform;
- }
-
- &.disabled {
- opacity: 0.6;
- cursor: not-allowed;
- color: inherit;
-
- &:hover {
- i {
- transform: none;
- }
- }
- }
-}
-
-.pagination__next {
- &:hover {
- i {
- transform: translateX(2px);
- }
- }
-
- i {
- margin-left: 5px;
- }
-}
-
-.pagination__prev {
- &:hover {
- i {
- transform: translateX(-2px);
- }
- }
-
- i {
- margin-right: 5px;
- }
-}
diff --git a/assets/sass/3-modules/_scroll-button-top.scss b/assets/sass/3-modules/_scroll-button-top.scss
deleted file mode 100755
index 56cb93b..0000000
--- a/assets/sass/3-modules/_scroll-button-top.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-.top {
- position: fixed;
- bottom: 36px;
- right: -100px;
- z-index: 1;
- width: 36px;
- height: 36px;
- font-size: 20px;
- line-height: 39px;
- text-align: center;
- border-radius: 50%;
- color: var(--heading-font-color);
- background-color: var(--background-alt-color);
- cursor: pointer;
- transition: all .25s ease;
-
- &.is-active {
- right: 36px;
- }
-}
-
-@media only screen and (max-width: $desktop) {
- .top {
- bottom: 24px;
-
- &.is-active {
- right: 28px;
- }
- }
-}
diff --git a/assets/sass/3-modules/_section-hero.scss b/assets/sass/3-modules/_section-hero.scss
deleted file mode 100644
index 112cfb9..0000000
--- a/assets/sass/3-modules/_section-hero.scss
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Hero */
-.hero {
- margin: 96px 0;
-
- @media only screen and (max-width: $desktop) {
- margin: 40px 0;
- }
-}
-
-.hero__inner {
- .hero__title {
- margin-bottom: 32px;
- font-size: 68px;
- text-align: center;
- line-height: 1.2;
- color: var(--heading-font-color);
-
- @media only screen and (max-width: 1140px) {
- font-size: 60px;
- }
-
- @media only screen and (max-width: $desktop) {
- font-size: 50px;
- }
-
- @media only screen and (max-width: $tablet) {
- margin-bottom: 24px;
- font-size: 40px;
- }
-
- @media only screen and (max-width: $mobile) {
- font-size: 32px;
- }
- }
-
- .hero__description,
- .hero__description p {
- margin-bottom: 0;
- font-size: 24px;
- text-align: center;
- color: var(--text-alt-color);
-
- @media only screen and (max-width: $desktop) {
- font-size: inherit;
- }
- }
-
- .hero__hiring,
- .hero__hiring p {
- margin-bottom: 32px;
- font-size: 24px;
- text-align: center;
- font-weight: bold;
-
- a {
- color: var(--brand-blue-bright)
- }
-
- @media only screen and (max-width: $desktop) {
- font-size: inherit;
- }
- }
-}
diff --git a/assets/sass/3-modules/_section-portfolio.scss b/assets/sass/3-modules/_section-portfolio.scss
deleted file mode 100644
index 5177e6f..0000000
--- a/assets/sass/3-modules/_section-portfolio.scss
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Portfolio */
-.portfolio__view {
- padding-left: 20px;
- border-radius: 12px;
- background: var(--background-color);
-}
-
-.portfolio__toggle {
- display: flex;
- justify-content: center;
- align-items: center;
- min-width: 48px;
- height: 48px;
- padding: 12px;
- border-radius: 12px;
- background: var(--background-alt-color);
- transition: transform 0.15s ease;
- cursor: pointer;
-
- @media only screen and (max-width: $tablet) {
- display: none;
- }
-}
-
-.icon-bar {
- position: relative;
- width: 4px;
- height: 4px;
- margin: 0 auto 4px auto;
- transition: all 0.15s ease;
- background: var(--heading-font-color);
-
- &:last-child {
- margin-bottom: 0;
- }
-
- &:before,
- &:after {
- content: "";
- position: absolute;
- display: block;
- width: 4px;
- height: 4px;
- background: var(--heading-font-color);
- opacity: 1;
- will-change: transform;
- transition: all 0.15s ease;
- }
-
- &:before {
- left: 0;
- transform: translateX(-9px);
- }
-
- &:after {
- right: 0;
- transform: translateX(9px);
- }
-}
-
-.view-list {
- .icon-bar {
- width: 24px;
-
- &:before,
- &:after {
- opacity: 0;
- }
-
- &:before {
- left: 0;
- transform: translateX(-15px);
- }
-
- &:after {
- right: 0;
- transform: translateX(15px);
- }
- }
-}
-
-.view-list {
-
- .portfolio__gallery {
- .col {
- width: 100%;
- }
-
- .portfolio__link {
- padding-top: 67%;
- }
-
- @media only screen and (max-width: $tablet) {
- .portfolio__link {
- padding-top: 87%;
- }
- }
- }
-}
-
-.portfolio__item {
- padding: 32px;
- margin-bottom: ($base-spacing-unit * 2);
- border-radius: 16px;
- background: var(--background-alt-color);
-}
-
-.portfolio__link {
- position: relative;
- transform: translate(0);
- display: block;
- padding-top: 87%;
- border-radius: 16px;
- background: var(--background-color);
- transition: none;
-
- &:hover {
-
- &::after {
- opacity: 1;
- visibility: visible;
- }
-
- .portfolio__icon {
- transform: translate(-50%, -50%) scale(1,1);
- opacity: 1;
- visibility: visible;
- }
- }
-
- &::after {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- display: block;
- width: 100%;
- height: 100%;
- border-radius: 16px;
- opacity: 0;
- visibility: hidden;
- background: rgba(0, 0, 0, 0.1);
- transition: all .35s ease;
- }
-}
-
-.portfolio__icon {
- position: absolute;
- z-index: 1;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%) scale(.3,.3);
- display: flex;
- justify-content: center;
- align-items: center;
- width: 40px;
- height: 40px;
- border-radius: 50%;
- box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.07);
- color: var(--heading-font-color);
- background: var(--border-color-alt);
- opacity: 0;
- visibility: hidden;
- transition: all .35s ease, transform .35s cubic-bezier(.175,.885,.32,1.275) 0s;
-}
-
-.portfolio__image {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- object-fit: cover;
- border-radius: 16px;
- box-shadow: 0px 103px 80px rgba(27, 22, 50, 0.07), 0px 37.6px 29.2px rgba(27, 22, 50, 0.0483), 0px 18.25px 14.18px rgba(27, 22, 50, 0.0389), 0px 8.95px 6.95px rgba(27, 22, 50, 0.0311), 0px 3.54px 2.75px rgba(27, 22, 50, 0.0217);
-}
\ No newline at end of file
diff --git a/assets/sass/3-modules/_section-subscribe.scss b/assets/sass/3-modules/_section-subscribe.scss
deleted file mode 100644
index 0573e20..0000000
--- a/assets/sass/3-modules/_section-subscribe.scss
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Subscribe */
-.subscribe {
- position: relative;
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
- padding: 136px 68px;
- border-radius: 16px;
- overflow: hidden;
- background: var(--background-alt-color);
-
- @media only screen and (max-width: 1140px) {
- padding: 136px 48px;
- }
-
- @media only screen and (max-width: $desktop) {
- padding: 96px 48px;
- }
-
- @media only screen and (max-width: $mobile) {
- padding: 80px 40px;
- }
-}
-
-.subscribe__head {
- max-width: 360px;
-
- .subscribe__title {
- margin-bottom: 0;
- font-size: 32px;
- }
-
- @media only screen and (max-width: $desktop) {
- max-width: 100%;
-
- .subscribe__title {
- margin-bottom: 20px;
- }
- }
-
- @media only screen and (max-width: $mobile) {
- .subscribe__title {
- font-size: 26px;
- }
- }
-}
-
-.subscribe__inner {
- max-width: 460px;
- width: 100%;
-
- @media only screen and (max-width: $desktop) {
- max-width: 100%;
- margin-bottom: 20px;
- }
-}
-
-.subscribe__form {
- display: flex;
- align-items: center;
-
- @media only screen and (max-width: $mobile) {
- flex-direction: column;
- }
-}
-
-.subscribe__email {
- position: relative;
- width: 100%;
- height: 58px;
- padding: 20px;
- margin-right: 8px;
- font-size: 16px;
- line-height: 1;
- border: none;
- border-radius: 8px;
- outline: 0;
- cursor: text;
- color: var(--heading-font-color);
- background: var(--background-color);
- transition: border-color .15s;
-
- &::placeholder {
- color: var(--text-alt-color);
- }
-
- @media only screen and (max-width: $mobile) {
- margin-right: 0;
- margin-bottom: 12px;
- }
-}
-
-.subscribe__button {
- @media only screen and (max-width: $mobile) {
- width: 100%;
- }
-}
-
-.subscribe__email,
-.subscribe__button {
- box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, .03);
-}
-
-.subscribe__bg {
- position: absolute;
- right: 0;
- bottom: 0;
- display: flex;
- justify-content: end;
-
- @media only screen and (max-width: $desktop) {
- height: 80px;
- }
-
- @media only screen and (max-width: $mobile) {
- height: 100px;
- }
-}
\ No newline at end of file
diff --git a/assets/sass/3-modules/_sections.scss b/assets/sass/3-modules/_sections.scss
deleted file mode 100644
index 1fdcb2f..0000000
--- a/assets/sass/3-modules/_sections.scss
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Sections */
-.section {
- margin-bottom: 120px;
-
- @media only screen and (max-width: $mobile) {
- margin-bottom: 80px;
- }
-}
-
-.section__head {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: space-between;
- flex-wrap: wrap;
- margin-bottom: 40px;
-
- &::after {
- content: "";
- position: absolute;
- z-index: -1;
- display: block;
- width: 100%;
- height: 1px;
- background: var(--background-alt-color);
- pointer-events: none;
- }
-
- @media only screen and (max-width: $tablet) {
- &::after {
- content: none;
- }
- }
-}
-
-.section__title {
- padding-right: 20px;
- margin-bottom: 0;
- font-size: 32px;
-
- @media only screen and (max-width: $mobile) {
- font-size: 26px;
- }
-}
-
-.section__link {
- padding-left: 20px;
- font-size: 18px;
- font-weight: 500;
- text-decoration: underline;
- text-decoration-color: transparent;
- color: var(--link-color);
-
- &:hover {
- text-decoration-color: var(--heading-font-color);
- color: var(--link-color-hover);
- }
-
- @media only screen and (max-width: $tablet) {
- padding-left: 0;
- }
-
- @media only screen and (max-width: $mobile) {
- font-size: 16px;
- }
-}
-
-.section__title,
-.section__link {
- background: var(--background-color);
-}
\ No newline at end of file
diff --git a/assets/sass/4-layouts/_post.scss b/assets/sass/4-layouts/_post.scss
deleted file mode 100644
index 26f23c4..0000000
--- a/assets/sass/4-layouts/_post.scss
+++ /dev/null
@@ -1,225 +0,0 @@
-/* Post + Page */
-.post,
-.page {
- max-width: 760px;
- margin: 0 auto 60px;
- color: var(--text-color);
-
- a {
- font-weight: 500;
- //border-bottom: 1px solid var(--border-color);
-
- &:hover {
- color: var(--link-color);
- border-bottom-color: var(--link-color-hover);
- }
- }
-
- img, .js-reframe {
- border-radius: 8px;
- overflow: hidden;
-
- &.lightense-open {
- border-radius: 0;
- }
- }
-
- .button {
- border: none;
- text-decoration: none;
- }
-}
-
-.post__info,
-.page__info {
- max-width: 760px;
- margin: 32px auto 32px;
- text-align: center;
-
- @media only screen and (max-width: $desktop) {
- max-width: 100%;
- margin: 32px auto;
- }
-
- @media only screen and (max-width: $mobile) {
- margin: 32px auto 32px;
- }
-}
-
-.post__tags {
- display: flex;
- justify-content: center;
- align-items: center;
- flex-wrap: wrap;
- margin-bottom: 20px;
-
- .post__tag {
- padding: 12px 16px;
- margin: 4px 8px 4px 0;
- font-size: 14px;
- line-height: 1;
- font-weight: 500;
- text-transform: capitalize;
- border: none;
- border-radius: 8px;
- color: var(--heading-font-color);
- transition: none;
- background-color: var(--background-alt-color);
-
- &:last-child {
- margin-right: 0;
- }
- }
-}
-
-.post__title,
-.page__title {
- margin-bottom: 20px;
- font-size: 62px;
- line-height: 1.2;
-
- @media only screen and (max-width: 1140px) {
- font-size: 64px;
- }
-
- @media only screen and (max-width: $desktop) {
- font-size: 48px;
- }
-
- @media only screen and (max-width: $mobile) {
- margin-bottom: 24px;
- font-size: 32px;
- }
-}
-
-.post__meta {
- font-size: 14px;
- line-height: 1;
- font-weight: 700;
- color: var(--heading-font-color);
-
- .post__author {
- display: inline-block;
- text-decoration: underline;
- text-decoration-color: transparent;
- color: var(--heading-font-color);
- transition: text-decoration-color .35s;
-
- &:hover {
- text-decoration-color: var(--heading-font-color);
- }
- }
-}
-
-.post-image,
-.page-image {
- position: relative;
- padding-top: 56.25%;
- border-radius: 16px;
- overflow: hidden;
- background: var(--background-alt-color);
-
- img {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border-radius: 16px;
- object-fit: cover;
- user-select: none;
- }
-
- @media only screen and (max-width: $desktop) {
- margin-bottom: 40px;
- }
-
- @media only screen and (max-width: $mobile) {
- padding-top: 62%;
- margin-bottom: 32px;
- }
-}
-
-.post__share {
- padding-bottom: 40px;
- border-bottom: 1px solid var(--background-alt-color);
-
- .share__list {
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- width: 100%;
- }
-
- .share__item {
- margin-right: 4px;
- margin-bottom: 0;
- text-align: center;
-
- &:last-child {
- margin-right: 0;
- }
- }
-
- .share__link {
- display: flex;
- justify-content: center;
- align-items: center;
- width: 48px;
- height: 48px;
- font-size: 18px;
- text-transform: uppercase;
- border: none;
- border-radius: 8px;
- background: var(--background-alt-color);
-
- i {
- transition: transform .25s;
- will-change: transform;
- }
-
- &:hover {
- color: var(--heading-font-color);
-
- i {
- transform: scale(1.1);
- }
- }
- }
-}
-
-/* Disqus */
-.show-comments {
- margin: 60px 0;
- text-align: center;
-}
-
-/* 404 */
-.error {
- margin-bottom: 0;
- text-align: center;
-
- .error__title {
- margin-bottom: 24px;
- font-size: 100px;
- line-height: 1;
- }
-
- .error__text {
- margin-bottom: 48px;
- color: var(--text-alt-color);
- }
-
- @media only screen and (max-width: $mobile) {
- .error__title {
- font-size: 68px;
- }
-
- .error__title {
- font-size: 80px;
- }
- .error__text {
- margin-bottom: 24px;
- }
- }
-}
diff --git a/assets/sass/4-layouts/_tags-page.scss b/assets/sass/4-layouts/_tags-page.scss
deleted file mode 100644
index cefef35..0000000
--- a/assets/sass/4-layouts/_tags-page.scss
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Tags */
-.tag__head {
- margin: 96px 0 80px;
-
- @media only screen and (max-width: $desktop) {
- margin: 40px 0;
- }
-}
-
-.tags__inner {
- margin-bottom: 120px;
-
- @media only screen and (max-width: $mobile) {
- margin-bottom: 80px;
- }
-}
-
-.tag__title {
- margin-bottom: 32px;
- font-size: 68px;
-
- @media only screen and (max-width: 1140px) {
- font-size: 60px;
- }
-
- @media only screen and (max-width: $desktop) {
- font-size: 50px;
- }
-
- @media only screen and (max-width: $tablet) {
- margin-bottom: 24px;
- font-size: 40px;
- }
-
- @media only screen and (max-width: $mobile) {
- font-size: 32px;
- }
-}
-
-.tag__list {
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- padding-bottom: 80px;
- border-bottom: 1px solid var(--border-color-alt);
-
- .tag__item {
- margin-right: 12px;
- margin-bottom: 12px;
-
- &:last-child {
- margin-right: 0;
- }
- }
-
- .tag__link {
- display: block;
- padding: 12px 16px;
- font-size: 16px;
- font-weight: 500;
- text-transform: capitalize;
- border-radius: 8px;
- transition: none;
- background: var(--background-alt-color);
-
- &:hover {
- color: var(--heading-font-color);
- }
- }
-
- @media only screen and (max-width: $mobile) {
- padding-bottom: 48px;
-
- .tag__item {
- margin-right: 8px;
- margin-bottom: 8px;
- }
-
- .tag__link {
- font-size: 14px;
- }
- }
-}
-
-.tag__info {
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- margin-bottom: 40px;
- border-bottom: 1px solid var(--border-color-alt);
-}
-
-.tag__counter {
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 16px 24px;
- border-radius: 16px;
- color: var(--heading-font-color);
- background: var(--background-alt-color);
-
- span {
- font-family: $heading-font-family;
- font-size: 32px;
- line-height: 1;
- }
-
- small {
- font-size: 12px;
- font-weight: 700;
- text-transform: uppercase;
- letter-spacing: 1px;
- }
-
- @media only screen and (max-width: $mobile) {
- span {
- font-size: 28px;
- }
- }
-}
-
-.tag__name {
- padding: 40px 0;
- margin-right: 40px;
- margin-bottom: 0;
- font-size: 40px;
- text-transform: capitalize;
-
- @media only screen and (max-width: $tablet) {
- font-size: 32px;
- }
-
- @media only screen and (max-width: $mobile) {
- margin-right: 28px;
- font-size: 26px;
- }
-}
-
-/* Tag Page */
-.archive {
- margin: 40px 0 80px;
-}
-
-.archive__box {
- margin-bottom: 40px;
- text-align: center;
-}
-
-.archive__counter {
- font-size: 12px;
- font-weight: 700;
- text-transform: uppercase;
- letter-spacing: 1px;
-}
-
-.archive__title {
- margin: 0;
- font-size: 40px;
-}
\ No newline at end of file
diff --git a/assets/sass/main.scss b/assets/sass/main.scss
deleted file mode 100755
index 4600b07..0000000
--- a/assets/sass/main.scss
+++ /dev/null
@@ -1,109 +0,0 @@
-/*!------------------------------------------------------------------
-[MAIN STYLESHEET]
--------------------------------------------------------------------*/
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-:: Template name: Clancy
-:: Clancy is an elegant portfolio theme for Hugo designed for photographers, designers, illustrators, artists, creatives, etc. This theme will help you professionally introduce yourself to your visitors and showcase your work in a minimalistic style. This super clean and fully optimized theme can be easily customized to suit your needs.
-:: Template Author: Anvod Studio
-:: Version: 1.0
-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
-
-/* >>>>>>>>>>>>>>>>>>>>>>>>>>>
-:: 1-Tools and Libs
- 1.1-Normalize
- 1.2-Reset
- 1.3-Shared
- 1.4-Syntax Highlighting
- 1.5-Grid
- 1.6-Glightbox
- 1.7-Animate
-:: 2-Base Styles
- 2.1-Base
-:: 3-Modules
- 3.1-Scroll Button Top
- 3.2-Header
- 3.3-Pagination
- 3.4-Footer
- 3.5-Gallery
- 3.6-Section-Hero
- 3.7-Section-Portfolio
- 3.8-Section-Subscribe
- 3.9-Sections
- 3.10-Article
- 3.11-Contact
-:: 4-Layouts
- 4.1-Home Page
- 4.2-Post Page
- 4.3-Tags Page
-<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
-
-
-@import '0-settings/variables';
-@import '0-settings/color-scheme-bright';
-@import '0-settings/color-scheme-dark';
-@import '0-settings/mixins';
-@import '0-settings/helpers';
-
-
-/* =======================
-:: 1-Tools and Libs
-======================= */
-/* >>>>>>>>>>>>>> :: 1.1-Normalize <<<<<<<<<<<<<<< */
-@import '1-tools/normalize';
-/* >>>>>>>>>>>>>> :: 1.2-Reset <<<<<<<<<<<<<<< */
-@import '1-tools/reset';
-/* >>>>>>>>>>>>>> :: 1.3-Shared <<<<<<<<<<<<<<< */
-@import '1-tools/shared';
-/* >>>>>>>>>>>>>> :: 1.4-Syntax Highlighting <<<<<<<<<<<<<<< */
-//@import '1-tools/syntax-highlighting';
-/* >>>>>>>>>>>>>> :: 1.5-Grid <<<<<<<<<<<<<<< */
-@import '1-tools/grid';
-/* >>>>>>>>>>>>>> :: 1.6-Glightbox <<<<<<<<<<<<<<< */
-//@import '1-tools/glightbox';
-/* >>>>>>>>>>>>>> :: 1.7-Animate <<<<<<<<<<<<<<< */
-@import '1-tools/animate';
-
-
-/* =======================
-:: 2-Base Styles
-======================= */
-/* >>>>>>>>>>>>>> :: 2.1-Base <<<<<<<<<<<<<<< */
-@import '2-base/base';
-
-
-/* =======================
-:: 3-Modules
-======================= */
-/* >>>>>>>>>>>>>> :: 3.1-Scroll Button Top <<<<<<<<<<<<<<< */
-@import '3-modules/scroll-button-top';
-/* >>>>>>>>>>>>>> :: 3.2-Header <<<<<<<<<<<<<<< */
-@import '3-modules/header';
-/* >>>>>>>>>>>>>> :: 3.3-Pagination <<<<<<<<<<<<<<< */
-@import '3-modules/pagination';
-/* >>>>>>>>>>>>>> :: 3.4-Footer <<<<<<<<<<<<<<< */
-@import '3-modules/footer';
-/* >>>>>>>>>>>>>> :: 3.5-Gallery <<<<<<<<<<<<<<< */
-//@import '3-modules/gallery';
-/* >>>>>>>>>>>>>> :: 3.6-Section-Hero <<<<<<<<<<<<<<< */
-@import '3-modules/section-hero';
-/* >>>>>>>>>>>>>> :: 3.7-Section-Portfolio <<<<<<<<<<<<<<< */
-//@import '3-modules/section-portfolio';
-/* >>>>>>>>>>>>>> :: 3.8-Section-Subscribe <<<<<<<<<<<<<<< */
-@import '3-modules/section-subscribe';
-/* >>>>>>>>>>>>>> :: 3.9-Sections <<<<<<<<<<<<<<< */
-@import '3-modules/sections';
-/* >>>>>>>>>>>>>> :: 3.10-Article <<<<<<<<<<<<<<< */
-@import '3-modules/article';
-/* >>>>>>>>>>>>>> :: 3.11-Contact <<<<<<<<<<<<<<< */
-@import '3-modules/contact';
-@import '3-modules/icons';
-
-
-/* =======================
-:: 4-Layouts
-======================= */
-/* >>>>>>>>>>>>>> :: 4.1-Post <<<<<<<<<<<<<<< */
-@import '4-layouts/post';
-/* >>>>>>>>>>>>>> :: 4.2-Tags Page <<<<<<<<<<<<<<< */
-@import '4-layouts/tags-page';
diff --git a/content/_index.en.md b/content/_index.en.md
new file mode 100644
index 0000000..642d6a1
--- /dev/null
+++ b/content/_index.en.md
@@ -0,0 +1,99 @@
+---
+title: Peak Scale
+description: "Cloud Native consulting and platform engineering from Bern. Hands-on partner for strategy, architecture, engineering, and operations of modern cloud platforms."
+hero:
+ eyebrow: "Hands-on across the full lifecycle"
+ title: "Cloud transformations that succeed"
+ lead: "We support you from strategy and architecture all the way to delivery – technically grounded, hands-on, and shaped to your context."
+ sub: "Hands-on for platforms that work – on-prem and across the public clouds"
+ cta_primary: "See services"
+ cta_primary_href: "/services/"
+ cta_secondary: "Get in touch"
+mountain:
+ eyebrow: "From basecamp to summit"
+ title: "Four stages, one team."
+ lead: "Architecture as the highest stage, supported by engineering, assessments, and enablement."
+ stages:
+ - name: "Architecture"
+ sub: "Load-bearing target architecture, decision basis, migration paths."
+ - name: "Platform Engineering"
+ sub: "Hands-on build and automation – Kubernetes, GitOps, security."
+ - name: "Assessments"
+ sub: "Solid evaluations of existing solutions with concrete recommendations."
+ - name: "Training & Enablement"
+ sub: "Workshops and deep technical training so teams can move on independently."
+why:
+ eyebrow: "Why Peak Scale"
+ title: "Why Peak Scale?"
+ items:
+ - title: "Peak for technical depth. Scale for platforms that grow with you."
+ body: ""
+ image: "/images/section/topo-abstract.jpg"
+ - title: "Swiss-first context"
+ body: "Experience in Swiss IT environments – familiar with the requirements of enterprises, public bodies, and regulated industries."
+ - title: "Hands-on collaboration"
+ body: "Embedded with engineering and architecture teams – collaborative, technical, no consulting layer in between."
+ - title: "Security and maintainability"
+ body: "Realistic risk assessment and concrete measures – so platforms stay secure and operable for the long run."
+ - title: "Enablement, not lock-in"
+ body: "Knowledge transfer, documentation, and training – so your teams can keep building on their own."
+ - title: "Specialised team"
+ body: "No full-service generalist shop – a focused team with deep cloud-native expertise."
+customers:
+ eyebrow: "Our customers"
+ title: "Our customers "
+ lead: "A selection of customers we've supported on architecture, engineering, or assessment projects."
+testimonial:
+ eyebrow: "Voices from projects "
+lifecycle:
+ eyebrow: "What IT teams gain"
+ title: "What IT teams stand to gain "
+ lead: "Clear orientation, technical excellence, and pragmatic delivery – across the full lifecycle."
+ cards:
+ - title: "Cloud Architecture"
+ desc: "We design and evaluate cloud architectures that can evolve – pragmatic, transparent, and shaped to your environment."
+ - title: "Platform Engineering"
+ desc: "We support teams on the design, build, and automation of modern cloud-native platforms and workflows."
+ - title: "Assessments"
+ desc: "Well-grounded reviews of existing solutions: architecture, Kubernetes, security, processes, GitOps, and CI/CD."
+ - title: "Training & Enablement"
+ desc: "We share knowledge – in compact workshops or deep technical trainings for engineers and architects."
+challenges:
+ eyebrow: "Typical challenges"
+ title: "Typical challenges we solve"
+ lead: "Typical stages in cloud transformations – from real projects."
+ bg: "/images/section/challenges.jpg"
+ items:
+ - title: "Building modern CI/CD and GitOps processes"
+ body: "Automated deployments, verifiable supply chain security, and reproducible platforms with Argo CD, Flux & SLSA."
+ - title: "Modernising existing infrastructure"
+ body: "Migrating legacy environments to scalable and secure cloud platforms – with a clear roadmap and pragmatic decisions."
+ featured: true
+ - title: "Introducing multi-tenancy"
+ body: "Tenant separation with Capsule and Kubernetes – including commercial support and operating models."
+ - title: "Cloud-native expertise in the team"
+ body: "We build knowledge that stays in the team – through pair-engineering, workshops, and documentation."
+partners:
+ eyebrow: "Technology partners"
+ title: "Technology partners"
+ lead: "We work with leading cloud-native vendors."
+next_steps:
+ eyebrow: "Continue"
+ title: "Next stage "
+ cards:
+ - eyebrow: "Services"
+ title: "Scope of work & core areas"
+ desc: ""
+ href: "/services/"
+ checklist: ["Cloud & architecture", "Platform engineering", "Assessments"]
+ - eyebrow: "Products"
+ title: "Own solutions & enterprise support"
+ desc: ""
+ href: "/produkte/"
+ variant: "gold"
+ - eyebrow: "Team"
+ title: "Who Peak Scale is and how we work"
+ desc: ""
+ href: "/team/"
+ variant: "sage"
+---
diff --git a/content/_index.md b/content/_index.md
new file mode 100644
index 0000000..2744ecb
--- /dev/null
+++ b/content/_index.md
@@ -0,0 +1,104 @@
+---
+title: Peak Scale
+description: "Cloud Native Consulting & Platform Engineering aus Bern. Hands-on Partner für Strategie, Architektur, Engineering und Betrieb moderner Cloud-Plattformen."
+hero:
+ eyebrow: "Hands-on entlang des gesamten Lebenszyklus"
+ title: "Cloud-Transformationen, die gelingen"
+ lead: "Wir begleiten Kunden von der Strategie und Architektur bis zur Umsetzung – technisch fundiert, praxisnah und auf ihre Bedürfnisse abgestimmt."
+ sub: "Hands-on für funktionierende Plattformen – on-prem und in den Public Clouds"
+ cta_primary: "Services ansehen"
+ cta_primary_href: "/services/"
+ cta_secondary: "Kontakt aufnehmen"
+mountain:
+ eyebrow: "Vom Basecamp zum Gipfel"
+ title: "Vier Etappen, ein Team."
+ lead: "Architektur als höchste Stufe, getragen von Engineering, Assessments und Enablement."
+ stages:
+ - name: "Cloud Architecture"
+ sub: "Tragfähige Zielarchitektur, Entscheidungsgrundlagen, Migrationspfade."
+ - name: "Platform Engineering"
+ sub: "Hands-on Aufbau und Automatisierung – Kubernetes, GitOps, Security."
+ - name: "Assessments"
+ sub: "Fundierte Beurteilungen bestehender Lösungen mit konkreten Empfehlungen."
+ - name: "Training & Enablement"
+ sub: "Workshops und tiefe Trainings, damit Teams selbstständig weiterarbeiten."
+why:
+ eyebrow: "Warum Peak Scale"
+ title: "Warum Peak Scale?"
+ items:
+ - title: "Peak steht für technische Tiefe. Scale für Plattformen, die mitwachsen."
+ body: ""
+ image: "/images/section/topo-abstract.jpg"
+ - title: "Swiss-first Kontext"
+ body: "Erfahrung in Schweizer IT-Umgebungen – vertraut mit typischen Anforderungen von Unternehmen, Behörden und regulierten Branchen."
+ icon: "building"
+ - title: "Hands-on Zusammenarbeit"
+ body: "Direkt mit Engineering- und Architekturteams – kollaborativ, technisch, ohne unnötige Beratungslayer."
+ icon: "users"
+ - title: "Security & Wartbarkeit"
+ body: "Realistische Risikobewertung und konkrete Massnahmen – damit Plattformen sicher bleiben und langfristig betreibbar sind."
+ icon: "shield"
+ - title: "Enablement statt Abhängigkeit"
+ body: "Wissenstransfer, Dokumentation und Training – damit Teams nachhaltig selbstständig weiterarbeiten."
+ icon: "graduation"
+ - title: "Spezialisiertes Team"
+ body: "Kein Full-Service-Bauchladen – ein fokussiertes Team mit tiefem Cloud-Native-Know-how."
+ icon: "spark"
+customers:
+ eyebrow: "Unsere Kunden"
+ title: "Unsere Kunden "
+ lead: "Eine Auswahl unserer Kunden, die wir in Architektur-, Engineering- oder Assessment-Projekten begleitet haben."
+testimonial:
+ eyebrow: "Stimmen aus Projekten "
+lifecycle:
+ eyebrow: "Was IT-Teams gewinnen"
+ title: "Was IT-Teams dadurch gewinnen "
+ lead: "Klare Orientierung, technische Exzellenz und pragmatische Umsetzung – entlang des gesamten Lebenszyklus."
+ cards:
+ - title: "Cloud Architecture"
+ desc: "Wir entwickeln und evaluieren Cloud-Architekturen, die sich weiterentwickeln können – pragmatisch, transparent und auf Ihre Umgebung abgestimmt."
+ - title: "Platform Engineering"
+ desc: "Wir unterstützen Teams beim Design, beim Aufbau und bei der Automatisierung moderner Cloud Native Plattformen und Workflows."
+ - title: "Assessments"
+ desc: "Fundierte Beurteilungen von bestehenden Lösungen: Architektur, Kubernetes, Security, Prozesse, GitOps und CI/CD."
+ - title: "Training & Enablement"
+ desc: "Wir geben Wissen weiter – in kompakten Workshops oder tiefen technischen Trainings für Engineers und Architekten."
+challenges:
+ eyebrow: "Typische Herausforderungen"
+ title: "Typische Herausforderungen, die wir lösen"
+ lead: "Typische Etappen in Cloud-Transformationen – aus realen Projekten."
+ bg: "/images/section/challenges.jpg"
+ items:
+ - title: "Aufbau moderner CI/CD- und GitOps-Prozesse"
+ body: "Automatisierte Deployments, überprüfbare Supply Chain Security und reproduzierbare Plattformen mit Argo CD, Flux & SLSA."
+ - title: "Modernisierung bestehender Infrastruktur"
+ body: "Migration von Legacy-Umgebungen in skalierbare und sichere Cloud-Plattformen – mit klarer Roadmap und pragmatischen Entscheidungen."
+ featured: true
+ - title: "Einführung von Multi-Tenancy"
+ body: "Mandantentrennung mit Capsule und Kubernetes – inklusive kommerziellem Support und Betriebsmodellen."
+ - title: "Cloud Native Kompetenz im Team"
+ body: "Wir bauen Wissen auf, das im Team bleibt – durch Pair-Engineering, Workshops und Dokumentation."
+partners:
+ eyebrow: "Technologiepartner"
+ title: "Technologiepartner"
+ lead: "Wir arbeiten mit führenden Cloud Native Anbietern zusammen."
+next_steps:
+ eyebrow: "Weitergehen"
+ title: "Nächste Etappe "
+ cards:
+ - eyebrow: "Services"
+ title: "Leistungsspektrum & Kernbereiche"
+ desc: ""
+ href: "/services/"
+ checklist: ["Cloud & Architektur", "Platform Engineering", "Assessments"]
+ - eyebrow: "Produkte"
+ title: "Eigene Lösungen & Enterprise Support"
+ desc: ""
+ href: "/produkte/"
+ variant: "gold"
+ - eyebrow: "Team"
+ title: "Wer Peak Scale ist und wie wir arbeiten"
+ desc: ""
+ href: "/team/"
+ variant: "sage"
+---
diff --git a/content/about/customers/bfh.svg b/content/about/customers/bfh.svg
deleted file mode 100644
index 571c992..0000000
--- a/content/about/customers/bfh.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/customers/eth.svg b/content/about/customers/eth.svg
deleted file mode 100644
index 6ffbc30..0000000
--- a/content/about/customers/eth.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/customers/ewb.svg b/content/about/customers/ewb.svg
deleted file mode 100644
index 916821e..0000000
--- a/content/about/customers/ewb.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/customers/postfinance.svg b/content/about/customers/postfinance.svg
deleted file mode 100644
index 9442a3d..0000000
--- a/content/about/customers/postfinance.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/index.en.md b/content/about/index.en.md
deleted file mode 100755
index 0c85627..0000000
--- a/content/about/index.en.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: About
----
-
-## Customers
-
-Although we are still a young company, we have already been able to win some well-known customers.
-
-
- {{< grid-item
- image="customers/bedag.png"
- href="https://bedag.ch" >}}
- {{< grid-item
- image="customers/bfh.svg"
- href="https://bfh.ch" >}}
- {{< grid-item
- image="customers/bison.svg"
- href="https://bison-group.com" >}}
- {{< grid-item
- image="customers/bund.svg"
- href="https://admin.ch" >}}
- {{< grid-item
- image="customers/ewb.svg"
- href="https://ewb.ch" >}}
- {{< grid-item
- image="customers/gelan.png"
- href="https://gelan.ch" >}}
- {{< grid-item
- image="customers/mobiliar.svg"
- href="https://mobiliar.ch" >}}
- {{< grid-item
- image="customers/postfinance.svg"
- href="https://postfinance.ch" >}}
- {{< grid-item
- image="customers/eth.svg"
- href="https://ethz.ch/en.html" >}}
- {{< grid-item
- image="customers/fhnw.svg"
- href="https://www.fhnw.ch" >}}
-
-
-## Technology Partners
-
-As a Sidero Labs partner, we provide services and support for [Omni](https://omni.siderolabs.com/),
-[Talos Linux](https://talos.dev), and Kubernetes.
-Additionally, we hold SUSE Emerald status for [SUSE Rancher Prime](https://www.suse.com/products/rancher/).
-As a Google Cloud partner, we deliver expert solutions and consulting on [GCP](https://cloud.google.com).
-Together with [Clastix](https://clastix.io), we
-provide commercial support for [Capsule](https://projectcapsule.dev).
-
-
- {{< grid-item
- image="partners/siderolabs.webp"
- href="https://siderolabs.com" >}}
- {{< grid-item
- image="partners/suse.svg"
- href="https://suse.com" >}}
- {{< grid-item
- image="partners/google-cloud.svg"
- href="https://cloud.google.com" >}}
- {{< grid-item
- image="partners/clastix.svg"
- href="https://clastix.io" >}}
-
-
-## Partner Network
-
-With today's shortage of skilled staff, a broad network and strategic partnerships are an important part of our success.
-
-
- {{< grid-item
- image="partners/ace.png"
- href="https://ace.ch" >}}
- {{< grid-item
- image="partners/bespinian.svg"
- href="https://bespinian.io" >}}
- {{< grid-item
- image="partners/nuvibit.png"
- href="https://nuvibit.com" >}}
- {{< grid-item
- image="partners/origoss.svg"
- href="https://origoss.com" >}}
- {{< grid-item
- image="partners/puzzle.svg"
- href="https://puzzle.ch" >}}
- {{< grid-item
- image="partners/zooey.svg"
- href="https://zooey.ch" >}}
-
diff --git a/content/about/index.md b/content/about/index.md
deleted file mode 100755
index 3838fdd..0000000
--- a/content/about/index.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: Über uns
----
-
-## Kunden
-
-Obwohl wir noch ein junges Unternehmen sind, haben wir bereits einige namhafte Kunden gewinnen können.
-
-
- {{< grid-item
- image="customers/bedag.png"
- href="https://bedag.ch" >}}
- {{< grid-item
- image="customers/bfh.svg"
- href="https://bfh.ch" >}}
- {{< grid-item
- image="customers/bison.svg"
- href="https://bison-group.com" >}}
- {{< grid-item
- image="customers/bund.svg"
- href="https://admin.ch" >}}
- {{< grid-item
- image="customers/ewb.svg"
- href="https://ewb.ch" >}}
- {{< grid-item
- image="customers/gelan.png"
- href="https://gelan.ch" >}}
- {{< grid-item
- image="customers/mobiliar.svg"
- href="https://mobiliar.ch" >}}
- {{< grid-item
- image="customers/postfinance.svg"
- href="https://postfinance.ch" >}}
- {{< grid-item
- image="customers/eth.svg"
- href="https://ethz.ch/de.html" >}}
- {{< grid-item
- image="customers/fhnw.svg"
- href="https://www.fhnw.ch" >}}
-
-
-## Technologiepartner
-
-Als Sidero Labs Partner bieten wir Dienstleistungen und Support für [Omni](https://omni.siderolabs.com/),
-[Talos Linux](https://talos.dev) und Kubernetes an.
-Zusätzlich haben wir den SUSE Emerald Status für [SUSE Rancher Prime](https://www.suse.com/products/rancher/).
-Als Google Cloud Partner bieten wir Expertenlösungen und Consulting auf [GCP](https://cloud.google.com) an.
-Zusammen mit [Clastix](https://clastix.io) bieten
-wir kommerziellen Support für [Capsule](https://projectcapsule.dev/support/).
-
-
- {{< grid-item
- image="partners/siderolabs.webp"
- href="https://siderolabs.com" >}}
- {{< grid-item
- image="partners/suse.svg"
- href="https://suse.com" >}}
- {{< grid-item
- image="partners/google-cloud.svg"
- href="https://cloud.google.com" >}}
- {{< grid-item
- image="partners/clastix.svg"
- href="https://clastix.io" >}}
-
-
-## Partner-Netzwerk
-
-Mit dem heutigen Fachkräftemangel sind ein breites Netzwerk und strategische Partnerschaften ein wichtiger Bestandteil
-unseres Erfolgs.
-
-
- {{< grid-item
- image="partners/ace.png"
- href="https://ace.ch" >}}
- {{< grid-item
- image="partners/bespinian.svg"
- href="https://bespinian.io" >}}
- {{< grid-item
- image="partners/nuvibit.png"
- href="https://nuvibit.com" >}}
- {{< grid-item
- image="partners/origoss.svg"
- href="https://origoss.com" >}}
- {{< grid-item
- image="partners/puzzle.svg"
- href="https://puzzle.ch" >}}
- {{< grid-item
- image="partners/zooey.svg"
- href="https://zooey.ch" >}}
-
diff --git a/content/about/partners/ace.png b/content/about/partners/ace.png
deleted file mode 100644
index de82c82..0000000
Binary files a/content/about/partners/ace.png and /dev/null differ
diff --git a/content/about/partners/bespinian.svg b/content/about/partners/bespinian.svg
deleted file mode 100644
index a48919b..0000000
--- a/content/about/partners/bespinian.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/partners/clastix.svg b/content/about/partners/clastix.svg
deleted file mode 100644
index ec13022..0000000
--- a/content/about/partners/clastix.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/partners/google-cloud.svg b/content/about/partners/google-cloud.svg
deleted file mode 100644
index f4c9993..0000000
--- a/content/about/partners/google-cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/partners/nuvibit.png b/content/about/partners/nuvibit.png
deleted file mode 100644
index 5cd6332..0000000
Binary files a/content/about/partners/nuvibit.png and /dev/null differ
diff --git a/content/about/partners/origoss.svg b/content/about/partners/origoss.svg
deleted file mode 100644
index 4ebc928..0000000
--- a/content/about/partners/origoss.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/partners/puzzle.svg b/content/about/partners/puzzle.svg
deleted file mode 100644
index bbebb32..0000000
--- a/content/about/partners/puzzle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/partners/siderolabs.webp b/content/about/partners/siderolabs.webp
deleted file mode 100644
index 1ec5d59..0000000
Binary files a/content/about/partners/siderolabs.webp and /dev/null differ
diff --git a/content/about/partners/suse.svg b/content/about/partners/suse.svg
deleted file mode 100644
index 7deadc6..0000000
--- a/content/about/partners/suse.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/about/partners/zooey.svg b/content/about/partners/zooey.svg
deleted file mode 100644
index f6eb1af..0000000
--- a/content/about/partners/zooey.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/contact/index.en.md b/content/contact/index.en.md
deleted file mode 100755
index 3252f26..0000000
--- a/content/contact/index.en.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Contact
----
-
-## Contact
-
-Would you like to contact us? Drop us a mail at welcome@peakscale.ch.
\ No newline at end of file
diff --git a/content/contact/index.md b/content/contact/index.md
deleted file mode 100755
index b260b55..0000000
--- a/content/contact/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Kontakt
----
-
-## Kontakt
-
-Möchtest du uns kontaktieren? Schreib uns eine Mail an welcome@peakscale.ch.
diff --git a/content/datenschutz.en.md b/content/datenschutz.en.md
new file mode 100644
index 0000000..180b475
--- /dev/null
+++ b/content/datenschutz.en.md
@@ -0,0 +1,9 @@
+---
+title: Privacy
+description: "Privacy notice of Peak Scale GmbH (German only)."
+slug: privacy
+aliases:
+ - /datenschutz/
+---
+
+Our privacy notice is available in German only. See [Datenschutzerklärung](/datenschutz/).
diff --git a/content/privacy.md b/content/datenschutz.md
similarity index 99%
rename from content/privacy.md
rename to content/datenschutz.md
index 8712ed2..6f68ef9 100644
--- a/content/privacy.md
+++ b/content/datenschutz.md
@@ -1,11 +1,10 @@
---
title: Datenschutzerklärung
+description: "Datenschutzerklärung der Peak Scale GmbH – Informationen zur Bearbeitung von Personendaten gemäss revDSG und DSGVO."
+aliases:
+ - /privacy/
---
-(German only)
-
-Datenschutzerklärung
-
Mit dieser Datenschutzerklärung informieren wir, welche Personendaten wir im Zusammenhang mit unseren Aktivitäten und Tätigkeiten einschliesslich unserer peakscale.ch -Website bearbeiten. Wir informieren insbesondere, wofür, wie und wo wir welche Personendaten bearbeiten. Wir informieren ausserdem über die Rechte von Personen, deren Daten wir bearbeiten.
Für einzelne oder zusätzliche Aktivitäten und Tätigkeiten können weitere Datenschutzerklärungen sowie sonstige rechtliche Dokumente wie Allgemeine Geschäftsbedingungen (AGB), Nutzungsbedingungen oder Teilnahmebedingungen gelten.
@@ -18,7 +17,7 @@ title: Datenschutzerklärung
Ryffligässchen 5
3011 Bern
-info@peakscale.ch
+welcome@peakscale.ch
Wir weisen darauf hin, wenn es im Einzelfall andere Verantwortliche für die Bearbeitung von Personendaten gibt.
diff --git a/content/impressum.en.md b/content/impressum.en.md
new file mode 100644
index 0000000..72bea71
--- /dev/null
+++ b/content/impressum.en.md
@@ -0,0 +1,14 @@
+---
+title: Imprint
+description: "Imprint of Peak Scale GmbH – disclosure as required under Swiss law (Art. 3 Para. 1 lit. s UWG)."
+slug: imprint
+aliases:
+ - /legalnotice/
+ - /impressum/
+---
+
+**Peak Scale GmbH**
+Ryffligässchen 5
+3011 Bern
+
+welcome@peakscale.ch
diff --git a/content/impressum.md b/content/impressum.md
new file mode 100644
index 0000000..cfaa798
--- /dev/null
+++ b/content/impressum.md
@@ -0,0 +1,12 @@
+---
+title: Impressum
+description: "Impressum von Peak Scale GmbH – Anbieterkennzeichnung gemäss Art. 3 Abs. 1 lit. s UWG."
+aliases:
+ - /legalnotice/
+---
+
+**Peak Scale GmbH**
+Ryffligässchen 5
+3011 Bern
+
+welcome@peakscale.ch
diff --git a/content/legalnotice.en.md b/content/legalnotice.en.md
deleted file mode 100644
index 80dbf2d..0000000
--- a/content/legalnotice.en.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Legal Notice
----
-
-# Legal Notice
-
-**Peak Scale GmbH**
-Ryffligässchen 5
-3011 Bern
-
-info@peakscale.ch
diff --git a/content/legalnotice.md b/content/legalnotice.md
deleted file mode 100644
index c0d27be..0000000
--- a/content/legalnotice.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Impressum
----
-
-# Impressum
-
-**Peak Scale GmbH**
-Ryffligässchen 5
-3011 Bern
-
-info@peakscale.ch
diff --git a/content/produkte/_index.en.md b/content/produkte/_index.en.md
new file mode 100644
index 0000000..847f1f5
--- /dev/null
+++ b/content/produkte/_index.en.md
@@ -0,0 +1,113 @@
+---
+title: Products
+description: "Our own solutions and selected technology partners for cloud-native platforms – from multi-tenancy to enterprise support."
+hero:
+ eyebrow: "Solutions built hands-on"
+ title: "Platforms that work"
+ lead: "We deliver our own solutions and professional enterprise support for selected cloud native technologies – focused on stability, security and reliable platform operations."
+ sub: "Hands-on for products, enterprise support and platform operations"
+ cta_primary: "Get in touch"
+ cta_secondary: "See services"
+ cta_secondary_href: "/services/"
+own:
+ eyebrow: "Our own solutions & products"
+ title: "Our own solutions & products"
+ cards:
+ - title: "Cloud Native multi-tenancy"
+ body: "Tenant separation on Kubernetes – from tenancy model and governance to automated tenant onboarding. Sustainable in everyday operations and cleanly operable."
+ eyebrow: "What we deliver"
+ items:
+ - "Tenancy blueprint (namespace model, isolation levels, responsibilities)"
+ - "Quotas & governance (RBAC/policies, network policies, quotas/limit ranges, standards)"
+ - "Tenant onboarding & self-service (templates, automation, GitOps-ready workflows)"
+ - "Platform integration (CI/CD & GitOps wiring, controls, audit trail)"
+ - "Hardening & operating model (standard update processes, observability basics, documentation)"
+ fit_title: "Suitable for:"
+ fit_items:
+ - "SaaS platforms (tenants per customer/organisation)"
+ - "Platform teams in enterprise and public-sector environments"
+ - "Organisations with clear requirements for isolation, governance and fair resource usage"
+ - title: "Capsule Enterprise support"
+ body: "Professional enterprise support for the Capsule multi-tenancy operator – for platform teams and organisations with clear tenant separation and governance requirements."
+ eyebrow: "What we deliver"
+ items:
+ - "Installation & configuration"
+ - "Hardening & governance"
+ - "Migration & upgrade support"
+ - "Custom feature development"
+ - "Integration with CI/CD & GitOps"
+ - "SLA-based enterprise support model"
+ fit_title: "Suitable for:"
+ fit_items:
+ - "SaaS platforms"
+ - "Enterprise Kubernetes clusters"
+ - "Projects with complex tenant models"
+partners:
+ eyebrow: "Technology partners & integration"
+ title: "Technology partners & integration"
+ lead: "With selected technology partners we integrate core platform building blocks into your architecture – load-bearing in everyday operations, from the decision to stable operation."
+ cards:
+ - title: "Sidero Labs"
+ role: "Talos Linux · Omni Platform · Kubernetes support"
+ body: "We support the use of the Sidero toolsuite – from evaluation and architecture to operational running."
+ themes_title: "Typical topics"
+ themes:
+ - "Cluster bootstrapping with Talos"
+ - "Hardening & security"
+ - "Lifecycle management"
+ - "Scaling and upgrades"
+ - title: "Clastix"
+ role: "Multi-tenancy enterprise hub"
+ body: "We support design, rollout and operation of Capsule – including enterprise support for productive platform operations."
+ themes_title: "Typical topics"
+ themes:
+ - "Multi-tenancy rollout"
+ - "Governance & policies"
+ - "Tenant separation"
+ - "Integration into existing platforms"
+ - title: "SUSE Rancher Prime"
+ role: "Kubernetes management for enterprise environments"
+ body: "As an Emerald-status partner we support architecture, integration and evolution of Rancher installations – including operations and governance."
+ themes_title: "Typical topics"
+ themes:
+ - "Multi-cluster management"
+ - "Security & RBAC"
+ - "Governance & policy"
+ - "Operations & monitoring"
+ - title: "Google Cloud Platform"
+ role: "Cloud architecture · migration · platform engineering"
+ body: "We support building modern cloud environments on GCP – from landing zone to platform automation."
+ themes_title: "Typical topics"
+ themes:
+ - "Landing zones"
+ - "Identity & security"
+ - "Containers & workloads"
+ - "Platform automation"
+journey:
+ eyebrow: "From decision to operations"
+ title: "From decision to operations "
+ lead: "We accompany platform teams across the entire lifecycle – from the decision and architecture through implementation to stable operations and controlled evolution."
+ cards:
+ - num: "01"
+ title: "Orientation & decisions"
+ desc: "Evaluation, target picture, architecture decisions."
+ - num: "02"
+ title: "Build & delivery"
+ desc: "Build, integration, automation, migration."
+ - num: "03"
+ title: "Operations & scale"
+ desc: "Stable operations, lifecycle, enterprise support, controlled evolution."
+next_steps:
+ eyebrow: "Continue"
+ title: "Next stage "
+ cards:
+ - eyebrow: "Services"
+ title: "Advisory, engineering, assessments and enablement for platform teams"
+ desc: ""
+ href: "/services/"
+ - eyebrow: "Team"
+ title: "The engineering team behind Peak Scale – way of working, values and focus"
+ desc: ""
+ href: "/team/"
+ variant: "sage"
+---
diff --git a/content/produkte/_index.md b/content/produkte/_index.md
new file mode 100644
index 0000000..cfc5996
--- /dev/null
+++ b/content/produkte/_index.md
@@ -0,0 +1,113 @@
+---
+title: Produkte
+description: "Eigene Lösungen und ausgewählte Technologiepartner für tragfähige Cloud-Native-Plattformen – von Multi-Tenancy bis Enterprise-Support."
+hero:
+ eyebrow: "Hands-on entwickelte Lösungen"
+ title: "Plattformen, die funktionieren"
+ lead: "Wir liefern eigene Lösungen und professionellen Enterprise Support für ausgewählte Cloud Native Technologien – mit Fokus auf Stabilität, Sicherheit und verlässlichen Plattformbetrieb."
+ sub: "Hands-on für Produkte, Enterprise Support und Plattformbetrieb"
+ cta_primary: "Kontakt aufnehmen"
+ cta_secondary: "Services ansehen"
+ cta_secondary_href: "/services/"
+own:
+ eyebrow: "Eigene Lösungen & Produkte"
+ title: "Eigene Lösungen & Produkte"
+ cards:
+ - title: "Cloud Native Multi-Tenancy"
+ body: "Mandantentrennung auf Kubernetes – von Tenancy-Modell und Governance bis zur automatisierten Tenant-Onboarding. Tragfähig im Alltag und sauber betreibbar."
+ eyebrow: "Was wir liefern"
+ items:
+ - "Tenancy-Blueprint (Namespace-Modell, Isolationsebenen, Verantwortlichkeiten)"
+ - "Quotas & Governance (RBAC/Policies, Network Policies, Quotas/Limitranges, Standards)"
+ - "Tenant-Onboarding & Self-Service (Vorlagen, Automatisierung, GitOps-fähige Abläufe)"
+ - "Plattform-Integration (CI/CD & GitOps-Anbindung, Controls, Auditmechanik)"
+ - "Hardening & Betriebsmodell (Standardprozesse Updates, Observability-Basics, Dokumentation)"
+ fit_title: "Geeignet für:"
+ fit_items:
+ - "SaaS-Plattformen (Mandanten pro Kunde/Organisation)"
+ - "Plattformteams in Enterprise- und Behördenumgebungen"
+ - "Organisationen mit klaren Anforderungen an Isolation, Governance und faire Ressourcennutzung"
+ - title: "Capsule Enterprise Support"
+ body: "Professioneller Enterprise Support für den Capsule Multi-Tenancy-Operator – für Plattform-Teams und Organisationen mit klaren Mandantentrennungs- und Governance-Anforderungen."
+ eyebrow: "Was wir liefern"
+ items:
+ - "Installation & Konfiguration"
+ - "Hardening & Governance"
+ - "Migrations- und Upgrade-Support"
+ - "Custom Feature Development"
+ - "Integration mit CI/CD & GitOps"
+ - "SLA-basiertes Enterprise Support-Modell"
+ fit_title: "Geeignet für:"
+ fit_items:
+ - "SaaS-Plattformen"
+ - "Enterprise Kubernetes Cluster"
+ - "Projekte mit komplexen Mandantenmodellen"
+partners:
+ eyebrow: "Technologiepartner & Integration"
+ title: "Technologiepartner & Integration"
+ lead: "Mit ausgewählten Technologiepartnern integrieren wir zentrale Plattformbausteine in Ihre Architektur – tragfähig im Alltag, von der Entscheidung bis zum stabilen Betrieb."
+ cards:
+ - title: "Sidero Labs"
+ role: "Talos Linux · Omni Platform · Kubernetes Support"
+ body: "Wir unterstützen beim Einsatz der Sidero-Toolsuite – von Evaluierung und Architektur bis zum operativen Betrieb."
+ themes_title: "Typische Themen"
+ themes:
+ - "Cluster-Bootstrapping mit Talos"
+ - "Hardening & Security"
+ - "Lifecycle Management"
+ - "Skalierung und Upgrades"
+ - title: "Clastix"
+ role: "Multi-Tenancy Enterprise Hub"
+ body: "Wir unterstützen Design, Einführung und Betrieb von Capsule – inklusive Enterprise Support für den produktiven Plattformbetrieb."
+ themes_title: "Typische Themen"
+ themes:
+ - "Multi-Tenancy Einführung"
+ - "Governance & Policies"
+ - "Mandantentrennung"
+ - "Integration in bestehende Plattformen"
+ - title: "SUSE Rancher Prime"
+ role: "Kubernetes Management für Enterprise-Umgebungen"
+ body: "Als Partner mit Emerald Status unterstützen wir bei Architektur, Integration und Weiterentwicklung von Rancher-Installationen – inkl. Betriebs- und Governance-Aspekten."
+ themes_title: "Typische Themen"
+ themes:
+ - "Multi-Cluster Management"
+ - "Security & RBAC"
+ - "Governance & Policy"
+ - "Betrieb & Monitoring"
+ - title: "Google Cloud Platform"
+ role: "Cloud Architecture · Migration · Platform Engineering"
+ body: "Wir begleiten beim Aufbau moderner Cloud-Umgebungen auf GCP – von Landing Zone bis Plattform-Automatisierung."
+ themes_title: "Typische Themen"
+ themes:
+ - "Landing Zones"
+ - "Identity & Security"
+ - "Container & Workloads"
+ - "Plattform-Automatisierung"
+journey:
+ eyebrow: "Vom Entscheid zum Betrieb"
+ title: "Vom Entscheid bis zum Betrieb "
+ lead: "Wir begleiten Plattform-Teams entlang des gesamten Lebenszyklus – vom Entscheid und der Architektur über die Implementierung bis zum stabilen Betrieb und zur kontrollierten Weiterentwicklung."
+ cards:
+ - num: "01"
+ title: "Orientierung & Entscheide"
+ desc: "Evaluierung, Zielbild, Architekturentscheide."
+ - num: "02"
+ title: "Aufbau & Umsetzung"
+ desc: "Aufbau, Integration, Automatisierung, Migration."
+ - num: "03"
+ title: "Betrieb & Skalierung"
+ desc: "Stabiler Betrieb, Lifecycle, Enterprise Support, kontrollierte Weiterentwicklung."
+next_steps:
+ eyebrow: "Weitergehen"
+ title: "Nächste Etappe "
+ cards:
+ - eyebrow: "Services"
+ title: "Beratung, Engineering, Assessments und Enablement für Plattform-Teams"
+ desc: ""
+ href: "/services/"
+ - eyebrow: "Team"
+ title: "Das Engineering-Team hinter Peak Scale – Arbeitsweise, Werte und Fokus"
+ desc: ""
+ href: "/team/"
+ variant: "sage"
+---
diff --git a/content/services/_index.en.md b/content/services/_index.en.md
new file mode 100644
index 0000000..c12699f
--- /dev/null
+++ b/content/services/_index.en.md
@@ -0,0 +1,106 @@
+---
+title: Services
+description: "Architecture advisory, platform engineering, assessments and training – four service lines across the lifecycle of modern cloud platforms."
+aliases:
+ - /angebot/
+hero:
+ eyebrow: "Strategy → Architecture → Engineering → Operations"
+ title: "Professional services that hold up"
+ lead: "We support you from technical orientation and architecture all the way to delivery – so cloud-native platforms stay stable, secure, and operable for the long run."
+ sub: "Hands-on along clear stages with iterative feedback cycles"
+ cta_primary: "Get in touch"
+ cta_secondary: "See products"
+ cta_secondary_href: "/produkte/"
+lifecycle_strip:
+ eyebrow: "Lifecycle"
+ title: "Four stages – one route"
+ active: 1
+ stages:
+ - name: "Strategy"
+ sub: "Orientation & target picture"
+ - name: "Architecture"
+ sub: "Load-bearing target architecture"
+ - name: "Engineering"
+ sub: "Hands-on delivery"
+ - name: "Operations"
+ sub: "Stable operations & lifecycle"
+architecture:
+ eyebrow: "Architecture"
+ title: "Cloud & architecture "
+ lead: "When requirements shift, the architecture has to grow with them. We create the decision basis and structures that hold beyond the first roadmap."
+ cards:
+ - title: "Orientation & architecture advisory"
+ body: "We support cloud initiatives – from technical orientation and target architecture all the way to delivery."
+ eyebrow: "Typical topics"
+ items:
+ - "Designing new cloud architectures"
+ - "Modernising existing platforms"
+ - "Scale, security, governance"
+ - "Building landing zones and platform components"
+ - title: "Solution architecture & reviews"
+ body: "We analyse and challenge existing solutions – focused on technical feasibility, security, and evolution."
+ eyebrow: "Output"
+ items:
+ - "Risk analysis"
+ - "Concrete recommendations"
+ - "Prioritised actions"
+ - "Decision basis for management & engineering"
+engineering:
+ eyebrow: "Platform Engineering"
+ title: "Engineering"
+ lead: "We work directly with your team on the design, build, and operation of modern cloud-native components – focused on automation, security, and reproducible workflows."
+ subhead: "Technologies & topic areas"
+ categories:
+ - title: "Containers & platforms"
+ items: ["Kubernetes", "Multi-tenancy with Capsule", "Control planes & cluster management"]
+ - title: "GitOps & workflows"
+ items: ["Argo CD", "Flux", "CI/CD pipelines", "Supply chain security (SLSA)"]
+ - title: "Infrastructure automation"
+ items: ["OpenTofu / Terraform", "Infrastructure as Code", "Configuration as Code", "End-to-end automation"]
+ - title: "Security & observability"
+ items: ["Kubernetes security", "Policy as Code", "Monitoring & observability", "Logging & tracing"]
+assessments:
+ eyebrow: "Assessments"
+ title: "Assessments "
+ lead: "Independent analyses with clear recommendations – as a decision basis before larger changes or for taking stock."
+ cards:
+ - title: "Kubernetes Security Assessment"
+ body: "Identifying risks, misconfigurations and opportunities for improvement."
+ - title: "Architecture & Platform Review"
+ body: "Evaluation of existing platforms with respect to scale, operations, security and evolution."
+ - title: "Cloud Native Maturity Assessment"
+ body: "Transparent overview of the current maturity level – with concrete actions for improvement."
+ output_title: "Always delivered:"
+ output_items:
+ - "Executive summary for decision makers"
+ - "Technical details for engineers"
+ - "Prioritised actions"
+ - "Recommendations for architecture & management"
+training:
+ eyebrow: "Training & enablement"
+ title: "Training & Enablement"
+ lead: "Knowledge transfer that helps in everyday work – practical, realistic and tailored to your team and environment."
+ cards:
+ - title: "Workshops"
+ body: "Short, focused sessions on cloud architecture, GitOps or Kubernetes."
+ - title: "Technical trainings"
+ body: "In-depth training for engineers – modular and adaptable."
+ - title: "Interactive labs"
+ body: "Hands-on exercises on Killercoda – reproducible, safe, realistic."
+testimonial:
+ eyebrow: "Voices from projects"
+next_steps:
+ eyebrow: "Continue"
+ title: "Next stage "
+ cards:
+ - eyebrow: "Products"
+ title: "Our own solutions and enterprise support for core platform building blocks"
+ desc: ""
+ href: "/produkte/"
+ variant: "gold"
+ - eyebrow: "Team"
+ title: "The engineering team behind Peak Scale – way of working, values and focus"
+ desc: ""
+ href: "/team/"
+ variant: "sage"
+---
diff --git a/content/services/_index.md b/content/services/_index.md
new file mode 100644
index 0000000..8896b6a
--- /dev/null
+++ b/content/services/_index.md
@@ -0,0 +1,106 @@
+---
+title: Services
+description: "Architekturberatung, Platform Engineering, Assessments und Trainings – vier Servicelinien entlang des Lebenszyklus moderner Cloud-Plattformen."
+aliases:
+ - /angebot/
+hero:
+ eyebrow: "Strategie → Architektur → Engineering → Betrieb"
+ title: "Professional Services, die überzeugen"
+ lead: "Wir begleiten Sie von technischer Orientierung und Architektur bis zur Umsetzung – damit Cloud-Native-Plattformen stabil, sicher und langfristig betreibbar sind."
+ sub: "Hands-on entlang klarer Etappen mit iterativen Feedback-Zyklen"
+ cta_primary: "Kontakt aufnehmen"
+ cta_secondary: "Produkte ansehen"
+ cta_secondary_href: "/produkte/"
+lifecycle_strip:
+ eyebrow: "Lebenszyklus"
+ title: "Vier Etappen – eine Route"
+ active: 1
+ stages:
+ - name: "Strategie"
+ sub: "Orientierung & Zielbild"
+ - name: "Architektur"
+ sub: "Tragfähige Zielarchitektur"
+ - name: "Engineering"
+ sub: "Hands-on Umsetzung"
+ - name: "Betrieb"
+ sub: "Stabiler Betrieb & Lifecycle"
+architecture:
+ eyebrow: "Architektur"
+ title: "Cloud & Architektur "
+ lead: "Wenn sich Anforderungen ändern, muss Architektur mitwachsen. Wir schaffen Entscheidungsgrundlagen und Strukturen, die über die erste Roadmap hinaus tragen."
+ cards:
+ - title: "Orientierung & Architekturberatung"
+ body: "Wir begleiten Cloud-Vorhaben – von technischer Orientierung und Zielarchitektur bis zur Umsetzung."
+ eyebrow: "Typische Themen"
+ items:
+ - "Entwurf neuer Cloud-Architekturen"
+ - "Modernisierung bestehender Plattformen"
+ - "Skalierung, Security, Governance"
+ - "Aufbau von Landing Zones und Plattformkomponenten"
+ - title: "Solution Architecture & Reviews"
+ body: "Wir analysieren und challengen bestehende Lösungen – mit Fokus auf technische Machbarkeit, Sicherheit und Weiterentwicklung."
+ eyebrow: "Output"
+ items:
+ - "Risikoanalyse"
+ - "Konkrete Empfehlungen"
+ - "Priorisierung der Massnahmen"
+ - "Entscheidungsgrundlage für Management & Engineering"
+engineering:
+ eyebrow: "Platform Engineering"
+ title: "Engineering"
+ lead: "Wir arbeiten direkt mit Ihrem Team am Design, Aufbau und Betrieb moderner Cloud-Native-Komponenten – mit Fokus auf Automatisierung, Sicherheit und reproduzierbare Abläufe."
+ subhead: "Technologien & Themenfelder"
+ categories:
+ - title: "Container & Plattformen"
+ items: ["Kubernetes", "Multi-Tenancy mit Capsule", "Control Planes & Cluster Management"]
+ - title: "GitOps & Workflows"
+ items: ["Argo CD", "Flux", "CI/CD Pipelines", "Supply Chain Security (SLSA)"]
+ - title: "Infrastructure Automation"
+ items: ["OpenTofu / Terraform", "Infrastructure as Code", "Configuration as Code", "Automatisierung durchgängig"]
+ - title: "Security & Observability"
+ items: ["Kubernetes Security", "Policy as Code", "Monitoring & Observability", "Logging & Tracing"]
+assessments:
+ eyebrow: "Assessments"
+ title: "Assessments "
+ lead: "Unabhängige Analysen mit klaren Empfehlungen – als Entscheidungsgrundlage vor grösseren Veränderungen oder zur Standortbestimmung."
+ cards:
+ - title: "Kubernetes Security Assessment"
+ body: "Erkennung von Risiken, Fehlkonfigurationen und Verbesserungsmöglichkeiten."
+ - title: "Architecture & Platform Review"
+ body: "Bewertung bestehender Plattformen hinsichtlich Skalierung, Betrieb, Sicherheit und Weiterentwicklung."
+ - title: "Cloud Native Maturity Assessment"
+ body: "Transparenter Überblick über den aktuellen Reifegrad – mit konkreten Massnahmen zur Verbesserung."
+ output_title: "Output immer:"
+ output_items:
+ - "Executive Summary für Entscheider"
+ - "Technische Details für Engineers"
+ - "Priorisierte Massnahmen"
+ - "Handlungsempfehlungen für Architektur & Management"
+training:
+ eyebrow: "Training & Enablement"
+ title: "Training & Enablement"
+ lead: "Wissenstransfer, der im Alltag hilft – praxisnah, realistisch und auf Ihr Team und ihre Umgebung abgestimmt."
+ cards:
+ - title: "Workshops"
+ body: "Kurze, fokussierte Sessions zu Cloud-Architektur, GitOps oder Kubernetes."
+ - title: "Technische Trainings"
+ body: "Vertiefende Trainings für Engineers – modular und anpassbar."
+ - title: "Interaktive Labs"
+ body: "Hands-on-Aufgaben auf Killercoda, reproduzierbar, sicher, realitätsnah."
+testimonial:
+ eyebrow: "Stimmen aus Projekten"
+next_steps:
+ eyebrow: "Weitergehen"
+ title: "Nächste Etappe "
+ cards:
+ - eyebrow: "Produkte"
+ title: "Eigene Lösungen und Enterprise Support für zentrale Plattformbausteine"
+ desc: ""
+ href: "/produkte/"
+ variant: "gold"
+ - eyebrow: "Team"
+ title: "Das Engineering-Team hinter Peak Scale – Arbeitsweise, Werte und Fokus"
+ desc: ""
+ href: "/team/"
+ variant: "sage"
+---
diff --git a/content/services/community/berneritrocks.png b/content/services/community/berneritrocks.png
deleted file mode 100644
index db18aec..0000000
Binary files a/content/services/community/berneritrocks.png and /dev/null differ
diff --git a/content/services/community/cloudnativeday.svg b/content/services/community/cloudnativeday.svg
deleted file mode 100644
index 476fc67..0000000
--- a/content/services/community/cloudnativeday.svg
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/content/services/community/digitalimpact.png b/content/services/community/digitalimpact.png
deleted file mode 100644
index 0d9e2e6..0000000
Binary files a/content/services/community/digitalimpact.png and /dev/null differ
diff --git a/content/services/community/meetup.svg b/content/services/community/meetup.svg
deleted file mode 100644
index e7c48b4..0000000
--- a/content/services/community/meetup.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/community/uphillconf.svg b/content/services/community/uphillconf.svg
deleted file mode 100644
index 3dfadfa..0000000
--- a/content/services/community/uphillconf.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/index.en.md b/content/services/index.en.md
deleted file mode 100755
index 93e5dcf..0000000
--- a/content/services/index.en.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-title: Services
----
-
-## Architecture and Cloud
-
-The IT landscape is constantly evolving, and as a result, it is important to approach architecture development in a pragmatic and evolutionary way, allowing for continuous adaptation to new circumstances. Drawing on our expertise, we provide support in the journey towards modern cloud-based IT architecture.
-
-
- {{< grid-item
- image="services/cloud-bolt.svg"
- text="We support you on the way to your individual cloud journey." >}}
- {{< grid-item
- image="services/cubes.svg"
- text="We assess and challenge existing solutions and assist in the construction and the design of new environments." >}}
- {{< grid-item
- image="services/diagram-project.svg"
- text="Our focus lies on pragmatic and evolutionary architectural approaches." >}}
-
-
-## Training
-
-We are happy to pass on our experience from practice and theory. In the form of customizable architecture workshops or comprehensive technical training.
-
-
- {{< grid-item
- image="services/chalkboard-user.svg"
- text="IT architecture workshops" >}}
- {{< grid-item
- image="services/cncf.svg"
- text="Cloud Native trainings for tech-savvy engineers" >}}
- {{< grid-item
- image="services/killercoda.svg"
- href="https://killercoda.com/peakscale"
- text="Interactive labs on Killercoda" >}}
-
-
-## Community
-
-Always on the lookout for new ideas and approaches, we connect with interesting people from various fields. That's why
-we bring people together and organize community events. Our network and good collaboration with various Swiss IT
-companies distinguishes us.
-
-
- {{< grid-item
- image="community/cloudnativeday.svg"
- title="Swiss Cloud Native Day"
- text="We are co-organizers of the Swiss Cloud Native Day."
- href="https://cloudnativeday.ch/" >}}
- {{< grid-item
- image="community/meetup.svg"
- title="Cloud Native Bern Meetup"
- text="We are co-organizers of the Cloud Native Bern Meetup."
- href="https://www.meetup.com/cloudnativebern/" >}}
- {{< grid-item
- image="community/uphillconf.svg"
- title="Uphill Conf"
- text="We are co-organizers of Uphill Conf."
- href="https://www.uphillconf.com/" >}}
- {{< grid-item
- image="community/digitalimpact.png"
- title="Digital Impact Network"
- text="We are involved in the Cloud Native & DevOps specialist group."
- href="https://digitalimpact.ch/" >}}
- {{< grid-item
- image="community/berneritrocks.png"
- title="bernerit.rocks"
- text="We are co-founders of the association bernerit.rocks."
- href="https://bernerit.rocks/" >}}
-
-
-## Engineering
-
-As passionate software and infrastructure engineers, we assist with the design, implementation, and deployment of modern
-technologies and methods.
-
-
- {{< grid-item
- image="services/harbor.svg"
- text="Artifacts with Harbor" >}}
- {{< grid-item
- image="services/argo.svg"
- text="GitOps with Argo CD, Flux CD and Sveltos" >}}
- {{< grid-item
- image="services/slsa.svg"
- text="Supply Chain Security with SLSA and Sigstore" >}}
- {{< grid-item
- image="services/kubernetes.svg"
- text="Tailor made Kubernetes distributions" >}}
- {{< grid-item
- image="services/capsule.svg"
- text="Multi-Tenancy" >}}
- {{< grid-item
- image="services/capi.png"
- text="Control Planes as service" >}}
- {{< grid-item
- image="services/gitlab.svg"
- text="Continuous Integration, Delivery, and Deployment (CI/CD)" >}}
- {{< grid-item
- image="services/opentofu.svg"
- text="Infrastructure as Code (IaC) and Configuration as Code" >}}
- {{< grid-item
- image="services/gopher.svg"
- text="End-to-end automation" >}}
- {{< grid-item
- image="services/prometheus.svg"
- text="Observability" >}}
- {{< grid-item
- image="services/func.svg"
- text="Serverless" >}}
- {{< grid-item
- image="services/opa.svg"
- text="Policy as Code" >}}
-
diff --git a/content/services/index.md b/content/services/index.md
deleted file mode 100755
index 2a634c2..0000000
--- a/content/services/index.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-title: Angebot
----
-
-## Architektur und Cloud
-
-Sämtliche Themen in der IT unterliegen dem steten Wandel. Architekturen werden heute pragmatisch und evolutionär
-entwickelt, sodass sie der kontinuierlichen Veränderung Rechnung tragen und sich an neue Gegebenheiten anpassen. Mit
-unserer Erfahrung unterstützen wir auf dem Weg zur modernen IT Architektur in der Cloud.
-
-
- {{< grid-item
- image="services/cloud-bolt.svg"
- text="Wir unterstützen auf dem Weg zur individuellen Cloud Journey." >}}
- {{< grid-item
- image="services/cubes.svg"
- text="Wir beurteilen und challengen bestehende Lösungen und helfen beim Aufbau und Design von neuen Umgebungen." >}}
- {{< grid-item
- image="services/diagram-project.svg"
- text="Unser Fokus liegt auf pragmatischen und evolutionären Architekturansätzen." >}}
-
-
-## Training
-
-Gerne geben wir unsere Erfahrung aus Praxis und Theorie weiter. In Form von individualisierbaren, kurzen
-Architektur-Workshops oder umfangreichen, technischen Trainings.
-
-
- {{< grid-item
- image="services/chalkboard-user.svg"
- text="IT Architektur Workshops" >}}
- {{< grid-item
- image="services/cncf.svg"
- text="Cloud Native Trainings für technisch versierte Engineers" >}}
- {{< grid-item
- image="services/killercoda.svg"
- href="https://killercoda.com/peakscale"
- text="Interaktive Labs auf Killercoda" >}}
-
-
-## Community
-
-Immer auf der Suche nach Impulsen und neuen Wegen, um Dinge anders anzugehen, verbinden wir uns mit interessanten
-Menschen aus unterschiedlichsten Bereichen. Deswegen bringen wir Leute zusammen und organisieren gemeinsam Community
-Events. Unser Netzwerk und die gute Zusammenarbeit zu unterschiedlichsten Schweizer IT Firmen zeichnet uns aus.
-
-
- {{< grid-item
- image="community/cloudnativeday.svg"
- title="Swiss Cloud Native Day"
- text="Wir sind Co-Organisatoren des Swiss Cloud Native Days."
- href="https://cloudnativeday.ch/" >}}
- {{< grid-item
- image="community/meetup.svg"
- title="Cloud Native Bern Meetup"
- text="Wir sind Co-Organisatoren des Cloud Native Bern Meetups."
- href="https://www.meetup.com/cloudnativebern/" >}}
- {{< grid-item
- image="community/uphillconf.svg"
- title="Uphill Conf"
- text="Wir sind Co-Organisatoren der Uphill Conf."
- href="https://www.uphillconf.com/" >}}
- {{< grid-item
- image="community/digitalimpact.png"
- title="Digital Impact Network"
- text="Wir engagieren uns in der Fachgruppe Cloud Native & DevOps."
- href="https://digitalimpact.ch/" >}}
- {{< grid-item
- image="community/berneritrocks.png"
- title="bernerit.rocks"
- text="Wir sind Mitgründer des Vereins bernerit.rocks."
- href="https://bernerit.rocks/" >}}
-
-
-## Engineering
-
-Als leidenschaftliche Software und Infrastructure Engineers helfen wir beim Design, bei der Umsetzung und bei der
-Implementierung moderner Technologien und Methoden.
-
-
- {{< grid-item
- image="services/harbor.svg"
- text="Artefakte mit Harbor" >}}
- {{< grid-item
- image="services/argo.svg"
- text="GitOps mit Argo CD, Flux CD und Sveltos" >}}
- {{< grid-item
- image="services/slsa.svg"
- text="Supply Chain Security mit SLSA und Sigstore" >}}
- {{< grid-item
- image="services/kubernetes.svg"
- text="Kubernetes Distributionen nach Bedürfnis" >}}
- {{< grid-item
- image="services/capsule.svg"
- text="Multi-Tenancy" >}}
- {{< grid-item
- image="services/capi.png"
- text="Control Planes as Service" >}}
- {{< grid-item
- image="services/gitlab.svg"
- text="Continuous Integration, Delivery und Deployment (CI/CD)" >}}
- {{< grid-item
- image="services/opentofu.svg"
- text="Infrastructure as Code (IaC) und Configuration as Code" >}}
- {{< grid-item
- image="services/gopher.svg"
- text="Durchgängige Automatisierung" >}}
- {{< grid-item
- image="services/prometheus.svg"
- text="Observability" >}}
- {{< grid-item
- image="services/func.svg"
- text="Serverless" >}}
- {{< grid-item
- image="services/opa.svg"
- text="Policy as Code" >}}
-
diff --git a/content/services/services/argo.svg b/content/services/services/argo.svg
deleted file mode 100644
index aae0df5..0000000
--- a/content/services/services/argo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/backstage.svg b/content/services/services/backstage.svg
deleted file mode 100644
index bc1ed80..0000000
--- a/content/services/services/backstage.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/capi.png b/content/services/services/capi.png
deleted file mode 100644
index bc30295..0000000
Binary files a/content/services/services/capi.png and /dev/null differ
diff --git a/content/services/services/capsule.svg b/content/services/services/capsule.svg
deleted file mode 100644
index 638ee65..0000000
--- a/content/services/services/capsule.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/chalkboard-user.svg b/content/services/services/chalkboard-user.svg
deleted file mode 100644
index ac62729..0000000
--- a/content/services/services/chalkboard-user.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/cloud-bolt.svg b/content/services/services/cloud-bolt.svg
deleted file mode 100644
index 5653d04..0000000
--- a/content/services/services/cloud-bolt.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/cloud.svg b/content/services/services/cloud.svg
deleted file mode 100644
index 1ad62ad..0000000
--- a/content/services/services/cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/cncf.svg b/content/services/services/cncf.svg
deleted file mode 100644
index cdf0f7c..0000000
--- a/content/services/services/cncf.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/cubes.svg b/content/services/services/cubes.svg
deleted file mode 100644
index d74b5ea..0000000
--- a/content/services/services/cubes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/diagram-project.svg b/content/services/services/diagram-project.svg
deleted file mode 100644
index 3682aa8..0000000
--- a/content/services/services/diagram-project.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/docker.svg b/content/services/services/docker.svg
deleted file mode 100644
index bcd1ac7..0000000
--- a/content/services/services/docker.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/func.svg b/content/services/services/func.svg
deleted file mode 100644
index 9f133e4..0000000
--- a/content/services/services/func.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/gears.svg b/content/services/services/gears.svg
deleted file mode 100644
index ba6d4be..0000000
--- a/content/services/services/gears.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/gitlab.svg b/content/services/services/gitlab.svg
deleted file mode 100644
index cf5bb94..0000000
--- a/content/services/services/gitlab.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/gopher.svg b/content/services/services/gopher.svg
deleted file mode 100644
index 50fedce..0000000
--- a/content/services/services/gopher.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/harbor.svg b/content/services/services/harbor.svg
deleted file mode 100644
index b5900b6..0000000
--- a/content/services/services/harbor.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/killercoda.svg b/content/services/services/killercoda.svg
deleted file mode 100644
index 3d703ae..0000000
--- a/content/services/services/killercoda.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/content/services/services/kubernetes.svg b/content/services/services/kubernetes.svg
deleted file mode 100644
index 730faa9..0000000
--- a/content/services/services/kubernetes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/opa.svg b/content/services/services/opa.svg
deleted file mode 100644
index fd8cf70..0000000
--- a/content/services/services/opa.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/opentofu.svg b/content/services/services/opentofu.svg
deleted file mode 100644
index f63b518..0000000
--- a/content/services/services/opentofu.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/content/services/services/prometheus.svg b/content/services/services/prometheus.svg
deleted file mode 100644
index ad64357..0000000
--- a/content/services/services/prometheus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/slsa.svg b/content/services/services/slsa.svg
deleted file mode 100644
index 63b8099..0000000
--- a/content/services/services/slsa.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/services/services/terraform.svg b/content/services/services/terraform.svg
deleted file mode 100755
index be866b4..0000000
--- a/content/services/services/terraform.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/content/team/_index.en.md b/content/team/_index.en.md
new file mode 100644
index 0000000..5de510d
--- /dev/null
+++ b/content/team/_index.en.md
@@ -0,0 +1,102 @@
+---
+title: Team
+description: "The engineering team behind Peak Scale – six specialists from Bern, with open-source DNA and a focus on cloud-native platforms."
+aliases:
+ - /about/
+ - /contact/
+hero:
+ eyebrow: "Behind Peak Scale"
+ title: "The engineering team behind Peak Scale"
+ lead: "We are a specialised engineering and architecture team for cloud native platforms – pragmatic, technically grounded, and close to operational reality."
+ sub: "Hands-on – directly with the experts who also think about operations"
+ cta_primary: "Get in touch"
+ cta_secondary: "See services"
+ cta_secondary_href: "/services/"
+team_block:
+ eyebrow: "Our team"
+ title: "Our team"
+ lead: "We are engineers, architects, and platform specialists with different focus areas – connected by a shared mindset. Platforms have to be traceable, automated, and load-bearing in everyday operations."
+ cta: "Follow us on LinkedIn"
+members:
+ eyebrow: "Members"
+ title: "Who is behind it"
+ notice: "Note: Roles can change (architect – engineer; senior maintainer; tech)."
+mission:
+ eyebrow: "Our mission"
+ title: "Our mission "
+ lead: "We help IT departments build stable, secure, and future-ready platforms. At the centre are pragmatic decisions, technical depth, and architectures that can evolve over years – independent of individual vendors or products."
+ tags:
+ - "Clear goals"
+ - "Traceable decisions"
+ - "Working systems"
+ - "Joint delivery with the customer team"
+how_we_work:
+ eyebrow: "How we work"
+ title: "Our way of working "
+ lead: "We work closely with our customers' engineering and architecture teams – as technical partners in everyday project work. Short paths, clear sparring, and steps that hold up in operations and scale."
+ cards:
+ - title: "Short communication paths"
+ body: "Engineers talking directly to engineers – no translation layer, with short reaction times."
+ - title: "Honest technical sparring"
+ body: "We challenge assumptions openly before they become platform reality."
+ - title: "Iterative architecture development"
+ body: "Architecture grows in small, verifiable steps – not as a single big bang."
+ - title: "Evidence-based decisions"
+ body: "We decide based on data, experiments and reproducible setups."
+ - title: "Enablement over dependency"
+ body: "We build knowledge inside the customer team – so solutions hold up without us."
+ - title: "Documentation that's actually used"
+ body: "ADRs, runbooks and checklists that genuinely help in operations."
+why_cloud_native:
+ eyebrow: "Why cloud native?"
+ title: "Why cloud native?"
+ lead: "Cloud native is not a trend for us, it's the dependable basis of modern platforms – open, automated, and load-bearing for the long run."
+ pills:
+ - "Scale and flexibility"
+ - "Security and transparency"
+ - "Extensible, long-lived platforms"
+ - "Automation and speed"
+ - "Portability and openness"
+ footnote: "We deliberately rely on open standards and established open-source technologies – without proprietary lock-in."
+values:
+ eyebrow: "Our values"
+ title: "Our values "
+ items:
+ - title: "Pragmatism"
+ body: "We prefer solutions that work – over those that only look good on paper."
+ - title: "Reliability"
+ body: "We work transparently, traceably, and without surprises."
+ - title: "Technical depth"
+ body: "We don't build anything we couldn't operate ourselves."
+ - title: "Openness"
+ body: "We share knowledge, raise problems clearly, and recommend what really makes sense."
+ - title: "Community"
+ body: "We are actively involved in the (Swiss) cloud native ecosystem."
+community:
+ eyebrow: "Community engagement"
+ title: "Engagement in the community"
+ lead: "Sharing knowledge is part of who we are. We actively contribute to events, meetups, and open-source projects."
+ tags:
+ - "Swiss Cloud Native Day (co-organisers)"
+ - "Cloud Native Bern Meetup (co-organisers)"
+ - "Talks and workshops on GitOps, Kubernetes, security"
+ - "Contributions to open-source tools we use daily"
+ footnote: "This engagement keeps us close to current developments – and gives us valuable insight into the challenges different teams and industries face."
+contact_block:
+ eyebrow: "Contact"
+ title: "Work with us"
+ lead: "If you'd like to get to know Peak Scale, we're happy to give you a look at how we work, decide, and approach typical engagements – informally, with no classic sales process."
+next_steps:
+ eyebrow: "Continue"
+ title: "Next stage "
+ cards:
+ - eyebrow: "Services"
+ title: "Advisory, engineering, assessments and enablement for platform teams"
+ desc: ""
+ href: "/services/"
+ - eyebrow: "Products"
+ title: "Our own solutions and enterprise support for core platform building blocks"
+ desc: ""
+ href: "/produkte/"
+ variant: "gold"
+---
diff --git a/content/team/_index.md b/content/team/_index.md
new file mode 100644
index 0000000..28707bb
--- /dev/null
+++ b/content/team/_index.md
@@ -0,0 +1,103 @@
+---
+title: Team
+description: "Das Engineering-Team hinter Peak Scale – sechs Spezialisten aus Bern, mit Open-Source-DNA und Fokus auf Cloud-Native-Plattformen."
+aliases:
+ - /about/
+ - /ueber-uns/
+ - /contact/
+hero:
+ eyebrow: "Hinter Peak Scale"
+ title: "Das Engineering-Team hinter Peak Scale"
+ lead: "Wir sind ein spezialisiertes Engineering- und Architekturteam für Cloud Native Plattformen – pragmatisch, technisch fundiert und nah an der Betriebsrealität."
+ sub: "Hands-on – direkt mit den Experten, die auch den Betrieb mitdenken"
+ cta_primary: "Kontakt aufnehmen"
+ cta_secondary: "Services ansehen"
+ cta_secondary_href: "/services/"
+team_block:
+ eyebrow: "Unser Team"
+ title: "Unser Team"
+ lead: "Wir sind Engineers, Architekten und Plattform-Spezialisten mit unterschiedlichen Schwerpunkten – verbunden durch eine gemeinsame Haltung. Plattformen müssen nachvollziehbar, automatisiert und im Alltag tragfähig sein."
+ cta: "Folge uns auf LinkedIn"
+members:
+ eyebrow: "Mitglieder"
+ title: "Wer dahintersteht"
+ notice: "Hinweis: Rollen können wechseln (Architekt – Engineer; Senior Marketing; Tech)."
+mission:
+ eyebrow: "Unsere Mission"
+ title: "Unsere Mission "
+ lead: "Wir unterstützen IT-Abteilungen dabei, stabile, sichere und zukunftsfähige Plattformen aufzubauen. Im Zentrum stehen pragmatische Entscheidungen, technische Tiefe und Architekturen, die sich über Jahre weiterentwickeln können – unabhängig von einzelnen Herstellern oder Produkten."
+ tags:
+ - "Klare Ziele"
+ - "Nachvollziehbare Entscheide"
+ - "Funktionierende Systeme"
+ - "Gemeinsame Umsetzung mit dem Kundenteam"
+how_we_work:
+ eyebrow: "So arbeiten wir"
+ title: "Unsere Arbeitsweise "
+ lead: "Wir arbeiten eng mit den Engineering- und Architekturteams unserer Kunden zusammen – als technische Partner im Projektalltag. Kurze Wege, klares Sparring und Schritte, die im Betrieb tragen und mitwachsen."
+ cards:
+ - title: "Kurze Kommunikationswege"
+ body: "Direkt zwischen Engineers – ohne Übersetzungslayer, mit kurzen Reaktionszeiten."
+ - title: "Ehrliches technisches Sparring"
+ body: "Wir challengen Annahmen offen, bevor sie zu Plattformrealität werden."
+ - title: "Iterative Architekturentwicklung"
+ body: "Architektur entsteht in kleinen, überprüfbaren Schritten – nicht als grosser Wurf."
+ - title: "Evidenzbasierte Entscheidungen"
+ body: "Wir entscheiden auf Basis von Daten, Experimenten und reproduzierbaren Setups."
+ - title: "Enablement statt Abhängigkeiten"
+ body: "Wir bauen Wissen im Kundenteam auf – damit Lösungen auch ohne uns tragen."
+ - title: "Dokumentation, die im Alltag genutzt wird"
+ body: "ADRs, Runbooks und Checklisten, die im Betrieb wirklich helfen."
+why_cloud_native:
+ eyebrow: "Warum Cloud Native?"
+ title: "Warum Cloud Native?"
+ lead: "Cloud Native ist für uns kein Trend, sondern die belastbare Grundlage moderner Plattformen – offen, automatisiert und langfristig tragfähig."
+ pills:
+ - "Skalierung und Flexibilität"
+ - "Sicherheit und Transparenz"
+ - "Erweiterbare, langlebige Plattformen"
+ - "Automatisierung und Geschwindigkeit"
+ - "Portabilität und Offenheit"
+ footnote: "Wir setzen bewusst auf offene Standards und etablierte Open-Source-Technologien – ohne proprietären Lock-in."
+values:
+ eyebrow: "Unsere Werte"
+ title: "Unsere Werte "
+ items:
+ - title: "Pragmatismus"
+ body: "Wir bevorzugen Lösungen, die funktionieren – nicht solche, die nur auf dem Papier gut aussehen."
+ - title: "Verlässlichkeit"
+ body: "Wir arbeiten transparent, nachvollziehbar und ohne Überraschungen."
+ - title: "Technische Tiefe"
+ body: "Wir bauen nichts, das wir nicht selbst betreiben können."
+ - title: "Offenheit"
+ body: "Wir teilen Wissen, sprechen Probleme klar an und empfehlen, was wirklich sinnvoll ist."
+ - title: "Community"
+ body: "Wir engagieren uns aktiv im Cloud Native Ökosystem (der Schweiz)."
+community:
+ eyebrow: "Community-Engagement"
+ title: "Engagement in der Community"
+ lead: "Wissen zu teilen gehört für uns dazu. Wir beteiligen uns aktiv an Veranstaltungen, Meetups und Open-Source-Projekten."
+ tags:
+ - "Swiss Cloud Native Day (Mitorganisatoren)"
+ - "Cloud Native Bern Meetup (Co-Organisatoren)"
+ - "Talks und Workshops zu GitOps, Kubernetes, Security"
+ - "Beiträge zu Open-Source-Werkzeugen, die wir täglich nutzen"
+ footnote: "Dieses Engagement hält uns nah an aktuellen Entwicklungen – und gibt uns wertvolle Einblicke in Herausforderungen verschiedener Teams und Branchen."
+contact_block:
+ eyebrow: "Kontakt"
+ title: "Mit uns arbeiten"
+ lead: "Wenn Sie Peak Scale näher kennenlernen möchten, geben wir gerne Einblick in Arbeitsweise, Entscheidungslogik und typische Vorgehensmodelle – unverbindlich, ohne klassischen Sales-Prozess."
+next_steps:
+ eyebrow: "Weitergehen"
+ title: "Nächste Etappe "
+ cards:
+ - eyebrow: "Services"
+ title: "Beratung, Engineering, Assessments und Enablement für Plattform-Teams"
+ desc: ""
+ href: "/services/"
+ - eyebrow: "Produkte"
+ title: "Eigene Lösungen und Enterprise Support für zentrale Plattformbausteine"
+ desc: ""
+ href: "/produkte/"
+ variant: "gold"
+---
diff --git a/content/team/index.en.md b/content/team/index.en.md
deleted file mode 100755
index 32e5c71..0000000
--- a/content/team/index.en.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-title: Team
----
-
-## Team
-
-We are a team of experienced IT professionals who are proud to be able to offer a wide range of skills and expertise.
-
-
- {{}}
- {{}}
- {{}}
- {{}}
- {{}}
- {{}}
-
-
-Would you like to become part of our team? We are always happy to receive unsolicited applications at jobs@peakscale.ch.
-
-
\ No newline at end of file
diff --git a/content/team/index.md b/content/team/index.md
deleted file mode 100755
index b41ffa6..0000000
--- a/content/team/index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: Team
----
-
-## Team
-
-Wir sind ein Team aus erfahrenen IT-Profis, das stolz darauf ist, ein breites Spektrum an Fähigkeiten und Erfahrungen
-bieten zu können.
-
-
- {{}}
- {{}}
- {{}}
- {{}}
- {{}}
- {{}}
-
-
-Möchtest du Teil unseres Teams werden? Wir freuen uns immer über Spontanbewerbungen an jobs@peakscale.ch.
-
-
\ No newline at end of file
diff --git a/data/customers.yaml b/data/customers.yaml
new file mode 100644
index 0000000..0bbf4ef
--- /dev/null
+++ b/data/customers.yaml
@@ -0,0 +1,30 @@
+- name: bedag
+ image: /images/customers/bedag.png
+ href: https://bedag.ch
+- name: BFH
+ image: /images/customers/bfh.svg
+ href: https://bfh.ch
+- name: Bison
+ image: /images/customers/bison.svg
+ href: https://bison-group.com
+- name: Bund
+ image: /images/customers/bund.svg
+ href: https://admin.ch
+- name: ETH
+ image: /images/customers/eth.svg
+ href: https://ethz.ch
+- name: ewb
+ image: /images/customers/ewb.svg
+ href: https://ewb.ch
+- name: FHNW
+ image: /images/customers/fhnw.svg
+ href: https://www.fhnw.ch
+- name: Gelan
+ image: /images/customers/gelan.png
+ href: https://gelan.ch
+- name: Mobiliar
+ image: /images/customers/mobiliar.svg
+ href: https://mobiliar.ch
+- name: PostFinance
+ image: /images/customers/postfinance.svg
+ href: https://postfinance.ch
diff --git a/data/partners.yaml b/data/partners.yaml
new file mode 100644
index 0000000..897d98b
--- /dev/null
+++ b/data/partners.yaml
@@ -0,0 +1,20 @@
+- name: Sidero Labs
+ role_de: "Talos · Omni · Kubernetes"
+ role_en: "Talos · Omni · Kubernetes"
+ image: /images/partners/siderolabs.svg
+ href: https://siderolabs.com
+- name: Clastix
+ role_de: "Capsule Enterprise"
+ role_en: "Capsule Enterprise"
+ image: /images/partners/clastix.svg
+ href: https://clastix.io
+- name: SUSE Rancher Prime
+ role_de: "Emerald-Status"
+ role_en: "Emerald status"
+ image: /images/partners/suse.svg
+ href: https://www.suse.com/products/rancher/
+- name: Google Cloud
+ role_de: "GCP-Partner"
+ role_en: "GCP partner"
+ image: /images/partners/google-cloud.svg
+ href: https://cloud.google.com
diff --git a/data/team.yaml b/data/team.yaml
new file mode 100644
index 0000000..f6f4349
--- /dev/null
+++ b/data/team.yaml
@@ -0,0 +1,67 @@
+- name: Mathias Herzog
+ image: /images/team/mathiasherzog.png
+ linkedin: https://www.linkedin.com/in/mathias-herzog-888a6788/
+ role_de: Cloud Architect & Consultant, Gründer
+ role_en: Cloud Architect & Consultant, Co-Founder
+ focus_de: "Cloud-Native-Architektur • Platform Engineering • Schulung & Beratung • Automatisierung"
+ focus_en: "Cloud native architecture • Platform engineering • Training & consulting • Automation"
+
+- name: Johann Gyger
+ image: /images/team/johanngyger.png
+ linkedin: https://www.linkedin.com/in/johanngyger/
+ role_de: Cloud Architect & Consultant, Gründer
+ role_en: Cloud Architect & Consultant, Co-Founder
+ focus_de: "Software-Architektur • Cloud Native • GitOps & Security • Community"
+ focus_en: "Software architecture • Cloud native • GitOps & security • Community"
+
+- name: Oliver Bähler
+ image: /images/team/oliverbaehler.png
+ linkedin: https://www.linkedin.com/in/oliver-b%C3%A4hler-8b182b175/
+ role_de: Cloud Native Engineer & Architect
+ role_en: Cloud Native Engineer & Architect
+ focus_de: "Multi-Tenant Kubernetes • GitOps & IaC • Zero Trust • Open Source (Capsule)"
+ focus_en: "Multi-tenant Kubernetes • GitOps & IaC • Zero trust • Open source (Capsule)"
+
+- name: Lorenz Bischof
+ image: /images/team/lorenzbischof.png
+ linkedin: https://www.linkedin.com/in/lorenz-bischof/
+ role_de: Senior Cloud Engineer
+ role_en: Senior Cloud Engineer
+ focus_de: "Kubernetes Operators • Policy as Code • Multi-Tenancy • Automatisierung"
+ focus_en: "Kubernetes operators • Policy as code • Multi-tenancy • Automation"
+
+- name: Nicola Lüthi
+ image: /images/team/nicolaluethi.png
+ linkedin: https://www.linkedin.com/in/nicola-l%C3%BCthi-895045252/
+ role_de: DevOps & Platform Engineer
+ role_en: DevOps & Platform Engineer
+ focus_de: "Kubernetes-Plattformen • CI/CD & GitOps • Observability • Multi-Cloud"
+ focus_en: "Kubernetes platforms • CI/CD & GitOps • Observability • Multi-cloud"
+
+- name: Luca Kündig
+ linkedin: https://www.linkedin.com/in/luca-k%C3%BCndig-b2700211a/
+ role_de: Senior Cloud Native & DevOps Architect
+ role_en: Senior Cloud Native & DevOps Architect
+ focus_de: "Kubernetes-Architektur • Observability • GitOps • Infrastructure as Code"
+ focus_en: "Kubernetes architecture • Observability • GitOps • Infrastructure as code"
+
+- name: Philipp Grogg
+ image: /images/team/philippgrogg.png
+ linkedin: https://www.linkedin.com/in/philipp-grogg-1a369012b/
+ role_de: Senior Software Engineer (Contractor)
+ role_en: Senior Software Engineer (Contractor)
+ focus_de: "CI/CD • DevOps • Software-Architektur • Supply Chain Security"
+ focus_en: "CI/CD • DevOps • Software architecture • Supply chain security"
+
+- name: Kevin Klopfenstein
+ linkedin: https://www.linkedin.com/in/kevin-klopfenstein-6838b5103/
+ role_de: Cloud Network Engineer (Contractor)
+ role_en: Cloud Network Engineer (Contractor)
+ focus_de: "Netzwerkarchitektur • Kubernetes Networking • Data Platforms • Multi-Cloud"
+ focus_en: "Network architecture • Kubernetes networking • Data platforms • Multi-cloud"
+
+- name: Marc Stulz
+ role_de: Senior Cloud & DevOps Architect (Contractor)
+ role_en: Senior Cloud & DevOps Architect (Contractor)
+ focus_de: "Multi-Cloud • Kubernetes • CI/CD • Wissenstransfer"
+ focus_en: "Multi-cloud • Kubernetes • CI/CD • Knowledge transfer"
diff --git a/data/testimonials.yaml b/data/testimonials.yaml
new file mode 100644
index 0000000..08d337a
--- /dev/null
+++ b/data/testimonials.yaml
@@ -0,0 +1,14 @@
+- quote_de: "Peak Scale hat uns zielgerichtet bei der Modernisierung unserer Infrastruktur unterstützt. Besonders wertvoll war die klare, pragmatische Vorgehensweise."
+ quote_en: "Peak Scale supported us with focus through the modernisation of our infrastructure. The clear, pragmatic approach was especially valuable."
+ author_de: "Senior IT Architect, Schweizer Bundesverwaltung"
+ author_en: "Senior IT Architect, Swiss Federal Administration"
+
+- quote_de: "Die Erfahrung von Peak Scale im Bereich GitOps und Kubernetes hat unsere Plattform massiv verbessert. Umsetzung und Wissenstransfer waren hervorragend."
+ quote_en: "Peak Scale's experience with GitOps and Kubernetes massively improved our platform. Delivery and knowledge transfer were outstanding."
+ author_de: "CTO, Swiss Fintech Startup"
+ author_en: "CTO, Swiss fintech startup"
+
+- quote_de: "Das Training war praxisorientiert und hat unser Team schnell befähigt, selbstständig weiterzuarbeiten."
+ quote_en: "The training was hands-on and quickly enabled our team to keep going on their own."
+ author_de: "Engineering Lead, BFH"
+ author_en: "Engineering lead, BFH"
diff --git a/hugo.toml b/hugo.toml
index de4878c..8af1f87 100755
--- a/hugo.toml
+++ b/hugo.toml
@@ -1,105 +1,94 @@
+baseURL = "https://peakscale.ch/"
title = "Peak Scale"
-
defaultContentLanguage = "de"
+defaultContentLanguageInSubdir = false
+enableRobotsTXT = true
+disableKinds = ["taxonomy", "term"]
+
+[taxonomies]
+# Intentionally empty — no tags/categories on a marketing site.
+
+[params]
+contactEmail = "welcome@peakscale.ch"
+companyName = "Peak Scale GmbH"
+companyAddress = "Ryffligässchen 5"
+companyCity = "CH-3011 Bern"
+linkedin = "https://www.linkedin.com/company/peakscale/"
+ogImage = "/images/peakscale-logo-square.png"
+description = "Cloud Native Consulting & Platform Engineering aus Bern. Hands-on Partner für Strategie, Architektur, Engineering und Betrieb moderner Cloud-Plattformen."
+
+[params.plausible]
+enable = true
+domain = "peakscale.ch"
+
+[markup]
+[markup.goldmark.renderer]
+unsafe = true
+[markup.highlight]
+codeFences = true
+guessSyntax = true
+noClasses = false
+
+[outputs]
+home = ["HTML", "RSS"]
[languages]
[languages.de]
-languageCode = "de-ch"
+label = "Deutsch"
+locale = "de-CH"
+weight = 1
[languages.de.params]
-description = "Cloud Native Experten"
-privacy = "Datenschutz"
-legalnotice = "Impressum"
-[languages.de.params.hero]
-hero__title = "Cloud Native Experten"
-hero__description = """Bei Peak Scale sind wir davon überzeugt, dass sich IT-Architektur ständig weiterentwickelt.
- Deshalb setzen wir auf pragmatische und evolutionäre Ansätze.
- Wir unterstützen und beraten mit Dienstleistungen in den Bereichen Architektur, Engineering, Training und
- Assessments – stets im Kontext moderner, cloud-nativer Infrastrukturen."""
+description = "Cloud Native Consulting & Platform Engineering aus Bern. Hands-on Partner für Strategie, Architektur, Engineering und Betrieb."
[[languages.de.menus.main]]
identifier = "services"
-name = "Angebot"
+name = "Services"
pageRef = "/services"
-weight = 2
+weight = 10
[[languages.de.menus.main]]
-identifier = "about"
-name = "Über uns"
-pageRef = "/about"
-weight = 3
+identifier = "produkte"
+name = "Produkte"
+pageRef = "/produkte"
+weight = 20
[[languages.de.menus.main]]
identifier = "team"
name = "Team"
pageRef = "/team"
-weight = 4
-[[languages.de.menus.main]]
-identifier = "contact"
-name = "Kontakt"
-pageRef = "/contact"
-weight = 5
+weight = 30
+[[languages.de.menus.legal]]
+name = "Impressum"
+pageRef = "/impressum"
+weight = 10
+[[languages.de.menus.legal]]
+name = "Datenschutz"
+pageRef = "/datenschutz"
+weight = 20
[languages.en]
-languageCode = "en-en"
+label = "English"
+locale = "en"
+weight = 2
[languages.en.params]
-description = "Cloud Native Experts"
-privacy = "Privacy"
-legalnotice = "Legal Notice"
-[languages.en.params.hero]
-hero__title = "Cloud Native Experts"
-hero__description = """At Peak Scale, we believe that IT architecture is constantly evolving.
- That’s why we embrace pragmatic and evolutionary approaches.
- We provide support and guidance through services in architecture, engineering, training, and assessments,
- all within the context of modern, cloud-native infrastructures."""
+description = "Cloud Native consulting & platform engineering from Bern. Hands-on partner for strategy, architecture, engineering, and operations of modern cloud platforms."
[[languages.en.menus.main]]
identifier = "services"
name = "Services"
pageRef = "/services"
-weight = 2
+weight = 10
[[languages.en.menus.main]]
-identifier = "about"
-name = "About"
-pageRef = "/about"
-weight = 3
+identifier = "produkte"
+name = "Products"
+pageRef = "/produkte"
+weight = 20
[[languages.en.menus.main]]
identifier = "team"
name = "Team"
pageRef = "/team"
-weight = 4
-[[languages.en.menus.main]]
-identifier = "contact"
-name = "Contact"
-pageRef = "/contact"
-weight = 5
-
-[params]
-logo = "/images/logos/peakscale.svg"
-logoDark = "/images/logos/peakscale_dark.svg"
-author = "Peak Scale"
-imageSocial = "/images/logos/peakscale_social.png"
-
-[params.plausible]
-enable = true
-domain = "peakscale.ch"
-
-#-------------------------------
-# Footer Settings
-# Other icons can be found at https://ionicons.com/v4/
-[[params.social]]
-icon = "logo-linkedin"
-name = "LinkedIn"
-link = "https://www.linkedin.com/company/peakscale/"
-color = "#0580c4"
-
-
-#-------------------------------
-# Contact Settings
-[params.contact]
-email = "mjvlykdz" # Add your Formspree form_id for contant form
-
-[markup]
-[markup.goldmark]
-[markup.goldmark.renderer]
-unsafe = true
-
-[markup.highlight]
-codeFences = true
-guessSyntax = true
-noClasses = false
+weight = 30
+[[languages.en.menus.legal]]
+name = "Imprint"
+pageRef = "/imprint"
+weight = 10
+[[languages.en.menus.legal]]
+name = "Privacy"
+pageRef = "/privacy"
+weight = 20
diff --git a/i18n/de.toml b/i18n/de.toml
new file mode 100644
index 0000000..bad9d8a
--- /dev/null
+++ b/i18n/de.toml
@@ -0,0 +1,56 @@
+[skip_to_content]
+other = "Zum Inhalt springen"
+
+[contact]
+other = "Kontakt"
+
+[contact_aria]
+other = "Kontakt aufnehmen"
+
+[contact_open_email]
+other = "E-Mail an Peak Scale schreiben"
+
+[contact_modal_title]
+other = "Kontakt"
+
+[contact_modal_lead]
+other = "Direkter E-Mail-Kontakt – schnelle Antwort."
+
+[contact_label_direct]
+other = "Direkt"
+
+[contact_label_address]
+other = "Adresse"
+
+[menu]
+other = "Menü"
+
+[menu_open]
+other = "Menü öffnen"
+
+[menu_close]
+other = "Menü schliessen"
+
+[lang_switch]
+other = "Sprache wechseln"
+
+[next_step_title]
+other = "Nächste Etappe"
+
+[next_step_lead]
+other = "Wohin Sie als Nächstes weitergehen können."
+
+[footer_menu]
+other = "Menü"
+
+[footer_legal]
+other = "Rechtliches"
+
+[footer_contact]
+other = "Kontakt"
+
+[focus_areas_label]
+other = "Schwerpunkte"
+
+[copyright]
+other = "© {{ .Year }} Peak Scale"
diff --git a/i18n/en.toml b/i18n/en.toml
new file mode 100644
index 0000000..e9dfcf7
--- /dev/null
+++ b/i18n/en.toml
@@ -0,0 +1,56 @@
+[skip_to_content]
+other = "Skip to content"
+
+[contact]
+other = "Contact"
+
+[contact_aria]
+other = "Get in touch"
+
+[contact_open_email]
+other = "Email Peak Scale"
+
+[contact_modal_title]
+other = "Contact"
+
+[contact_modal_lead]
+other = "Direct email contact — quick reply."
+
+[contact_label_direct]
+other = "Direct"
+
+[contact_label_address]
+other = "Address"
+
+[menu]
+other = "Menu"
+
+[menu_open]
+other = "Open menu"
+
+[menu_close]
+other = "Close menu"
+
+[lang_switch]
+other = "Switch language"
+
+[next_step_title]
+other = "Next stage"
+
+[next_step_lead]
+other = "Where to go from here."
+
+[footer_menu]
+other = "Menu"
+
+[footer_legal]
+other = "Legal"
+
+[footer_contact]
+other = "Contact"
+
+[focus_areas_label]
+other = "Focus"
+
+[copyright]
+other = "© {{ .Year }} Peak Scale"
diff --git a/layouts/404.html b/layouts/404.html
old mode 100755
new mode 100644
index 5bffb2b..809d8dc
--- a/layouts/404.html
+++ b/layouts/404.html
@@ -1,36 +1,18 @@
-
{{ define "main" }}
-
-
-
-
-
-
-
-
-{{ partial "section-subscribe.html" . }}
-
-{{ end }}
\ No newline at end of file
+
+{{ end }}
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
old mode 100755
new mode 100644
index 37f314d..d11327d
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -1,26 +1,17 @@
-
-
+
{{ partial "head.html" . }}
-
-
-
-
+
{{ i18n "skip_to_content" }}
{{ partial "header.html" . }}
-
-
-
+ {{ partial "mobile-menu.html" . }}
+
{{ block "main" . }}{{ end }}
-
-
- {{ partial "icon" "arrow-up" }}
-
+ {{ partial "contact-floating.html" . }}
{{ partial "footer.html" . }}
-
- {{ partial "javascripts.html" . }}
-
+ {{ with resources.Get "js/peakscale.js" | js.Build (dict "minify" true) | fingerprint }}
+
+ {{ end }}
-
diff --git a/layouts/_default/contact.html b/layouts/_default/contact.html
deleted file mode 100755
index d8960e5..0000000
--- a/layouts/_default/contact.html
+++ /dev/null
@@ -1,66 +0,0 @@
-{{ define "main" }}
-
-
-
-
-
-
- {{ if .Params.image }}
-
-
-
-
-
-
-
- {{ end }}
-
-
-
-
-
-
-
-
-{{ partial "section-subscribe.html" . }}
-
-{{ end }}
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
old mode 100755
new mode 100644
index 34b30ec..2d2adaf
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -1,64 +1,8 @@
{{ define "main" }}
-
-{{ if in .Permalink "/tags/" }}
-
-
-
-
+
-
-
-
- {{ len .Pages }} {{ if lt (len .Pages) 2 }}Post{{ else }}Posts{{ end }}
-
{{ humanize .Title }}
-
-
-
-
-
-
-
- {{ range .Data.Pages }}
- {{ partial "article-content.html" . }}
- {{ end }}
-
-
-
-
-
-
-{{ partial "section-subscribe.html" . }}
-
-{{ else }}
-
-
-
-
-
-
-
-
{{.Title}}
-
{{ .Description }}
-
-
-
+
{{ .Title }}
+ {{ .Content }}
-
-
-
-
- {{ $paginator := .Paginate (where .Site.RegularPages "Type" "posts" ) }}
- {{ range $paginator.Pages }}
- {{ partial "article-content.html" . }}
- {{ end }}
-
-
-
-{{ partial "pagination.html" . }}
-
-{{ partial "section-subscribe.html" . }}
-
{{ end }}
-
-{{ end }}
\ No newline at end of file
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
old mode 100755
new mode 100644
index 6a520ff..036787a
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -1,98 +1,10 @@
{{ define "main" }}
-
-{{ if or (eq .Section "post") (eq .Section "posts") }}
-
-
-
-
-
-
-
-
-
-
{{ .Title }}
-
-
-
-
-
-
-
-
-
-
-
- {{ if .Params.image }}
-
-
-
-
-
-
-
- {{ end }}
-
-
-
-
+
+
+
+
{{ .Title }}
{{ .Content }}
-
- {{ partial "share-buttons.html" . }}
-
- {{ if .Site.Params.disqus.disqusShortname }} {{ partial "disqus-comments.html" . }} {{ end }}
-
-
-
-
-
-
-{{ partial "related-posts.html" . }}
-
-{{ partial "section-subscribe.html" . }}
-
-{{ else }}
-
-
-
-
-
-
- {{ if .Params.image }}
-
-
-
-
-
-
-
- {{ end }}
-
-
-
- {{ .Content }}
-
-
-
-
-
-
-{{ partial "section-subscribe.html" . }}
-
-{{ end }}
-
+
{{ end }}
diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html
deleted file mode 100644
index 7a9dc91..0000000
--- a/layouts/_default/terms.html
+++ /dev/null
@@ -1,62 +0,0 @@
-{{ define "main" }}
-
-
-
-
-{{ end }}
\ No newline at end of file
diff --git a/layouts/index.html b/layouts/index.html
old mode 100755
new mode 100644
index 73f7a15..34e8e83
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,5 +1,190 @@
{{ define "main" }}
+{{- $lang := .Site.Language.Lang -}}
- {{ partial "section-hero.html" . }}
+{{/* ---------- Hero (centered, photo below) ---------- */}}
+{{ with .Params.hero }}
+
+
+
+
{{ .title }}
+
{{ .lead }}
+
{{ .sub }}
+
+
+
+
+
+
+ {{ with $.Params.mountain.stages }}
+ {{ range $i, $s := . }}
+ {{ $s.name }}
+ {{ end }}
+ {{ end }}
+
+
+
+
+{{ end }}
+
+{{/* ---------- Why Peak Scale (centered display headline, featured card 1, icons on rest) ---------- */}}
+{{ with .Params.why }}
+
+
+
+
{{ .title | safeHTML }}
+ {{ with .lead }}
{{ . }}
{{ end }}
+
+ {{ $items := .items }}
+ {{ $first := index $items 0 }}
+ {{ $rest := after 1 $items }}
+
+
+
{{ $first.title | safeHTML }}
+ {{ with $first.body }}
{{ . }}
{{ end }}
+
+ {{ range $rest }}
+
+
{{ partial "icon.html" (dict "name" (default "compass" .icon) "size" 32) }}
+
{{ .title }}
+
{{ .body }}
+
+ {{ end }}
+
+
+
+{{ end }}
+
+{{/* ---------- Customers logo strip ---------- */}}
+{{ with .Params.customers }}
+
+
+
+
{{ .title | safeHTML }}
+
{{ .lead }}
+
+
+
{{ partial "icon.html" (dict "name" "chevron-left" "size" 20) }}
+
+
+ {{ range hugo.Data.customers }}
+
+
+
+ {{ end }}
+
+
+
{{ partial "icon.html" (dict "name" "chevron-right" "size" 20) }}
+
+
+
+{{ end }}
+
+{{/* ---------- Testimonials carousel (centered with chevrons) ---------- */}}
+{{ with .Params.testimonial }}
+
+
+
+
{{ .eyebrow | safeHTML }}
+
+
+
+
{{ partial "icon.html" (dict "name" "chevron-left" "size" 24) }}
+
{{ partial "icon.html" (dict "name" "chevron-right" "size" 24) }}
+
+ {{ range hugo.Data.testimonials }}
+
+ {{ if eq $lang "de" }}{{ .quote_de }}{{ else }}{{ .quote_en }}{{ end }}
+ {{ if eq $lang "de" }}– {{ .author_de }}{{ else }}— {{ .author_en }}{{ end }}
+
+ {{ end }}
+
+
+
+
+
+{{ end }}
+
+{{/* ---------- What IT teams gain (dark, 4 horizontal rows) ---------- */}}
+{{ with .Params.lifecycle }}
+
+
+
+
{{ .title | safeHTML }}
+
{{ .lead }}
+
+
+ {{ $images := slice "/images/section/cloud-architecture.jpg" "/images/section/platform-engineering.jpg" "/images/section/assessments.jpg" "/images/section/training.jpg" -}}
+ {{ $icons := slice "compass" "code" "clipboard" "graduation" -}}
+ {{ range $i, $c := .cards }}
+
+
{{ $c.title }}
+ {{ if eq (mod $i 2) 0 -}}
+
+
+
{{ partial "icon.html" (dict "name" (index $icons $i) "size" 24) }}
+
{{ $c.desc }}
+
+ {{- else -}}
+
+
{{ partial "icon.html" (dict "name" (index $icons $i) "size" 24) }}
+
{{ $c.desc }}
+
+
+ {{- end }}
+
+ {{ end }}
+
+
+
+{{ end }}
+
+{{/* ---------- Challenges glass card on photo (left intro + right card list) ---------- */}}
+{{ with .Params.challenges }}
+
+
+
+
+
+
+
{{ .title }}
+
{{ .lead }}
+
+
+ {{ range .items }}
+
+
{{ .title }}
+
{{ .body }}
+
+ {{ end }}
+
+
+
+
+
+{{ end }}
+
+{{/* ---------- Partner logos ---------- */}}
+{{ with .Params.partners }}
+
+
+
+
{{ .title }}
+ {{ with .lead }}
{{ . }}
{{ end }}
+
+
+ {{ range hugo.Data.partners }}
+
+
+
+ {{ end }}
+
+
+
+{{ end }}
+
+{{/* ---------- Next steps (3 cards: 1 large navy + 2 small gold/sage gradients) ---------- */}}
+{{ with .Params.next_steps }}{{ partial "next-steps.html" . }}{{ end }}
{{ end }}
diff --git a/layouts/partials/article-content.html b/layouts/partials/article-content.html
deleted file mode 100755
index 40d622d..0000000
--- a/layouts/partials/article-content.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
{{ .Date.Format "2 Jan 2006" }}
-
- {{ if .Params.video_embed }}
-
- {{ end }}
-
- {{ if .Params.Image }}
-
-
-
- {{ end }}
-
-
-
-
-
-
-
{{ if .Description }}{{ .Description }}{{ else }}{{ truncate 95 .Summary | safeHTML }}{{ end }}
-
-
-
-
diff --git a/layouts/partials/contact-floating.html b/layouts/partials/contact-floating.html
new file mode 100644
index 0000000..dc8074f
--- /dev/null
+++ b/layouts/partials/contact-floating.html
@@ -0,0 +1,3 @@
+
+ {{ partial "icon.html" (dict "name" "mail" "size" 22) }}
+
diff --git a/layouts/partials/disqus-comments.html b/layouts/partials/disqus-comments.html
deleted file mode 100755
index f6b8f88..0000000
--- a/layouts/partials/disqus-comments.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
Please enable JavaScript to view the
- comments powered by Disqus.
-
-
\ No newline at end of file
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
old mode 100755
new mode 100644
index f722258..dc50498
--- a/layouts/partials/footer.html
+++ b/layouts/partials/footer.html
@@ -1,33 +1,44 @@
-
-