finishing products

This commit is contained in:
José Conde 2023-06-13 21:09:39 +02:00
parent f3e99183ae
commit cc458a43db
10 changed files with 291 additions and 209 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

View File

@ -26,6 +26,7 @@ export default {
font-weight: 700; font-weight: 700;
font-size: 24px; font-size: 24px;
line-height: 28px; line-height: 28px;
padding: 0;
} }
.role { .role {
@ -33,5 +34,6 @@ export default {
font-weight: 500; font-weight: 500;
font-size: 20px; font-size: 20px;
line-height: 23.44px; line-height: 23.44px;
padding: 0;
} }
</style> </style>

View File

@ -0,0 +1,63 @@
<template>
<div class="product-box">
<div class="product-box-image">
<img :src="$helper.getImage(product.image_product_1)" alt="">
</div>
<div class="product-box-bottom">
<h1>{{ $t(product.name) }}</h1>
<div class="separator"></div>
<p class="farm">{{ $t(product.farm) }}</p>
<p class="strain">{{ $t(product.strain) }}</p>
</div>
</div>
</template>
<script>
export default {
props: {
product: Object,
}
}
</script>
<style lang="scss" scoped>
.product-box{
display: inline-block;
width: 560px;
height: 573px;
background-image: url('@images/bg_1.png');
background-position: top left;
padding: 24px;
color: #603809;
h1 {
font-weight: 400;
font-size: 44px;
text-align: left;;
}
&-image {
height: 320px;
}
&-bottom {
margin-top: 24px;
padding: 20px;
background-color: #fff;
height: 181px;
p {
font-weight: 400;
line-height: 22px;
margin: 8px 0;
}
.separator {
border-bottom: 2px solid #603809;
margin-right: 20%;
margin-bottom: 24px;
}
}
}
</style>

View File

@ -1,10 +1,4 @@
<script> <script>
const kinds = {
earth: 'common.earth',
water: 'common.water',
air: 'common.air',
fire: 'common.fire',
}
export default { export default {
props: { props: {
product: Object product: Object
@ -12,12 +6,14 @@ export default {
data() { data() {
return { return {
flipped: false, flipped: false,
kinds,
} }
}, },
methods: { methods: {
toggle() { toggle() {
this.flipped = !this.flipped; this.flipped = !this.flipped;
},
translate(val) {
console.log('Vue.$t :>> ', Vue.$t);
} }
} }
} }
@ -29,7 +25,7 @@ export default {
<div class="flip-card-front"> <div class="flip-card-front">
<img class="logo" :src="$helper.getImage(product.image)" /> <img class="logo" :src="$helper.getImage(product.image)" />
<div> <div>
<h3 class="title">{{ $t(kinds[product.kind])}}</h3> <h3 class="title">{{ $t(product.kind_localized)}}</h3>
<h3 class="slogan">{{ $t(product.slogan) }}</h3> <h3 class="slogan">{{ $t(product.slogan) }}</h3>
</div> </div>
<div class="description">{{ $t(product.description) }}</div> <div class="description">{{ $t(product.description) }}</div>
@ -37,65 +33,75 @@ export default {
<div class="flip-card-back"> <div class="flip-card-back">
<div class="info"> <div class="info">
<div class="info-header"> <div class="info-header">
<h3 class="title centered">{{ $t(product.info.name) }}</h3> <h3 class="title centered">{{ $t(product.name) }}</h3>
<h3>- {{ $t(product.info.farm) }} -</h3> <h3>- {{ $t(product.farm) }} -</h3>
<p class="strain">{{ $t(product.info.strain) }}</p> <p class="strain">{{ $t(product.strain) }}</p>
</div> </div>
<div class="info-data"> <div class="info-data">
<div class="info-data-left"> <div class="info-data-left">
<img class="logo" :src="$helper.getImage(product.image)" /> <img class="logo" :src="$helper.getImage(product.image)" />
<p class="kind">{{ $t(kinds[product.kind]) }}</p> <p class="kind">{{ $t(product.kind_localized) }}</p>
<p class="slogan">{{ $t(product.slogan) }}</p> <p class="slogan">{{ $t(product.slogan) }}</p>
</div> </div>
<div class="info-data-right"> <div class="info-data-right">
<div class="info-data-row"> <div class="info-data-row">
<div class="info-data-box land"> <div class="info-data-box land">
<div class="info-data-box-label">{{ $t('Land / region') }}</div> <div class="info-data-box-label">{{ $t('labels.country') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow" :title="`${$t('Brasil')} / ${$t('Cerrado, Carmo do paranaiba')}`">{{ $t('Brasil') }}/{{ $t('Cerrado, Carmo do paranaiba') }}</div> {{ $t(product.country) }}
</div> </div>
</div> </div>
<div class="info-data-box height"> <div class="info-data-box height">
<div class="info-data-box-label">{{ $t('Altura') }}</div> <div class="info-data-box-label">{{ $t('labels.height') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow">{{ $t('1.100 m') }}</div> <div class="text-overflow">
{{ $t(product.height) }}
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="info-data-row"> <div class="info-data-row">
<div class="info-data-box revision"> <div class="info-data-box revision">
<div class="info-data-box-label">{{ $t('Revisión') }}</div> <div class="info-data-box-label">{{ $t('labels.revision') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow">{{ $t('Secado al sol') }}</div> <div class="text-overflow">
{{ $t(product.revision) }}
</div>
</div> </div>
</div> </div>
<div class="info-data-box harvest"> <div class="info-data-box harvest">
<div class="info-data-box-label">{{ $t('Cosecha') }}</div> <div class="info-data-box-label">{{ $t('labels.harvest') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow">{{ $t('Seleccionado') }}</div> <div class="text-overflow">
{{ $t(product.harvest) }}
</div>
</div> </div>
</div> </div>
<div class="info-data-box profile"> <div class="info-data-box profile">
<div class="info-data-box-label">{{ $t('Perfil') }}</div> <div class="info-data-box-label">{{ $t('labels.profile') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow">{{ $t('1/4') }}</div> <div class="text-overflow">
{{ $t(product.profile) }}
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="info-data-row"> <div class="info-data-row">
<div class="info-data-box taste"> <div class="info-data-box taste">
<div class="info-data-box-label">{{ $t('Sabor') }}</div> <div class="info-data-box-label">{{ $t('labels.taste') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow"> <div class="text-overflow">
{{ $t('Chocolate, ligero ácido de frutas') }} {{ $t(product.taste) }}
</div> </div>
</div> </div>
</div> </div>
<div class="info-data-box mouthfeel"> <div class="info-data-box mouthfeel">
<div class="info-data-box-label">{{ $t('Gusto') }}</div> <div class="info-data-box-label">{{ $t('labels.texture') }}</div>
<div class="info-data-box-value"> <div class="info-data-box-value">
<div class="text-overflow">{{ $t('Ligeramente picante') }}</div> <div class="text-overflow">
{{ $t(product.texture) }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -118,6 +124,10 @@ h3 {
text-align: left; text-align: left;
} }
.description {
white-space: pre-line;
}
.flip-card { .flip-card {
cursor: pointer; cursor: pointer;
height: 444px; height: 444px;

View File

@ -57,20 +57,72 @@ export default {
brasil_de_andrade: { brasil_de_andrade: {
slogan: 'Nacido para crear', slogan: 'Nacido para crear',
description: 'La tierra, buscamos activamente las mejores fincas cafeteras a nivel mundial donde suelos ricos en nutrientes son la base para formar granos de café de alta calidad. Desde las fértiles plantaciones de América Latina hasta las exóticas zonas de cultivo de África, nos centramos en la sostenibilidad y el comercio justo.', description: 'La tierra, buscamos activamente las mejores fincas cafeteras a nivel mundial donde suelos ricos en nutrientes son la base para formar granos de café de alta calidad. Desde las fértiles plantaciones de América Latina hasta las exóticas zonas de cultivo de África, nos centramos en la sostenibilidad y el comercio justo.',
info: {
name: 'Brasil de Andrade', name: 'Brasil de Andrade',
farm: 'Capim Branco', farm: 'Capim Branco',
strain: '100% Arabica', strain: '100% Arábica',
land: 'Brasil', country: 'Brasil/ Cerrado, Carmo do paranaiba',
region: 'Cerrado, Carmo do paranaiba',
height: '1.100 m', height: '1.100 m',
revision: 'Secado al sol', revision: 'Secado al sol',
harvest: 'Seleccionado cuidadosamente', harvest: 'Seleccionado cuidadósamente',
profile: '1/4', profile: '1/4',
taste: 'Chocolate, ligero ácido de frutas.', taste: 'Chocolate, ligero ácido de frutas.',
mouthfeel: 'Ligeramente picante' texture: 'Ligeramente picante'
} },
} colombia_el_paseito: {
slogan: 'Nacido para sentir',
description: `El agua, juega un papel decisivo en la preparación del café.
Por lo tanto, solo utilizamos agua de primera clase que se adapta perfectamente a los requisitos individuales de cada café.
La cantidad y calidad correcta del agua despliega los aromas y sabores en cada taza.`,
name: 'Colombia El Pastelito',
farm: 'La Mejorana',
strain: '100% Arábica',
country: 'Colombia /Quimbaya, Quindío',
height: '1.470 m',
revision: 'Secado al sol',
harvest: 'Seleccionado cuidadósamente',
profile: '3/4',
taste: 'Leche acaramelada.',
texture: 'Lleno'
},
peru_grad_1: {
slogan: 'Nacido para inspirar',
description: `El aire, es otra parte esencial de nuestra pasión por el café, damos gran importancia a los granos de café recién tostados que conservan su aroma y sabor inconfundibles.
Es por eso que tostamos en pequeños lotes para asegurarnos de que cada taza que disfrutes esté llena de frescura y aroma.`,
name: 'Perú Grad 1',
farm: 'Yakumama',
strain: '100% Arábica',
country: 'Perú / Puno, Sandia',
height: '1.800 m',
revision: 'Secado al sol',
harvest: 'Seleccionado cuidadósamente',
profile: '3/4',
taste: '-',
texture: '-'
},
uganda_gnoma: {
slogan: 'Nacido para triunfar',
description: `El fuego, la pasión que resuena en cada paso de nuestro trabajo.
Desde la selección de variedades de café verde hasta el cuidadoso tostado y la preparación amorosa, estamos allí con alma y corazón para ofrecerte una experiencia de café extraordinaria.`,
name: 'Uganda Ngoma',
farm: 'Espresso No3',
strain: '100% Robusta',
country: 'Uganda / Wakiso District',
height: '1.250 m',
revision: 'Secado al sol',
harvest: 'Seleccionado cuidadósamente',
profile: '4/4',
taste: '-.',
texture: '-'
},
},
labels: {
country: 'País / Región',
height: 'Altura',
revision: 'Revisión',
harvest: 'Cosecha',
profile: 'Perfil',
taste: 'Gusto',
texture: 'Textura'
}, },
common: { common: {
earth: 'Tierra', earth: 'Tierra',

View File

@ -1,5 +1,6 @@
const getImage = (image) => { const getImage = (image) => {
return new URL(`/src/assets/images/${image}`, import.meta.url).href; const imageURL = new URL(`/src/assets/images/${image}`, import.meta.url).href;
return imageURL || '';
} }
export default { export default {

View File

@ -3,81 +3,87 @@
import 'vue3-carousel/dist/carousel.css' import 'vue3-carousel/dist/carousel.css'
import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel' import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel'
import ProductFlipCard from "../../components/ProductFlipCard.vue"; import ProductFlipCard from "../../components/ProductFlipCard.vue";
import ProductBox from '../../components/ProductBox.vue';
import Certifications from "../../components/Certifications.vue";
const products = [ const products = [
{ {
kind: 'earth', kind: 'earth',
kind_localized: 'common.earth',
name: 'products.brasil_de_andrade.name',
image: 'logo_tierra.svg', image: 'logo_tierra.svg',
slogan: 'Nacido para crear', image_product_1: 'product-brasil-single.png',
description: 'La tierra, buscamos activamente las mejores fincas cafeteras a nivel mundial donde suelos ricos en nutrientes son la base para formar granos de café de alta calidad. Desde las fértiles plantaciones de América Latina hasta las exóticas zonas de cultivo de África, nos centramos en la sostenibilidad y el comercio justo.', image_product_2: 'product-brasil-single.png',
info: { slogan: 'products.brasil_de_andrade.slogan',
name: 'Brasil de Andrade', description: 'products.brasil_de_andrade.description',
farm: 'Capim Branco', farm: 'products.brasil_de_andrade.farm',
strain: '100% Arabica', strain: 'products.brasil_de_andrade.strain',
land: 'Brasilien / Cerrado, Carmo do paranaiba', country: 'products.brasil_de_andrade.country',
height: '1.100 m', height: 'products.brasil_de_andrade.height',
revision: 'Secado al sol', revision: 'products.brasil_de_andrade.revision',
harvest: 'Seleccionado cuidadosamente', harvest: 'products.brasil_de_andrade.harvest',
profile: '1/4', profile: 'products.brasil_de_andrade.profile',
taste: 'Chocolate, ligero ácido de frutas.', taste: 'products.brasil_de_andrade.taste',
mouthfeel: 'Ligeramente picante' texture: 'products.brasil_de_andrade.texture'
}
}, },
{ {
kind: 'water', kind: 'water',
kind_localized: 'common.water',
name: 'products.colombia_el_paseito.name',
image: 'logo_agua.svg', image: 'logo_agua.svg',
slogan: 'Nacido para sentir', image_product_1: 'product-brasil-single.png',
description: 'El agua, juega un papel decisivo en la preparación del café. Por lo tanto, solo utilizamos agua de primera clase que se adapta perfectamente a los requisitos individuales de cada café. La cantidad y calidad correcta del agua despliega los aromas y sabores en cada taza.', image_product_2: 'product-brasil-single.png',
info: { slogan: 'products.colombia_el_paseito.slogan',
name: 'Brasil de Andrade', description: 'products.colombia_el_paseito.description',
farm: 'Capim Branco', farm: 'products.colombia_el_paseito.farm',
strain: '100% Arabica', strain: 'products.colombia_el_paseito.strain',
land: 'Brasilien / Cerrado, Carmo do paranaiba', country: 'products.colombia_el_paseito.country',
height: '1.100 m', height: 'products.colombia_el_paseito.height',
revision: 'Secado al sol', revision: 'products.colombia_el_paseito.revision',
harvest: 'Seleccionado cuidadosamente', harvest: 'products.colombia_el_paseito.harvest',
profile: '1/4', profile: 'products.colombia_el_paseito.profile',
taste: 'Chocolate, ligero ácido de frutas.', taste: 'products.colombia_el_paseito.taste',
mouthfeel: 'Ligeramente picante' texture: 'products.colombia_el_paseito.texture'
}
}, },
{ {
kind: 'air', kind: 'air',
kind_localized: 'common.air',
name: 'products.peru_grad_1.name',
image: 'logo_aire2.svg', image: 'logo_aire2.svg',
slogan: 'Nacido para inspirar', image_product_1: 'product-brasil-single.png',
description: 'El aire, es otra parte esencial de nuestra pasión por el café, damos gran importancia a los granos de café recién tostados que conservan su aroma y sabor inconfundibles. Es por eso que tostamos en pequeños lotes para asegurarnos de que cada taza que disfrutes esté llena de frescura y aroma.', image_product_2: 'product-brasil-single.png',
info: { slogan: 'products.peru_grad_1.slogan',
name: 'Brasil de Andrade', description: 'products.peru_grad_1.description',
farm: 'Capim Branco', farm: 'products.peru_grad_1.farm',
strain: '100% Arabica', strain: 'products.peru_grad_1.strain',
land: 'Brasilien / Cerrado, Carmo do paranaiba', country: 'products.peru_grad_1.country',
height: '1.100 m', height: 'products.peru_grad_1.height',
revision: 'Secado al sol', revision: 'products.peru_grad_1.revision',
harvest: 'Seleccionado cuidadosamente', harvest: 'products.peru_grad_1.harvest',
profile: '1/4', profile: 'products.peru_grad_1.profile',
taste: 'Chocolate, ligero ácido de frutas.', taste: 'products.peru_grad_1.taste',
mouthfeel: 'Ligeramente picante' texture: 'products.peru_grad_1.texture'
}
}, },
{ {
kind: 'fire', kind: 'fire',
kind_localized: 'common.fire',
name: 'products.uganda_gnoma.name',
image: 'logo_fuego.svg', image: 'logo_fuego.svg',
slogan: 'Nacido para triunfar', image_product_1: 'product-brasil-single.png',
description: 'El fuego, la pasión que resuena en cada paso de nuestro trabajo. Desde la selección de variedades de café verde hasta el cuidadoso tostado y la preparación amorosa, estamos allí con alma y corazón para ofrecerte una experiencia de café extraordinaria.', image_product_2: 'product-brasil-single.png',
info: { slogan: 'products.uganda_gnoma.slogan',
name: 'Brasil de Andrade', description: 'products.uganda_gnoma.description',
farm: 'Capim Branco', farm: 'products.uganda_gnoma.farm',
strain: '100% Arabica', strain: 'products.uganda_gnoma.strain',
land: 'Brasilien / Cerrado, Carmo do paranaiba', country: 'products.uganda_gnoma.country',
height: '1.100 m', height: 'products.uganda_gnoma.height',
revision: 'Secado al sol', revision: 'products.uganda_gnoma.revision',
harvest: 'Seleccionado cuidadosamente', harvest: 'products.uganda_gnoma.harvest',
profile: '1/4', profile: 'products.uganda_gnoma.profile',
taste: 'Chocolate, ligero ácido de frutas.', taste: 'products.uganda_gnoma.taste',
mouthfeel: 'Ligeramente picante' texture: 'products.uganda_gnoma.texture'
}
}, },
] ];
export default { export default {
data() { data() {
@ -91,7 +97,9 @@
Slide, Slide,
Pagination, Pagination,
Navigation, Navigation,
ProductFlipCard ProductFlipCard,
ProductBox,
Certifications
}, },
methods: { methods: {
getImage(image) { getImage(image) {
@ -108,21 +116,12 @@
<p>Las culturas indígenas siempre han tenido una estrecha relación con su entorno natural, encontrando en la armonía con los cuatro elementos: fuego, agua, aire y tierra, el sentido de sus vidas, y es esta misma relación la que describe maravillosamente nuestra serie de cafés.</p> <p>Las culturas indígenas siempre han tenido una estrecha relación con su entorno natural, encontrando en la armonía con los cuatro elementos: fuego, agua, aire y tierra, el sentido de sus vidas, y es esta misma relación la que describe maravillosamente nuestra serie de cafés.</p>
<p class="centered"><img src="@images/v-elemento.png" /></p> <p class="centered"><img src="@images/v-elemento.png" /></p>
<div class="cards"> <div class="cards">
<ProductFlipCard class="card" v-for="product in products" :key="product.id" :product="product"></ProductFlipCard> <ProductFlipCard class="card" v-for="(product, index) in products" :key="index" :product="product"></ProductFlipCard>
</div>
<Carousel :items-to-show="2" :wrap-around="true" snap-align="start">
<Slide v-for="slide in slides" :key="slide.class">
<div class="carousel__item" :class="slide.class">
<div class="carousel__item__inner">
<div class="carousel__item__inner__front">
<img class="logo" :src="getImage(slide.image)" />
<h3 class="title">{{ slide.title }}</h3>
<div class="description">{{ slide.description }}</div>
</div>
<div class="carousel__item__inner__back">
back
</div>
</div> </div>
<Carousel class="carousel" :items-to-show="2" :wrap-around="false">
<Slide v-for="product in products" :key="product.kind">
<div class="carousel-item">
<ProductBox :product="product"></ProductBox>
</div> </div>
</Slide> </Slide>
@ -131,109 +130,64 @@
<Pagination /> <Pagination />
</template> </template>
</Carousel> </Carousel>
<Certifications />
</section> </section>
</template> </template>
<style lang="scss" scoped> <style lang="scss">
.product-section.content {
.cards { .cards {
display: grid; display: grid;
grid-template-columns: 50% 50%; grid-template-columns: 50% 50%;
} }
h2 {
padding: 0 !important;
}
.card { .card {
margin: 8px; margin: 8px;
} }
.carousel { .carousel {
margin-top: 32px;
&__item { &-item {
height: 444px; min-height: 570px;
width: 625px; width: 625px;
color: #000;
font-size: 20px; font-size: 20px;
border-radius: 40px;
&:hover &__inner {
transform: rotateY(180deg);
}
&__inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.8s;
transform-style: preserve-3d;
border-radius: 40px;
&__front {
display: grid;
grid-template-columns: 150px auto;
grid-template-rows: 160px auto;
justify-items: start;
align-items: center;
h3 {
font-weight: 500;
font-size: 36px;
line-height: 50px;
text-align: left;
}
.description {
grid-column-start: 1;
grid-column-end: 3;
font-weight: 500;
font-size: 22px;
line-height: 35px;
text-align: justify;
padding: 0 44px;
align-self: flex-start;
}
.logo {
height: 184px;
width: 147px;
}
}
&__front, &__back {
position: absolute;
width: 100%;
height: 100%;
-webkit-backface-visibility: hidden; /* Safari */
backface-visibility: hidden;
}
&__back {
transform: rotateY(180deg);
border-radius: 40px;
}
}
&.tierra {
background-color: #A6AF94;
}
&.agua {
background-color: #889CA7;
}
&.aire {
background-color: #F4EEB0;
}
&.fuego {
background-color: #D58C83;
}
} }
&__slide { &__slide {
padding: 10px; padding: 10px;
} }
&__pagination-button:hover::after, &__pagination-button--active::after {
background: rgba(255,255,255, 0.6);
}
&__pagination-button {
&::after{
background: rgba(255,255,255, 0.3);
}
&--active::after {
background: rgba(255,255,255, 0.6);
&:hover {
background: rgba(255,255,255, 0.6);
}
}
}
&__prev, &__prev,
&__next { &__next {
box-sizing: content-box; box-sizing: content-box;
border: 5px solid white; background : rgba(255,255,255, 0.3);
border-radius: 50px;
border: none;
color: #333;
&:hover {
background : rgba(255,255,255, 0.8);
}
}
} }
} }
</style> </style>