Use Kiste
This commit is contained in:
parent
925ecec652
commit
19b9bae0ee
25 changed files with 479 additions and 1054 deletions
|
@ -1,5 +1,6 @@
|
||||||
# moritz-ruth.de
|
# moritz-ruth.de
|
||||||
|
|
||||||
|
|
||||||
> The official website of Moritz Ruth
|
> The official website of Moritz Ruth
|
||||||
|
|
||||||
## Build Setup
|
## Build Setup
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
@mixin mobile() {
|
|
||||||
@media (max-width: 800px) {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin notMobile() {
|
|
||||||
@media (min-width: 801px) {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
$content-width: 1000px;
|
|
||||||
$content-padding: 20px;
|
|
||||||
$small-gutter: 10px;
|
|
||||||
|
|
||||||
$black-brighter: #0e0e0e;
|
|
||||||
|
|
||||||
$blue: #3695d8;
|
|
||||||
$on-blue: black;
|
|
||||||
$blue-darker: #3289c7;
|
|
|
@ -1,4 +0,0 @@
|
||||||
@import "content";
|
|
||||||
@import "link";
|
|
||||||
@import "heading";
|
|
||||||
@import "paragraph";
|
|
|
@ -1,11 +0,0 @@
|
||||||
@import "../variables";
|
|
||||||
|
|
||||||
.content {
|
|
||||||
width: $content-width;
|
|
||||||
margin: 0 auto;
|
|
||||||
|
|
||||||
@media (max-width: #{$content-width + $content-padding * 2}) {
|
|
||||||
width: 100%;
|
|
||||||
padding: 0 #{$content-padding};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
.heading--1, .heading--2, .heading--3, .heading--4, .heading--5, .heading--6 {
|
|
||||||
margin-top: 1rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading--1 {
|
|
||||||
font-size: 3.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading--2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading--3 {
|
|
||||||
font-size: 2.6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading--4 {
|
|
||||||
font-size: 2.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading--5 {
|
|
||||||
font-size: 1.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.heading--6 {
|
|
||||||
font-size: 1.4rem;
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
@import "../variables";
|
|
||||||
|
|
||||||
.link {
|
|
||||||
color: $blue;
|
|
||||||
text-decoration: none;
|
|
||||||
|
|
||||||
transition: 100ms linear opacity;
|
|
||||||
opacity: 1;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
.paragraph {
|
|
||||||
margin: 20px 0;
|
|
||||||
|
|
||||||
li {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
@import "elements/_all";
|
|
||||||
|
|
||||||
@import "mobile";
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--navbar-height: 100px;
|
|
||||||
|
|
||||||
@include mobile {
|
|
||||||
--navbar-height: 80px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*, ::before, ::after {
|
|
||||||
box-sizing: border-box;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: "Alata", sans-serif;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
html, body, #__nuxt, #__layout, .fill-screen {
|
|
||||||
max-width: 100vw;
|
|
||||||
min-height: 100vh;
|
|
||||||
overflow-x: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
::selection {
|
|
||||||
background-color: #dddddd;
|
|
||||||
}
|
|
3
assets/global.scss
Normal file
3
assets/global.scss
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body {
|
||||||
|
font-family: "Alata", sans-serif;
|
||||||
|
}
|
|
@ -1,4 +0,0 @@
|
||||||
export const footer = Object.freeze([
|
|
||||||
{ label: "Legal Notice", to: "/legal-notice" },
|
|
||||||
{ label: "Privacy Policy", to: "/privacy-policy" }
|
|
||||||
]);
|
|
|
@ -7,6 +7,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
$logo-width: 270px;
|
||||||
|
|
||||||
.animated-logo {
|
.animated-logo {
|
||||||
animation: logo-width 800ms 1s ease, logo-height 600ms 1.9s ease;
|
animation: logo-width 800ms 1s ease, logo-height 600ms 1.9s ease;
|
||||||
animation-fill-mode: both;
|
animation-fill-mode: both;
|
||||||
|
@ -27,7 +29,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
width: 300px;
|
width: $logo-width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +73,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.animated-logo__logo {
|
.animated-logo__logo {
|
||||||
width: 300px;
|
width: $logo-width;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
<template>
|
|
||||||
<a
|
|
||||||
class="external-link link"
|
|
||||||
rel="noopener"
|
|
||||||
target="_blank"
|
|
||||||
:href="href"
|
|
||||||
>{{ label || href }}<ExternalIcon class="external-link__icon"/></a>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.external-link {
|
|
||||||
padding-right: 5px;
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
.external-link__icon {
|
|
||||||
margin-left: 5px;
|
|
||||||
|
|
||||||
width: 15px;
|
|
||||||
position: relative;
|
|
||||||
top: 2px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import ExternalIcon from "@/assets/icons/external.svg";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "ExternalLink",
|
|
||||||
components: { ExternalIcon },
|
|
||||||
props: {
|
|
||||||
href: {
|
|
||||||
type: String,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
label: {
|
|
||||||
type: String,
|
|
||||||
default: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
|
@ -1,117 +0,0 @@
|
||||||
<style scoped lang="scss">
|
|
||||||
@import "~@/assets/css/variables";
|
|
||||||
|
|
||||||
.button {
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
padding: 8px 15px;
|
|
||||||
border-radius: 4px;
|
|
||||||
|
|
||||||
height: 42px;
|
|
||||||
|
|
||||||
text-decoration: none;
|
|
||||||
color: $blue;
|
|
||||||
|
|
||||||
transition: 140ms ease background-color;
|
|
||||||
&:hover {
|
|
||||||
background: transparentize($blue, 0.9);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.button__text {
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button__prefix > * {
|
|
||||||
position: relative;
|
|
||||||
top: 2px;
|
|
||||||
margin-right: 6px;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button__suffix > * {
|
|
||||||
position: relative;
|
|
||||||
top: 2px;
|
|
||||||
margin-left: 6px;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: "GButton",
|
|
||||||
props: {
|
|
||||||
to: {
|
|
||||||
type: String,
|
|
||||||
default: ""
|
|
||||||
},
|
|
||||||
href: {
|
|
||||||
type: String,
|
|
||||||
default: ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
isExternalLink: vm => Boolean(vm.href),
|
|
||||||
isInternalLink: vm => Boolean(vm.to)
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onClick(e) {
|
|
||||||
this.$emit("click", e);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
render(h) {
|
|
||||||
const children = [
|
|
||||||
h("div", {
|
|
||||||
class: "button__prefix"
|
|
||||||
}, this.$slots.prefix),
|
|
||||||
h("div", {
|
|
||||||
class: "button__text"
|
|
||||||
}, this.$slots.default),
|
|
||||||
h("div", {
|
|
||||||
class: "button__suffix"
|
|
||||||
}, this.$slots.suffix)
|
|
||||||
];
|
|
||||||
|
|
||||||
const baseOptions = {
|
|
||||||
class: "button",
|
|
||||||
on: {
|
|
||||||
click: this.onClick
|
|
||||||
},
|
|
||||||
directives: [
|
|
||||||
{
|
|
||||||
name: "ripple",
|
|
||||||
value: "rgba(0, 0, 0, 0.2)"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
if (this.isInternalLink) {
|
|
||||||
return h("nuxt-link", {
|
|
||||||
...baseOptions,
|
|
||||||
props: {
|
|
||||||
to: this.to
|
|
||||||
}
|
|
||||||
}, children);
|
|
||||||
} else if (this.isExternalLink) {
|
|
||||||
return h("a", {
|
|
||||||
...baseOptions,
|
|
||||||
attrs: {
|
|
||||||
href: this.href,
|
|
||||||
rel: "noopener"
|
|
||||||
}
|
|
||||||
}, children);
|
|
||||||
} else {
|
|
||||||
return h("div", {
|
|
||||||
...baseOptions,
|
|
||||||
attrs: {
|
|
||||||
role: "button"
|
|
||||||
}
|
|
||||||
}, children);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
|
@ -1,290 +0,0 @@
|
||||||
<template>
|
|
||||||
<nav class="navigation-bar" :class="{ 'show-background': showBackground, open, scrolled }">
|
|
||||||
<div class="navigation-bar__toggle" @click="open = !open">
|
|
||||||
<span></span>
|
|
||||||
<span></span>
|
|
||||||
<span></span>
|
|
||||||
</div>
|
|
||||||
<div class="navigation-bar__container-1 content">
|
|
||||||
<span class="navigation-bar__title">{{ title }}</span>
|
|
||||||
<div class="navigation-bar__container-2">
|
|
||||||
<div class="navigation-bar__links">
|
|
||||||
<template v-for="item in $options.navigationItems">
|
|
||||||
<nuxt-link
|
|
||||||
v-if="item.to"
|
|
||||||
:key="item.to"
|
|
||||||
:to="item.to"
|
|
||||||
@click.native.passive="open = false"
|
|
||||||
>
|
|
||||||
{{ item.label }}
|
|
||||||
</nuxt-link>
|
|
||||||
<a
|
|
||||||
v-else
|
|
||||||
:key="item.to"
|
|
||||||
rel="noopener"
|
|
||||||
:href="item.href"
|
|
||||||
@click.native.passive="open = false"
|
|
||||||
>
|
|
||||||
{{ item.label }}
|
|
||||||
</a>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@import "~@/assets/css/mobile";
|
|
||||||
@import "~@/assets/css/variables";
|
|
||||||
|
|
||||||
.navigation-bar {
|
|
||||||
height: var(--navbar-height);
|
|
||||||
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
z-index: 2;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
font-size: 1.1rem;
|
|
||||||
text-transform: uppercase;
|
|
||||||
|
|
||||||
background-color: transparent;
|
|
||||||
|
|
||||||
&.show-background {
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.scrolled {
|
|
||||||
.navigation-bar__title {
|
|
||||||
opacity: 1;
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__toggle {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__title {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
font-weight: bold;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
flex-shrink: 0;
|
|
||||||
max-width: calc(100% - 10px);
|
|
||||||
|
|
||||||
transition: 200ms ease;
|
|
||||||
transition-property: opacity, transform;
|
|
||||||
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(10px);
|
|
||||||
|
|
||||||
@include notMobile {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__container-1 {
|
|
||||||
max-width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__container-2 {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__links {
|
|
||||||
float: right;
|
|
||||||
|
|
||||||
a {
|
|
||||||
display: inline-block;
|
|
||||||
margin-left: 40px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
text-decoration: none;
|
|
||||||
color: black;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
top: 30px;
|
|
||||||
left: 0;
|
|
||||||
background-color: black;
|
|
||||||
height: 2px;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
opacity: 0;
|
|
||||||
transition: 200ms linear opacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
&::after {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@include mobile {
|
|
||||||
.navigation-bar__toggle {
|
|
||||||
display: block;
|
|
||||||
|
|
||||||
position: relative;
|
|
||||||
left: 30px;
|
|
||||||
z-index: 2;
|
|
||||||
|
|
||||||
& > span {
|
|
||||||
display: block;
|
|
||||||
|
|
||||||
background-color: black;
|
|
||||||
|
|
||||||
width: 30px;
|
|
||||||
height: 2px;
|
|
||||||
|
|
||||||
transition: 200ms linear;
|
|
||||||
transition-property: opacity, transform;
|
|
||||||
|
|
||||||
&:nth-child(2) {
|
|
||||||
margin-top: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:nth-child(3) {
|
|
||||||
margin-top: 8px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__container-1 {
|
|
||||||
margin-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__container-2 {
|
|
||||||
pointer-events: none;
|
|
||||||
background-color: white;
|
|
||||||
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100vh;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
padding-top: var(--navbar-height);
|
|
||||||
|
|
||||||
opacity: 0;
|
|
||||||
transition: 200ms ease-out opacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__links {
|
|
||||||
float: none;
|
|
||||||
|
|
||||||
& > a {
|
|
||||||
display: block;
|
|
||||||
width: fit-content;
|
|
||||||
margin: 0 auto 20px;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
|
|
||||||
transform: translateX(-100%);
|
|
||||||
opacity: 0;
|
|
||||||
transition: 400ms ease-out;
|
|
||||||
transition-property: opacity, transform;
|
|
||||||
|
|
||||||
&:after {
|
|
||||||
top: 35px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar.open {
|
|
||||||
.navigation-bar__toggle > span {
|
|
||||||
&:nth-child(1) {
|
|
||||||
transform: translateY(10px) rotate(45deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:nth-child(2) {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:nth-child(3) {
|
|
||||||
transform: translateY(-10px) rotate(-45deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__container-2 {
|
|
||||||
pointer-events: auto;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navigation-bar__links > a {
|
|
||||||
transform: translateX(0);
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const NAVIGATION_ITEMS = [
|
|
||||||
{
|
|
||||||
label: "Home",
|
|
||||||
to: "/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Projects",
|
|
||||||
to: "/projects"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "NavigationBar",
|
|
||||||
navigationItems: NAVIGATION_ITEMS,
|
|
||||||
props: {
|
|
||||||
showBackground: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
type: String,
|
|
||||||
default: ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data: () => ({
|
|
||||||
open: false,
|
|
||||||
scrollPosition: 0
|
|
||||||
}),
|
|
||||||
computed: {
|
|
||||||
scrolled: vm => vm.scrollPosition > 50
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
const scrollListener = () => {
|
|
||||||
this.scrollPosition = window.scrollY;
|
|
||||||
};
|
|
||||||
|
|
||||||
window.addEventListener("scroll", scrollListener, { passive: true });
|
|
||||||
|
|
||||||
this.$on("hook:beforeDestroy", () => {
|
|
||||||
window.removeEventListener("scroll", scrollListener);
|
|
||||||
});
|
|
||||||
|
|
||||||
scrollListener();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
|
@ -8,32 +8,30 @@
|
||||||
<slot/>
|
<slot/>
|
||||||
</div>
|
</div>
|
||||||
<hr class="project__divider"/>
|
<hr class="project__divider"/>
|
||||||
<div class="project__buttons">
|
<div class="project__buttons flex-with-gutter">
|
||||||
<GButton v-if="link" class="project__button" :href="link">
|
<KButton v-if="link" :href="link">
|
||||||
Open
|
Open
|
||||||
<template v-slot:suffix>
|
<template v-slot:suffix>
|
||||||
<ArrowRightIcon/>
|
<ArrowRightIcon/>
|
||||||
</template>
|
</template>
|
||||||
</GButton>
|
</KButton>
|
||||||
<GButton v-if="github" class="project__button" :href="`https://github.com/${github}`">
|
<KButton v-if="github" :href="`https://github.com/${github}`">
|
||||||
GitHub
|
GitHub
|
||||||
<template v-slot:prefix>
|
<template v-slot:prefix>
|
||||||
<GitHubIcon/>
|
<GitHubIcon/>
|
||||||
</template>
|
</template>
|
||||||
</GButton>
|
</KButton>
|
||||||
<GButton v-if="npm" class="project__button" :href="`https://www.npmjs.com/package/${npm}`">
|
<KButton v-if="npm" :href="`https://www.npmjs.com/package/${npm}`">
|
||||||
NPM
|
NPM
|
||||||
<template v-slot:prefix>
|
<template v-slot:prefix>
|
||||||
<NPMIcon style="width: 30px; top: 4px"/>
|
<NPMIcon style="width: 30px; top: 4px"/>
|
||||||
</template>
|
</template>
|
||||||
</GButton>
|
</KButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import "~@/assets/css/variables";
|
|
||||||
|
|
||||||
.project__type {
|
.project__type {
|
||||||
margin-top: -1rem;
|
margin-top: -1rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
|
@ -55,30 +53,21 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.project__buttons {
|
.project__buttons {
|
||||||
display: flex;
|
& > *:not(:last-child) {
|
||||||
}
|
margin-right: 5px;
|
||||||
|
|
||||||
.project__button {
|
|
||||||
&:not(:last-child) {
|
|
||||||
margin-right: $small-gutter;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.project__button-icon {
|
|
||||||
width: 10px;
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import KButton from "kiste/components/KButton";
|
||||||
import ArrowRightIcon from "@/assets/icons/arrow_right.svg";
|
import ArrowRightIcon from "@/assets/icons/arrow_right.svg";
|
||||||
import GitHubIcon from "@/assets/icons/github.svg";
|
import GitHubIcon from "@/assets/icons/github.svg";
|
||||||
import NPMIcon from "@/assets/icons/npm.svg";
|
import NPMIcon from "@/assets/icons/npm.svg";
|
||||||
import GButton from "@/components/GButton";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "GProject",
|
name: "GProject",
|
||||||
components: { GButton, ArrowRightIcon, GitHubIcon, NPMIcon },
|
components: { KButton, ArrowRightIcon, GitHubIcon, NPMIcon },
|
||||||
props: {
|
props: {
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
|
|
|
@ -1,63 +1,22 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="default-layout fill-screen">
|
<div class="default-layout fill-screen">
|
||||||
<div class="content default-layout__content">
|
<KApp>
|
||||||
<nuxt/>
|
<nuxt/>
|
||||||
</div>
|
<KFooter/>
|
||||||
<footer class="content default-layout__footer">
|
</KApp>
|
||||||
<nuxt-link
|
|
||||||
v-for="link in $options.footer"
|
|
||||||
:key="link.to"
|
|
||||||
class="default-layout__footer-link"
|
|
||||||
:to="link.to"
|
|
||||||
>
|
|
||||||
{{ link.label }}
|
|
||||||
</nuxt-link>
|
|
||||||
</footer>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import "~@/assets/css/variables";
|
|
||||||
@import "~@/assets/css/mobile";
|
|
||||||
|
|
||||||
.default-layout__content {
|
|
||||||
margin-top: var(--navbar-height);
|
|
||||||
margin-bottom: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.default-layout__footer {
|
|
||||||
margin-bottom: 40px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
@include mobile {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.default-layout__footer-link {
|
|
||||||
color: #606060;
|
|
||||||
text-decoration: none;
|
|
||||||
flex-shrink: 0;
|
|
||||||
|
|
||||||
margin: 10px;
|
|
||||||
|
|
||||||
transition: 100ms linear color;
|
|
||||||
&:hover {
|
|
||||||
color: $blue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { footer } from "@/assets/js/footer";
|
import KApp from "kiste/components/KApp";
|
||||||
|
import KFooter from "kiste/components/KFooter";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "DefaultLayout",
|
name: "DefaultLayout",
|
||||||
components: {},
|
components: { KApp, KFooter }
|
||||||
footer
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<nuxt/>
|
<KApp>
|
||||||
|
<nuxt/>
|
||||||
|
</KApp>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
@ -7,7 +9,10 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import KApp from "kiste/components/KApp";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "NoneLayout"
|
name: "WithoutFooterLayout",
|
||||||
|
components: { KApp }
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -17,7 +17,7 @@ export default {
|
||||||
** Global CSS
|
** Global CSS
|
||||||
*/
|
*/
|
||||||
css: [
|
css: [
|
||||||
"@/assets/css/global.scss"
|
"@/assets/global.scss"
|
||||||
],
|
],
|
||||||
/*
|
/*
|
||||||
** Plugins to load before mounting the App
|
** Plugins to load before mounting the App
|
||||||
|
@ -30,7 +30,8 @@ export default {
|
||||||
*/
|
*/
|
||||||
buildModules: [
|
buildModules: [
|
||||||
// Doc: https://github.com/nuxt-community/eslint-module
|
// Doc: https://github.com/nuxt-community/eslint-module
|
||||||
"@nuxtjs/eslint-module"
|
"@nuxtjs/eslint-module",
|
||||||
|
"kiste/nuxt"
|
||||||
],
|
],
|
||||||
/*
|
/*
|
||||||
** Nuxt.js modules
|
** Nuxt.js modules
|
||||||
|
@ -40,6 +41,32 @@ export default {
|
||||||
"@nuxtjs/pwa"
|
"@nuxtjs/pwa"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
kiste: {
|
||||||
|
theme: {
|
||||||
|
contentPadding: "10px"
|
||||||
|
},
|
||||||
|
navigationItems: [
|
||||||
|
{
|
||||||
|
label: "Home",
|
||||||
|
to: "/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Projects",
|
||||||
|
to: "/projects"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
footerItems: [
|
||||||
|
{
|
||||||
|
label: "Legal Notice",
|
||||||
|
to: "/legal-notice"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Privacy Policy",
|
||||||
|
to: "/privacy-policy"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
// https://pwa.nuxtjs.org/modules/workbox.html
|
// https://pwa.nuxtjs.org/modules/workbox.html
|
||||||
workbox: {
|
workbox: {
|
||||||
workboxExtensions: [
|
workboxExtensions: [
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
"eslint-plugin-nuxt": ">=0.4.2",
|
"eslint-plugin-nuxt": ">=0.4.2",
|
||||||
"eslint-plugin-vue": "^6.0.1",
|
"eslint-plugin-vue": "^6.0.1",
|
||||||
"fibers": "^4.0.2",
|
"fibers": "^4.0.2",
|
||||||
|
"kiste": "^1.2.0",
|
||||||
"sass": "^1.23.7",
|
"sass": "^1.23.7",
|
||||||
"sass-loader": "^8.0.0",
|
"sass-loader": "^8.0.0",
|
||||||
"serve": "^11.2.0",
|
"serve": "^11.2.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="index-page">
|
<div class="index-page">
|
||||||
<NavigationBar show-background/>
|
<KNavigationBar/>
|
||||||
<AnimatedLogo/>
|
<AnimatedLogo/>
|
||||||
<main class="index-page__content">
|
<main class="index-page__content">
|
||||||
<div class="index-page__name">
|
<div class="index-page__name">
|
||||||
|
@ -21,22 +21,12 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<footer class="index-page__footer">
|
<KFooter class="index-page__footer"/>
|
||||||
<nuxt-link
|
|
||||||
v-for="link in $options.footer"
|
|
||||||
:key="link.to"
|
|
||||||
class="index-page__footer-link"
|
|
||||||
:to="link.to"
|
|
||||||
>
|
|
||||||
{{ link.label }}
|
|
||||||
</nuxt-link>
|
|
||||||
</footer>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import "~@/assets/css/variables";
|
@use "~kiste/css/mixins/screenSize";
|
||||||
@import "~@/assets/css/mobile";
|
|
||||||
|
|
||||||
.index-page {
|
.index-page {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -44,7 +34,7 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
height: 100vh;
|
height: calc(100vh - var(--x-navbar-height));
|
||||||
}
|
}
|
||||||
|
|
||||||
.index-page__name {
|
.index-page__name {
|
||||||
|
@ -93,56 +83,36 @@
|
||||||
|
|
||||||
.index-page__footer {
|
.index-page__footer {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100vh;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
|
|
||||||
padding: 20px 0;
|
padding: 20px 0;
|
||||||
|
|
||||||
display: flex;
|
margin-bottom: 10px;
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
@include notMobile {
|
@include screenSize.notMobile {
|
||||||
top: unset;
|
top: unset;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.index-page__footer-link {
|
|
||||||
color: #606060;
|
|
||||||
text-decoration: none;
|
|
||||||
flex-shrink: 0;
|
|
||||||
|
|
||||||
margin: 0 10px;
|
|
||||||
|
|
||||||
transition: 100ms linear color;
|
|
||||||
&:hover {
|
|
||||||
color: $blue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import KNavigationBar from "kiste/components/KNavigationBar";
|
||||||
|
import KFooter from "kiste/components/KFooter";
|
||||||
import AnimatedLogo from "../components/AnimatedLogo";
|
import AnimatedLogo from "../components/AnimatedLogo";
|
||||||
import GitHubIcon from "@/assets/icons/github.svg";
|
import GitHubIcon from "@/assets/icons/github.svg";
|
||||||
import TwitterIcon from "@/assets/icons/twitter.svg";
|
import TwitterIcon from "@/assets/icons/twitter.svg";
|
||||||
import InstagramIcon from "@/assets/icons/instagram.svg";
|
import InstagramIcon from "@/assets/icons/instagram.svg";
|
||||||
import EmailIcon from "@/assets/icons/email.svg";
|
import EmailIcon from "@/assets/icons/email.svg";
|
||||||
import NavigationBar from "@/components/NavigationBar";
|
|
||||||
import { footer } from "@/assets/js/footer";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "IndexPage",
|
name: "IndexPage",
|
||||||
layout: "none",
|
layout: "none",
|
||||||
components: { NavigationBar, AnimatedLogo, GitHubIcon, TwitterIcon, InstagramIcon, EmailIcon },
|
components: { AnimatedLogo, GitHubIcon, TwitterIcon, InstagramIcon, EmailIcon, KNavigationBar, KFooter }
|
||||||
footer
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,79 +1,77 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="legal-notice-page">
|
<div class="legal-notice-page">
|
||||||
<NavigationBar show-background title="Legal Notice"/>
|
<KNavigationBar title="Legal Notice"/>
|
||||||
<h1 class="heading--1">
|
<div class="content">
|
||||||
Legal Notice
|
<h1 class="heading--1">
|
||||||
</h1>
|
Legal Notice
|
||||||
<h2 class="heading--3">
|
</h1>
|
||||||
Diensteanbieter
|
<h2 class="heading--3">
|
||||||
</h2>
|
Diensteanbieter
|
||||||
<p class="paragraph">
|
</h2>
|
||||||
Moritz Ruth<br>
|
<p class="paragraph">
|
||||||
Zum Galgenberg 19<br>
|
Moritz Ruth<br>
|
||||||
66539 Neunkirchen<br>
|
Zum Galgenberg 19<br>
|
||||||
Deutschland
|
66539 Neunkirchen<br>
|
||||||
</p>
|
Deutschland
|
||||||
<h2 class="heading--3">
|
</p>
|
||||||
Kontaktmöglichkeiten
|
<h2 class="heading--3">
|
||||||
</h2>
|
Kontaktmöglichkeiten
|
||||||
<p class="paragraph">
|
</h2>
|
||||||
<b>Telefon</b>: +49 176 46146329
|
<p class="paragraph">
|
||||||
</p>
|
<b>Telefon</b>: +49 176 46146329
|
||||||
<p class="paragraph">
|
</p>
|
||||||
<b>E-Mail</b>: <a class="link" href="mailto:legal@moritz-ruth.de">legal@moritz-ruth.de</a>
|
<p class="paragraph">
|
||||||
</p>
|
<b>E-Mail</b>: <a class="link" href="mailto:legal@moritz-ruth.de">legal@moritz-ruth.de</a>
|
||||||
<h2 class="heading--3">
|
</p>
|
||||||
Haftungs- und Urheberrechtshinweise
|
<h2 class="heading--3">
|
||||||
</h2>
|
Haftungs- und Urheberrechtshinweise
|
||||||
<p class="paragraph">
|
</h2>
|
||||||
<b>Haftungsausschluss</b>:
|
<p class="paragraph">
|
||||||
Die Inhalte dieses Onlineangebotes wurden sorgfältig und nach unserem aktuellen Kenntnisstand
|
<b>Haftungsausschluss</b>:
|
||||||
erstellt, dienen jedoch nur der Information und entfalten keine rechtlich bindende Wirkung, sofern es sich nicht
|
Die Inhalte dieses Onlineangebotes wurden sorgfältig und nach unserem aktuellen Kenntnisstand
|
||||||
um gesetzlich verpflichtende Informationen (z.B. das Impressum, die Datenschutzerklärung, AGB oder
|
erstellt, dienen jedoch nur der Information und entfalten keine rechtlich bindende Wirkung, sofern es sich nicht
|
||||||
Widerrufsbelehrungen für Verbraucher) handelt. Wir behalten uns vor, die Inhalte vollständig oder teilweise zu
|
um gesetzlich verpflichtende Informationen (z.B. das Impressum, die Datenschutzerklärung, AGB oder
|
||||||
ändern oder zu löschen, soweit vertragliche Verpflichtungen unberührt bleiben. Alle Angebote sind freibleibend und
|
Widerrufsbelehrungen für Verbraucher) handelt. Wir behalten uns vor, die Inhalte vollständig oder teilweise zu
|
||||||
unverbindlich.
|
ändern oder zu löschen, soweit vertragliche Verpflichtungen unberührt bleiben. Alle Angebote sind freibleibend und
|
||||||
</p>
|
unverbindlich.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
<b>Links auf fremde Webseiten</b>:
|
<p class="paragraph">
|
||||||
Inhalte fremder Webseiten, auf die wir direkt oder indirekt verweisen, liegen
|
<b>Links auf fremde Webseiten</b>:
|
||||||
außerhalb unseres Verantwortungsbereiches und machen wir uns nicht zu Eigen. Für alle Inhalte und insbesondere für
|
Inhalte fremder Webseiten, auf die wir direkt oder indirekt verweisen, liegen
|
||||||
Schäden, die aus der Nutzung der in den verlinkten Webseiten aufrufbaren Informationen entstehen, haftet allein
|
außerhalb unseres Verantwortungsbereiches und machen wir uns nicht zu Eigen. Für alle Inhalte und insbesondere für
|
||||||
der Anbieter der verlinkten Webseiten.
|
Schäden, die aus der Nutzung der in den verlinkten Webseiten aufrufbaren Informationen entstehen, haftet allein
|
||||||
</p>
|
der Anbieter der verlinkten Webseiten.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
<b>Urheberrechte und Markenrechte</b>:
|
<p class="paragraph">
|
||||||
Alle auf dieser Website dargestellten Inhalte, wie Texte, Fotografien, Grafiken,
|
<b>Urheberrechte und Markenrechte</b>:
|
||||||
Marken und Warenzeichen sind durch die jeweiligen Schutzrechte (Urheberrechte, Markenrechte) geschützt. Die
|
Alle auf dieser Website dargestellten Inhalte, wie Texte, Fotografien, Grafiken,
|
||||||
Verwendung, Vervielfältigung usw. unterliegen unseren Rechten oder den Rechten der jeweiligen Urheber bzw.
|
Marken und Warenzeichen sind durch die jeweiligen Schutzrechte (Urheberrechte, Markenrechte) geschützt. Die
|
||||||
Rechteverwalter.
|
Verwendung, Vervielfältigung usw. unterliegen unseren Rechten oder den Rechten der jeweiligen Urheber bzw.
|
||||||
</p>
|
Rechteverwalter.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
<b>Hinweise auf Rechtsverstöße</b>:
|
<p class="paragraph">
|
||||||
Sollten Sie innerhalb unseres Internetauftritts Rechtsverstöße bemerken, bitten wir
|
<b>Hinweise auf Rechtsverstöße</b>:
|
||||||
Sie uns auf diese hinzuweisen. Wir werden rechtswidrige Inhalte und Links nach Kenntnisnahme unverzüglich
|
Sollten Sie innerhalb unseres Internetauftritts Rechtsverstöße bemerken, bitten wir
|
||||||
entfernen.
|
Sie uns auf diese hinzuweisen. Wir werden rechtswidrige Inhalte und Links nach Kenntnisnahme unverzüglich
|
||||||
</p>
|
entfernen.
|
||||||
<a
|
</p>
|
||||||
class="link"
|
<a
|
||||||
href="https://datenschutz-generator.de/?l=de"
|
class="link"
|
||||||
rel="noopener"
|
href="https://datenschutz-generator.de/?l=de"
|
||||||
title="Rechtstext von Dr. Schwenke - für weitere Informationen bitte anklicken."
|
rel="noopener"
|
||||||
target="_blank"
|
title="Rechtstext von Dr. Schwenke - für weitere Informationen bitte anklicken."
|
||||||
>Erstellt mit kostenlosem Datenschutz-Generator.de von Dr. Thomas Schwenke</a>
|
target="_blank"
|
||||||
|
>Erstellt mit kostenlosem Datenschutz-Generator.de von Dr. Thomas Schwenke</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import NavigationBar from "@/components/NavigationBar";
|
import KNavigationBar from "kiste/components/KNavigationBar";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "LegalNoticePage",
|
name: "LegalNoticePage",
|
||||||
components: { NavigationBar },
|
components: { KNavigationBar },
|
||||||
head: {
|
head: {
|
||||||
htmlAttrs: {
|
htmlAttrs: {
|
||||||
lang: "de"
|
lang: "de"
|
||||||
|
|
|
@ -1,273 +1,279 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="privacy-policy-page">
|
<div class="privacy-policy-page">
|
||||||
<NavigationBar show-background title="Datenschutzerklärung"/>
|
<KNavigationBar title="Datenschutzerklärung"/>
|
||||||
<h1 class="heading--1">
|
<div class="content">
|
||||||
Datenschutzerklärung
|
<h1 class="heading--1">
|
||||||
</h1>
|
Datenschutzerklärung
|
||||||
<p class="paragraph">
|
</h1>
|
||||||
Verantwortlicher im Sinne der Datenschutzgesetze, insbesondere der EU-Datenschutzgrundverordnung (DSGVO), ist:
|
<p class="paragraph">
|
||||||
</p>
|
Verantwortlicher im Sinne der Datenschutzgesetze, insbesondere der EU-Datenschutzgrundverordnung (DSGVO), ist:
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Moritz Ruth<br>
|
<p class="paragraph">
|
||||||
Zum Galgenberg 19<br>
|
Moritz Ruth<br>
|
||||||
66539 Neunkirchen<br>
|
Zum Galgenberg 19<br>
|
||||||
Deutschland
|
66539 Neunkirchen<br>
|
||||||
</p>
|
Deutschland
|
||||||
<h2 class="heading--2">
|
</p>
|
||||||
Ihre Betroffenenrechte
|
<h2 class="heading--2">
|
||||||
</h2>
|
Ihre Betroffenenrechte
|
||||||
<p class="paragraph">
|
</h2>
|
||||||
Unter den angegebenen Kontaktdaten unseres Datenschutzbeauftragten können Sie jederzeit folgende Rechte ausüben:
|
<p class="paragraph">
|
||||||
</p>
|
Unter den angegebenen Kontaktdaten unseres Datenschutzbeauftragten können Sie jederzeit folgende Rechte ausüben:
|
||||||
<ul class="paragraph">
|
</p>
|
||||||
<li>Auskunft über Ihre bei uns gespeicherten Daten und deren Verarbeitung (Art. 15 DSGVO),</li>
|
<ul class="paragraph">
|
||||||
<li>Berichtigung unrichtiger personenbezogener Daten (Art. 16 DSGVO),</li>
|
<li>Auskunft über Ihre bei uns gespeicherten Daten und deren Verarbeitung (Art. 15 DSGVO),</li>
|
||||||
<li>Löschung Ihrer bei uns gespeicherten Daten (Art. 17 DSGVO),</li>
|
<li>Berichtigung unrichtiger personenbezogener Daten (Art. 16 DSGVO),</li>
|
||||||
<li>
|
<li>Löschung Ihrer bei uns gespeicherten Daten (Art. 17 DSGVO),</li>
|
||||||
Einschränkung der Datenverarbeitung, sofern wir Ihre Daten aufgrund gesetzlicher Pflichten noch nicht löschen
|
<li>
|
||||||
dürfen (Art. 18 DSGVO),
|
Einschränkung der Datenverarbeitung, sofern wir Ihre Daten aufgrund gesetzlicher Pflichten noch nicht löschen
|
||||||
</li>
|
dürfen (Art. 18 DSGVO),
|
||||||
<li>Widerspruch gegen die Verarbeitung Ihrer Daten bei uns (Art. 21 DSGVO) und</li>
|
</li>
|
||||||
<li>
|
<li>Widerspruch gegen die Verarbeitung Ihrer Daten bei uns (Art. 21 DSGVO) und</li>
|
||||||
Datenübertragbarkeit, sofern Sie in die Datenverarbeitung eingewilligt haben oder einen Vertrag mit uns
|
<li>
|
||||||
abgeschlossen haben (Art. 20 DSGVO).
|
Datenübertragbarkeit, sofern Sie in die Datenverarbeitung eingewilligt haben oder einen Vertrag mit uns
|
||||||
</li>
|
abgeschlossen haben (Art. 20 DSGVO).
|
||||||
</ul>
|
</li>
|
||||||
<p class="paragraph">
|
</ul>
|
||||||
Sofern Sie uns eine Einwilligung erteilt haben, können Sie diese jederzeit mit Wirkung für die Zukunft widerrufen.
|
<p class="paragraph">
|
||||||
</p>
|
Sofern Sie uns eine Einwilligung erteilt haben, können Sie diese jederzeit mit Wirkung für die Zukunft
|
||||||
<p class="paragraph">
|
widerrufen.
|
||||||
Sie können sich jederzeit mit einer Beschwerde an eine Aufsichtsbehörde wenden, z. B. an die zuständige
|
</p>
|
||||||
Aufsichtsbehörde des Bundeslands Ihres Wohnsitzes oder an die für uns als verantwortliche Stelle zuständige
|
<p class="paragraph">
|
||||||
Behörde.
|
Sie können sich jederzeit mit einer Beschwerde an eine Aufsichtsbehörde wenden, z. B. an die zuständige
|
||||||
</p>
|
Aufsichtsbehörde des Bundeslands Ihres Wohnsitzes oder an die für uns als verantwortliche Stelle zuständige
|
||||||
<p class="paragraph">
|
Behörde.
|
||||||
Eine Liste der Aufsichtsbehörden (für den nichtöffentlichen Bereich) mit Anschrift finden Sie unter:
|
</p>
|
||||||
<ExternalLink href="https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html"/>.
|
<p class="paragraph">
|
||||||
</p>
|
Eine Liste der Aufsichtsbehörden (für den nichtöffentlichen Bereich) mit Anschrift finden Sie unter:
|
||||||
<h2 class="heading--2">
|
<KExternalLink href="https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html"/>.
|
||||||
Erfassung allgemeiner Informationen beim Besuch unserer Website
|
</p>
|
||||||
</h2>
|
<h2 class="heading--2">
|
||||||
<h3 class="heading--3">
|
Erfassung allgemeiner Informationen beim Besuch unserer Website
|
||||||
Art und Zweck der Verarbeitung
|
</h2>
|
||||||
</h3>
|
<h3 class="heading--3">
|
||||||
<p class="paragraph">
|
Art und Zweck der Verarbeitung
|
||||||
Wenn Sie auf unsere Website zugreifen, d.h., wenn Sie sich nicht registrieren oder anderweitig Informationen
|
</h3>
|
||||||
übermitteln, werden automatisch Informationen allgemeiner Natur erfasst. Diese Informationen (Server-Logfiles)
|
<p class="paragraph">
|
||||||
beinhalten etwa die Art des Webbrowsers, das verwendete Betriebssystem, den Domainnamen Ihres
|
Wenn Sie auf unsere Website zugreifen, d.h., wenn Sie sich nicht registrieren oder anderweitig Informationen
|
||||||
Internet-Service-Providers, Ihre IP-Adresse und ähnliches.
|
übermitteln, werden automatisch Informationen allgemeiner Natur erfasst. Diese Informationen (Server-Logfiles)
|
||||||
</p>
|
beinhalten etwa die Art des Webbrowsers, das verwendete Betriebssystem, den Domainnamen Ihres
|
||||||
<p class="paragraph">
|
Internet-Service-Providers, Ihre IP-Adresse und ähnliches.
|
||||||
Sie werden insbesondere zu folgenden Zwecken verarbeitet
|
</p>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<ul class="paragraph">
|
Sie werden insbesondere zu folgenden Zwecken verarbeitet
|
||||||
<li>Sicherstellung eines problemlosen Verbindungsaufbaus der Website,</li>
|
</p>
|
||||||
<li>Sicherstellung einer reibungslosen Nutzung unserer Website,</li>
|
<ul class="paragraph">
|
||||||
<li>Auswertung der Systemsicherheit und -stabilität sowie</li>
|
<li>Sicherstellung eines problemlosen Verbindungsaufbaus der Website,</li>
|
||||||
<li>zu weiteren administrativen Zwecken.</li>
|
<li>Sicherstellung einer reibungslosen Nutzung unserer Website,</li>
|
||||||
</ul>
|
<li>Auswertung der Systemsicherheit und -stabilität sowie</li>
|
||||||
<p class="paragraph">
|
<li>zu weiteren administrativen Zwecken.</li>
|
||||||
Wir verwenden Ihre Daten nicht, um Rückschlüsse auf Ihre Person zu ziehen. Informationen dieser Art werden von uns
|
</ul>
|
||||||
ggfs. statistisch ausgewertet, um unseren Internetauftritt und die dahinterstehende Technik zu optimieren.
|
<p class="paragraph">
|
||||||
</p>
|
Wir verwenden Ihre Daten nicht, um Rückschlüsse auf Ihre Person zu ziehen. Informationen dieser Art werden von
|
||||||
<h3 class="heading--3">
|
uns ggfs. statistisch ausgewertet, um unseren Internetauftritt und die dahinterstehende Technik zu
|
||||||
Rechtsgrundlage
|
optimieren.
|
||||||
</h3>
|
</p>
|
||||||
<p class="paragraph">
|
<h3 class="heading--3">
|
||||||
Die Verarbeitung erfolgt gemäß Art. 6 Abs. 1 lit. f DSGVO auf Basis unseres berechtigten Interesses an der
|
Rechtsgrundlage
|
||||||
Verbesserung der Stabilität und Funktionalität unserer Website.
|
</h3>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<h3 class="heading--3">
|
Die Verarbeitung erfolgt gemäß Art. 6 Abs. 1 lit. f DSGVO auf Basis unseres berechtigten Interesses an der
|
||||||
Empfänger
|
Verbesserung der Stabilität und Funktionalität unserer Website.
|
||||||
</h3>
|
</p>
|
||||||
<p class="paragraph">
|
<h3 class="heading--3">
|
||||||
Empfänger der Daten sind ggf. technische Dienstleister, die für den Betrieb und die Wartung unserer Webseite als
|
Empfänger
|
||||||
Auftragsverarbeiter tätig werden.
|
</h3>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<h3 class="heading--3">
|
Empfänger der Daten sind ggf. technische Dienstleister, die für den Betrieb und die Wartung unserer Webseite als
|
||||||
Speicherdauer
|
Auftragsverarbeiter tätig werden.
|
||||||
</h3>
|
</p>
|
||||||
<p class="paragraph">
|
<h3 class="heading--3">
|
||||||
Die Daten werden gelöscht, sobald diese für den Zweck der Erhebung nicht mehr erforderlich sind. Dies ist für die
|
Speicherdauer
|
||||||
Daten, die der Bereitstellung der Webseite dienen, grundsätzlich der Fall, wenn die jeweilige Sitzung beendet ist.
|
</h3>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<h3 class="heading--3">
|
Die Daten werden gelöscht, sobald diese für den Zweck der Erhebung nicht mehr erforderlich sind. Dies ist für
|
||||||
Bereitstellung vorgeschrieben oder erforderlich
|
die Daten, die der Bereitstellung der Webseite dienen, grundsätzlich der Fall, wenn die jeweilige Sitzung
|
||||||
</h3>
|
beendet ist.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Die Bereitstellung der vorgenannten personenbezogenen Daten ist weder gesetzlich noch vertraglich vorgeschrieben.
|
<h3 class="heading--3">
|
||||||
Ohne die IP-Adresse ist jedoch der Dienst und die Funktionsfähigkeit unserer Website nicht gewährleistet. Zudem
|
Bereitstellung vorgeschrieben oder erforderlich
|
||||||
können einzelne Dienste und Services nicht verfügbar oder eingeschränkt sein. Aus diesem Grund ist ein Widerspruch
|
</h3>
|
||||||
ausgeschlossen.
|
<p class="paragraph">
|
||||||
</p>
|
Die Bereitstellung der vorgenannten personenbezogenen Daten ist weder gesetzlich noch vertraglich
|
||||||
<h2 class="heading--2">
|
vorgeschrieben. Ohne die IP-Adresse ist jedoch der Dienst und die Funktionsfähigkeit unserer Website nicht
|
||||||
Verwendung von Scriptbibliotheken (Google Webfonts)
|
gewährleistet. Zudem können einzelne Dienste und Services nicht verfügbar oder eingeschränkt sein. Aus diesem
|
||||||
</h2>
|
Grund ist ein Widerspruch ausgeschlossen.
|
||||||
<h3 class="heading--3">
|
</p>
|
||||||
Art und Zweck der Verarbeitung
|
<h2 class="heading--2">
|
||||||
</h3>
|
Verwendung von Scriptbibliotheken (Google Webfonts)
|
||||||
<p class="paragraph">
|
</h2>
|
||||||
Um unsere Inhalte browserübergreifend korrekt und grafisch ansprechend darzustellen, verwenden wir auf dieser
|
<h3 class="heading--3">
|
||||||
Website „Google Web Fonts“ der Google LLC (1600 Amphitheatre Parkway, Mountain View, CA 94043, USA; nachfolgend
|
Art und Zweck der Verarbeitung
|
||||||
„Google“) zur Darstellung von Schriften.
|
</h3>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<p class="paragraph">
|
Um unsere Inhalte browserübergreifend korrekt und grafisch ansprechend darzustellen, verwenden wir auf dieser
|
||||||
Die Datenschutzrichtlinie des Bibliothekbetreibers Google finden Sie hier:
|
Website „Google Web Fonts“ der Google LLC (1600 Amphitheatre Parkway, Mountain View, CA 94043, USA; nachfolgend
|
||||||
<ExternalLink href="https://www.google.com/policies/privacy/"/>
|
„Google“) zur Darstellung von Schriften.
|
||||||
</p>
|
</p>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Rechtsgrundlage
|
Die Datenschutzrichtlinie des Bibliothekbetreibers Google finden Sie hier:
|
||||||
</h3>
|
<KExternalLink href="https://www.google.com/policies/privacy/"/>
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Rechtsgrundlage für die Einbindung von Google Webfonts und dem damit verbundenen Datentransfer zu Google ist Ihre
|
<h3 class="heading--3">
|
||||||
Einwilligung (Art. 6 Abs. 1 lit. a DSGVO).
|
Rechtsgrundlage
|
||||||
</p>
|
</h3>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Empfänger
|
Rechtsgrundlage für die Einbindung von Google Webfonts und dem damit verbundenen Datentransfer zu Google ist
|
||||||
</h3>
|
Ihre Einwilligung (Art. 6 Abs. 1 lit. a DSGVO).
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Der Aufruf von Scriptbibliotheken oder Schriftbibliotheken löst automatisch eine Verbindung zum Betreiber der
|
<h3 class="heading--3">
|
||||||
Bibliothek aus. Dabei ist es theoretisch möglich – aktuell allerdings auch unklar ob und ggf. zu welchen Zwecken
|
Empfänger
|
||||||
– dass der Betreiber in diesem Fall Google Daten erhebt.
|
</h3>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<h3 class="heading--3">
|
Der Aufruf von Scriptbibliotheken oder Schriftbibliotheken löst automatisch eine Verbindung zum Betreiber der
|
||||||
Speicherdauer
|
Bibliothek aus. Dabei ist es theoretisch möglich – aktuell allerdings auch unklar ob und ggf. zu welchen Zwecken
|
||||||
</h3>
|
– dass der Betreiber in diesem Fall Google Daten erhebt.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Wir erheben keine personenbezogenen Daten, durch die Einbindung von Google Webfonts.
|
<h3 class="heading--3">
|
||||||
</p>
|
Speicherdauer
|
||||||
<p class="paragraph">
|
</h3>
|
||||||
Weitere Informationen zu Google Web Fonts finden Sie unter
|
<p class="paragraph">
|
||||||
<ExternalLink href="https://developers.google.com/fonts/faq"/> und in der Datenschutzerklärung von Google:
|
Wir erheben keine personenbezogenen Daten, durch die Einbindung von Google Webfonts.
|
||||||
<ExternalLink href="https://www.google.com/policies/privacy/"/>.
|
</p>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<h3 class="heading--3">
|
Weitere Informationen zu Google Web Fonts finden Sie unter
|
||||||
Drittlandtransfer
|
<KExternalLink href="https://developers.google.com/fonts/faq"/> und in der Datenschutzerklärung von Google:
|
||||||
</h3>
|
<KExternalLink href="https://www.google.com/policies/privacy/"/>.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen
|
<h3 class="heading--3">
|
||||||
<ExternalLink href="https://www.privacyshield.gov/EU-US-Framework"/>.
|
Drittlandtransfer
|
||||||
</p>
|
</h3>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Bereitstellung vorgeschrieben oder erforderlich
|
Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen
|
||||||
</h3>
|
<KExternalLink href="https://www.privacyshield.gov/EU-US-Framework"/>.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Die Bereitstellung der personenbezogenen Daten ist weder gesetzlich, noch vertraglich vorgeschrieben. Allerdings
|
<h3 class="heading--3">
|
||||||
kann ggfs. die korrekte Darstellung der Inhalte durch Standardschriften nicht möglich sein.
|
Bereitstellung vorgeschrieben oder erforderlich
|
||||||
</p>
|
</h3>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Widerruf der Einwilligung
|
Die Bereitstellung der personenbezogenen Daten ist weder gesetzlich, noch vertraglich vorgeschrieben. Allerdings
|
||||||
</h3>
|
kann ggfs. die korrekte Darstellung der Inhalte durch Standardschriften nicht möglich sein.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Zur Darstellung der Inhalte wird regelmäßig die Programmiersprache JavaScript verwendet. Sie können der
|
<h3 class="heading--3">
|
||||||
Datenverarbeitung daher widersprechen, indem Sie die Ausführung von JavaScript in Ihrem Browser deaktivieren oder
|
Widerruf der Einwilligung
|
||||||
einen JavaScript-Blocker installieren. Bitte beachten Sie, dass es hierdurch zu Funktionseinschränkungen auf der
|
</h3>
|
||||||
Website kommen kann.
|
<p class="paragraph">
|
||||||
</p>
|
Zur Darstellung der Inhalte wird regelmäßig die Programmiersprache JavaScript verwendet. Sie können der
|
||||||
<h2 class="heading--2">
|
Datenverarbeitung daher widersprechen, indem Sie die Ausführung von JavaScript in Ihrem Browser deaktivieren
|
||||||
Eingebettete YouTube-Videos
|
oder einen JavaScript-Blocker installieren. Bitte beachten Sie, dass es hierdurch zu Funktionseinschränkungen
|
||||||
</h2>
|
auf der Website kommen kann.
|
||||||
<h3 class="heading--3">
|
</p>
|
||||||
Art und Zweck der Verarbeitung
|
<h2 class="heading--2">
|
||||||
</h3>
|
Eingebettete YouTube-Videos
|
||||||
<p class="paragraph">
|
</h2>
|
||||||
Auf einigen unserer Webseiten betten wir YouTube-Videos ein. Betreiber der entsprechenden Plugins ist die YouTube,
|
<h3 class="heading--3">
|
||||||
LLC, 901 Cherry Ave., San Bruno, CA 94066, USA (nachfolgend „YouTube“). Wenn Sie eine Seite mit dem YouTube-Plugin
|
Art und Zweck der Verarbeitung
|
||||||
besuchen, wird eine Verbindung zu Servern von YouTube hergestellt. Dabei wird YouTube mitgeteilt, welche Seiten
|
</h3>
|
||||||
Sie besuchen. Wenn Sie in Ihrem YouTube-Account eingeloggt sind, kann YouTube Ihr Surfverhalten Ihnen persönlich
|
<p class="paragraph">
|
||||||
zuzuordnen. Dies verhindern Sie, indem Sie sich vorher aus Ihrem YouTube-Account ausloggen.
|
Auf einigen unserer Webseiten betten wir YouTube-Videos ein. Betreiber der entsprechenden Plugins ist die
|
||||||
</p>
|
YouTube, LLC, 901 Cherry Ave., San Bruno, CA 94066, USA (nachfolgend „YouTube“). Wenn Sie eine Seite mit dem
|
||||||
<p class="paragraph">
|
YouTube-Plugin besuchen, wird eine Verbindung zu Servern von YouTube hergestellt. Dabei wird YouTube mitgeteilt,
|
||||||
Wird ein YouTube-Video gestartet, setzt der Anbieter Cookies ein, die Hinweise über das Nutzerverhalten sammeln.
|
welche Seiten Sie besuchen. Wenn Sie in Ihrem YouTube-Account eingeloggt sind, kann YouTube Ihr Surfverhalten
|
||||||
</p>
|
Ihnen persönlich zuzuordnen. Dies verhindern Sie, indem Sie sich vorher aus Ihrem YouTube-Account ausloggen.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch YouTube erhalten Sie in
|
<p class="paragraph">
|
||||||
den Datenschutzerklärungen des Anbieters, Dort erhalten Sie auch weitere Informationen zu Ihren diesbezüglichen
|
Wird ein YouTube-Video gestartet, setzt der Anbieter Cookies ein, die Hinweise über das Nutzerverhalten sammeln.
|
||||||
Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre
|
</p>
|
||||||
(<ExternalLink href="https://policies.google.com/privacy"/>). Google verarbeitet Ihre Daten in den USA und hat
|
<p class="paragraph">
|
||||||
sich dem EU-US Privacy Shield unterworfen <ExternalLink href="https://www.privacyshield.gov/EU-US-Framework"/>.
|
Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch YouTube erhalten Sie in
|
||||||
</p>
|
den Datenschutzerklärungen des Anbieters, Dort erhalten Sie auch weitere Informationen zu Ihren diesbezüglichen
|
||||||
<h3 class="heading--3">
|
Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre
|
||||||
Rechtsgrundlage
|
(<KExternalLink href="https://policies.google.com/privacy"/>). Google verarbeitet Ihre Daten in den USA und hat
|
||||||
</h3>
|
sich dem EU-US Privacy Shield unterworfen <KExternalLink href="https://www.privacyshield.gov/EU-US-Framework"/>.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Rechtsgrundlage für die Einbindung von YouTube und dem damit verbundenen Datentransfer zu Google ist Ihre
|
<h3 class="heading--3">
|
||||||
Einwilligung (Art. 6 Abs. 1 lit. a DSGVO).
|
Rechtsgrundlage
|
||||||
</p>
|
</h3>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Empfänger
|
Rechtsgrundlage für die Einbindung von YouTube und dem damit verbundenen Datentransfer zu Google ist Ihre
|
||||||
</h3>
|
Einwilligung (Art. 6 Abs. 1 lit. a DSGVO).
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Der Aufruf von YouTube löst automatisch eine Verbindung zu Google aus.
|
<h3 class="heading--3">
|
||||||
</p>
|
Empfänger
|
||||||
<h3 class="heading--3">
|
</h3>
|
||||||
Speicherdauer und Widerruf der Einwilligung:
|
<p class="paragraph">
|
||||||
</h3>
|
Der Aufruf von YouTube löst automatisch eine Verbindung zu Google aus.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Wer das Speichern von Cookies für das Google-Ad-Programm deaktiviert hat, wird auch beim Anschauen von
|
<h3 class="heading--3">
|
||||||
YouTube-Videos mit keinen solchen Cookies rechnen müssen. YouTube legt aber auch in anderen Cookies
|
Speicherdauer und Widerruf der Einwilligung:
|
||||||
nicht-personenbezogene Nutzungsinformationen ab. Möchten Sie dies verhindern, so müssen Sie das Speichern von
|
</h3>
|
||||||
Cookies im Browser blockieren.
|
<p class="paragraph">
|
||||||
</p>
|
Wer das Speichern von Cookies für das Google-Ad-Programm deaktiviert hat, wird auch beim Anschauen von
|
||||||
<p class="paragraph">
|
YouTube-Videos mit keinen solchen Cookies rechnen müssen. YouTube legt aber auch in anderen Cookies
|
||||||
Weitere Informationen zum Datenschutz bei „YouTube“ finden Sie in der Datenschutzerklärung des Anbieters unter:
|
nicht-personenbezogene Nutzungsinformationen ab. Möchten Sie dies verhindern, so müssen Sie das Speichern von
|
||||||
<ExternalLink href="https://www.google.de/intl/de/policies/privacy/"/>
|
Cookies im Browser blockieren.
|
||||||
</p>
|
</p>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Drittlandtransfer
|
Weitere Informationen zum Datenschutz bei „YouTube“ finden Sie in der Datenschutzerklärung des Anbieters unter:
|
||||||
</h3>
|
<KExternalLink href="https://www.google.de/intl/de/policies/privacy/"/>
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen
|
<h3 class="heading--3">
|
||||||
<ExternalLink href="https://www.privacyshield.gov/EU-US-Framework"/>.
|
Drittlandtransfer
|
||||||
</p>
|
</h3>
|
||||||
<h3 class="heading--3">
|
<p class="paragraph">
|
||||||
Bereitstellung vorgeschrieben oder erforderlich
|
Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen
|
||||||
</h3>
|
<KExternalLink href="https://www.privacyshield.gov/EU-US-Framework"/>.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Die Bereitstellung Ihrer personenbezogenen Daten erfolgt freiwillig, allein auf Basis Ihrer Einwilligung. Sofern
|
<h3 class="heading--3">
|
||||||
Sie den Zugriff unterbinden, kann es hierdurch zu Funktionseinschränkungen auf der Website kommen.
|
Bereitstellung vorgeschrieben oder erforderlich
|
||||||
</p>
|
</h3>
|
||||||
<h2 class="heading--2">
|
<p class="paragraph">
|
||||||
SSL-Verschlüsselung
|
Die Bereitstellung Ihrer personenbezogenen Daten erfolgt freiwillig, allein auf Basis Ihrer Einwilligung. Sofern
|
||||||
</h2>
|
Sie den Zugriff unterbinden, kann es hierdurch zu Funktionseinschränkungen auf der Website kommen.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Um die Sicherheit Ihrer Daten bei der Übertragung zu schützen, verwenden wir dem aktuellen Stand der Technik
|
<h2 class="heading--2">
|
||||||
entsprechende Verschlüsselungsverfahren (z. B. SSL) über HTTPS.
|
SSL-Verschlüsselung
|
||||||
</p>
|
</h2>
|
||||||
<h2 class="heading--2">
|
<p class="paragraph">
|
||||||
Änderung unserer Datenschutzbestimmungen
|
Um die Sicherheit Ihrer Daten bei der Übertragung zu schützen, verwenden wir dem aktuellen Stand der Technik
|
||||||
</h2>
|
entsprechende Verschlüsselungsverfahren (z. B. SSL) über HTTPS.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Wir behalten uns vor, diese Datenschutzerklärung anzupassen, damit sie stets den aktuellen rechtlichen
|
<h2 class="heading--2">
|
||||||
Anforderungen entspricht oder um Änderungen unserer Leistungen in der Datenschutzerklärung umzusetzen, z.B. bei
|
Änderung unserer Datenschutzbestimmungen
|
||||||
der Einführung neuer Services. Für Ihren erneuten Besuch gilt dann die neue Datenschutzerklärung.
|
</h2>
|
||||||
</p>
|
<p class="paragraph">
|
||||||
<h2 class="heading--2">
|
Wir behalten uns vor, diese Datenschutzerklärung anzupassen, damit sie stets den aktuellen rechtlichen
|
||||||
Fragen an den Datenschutzbeauftragten
|
Anforderungen entspricht oder um Änderungen unserer Leistungen in der Datenschutzerklärung umzusetzen, z.B. bei
|
||||||
</h2>
|
der Einführung neuer Services. Für Ihren erneuten Besuch gilt dann die neue Datenschutzerklärung.
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Wenn Sie Fragen zum Datenschutz haben, schreiben Sie uns bitte eine E-Mail oder wenden Sie sich direkt an die für
|
<h2 class="heading--2">
|
||||||
den Datenschutz verantwortliche Person:
|
Fragen an den Datenschutzbeauftragten
|
||||||
</p>
|
</h2>
|
||||||
<p class="paragraph">
|
<p class="paragraph">
|
||||||
Moritz Ruth<br>
|
Wenn Sie Fragen zum Datenschutz haben, schreiben Sie uns bitte eine E-Mail oder wenden Sie sich direkt an die
|
||||||
Zum Galgenberg 19<br>
|
für den Datenschutz verantwortliche Person:
|
||||||
66539 Neunkirchen<br>
|
</p>
|
||||||
Deutschland
|
<p class="paragraph">
|
||||||
</p>
|
Moritz Ruth<br>
|
||||||
<p class="paragraph">
|
Zum Galgenberg 19<br>
|
||||||
<b>Telefon</b>: +49 176 46146329
|
66539 Neunkirchen<br>
|
||||||
</p>
|
Deutschland
|
||||||
<p class="paragraph">
|
</p>
|
||||||
<b>E-Mail</b>: <a class="link" href="mailto:legal@moritz-ruth.de">legal@moritz-ruth.de</a>
|
<p class="paragraph">
|
||||||
</p>
|
<b>Telefon</b>: +49 176 46146329
|
||||||
<p class="paragraph">
|
</p>
|
||||||
Die Datenschutzerklärung wurde mithilfe der activeMind AG erstellt, den Experten für
|
<p class="paragraph">
|
||||||
<ExternalLink
|
<b>E-Mail</b>: <a class="link" href="mailto:legal@moritz-ruth.de">legal@moritz-ruth.de</a>
|
||||||
href="https://www.activemind.de/datenschutz/datenschutzhinweis-generator/"
|
</p>
|
||||||
label="externe Datenschutzbeauftragte"
|
<p class="paragraph">
|
||||||
/> (Version #2019-04-10).
|
Die Datenschutzerklärung wurde mithilfe der activeMind AG erstellt, den Experten für
|
||||||
</p>
|
<KExternalLink
|
||||||
|
href="https://www.activemind.de/datenschutz/datenschutzhinweis-generator/"
|
||||||
|
>
|
||||||
|
externe Datenschutzbeauftragte
|
||||||
|
</KExternalLink> (Version #2019-04-10).
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -276,12 +282,12 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import NavigationBar from "@/components/NavigationBar";
|
import KNavigationBar from "kiste/components/KNavigationBar";
|
||||||
import ExternalLink from "@/components/ExternalLink";
|
import KExternalLink from "kiste/components/KExternalLink";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "PrivacyPolicyPage",
|
name: "PrivacyPolicyPage",
|
||||||
components: { ExternalLink, NavigationBar },
|
components: { KNavigationBar, KExternalLink },
|
||||||
head: {
|
head: {
|
||||||
htmlAttrs: {
|
htmlAttrs: {
|
||||||
lang: "de"
|
lang: "de"
|
||||||
|
|
|
@ -1,35 +1,37 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="projects-page">
|
<div class="projects-page">
|
||||||
<NavigationBar show-background title="Projects"/>
|
<KNavigationBar title="Projects"/>
|
||||||
<h1 class="heading--1">
|
<div class="content">
|
||||||
Projects
|
<h1 class="heading--1">
|
||||||
</h1>
|
Projects
|
||||||
<GProject
|
</h1>
|
||||||
type="App"
|
<GProject
|
||||||
title="RelaxYourEyes"
|
type="App"
|
||||||
link="https://relaxyoureyes.moritz-ruth.de"
|
title="RelaxYourEyes"
|
||||||
github="moritzruth/relaxyoureyes"
|
link="https://relaxyoureyes.moritz-ruth.de"
|
||||||
>
|
github="moritzruth/relaxyoureyes"
|
||||||
A timer which reminds you to relax your eyes every 20 minutes.
|
>
|
||||||
</GProject>
|
A timer which reminds you to relax your eyes every 20 minutes.
|
||||||
<GProject
|
</GProject>
|
||||||
type="Website"
|
<GProject
|
||||||
title="cryptic-game.net"
|
type="Website"
|
||||||
link="https://test.cryptic-game.net"
|
title="cryptic-game.net"
|
||||||
github="cryptic-game/website/tree/vueWebsite"
|
link="https://test.cryptic-game.net"
|
||||||
>
|
github="cryptic-game/website/tree/vueWebsite"
|
||||||
I am responsible for the new (not yet released) website of the
|
>
|
||||||
<a class="link" href="https://github.com/cryptic-game">Cryptic game</a>.
|
I am responsible for the new (not yet released) website of the
|
||||||
(Just the website, not the game itself)
|
<a class="link" href="https://github.com/cryptic-game">Cryptic game</a>.
|
||||||
</GProject>
|
(Just the website, not the game itself)
|
||||||
<GProject
|
</GProject>
|
||||||
type="Node.js Library"
|
<GProject
|
||||||
title="log-groups"
|
type="Node.js Library"
|
||||||
github="moritzruth/log-groups"
|
title="log-groups"
|
||||||
npm="log-groups"
|
github="moritzruth/log-groups"
|
||||||
>
|
npm="log-groups"
|
||||||
A pretty console logging library for printing grouped messages with Node.js.
|
>
|
||||||
</GProject>
|
A pretty console logging library for printing grouped messages with Node.js.
|
||||||
|
</GProject>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -38,11 +40,11 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import NavigationBar from "@/components/NavigationBar";
|
import KNavigationBar from "kiste/components/KNavigationBar";
|
||||||
import GProject from "@/components/pages/projects/GProject";
|
import GProject from "@/components/pages/projects/GProject";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ProjectsPage",
|
name: "ProjectsPage",
|
||||||
components: { GProject, NavigationBar }
|
components: { GProject, KNavigationBar }
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
32
yarn.lock
32
yarn.lock
|
@ -2043,6 +2043,13 @@ chownr@^1.1.1, chownr@^1.1.2:
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142"
|
||||||
integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
|
integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
|
||||||
|
|
||||||
|
chroma-js@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.1.0.tgz#c0be48a21fe797ef8965608c1c4f911ef2da49d5"
|
||||||
|
integrity sha512-uiRdh4ZZy+UTPSrAdp8hqEdVb1EllLtTHOt5TMaOjJUvi+O54/83Fc5K2ld1P+TJX+dw5B+8/sCgzI6eaur/lg==
|
||||||
|
dependencies:
|
||||||
|
cross-env "^6.0.3"
|
||||||
|
|
||||||
chrome-trace-event@^1.0.2:
|
chrome-trace-event@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
|
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
|
||||||
|
@ -2434,6 +2441,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
sha.js "^2.4.8"
|
sha.js "^2.4.8"
|
||||||
|
|
||||||
|
cross-env@^6.0.3:
|
||||||
|
version "6.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941"
|
||||||
|
integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^7.0.0"
|
||||||
|
|
||||||
cross-spawn@^5.0.1:
|
cross-spawn@^5.0.1:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||||
|
@ -4640,6 +4654,17 @@ kind-of@^6.0.0, kind-of@^6.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
|
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
|
||||||
integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
|
integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
|
||||||
|
|
||||||
|
kiste@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/kiste/-/kiste-1.2.0.tgz#d3c78fa9e3135d97e7a5fb760c8b491f08653efe"
|
||||||
|
integrity sha512-/K5hIpQaa9bOI6Z3oYxkBz1hJyjRn7Pv2j5BTE7gDYPnurCmskmceBPZTb/BvicnEWnwh0c07JPydAK+vJv+UQ==
|
||||||
|
dependencies:
|
||||||
|
chroma-js "^2.1.0"
|
||||||
|
lodash.defaultsdeep "^4.6.1"
|
||||||
|
lodash.kebabcase "^4.1.1"
|
||||||
|
lodash.mapvalues "^4.6.0"
|
||||||
|
vue-ripple-directive "^2.0.1"
|
||||||
|
|
||||||
last-call-webpack-plugin@^3.0.0:
|
last-call-webpack-plugin@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
|
resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
|
||||||
|
@ -4761,7 +4786,7 @@ lodash.camelcase@^4.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||||
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
|
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
|
||||||
|
|
||||||
lodash.defaultsdeep@^4.6.0:
|
lodash.defaultsdeep@^4.6.0, lodash.defaultsdeep@^4.6.1:
|
||||||
version "4.6.1"
|
version "4.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
|
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
|
||||||
integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
|
integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
|
||||||
|
@ -4776,6 +4801,11 @@ lodash.kebabcase@^4.0.1, lodash.kebabcase@^4.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
|
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
|
||||||
integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
|
integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
|
||||||
|
|
||||||
|
lodash.mapvalues@^4.6.0:
|
||||||
|
version "4.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
|
||||||
|
integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=
|
||||||
|
|
||||||
lodash.memoize@^4.1.2:
|
lodash.memoize@^4.1.2:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue