Compare commits
No commits in common. "2de5fdfa2fa39c26c2bdd1e4e21536afd7ddf251" and "48ecb69816d167272c2f69db6216f44a98cac47d" have entirely different histories.
2de5fdfa2f
...
48ecb69816
2
app.vue
2
app.vue
@ -46,7 +46,7 @@ const handleResize = () => {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass" scoped>
|
||||||
.page-enter-active,
|
.page-enter-active,
|
||||||
.page-leave-active
|
.page-leave-active
|
||||||
transition: opacity 0.3s ease, transform 0.3s ease
|
transition: opacity 0.3s ease, transform 0.3s ease
|
||||||
|
|||||||
@ -16,35 +16,35 @@ $breakPointXXL: 1400px
|
|||||||
|
|
||||||
@font-face
|
@font-face
|
||||||
font-family: 'Mainfont'
|
font-family: 'Mainfont'
|
||||||
src: url('/assets/fonts/woff2/Montserrat-Light.woff2') format("woff2")
|
src: url('@/assets/fonts/woff2/Montserrat-Light.woff2') format("woff2")
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
font-style: normal
|
font-style: normal
|
||||||
font-display: swap
|
font-display: swap
|
||||||
|
|
||||||
@font-face
|
@font-face
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
src: url('/assets/fonts/woff2/Montserrat-Medium.woff2') format("woff2")
|
src: url('@/assets/fonts/woff2/Montserrat-Medium.woff2') format("woff2")
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
font-style: normal
|
font-style: normal
|
||||||
font-display: swap
|
font-display: swap
|
||||||
|
|
||||||
@font-face
|
@font-face
|
||||||
font-family: 'Comfortaa'
|
font-family: 'Comfortaa'
|
||||||
src: url('/assets/fonts/woff2/Comfortaa-Light.woff2') format("woff2")
|
src: url('@/assets/fonts/woff2/Comfortaa-Light.woff2') format("woff2")
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
font-style: normal
|
font-style: normal
|
||||||
font-display: swap
|
font-display: swap
|
||||||
|
|
||||||
@font-face
|
@font-face
|
||||||
font-family: 'Comfortaa-Bold'
|
font-family: 'Comfortaa-Bold'
|
||||||
src: url('/assets/fonts/woff2/Comfortaa-Bold.woff2') format("woff2")
|
src: url('@/assets/fonts/woff2/Comfortaa-Bold.woff2') format("woff2")
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
font-style: normal
|
font-style: normal
|
||||||
font-display: swap
|
font-display: swap
|
||||||
|
|
||||||
/*@font-face
|
/*@font-face
|
||||||
font-family: 'Typewriter'
|
font-family: 'Typewriter'
|
||||||
src: url('/assets/fonts/ttf/JMH_Typewriter.woff2') format("woff2")
|
src: url('@/assets/fonts/ttf/JMH_Typewriter.woff2') format("woff2")
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
font-style: normal
|
font-style: normal
|
||||||
font-display: swap*/
|
font-display: swap*/
|
||||||
|
|||||||
@ -35,7 +35,7 @@
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style scoped lang="sass">
|
||||||
.article
|
.article
|
||||||
width: 100%
|
width: 100%
|
||||||
max-width: 500px
|
max-width: 500px
|
||||||
@ -96,7 +96,7 @@
|
|||||||
flex-direction: column
|
flex-direction: column
|
||||||
align-items: center
|
align-items: center
|
||||||
justify-content: flex-start
|
justify-content: flex-start
|
||||||
padding: 1rem 3vw
|
padding: 1rem
|
||||||
border-top-left-radius: 1rem
|
border-top-left-radius: 1rem
|
||||||
border-bottom-right-radius: 50%
|
border-bottom-right-radius: 50%
|
||||||
box-shadow: 2px 2px 5px 3px rgba(black, .2)
|
box-shadow: 2px 2px 5px 3px rgba(black, .2)
|
||||||
@ -106,7 +106,7 @@
|
|||||||
font-size: 1rem
|
font-size: 1rem
|
||||||
line-height: 140%
|
line-height: 140%
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
margin: .2rem 0
|
margin: .2rem 1rem
|
||||||
hyphens: auto
|
hyphens: auto
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@ -26,11 +26,11 @@
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style scoped lang="sass">
|
||||||
.ctaBox
|
.ctaBox
|
||||||
margin: 5% 10%
|
margin: 8rem 10%
|
||||||
text-align: center
|
text-align: center
|
||||||
h3
|
h3
|
||||||
font-size: clamp(1.5rem, .8rem + 2vw, 1.8rem)
|
font-size: clamp(1.4rem, .8rem + 2vw, 1.8rem)
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@ -13,9 +13,10 @@
|
|||||||
sizes="sm:100vw md:100vw lg:100vw"
|
sizes="sm:100vw md:100vw lg:100vw"
|
||||||
alt=""
|
alt=""
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
loading="eager"
|
|
||||||
priority
|
priority
|
||||||
fetchpriority="high"
|
loading="eager"
|
||||||
|
preload
|
||||||
|
fetchpriority="high"
|
||||||
/>
|
/>
|
||||||
<NuxtImg
|
<NuxtImg
|
||||||
v-if="overlayImage"
|
v-if="overlayImage"
|
||||||
|
|||||||
@ -21,14 +21,11 @@
|
|||||||
<span v-html="title"></span>
|
<span v-html="title"></span>
|
||||||
|
|
||||||
<div class="marquee">
|
<div class="marquee">
|
||||||
<div
|
<div class="marquee-track" :style="`animation-duration: ${speed}s`">
|
||||||
class="marquee-track"
|
|
||||||
:style="`animation-duration: ${speed}s`"
|
|
||||||
>
|
|
||||||
<ul class="marquee-list">
|
<ul class="marquee-list">
|
||||||
<li
|
<li
|
||||||
v-for="(item, index) in items"
|
v-for="(item, index) in items"
|
||||||
:key="'first-' + index"
|
:key="index"
|
||||||
class="marquee-item"
|
class="marquee-item"
|
||||||
>
|
>
|
||||||
<NuxtLink v-if="item.link" :to="item.link" class="custLogoLink">
|
<NuxtLink v-if="item.link" :to="item.link" class="custLogoLink">
|
||||||
@ -55,45 +52,12 @@
|
|||||||
format="webp"
|
format="webp"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
:class="['custLogo', { greyscale: greyscale }]"
|
:class="['custLogo', { greyscale: greyscale }]"
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<!-- 👇 DUPLIKAT für nahtlosen Scroll -->
|
|
||||||
<li
|
|
||||||
v-for="(item, index) in items"
|
|
||||||
:key="'second-' + index"
|
|
||||||
class="marquee-item"
|
|
||||||
>
|
|
||||||
<!-- identischer Inhalt wie oben -->
|
|
||||||
<NuxtLink v-if="item.link" :to="item.link" class="custLogoLink">
|
|
||||||
<NuxtImg
|
|
||||||
provider="strapi"
|
|
||||||
:src="item.image.url"
|
|
||||||
:alt="item.image.alternativeText || item.text || 'Image'"
|
|
||||||
:title="item.text"
|
|
||||||
width="250"
|
|
||||||
:height="logoHeight"
|
|
||||||
format="webp"
|
|
||||||
loading="lazy"
|
|
||||||
class="custLogo"
|
|
||||||
/>
|
|
||||||
</NuxtLink>
|
|
||||||
<NuxtImg
|
|
||||||
v-else
|
|
||||||
provider="strapi"
|
|
||||||
:src="item.image.url"
|
|
||||||
:alt="item.image.alternativeText || item.text || 'Image'"
|
|
||||||
:title="item.text"
|
|
||||||
width="250"
|
|
||||||
height="50"
|
|
||||||
format="webp"
|
|
||||||
loading="lazy"
|
|
||||||
:class="['custLogo', { greyscale: greyscale }]"
|
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -163,6 +127,7 @@ const props = defineProps({
|
|||||||
svg
|
svg
|
||||||
margin: 0
|
margin: 0
|
||||||
|
|
||||||
|
|
||||||
.box
|
.box
|
||||||
background-color: $beige
|
background-color: $beige
|
||||||
width: 100%
|
width: 100%
|
||||||
@ -174,27 +139,26 @@ const props = defineProps({
|
|||||||
|
|
||||||
h2
|
h2
|
||||||
color: #333
|
color: #333
|
||||||
font-size: 1.4rem
|
font-size: 1.2rem
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
padding-top: 0rem
|
padding-top: 0rem
|
||||||
|
|
||||||
.marquee
|
.marquee
|
||||||
overflow: hidden
|
overflow: hidden
|
||||||
width: 100%
|
width: 100%
|
||||||
position: relative
|
padding: 3rem auto
|
||||||
margin: 2rem 0
|
|
||||||
|
.marquee-track
|
||||||
.marquee-track
|
display: flex
|
||||||
display: flex
|
animation: scroll 20s linear infinite
|
||||||
width: fit-content
|
width: max-content
|
||||||
animation: scroll linear infinite
|
|
||||||
|
.marquee-list
|
||||||
.marquee-list
|
display: flex
|
||||||
display: flex
|
gap: 3rem
|
||||||
gap: 3rem
|
list-style: none
|
||||||
list-style: none
|
padding: 1rem 0
|
||||||
padding: 1rem 0
|
margin: 0
|
||||||
margin: 0
|
|
||||||
|
|
||||||
.marquee-item
|
.marquee-item
|
||||||
flex-shrink: 0
|
flex-shrink: 0
|
||||||
@ -212,9 +176,9 @@ const props = defineProps({
|
|||||||
filter: grayscale(0)
|
filter: grayscale(0)
|
||||||
|
|
||||||
@keyframes scroll
|
@keyframes scroll
|
||||||
0%
|
from
|
||||||
transform: translateX(0)
|
transform: translateX(0)
|
||||||
100%
|
to
|
||||||
transform: translateX(-50%)
|
transform: translateX(-50%)
|
||||||
|
|
||||||
.waveBox
|
.waveBox
|
||||||
|
|||||||
@ -115,7 +115,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass" scoped>
|
||||||
.schema-typer
|
.schema-typer
|
||||||
background-color: #1e1e1e
|
background-color: #1e1e1e
|
||||||
padding: 1.5rem
|
padding: 1.5rem
|
||||||
|
|||||||
@ -10,13 +10,6 @@ const isLocalhost = window.location.hostname === 'localhost'
|
|||||||
// Umami nur aktivieren, wenn NICHT localhost
|
// Umami nur aktivieren, wenn NICHT localhost
|
||||||
if (import.meta.client && !isLocalhost) {
|
if (import.meta.client && !isLocalhost) {
|
||||||
useHead({
|
useHead({
|
||||||
link: [
|
|
||||||
{
|
|
||||||
rel: 'preconnect',
|
|
||||||
href: 'https://umami.digimedialoop.de',
|
|
||||||
crossorigin: ''
|
|
||||||
}
|
|
||||||
],
|
|
||||||
meta: [
|
meta: [
|
||||||
{
|
{
|
||||||
name: 'google-site-verification',
|
name: 'google-site-verification',
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
scrollPosition > 50 ? 'scrolled' : ''
|
scrollPosition > 50 ? 'scrolled' : ''
|
||||||
]"
|
]"
|
||||||
aria-label="Hauptnavigation"
|
aria-label="Hauptnavigation"
|
||||||
|
role="menu"
|
||||||
>
|
>
|
||||||
<!-- Burger Icon als Button -->
|
<!-- Burger Icon als Button -->
|
||||||
<button
|
<button
|
||||||
@ -40,6 +41,7 @@
|
|||||||
@mouseleave="screenWidth >= 1350 && link.subNav && hideSubNav(link.label)"
|
@mouseleave="screenWidth >= 1350 && link.subNav && hideSubNav(link.label)"
|
||||||
@focusin="screenWidth >= 1350 && link.subNav && showSubNav(link.label)"
|
@focusin="screenWidth >= 1350 && link.subNav && showSubNav(link.label)"
|
||||||
@focusout="screenWidth >= 1350 && link.subNav && hideSubNav(link.label)"
|
@focusout="screenWidth >= 1350 && link.subNav && hideSubNav(link.label)"
|
||||||
|
role="menuitem"
|
||||||
>
|
>
|
||||||
<!-- Mit SubNav -->
|
<!-- Mit SubNav -->
|
||||||
<template v-if="link.subNav">
|
<template v-if="link.subNav">
|
||||||
@ -57,27 +59,15 @@
|
|||||||
{{ isActiveSubNav(link.label) ? 'Untermenü schließen' : 'Untermenü öffnen' }}
|
{{ isActiveSubNav(link.label) ? 'Untermenü schließen' : 'Untermenü öffnen' }}
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button v-else>
|
||||||
type="button"
|
|
||||||
v-else
|
|
||||||
aria-haspopup="true"
|
|
||||||
:aria-expanded="isSubNavOpen === link.label"
|
|
||||||
:aria-controls="`submenu-${link.label}`"
|
|
||||||
@keydown="handleKeyDown($event, link.label)"
|
|
||||||
@focus="showSubNav(link.label)"
|
|
||||||
@blur="hideSubNav(link.label)"
|
|
||||||
>
|
|
||||||
{{ $t(link.label) }}
|
{{ $t(link.label) }}
|
||||||
<span class="arrow" :class="{ open: isSubNavOpen === link.label }"></span>
|
<span class="arrow" :class="{ open: isSubNavOpen === link.label }"></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|
||||||
<ul
|
<ul
|
||||||
:id="`submenu-${link.label}`"
|
:id="`submenu-${link.label}`"
|
||||||
class="submenu"
|
class="submenu"
|
||||||
:class="{ open: isActiveSubNav(link.label) }"
|
:class="{ open: isActiveSubNav(link.label) }"
|
||||||
role="group"
|
|
||||||
:aria-label="`${$t(link.label)} Untermenü`"
|
|
||||||
>
|
>
|
||||||
<li v-for="sublink in link.subNav" :key="sublink.label">
|
<li v-for="sublink in link.subNav" :key="sublink.label">
|
||||||
<NuxtLinkLocale
|
<NuxtLinkLocale
|
||||||
@ -104,93 +94,75 @@
|
|||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, computed } from 'vue'
|
|
||||||
import { useMainStore } from '@/stores/main'
|
<script setup>
|
||||||
|
import { ref, computed } from 'vue'
|
||||||
const mainStore = useMainStore()
|
import { useMainStore } from '@/stores/main'
|
||||||
|
const mainStore = useMainStore()
|
||||||
const screenWidth = computed(() => mainStore.screenWidth)
|
|
||||||
const scrollPosition = computed(() => mainStore.scrollPosition)
|
const screenWidth = computed(() => mainStore.screenWidth)
|
||||||
|
const scrollPosition = computed(() => mainStore.scrollPosition)
|
||||||
const isSubNavOpen = ref(null)
|
|
||||||
const isMobileSubNavOpen = ref(null)
|
const isSubNavOpen = ref(null)
|
||||||
|
const isMobileSubNavOpen = ref(null)
|
||||||
function toggleMobileSubNav(routeKey) {
|
|
||||||
if (screenWidth.value < 1350) {
|
function toggleMobileSubNav(routeKey) {
|
||||||
isMobileSubNavOpen.value =
|
if (screenWidth.value < 1350) {
|
||||||
isMobileSubNavOpen.value === routeKey ? null : routeKey
|
isMobileSubNavOpen.value = isMobileSubNavOpen.value === routeKey ? null : routeKey
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
function showSubNav(routeKey) {
|
||||||
function showSubNav(routeKey) {
|
|
||||||
if (screenWidth.value >= 1350) {
|
|
||||||
isSubNavOpen.value = routeKey
|
isSubNavOpen.value = routeKey
|
||||||
}
|
}
|
||||||
}
|
function hideSubNav(routeKey) {
|
||||||
|
if (isSubNavOpen.value === routeKey) {
|
||||||
function hideSubNav(routeKey) {
|
|
||||||
if (screenWidth.value >= 1350 && isSubNavOpen.value === routeKey) {
|
|
||||||
isSubNavOpen.value = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function isActiveSubNav(label) {
|
|
||||||
return (screenWidth.value < 1350 ? isMobileSubNavOpen.value : isSubNavOpen.value) === label
|
|
||||||
}
|
|
||||||
|
|
||||||
const isMenuOpen = computed(() => mainStore.menuOpen)
|
|
||||||
const toggleMenu = () => mainStore.toggleMenu()
|
|
||||||
|
|
||||||
const handleMobileClose = () => {
|
|
||||||
if (screenWidth.value < 1350 && isMenuOpen.value) {
|
|
||||||
toggleMenu()
|
|
||||||
} else {
|
|
||||||
isSubNavOpen.value = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tastatursteuerung für Desktop-Menü
|
|
||||||
function handleKeyDown(event, linkLabel) {
|
|
||||||
if (screenWidth.value < 1350) return
|
|
||||||
|
|
||||||
switch (event.key) {
|
|
||||||
case 'Enter':
|
|
||||||
case ' ':
|
|
||||||
event.preventDefault()
|
|
||||||
isSubNavOpen.value = isSubNavOpen.value === linkLabel ? null : linkLabel
|
|
||||||
break
|
|
||||||
case 'Escape':
|
|
||||||
isSubNavOpen.value = null
|
isSubNavOpen.value = null
|
||||||
break
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const navigationLinks = [
|
|
||||||
{ routeKey: 'webagency', label: 'menu.webagency' },
|
|
||||||
{
|
|
||||||
routeKey: '',
|
|
||||||
label: 'menu.services',
|
|
||||||
subNav: [
|
|
||||||
{ routeKey: 'services-cms', label: 'menu.menuCms' },
|
|
||||||
{ routeKey: 'services-seo', label: 'menu.menuSEO' },
|
|
||||||
{ routeKey: 'services-accessibility', label: 'menu.menuAccessibility' },
|
|
||||||
{ routeKey: 'services-ai', label: 'menu.menuAi' }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
routeKey: '',
|
|
||||||
label: 'menu.sectors',
|
|
||||||
subNav: [
|
|
||||||
{ routeKey: 'sectors-schools', label: 'menu.menuSchools' },
|
|
||||||
{ routeKey: 'sectors-film', label: 'menu.menuFilm' }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ routeKey: 'magazin', label: 'menu.menuMagazin' },
|
|
||||||
{ routeKey: 'references', label: 'menu.references' }
|
|
||||||
]
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
function isActiveSubNav(label) {
|
||||||
|
return (screenWidth.value < 1350 ? isMobileSubNavOpen.value : isSubNavOpen.value) === label
|
||||||
|
}
|
||||||
|
|
||||||
|
const isMenuOpen = computed(() => mainStore.menuOpen)
|
||||||
|
const toggleMenu = () => mainStore.toggleMenu()
|
||||||
|
|
||||||
|
const toggleContactBubble = () => mainStore.toggleContactBubble()
|
||||||
|
|
||||||
|
const handleMobileClose = () => {
|
||||||
|
if (screenWidth.value < 1350 && isMenuOpen.value) {
|
||||||
|
toggleMenu()
|
||||||
|
} else {
|
||||||
|
hideSubNav()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const navigationLinks = [
|
||||||
|
{ routeKey: 'webagency', label: 'menu.webagency' },
|
||||||
|
{
|
||||||
|
routeKey: '',
|
||||||
|
label: 'menu.services',
|
||||||
|
subNav: [
|
||||||
|
{ routeKey: 'services-cms', label: 'menu.menuCms' },
|
||||||
|
{ routeKey: 'services-seo', label: 'menu.menuSEO' },
|
||||||
|
{ routeKey: 'services-accessibility', label: 'menu.menuAccessibility' },
|
||||||
|
{ routeKey: 'services-ai', label: 'menu.menuAi' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
routeKey: '',
|
||||||
|
label: 'menu.sectors',
|
||||||
|
subNav: [
|
||||||
|
{ routeKey: 'sectors-schools', label: 'menu.menuSchools' },
|
||||||
|
{ routeKey: 'sectors-film', label: 'menu.menuFilm' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ routeKey: 'magazin', label: 'menu.menuMagazin' },
|
||||||
|
{ routeKey: 'references', label: 'menu.references' }
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass">
|
||||||
.mainNav
|
.mainNav
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { computed } from 'vue'
|
|||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore } from '@/stores/main'
|
import { useMainStore } from '@/stores/main'
|
||||||
import { useHtmlConverter } from '@/composables/useHTMLConverter'
|
import { useHtmlConverter } from '@/composables/useHtmlConverter'
|
||||||
|
|
||||||
export function usePageContentRenderer() {
|
export function usePageContentRenderer() {
|
||||||
const { locale } = useI18n()
|
const { locale } = useI18n()
|
||||||
|
|||||||
@ -89,8 +89,7 @@ main
|
|||||||
color: darken($primaryColor, 20%)
|
color: darken($primaryColor, 20%)
|
||||||
.supheadlinePink, supheadlineMint
|
.supheadlinePink, supheadlineMint
|
||||||
margin-bottom: -.5rem
|
margin-bottom: -.5rem
|
||||||
font-size: clamp(1rem, 1rem + 1vw, 1.3rem)
|
font-size: calc(.5rem + 1vw)
|
||||||
line-height: 1.4
|
|
||||||
.supheadlinePink
|
.supheadlinePink
|
||||||
color: darken($pink, 10%)
|
color: darken($pink, 10%)
|
||||||
.supheadlineMint
|
.supheadlineMint
|
||||||
|
|||||||
@ -11,45 +11,6 @@ export default defineNuxtConfig({
|
|||||||
},
|
},
|
||||||
link: [
|
link: [
|
||||||
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
|
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
|
||||||
// Fonts preloaden
|
|
||||||
{
|
|
||||||
rel: 'preload',
|
|
||||||
href: '/assets/fonts/woff2/Montserrat-Light.woff2',
|
|
||||||
as: 'font',
|
|
||||||
type: 'font/woff2',
|
|
||||||
crossorigin: 'anonymous',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rel: 'preload',
|
|
||||||
href: '/assets/fonts/woff2/Montserrat-Medium.woff2',
|
|
||||||
as: 'font',
|
|
||||||
type: 'font/woff2',
|
|
||||||
crossorigin: 'anonymous',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rel: 'preload',
|
|
||||||
href: '/assets/fonts/woff2/Comfortaa-Light.woff2',
|
|
||||||
as: 'font',
|
|
||||||
type: 'font/woff2',
|
|
||||||
crossorigin: 'anonymous',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rel: 'preload',
|
|
||||||
href: '/assets/fonts/woff2/Comfortaa-Bold.woff2',
|
|
||||||
as: 'font',
|
|
||||||
type: 'font/woff2',
|
|
||||||
crossorigin: 'anonymous',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rel: 'preconnect',
|
|
||||||
href: 'https://analytics.digimedialoop.de',
|
|
||||||
crossorigin: 'anonymous'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rel: 'preconnect',
|
|
||||||
href: 'https://umami.digimedialoop.de',
|
|
||||||
crossorigin: 'anonymous'
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
charset: 'utf-16',
|
charset: 'utf-16',
|
||||||
viewport: 'width=device-width, initial-scale=1, maximum-scale=5',
|
viewport: 'width=device-width, initial-scale=1, maximum-scale=5',
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="articlePage">
|
<div class="articlePage">
|
||||||
|
|
||||||
<div v-if="article" class="articleBorder">
|
<div v-if="article" class="article">
|
||||||
<SideBarNaviSlider link="/magazin">
|
<SideBarNaviSlider link="/magazin">
|
||||||
{{ $t('pages.article.artikelUebersicht') }}
|
{{ $t('pages.article.artikelUebersicht') }}
|
||||||
</SideBarNaviSlider>
|
</SideBarNaviSlider>
|
||||||
@ -181,7 +181,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass">
|
||||||
.articleBorder
|
.article
|
||||||
margin-top: -1rem
|
margin-top: -1rem
|
||||||
.img_background
|
.img_background
|
||||||
position: absolute
|
position: absolute
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="landing topSpace">
|
<div class="landing topSpace">
|
||||||
<section class="heroBox">
|
<section class="heroBox">
|
||||||
<div class="container-10">
|
<div class="container">
|
||||||
<div class="contentBox">
|
<div class="contentBox">
|
||||||
<p class="supheadlinePink">Webentwicklung für Grafikdesigner und Mediengestalter</p>
|
<p class="supheadlinePink">Webentwicklung für Grafikdesigner und Mediengestalter</p>
|
||||||
<h1>Du hast ein geniales Design im Kopf ... </h1>
|
<h1>Du hast ein geniales Design im Kopf ... </h1>
|
||||||
@ -9,7 +9,7 @@
|
|||||||
<h3>Jou! Das kann richtig frustrierend sein - muss es aber nicht! <br>Gemeinsam setzen wir deine kreativen Ideen pixelgenau, performant und individuell um!</h3>
|
<h3>Jou! Das kann richtig frustrierend sein - muss es aber nicht! <br>Gemeinsam setzen wir deine kreativen Ideen pixelgenau, performant und individuell um!</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="false" class="speechBox d-flex align-items-start">
|
<div class="speechBox d-flex align-items-start">
|
||||||
<NuxtImg
|
<NuxtImg
|
||||||
class="profileImage"
|
class="profileImage"
|
||||||
src="/uploads/sabrinahennrich_0f07d46857.jpg"
|
src="/uploads/sabrinahennrich_0f07d46857.jpg"
|
||||||
@ -255,10 +255,37 @@ onUnmounted(() => {
|
|||||||
position: relative
|
position: relative
|
||||||
overflow-x: hidden
|
overflow-x: hidden
|
||||||
overflow-y: hidden
|
overflow-y: hidden
|
||||||
|
/*&::after
|
||||||
.container-10
|
content: ''
|
||||||
margin-top: 0
|
position: absolute
|
||||||
margin-bottom: 1rem
|
top: 2vh
|
||||||
|
right: -50vw
|
||||||
|
width: 80vw
|
||||||
|
height: 90%
|
||||||
|
min-height: 500px
|
||||||
|
max-height: 800px
|
||||||
|
background-image: url('https://strapi.digimedialoop.de/uploads/Screen_Shot_Tool_20250225214638_2209c9c92e.png')
|
||||||
|
background-repeat: no-repeat
|
||||||
|
background-position: center right
|
||||||
|
background-size: cover
|
||||||
|
border-radius: 42% 49% 52% 48% / 53% 38% 62% 47%
|
||||||
|
animation: bubble-wobble 25s infinite ease alternate, gradient-animation 70s infinite alternate ease-in-out
|
||||||
|
box-shadow: $innerShadow
|
||||||
|
opacity: 1
|
||||||
|
@media(max-width: $breakPointXL)
|
||||||
|
right: -60vw
|
||||||
|
@media(max-width: $breakPointLG)
|
||||||
|
right: -60vw
|
||||||
|
min-height: 300px
|
||||||
|
max-height: 500px
|
||||||
|
@media(max-width: $breakPointLG)
|
||||||
|
min-height: 200px
|
||||||
|
max-height: 400px
|
||||||
|
right: -65vw
|
||||||
|
@media(max-width: $breakPointLG)
|
||||||
|
min-height: 200px
|
||||||
|
max-height: 400px
|
||||||
|
right: -70vw */
|
||||||
h2
|
h2
|
||||||
margin-bottom: 1rem
|
margin-bottom: 1rem
|
||||||
font-size: 1.4rem
|
font-size: 1.4rem
|
||||||
@ -274,7 +301,7 @@ onUnmounted(() => {
|
|||||||
.speechBox
|
.speechBox
|
||||||
display: flex
|
display: flex
|
||||||
align-items: center
|
align-items: center
|
||||||
width: 100%
|
max-width: 100%
|
||||||
margin: 0 auto
|
margin: 0 auto
|
||||||
padding: 1rem 0
|
padding: 1rem 0
|
||||||
gap: 4vw
|
gap: 4vw
|
||||||
|
|||||||
361
pages/index.vue
361
pages/index.vue
@ -17,39 +17,18 @@
|
|||||||
<span class="loopHeader" v-html="getHtmlBySection('home_loopHeader').value"></span>
|
<span class="loopHeader" v-html="getHtmlBySection('home_loopHeader').value"></span>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<h4 @click="toggleSection('input')" :class="{ open: openSections.input }">
|
<span v-html="getHtmlBySection('home_loopInput').value"></span>
|
||||||
Input
|
</div>
|
||||||
<span>︾</span>
|
|
||||||
</h4>
|
|
||||||
<transition
|
|
||||||
@before-enter="beforeEnter"
|
|
||||||
@enter="enter"
|
|
||||||
@leave="leave"
|
|
||||||
>
|
|
||||||
<div v-show="openSections.input" class="sliding-box" v-html="getHtmlBySection('home_loopInput').value" />
|
|
||||||
</transition>
|
|
||||||
</div>
|
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<NuxtImg
|
<NuxtImg
|
||||||
src="/uploads/Loop_83b4311dd0.webp"
|
src="/uploads/Loop_83b4311dd0.webp"
|
||||||
provider="strapi"
|
provider="strapi"
|
||||||
class="loopImg"
|
class="loopImg"
|
||||||
alt="Zentrale Webseite die als zentraler Touchpoint input verarbeitet und in qualifizierte Leads umwandelt"
|
alt="Mensch"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<h4 @click="toggleSection('output')" :class="{ open: openSections.output }">
|
<span v-html="getHtmlBySection('home_loopOutput').value"></span>
|
||||||
Output
|
|
||||||
<span>︾</span>
|
|
||||||
</h4>
|
|
||||||
<transition
|
|
||||||
@before-enter="beforeEnter"
|
|
||||||
@enter="enter"
|
|
||||||
@leave="leave"
|
|
||||||
>
|
|
||||||
<div v-show="openSections.output" class="sliding-box" v-html="getHtmlBySection('home_loopOutput').value" />
|
|
||||||
</transition>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -166,7 +145,7 @@
|
|||||||
:button-text="$t('buttons.contactUs')"
|
:button-text="$t('buttons.contactUs')"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<MarqueeBanner :items="logoItems" :logo-height="60" :speed="30" :title="getHtmlBySection('home_company_trustus').value" :greyscale="true" />
|
<MarqueeBanner :items="logoItems" :logo-height="60" :title="getHtmlBySection('home_company_trustus').value" :greyscale="true" />
|
||||||
<FAQArea page-link="/" :headline="$t('pages.home.faqArea.headline')" />
|
<FAQArea page-link="/" :headline="$t('pages.home.faqArea.headline')" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -191,145 +170,58 @@ const logoItems = computed(() => {
|
|||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
|
|
||||||
const openSections = ref({
|
|
||||||
input: false,
|
|
||||||
output: false
|
|
||||||
})
|
|
||||||
|
|
||||||
const toggleSection = (key) => {
|
|
||||||
openSections.value[key] = !openSections.value[key]
|
|
||||||
}
|
|
||||||
function beforeEnter(el) {
|
|
||||||
el.style.height = '0'
|
|
||||||
el.style.opacity = '0'
|
|
||||||
el.style.overflow = 'hidden'
|
|
||||||
}
|
|
||||||
|
|
||||||
function enter(el) {
|
|
||||||
const height = el.scrollHeight
|
|
||||||
el.style.transition = 'height 0.4s ease, opacity 0.4s ease'
|
|
||||||
requestAnimationFrame(() => {
|
|
||||||
el.style.height = height + 'px'
|
|
||||||
el.style.opacity = '1'
|
|
||||||
})
|
|
||||||
|
|
||||||
el.addEventListener('transitionend', () => {
|
|
||||||
el.style.height = 'auto'
|
|
||||||
el.style.overflow = 'visible'
|
|
||||||
}, { once: true })
|
|
||||||
}
|
|
||||||
|
|
||||||
function leave(el) {
|
|
||||||
el.style.height = el.scrollHeight + 'px'
|
|
||||||
el.style.opacity = '1'
|
|
||||||
el.style.overflow = 'hidden'
|
|
||||||
requestAnimationFrame(() => {
|
|
||||||
el.style.transition = 'height 0.4s ease, opacity 0.4s ease'
|
|
||||||
el.style.height = '0'
|
|
||||||
el.style.opacity = '0'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass">
|
||||||
@keyframes bounce-fade
|
|
||||||
0%
|
|
||||||
transform: translateY(0)
|
|
||||||
opacity: 1
|
|
||||||
50%
|
|
||||||
transform: translateY(5px)
|
|
||||||
opacity: 0
|
|
||||||
51%
|
|
||||||
transform: translateY(-5px)
|
|
||||||
opacity: 0
|
|
||||||
100%
|
|
||||||
transform: translateY(0)
|
|
||||||
opacity: 1
|
|
||||||
|
|
||||||
.slide-fade-enter-active, .slide-fade-leave-active
|
|
||||||
transition: all 0.3s ease
|
|
||||||
overflow: hidden
|
|
||||||
|
|
||||||
.slide-fade-enter-from, .slide-fade-leave-to
|
|
||||||
max-height: 0
|
|
||||||
opacity: 0
|
|
||||||
transform: translateY(-10px)
|
|
||||||
|
|
||||||
.slide-fade-enter-to, .slide-fade-leave-from
|
|
||||||
max-height: 500px
|
|
||||||
opacity: 1
|
|
||||||
transform: translateY(0)
|
|
||||||
|
|
||||||
.homePage
|
.homePage
|
||||||
|
|
||||||
.dmlLoop
|
.dmlLoop
|
||||||
width: 80%
|
width: 80%
|
||||||
margin: 3rem 10%
|
margin: 3rem 10%
|
||||||
.loopHeader
|
h2
|
||||||
text-align: center
|
font-size: clamp(1.8rem, .9rem + 2vw, 2.4rem)
|
||||||
|
margin-bottom: 0
|
||||||
h2
|
margin-top: -.5rem
|
||||||
font-size: clamp(1.8rem, .9rem + 2vw, 2rem)
|
h3
|
||||||
margin-bottom: 0
|
font-size: clamp(1.4rem, .7rem + 2vw, 2rem)
|
||||||
margin-top: -.5rem
|
margin: 0 0 1rem 0
|
||||||
|
h4
|
||||||
h3
|
font-size: clamp(1.2rem, .5rem + 2vw, 1.6rem)
|
||||||
font-size: clamp(1.2rem, .5rem + 2vw, 1.6rem)
|
margin: .5rem 0 1.5rem 0
|
||||||
margin: 0 0 1rem 0
|
p
|
||||||
|
margin-top: 1rem
|
||||||
h4
|
|
||||||
font-size: clamp(1.2rem, .5rem + 2vw, 1.6rem)
|
|
||||||
margin: .5rem 0 1.5rem 0
|
|
||||||
|
|
||||||
p
|
|
||||||
margin-top: 1rem
|
|
||||||
|
|
||||||
.content
|
.content
|
||||||
display: flex
|
display: flex
|
||||||
flex-direction: row
|
flex-direction: column
|
||||||
gap: 2rem
|
gap: 2rem
|
||||||
margin: 3rem 0
|
margin: 3rem 0
|
||||||
|
|
||||||
.column
|
.column
|
||||||
padding: 0
|
padding: 0
|
||||||
border-radius: .5rem
|
border-radius: .5rem
|
||||||
min-width: 280px
|
min-width: 280px
|
||||||
width: calc((100% / 3) - 2rem)
|
width: calc((100% / 3) - 2rem)
|
||||||
|
// nur für 1 und 3 box
|
||||||
|
// child(1) border rights offen und child(3) border left offen
|
||||||
&:nth-child(1), &:nth-child(3)
|
&:nth-child(1), &:nth-child(3)
|
||||||
|
//border-top: 1px solid #effbf7
|
||||||
border-bottom: 1px solid #effbf7
|
border-bottom: 1px solid #effbf7
|
||||||
|
|
||||||
&:nth-child(1)
|
&:nth-child(1)
|
||||||
border-left: 1px solid #effbf7
|
border-left: 1px solid #effbf7
|
||||||
|
|
||||||
h4
|
h4
|
||||||
background-image: linear-gradient(to right, #effbf7, white)
|
background-image: linear-gradient(to right, #effbf7, white)
|
||||||
|
|
||||||
&:nth-child(3)
|
&:nth-child(3)
|
||||||
border-right: 1px solid #effbf7
|
border-right: 1px solid #effbf7
|
||||||
|
|
||||||
h4
|
h4
|
||||||
background-image: linear-gradient(to right, white, #effbf7)
|
background-image: linear-gradient(to right, white, #effbf7)
|
||||||
|
|
||||||
&:nth-child(2)
|
&:nth-child(2)
|
||||||
display: flex
|
display: flex
|
||||||
align-items: center
|
align-items: center
|
||||||
justify-content: center
|
justify-content: center
|
||||||
|
|
||||||
img
|
|
||||||
margin: 22% auto
|
|
||||||
|
|
||||||
&.sliding-box
|
|
||||||
padding: .5rem 1rem
|
|
||||||
font-size: .9rem
|
|
||||||
transition: all 0.4s ease
|
|
||||||
|
|
||||||
h4
|
h4
|
||||||
margin: 0
|
margin: 0
|
||||||
padding: .8rem 2rem .2rem 2rem
|
padding: .8rem 2rem
|
||||||
color: $darkgrey
|
color: $darkgrey
|
||||||
|
|
||||||
border-top-left-radius: .5rem
|
border-top-left-radius: .5rem
|
||||||
border-top-right-radius: .5rem
|
border-top-right-radius: .5rem
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
@ -337,29 +229,12 @@ function leave(el) {
|
|||||||
text-transform: uppercase
|
text-transform: uppercase
|
||||||
text-align: center
|
text-align: center
|
||||||
letter-spacing: .05rem
|
letter-spacing: .05rem
|
||||||
cursor: pointer
|
|
||||||
margin-top: 8rem
|
|
||||||
transition: .5s ease-in-out
|
|
||||||
|
|
||||||
span
|
|
||||||
display: block
|
|
||||||
animation: bounce-fade 1.5s infinite ease-in-out
|
|
||||||
color: $darkgrey
|
|
||||||
transition: transform 0.3s ease
|
|
||||||
|
|
||||||
&.open
|
|
||||||
margin-top: 0
|
|
||||||
span
|
|
||||||
animation: none
|
|
||||||
transform: rotate(180deg)
|
|
||||||
|
|
||||||
p
|
p
|
||||||
padding: .5rem 1rem
|
padding: .5rem 1rem
|
||||||
font-size: .9rem
|
font-size: .9rem
|
||||||
|
|
||||||
ul
|
ul
|
||||||
margin-left: 2vw
|
margin-left: 2vw
|
||||||
|
|
||||||
li
|
li
|
||||||
padding: .3rem 0
|
padding: .3rem 0
|
||||||
|
|
||||||
@ -369,14 +244,10 @@ function leave(el) {
|
|||||||
object-fit: cover
|
object-fit: cover
|
||||||
object-position: center center
|
object-position: center center
|
||||||
|
|
||||||
@media screen and (max-width: $breakPointLG)
|
|
||||||
.content
|
|
||||||
flex-direction: column
|
|
||||||
|
|
||||||
.column
|
|
||||||
width: 90%
|
|
||||||
min-width: 90%
|
|
||||||
|
|
||||||
|
@media screen and (min-width: $breakPointLG)
|
||||||
|
flex-direction: row
|
||||||
|
|
||||||
.whatWeDo
|
.whatWeDo
|
||||||
position: relative
|
position: relative
|
||||||
overflow-x: hidden
|
overflow-x: hidden
|
||||||
@ -389,38 +260,188 @@ function leave(el) {
|
|||||||
position: absolute
|
position: absolute
|
||||||
top: 0
|
top: 0
|
||||||
aspect-ratio: 1 / 1
|
aspect-ratio: 1 / 1
|
||||||
|
|
||||||
.rightImg
|
.rightImg
|
||||||
right: 0
|
right: 0
|
||||||
transform: translateX(50%)
|
transform: translateX(50%)
|
||||||
|
|
||||||
.leftImg
|
.leftImg
|
||||||
left: 0
|
left: 0
|
||||||
transform: translateX(-25%)
|
transform: translateX(-25%)
|
||||||
|
|
||||||
.content
|
.content
|
||||||
position: relative
|
position: relative
|
||||||
z-index: 1
|
z-index: 1
|
||||||
width: 65%
|
width: 65%
|
||||||
margin: 3rem 15% 2rem 20%
|
margin: 3rem 15% 2rem 20%
|
||||||
text-align: center
|
text-align: center
|
||||||
padding: 2rem 5%
|
padding: 2rem 5%
|
||||||
border-radius: 1rem
|
border-radius: 1rem
|
||||||
|
@media(max-width: $breakPointMD)
|
||||||
@media(max-width: $breakPointLG)
|
|
||||||
width: 90%
|
width: 90%
|
||||||
margin: 3rem 5%
|
margin: 3rem 5% 3rem 5%
|
||||||
background-color: rgba(255,255,255,.95)
|
background-color: rgba(255,255,255,.8)
|
||||||
|
|
||||||
h2
|
h2
|
||||||
font-size: clamp(1.5rem, .7rem + 2vw, 2rem)
|
font-size: clamp(1.5rem, .7rem + 2vw, 2rem)
|
||||||
font-family: 'Comfortaa'
|
font-family: 'Comfortaa'
|
||||||
|
|
||||||
h3
|
h3
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
font-size: clamp(1.2rem, .9rem + 2vw, 1.6rem)
|
font-size: clamp(1.2rem, .9rem + 2vw, 1.6rem)
|
||||||
|
|
||||||
p
|
p
|
||||||
font-size: clamp(1.1rem, .5rem + 2vw, 1.2rem)
|
font-size: clamp(1rem, .5rem + 2vw, 1.2rem)
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.explainBox
|
||||||
|
position: relative
|
||||||
|
overflow: hidden
|
||||||
|
min-height: 400px
|
||||||
|
margin: 2vh 0 8vh 0
|
||||||
|
padding: 8vh 0
|
||||||
|
|
||||||
|
.background-image
|
||||||
|
position: absolute
|
||||||
|
top: 0
|
||||||
|
left: 0
|
||||||
|
width: 100%
|
||||||
|
height: auto
|
||||||
|
object-fit: cover
|
||||||
|
object-position: center center
|
||||||
|
z-index: 0
|
||||||
|
pointer-events: none
|
||||||
|
|
||||||
|
|
||||||
|
.content
|
||||||
|
position: relative
|
||||||
|
z-index: 1
|
||||||
|
padding-left: 10%
|
||||||
|
h2
|
||||||
|
font-size: clamp(1.2rem, .7rem + 2vw, 2rem)
|
||||||
|
font-family: 'Comfortaa'
|
||||||
|
h3
|
||||||
|
font-family: 'Mainfont-Bold'
|
||||||
|
font-size: 1.2rem
|
||||||
|
|
||||||
|
.firstTeaser
|
||||||
|
h2
|
||||||
|
font-size: 1.6rem
|
||||||
|
line-height: 2.4rem
|
||||||
|
.subLine
|
||||||
|
color: adjust-color($darkgrey, $lightness: 20%)
|
||||||
|
font-size: 80%
|
||||||
|
.pinkFont
|
||||||
|
color: darken($pink, 10%)
|
||||||
|
.imgRight
|
||||||
|
float: right
|
||||||
|
max-width: 50%
|
||||||
|
.homeImageTop
|
||||||
|
margin: 4.5rem 0 8vh 3rem !important
|
||||||
|
|
||||||
|
.sectionSolutions
|
||||||
|
background-image: linear-gradient(to bottom right, $beige, white, $beige)
|
||||||
|
min-height: 200px
|
||||||
|
margin: 6rem 0
|
||||||
|
padding: 6rem 0 7rem 0
|
||||||
|
position: relative
|
||||||
|
overflow: hidden
|
||||||
|
|
||||||
|
h2
|
||||||
|
font-size: 1.8rem
|
||||||
|
.sectorsBox
|
||||||
|
display: flex
|
||||||
|
gap: 5%
|
||||||
|
justify-content: space-arround
|
||||||
|
flex-wrap: wrap
|
||||||
|
|
||||||
|
.sector
|
||||||
|
position: relative
|
||||||
|
flex: 1 1 30%
|
||||||
|
background: #f9f9f9
|
||||||
|
padding: 1rem
|
||||||
|
border-radius: 1rem
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05)
|
||||||
|
transition: transform 0.3s ease
|
||||||
|
border-radius: 1rem
|
||||||
|
max-width: 450px
|
||||||
|
margin-bottom: 2rem
|
||||||
|
|
||||||
|
.bgImage
|
||||||
|
position: absolute
|
||||||
|
inset: 0
|
||||||
|
width: 100%
|
||||||
|
height: 100%
|
||||||
|
object-fit: cover
|
||||||
|
object-position: center
|
||||||
|
z-index: 0
|
||||||
|
border-radius: 1rem
|
||||||
|
|
||||||
|
.contentBox
|
||||||
|
position: relative
|
||||||
|
z-index: 2
|
||||||
|
background-image: linear-gradient(to top, rgba(white, .9), rgba(white, .7))
|
||||||
|
width: 100%
|
||||||
|
padding: 2rem
|
||||||
|
border-radius: 1rem
|
||||||
|
transform: rotate(-1deg)
|
||||||
|
|
||||||
|
.image-comparison-container
|
||||||
|
text-align: center
|
||||||
|
width: 80%
|
||||||
|
max-width: 300px
|
||||||
|
margin: 0 auto 2rem auto
|
||||||
|
|
||||||
|
h3
|
||||||
|
font-size: 1.25rem
|
||||||
|
margin: 1rem 0 0.5rem
|
||||||
|
z-index: 3
|
||||||
|
hyphens: auto
|
||||||
|
|
||||||
|
p
|
||||||
|
font-size: 1rem
|
||||||
|
color: #333
|
||||||
|
margin-bottom: 1.5rem
|
||||||
|
min-height: 4.5rem
|
||||||
|
z-index: 3
|
||||||
|
|
||||||
|
.btn
|
||||||
|
text-transform: none
|
||||||
|
hyphens: auto
|
||||||
|
font-size: 1.1rem
|
||||||
|
font-family: 'Mainfont-Bold'
|
||||||
|
|
||||||
|
@media screen and (max-width: $breakPointMD)
|
||||||
|
flex-direction: column
|
||||||
|
.sector
|
||||||
|
flex: 1 1 100%
|
||||||
|
max-width: 100%
|
||||||
|
padding: 1rem
|
||||||
|
.btn
|
||||||
|
font-size: 1.05rem
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.compBox
|
||||||
|
background-image: url(https://strapi.digimedialoop.de/uploads/watercolor_da8a37ce48.webp)
|
||||||
|
background-size: cover
|
||||||
|
background-repeat: no-repeat
|
||||||
|
padding: 6rem 0 6rem 0
|
||||||
|
.content
|
||||||
|
background-color: rgba(255,255,255,.7)
|
||||||
|
padding: 2rem 5%
|
||||||
|
margin-top: 2rem
|
||||||
|
margin-bottom: 2rem
|
||||||
|
border-radius: 1rem
|
||||||
|
transform: rotate(-1deg)
|
||||||
|
.btnArea
|
||||||
|
a
|
||||||
|
margin-right: 1rem
|
||||||
|
font-family: 'Mainfont-Bold'
|
||||||
|
h2
|
||||||
|
font-family: 'Comfortaa-Bold'
|
||||||
|
h3
|
||||||
|
line-height: 1.5
|
||||||
|
p
|
||||||
|
padding-right: 1rem
|
||||||
|
</style>
|
||||||
|
|||||||
@ -120,7 +120,7 @@ watchEffect(() => {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass" scoped>
|
||||||
.referenceBox
|
.referenceBox
|
||||||
display: grid
|
display: grid
|
||||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))
|
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))
|
||||||
|
|||||||
@ -150,7 +150,7 @@ import { useMainStore } from '@/stores/main'
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass" scoped>
|
||||||
@keyframes moveSpotlight
|
@keyframes moveSpotlight
|
||||||
0%
|
0%
|
||||||
transform: translate(-30%, -30%) rotate(0deg)
|
transform: translate(-30%, -30%) rotate(0deg)
|
||||||
|
|||||||
@ -127,7 +127,6 @@ const toggleContactBubble = () => mainStore.toggleContactBubble();
|
|||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass">
|
||||||
.accessiblityPage
|
.accessiblityPage
|
||||||
hyphens: auto
|
|
||||||
.articleBox
|
.articleBox
|
||||||
margin-top: 5rem
|
margin-top: 5rem
|
||||||
margin-bottom: 6rem
|
margin-bottom: 6rem
|
||||||
@ -143,9 +142,7 @@ const toggleContactBubble = () => mainStore.toggleContactBubble();
|
|||||||
float: right
|
float: right
|
||||||
width: 30%
|
width: 30%
|
||||||
max-width: 350px
|
max-width: 350px
|
||||||
min-width: 130px
|
margin: 1rem 0 2rem 2rem
|
||||||
margin: 1rem 0 2rem 2vw
|
|
||||||
|
|
||||||
.implementation
|
.implementation
|
||||||
margin: 8vh 0
|
margin: 8vh 0
|
||||||
padding: 1vh 0 3vh 0
|
padding: 1vh 0 3vh 0
|
||||||
|
|||||||
@ -124,7 +124,7 @@
|
|||||||
<MarqueeBanner
|
<MarqueeBanner
|
||||||
:items="projectItems"
|
:items="projectItems"
|
||||||
:logo-height="200"
|
:logo-height="200"
|
||||||
title="<h2>Aus der Praxis: Unsere Projekte mit Headless Architektur</h2>"
|
title="Aus der Praxis: Unsere Projekte mit Headless Architektur"
|
||||||
link="projekt"
|
link="projekt"
|
||||||
aria-label="Headless CMS Projekte"
|
aria-label="Headless CMS Projekte"
|
||||||
speed="15"
|
speed="15"
|
||||||
@ -267,7 +267,7 @@ const timeline = [
|
|||||||
|
|
||||||
.timeline
|
.timeline
|
||||||
position: relative
|
position: relative
|
||||||
margin-left: 0
|
margin-left: 2rem
|
||||||
padding-left: 0
|
padding-left: 0
|
||||||
border-left: 10px solid $lightgrey
|
border-left: 10px solid $lightgrey
|
||||||
|
|
||||||
@ -282,13 +282,13 @@ const timeline = [
|
|||||||
|
|
||||||
.circle
|
.circle
|
||||||
position: absolute
|
position: absolute
|
||||||
left: -11%
|
left: -5.2rem
|
||||||
top: -1rem
|
top: 0
|
||||||
width: 10rem
|
width: 10rem
|
||||||
height: 7rem
|
height: 7rem
|
||||||
background: #37857C
|
background: #37857C
|
||||||
border-radius: $loopShape
|
border-radius: $loopShape
|
||||||
border: 1px solid #F1F1F1
|
border: 2px solid white
|
||||||
display: flex
|
display: flex
|
||||||
align-items: center
|
align-items: center
|
||||||
justify-content: center
|
justify-content: center
|
||||||
@ -304,8 +304,8 @@ const timeline = [
|
|||||||
|
|
||||||
.period
|
.period
|
||||||
font-weight: bold
|
font-weight: bold
|
||||||
font-size: 1.3rem
|
font-size: 1rem
|
||||||
font-family: 'Comfortaa-Bold'
|
font-family: monospace
|
||||||
|
|
||||||
.content-box
|
.content-box
|
||||||
background: white
|
background: white
|
||||||
@ -321,7 +321,6 @@ const timeline = [
|
|||||||
color: #2B3E3F
|
color: #2B3E3F
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
margin: 1rem 0
|
margin: 1rem 0
|
||||||
font-size: clamp(1.2rem, 2vw, 1.5rem)
|
|
||||||
h4
|
h4
|
||||||
color: #37857C
|
color: #37857C
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
|
|||||||
@ -3,7 +3,11 @@
|
|||||||
<section class="webagentur">
|
<section class="webagentur">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="contentBox topSpace">
|
<div class="contentBox topSpace">
|
||||||
<div v-html="getHtmlBySection('webagent_hero').value"></div>
|
<h1>{{ $t('pages.webagency.hero.title') }}</h1>
|
||||||
|
<h2>{{ $t('pages.webagency.hero.subtitle') }}</h2>
|
||||||
|
<p v-html="$t('pages.webagency.hero.text1')" />
|
||||||
|
<p v-html="$t('pages.webagency.hero.text2')" />
|
||||||
|
<p v-html="$t('pages.webagency.hero.text3')" />
|
||||||
<button
|
<button
|
||||||
class="my-4 btn pinkBtn"
|
class="my-4 btn pinkBtn"
|
||||||
role="button"
|
role="button"
|
||||||
@ -26,6 +30,7 @@
|
|||||||
:alt="`Profilbild von ${companyinfo?.name || 'Ansprechpartnerin'}`"
|
:alt="`Profilbild von ${companyinfo?.name || 'Ansprechpartnerin'}`"
|
||||||
sizes="sm:100vw md:50vw lg:30vw"
|
sizes="sm:100vw md:50vw lg:30vw"
|
||||||
format="webp"
|
format="webp"
|
||||||
|
class="rounded-full w-full h-full object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -119,9 +124,6 @@ const designerLink = i18nPages.designer?.[locale.value] || '/designer'
|
|||||||
|
|
||||||
const mainStore = useMainStore();
|
const mainStore = useMainStore();
|
||||||
const { companyinfo } = storeToRefs(mainStore);
|
const { companyinfo } = storeToRefs(mainStore);
|
||||||
|
|
||||||
const { getHtmlBySection } = usePageContentRenderer()
|
|
||||||
|
|
||||||
const toggleContactBubble = () => mainStore.toggleContactBubble();
|
const toggleContactBubble = () => mainStore.toggleContactBubble();
|
||||||
|
|
||||||
const profileImageUrl = computed(() => companyinfo.value?.profileImage?.data?.attributes?.url || null);
|
const profileImageUrl = computed(() => companyinfo.value?.profileImage?.data?.attributes?.url || null);
|
||||||
@ -134,12 +136,6 @@ const navigateTo = useRouter().push;
|
|||||||
position: relative
|
position: relative
|
||||||
overflow-x: hidden
|
overflow-x: hidden
|
||||||
overflow-y: hidden
|
overflow-y: hidden
|
||||||
h1
|
|
||||||
font-size: clamp(2rem, 1rem + 2vw, 2.5rem)
|
|
||||||
margin-bottom: .5rem
|
|
||||||
h2
|
|
||||||
font-size: clamp(1.5rem, 1rem + 1vw, 2rem)
|
|
||||||
margin-top: 0
|
|
||||||
&::after
|
&::after
|
||||||
content: ''
|
content: ''
|
||||||
position: absolute
|
position: absolute
|
||||||
@ -216,8 +212,6 @@ const navigateTo = useRouter().push;
|
|||||||
border-radius: 50%
|
border-radius: 50%
|
||||||
content: ''
|
content: ''
|
||||||
display: block
|
display: block
|
||||||
img
|
|
||||||
animation: bubble-wobble 25s infinite ease alternate
|
|
||||||
@media(max-width: $breakPointSM)
|
@media(max-width: $breakPointSM)
|
||||||
width: 80vw
|
width: 80vw
|
||||||
margin-left: -5vw
|
margin-left: -5vw
|
||||||
@ -226,15 +220,12 @@ const navigateTo = useRouter().push;
|
|||||||
height: 70vw
|
height: 70vw
|
||||||
max-height: 400px
|
max-height: 400px
|
||||||
clip-path: none
|
clip-path: none
|
||||||
img
|
border-radius: $loopShape
|
||||||
border-radius: $loopShape
|
|
||||||
margin-left: 5vw
|
|
||||||
.teamContainer
|
.teamContainer
|
||||||
width: 100%
|
width: 100%
|
||||||
padding-left: calc(2vw + 5vw)
|
padding-left: calc(2vw + 5vw)
|
||||||
@media(max-width: $breakPointSM)
|
@media(max-width: $breakPointSM)
|
||||||
padding-left: 0
|
padding-left: 0
|
||||||
margin-top: 6vh
|
|
||||||
h2
|
h2
|
||||||
color: darken($lightgrey, 30%)
|
color: darken($lightgrey, 30%)
|
||||||
font-size: .9rem
|
font-size: .9rem
|
||||||
@ -243,23 +234,20 @@ const navigateTo = useRouter().push;
|
|||||||
font-size: 2rem
|
font-size: 2rem
|
||||||
margin-bottom: .1rem
|
margin-bottom: .1rem
|
||||||
margin-top: 1rem
|
margin-top: 1rem
|
||||||
p
|
|
||||||
font-size: 1.2rem
|
|
||||||
|
|
||||||
.smallFont
|
.smallFont
|
||||||
font-size: 1.2rem
|
font-size: 1.1rem
|
||||||
font-family: 'Mainfont-Bold'
|
font-family: 'Mainfont-Bold'
|
||||||
.smaller
|
.smaller
|
||||||
font-size: 1rem
|
font-size: .9rem
|
||||||
.quotation
|
.quotation
|
||||||
background-color: $lightgrey
|
background-color: $lightgrey
|
||||||
padding: 2.5rem 4rem 2rem 6rem
|
padding: 2.5rem 4rem 2rem 6rem
|
||||||
border-radius: 1rem
|
border-radius: 1rem
|
||||||
font-size: 1.2rem
|
font-size: 1rem
|
||||||
position: relative
|
position: relative
|
||||||
margin-top: 2rem
|
margin-top: 2rem
|
||||||
p
|
p
|
||||||
font-size: 1.2rem
|
font-size: 1rem
|
||||||
@media(max-width: $breakPointMD)
|
@media(max-width: $breakPointMD)
|
||||||
padding: 5rem 2rem 2rem 2rem
|
padding: 5rem 2rem 2rem 2rem
|
||||||
hyphens: auto
|
hyphens: auto
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user