.card { display: flex; flex-direction: column; min-width: 0; height: fit-content; align-self: start; } .link { display: flex; flex-direction: column; color: inherit; text-decoration: none; min-width: 0; } .coverWrap { position: relative; height: 150px; overflow: hidden; border-radius: 5px 5px 0 0; } .cover { object-fit: cover; } .coverWrap > img.cover { position: absolute; inset: 0; width: 100%; height: 100%; } .body { position: relative; z-index: 1; border: 1px solid var(--color-card); border-top: 0; border-radius: 0 0 5px 5px; padding: 0 16px 14px; background: var(--color-white); overflow: visible; } /* Hovering the cover (or anywhere on the card) also runs the body wipe. */ .link:hover .body:global(.tile-hover)::before, .link:focus-within .body:global(.tile-hover)::before { clip-path: inset(0 0 0 0); } .link:hover .body:global(.tile-hover) :is(h1, h2, h3, p, span, strong, a), .link:focus-within .body:global(.tile-hover) :is(h1, h2, h3, p, span, strong, a) { color: var(--color-white); } .info { position: relative; z-index: 2; margin-top: -36px; background: var(--color-card); border-radius: 5px; padding: 12px 14px 10px; } .info > * { position: relative; z-index: 1; } /* Keep the gray identity panel readable while the body wipe fills below. */ .link:hover .body:global(.tile-hover) .info .name, .link:focus-within .body:global(.tile-hover) .info .name { color: var(--color-black); } .link:hover .body:global(.tile-hover) .info .tagline, .link:focus-within .body:global(.tile-hover) .info .tagline { color: var(--color-muted); } .link:hover .body:global(.tile-hover) .info .meta, .link:focus-within .body:global(.tile-hover) .info .meta, .link:hover .body:global(.tile-hover) .info .products, .link:focus-within .body:global(.tile-hover) .info .products, .link:hover .body:global(.tile-hover) .info .since, .link:focus-within .body:global(.tile-hover) .info .since, .link:hover .body:global(.tile-hover) .info .products strong, .link:focus-within .body:global(.tile-hover) .info .products strong, .link:hover .body:global(.tile-hover) .info .since strong, .link:focus-within .body:global(.tile-hover) .info .since strong { color: var(--color-dark); } .link:hover .body:global(.tile-hover) .info .divider, .link:focus-within .body:global(.tile-hover) .info .divider { background: #cfcfcf; } .identity { display: flex; align-items: center; gap: 10px; } .logo { width: 36px; height: 30px; object-fit: contain; flex-shrink: 0; } .logo.wide { width: 62px; height: 30px; } .logo.round { width: 42px; height: 42px; object-fit: cover; margin-top: -12px; } .logo.square { width: 42px; height: 42px; object-fit: cover; margin-top: -6px; } .name { font-size: 14px; font-weight: 400; letter-spacing: 2.4px; text-transform: uppercase; line-height: 1.2; } .tagline { font-size: 11px; font-weight: 300; color: var(--color-muted); margin-top: 2px; transition: color 0.3s ease; } .meta { display: flex; align-items: center; gap: 10px; margin-top: 6px; color: var(--color-dark); transition: color 0.3s ease; } .products strong, .since strong { font-weight: 500; } .products { font-size: 10px; font-weight: 300; } .products strong { font-size: 12px; } .since { font-size: 10px; font-weight: 300; } .since strong { font-size: 13px; } .divider { width: 1px; height: 14px; background: #cfcfcf; } .description { position: relative; z-index: 1; margin-top: 12px; font-size: 13px; font-weight: 300; line-height: 18px; color: var(--color-muted); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; text-overflow: ellipsis; transition: color 0.3s ease; } .rule { position: relative; z-index: 1; height: 1px; background: var(--color-card); margin: 10px 0 8px; transition: background 0.3s ease; } .link:hover .body:global(.tile-hover) .rule, .link:focus-within .body:global(.tile-hover) .rule { background: rgba(255, 255, 255, 0.2); } .footerRow { position: relative; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 12px; } .tag { flex: 1; min-width: 0; font-size: 11px; font-weight: 300; color: var(--color-soft); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: color 0.3s ease; } .rowArrow { width: 8px; height: 14px; object-fit: contain; flex-shrink: 0; opacity: 0.55; transition: opacity 0.3s ease, filter 0.3s ease; } .link:hover .body:global(.tile-hover) .rowArrow, .link:focus-within .body:global(.tile-hover) .rowArrow { opacity: 1; filter: brightness(0) invert(1); } @media (prefers-reduced-motion: reduce) { .rule, .tag, .rowArrow, .description { transition: none; } }