--- export interface Props { date: string title: string link: string image: string user?: string ta_servant?: string turns?: string } const { turns, ta_servant, user, date, image, link, title } = Astro.props const options_date: Intl.DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit', } const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date) const icon: string = `background-image: url('/assets/ta_icons/${image}.webp')` const servant: string = `/assets/ta_icons/ta_servants/${ta_servant}.webp` let hasuser = '' if (user !== undefined) { hasuser = 'hasuser' } --- <a href={link} target="_blank" rel="noopener noreferrer" aria-label={title}> <article> <div class="icon" style={icon}> <span> <h2>{title}</h2> </span> </div> <p> <span class={hasuser}> By {user}<br /> • </span> {formatted_date} </p> <div class="expand-on-hover"> <img src={servant} alt="" /> <h2>{turns}</h2> </div> </article> </a> <style> span { display: none; } .hasuser { display: flex; } a { text-decoration: none; } article { background-color: var(--c-darkergray); border-color: var(--c-darkgray); padding: 10px; text-align: center; transition: transform var(--speed) var(--ease); height: auto; width: auto; border-radius: 1.25rem; padding-bottom: 1.5rem; } article:hover { transform: scale(var(--hover-scale)); } article > .icon { border-radius: 1.25rem; --size-value: 7rem; width: var(--size-value); height: var(--size-value); margin: 0.5rem; background-size: var(--size-value); background-position: center center; } article:hover .icon span { display: flex; position: absolute; align-items: center; justify-content: center; text-align: center; background-color: var(--c-darkgray); height: calc(var(--size-value) + 0.1rem); width: calc(var(--size-value) + 0.1rem); opacity: 90%; border-radius: 1.25rem; } article:hover span h2 { margin: 0; display: inline-flex; font-weight: bold; color: white; font-size: 18px; line-height: 150%; padding: 0.5rem; } article span h2 { display: none; } article .icon span { display: none; } .icon { display: flex; justify-content: center; align-items: center; } p { display: flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; text-decoration: none; color: white; font-size: 1rem; font-weight: bold; padding-top: 0.5rem; margin: 0.5rem 0px; flex-wrap: wrap; flex-direction: column; } .expand-on-hover { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: space-evenly; background-color: var(--c-duskgray); z-index: 99; transform: scaleY(0); transform-origin: top; position: absolute; top: 90%; left: 0px; right: 0px; color: white; border-radius: 0px 0px 1.25rem 1.25rem; } .expand-on-hover img { width: 3rem; height: 3rem; margin-top: 0.5rem; margin-bottom: 0.5rem; border-radius: 0.5rem; } .expand-on-hover h2 { margin: 0.5rem; } article:hover .expand-on-hover { transform: scaleY(1); transition: transform 200ms ease-in-out; background-color: var(--c-duskgray); } </style>