diff --git a/src/css/injected.scss b/src/css/injected.scss index f0a21ae9..555bea18 100644 --- a/src/css/injected.scss +++ b/src/css/injected.scss @@ -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; } } diff --git a/src/interface/components/CloudPanel.svelte b/src/interface/components/CloudPanel.svelte index ee8faea2..fb0ce6a5 100644 --- a/src/interface/components/CloudPanel.svelte +++ b/src/interface/components/CloudPanel.svelte @@ -3,6 +3,7 @@ import { animate } from "motion"; import { delay } from "@/seqta/utils/delay.ts"; import { cloudAuth } from "@/seqta/utils/CloudAuth"; + import CloudPfpAvatar from "@/interface/components/CloudPfpAvatar.svelte"; const { hidePanel } = $props<{ hidePanel: () => void; @@ -105,12 +106,12 @@
{#if cloudState.user?.pfpUrl} - - {:else} + {/if} + {#if !cloudState.user?.pfpUrl}
{getInitials()}
diff --git a/src/interface/components/CloudPfpAvatar.svelte b/src/interface/components/CloudPfpAvatar.svelte new file mode 100644 index 00000000..d44a181a --- /dev/null +++ b/src/interface/components/CloudPfpAvatar.svelte @@ -0,0 +1,44 @@ + + +{#if avatarSrc} + +{/if} diff --git a/src/interface/components/store/CloudHeader.svelte b/src/interface/components/store/CloudHeader.svelte index b8ce98da..abae4e29 100644 --- a/src/interface/components/store/CloudHeader.svelte +++ b/src/interface/components/store/CloudHeader.svelte @@ -1,6 +1,7 @@