/*
***************
* promo calendar
***************
*/
.promo-calendar {
  --promo-door-bg: var(--gray-400, #9b9b9b);
  --promo-door-front-bg: var(--gray-500, #707070);
  --promo-label-color: #ffffff;
  display: grid;
  position: relative;
}

/*
***************
* tile / door
***************
*/
.promo-calendar .promo-tile {
  background: var(--promo-door-bg);
  padding-top: 100%;
  perspective: 1200px;
  position: relative;
  transform-style: preserve-3d;
  user-select: none;
  -webkit-user-select: none;
}

.promo-calendar .promo-tile-inner {
  inset: 0;
  overflow: hidden;
  position: absolute;
}

/*
***************
* content behind the doors
***************
*/
.promo-calendar .promo-tile-back {
  display: block;
  inset: 0;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  transform: scale(1.02);
  transition:
    opacity 1s ease,
    transform 1s ease;
  z-index: 1;
}

.promo-calendar .promo-tile-image {
  display: block;
  height: 100%;
  object-fit: cover;
  width: 100%;
}

/*
***************
* door halves
***************
*/
.promo-calendar .promo-tile-front {
  backface-visibility: hidden;
  background: var(--promo-door-front-bg);
  border: none;
  bottom: 0;
  cursor: default;
  position: absolute;
  top: 0;
  transform-style: preserve-3d;
  transition: transform 1.2s ease;
  width: 50%;
  z-index: 2;
}

.promo-calendar .promo-tile-front-left {
  left: 0;
  transform-origin: left center;
}

.promo-calendar .promo-tile-front-right {
  right: 0;
  transform-origin: right center;
}

/*
***************
* label (date / lock)
***************
*/
.promo-calendar .promo-tile-label-wrap {
  align-items: center;
  flex-direction: column;
  gap: 0.25rem;
  inset: 0;
  display: flex;
  justify-content: center;
  pointer-events: none;
  position: absolute;
  transition:
    opacity 0.6s ease,
    transform 0.6s ease;
  z-index: 3;
}

.promo-calendar .promo-tile-date {
  color: var(--promo-label-color);
  font-family: 'Work Sans', sans-serif;
  font-size: 1.25rem;
  font-weight: 700;
}

@media (min-width: 768px) {
  .promo-calendar .promo-tile-date {
    font-size: 2rem;
  }
}

.promo-calendar .promo-tile-lock {
  color: var(--promo-label-color);
  font-size: 1.25rem;
}

@media (min-width: 768px) {
  .promo-calendar .promo-tile-lock {
    font-size: 2rem;
  }
}

/*
***************
* state: future (closed, not interactive)
***************
*/
.promo-calendar .promo-tile.is-future .promo-tile-front {
  cursor: default;
}

/*
***************
* state: today (openable, highlighted)
***************
*/
.promo-calendar .promo-tile.is-today {
  animation: promo-glow-pulse 6s ease-in-out infinite;
  box-shadow: 0 0 20px 4px var(--primary, #e21838);
  cursor: pointer;
}

@keyframes promo-glow-pulse {
  50% {
    box-shadow:
      0 0 14px rgba(0, 0, 0, 0.35),
      0 0 28px var(--primary, #e21838);
  }
}

.promo-calendar .promo-tile.is-today .promo-tile-front {
  cursor: pointer;
  width: 38%;
}

.promo-calendar .promo-tile.is-today .promo-tile-front-left {
  transform: rotate3d(0, 1, 0, -20deg);
}

.promo-calendar .promo-tile.is-today .promo-tile-front-right {
  transform: rotate3d(0, 1, 0, 20deg);
}

.promo-calendar .promo-tile.is-today .promo-tile-back {
  opacity: 0.35;
}

/*
***************
* state: open (past auto-open, today after click, preview)
***************
*/
.promo-calendar .promo-tile.is-open .promo-tile-front-left,
.promo-calendar .promo-tile.is-preview .promo-tile-front-left {
  pointer-events: none;
  transform: rotate3d(0, 1, 0, -130deg);
}

.promo-calendar .promo-tile.is-open .promo-tile-front-right,
.promo-calendar .promo-tile.is-preview .promo-tile-front-right {
  pointer-events: none;
  transform: rotate3d(0, 1, 0, 130deg);
}

.promo-calendar .promo-tile.is-open .promo-tile-back,
.promo-calendar .promo-tile.is-preview .promo-tile-back {
  opacity: 1;
  pointer-events: auto;
  transform: scale(1);
}

.promo-calendar .promo-tile.is-open .promo-tile-label-wrap,
.promo-calendar .promo-tile.is-preview .promo-tile-label-wrap {
  opacity: 0;
  transform: scale(0.9);
}

/* past tiles: content visible but grayed out */
.promo-calendar .promo-tile.is-open:not(.is-today) {
  filter: brightness(0.5);
}
