Merge pull request #447 from StroepWafel/Popout-TOTM

super clean popout for TOTM + PFP caching
This commit is contained in:
Seth Burkart
2026-06-08 17:33:21 +10:00
committed by GitHub
10 changed files with 1228 additions and 115 deletions
+327 -18
View File
@@ -3809,19 +3809,306 @@ div.day-empty {
color: var(--text-primary);
}
.themeOfTheMonthBackdrop {
position: fixed;
inset: 0;
z-index: 47;
background: color-mix(in srgb, #000 52%, transparent);
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
opacity: 0;
pointer-events: none;
transition: opacity 0.55s cubic-bezier(0.76, 0, 0.24, 1);
}
.themeOfTheMonthBackdropVisible {
opacity: 1;
pointer-events: auto;
}
.themeOfTheMonthCard {
position: fixed;
right: max(18px, env(safe-area-inset-right));
bottom: max(18px, env(safe-area-inset-bottom));
top: 0;
left: 0;
right: auto;
bottom: auto;
z-index: 48;
margin: 0;
width: min(360px, calc(100vw - 36px));
overflow: visible;
display: flex;
flex-direction: column;
overflow: hidden;
border: 1px solid color-mix(in srgb, var(--text-primary) 12%, transparent);
border-radius: 20px;
background: var(--background-primary);
color: var(--text-primary);
box-shadow: 0 22px 70px rgba(0, 0, 0, 0.35);
animation: themeOfTheMonthCardIn 0.24s ease-out;
transform-origin: bottom right;
transition: none;
animation: themeOfTheMonthCardIn 0.28s ease-out;
}
.themeOfTheMonthCardExpanded {
transform-origin: center center;
}
/* translate(x,y) is set inline; transition enabled after mount */
.themeOfTheMonthCardMorphReady:not(.themeOfTheMonthCardReducedMotion) {
transition:
transform 0.55s cubic-bezier(0.76, 0, 0.24, 1),
width 0.55s cubic-bezier(0.76, 0, 0.24, 1),
height 0.55s cubic-bezier(0.76, 0, 0.24, 1),
max-height 0.55s cubic-bezier(0.76, 0, 0.24, 1),
border-radius 0.55s cubic-bezier(0.76, 0, 0.24, 1);
}
.themeOfTheMonthCardAnchoredBottom,
.themeOfTheMonthCardCollapsing {
transform-origin: 100% 100% !important;
}
/* Expanded: fixed shell; copy scrolls; actions pinned to the bottom. */
.themeOfTheMonthCardExpanded.themeOfTheMonthCardExpandedShell .themeOfTheMonthCardBody {
flex: 1 1 auto;
min-height: 0;
display: flex;
flex-direction: column;
padding: 14px 16px 16px;
}
.themeOfTheMonthCardExpanded.themeOfTheMonthCardExpandedShell .themeOfTheMonthCardDescription {
flex: 1 1 auto;
min-height: 0;
margin: 8px 0 0;
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.themeOfTheMonthCardExpanded.themeOfTheMonthCardExpandedShell .themeOfTheMonthCardActions {
flex-shrink: 0;
margin-top: auto;
padding-top: 14px;
}
.themeOfTheMonthCardReducedMotion {
transition: none !important;
}
.themeOfTheMonthCardMedia {
position: relative;
flex-shrink: 0;
}
#theme-of-the-month-card .themeOfTheMonthCardPopout {
position: absolute;
top: 12px;
left: 12px;
z-index: 6;
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
min-width: 36px;
min-height: 36px;
padding: 0;
appearance: none;
border: none;
border-radius: 50% !important;
aspect-ratio: 1;
cursor: pointer;
color: var(--text-primary);
background: color-mix(in srgb, var(--background-primary) 80%, transparent);
box-shadow:
0 2px 10px rgba(0, 0, 0, 0.24),
inset 0 0 0 1px color-mix(in srgb, var(--text-primary) 14%, transparent);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
transition: background 0.15s ease, transform 0.15s ease;
}
.themeOfTheMonthCardPopoutIcon {
display: inline-flex;
align-items: center;
justify-content: center;
line-height: 0;
pointer-events: none;
}
.themeOfTheMonthCardPopout:hover {
background: color-mix(in srgb, var(--background-primary) 95%, transparent);
transform: scale(1.05);
}
.themeOfTheMonthCardPopout:active {
transform: scale(0.96);
}
.themeOfTheMonthCardPopout[hidden] {
display: none;
}
.themeOfTheMonthCardCompactMedia {
position: relative;
display: block;
overflow: hidden;
border-radius: 20px 20px 0 0;
line-height: 0;
}
.themeOfTheMonthCardExpanded.themeOfTheMonthCardShowGallery .themeOfTheMonthCardCompactMedia {
display: none;
}
.themeOfTheMonthCardExpandedPanel {
display: none;
}
.themeOfTheMonthCardExpandedPanel[hidden] {
display: none !important;
}
.themeOfTheMonthCardExpanded.themeOfTheMonthCardShowGallery
.themeOfTheMonthCardExpandedPanel:not([hidden]) {
display: block;
}
.themeOfTheMonthCardGallery {
position: relative;
}
.themeOfTheMonthCardHeroEmboss {
display: none;
position: absolute;
left: 0;
right: 0;
bottom: 0;
z-index: 4;
flex-direction: column;
justify-content: flex-end;
pointer-events: none;
}
.themeOfTheMonthCardHeroEmbossScrim {
position: absolute;
inset: 0;
background: linear-gradient(
180deg,
transparent 0%,
color-mix(in srgb, #000 8%, transparent) 40%,
color-mix(in srgb, #000 55%, transparent) 72%,
color-mix(in srgb, #000 82%, transparent) 100%
);
}
.themeOfTheMonthCardHeroEmbossContent {
position: relative;
z-index: 1;
}
.themeOfTheMonthCardExpanded .themeOfTheMonthCardHeroEmboss {
display: flex;
padding: 14px 16px 16px;
}
.themeOfTheMonthCardExpanded .themeOfTheMonthCardHeroEmbossTitle {
margin: 0;
font-size: 1.45rem;
font-weight: 800;
line-height: 1.15;
letter-spacing: -0.02em;
color: #fff;
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.55),
0 2px 14px rgba(0, 0, 0, 0.35);
}
.themeOfTheMonthCardExpanded .themeOfTheMonthCardHeroEmbossAuthor {
margin: 4px 0 0;
font-size: 0.8rem;
font-weight: 600;
line-height: 1.25;
color: color-mix(in srgb, #fff 88%, transparent);
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
}
.themeOfTheMonthCardExpanded .themeOfTheMonthCardHeroEmbossDescription {
margin: 8px 0 0;
font-size: 0.84rem;
line-height: 1.4;
color: color-mix(in srgb, #fff 92%, transparent);
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
text-shadow: 0 1px 8px rgba(0, 0, 0, 0.5);
}
.themeOfTheMonthCardExpanded .themeOfTheMonthCardHeroEmbossVariants {
margin: 6px 0 0;
font-size: 0.74rem;
font-weight: 600;
line-height: 1.2;
color: color-mix(in srgb, #fff 72%, transparent);
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
}
.themeOfTheMonthCardExpanded.themeOfTheMonthCardShowGallery
.themeOfTheMonthCardGallerySlide
figcaption {
display: none;
}
.themeOfTheMonthCardGalleryTrack {
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
scrollbar-width: none;
}
.themeOfTheMonthCardGalleryTrack::-webkit-scrollbar {
display: none;
}
.themeOfTheMonthCardGallerySlide {
flex: 0 0 100%;
margin: 0;
scroll-snap-align: start;
}
.themeOfTheMonthCardGallerySlide img {
display: block;
width: 100%;
height: min(42vh, 280px);
object-fit: cover;
}
.themeOfTheMonthCardGallerySlide figcaption {
padding: 8px 14px 0;
font-size: 0.78rem;
line-height: 1.3;
color: color-mix(in srgb, var(--text-primary) 68%, transparent);
}
.themeOfTheMonthCardGalleryPrev,
.themeOfTheMonthCardGalleryNext {
position: absolute;
top: 50%;
z-index: 2;
display: inline-flex;
align-items: center;
justify-content: center;
width: 34px;
height: 34px;
margin-top: -17px;
padding: 0;
appearance: none;
border: none;
border-radius: 9999px;
cursor: pointer;
font-size: 1.35rem;
line-height: 1;
color: var(--text-primary);
background: color-mix(in srgb, var(--background-primary) 88%, transparent);
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
}
.themeOfTheMonthCardGalleryPrev {
left: 10px;
}
.themeOfTheMonthCardGalleryNext {
right: 10px;
}
.themeOfTheMonthCardGalleryDots {
display: flex;
justify-content: center;
gap: 6px;
padding: 8px 14px 0;
}
.themeOfTheMonthCardGalleryDot {
width: 7px;
height: 7px;
padding: 0;
appearance: none;
border: none;
border-radius: 9999px;
cursor: pointer;
background: color-mix(in srgb, var(--text-primary) 28%, transparent);
transition: background 0.15s ease, transform 0.15s ease;
}
.themeOfTheMonthCardGalleryDotActive {
background: var(--better-pri, #6366f1);
transform: scale(1.15);
}
.themeOfTheMonthCardDescriptionTyping {
display: block;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: unset;
}
.themeOfTheMonthCard::before {
content: "";
@@ -3908,16 +4195,25 @@ div.day-empty {
.themeOfTheMonthCardConfirmAccept:active {
transform: translateY(0);
}
.themeOfTheMonthCardImage {
#theme-of-the-month-card .themeOfTheMonthCardImage {
display: block;
width: 100%;
height: 150px;
width: 100% !important;
min-width: 100%;
height: 150px !important;
max-width: none !important;
max-height: none !important;
margin: 0;
border-radius: 20px 20px 0 0;
padding: 0;
border: 0;
border-radius: 0;
object-fit: cover;
object-position: center center;
}
.themeOfTheMonthCardExpanded .themeOfTheMonthCardGallerySlide img {
border-radius: 22px 22px 0 0;
}
.themeOfTheMonthCardBody {
padding: 14px 16px 16px;
padding: 14px 16px 12px;
}
.themeOfTheMonthCardEyebrow {
margin: 0 0 6px;
@@ -3933,14 +4229,26 @@ div.day-empty {
line-height: 1.2;
}
.themeOfTheMonthCardDescription {
display: -webkit-box;
margin: 8px 0 14px;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
margin: 8px 0 10px;
font-size: 0.92rem;
line-height: 1.45;
color: color-mix(in srgb, var(--text-primary) 78%, transparent);
overflow-wrap: anywhere;
word-wrap: break-word;
}
.themeOfTheMonthCardDescriptionClipped {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.themeOfTheMonthCardDescriptionExpanded {
display: block;
-webkit-line-clamp: unset;
}
.themeOfTheMonthCardExpanding:not(.themeOfTheMonthCardExpandedShell)
.themeOfTheMonthCardDescriptionExpanded {
overflow: hidden;
}
.themeOfTheMonthCardActions {
display: flex;
@@ -4028,21 +4336,22 @@ div.day-empty {
@keyframes themeOfTheMonthCardIn {
from {
opacity: 0;
transform: translateY(18px) scale(0.98);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
@keyframes themeOfTheMonthCardOut {
to {
opacity: 0;
transform: translateY(12px) scale(0.98);
}
}
.themeOfTheMonthCardExpanded.themeOfTheMonthCardClosing {
animation: themeOfTheMonthCardOut 0.18s ease-in forwards;
}
@media (max-width: 900px) {
.themeOfTheMonthCard {
.themeOfTheMonthCard,
.themeOfTheMonthBackdrop {
z-index: 2147483645;
}
}