<template> <div class="card" :class="{'card--has-link' : link}"> <g-link v-if="link" class="card__link" :to="link"> Read more </g-link> <div class="card__title" v-if="title"> <span>{{ title }}</span> </div> <div v-if="image" class="card__image"> <g-image :src="image" /> </div> <div class="card__inner"> <slot /> </div> <slot name="outer" /> </div> </template> <script> export default { props: ['link', 'image', 'title'], computed: { cardClasses() { let classes = [] if(this.gradient) classes.push('gradient-' + this.gradient) return classes } } } </script> <style lang="scss"> .card { border: 1px solid var(--border-color-darker); border-radius: 4px; background-color: var(--light-bg); transition: color.3s, box-shadow .3s, transform .3s; position: relative; z-index: 1; box-shadow: 1px 1px 5px 0 #5bb19620; &__title { text-align: center; width: 100%; margin-top: -16px; span { display: inline-block; padding: 2px 12px 4px; background-color: var(--dark-bg); color: #FFF; border-radius: 3px; font-weight: 500; font-size: 1rem; letter-spacing: .5px; } } &__image { border-radius: 4px 4px 0 0; overflow: hidden; border-bottom: 1px solid var(--border-color); img { margin: 0; width: 100%; } } &__inner { padding: var(--space); overflow: hidden; position: relative; } &[class*='container'] &__inner { padding-left: 0; padding-right: 0; } .section--dark & { background-color: var(--dark-bg); border-color: rgba(255,255,255,.1); } &__link { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.0; overflow: hidden; text-indent: -9999px; z-index: 1; &:focus { opacity: 1; outline: 2px auto -webkit-focus-ring-color; } } a:not(.card__link) { position: relative; z-index: 1; } &--has-link:hover { transform: translateY(-3px); box-shadow: var(--glow); color: currentColor; } h2, h3, h4 { margin-bottom: .5rem; } p:not(:last-child) { margin-bottom: 1.2rem; } } </style>