diff --git a/nuxt/assets/scss/defaults.scss b/nuxt/assets/scss/defaults.scss index 1667fc1..6cd3755 100644 --- a/nuxt/assets/scss/defaults.scss +++ b/nuxt/assets/scss/defaults.scss @@ -23,9 +23,12 @@ // Font weights --font-weight-light: 300; - --font-weight-medium: 500; - --font-weight-semibold: 600; - --font-weight-bold: 700; + --font-weight-medium: 400; + --font-weight-semibold: 500; + --font-weight-bold: 600; + + // Font family + --font-family: Poppins; // Spacing & Dimensions --space-0: 0.0625rem; // 1px @@ -35,4 +38,11 @@ $value: $i * $increment; --space-#{$i}: #{$value}; } + + // Transitions + --transition-page-vertical: top 1s; + --transition-page-horizontal: left 1s; + --transition-slider: 0.15s ease-in-out; + --transition-accordeon: 0.4s ease-in-out; + --transition-state: all 0.3s ease; } diff --git a/nuxt/assets/scss/main.scss b/nuxt/assets/scss/main.scss index 9ac5738..542b65a 100644 --- a/nuxt/assets/scss/main.scss +++ b/nuxt/assets/scss/main.scss @@ -14,7 +14,7 @@ h3 { font-weight: var(--font-weight-semibold); } -@include sm-screen-down { +@mixin responsive-typography { h1 { font-size: var(--font-size-l); } @@ -28,8 +28,22 @@ h3 { } } +@include sm-screen-down { + @include responsive-typography() +} + +#preview { + &.preview-tablet, + &.preview-cellphone { + @include responsive-typography() + } +} + body { background-color: var(--background-color); +} + +body, #preview { color: var(--text-color); font-family: var(--font-family); font-size: var(--font-size-base); diff --git a/nuxt/assets/scss/transitions.scss b/nuxt/assets/scss/transitions.scss index c4bf4d6..392a939 100644 --- a/nuxt/assets/scss/transitions.scss +++ b/nuxt/assets/scss/transitions.scss @@ -1,10 +1,10 @@ /** * Transition to and from the art pages */ - .up { +.up { &.slide-leave-active, &.slide-enter-active { - transition: top 1s; + transition: var(--transition-page-vertical); } &.slide-enter-from { @@ -17,14 +17,14 @@ .down { &.slide-leave-active { - transition: top 1s; + transition: var(--transition-page-vertical); } &.slide-leave-from { top: 0; } &.slide-leave-to { - top: 100% + top: 100%; } } @@ -34,14 +34,14 @@ .left { &.slide-leave-active, &.slide-enter-active { - transition: left 1s; + transition: var(--transition-page-horizontal); } &.slide-enter-from { left: 100%; } &.slide-enter-to { - left: 0 + left: 0; } &.slide-leave-to { left: -100%; @@ -54,7 +54,7 @@ .right { &.slide-leave-active, &.slide-enter-active { - transition: left 1s; + transition: var(--transition-page-horizontal); } &.slide-enter-from { @@ -62,7 +62,7 @@ } &.slide-enter-to { - left: 0% + left: 0%; } &.slide-leave-to { left: 100%; diff --git a/nuxt/components/Atoms/Accordeon.vue b/nuxt/components/Atoms/Accordeon.vue new file mode 100644 index 0000000..63605dc --- /dev/null +++ b/nuxt/components/Atoms/Accordeon.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/nuxt/components/Atoms/ArtworkTeaser.vue b/nuxt/components/Atoms/ArtworkTeaser.vue index 5836692..578854a 100644 --- a/nuxt/components/Atoms/ArtworkTeaser.vue +++ b/nuxt/components/Atoms/ArtworkTeaser.vue @@ -69,7 +69,7 @@ defineProps<{ width: 100%; height: 100%; object-fit: cover; - transition: 0.15s ease-in-out; + transition: var(--transition-slider); } } diff --git a/nuxt/components/Atoms/Button.vue b/nuxt/components/Atoms/Button.vue index 3d2a2d5..b4b1294 100644 --- a/nuxt/components/Atoms/Button.vue +++ b/nuxt/components/Atoms/Button.vue @@ -28,14 +28,19 @@ const classes = computed(() => { padding: var(--space-4) var(--space-8); border-radius: var(--space-2); cursor: pointer; + transition: var(--transition-state); user-select: none; + &:disabled { + cursor: not-allowed; + } + &.primary { color: var(--background-color); border: var(--space-0) solid transparent; background-color: var(--blues-blue); - &:hover { + &:hover:enabled { color: var(--blues-blue); background-color: var(--background-color); border: var(--space-0) solid var(--blues-blue); @@ -47,7 +52,7 @@ const classes = computed(() => { color: var(--blues-blue); border: var(--space-0) solid var(--blues-blue); - &:hover { + &:hover:enabled { background-color: var(--blues-blue); color: var(--background-color); border: var(--space-0) solid transparent; diff --git a/nuxt/components/Atoms/CategoryTeaser.vue b/nuxt/components/Atoms/CategoryTeaser.vue index bb01245..7fa49cc 100644 --- a/nuxt/components/Atoms/CategoryTeaser.vue +++ b/nuxt/components/Atoms/CategoryTeaser.vue @@ -86,7 +86,7 @@ const to = computed(() => { width: var(--max-width-slide); height: 100%; object-fit: cover; - transition: 0.15s ease-in-out; + transition: var(--transition-slider); filter: blur(0.625rem); position: absolute; left: 50%; diff --git a/nuxt/components/Atoms/Cellphone.vue b/nuxt/components/Atoms/Cellphone.vue new file mode 100644 index 0000000..433d27e --- /dev/null +++ b/nuxt/components/Atoms/Cellphone.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/nuxt/components/Atoms/InputWrapper.vue b/nuxt/components/Atoms/InputWrapper.vue index 2b4a2de..20a83f7 100644 --- a/nuxt/components/Atoms/InputWrapper.vue +++ b/nuxt/components/Atoms/InputWrapper.vue @@ -20,6 +20,7 @@ const classes = computed(() => { return { 'input-wrapper': true, inline: props.inline, + label: !!props.label, }; }); @@ -29,23 +30,31 @@ const classes = computed(() => { display: grid; grid-template-columns: 1fr; grid-template-rows: min-content auto; - grid-template-areas: 'label' 'input'; + grid-template-areas: 'input'; gap: var(--space-4); - background-color: var(--background-color); color: var(--text-color); width: 100%; + &.label { + grid-template-areas: 'label' 'input'; + } + &.inline { grid-template-columns: min-content auto; grid-template-rows: min-content; - grid-template-areas: 'label input'; + grid-template-areas: 'input'; + + &.label { + grid-template-areas: 'label input'; + } } label { grid-area: label; display: flex; align-items: center; - font-size: var(--font-size-lg); + font-size: var(--font-size-base); + font-weight: var(--font-weight-light); text-wrap: nowrap; } diff --git a/nuxt/components/Atoms/Tablet.vue b/nuxt/components/Atoms/Tablet.vue new file mode 100644 index 0000000..fcb6296 --- /dev/null +++ b/nuxt/components/Atoms/Tablet.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/nuxt/components/Molecules/Branding/Header.vue b/nuxt/components/Molecules/Branding/Header.vue index 0f44a1b..c6fd45f 100644 --- a/nuxt/components/Molecules/Branding/Header.vue +++ b/nuxt/components/Molecules/Branding/Header.vue @@ -2,7 +2,7 @@

const { branding } = storeToRefs(useFlixStore()); + const description = computed(() => branding.value?.intro.description?.substring(0, 300)); + const introStyle = computed(() => { const styles = {} as Record; + if (branding.value?.banner) { - styles['--url'] = `url(${branding.value?.banner})`; + styles['--url'] = `url(${branding.value.banner.url})`; } + return styles; }); + const introClass = computed(() => { return { intro: true, diff --git a/nuxt/components/Molecules/Buttons/Category.vue b/nuxt/components/Molecules/Buttons/Category.vue index 563b2d2..6076db4 100644 --- a/nuxt/components/Molecules/Buttons/Category.vue +++ b/nuxt/components/Molecules/Buttons/Category.vue @@ -10,15 +10,24 @@ diff --git a/nuxt/components/Molecules/Form/Upload.vue b/nuxt/components/Molecules/Form/Upload.vue index be9148f..58d9bcb 100644 --- a/nuxt/components/Molecules/Form/Upload.vue +++ b/nuxt/components/Molecules/Form/Upload.vue @@ -8,10 +8,10 @@
- {{ prompt }} + {{ prompt }}