This commit is contained in:
Markus 2025-06-06 18:12:46 +02:00
commit 1d8da2b6dd
824 changed files with 76366 additions and 0 deletions

15
layouts/404.html Normal file
View file

@ -0,0 +1,15 @@
{{ define "main" }}
<section class="page-404">
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>404</h1>
<h2 class="text-muted">{{ i18n "404_message" | markdownify }}</h2>
<a href="{{site.BaseURL | relLangURL}}" class="btn btn-main">{{ i18n "go_home" | markdownify }}</a>
</div>
</div>
</div>
</section>
{{ end }}

View file

@ -0,0 +1,74 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
{{ with .Params.about }}
{{ if .enable }}
<section class="about section">
<div class="container">
<div class="row align-items-center">
<div class="col-md-3 text-right">
<div class="person-info">
{{ with .left_person }}
{{ with .name }}<h3>{{ . | markdownify }}</h3>{{ end }}
{{ with .description }}<p>{{ . | $.Page.RenderString (dict "display" "block") }}</p>{{ end }}
{{ end }}
</div>
</div>
<div class="col-md-6 text-center">
<div class="about-img">
<img src="{{ .image | relURL }}" alt="Standard Image">
<img src="{{ .hover_image | relURL }}" alt="Hover Image" class="hover-img">
</div>
</div>
<div class="col-md-3 text-left">
<div class="person-info">
{{ with .right_person }}
{{ with .name }}<h3>{{ . | markdownify }}</h3>{{ end }}
{{ with .description }}<p>{{ . | $.Page.RenderString (dict "display" "block") }}</p>{{ end }}
{{ end }}
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<section class="testimonial section-sm">
<div class="container">
<div class="row">
{{ with .Params.mission_vision }}
{{ if .enable }}
<div class="col-md-12">
<div class="tabCommon">
<ul class="nav nav-tabs">
{{ range $index, $elements := .tabs }}
<li {{ if eq $index 0 }} class="active" {{ end }}><a href="#{{ .name | urlize }}"
data-toggle="tab">{{ .name }}</a></li>
{{ end }}
</ul>
<div class="tab-content">
{{ range $index, $elements := .tabs }}
<div id="{{ .name | urlize }}" class="tab-pane fade {{ if eq $index 0 }} active in {{ end }}">
{{ .content | $.Page.RenderString (dict "display" "block") }}
</div>
{{ end }}
</div>
</div>
</div>
{{ end }}
{{ end }}
</div>
</div>
</section>
<!-- Call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /Call to action -->
{{ end }}

22
layouts/_default/agb.html Normal file
View file

@ -0,0 +1,22 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<section class="page-wrapper">
<div class="container">
<div class="row">
<div class="col-md-4 sticky-top">
<h2>{{ .Title }}</h2>
{{ with .Params.subtitle }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
<p>{{ i18n "last_update" }}: {{ time.Format ":date_long" .Lastmod }}</p>
<h3>{{ i18n "faq_toc_title" }}</h3>
{{ .TableOfContents }}
</div>
<div class="col-md-8">
{{ .Content }}
</div>
</div>
</div>
</section>
{{ end }}

View file

@ -0,0 +1,70 @@
<!--
PROJECT: Startup Hugo
VERSION: 1.0.0
AUTHOR: Gethugothemes
AUTHOR WEBSITE: https://gethugothemes.com
-->
<!DOCTYPE html>
<html lang="{{ site.LanguageCode | default `en-US` }}" itemscope itemtype="http://schema.org/WebPage">
<head>
{{ partial "head.html" . }}
<!-- Meta Viewport Tag hinzufügen -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- cache partial only in production -->
{{ if hugo.IsProduction }}
{{ partialCached "style.html" . }}
{{ else }}
{{ partial "style.html" . }}
{{ end }}
</head>
<body>
<!-- cache partial only in production -->
{{ partial "header.html" . }}
{{ if hugo.IsProduction }}
{{ partialCached "preloader.html" . }}
{{ else }}
{{ partial "preloader.html" . }}
{{ end }}
<main>
{{ block "main" . }}{{ end }}
</main>
<!-- cache partial only in production -->
{{ if hugo.IsProduction }}
{{ partialCached "footer.html" . }}
{{ partialCached "script.html" . }}
{{ else }}
{{ partial "footer.html" . }}
{{ partial "script.html" . }}
{{ end }}
</body>
</html>

View file

@ -0,0 +1,44 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<section class="contact-form">
<div class="container">
<div class="contact-box row justify-content-center">
{{ with site.Params.contact -}}
<div class="col-md-4 col-sm-12">
<div class="block text-left">
<h2>{{ i18n "address_title" }}</h2>
<ul class="address-block">
{{ $add_address_descriptors := .address_descriptors }}
{{ with site.Params.location }}<li><i class="fas fa-map-marker-alt"></i>{{ if $add_address_descriptors }}{{ i18n "location" | printf "%s: " }}{{ end }}<div>{{ . | markdownify }}</div></li>{{ end }}
{{ with site.Params.email }}<li><i class="fas fa-envelope"></i>{{ if $add_address_descriptors }}{{ i18n "email" | printf "%s: " }}{{ end }}{{ partial "cloak_email" . }}</li>{{ end }}
{{ with site.Params.phone }}<li><i class="fas fa-tty"></i>{{ if $add_address_descriptors }}{{ i18n "phone" | printf "%s: " }}{{ end }}<div>{{ . | markdownify }}</div></li>{{ end }}
</ul>
</div>
</div>
<div class="col-md-4 col-sm-12">
<div class="block text-center">
<h2>{{ i18n "social_media" }}</h2>
<ul class="social-icons">
{{ range site.Params.social -}}
<li><a href="{{ .link | safeURL }}" target="_blank" rel="noopener noreferrer" class="social-icon">
<img src="{{ .image | relURL }}" alt="{{ .title }}" style="height: 40px;">
</a></li>
{{- end }}
</ul>
</div>
</div>
{{- end }}
</div>
</div>
</section>
<!-- Call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /Call to action -->
{{ end }}

View file

@ -0,0 +1,28 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<section class="page-wrapper">
<div class="container">
<div class="row">
<div class="col-md-4 sticky-top">
<h2>{{ .Title }}</h2>
{{ with .Params.subtitle }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
<p>{{ i18n "last_update" }}: {{ time.Format ":date_long" .Lastmod }}</p>
<h3>{{ i18n "faq_toc_title" }}</h3>
{{ .TableOfContents }}
</div>
<div class="col-md-8">
{{ .Content }}
</div>
</div>
</div>
</section>
<!-- Call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /Call to action -->
{{ end }}

22
layouts/_default/faq.html Normal file
View file

@ -0,0 +1,22 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<section class="page-wrapper">
<div class="container">
<div class="row">
<div class="col-md-4 sticky-top">
<h2>{{ .Title }}</h2>
{{ with .Params.subtitle }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
<p>{{ i18n "last_update" }}: {{ time.Format ":date_long" .Lastmod }}</p>
<h3>{{ i18n "faq_toc_title" }}</h3>
{{ .TableOfContents }}
</div>
<div class="col-md-8">
{{ .Content }}
</div>
</div>
</div>
</section>
{{ end }}

View file

@ -0,0 +1,34 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<section class="impressum section">
<div class="container">
<div class="row">
<div class="col-md-12">
<table class="table">
<tbody>
{{ range $index, $heading := .Params.headings }}
<tr>
<td class="col-1">
{{ $heading }}
</td>
<td class="col-2">
{{ index $.Params.contents $index | markdownify }}
</td>
</tr>
{{ end }}
</tbody>
</table>
</div>
</div>
</div>
</section>
<!-- Call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /Call to action -->
{{ end }}

280
layouts/_default/index.html Normal file
View file

@ -0,0 +1,280 @@
{{ define "main" }}
<header>
<!-- banner -->
{{ with .Params.banner }}
{{ if .enable }}
<section class="slider {{ if .bg_overlay }}overly{{ end }}" style="height: 100vh; display: flex; align-items: center; justify-content: center; position: relative;">
<!-- Scroll-Button unten -->
<div class="scrolldown" style="position: absolute; bottom: -120px; left: 50%; transform: translateX(-50%);">
<a href="#about" class="btn btn-secondary" style="cursor: pointer;">
<div class="chevrons">
<div class='chevrondown'></div>
<div class='chevrondown'></div>
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- /banner -->
</header>
<!-- about -->
{{ with .Params.about }}
{{ if .enable }}
<section id="about" class="about section"> <!-- Add id="about" here -->
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-12">
<div class="block">
<div class="section-title">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
{{ with .description }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
</div>
{{ with .content }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
</div>
</div>
<div class="col-md-5 col-sm-12">
<div class="block">
<img src="{{ .image | relURL }}" class="img-responsive" alt="Img">
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- /about -->
{{ with .Params.about }}
{{ if .enable }}
<section class="about section">
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="about-img">
<img class="img-responsive" src="{{ .image | relURL }}">
</div>
</div>
<div class="col-md-6">
{{ with .title }}<h2 class="mt-40">{{ . | markdownify }}</h2>{{ end }}
{{ with .content }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
{{ with .button }}
{{ if .enable }}
<a href="{{ .link | relURL }}" class="btn btn-small mt-20">{{ .label }}</a>
{{ end }}
{{ end }}
</div>
</div>
<div class="row counter-box text-center mt-50">
{{ range .funfacts }}
<div class="col-md-2">
<div class="counter-item">
{{ with .icon }}<i class="{{ . }}"></i>{{ end }}
{{ with .count }}<h4 class="count" data-count="{{ . }}">0</h4>{{ end }}
{{ with .name }}<span>{{ . }}</span>{{ end }}
</div>
</div>
{{ end }}
</div>
</div>
</section>
{{ end }}
{{ end }}
<section class="text-and-image-section">
<div class="container">
<div class="row">
<div class="col-md-6">
<!-- Bild auf der linken Seite -->
<div class="image-section">
<img src="images/module_reflection_2.webp" alt="Bildbeschreibung" class="img-fluid">
</div>
</div>
<div class="col-md-6">
<!-- Text auf der rechten Seite -->
<div class="text-section" style="max-width: 100%;">
<h2>Unser Angebot</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit... Lorem ipsum dolor sit amet, consectetur adipiscing elit.. Lorem ipsum dolor sit amet, consectetur adipiscing elit.. Lorem ipsum dolor sit amet, consectetur adipiscing elit.. Lorem ipsum dolor sit amet, consectetur adipiscing elit..</p>
</div>
<!-- Bild auf der linken Seite -->
<div class="image-section">
<img src="images/module_reflection_2.webp" alt="Bildbeschreibung" class="img-fluid">
</div>
</div>
<div class="col-md-6">
<!-- Text auf der rechten Seite -->
<div class="text-section" style="max-width: 100%;">
<h2>Unser Angebot</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit... Lorem ipsum dolor sit amet, consectetur adipiscing elit.. Lorem ipsum dolor sit amet, consectetur adipiscing elit.. Lorem ipsum dolor sit amet, consectetur adipiscing elit.. Lorem ipsum dolor sit amet, consectetur adipiscing elit..</p>
</div>
</div>
</div>
</div>
</section>
<!-- portfolio -->
{{ with .Params.portfolio }}
{{ if .enable }}
<section class="feature bg-2" style="background-image: url('{{ .bg_image | relURL }}')">
<div class="container">
<div class="row">
<div class="col-md-6 col-md-offset-6">
{{ with .title }}<h2 class="section-subtitle">{{ . | markdownify }}</h2>{{ end }}
{{ with .content }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
{{ with .button }}
{{ if .enable }}
<a href="{{ .link | relLangURL }}" class="btn btn-view-works">{{ .label }}</a>
{{ end }}
{{ end }}
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- /portfolio -->
<!-- service -->
{{ if .Params.service.enable }}
{{ partial "service.html" . }}
{{ end }}
<!-- /service -->
<!-- call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /call to action -->
<!-- funfacts -->
{{ with .Params.funfacts }}
{{ if .enable }}
<section class="testimonial">
<div class="container">
<div class="row">
<div class="section-title text-center">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
{{ with .description }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="block">
<ul class="counter-box clearfix">
{{ range .funfact_item }}
<li class="counter-item">
<!-- Anstelle eines Icons, das Bild einbinden -->
<img src="{{ .image | relURL }}" alt="{{ .name }}" style="width: 50px; height: auto;"> <!-- Stil nach Bedarf anpassen -->
<h4 class="count" data-count="{{ .count }}">0</h4>
<span>{{ .name | markdownify }}</span>
</li>
{{ end }}
</ul>
</div>
</div>
<div class="col-md-5 col-md-offset-1">
<div class="testimonial-carousel text-center">
<div class="testimonial-slider owl-carousel">
{{ range .testimonial_slider }}
<div>
{{ with .content }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
<div class="user">
<img src="{{ .image | relURL }}" alt="client">
<p><span>{{ .name | markdownify }}</span> {{ .designation | markdownify }}</p>
</div>
</div>
{{ end }}
</div>
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<script>
const canvas = document.getElementById('sinusCanvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const wave = {
y: canvas.height / 2,
length: 0.004,
amplitude: 160,
amplitudeVariation: 60,
frequency: 0.007
};
let increment = wave.frequency;
function animate() {
requestAnimationFrame(animate);
// Setzt den Hintergrundfarbe, um den Kontrast zu erhöhen und die weiße Welle sichtbar zu machen
ctx.fillStyle = 'rgba(0, 0, 0, 0.05)'; // Leichter Trail-Effekt mit dunklem Hintergrund
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.moveTo(-330, wave.y);
ctx.lineWidth = 1 + Math.abs(Math.sin(increment) * 10); // Dynamische Anpassung der Linienstärke
for (let i = 0; i < canvas.width; i++) {
ctx.lineTo(
i,
wave.y +
Math.sin(i * wave.length + increment) *
wave.amplitude *
Math.sin(increment)
);
}
ctx.strokeStyle = 'white'; // Stellt die Linienfarbe auf Weiß ein
ctx.stroke();
increment += wave.frequency;
}
animate();
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var scrollDownButton = document.querySelector('.scroll-down-button');
scrollDownButton.addEventListener('click', function() {
document.querySelector('#about').scrollIntoView({
behavior: 'smooth'
});
});
});
</script>
{{ end }}

View file

@ -0,0 +1,54 @@
{
"name": "{{site.Title}}",
"short_name": "{{site.Title}}",
"lang": "{{ site.LanguageCode | default `en-us` }}",
{{ with site.Params.variables.color_primary }}"theme_color": "{{.}}",{{ end }}
{{ with site.Params.variables.body_color }}"background_color": "{{.}}",{{ end }}
{{ $icon:= site.Params.favicon }}
{{ if $icon }}
{{ if fileExists (add `assets/` $icon) }}
{{ $icon:= resources.Get $icon }}
{{ $icon_48:= $icon.Resize "48x48 png" }}
{{ $icon_72:= $icon.Resize "72x72 png" }}
{{ $icon_96:= $icon.Resize "96x96 png" }}
{{ $icon_144:= $icon.Resize "144x144 png" }}
{{ $icon_192:= $icon.Resize "192x192 png" }}
{{ $icon_512:= $icon.Resize "512x512 png" }}
"icons": [
{
"src": "{{$icon_48.RelPermalink}}",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "{{$icon_72.RelPermalink}}",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "{{$icon_96.RelPermalink}}",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "{{$icon_144.RelPermalink}}",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "{{$icon_192.RelPermalink}}",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "{{$icon_512.RelPermalink}}",
"sizes": "512x512",
"type": "image/png"
}
],
{{ end }}
{{ end }}
"display": "standalone",
"start_url": "{{ site.BaseURL | relLangURL }}?utm_source=web_app_manifest"
}

119
layouts/_default/list.html Normal file
View file

@ -0,0 +1,119 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<!-- checking blog -->
{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
<div class="page-wrapper">
<div class="container">
<div class="row">
<div class="col-md-8">
{{ $paginator := .Paginate .Data.Pages -}}
{{ range $paginator.Pages -}}
<div class="post">
<div class="post-media post-thumb">
{{ if isset .Params "image" -}}
<a href="{{ .RelPermalink }}">
<img src="{{ .Params.image | relURL }}" alt="{{ .Title }}">
</a>
{{- end }}
</div>
<h3 class="post-title"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<div class="post-meta">
<ul>
<li><i class="fas fa-calendar-week"></i> {{ time.Format ":date_long" .PublishDate }}</li>
<li><i class="fas fa-user"></i>
{{ i18n "posted_by" }}
{{ $authors := slice }}{{ if reflect.IsSlice .Params.author }}{{ $authors = .Params.author }}{{ else }}{{ $authors = (slice .Params.author) }}{{ end -}}
{{ range $index, $elements := $authors }}{{ if ne $index 0 }}, {{ end }}<a class="text-primary" href="{{ `author/` | relLangURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
</li>
<li><i class="fas fa-tags"></i>
{{ range $index, $elements:= .Params.tags }}{{ if ne $index 0 }}, {{ end }}<a href="{{ `tags/` | relLangURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
</li>
</ul>
</div>
<div class="post-content">
<p>{{ .Summary }}</p>
<a href="{{ .RelPermalink }}" class="btn btn-main">{{ i18n "read_more" }}</a>
</div>
</div>
{{- end }}
<!-- pagination -->
{{ $paginator := .Paginator -}}
{{ $adjacent_links := 2 -}}
{{ $max_links := (add (mul $adjacent_links 2) 1) -}}
{{ $lower_limit := (add $adjacent_links 1) -}}
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) -}}
{{ if gt $paginator.TotalPages 1 -}}
<nav class="text-center">
<ul class="pagination post-pagination">
<!-- Previous page. -->
{{ if $paginator.HasPrev -}}
<li>
<a href="{{ $paginator.Prev.URL }}" class="page-link">{{ i18n "page_prev" }}</a>
</li>
{{- end }}
<!-- Page numbers. -->
{{ range $paginator.Pagers -}}
{{ $page_number_flag := false -}}
<!-- Advanced page numbers. -->
{{ if gt $paginator.TotalPages $max_links -}}
<!-- Lower limit pages. -->
<!-- If the user is on a page which is in the lower limit. -->
{{ if le $paginator.PageNumber $lower_limit -}}
<!-- If the current loop page is less than max_links. -->
{{ if le .PageNumber $max_links -}}
{{ $page_number_flag = true -}}
{{ end -}}
<!-- Upper limit pages. -->
<!-- If the user is on a page which is in the upper limit. -->
{{ else if ge $paginator.PageNumber $upper_limit -}}
<!-- If the current loop page is greater than total pages minus $max_links -->
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) -}}
{{ $page_number_flag = true -}}
{{ end -}}
<!-- Middle pages. -->
{{ else -}}
{{ if and (ge .PageNumber (sub $paginator.PageNumber $adjacent_links)) (le .PageNumber (add $paginator.PageNumber $adjacent_links)) -}}
{{ $page_number_flag = true -}}
{{ end -}}
{{ end -}}
<!-- Simple page numbers. -->
{{ else -}}
{{ $page_number_flag = true -}}
{{ end -}}
<!-- Output page numbers. -->
{{ if eq $page_number_flag true -}}
<li class="{{ if eq . $paginator }} active {{ end }}">
<a href="{{ .URL }}">
{{ .PageNumber }}
</a>
</li>
{{- end }}
{{- end }}
<!-- Next page. -->
{{ if $paginator.HasNext -}}
<li>
<a href="{{ $paginator.Next.URL }}">{{ i18n "page_next" }}</a>
</li>
{{- end }}
</ul>
</nav>
{{- end }}
</div>
<div class="col-md-4">
{{ partial "blog-sidebar.html" . }}
</div>
</div>
</div>
</div>
<!-- regular page -->
{{ else -}}
{{ .Render "default" }}
{{- end }}
<!-- /regular page -->
{{ end }}

View file

@ -0,0 +1,16 @@
{{ define "main" }}
<section class="page-message-sent">
<div class="container">
<div class="row">
<div class="col-md-12">
<img src="{{ site.Params.contact.form.success_image | relURL }}" alt="Paper plane">
<h1>{{ i18n "form_submitted" | markdownify }}</h1>
<h2 class="text-muted">{{ i18n "form_respond" | markdownify }}</h2>
<a href="{{ "/" | relLangURL }}" class="btn btn-main"><i class="tf-ion-android-arrow-back"></i> {{ i18n "go_home" | markdownify }}</a>
</div>
</div>
</div>
</section>
{{ end }}

View file

@ -0,0 +1,41 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
{{ with .Params.pricing }}
{{ if .enable }}
<section class="pricing-table section bg-gray">
<div class="container">
<div class="row">
<!-- single pricing table -->
{{ range .pricing_table }}
<div class="col-md-4 col-sm-6 col-xs-12">
<div class="pricing-item text-center">
<div class="price-title">
{{ with .name }}<h3>{{ . | markdownify }}</h3>{{ end }}
{{ with .price }}<strong class="value">{{ . }}</strong>{{ end }}
{{ with .content }}{{ . | $.Page.RenderString (dict "display" "block") }}{{ end }}
</div>
<ul>
{{ range .services }}
<li>{{ . | markdownify }}</li>
{{ end }}
</ul>
<a class="btn btn-small" href="{{ .link | safeURL }}">{{ i18n "buy_now" }}</a>
</div>
</div>
{{ end }}
<!-- end single pricing table -->
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- Call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /Call to action -->
{{ end }}

View file

@ -0,0 +1,60 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
{{ with .Params.about }}
{{ if .enable }}
<section class="service-about section">
<div class="container">
<div class="row">
<div class="col-md-12">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
{{ with .content }}<div class="mt-30 fixed-text">{{ . | $.Page.RenderString (dict "display" "block") }}</div>{{ end }}
</div>
{{ with .image -}}
<div class="col-md-6">
<img class="img-fluid" src="{{ . | relURL }}">
</div>
{{- end }}
</div>
</div>
</section>
{{ end }}
{{ end }}
{{ with .Params.featured_service }}
{{ if .enable }}
<section class="service-arrow">
<div class="container">
{{ range .service_item }}
<div class="row mb-6">
<div class="col-md-12 bg-{{ .color }} no-float">
<div class="block d-flex align-items-center justify-content-between">
<div class="service-icon">
<i class="{{ .icon }}"></i>
</div>
<div class="service-content flex-grow-1">
{{ with .name }}<h3 class="service-title">{{ . | markdownify }}</h3>{{ end }}
{{ with .content }}<div class="service-description">{{ . | $.Page.RenderString (dict "display" "block") }}</div>{{ end }}
</div>
{{ if .image }}
<div class="service-image">
<img src="{{ .image | relURL }}" alt="{{ .name }}" class="responsive-image">
</div>
{{ end }}
</div>
</div>
</div>
{{ end }}
</div>
</section>
{{ end }}
{{ end }}
<!-- Call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /Call to action -->
{{ end }}

View file

@ -0,0 +1,29 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ .Title }}</title>
<link rel="stylesheet" href="{{ "css/styles.css" | absURL }}">
</head>
<body>
<header>
<h1>{{ .Title }}</h1>
<nav>
<!-- Navigation kann hier hinzugefügt werden -->
</nav>
</header>
<main>
{{ .Content }}
</main>
<footer>
<p>&copy; 2023 Dein Unternehmen</p>
</footer>
</body>
</html>
{{ end }}

View file

@ -0,0 +1,55 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<!-- checking blog -->
{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
<section class="page-wrapper">
<div class="container">
<div class="row">
<div class="col-md-8">
<div class="post post-single">
<h2 class="post-title">{{ .Title }}</h2>
<div class="post-meta">
<ul>
<li><i class="ion-calendar"></i> {{ time.Format ":date_long" .PublishDate }}</li>
<li><i class="ion-android-people"></i>
{{ i18n "posted_by" }}
{{ $authors := slice }}{{ if reflect.IsSlice .Params.author }}{{ $authors = .Params.author }}{{ else }}{{ $authors = (slice .Params.author) }}{{ end -}}
{{ range $index, $elements := $authors }}{{ if ne $index 0 }}, {{ end }}<a class="text-primary" href="{{ `author/` | relLangURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
</li>
<li><i class="ion-pricetags"></i>
{{ range $index, $elements:= .Params.tags }}{{ if ne $index 0 }}, {{ end }}<a href="{{ `tags/` | relLangURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
</li>
</ul>
</div>
<div class="post-thumb">
{{ with .Params.image -}}
<img class="img-responsive" src="{{ . | relURL }}" alt="{{ $.Title }}">
{{- end }}
</div>
<div class="post-content post-excerpt">
{{ .Content }}
</div>
{{ with site.Params.DisqusShortname -}}
<div class="post-comments">
{{ template "_internal/disqus.html" . }}
</div>
{{- end }}
</div>
</div>
<div class="col-md-4">
{{ partial "blog-sidebar.html" . }}
</div>
</div>
</div>
</section>
<!-- regular page -->
{{ else -}}
{{ .Render "default" }}
{{- end }}
<!-- /regular page -->
{{ end }}

View file

@ -0,0 +1,2 @@
<!-- Redirect to homepage -->
<script>window.location.replace("{{ site.BaseURL | relLangURL }}");</script>

View file

@ -0,0 +1,77 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
<section class="section" style="background: #f5f5f5;">
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="text-center">
<figure>
{{ if .Params.photo -}}
<img style="border-radius: 50%;" class="img-fluid" src="{{ .Params.photo }}">
{{- end }}
<figcaption>
<h5 class="font-weight-bold">
{{ .Params.name }}
</h5>
</figcaption>
</figure>
<hr>
{{ .Content }}
<hr>
<ul class="list-inline">
{{ range .Params.social -}}
<li class="list-inline-item"><a class="share-icon bg-secondary" href="{{ .link | safeURL }}"><i class="{{ .icon }}"></i></a></li>
{{- end }}
</ul>
</div>
</div>
</div>
</div>
</section>
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="section-title text-center">
<h2>{{ i18n "posted_by" }} {{ .Title }}</h2>
</div>
</div>
{{ range (union (where site.RegularPages "Params.author" "intersect" (slice .Title)) (where site.RegularPages "Params.author" .Title)) -}}
<div class="col-md-6">
<div class="post">
<div class="post-thumb">
{{ if isset .Params "image" -}}
<a href="{{ .RelPermalink }}">
<img class="img-responsive" src="{{ .Params.image | relURL }}" alt="{{ .Title }}">
</a>
{{- end }}
</div>
<h3 class="post-title"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<div class="post-meta">
<ul>
<li><i class="fas fa-calendar-week"></i> {{ time.Format ":date_long" .PublishDate }}</li>
<li><i class="fas fa-user"></i>
{{ i18n "posted_by" }}
{{ $authors := slice }}{{ if reflect.IsSlice .Params.author }}{{ $authors = .Params.author }}{{ else }}{{ $authors = (slice .Params.author) }}{{ end -}}
{{ range $index, $elements := $authors }}{{ if ne $index 0 }}, {{ end }}<a class="text-primary" href="{{ `author/` | relLangURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
</li>
<li><i class="fas fa-tags"></i>
{{ range $index, $elements:= .Params.tags }}{{ if ne $index 0 }}, {{ end }}<a href="{{ `tags/` | relLangURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
</li>
</ul>
</div>
<div class="post-content">
<p>{{ .Summary }}</p>
<a href="{{ .RelPermalink }}" class="btn btn-main">{{ i18n "read_more" }}</a>
</div>
</div>
</div>
{{- end }}
</div>
</div>
</section>
{{ end }}

299
layouts/index.html Normal file
View file

@ -0,0 +1,299 @@
{{ define "main" }}
<header>
{{ with .Params.banner }}
{{ if .enable }}
<section
class="slider {{ if .bg_overlay }}overly{{ end }} gif-background"
style="height: 100vh; display: flex; align-items: center; justify-content: center; position: relative;"
>
<div class="my-container" style="position: relative; z-index: 2;">
<!-- Logo-Container mit 2 Frames (40% / 60%), 10% Rand links & rechts -->
<div class="logo-container">
<!-- Frame 1 -->
<div class="frame1">
<img
src="{{ .logo_image1 | relURL }}"
alt="Logo Frame 1"
class="banner-logo"
>
</div>
<!-- Frame 2 -->
<div class="frame2">
<img
src="{{ .logo_image2 | relURL }}"
alt="Logo Frame 2"
class="banner-logo"
>
</div>
</div>
<!-- Titel / Content / Button -->
<div class="block" style="display: flex; flex-direction: column; justify-content: flex-end; min-height: 10vh; padding: 1rem; box-sizing: border-box; overflow-wrap: break-word;">
{{ with .title }}
<h1 class="title-custom title-custom-margin fade-in-title">
{{ . | markdownify }}
</h1>
{{ end }}
{{ with .button }}
{{ if .enable }}
<div
class='scrolldown'
onclick="document.getElementById('service').scrollIntoView({ behavior: 'smooth' });"
style="--color: rgb(0, 0, 0); cursor: pointer;"
>
<div class="chevrons">
<div class='chevrondown'></div>
<div class='chevrondown'></div>
</div>
</div>
{{ end }}
{{ end }}
</div>
</div>
</section>
{{ end }}
{{ end }}
</header>
<script>
document.addEventListener("scroll", function() {
var scrolldown = document.querySelector('.scrolldown');
if (window.scrollY > 100) { // Adjust this value based on when you want to hide the icon
scrolldown.classList.add('hide');
} else {
scrolldown.classList.remove('hide');
}
});
</script>
<!-- service -->
{{ with site.GetPage "/service" }}
{{ with .Params.service }}
<section id="service" class="service">
<!-- container-fluid + my-container => um beides kombinieren zu können -->
<div class="container-fluid my-container">
<!-- Block mit Titel und Beschreibung -->
<div class="service-header">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
{{ with .description }}<h3>{{ . | markdownify }}</h3>{{ end }}
</div>
<!-- CSS-Grid/Flexbox-Bereich mit den Bildern -->
<div class="service-grid">
{{ range first 9 .service_item }}
<div class="service-item-fixed">
<div class="zoom-wrap">
<a href="{{ .link | relURL }}">
<img src="{{ .picture | relURL }}" alt="{{ .name }}">
<div class="overlay-text">
{{ .name }}
</div>
<div class="overlay"></div>
</a>
</div>
</div>
{{ end }}
</div><!-- /service-grid -->
</div><!-- /container-fluid.my-container -->
</section>
{{ end }}
{{ end }}
<!-- /service -->
<div style="height: 100px;"></div>
<!-- why-amperion -->
{{ with site.GetPage "/why-amperion" }}
<section id="why-amperion" class="why-amperion">
<div class="my-container">
<!-- Überschriften (zentriert) -->
<div class="section-title1 text-center">
{{ with .Params.icon }}
<img src="{{ . | relURL }}" alt="Icon" class="title-icon1">
{{ end }}
{{ with .Title }}
<h2 class="why-title1">{{ . | markdownify }}</h2>
{{ end }}
</div>
{{ with .Params.subtitle }}
<h3 class="why-subtitle text-center">{{ . | markdownify }}</h3>
{{ end }}
<div style="height: 50px;"></div>
<div class="row align-items-center">
<!-- Linke Spalte: drei Themen-Blocks -->
<div class="col-md-4">
{{ range .Params.left_blocks }}
<div class="why-block text-right">
<div class="row icon-heading">
<div class="col-md-10">
<h4 class="text-right">{{ .heading | markdownify }}</h4>
</div>
<div class="col-md-2">
<img src="{{ .icon | relURL }}" alt="{{ .heading }}" class="why-icon1">
</div>
</div>
<p>{{ .content | markdownify }}</p>
</div>
{{ end }}
</div>
<!-- Mittlere Spalte: Logo -->
<div class="col-md-4 text-center">
<img src="{{ .Params.middle_image | relURL }}" alt="Amperion Logo" class="why-logo">
</div>
<!-- Rechte Spalte: drei Themen-Blocks -->
<div class="col-md-4 text-left">
{{ range .Params.right_blocks }}
<div class="why-block text-left">
<div class="row icon-heading">
<div class="col-md-2">
<img src="{{ .icon | relURL }}" alt="{{ .heading }}" class="why-icon1">
</div>
<div class="col-md-10">
<h4 class="text-left">{{ .heading | markdownify }}</h4>
</div>
</div>
<p>{{ .content | markdownify }}</p>
</div>
{{ end }}
</div>
</div> <!-- /row -->
</div> <!-- /my-container -->
</section>
{{ end }}
<!-- /why-amperion -->
<div style="height: 100px;"></div>
<!-- about -->
{{ with .Params.about }}
{{ if .enable }}
<section id="about" class="about section">
<div class="my-container">
<div class="row">
<div class="col-12 text-center">
<div class="section-title">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
{{ with .description }}<h3>{{ . | markdownify }}</h3>{{ end }}
</div>
<div style="height: 20px;"></div>
</div>
</div>
<div class="row">
<div class="col-md-9 col-sm-12">
<div class="block">
{{ with .content }}{{ . | markdownify }}{{ end }}
</div>
</div>
<div class="col-md-3 col-sm-12">
<div class="block">
<img src="{{ .image | relURL }}" class="custom-image" alt="Img">
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- /about -->
<div style="height: 100px;"></div>
<!-- call to action -->
{{ if .Params.cta.enable }}
{{ partial "cta.html" . }}
{{ end }}
<!-- /call to action -->
<div style="height: 100px;"></div>
<!-- facts -->
{{ with .Params.facts }}
{{ if .enable }}
<section class="facts">
<div class="container">
<div class="row">
{{ range .fact_item }}
<div class="col-md-6">
<div class="fact-item text-center">
<img src="{{ .image | relURL }}" alt="{{ .name }}" class="fact-image">
</div>
</div>
{{ end }}
</div>
</div>
</section>
{{ end }}
{{ end }}
<style>
.testimonial-item .images-container {
display: flex;
justify-content: center;
gap: 10px; /* Abstand zwischen den Bildern */
}
.testimonial-item .testimonial-image {
width: 10px; /* Anpassen der Breite nach Bedarf */
height: auto;
}
</style>
<div style="height: 100px;"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
var scrollDownButton = document.querySelector('.scroll-down-button');
scrollDownButton.addEventListener('click', function() {
document.querySelector('#about').scrollIntoView({
behavior: 'smooth'
});
});
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var scrolled = false;
var initialScrollListener = function() {
if (!scrolled) {
window.removeEventListener('scroll', initialScrollListener);
document.getElementById('welcome').scrollIntoView({ behavior: 'smooth' });
scrolled = true;
}
};
window.addEventListener('scroll', initialScrollListener);
});
document.addEventListener("scroll", function() {
var scrolldown = document.querySelector('.scrolldown');
if (window.scrollY > 100) { // Adjust this value based on when you want to hide the icon
scrolldown.classList.add('hide');
} else {
scrolldown.classList.remove('hide');
}
});
</script>
{{ end }}

View file

@ -0,0 +1,4 @@
{{- $sidebarWidgets := site.Params.widgets.sidebar -}}
<aside class="sidebar">
{{- partial "widgets/widget_area" ( dict "Widgets" $sidebarWidgets "Scope" . ) -}}
</aside>

View file

@ -0,0 +1,10 @@
{{/* Cloak an e-mail address (first argument) */ -}}
{{- $address_parts := split . "@" -}}
{{- if (eq (len $address_parts) 2) -}}
{{- $user := index $address_parts 0 -}}
{{- $domain := index $address_parts 1 -}}
<span class="cloaked-e-mail" data-user="{{ range $index := seq (sub (len $user) 1) 0 }}{{ substr $user $index 1 }}{{ end }}" data-domain="{{ range $index := seq (sub (len $domain) 1) 0 }}{{ substr $domain $index 1 }}{{ end }}"></span>
{{- else -}}
<span>INVALID E-MAIL ADDRESS</span>
{{- end -}}
{{- /* Dummy comment to strip trailing newline */ -}}

27
layouts/partials/cta.html Normal file
View file

@ -0,0 +1,27 @@
{{ $impressum := site.GetPage "page" "impressum" }}
{{ with site.GetPage "/" }}
{{ with .Params.cta }}
<section class="call-to-action bg-1 section-sm overly" style="background-image: url('{{ .bg_image | relURL }}'); position: relative; background-attachment: fixed; background-size: cover;">
<div class="overlay-dark"></div> <!-- DAS NEUE OVERLAY -->
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="block" style="position: relative; z-index: 1;">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
{{ with .content }}<p>{{ . | markdownify }}</p>{{ end }}
{{ with .button }}
{{ if .enable }}
<a class="btn btn-main btn-solid-border" href="mailto:{{ $impressum.Params.email }}">E-mail</a>
<br>
<a class="btn btn-main btn-solid-border" href="tel:{{ index $impressum.Params.telefon }}">TELEFON</a>
{{ end }}
{{ end }}
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}

View file

@ -0,0 +1,17 @@
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="footer-menu">
<ul>
{{ range site.Menus.footer }}
<li><a href="{{ .URL | relLangURL }}">{{ .Name }}</a></li>
{{ end }}
</ul>
</div>
<p class="copyright">{{ site.Params.copyright | markdownify }}</p>
</div>
</div>
</div>
</footer>

View file

@ -0,0 +1,69 @@
<meta charset="utf-8">
<title>{{.Title | default site.Title}}</title>
<!-- base url -->
{{ if or (eq site.BaseURL "/") (eq site.BaseURL "http://localhost:1313/") (eq site.BaseURL "http://examplesite.org/") (eq site.BaseURL "https://examplesite.org/") (eq site.BaseURL "http://examplesite.com/") (eq site.BaseURL "https://examplesite.com/")}}{{else}}
<base href="{{ .Permalink }}">
{{ end }}
<!-- multilingual SEO optimizations -->
{{ if .IsTranslated }}
{{ range .AllTranslations }}
<link rel="alternate" hreflang="{{.Lang}}" href="{{ .RelPermalink | absLangURL }}">
{{ end }}
<link rel="alternate" hreflang="x-default" href="{{ .RelPermalink | absLangURL }}">
{{ end }}
<!-- mobile responsive meta -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
<meta name="description" content="{{ .Params.Description | default site.Params.description }}">
{{ with site.Params.author }}
<meta name="author" content="{{ . }}">{{ end }}
{{ hugo.Generator }}
<!-- theme meta -->
<meta name="theme-name" content="airspace-hugo" />
<!-- favicon -->
{{ $favicon:= site.Params.favicon }}
{{ if $favicon }}
{{ if fileExists (add `assets/` $favicon) }}
{{ $favicon:= resources.Get $favicon }}
{{ $favicon_16:= $favicon.Resize "16x png"}}
{{ $favicon_32:= $favicon.Resize "32x png"}}
{{ $favicon_180:= $favicon.Resize "180x png"}}
<link rel="shortcut icon" href="{{$favicon_32.RelPermalink}}" type="image/x-icon">
<link rel="icon" href="{{$favicon_32.RelPermalink}}" type="image/x-icon">
<link rel="icon" type="image/png" sizes="16x16" href="{{$favicon_16.RelPermalink}}">
<link rel="icon" type="image/png" sizes="32x32" href="{{$favicon_32.RelPermalink}}">
<link rel="apple-touch-icon" sizes="180x180" href="{{$favicon_180.RelPermalink}}">
{{ end }}
{{ end }}
<link rel="manifest" href="{{`manifest.webmanifest` | relLangURL }}">
<meta name="msapplication-TileColor" content="{{site.Params.variables.color_primary | default `#da532c`}}">
<meta name="theme-color" content="{{site.Params.variables.body_color | default `#ffffff` }}">
<!-- Open Graph image and Twitter Card meta-data -->
{{ $image_path := .Params.image | default site.Params.image }}
{{ $image_path_local := printf "assets/%s" $image_path }}
{{ $image_ext := trim (path.Ext $image_path | lower) "." }}
{{ if fileExists $image_path_local }}
<meta property="og:image" content="{{ $image_path | absURL }}" />
<!-- If not SVG, read image aspect ratio and define Twitter Card and Open Graph width and height -->
{{ if ne $image_ext "svg" }}
{{ with (imageConfig $image_path_local) }}
{{ if (and (gt .Width 144) (gt .Height 144)) }}
<meta name="twitter:image" content="{{ $image_path | absURL }}" />
<meta name="twitter:card"
content="summary{{ if (and (gt .Width 300) (gt .Height 157) (not (eq .Width .Height))) }}_large_image{{ end }}">
{{ end }}
<meta property="og:image:width" content="{{ .Width }}">
<meta property="og:image:height" content="{{ .Height }}">
{{ end }}
{{ end }}
{{ end }}
{{ template "_internal/opengraph.html" . }}

View file

@ -0,0 +1,83 @@
<!-- navigation -->
<header class="navbar-fixed-top navigation">
<div class="container-fluid">
<!-- navbar -->
<nav class="navbar">
<div class="navbar-header">
<!-- navbar toggler -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navigation" aria-expanded="true">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- navbar brand/logo -->
<a class="navbar-brand" href="{{ site.BaseURL | relLangURL }}">
{{ partial "logo.html" . }}
</a>
</div>
<div class="collapse navbar-collapse" id="navigation">
<ul class="nav navbar-nav navbar-right">
<!-- menu active -->
{{ $currentPage := . }}
{{ range site.Menus.main }}
{{ $menuURL := .URL | absLangURL }}
{{ $pageURL:= $currentPage.Permalink | absLangURL }}
{{ $active := eq $menuURL $pageURL }}
{{ if .HasChildren }}
<li class="nav-item dropdown
{{ range .Children }}
{{ $childURL := .URL | absLangURL }}
{{ $active := eq $childURL $pageURL }}
{{ if $active }}current{{ end }}
{{ end }}">
<a class="dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
{{ .Name }} <span class="fas fa-angle-down"></span>
</a>
<ul class="dropdown-menu">
{{ range .Children }}
{{ $childURL := .URL | absLangURL }}
{{ $active := eq $childURL $pageURL }}
<li><a class="dropdown-item {{ if $active }}current{{ end }}" {{if findRE `^http` .URL}}target="_blank" rel="noopener" {{end}}
href="{{if findRE `^#` .URL}}{{if not $.IsHome}}{{site.BaseURL | relLangURL}}{{end}}{{.URL}}{{else}}{{.URL | relLangURL}}{{end}}">{{ .Name }}</a></li>
{{ end }}
</ul>
</li>
{{ else }}
<li class="nav-item">
<a class="nav-link {{ if $active }}current{{ end }}" {{if findRE `^http` .URL}}target="_blank" rel="noopener" {{end}}
href="{{if findRE `^#` .URL}}{{if not $.IsHome}}{{site.BaseURL | relLangURL}}{{end}}{{.URL}}{{else}}{{.URL | relLangURL}}{{end}}">{{.Name}}</a>
</li>
{{ end }}
{{ end }}
<li>
<!-- Language List -->
{{ if .IsTranslated }}
<select class="m-2 border-0" id="select-language" onchange="location = this.value;">
{{ $siteLanguages := site.Languages}}
{{ $pageLang := .Page.Lang}}
{{ range .Page.AllTranslations }}
{{ $translation := .}}
{{ range $siteLanguages }}
{{ if eq $translation.Lang .Lang }}
{{ $selected := false }}
{{ if eq $pageLang .Lang}}
<option id="{{ $translation.Language }}" value="{{ $translation.RelPermalink }}" selected>{{ .LanguageName }}
</option>
{{ else }}
<option id="{{ $translation.Language }}" value="{{ $translation.RelPermalink }}">{{ .LanguageName }}</option>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</select>
{{ end }}
</li>
</ul>
</div>
</nav>
</div>
</header>
<!-- /navigation -->

View file

@ -0,0 +1,50 @@
{{ $logoPath:= site.Params.logo }}
{{ $logoWidth:= replace site.Params.logo_width "px" "x" }}
<!-- checking logo existance -->
{{ if $logoPath }}
{{ if fileExists (add `assets/` $logoPath) }}
{{ $logo:= resources.Get $logoPath }}
<!-- logo extention -->
{{ $logoExt := path.Ext $logo }}
<!-- logo height, width (if not svg) -->
{{ if eq $logoExt `.svg` }}
{{ .Scratch.Set "logo-width" "" }}
{{ .Scratch.Set "logo-height" "" }}
{{ else }}
{{ .Scratch.Set "logo-width" $logo.Width }}
{{ .Scratch.Set "logo-height" $logo.Height }}
{{ end }}
{{ $logoDefaultWidth:= .Scratch.Get "logo-width" }}
{{ $logoDefaultHeight:= .Scratch.Get "logo-height" }}
<!-- checking gif -->
{{ if eq $logoExt ".gif" }}
{{ .Scratch.Set "logo" ($logo.Resize $logoWidth).RelPermalink }}
<!-- checking svg -->
{{ else if eq $logoExt ".svg"}}
{{ .Scratch.Set "logo" $logo.RelPermalink }}
<!-- logo processing to webp -->
{{ else }}
{{ $logoDefaultWidth:= add (string $logoDefaultWidth) "x"}}
{{ $logoWidth:= $logoWidth | default $logoDefaultWidth }}
{{ $options := add (string $logoWidth) " webp" }}
{{ .Scratch.Set "logo" ($logo.Resize $options).RelPermalink }}
<!-- logo fallback -->
{{ .Scratch.Set "logo_fallback" ($logo.Resize $logoWidth).RelPermalink }}
{{ end }}
<img loading="prelaod" decoding="async" class="img-fluid logo-up" width="{{replace $logoWidth `x` `` | default $logoDefaultWidth}}" height="{{$logoDefaultHeight}}" src="{{.Scratch.Get `logo`}}" alt="{{ site.Title }}" onerror="this.onerror=null;this.src='{{.Scratch.Get `logo_fallback`}}'">
{{ else }}
<strong class="text-danger">`{{$logoPath}}` doesn't exist</strong>
{{ end }}
<!-- / checking logo existance -->
<!-- logo text -->
{{ else if site.Params.logo_text }}
{{ site.Params.logo_text | markdownify }}
<!-- logo title -->
{{ else }}
{{ site.Title | markdownify }}
{{ end }}

View file

@ -0,0 +1,11 @@
<section class="page-title" style="background-image: url('{{ .Params.bg_image | relURL }}');">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="block">
<h1>{{ .Title }}</h1>
</div>
</div>
</div>
</div>
</section>

View file

@ -0,0 +1,38 @@
{{ if site.Params.preloader.enable }}
<div class="preloader">
<!-- get image path -->
{{ $preloaderPath:= site.Params.preloader.preloader }}
{{ if $preloaderPath }}
<!-- check image existence -->
{{ if fileExists (add `assets/` $preloaderPath) }}
{{ $preloader:= resources.Get $preloaderPath }}
<!-- image extension -->
{{ $preloader_ext := path.Ext $preloader }}
<!-- image width -->
{{ $preloader_width := $preloader.Width }}
<!-- not gif -->
{{ if ne $preloader_ext ".gif" }}
<!-- webp image -->
{{ $option_webp := add (add (string $preloader_width) "x") " webp" }}
{{ .Scratch.Set "preloader" ($preloader.Resize $option_webp).RelPermalink }}
<!-- fallback image -->
{{ $option := add (string $preloader_width) "x" }}
{{ .Scratch.Set "preloader_fallback" ($preloader.Resize $option).RelPermalink }}
<!-- gif image -->
{{ else }}
{{ .Scratch.Set "preloader" $preloader.RelPermalink }}
{{ end }}
<img class="img-fluid" loading="preload" decoding="async" src="{{.Scratch.Get `preloader`}}" aria-label="preloader" title="preloader"
onerror="this.onerror=null;this.src='{{.Scratch.Get `preloader_fallback`}}'" alt="preloader">
{{ end }}
{{ end }}
<!-- /check image existence -->
</div>
{{ end }}

View file

@ -0,0 +1,68 @@
<!-- JS Plugins + Main script -->
{{ $scripts := slice }}
{{ range site.Params.plugins.js}}
{{ if findRE "^http" .link }}
<script src="{{ .link | relURL }}" type="application/javascript" {{.attributes | safeHTMLAttr}}></script>
{{ else }}
{{ $scripts = $scripts | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $scripts := $scripts | append (resources.Get "js/script.js" | minify) }}
{{ $scripts := $scripts | resources.Concat "js/script.js" | minify | fingerprint "sha512" }}
<script crossorigin="anonymous" defer="defer" integrity="{{ $scripts.Data.Integrity }}" type="application/javascript">{{$scripts.Content | safeJS}}</script>
<script src="/tarteaucitron/tarteaucitron.js"></script>
<script type="text/javascript">
tarteaucitron.init({
"privacyUrl": "/datenschutz",
"bodyPosition": "top",
"hashtag": "#tarteaucitron",
"cookieName": "tarteaucitron",
"orientation": "top",
"groupServices": true,
"showDetailsOnClick": false,
"serviceDefaultState": "wait", // ← wichtig: wartet auf Nutzeraktion
"showAlertSmall": false,
"cookieslist": false,
"closePopup": false,
"showIcon": true,
"iconPosition": "BottomRight",
"adblocker": false,
"DenyAllCta": false,
"AcceptAllCta": true,
"highPrivacy": true, // ← wichtig: kein Auto-Consent
"alwaysNeedConsent": false,
"handleBrowserDNTRequest": false,
"removeCredit": false,
"moreInfoLink": true,
"useExternalCss": false,
"useExternalJs": false,
"mandatory": false, // ← notwendig, wenn man keine Pflicht-Cookies nutzt
"mandatoryCta": false,
"googleConsentMode": true,
"bingConsentMode": true,
"softConsentMode": false,
"dataLayer": false,
"serverSide": false,
"partnersList": true
});
</script>
<script>
tarteaucitron.user.matomoId = 2;
(tarteaucitron.job = tarteaucitron.job || []).push('matomocloud');
</script>
<script>tarteaucitron.user.matomoHost = 'https://matomo.amperion.at/';tarteaucitron.user.matomoCustomJSPath = 'JS_PATH';tarteaucitron.user.matomoDontTrackPageView = dontTrackPageView (false | true);tarteaucitron.user.matomoFullTracking = fullTracking (true | false);</script>

View file

@ -0,0 +1,25 @@
{{ with site.GetPage "/service" }}
{{ with .Params.service }}
<section class="service">
<div class="container">
<div class="row">
<div class="section-title">
{{ with .title }}<h2>{{ . | markdownify }}</h2>{{ end }}
</div>
</div>
<div class="row">
{{ range .service_item }}
<div class="col-sm-6 col-md-3">
<div class="service-item">
<i class="{{ .icon }}"></i>
<h4>{{ .name | markdownify }}</h4>
<p>{{ .content | markdownify }}</p>
</div>
</div>
{{ end }}
</div>
</div>
</section>
{{ end }}
{{ end }}

View file

@ -0,0 +1,16 @@
<!-- DNS preconnect -->
<meta http-equiv="x-dns-prefetch-control" content="on">
<!-- plugins + stylesheet -->
{{ $styles := slice }}
{{ range site.Params.plugins.css }}
{{ if findRE "^http" .link }}
<link crossorigin="anonymous" media="all" rel="stylesheet" href="{{ .link | relURL }}" {{.attributes | safeHTMLAttr}} >
{{ else }}
{{ $styles = $styles | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $styles := $styles | append (resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS) }}
{{ $styles := $styles | resources.Concat "/css/style.css" | minify | fingerprint "sha512"}}
<style type="text/css">{{$styles.Content | safeCSS}}</style>

View file

@ -0,0 +1,16 @@
<div class="widget widget-latest-post">
<h4 class="widget-title">{{ i18n "latest_posts" }}</h4>
{{ range first 4 (where site.Pages "Type" "post") }}
<div class="media">
<a class="pull-left" href="{{ .RelPermalink }}">
{{ if isset .Params "image" }}
<img class="media-object" src="{{ .Params.image | relURL }}" alt="{{ .Title }}">
{{ end }}
</a>
<div class="media-body">
<h4 class="media-heading"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h4>
<p>{{ .Summary | truncate 50 }}</p>
</div>
</div>
{{ end }}
</div>

View file

@ -0,0 +1,12 @@
<div class="widget widget-category">
<h4 class="widget-title">{{ i18n "categories" }}</h4>
{{- if isset site.Taxonomies "categories" }}
{{- if not (eq (len site.Taxonomies.categories) 0) }}
<ul class="widget-category-list">
{{- range site.Taxonomies.categories }}
<li><a href="{{ .Page.RelPermalink }}"{{ if (and (eq $.Page.Kind "term") (eq $.Page.Type "categories") (eq $.Page.Title .Page.Title)) }} class="current"{{ end }}>{{ .Page.Title }}</a></li>
{{- end }}
</ul>
{{- end }}
{{- end }}
</div>

View file

@ -0,0 +1,12 @@
<div class="widget widget-tag">
<h4 class="widget-title">{{ i18n "tags" }}</h4>
{{- if isset site.Taxonomies "tags" }}
{{- if not (eq (len site.Taxonomies.tags) 0) }}
<ul class="widget-tag-list">
{{- range site.Taxonomies.tags }}
<li><a href="{{ .Page.RelPermalink }}"{{ if (and (eq $.Page.Kind "term") (eq $.Page.Type "tags") (eq $.Page.Title .Page.Title)) }} class="current"{{ end }}>{{ .Page.Title }}</a></li>
{{- end }}
</ul>
{{- end }}
{{- end }}
</div>

View file

@ -0,0 +1,3 @@
{{- range .Widgets -}}
{{- partial ( print "widgets/" . ) $.Scope -}}
{{- end -}}

53
layouts/project/list.html Normal file
View file

@ -0,0 +1,53 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
{{ $data := index site.Data site.Language.Lang }}
<!-- Portfolio Start -->
<section class="portfolio-work">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="block">
<div class="portfolio-menu">
<div class="btn-group btn-group-toggle justify-content-center" data-toggle="buttons">
<label class="btn btn-sm btn-primary active">
<input type="radio" name="shuffle-filter" value="all" checked="checked">{{ i18n "all" }}
</label>
{{ $categories := slice -}}
{{ range .Data.Pages -}}
{{ $categories = $categories | append .Params.category -}}
{{ end -}}
{{ range ( $categories | uniq ) -}}
<label class="btn btn-sm btn-primary">
<input type="radio" name="shuffle-filter" value="{{ . | urlize }}">{{ . }}
</label>
{{- end }}
</div>
</div>
<div class="row shuffle-wrapper">
{{ range .Data.Pages -}}
{{ $cats := .Params.category -}}
{{ if not (reflect.IsSlice $cats) }}{{ $cats = slice ($cats) }}{{ end -}}
{{ $cats = apply $cats "urlize" "." | jsonify -}}
<div class="col-md-4 portfolio-item shuffle-item" data-groups="{{ $cats }}">
{{ if isset .Params "image" -}}
<img src="{{ .Params.image | relURL }}" alt="{{ .Title }}">
{{- end }}
<div class="portfolio-hover">
<div class="portfolio-content">
<a class="h3" href="{{ .RelPermalink }}">{{ .Title }}</a>
<p>{{ .Params.description }}</p>
</div>
</div>
</div>
{{- end }}
</div>
</div>
</div>
</div>
</div>
</section>
{{ end }}

View file

@ -0,0 +1,36 @@
{{ define "main" }}
{{ partial "page-title.html" . }}
{{ $data := index site.Data site.Language.Lang }}
<section class="portfolio-single-page section-sm">
<div class="container">
<div class="row">
<div class="col-md-8">
{{ with .Params.image }}
<img class="img-responsive w-100" src="{{ . | relURL }}" alt="">
{{ end }}
</div>
<div class="col-md-4">
<div class="project-details">
<h4>Project Details</h4>
<ul>
{{ range .Params.information }}
<li><span>{{ .label }} :</span> <strong>{{ .info | markdownify }}</strong></li>
{{ end }}
</ul>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="project-content mt-50">
{{ .Content }}
</div>
</div>
</div>
</div>
</section>
{{ end }}

View file

@ -0,0 +1 @@
<a href="{{.Get 1 | absLangURL}}" class="btn btn-primary text-white" {{ if strings.HasPrefix (.Get 1) `http` }} target="_blank" rel="noopener"{{ end }} >{{.Get 0}}</a>

View file

@ -0,0 +1,10 @@
<!-- {{/*
Cloak an e-mail address
Usage: {{< cloak_email EMAIL >}}
*/}} -->
{{- $address_parts := split (.Get 0) "@" -}}
{{- $user := index $address_parts 0 -}}
{{- $domain := index $address_parts 1 -}}
<span class="cloaked-e-mail" data-user="{{ range $index := seq (sub (len $user) 1) 0 }}{{ substr $user $index 1 }}{{ end }}" data-domain="{{ range $index := seq (sub (len $domain) 1) 0 }}{{ substr $domain $index 1 }}{{ end }}"></span>
{{- /* Dummy comment to strip trailing newline */ -}}

View file

@ -0,0 +1,8 @@
<div class="codepen" data-height="400" data-theme-id="light" data-default-tab="html,result" data-user="codepen" data-slug-hash="{{.Get 0}}"></div>
<!-- codepen plugin, use it in config.toml -->
<!--
[[params.plugins.js]]
link = "https://cpwebassets.codepen.io/assets/embed/ei.js"
attributes = "async"
-->

View file

@ -0,0 +1,12 @@
<div class="accordion accordion-flush border">
<div class="accordion-item">
<h2 class="accordion-header my-0" id="title-{{.Get 0 | urlize}}">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#{{ .Get 0 | urlize}}" aria-expanded="false" aria-controls="{{ .Get 0 | urlize}}">
{{ .Get 0 | markdownify }}
</button>
</h2>
<div id="{{.Get 0 | urlize}}" class="accordion-collapse collapse" aria-labelledby="title-{{.Get 0 | urlize}}">
<div class="accordion-body">{{ .Inner | markdownify }}</div>
</div>
</div>
</div>

View file

@ -0,0 +1,9 @@
<!-- {{/*
Localize a date string like "2006-01-02" based on the current language; returns e.g. "January 2, 2006" if current language is English
Usage: {{< date_l10n INPUT [LAYOUT] >}}
*/}} -->
{{ $layout := ":date_long" -}}
{{ with .Get 1 }}{{ $layout = . }}{{ end -}}
{{ time.Format $layout (.Get 0) -}}
{{/* Dummy comment to strip trailing newline */ -}}

View file

@ -0,0 +1,116 @@
<!-- get value from params -->
{{ $imagePath:= .Get "src" }}
{{ $caption:= .Get "caption" }}
{{ $position:= .Get "position" }}
{{ $class:= .Get "class" }}
{{ $height:= replace (replace (.Get "height") "px" "") "x" "" }}
{{ $width:= replace (replace (.Get "width") "px" "") "x" "" }}
{{ $alt:= .Get "alt" }}
{{ $title:= .Get "title" }}
{{ $command:= .Get "command" | humanize }}
{{ $option:= .Get "option" }}
<!-- image position -->
{{ if eq $position `center` }}
{{ .Scratch.Set "position" "img-center" }}
{{ else if eq $position `left` }}
{{ .Scratch.Set "position" "img-left" }}
{{ else if eq $position `right` }}
{{ .Scratch.Set "position" "img-right" }}
{{ else if eq $position `float-left` }}
{{ .Scratch.Set "position" "img-float-left" }}
{{ else if eq $position `float-right` }}
{{ .Scratch.Set "position" "img-float-right" }}
{{ end }}
<!-- check cdn image -->
{{ if or (hasPrefix $imagePath "http") (fileExists (add `static/` $imagePath)) }}
<!-- cdn image figure -->
{{ if $caption }}
<figure class="{{.Scratch.Get `position`}}" role="group" aria-describedby="caption-{{ $caption | markdownify }}">
<img title="{{$title}}" loading="lazy" decoding="async" src="{{ $imagePath | absURL }}" alt="{{ $alt }}" class="{{$class}}" width="{{$width}}" height="{{$height}}">
<figcaption id="caption-{{ $caption | markdownify }}">{{$caption | markdownify}}</figcaption>
</figure>
{{ else }}
<!-- cdn image tag -->
<img title="{{$title}}" loading="lazy" decoding="async" src="{{ $imagePath | absURL }}" alt="{{ $alt }}" class="{{$class}} {{.Scratch.Get `position`}}" width="{{$width}}" height="{{$height}}">
{{ end }}
<!-- /cdn image -->
{{ else }}
<!-- content and assets image path variable -->
{{ $contentImage:= .Page.Resources.GetMatch (printf "*%s*" $imagePath) }}
{{ $assetImage:= fileExists (add `assets/` $imagePath) }}
<!-- check image existence -->
{{ if or $contentImage $assetImage }}
<!-- content or assets folder detection -->
{{ if $contentImage }}
{{ .Scratch.Set "image-exists" $contentImage }}
{{ else if $assetImage }}
{{ .Scratch.Set "image-exists" (resources.Get $imagePath) }}
{{ end }}
{{ $image:= .Scratch.Get "image-exists" }}
<!-- image extension -->
{{ $imageExt := path.Ext $image }}
<!-- image height, width (if not svg) -->
{{ if eq $imageExt `.svg` }}
{{ .Scratch.Set "image-height" "" }}
{{ .Scratch.Set "image-width" "" }}
{{ else }}
{{ .Scratch.Set "image-height" $image.Height }}
{{ .Scratch.Set "image-width" $image.Width }}
{{ end }}
{{ $imageHeight:= .Scratch.Get "image-height" }}
{{ $imageWidth:= .Scratch.Get "image-width" }}
<!-- checking gif/svg image -->
{{ if or (eq $imageExt `.gif`) (eq $imageExt `.svg`) }}
{{ .Scratch.Set `image` $image.RelPermalink }}
{{ else }}
<!-- image processing -->
{{ $options:= add (add (add (add (string ($width | default $imageWidth)) "x") (string ($height | default $imageHeight))) " webp ") (string $option) }}
<!-- image Fit -->
{{ if eq $command `Fit` }}
{{ .Scratch.Set `image` ($image.Fit $options).RelPermalink }}
{{ .Scratch.Set `fallback` ($image.Fit (replace $options `webp` ``)).RelPermalink }}
<!-- image Fill -->
{{ else if eq $command `Fill` }}
{{ .Scratch.Set `image` ($image.Fill $options).RelPermalink }}
{{ .Scratch.Set `fallback` ($image.Fill (replace $options `webp` ``)).RelPermalink }}
<!-- image Resize -->
{{ else }}
{{ .Scratch.Set `image` ($image.Resize $options).RelPermalink }}
{{ .Scratch.Set `fallback` ($image.Resize (replace $options `webp` ``)).RelPermalink }}
{{ end }}
{{ end }}
<!-- /checking gif/svg image -->
<!-- image figure -->
{{ if $caption }}
<figure class="{{.Scratch.Get `position`}}" role="group" aria-describedby="caption-{{ $caption | markdownify }}">
<img title="{{$title}}" loading="lazy" decoding="async" class="{{$class}}" width="{{$width | default $imageWidth }}" height="{{$height | default $imageHeight}}" src="{{.Scratch.Get `image`}}" alt="{{$alt}}" onerror="this.onerror='null';this.src='{{.Scratch.Get `fallback`}}'">
<figcaption id="caption-{{ $caption | markdownify }}">{{$caption | markdownify}}</figcaption>
</figure>
{{ else }}
<!-- image tag -->
<img title="{{$title}}" loading="lazy" decoding="async" class="{{$class}} {{.Scratch.Get `position`}}" width="{{$width | default $imageWidth }}" height="{{$height | default $imageHeight}}" src="{{.Scratch.Get `image`}}" alt="{{$alt}}" onerror="this.onerror='null';this.src='{{.Scratch.Get `fallback`}}'">
{{ end }}
{{ else }}
<!-- image not found -->
<strong class="text-danger mb-3 d-inline-block">{{site.BaseURL}}{{$imagePath}} does not exist</strong>
{{ end }}
<!-- /check image existance -->
{{ end }}
<!-- /check cdn image -->

View file

@ -0,0 +1,3 @@
<div class="tab-pane" title="{{ .Get 0 }}">
{{ .Inner | markdownify}}
</div>

View file

@ -0,0 +1,4 @@
<div class="code-tabs">
<ul class="nav nav-tabs"></ul>
<div class="tab-content">{{ .Inner }}</div>
</div>