.section { margin-bottom: 32px; } /* ---- Horizontal carousels ---- */ .carousel { display: flex; gap: 16px; overflow-x: auto; padding-bottom: 10px; } .carousel .tile { flex: 0 0 160px; } .carousel .partyCard { flex: 0 0 280px; } .partyCard { display: flex; align-items: center; gap: 12px; background: var(--bg-header); border-radius: 10px; padding: 10px; } .partyCard img { width: 48px; height: 72px; object-fit: cover; border-radius: 6px; background: var(--panel); flex-shrink: 0; } /* A music party's own cover art is square (an album's, not a movie/show poster) - the portrait 48x72 box above was forcing a hard crop on it. Video parties keep the portrait box unchanged. */ .partyCard img.partyCardArt--square { width: 56px; height: 56px; } .partyCard img.noImage { visibility: hidden; } .partyCardInfo { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; } .partyCardInfo strong { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .partyCard button { flex-shrink: 0; padding: 8px 14px; font-size: 13px; } /* Stands in for "Rejoindre" on the one card that's this browser tab's own active listen party - see renderParties in Home.ts. Same footprint as the button it replaces, so the row doesn't visibly reflow. */ .partyCardMine { flex-shrink: 0; padding: 8px 14px; color: var(--accent-bright); font-weight: 600; }