Files
miniprogram-1/miniprogram/pages/upload/upload.wxss
2025-12-09 18:20:17 +08:00

1245 lines
25 KiB
Plaintext
Executable File

/* upload.wxss - 主功能页面样式(扁平化设计) */
.upload-container.morning,
.upload-container.afternoon {
background: linear-gradient(180deg, #FDFDFC 0%, #EAF7FF 48%, #ECEBFF 100%);
}
.morning .history-wrap,
.afternoon .history-wrap {
/* color: rgb(0, 24, 88); */
}
.upload-container {
min-height: 100vh;
background: linear-gradient(180deg, #0E1330 0%, #162447 40%, #6B85C8 75%, #EAF1FF 100%);
padding: 0;
position: relative;
padding-top: calc(var(--height) + 100rpx);
}
/* 主要内容区域 */
.main-content {
/* min-height: calc(100vh - 64rpx); */
display: flex;
flex-direction: column;
position: relative;
z-index: 1;
}
/* 登录检查界面 */
.login-check-view {
min-height: calc(100vh - 120rpx);
display: flex;
align-items: center;
justify-content: center;
padding: 40rpx;
position: relative;
z-index: 1;
}
.login-prompt {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
background: #ffffff;
padding: 60rpx 40rpx;
border-radius: 16rpx;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 500rpx;
}
.prompt-title {
font-size: 40rpx;
font-weight: 600;
color: #333333;
margin-bottom: 20rpx;
display: block;
}
.prompt-desc {
font-size: 28rpx;
color: #666666;
margin-bottom: 40rpx;
display: block;
opacity: 0.7;
}
.goto-login-btn {
background-color: #007AFF;
color: #ffffff;
border: none;
padding: 24rpx 48rpx;
border-radius: 50rpx;
font-size: 32rpx;
width: 100%;
height: 88rpx;
line-height: 88rpx;
}
/* 历史记录区域 */
.history-wrap {
position: relative;
/* padding: 40rpx 40rpx; */
/* color: #b8c1ec; */
}
.history-card-title {
margin-top: 40rpx;
font-weight: bold;
}
.history-card-list {
width: 100%;
}
.image-grid {
width: 100%;
max-height: 900rpx;
padding: 24rpx;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.grid-item { border-radius: 24rpx; overflow: hidden; margin-bottom: 24rpx; }
.grid-image { width: 100%; height: 220rpx; object-fit: cover; }
.cols-1 .grid-item { width: 100%; }
.cols-2 .grid-item { width: calc(50% - 12rpx); }
.cols-3 .grid-item { width: calc(33.333% - 16rpx); }
.cols-1 .grid-image { height: 480rpx; }
.cols-3 .grid-image { height: 200rpx; }
/* 新:单列全幅图片列表 */
.image-list { padding: 24rpx; box-sizing: border-box; }
.list-item { margin-bottom: 24rpx; border-radius: 24rpx; overflow: hidden; background: #fff; }
.full-image { width: 100%; height: auto; display: block; }
/* 新:两列瀑布布局 */
.waterfall { display: flex; gap: 12rpx; padding: 12rpx; box-sizing: border-box; }
.wf-col { width: calc(50% - 6rpx); }
.wf-item { margin-bottom: 12rpx; border-radius: 24rpx; overflow: hidden; background: #fff; }
.wf-image { width: 100%; height: auto; display: block; }
.images-list {
margin-top: 20rpx;
width: 100%;
height: 100rpx;
white-space: nowrap;
display: flex;
gap: 16rpx;
}
.images-list::-webkit-scrollbar {
display: none;
}
.image-item-wrap {
margin-right: 16rpx;
}
.image-item {
width: 100rpx;
height: 100rpx;
border-radius: 30rpx;
flex-shrink: 0;
box-shadow: 0 8rpx 16rpx 0 rgba(0, 0, 0, 0.04);
}
/* 今日摘要区域 */
.today-wrap {
position: relative;
padding: 20rpx 40rpx 0 40rpx;
color: #b8c1ec;
margin-bottom: 20rpx;
}
.today-card {
padding: 30rpx;
background-color: #fffffe;
border-radius: 30rpx;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05);
color: rgb(18, 22, 41);
}
.today-card .images-list {
margin-top: 20rpx;
width: 100%;
height: 100rpx;
white-space: nowrap;
display: flex;
gap: 16rpx;
}
.today-card .image-item-wrap {
margin-right: 16rpx;
}
.today-card .image-item {
width: 100rpx;
height: 100rpx;
border-radius: 30rpx;
flex-shrink: 0;
box-shadow: 0 8rpx 16rpx 0 rgba(0, 0, 0, 0.04);
}
.morning .today-card,
.afternoon .today-card {
background-color: #faeee7;
}
/* 欢迎区域 */
.moon-wrap {
position: fixed;
opacity: 0;
color: #ffef22c7;
width: 210rpx;
height: 210rpx;
animation: slideInFromTopRight 3s forwards ease-in-out, fadeIn 3s forwards linear;
transform: translate(50%, -50%);
}
.moon-icon {
top: 100rpx;
opacity: 0.9;
}
.star-icon {
position: fixed;
top: 210px;
right: 40px;
font-size: 50rpx;
color: #FFD700;
filter: drop-shadow(0 0 10px rgba(255, 215, 0, 0.7));
animation: scaleStar1 3s infinite ease-in-out;
}
.star-icon-2 {
position: fixed;
top: 120px;
left: 40px;
font-size: 40rpx;
color: #FFD700;
filter: drop-shadow(0 0 10px rgba(255, 215, 0, 0.7));
animation: scaleStar2 3s infinite ease-in-out;
}
@keyframes scaleStar1 {
0%,
100% {
transform: scale(0.8);
}
50% {
transform: scale(1.2);
}
}
@keyframes scaleStar2 {
0%,
100% {
transform: scale(1.2);
}
50% {
transform: scale(0.8);
}
}
.sunny-wrap {
/* position: absolute;
top: -100px;
right: -100px;
color: #ffef22c7;
animation: appear 3s ease-out forwards; */
position: fixed;
width: 210rpx;
height: 210rpx;
opacity: 0;
animation: slideInFromTopRight 3s forwards ease-in-out, fadeIn 3s forwards linear;
transform: translate(50%, -50%);
}
.sunny-icon {
opacity: 1;
width: 210rpx;
height: 210rpx;
animation: rotate 50s linear infinite reverse 3s; /* 3秒后开始旋转 */
transform-origin: center center;
}
.face {
position: fixed;
left: 50%;
transform: translate(-70%, -74%);
font-size: 50rpx;
font-weight: 500;
color: black;
transition: all 0.8s ease;
z-index: 10;
width: 100rpx;
height: 100rpx;
}
.face.normal {
top: 56%;
transform: translate(-70%, -74%);
}
.face.up {
top: 64%;
transform: translate(-70%, -74%);
}
.face.down {
top: 72%;
transform: translate(-70%, -74%);
}
@keyframes slideInFromTopRight {
from {
transform: translate(300%, -50%);
}
to {
transform: translate(255%, 4%);
}
}
@keyframes fadeIn {
to {
opacity: 1;
}
}
@keyframes appear {
0% {
top: -100px;
right: -100px;
opacity: 0;
transform: scale(0.2);
}
70% {
opacity: 0.6;
transform: scale(0.8);
}
100% {
top: 20px;
right: 60px;
opacity: 0.8;
transform: scale(1.1);
}
}
@keyframes rotate {
0% {
transform: translate(-50%, -50%) rotate(0deg);
}
100% {
transform: translate(-50%, -50%) rotate(-360deg);
}
}
.cloud-icon {
position: fixed;
top: 500rpx;
left: -100rpx;
color: #eff0f3;
opacity: 0.8;
animation: moveLeftRight 4s infinite alternate linear;
}
/* 新:底部日期条样式 */
.date-section {
padding: 20rpx;
background: transparent;
color: #001858;
z-index: 1;
}
.night .date-section {
color: #fffffe;
}
.date-strip-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 24rpx;
}
.month-title { font-size: 36rpx; }
.date-strip { white-space: nowrap; height: 100rpx;}
.date-strip-inner { display: flex; gap: 24rpx; }
.strip-center { justify-content: center; min-width: 100%; }
.strip-default { justify-content: flex-start; }
.date-strip::-webkit-scrollbar { display: none; }
.date-item {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 120rpx;
height: 100rpx;
margin: 0 6rpx;
border-radius: 24rpx;
background: #ffffff;
color: #001858;
}
.date-item.active { background: #000000; color: #fffffe; }
.date-item.label { background: rgba(255,255,255,0.65); color: #001858; box-shadow: none; }
.date-item .weekday { font-size: 24rpx; opacity: 0.8; }
.date-item .day { font-size: 36rpx;}
@keyframes moveLeftRight {
0% {
transform: translateX(-20rpx);
}
100% {
transform: translateX(20rpx);
}
}
.welcome-section {
margin-bottom: 24rpx;
}
.morning .welcome-card,
.afternoon .welcome-card {
border-color: #f582ae;
}
.welcome-card {
background: #fffffe;
padding: 32rpx;
border-radius: 50%;
text-align: center;
box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.05);
border: 4rpx dashed rgb(238, 187, 195);
}
.user-info {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
}
.avatar {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
margin-right: 20rpx;
border: 2rpx solid rgba(102, 126, 234, 0.2);
}
.nickname {
font-size: 32rpx;
font-weight: 500;
color: #333333;
}
.welcome-text {
font-size: 28rpx;
color: #666666;
opacity: 0.7;
}
.morning .feature-section,
.afternoon .feature-section {
color:rgb(0, 24, 88);
}
/* 功能描述区域 */
.feature-section {
display: flex;
flex-direction: column;
align-items: center;
font-size: 28rpx;
color: rgb(184, 193, 236);
font-weight: bold;
z-index: 1;
}
.hello {
margin-top: 80rpx;
font-size: 50rpx;
/* color: black; */
}
.begin-text {
margin-top: 10rpx;
font-size: 36rpx;
}
/* 功能按钮区域 */
.action-section {
width: 300rpx;
height: 300rpx;
margin-top: 40rpx;
display: flex;
align-items: center;
justify-content: center;
}
.action-section .top {
}
.action-buttons {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 32rpx;
width: 100%;
max-width: 400rpx;
color: rgb(238, 187, 195);
}
.action-btn {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10rpx);
border-radius: 24rpx;
padding: 40rpx 32rpx;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
transition: all 0.3s ease;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
}
.action-btn:active {
transform: translateY(2rpx);
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.15);
}
.action-btn:disabled {
opacity: 0.6;
}
.btn-icon {
font-size: 80rpx;
margin-bottom: 20rpx;
display: block;
}
.btn-text {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 8rpx;
display: block;
}
.btn-desc {
font-size: 24rpx;
color: #666;
opacity: 0.8;
display: block;
}
/* 图片预览区域 */
.preview-section {
margin-bottom: 32rpx;
}
.preview-card {
background: #ffffff;
border-radius: 16rpx;
padding: 32rpx;
box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.05);
}
.preview-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24rpx;
}
.preview-title {
font-size: 32rpx;
font-weight: 500;
color: #333333;
}
.reselect-btn {
background: none;
border: 1rpx solid #007AFF;
color: #007AFF;
padding: 12rpx 24rpx;
border-radius: 30rpx;
font-size: 24rpx;
}
.preview-image {
width: 100%;
max-height: 400rpx;
border-radius: 16rpx;
margin-bottom: 20rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
}
.processing-status {
text-align: center;
}
.processing-text {
font-size: 24rpx;
color: #666666;
margin-top: 16rpx;
display: block;
}
/* 加载状态显示 */
.processing-section {
margin-bottom: 32rpx;
}
.processing-card {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10rpx);
border-radius: 24rpx;
padding: 48rpx 32rpx;
text-align: center;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
}
.loading-spinner {
width: 60rpx;
height: 60rpx;
border: 6rpx solid #f3f3f3;
border-top: 6rpx solid #007AFF;
border-radius: 50%;
margin: 0 auto 24rpx;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.processing-card .processing-text {
font-size: 28rpx;
color: #666666;
margin-top: 0;
}
.loading-bar {
width: 200rpx;
height: 4rpx;
background-color: #e5e5e5;
border-radius: 2rpx;
margin: 0 auto 16rpx;
overflow: hidden;
}
.loading-bar::after {
content: '';
display: block;
width: 50%;
height: 100%;
background-color: #007AFF;
border-radius: 2rpx;
animation: loading 1.5s infinite ease-in-out;
}
@keyframes loading {
0% { transform: translateX(-100%); }
100% { transform: translateX(200%); }
}
/* 使用提示 */
.tips-section {
margin-top: auto;
}
.tips-card {
background: #ffffff;
padding: 24rpx 32rpx;
border-radius: 16rpx;
box-shadow: 0 2rpx 16rpx rgba(0, 0, 0, 0.05);
}
.tips-title {
font-size: 28rpx;
font-weight: 500;
color: #333333;
margin-bottom: 16rpx;
display: block;
}
.tips-list {
display: flex;
flex-direction: column;
gap: 8rpx;
}
.tip-item {
font-size: 24rpx;
color: #666666;
line-height: 1.5;
opacity: 0.8;
}
/* 自定义导航栏 */
.custom-navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 9999;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20rpx);
border-bottom: 1rpx solid rgba(255, 255, 255, 0.2);
}
.navbar-content {
display: flex;
align-items: center;
justify-content: space-between;
height: 120rpx;
padding: 0 32rpx;
padding-top: 44rpx; /* 为状态栏留出空间 */
}
.navbar-left,
.navbar-right {
width: 100rpx;
display: flex;
justify-content: center;
}
.navbar-title {
flex: 1;
text-align: center;
}
.title-text {
font-size: 36rpx;
font-weight: 600;
}
.profile-btn {
background: linear-gradient(45deg, #667eea, #764ba2);
color: white;
border-radius: 50%;
width: 60rpx;
height: 60rpx;
display: flex;
align-items: center;
justify-content: center;
border: none;
box-shadow: 0 4rpx 12rpx rgba(102, 126, 234, 0.3);
}
.profile-icon {
font-size: 24rpx;
}
/* 装饰气泡 */
.decoration-bubbles {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
pointer-events: none;
z-index: 0;
}
.bubble {
position: absolute;
background: rgba(255, 255, 255, 0.08);
border-radius: 50%;
animation: bubbleFloat 8s ease-in-out infinite;
}
.bubble-1 {
width: 60rpx;
height: 60rpx;
top: 25%;
left: 5%;
animation-delay: 0s;
}
.bubble-2 {
width: 40rpx;
height: 40rpx;
top: 50%;
right: 10%;
animation-delay: 2s;
}
.bubble-3 {
width: 80rpx;
height: 80rpx;
bottom: 30%;
left: 15%;
animation-delay: 4s;
}
@keyframes bubbleFloat {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(180deg); }
}
.camera-wrawpper {
display: flex;
flex-direction: column;
align-items: center;
transition: all 0.8s ease;
}
.camera {
position:relative;
width:300rpx; height:300rpx;
margin-top:40rpx;
background:#eaeaea;
border-radius:50rpx;
overflow:hidden;
z-index:2;
}
.btn {
position: absolute;
top: 20rpx; right: 30rpx;
width: 45rpx; height: 35rpx;
background-color: #2e3e4f;
border-radius: 15rpx;
box-shadow: 0px 3rpx 0px rgba(0,0,0,.4);
}
.strip {
height: 110rpx;
background-color: #54b59a;
border-top: 10rpx solid #479a83;
border-bottom: 10rpx solid #479a83;
margin: 80rpx 0px;
box-shadow: 0px 2rpx 0px rgba(0,0,0,.4);
}
.lens {
position:absolute;
top:50%; left:50%;
width:144rpx; height:144rpx;
margin:-90rpx;
border:18rpx solid #b44b37;
border-radius:50%;
background-color:#111;
box-shadow: 0px 5rpx 0px rgba(0,0,0,.4);
}
.lens::before {
content: '';
position: absolute;
width: 50rpx; height: 50rpx;
margin: 27rpx;
border: 20rpx solid rgb(60, 60, 60);
border-radius: 50%;
background: rgb(34, 34, 34);
}
.lens::after {
content: '';
position: absolute;
width: 8rpx; height: 8rpx;
margin: 57rpx;
border: 11rpx solid rgb(22, 22, 22);
border-radius: 50%;
background: rgb(131, 131, 131);
}
.lens-shutter {
position:relative;
width:144rpx; height:144rpx;
display: inline-block;
border-radius: 50%;
overflow: hidden;
}
.lens-shutter::after {
content: " ";
position: absolute;
left: 50%;
top: -120%;
height: 340%;
width: 170%;
transition: .5s all linear;
/* animation: shutter 10.0s infinite ease-in-out; */
background:
linear-gradient(-150deg, transparent 52%, #000 calc(52% + 2rpx) calc(52% + 4rpx), grey calc(52% + 6rpx)) bottom/100% 40% no-repeat,
linear-gradient(150deg, transparent 52%, #000 calc(52% + 2rpx) calc(52% + 4rpx), grey calc(52% + 6rpx)),
linear-gradient(90deg, transparent 30%, #000 calc(30% + 2rpx) calc(30% + 4rpx), grey calc(30% + 6rpx)),
linear-gradient(30deg, transparent 52%, #000 calc(52% + 2rpx) calc(52% + 4rpx), grey calc(52% + 6rpx));
transform: rotate(180deg);
transform-origin: left;
}
.lens-shutter::before {
content: " ";
position: absolute;
left: 50%;
top: -120%;
height: 340%;
width: 170%;
transition: .5s all linear;
/* animation: shutter 10.0s infinite ease-in-out; */
background:
linear-gradient(-150deg, transparent 52%, #000 calc(52% + 2rpx) calc(52% + 4rpx), grey calc(52% + 6rpx)) bottom/100% 40% no-repeat,
linear-gradient(150deg, transparent 52%, #000 calc(52% + 2rpx) calc(52% + 4rpx), grey calc(52% + 6rpx)),
linear-gradient(90deg, transparent 30%, #000 calc(30% + 2rpx) calc(30% + 4rpx), grey calc(30% + 6rpx)),
linear-gradient(30deg, transparent 52%, #000 calc(52% + 2rpx) calc(52% + 4rpx), grey calc(52% + 6rpx));
}
@keyframes shutter {
0% {
top: -120%;
height: 340%;
width: 170%;
opacity: 0;
} 10% {
top: 0;
height: 100%;
width: 50%;
opacity: 1;
} 20%, 100% {
top: -120%;
height: 340%;
width: 170%;
opacity: 0;
}
}
.led {
position: absolute;
left: 35rpx; top: 30rpx;
width: 15rpx; height: 15rpx;
border-radius: 50%;
background-color: rgb(255, 136, 115);
box-shadow: inset 0px 1rpx 0px rgba(0,0,0,.1);
animation: led .8s infinite;
}
@keyframes led {
from {
opacity:.2;
}
to {
opacity:1;
}
}
.shutter {
width: 180rpx;
height: 180rpx;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
margin:-90rpx;
background: #181816;
box-shadow: 0 0 0 5rpx #181816, 0 0 0 3rpx #373737;
overflow: hidden;
}
.bottom {
position: absolute;
bottom: 0;
width: 100%;
height: 24rpx;
background-color: #c6c6c6;
border-radius: 14rpx 14rpx 0 0;
}
.photo-wrapper {
position: relative;
bottom: 12rpx;
left: 0rpx;
width: 264rpx;
/* height: 284rpx; */
height: 568rpx;
overflow: hidden;
}
.photo {
position: relative;
bottom: 0rpx;
left: 0rpx;
width: 240rpx;
height: 240rpx;
background-color: rgb(255, 255, 255);
border-style: solid;
border-color: rgb(230, 230, 230);
border-width: 12rpx 12rpx 32rpx 12rpx;
box-shadow: 0 4rpx 6rpx rgba(0, 0, 0, 0.2);
overflow: hidden;
z-index: 2;
/* transform: translateY(-105%); */
/* animation: reveal 10s infinite ease-out; */
}
.photo-auto { height: auto; }
@keyframes reveal {
0%, 20% {
transform: translateY(-105%);
}
30% {
transform: translateY(0%);
opacity: 1;
}
85% {
transform: translateY(0%);
opacity: 1;
}
95% {
transform: translateY(100%);
opacity: 0;
}
100% {
opacity: 0;
transform: translateY(-105%);
}
}
.photo-inner {
position: relative;
width: 100%;
height: 100%;
background-color: #FEFDE2;
/* filter: blur(10rpx) brightness(0%) saturate(0%); */
/* animation: showphoto 10s infinite ease-out; */
}
@keyframes showphoto {
0%, 25% {
filter: blur(10rpx) brightness(0%) saturate(0%);
}
35%, 90% {
filter: blur(0rpx) brightness(100%) saturate(100%);
}
100% {
filter: blur(10rpx) brightness(0%) saturate(0%);
}
}
@keyframes showphoto1 {
0%, 25% {
filter: blur(10rpx) brightness(0%) saturate(0%);
}
35%, 100% {
filter: blur(0rpx) brightness(100%) saturate(100%);
}
}
@keyframes shutter1 {
0% {
top: -120%;
height: 340%;
width: 170%;
opacity: 0;
} 10% {
top: 0;
height: 100%;
width: 50%;
opacity: 1;
} 20%, 100% {
top: -120%;
height: 340%;
width: 170%;
opacity: 0;
}
}
@keyframes reveal1 {
0%, 20% {
transform: translateY(-105%);
}
30% {
transform: translateY(0%);
opacity: 1;
}
100% {
transform: translateY(0%);
opacity: 1;
}
}
.default .camera .lens-shutter::after,
.default .camera .lens-shutter::before {
animation: shutter 10.0s infinite ease-in-out;
}
.default .photo-wrapper .photo {
animation: reveal 10s infinite ease-out;
}
.default .photo-wrapper .photo-inner {
animation: showphoto 10s infinite ease-out;
}
.action .camera .lens-shutter::after,
.action .camera .lens-shutter::before {
animation: shutter1 10s ease-in-out forwards;
}
.action .photo-wrapper .photo {
animation: reveal1 10s ease-out forwards;
}
.action .photo-wrapper .photo-inner {
animation: showphoto1 10s ease-out forwards;
}
.photo-image {
width: 100%;
height: 100%;
}
.photo-image-cover {
display: block;
height: auto;
}
.photo-inner-auto {
height: auto;
}
.photo-expand-layer {
position: fixed;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
z-index: 99;
transition: transform 900ms ease-in-out;
}
.photo-expand-inner {
display: inline-block;
/* 初始与小卡片重叠,无额外外边距 */
background-color: #ffffff;
border: 24rpx solid #ffffff;
border-bottom: 48rpx solid #fff;
box-shadow: 0 12rpx 32rpx rgba(0,0,0,0.35);
border-radius: 12rpx;
position: relative;
box-sizing: border-box;
transition: width 900ms ease-in-out;
}
.photo-expand-image {
display: block;
width: 100%;
height: auto;
max-width: 100%;
position: relative;
border-radius: 12rpx;
}
.scanner {
position: absolute;
top: 50%;
left: 50%;
/* width: calc(100% + 12rpx); */
/* height: calc(100% + 12rpx); */
width: 100%;
height: 100%;
transform: translate(-50%, -50%);
pointer-events: none;
border-radius: 12rpx;
/* background: linear-gradient(90deg, #D5A3E5 0%, #FDB5F0 30.43%, #F5838E 68.23%, #F0D9B6 100%); */
background-color: rgba(255, 255, 255, 0.35);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
}
.scanner-hidden { opacity: 0; }
.scanner-visible { animation: scannerFadeIn 1s 1000ms ease forwards; }
@keyframes scannerFadeIn { from { opacity: 0 } to { opacity: 1 } }
.star { position: relative; opacity: 0; transform-origin: center center; will-change: transform, opacity; }
.star::after {
content:"";
position:absolute;
width: 36rpx;
height: 40rpx;
border-radius: 8rpx;
background: linear-gradient(337deg, #DE9EFC 7.88%, #31DAFF 107.03%);
transform:rotate(45deg) skewX(22.5deg) skewY(22.5deg);
}
.star::before{
content:"";
position:absolute;
width: 36rpx;
height: 40rpx;
border-radius: 8rpx;
background: linear-gradient(78.35deg, #DE9EFC 7.88%, #31DAFF 107.03%);
transform:rotate(-45deg) skewX(22.5deg) skewY(22.5deg);
}
/* .scanner-visible .star { animation: starCycle var(--cycle) ease-in-out infinite; } */
.scanner-visible .star { animation: starCycle 3000ms ease-in-out infinite; }
.scanner-visible .star1 { animation-delay: 1000ms; }
.scanner-visible .star2 { animation-delay: 2000ms; }
.scanner-visible .star3 { animation-delay: 3000ms; }
@keyframes starCycle {
0% {
opacity: 0;
transform: translate(-24rpx, -24rpx) scale(0.5);
}
34% {
opacity: 1;
transform: translate(-24rpx, -24rpx) scale(0.5);
}
67% {
opacity: 1;
transform: translate(0rpx, 0rpx) scale(1);
}
100% {
opacity: 0;
transform: translate(36rpx, 36rpx) scale(0.5);
}
}
.expand-border-bg {
position: absolute;
top: 50%;
left: 50%;
width: calc(100% + 16rpx);
height: calc(100% + 16rpx);
transform: translate(-50%, -50%);
pointer-events: none;
border-radius: 12rpx;
background: linear-gradient(90deg, #D5A3E5 0%, #FDB5F0 30.43%, #F5838E 68.23%, #F0D9B6 100%);
background-size: 600% 600%;
opacity: 0;
transition: opacity 600ms ease-out;
animation: AnimateBorder 4s ease infinite;
z-index: 0;
}
.button-wrapper {
position: relative;
}
.button {
display: block;
font-size: 24px;
line-height: 32px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 2px;
padding: 16px 32px;
background-color: black;
color: white;
border-radius: 50px;
border: 0px;
cursor: pointer;
}
.button-bg {
position: absolute;
top: 0;
left: 0;
width: calc(100% + 12rpx);
height: calc(100% + 12rpx);
background: linear-gradient(90deg, #D5A3E5 0%, #FDB5F0 30.43%, #F5838E 68.23%, #F0D9B6 100%);
background-size: 600% 600%;
border-radius: 50px;
animation: AnimateBorder 4s ease infinite;
-webkit-animation: AnimateBorder 4s ease infinite;
-moz-animation: AnimateBorder 4s ease infinite;
z-index: -1;
transform: translate(-6rpx, -6rpx);
transition: filter 1s ease-in;
}
@keyframes AnimateBorder {
0%{background-position:0% 50%}
50%{background-position:100% 50%}
100%{background-position:0% 50%}
}