/* Parent container remains plain (the cards themselves have the rounded and pop styling) */
.deck-container {
position: relative;
width: 380px;
margin: 2rem auto;
height: 450px;
background-color: transparent;
border-radius: 0;
box-shadow: none;
padding: 1rem;
}
.deck-inner {
position: relative;
height: 100%;
}
/* ---- Card Styling (only these get rounded edges, border, and popout effects) ---- */
.image-card {
position: absolute;
top: 0;
left: 0;
width: 320px;
border-radius: 20px; /* Rounded corners on each card */
overflow: hidden; /* Clip internal content to stay inside rounded edges */
border: 3px solid #81C784; /* Visible border */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Base popout shadow */
transition: transform 0.5s ease, opacity 0.5s ease, box-shadow 0.5s ease;
opacity: 0;
transform: scale(0.8) translateX(0);
}
/* Active (center) card */
.image-card.active {
z-index: 3;
opacity: 1;
transform: scale(1) translateX(0);
}
/* Previous card (offset left, rotated slightly) */
.image-card.prev {
z-index: 2;
opacity: 1;
transform: scale(0.9) translateX(-40px) rotate(-5deg);
}
/* Next card (offset right, rotated slightly) */
.image-card.next {
z-index: 2;
opacity: 1;
transform: scale(0.9) translateX(40px) rotate(5deg);
}
/* Hover effects for each card */
.image-card.active:hover {
transform: scale(1.05) translateX(0) translateY(-5px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.25);
}
.image-card.prev:hover {
transform: scale(0.93) translateX(-40px) rotate(-5deg) translateY(-5px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.25);
}
.image-card.next:hover {
transform: scale(0.93) translateX(40px) rotate(5deg) translateY(-5px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.25);
}
/* Image styling within each card */
.image-card img.event-image {
width: 100%;
height: 280px;
object-fit: contain;
background: #f5faf6;
border-bottom: 3px solid #81C784;
display: block;
}
/* Caption styling */
.image-caption {
padding: 1rem;
background: #f8fef8;
text-align: center;
}
.image-caption h3 {
color: #2e7d32;
margin-bottom: 0.5rem;
font-size: 1.25rem;
}
.image-caption p {
color: #666;
font-size: 0.95rem;
line-height: 1.5;
}
/* Toggle button styling */
.deck-toggle {
position: absolute;
top: 50%;
transform: translateY(-50%);
background-color: rgba(46,125,50,0.8);
border: none;
color: white;
font-size: 2rem;
padding: 0.5rem;
cursor: pointer;
z-index: 5;
}
.left-toggle {
left: -50px;
}
.right-toggle {
right: -50px;
}
/* Responsive adjustments for tablets and small devices */
@media (max-width: 768px) {
.deck-container {
width: 340px;
height: 400px;
padding: 0.5rem;
}
.image-card {
width: 280px;
}
.left-toggle {
left: -40px;
}
.right-toggle {
right: -40px;
}
.image-card.prev {
transform: scale(0.9) translateX(-30px) rotate(-5deg);
}
.image-card.next {
transform: scale(0.9) translateX(30px) rotate(5deg);
}
.image-card img.event-image {
height: 240px;
}
}
@media (max-width: 480px) {
.deck-container {
width: 300px;
height: 360px;
padding: 0.3rem;
}
.image-card {
width: 260px;
}
.left-toggle {
left: -35px;
}
.right-toggle {
right: -35px;
}
.image-card.prev {
transform: scale(0.9) translateX(-25px) rotate(-5deg);
}
.image-card.next {
transform: scale(0.9) translateX(25px) rotate(5deg);
}
.image-card img.event-image {
height: 220px;
}
}
❮
Historical Presentation
Reggio McLaughlin unveils the evolution of tap dancing through rare archival footage.
Rhythm in Motion
Classic tap routines meet contemporary styles.
Interactive Archive
Decades of tap history at your fingertips.
Honoring Legacy
Preserving tap's cultural heritage with honor.
Creative Process
Behind the scenes of a master at work.
Community Celebration
Audience shares in a lively Q&A about tap's legacy.
❯
(function() {
const cards = document.querySelectorAll('.deck-inner .image-card');
let activeIndex = 0;
function updateCards() {
cards.forEach((card, index) => {
card.classList.remove('prev', 'active', 'next');
if (index === activeIndex) {
card.classList.add('active');
} else if (index === activeIndex - 1) {
card.classList.add('prev');
} else if (index === activeIndex + 1) {
card.classList.add('next');
}
});
}
function showNext() {
activeIndex = (activeIndex + 1) % cards.length;
updateCards();
}
function showPrev() {
activeIndex = (activeIndex - 1 + cards.length) % cards.length;
updateCards();
}
document.querySelector('.right-toggle').addEventListener('click', showNext);
document.querySelector('.left-toggle').addEventListener('click', showPrev);
// Initialize the deck on page load
updateCards();
})();