huaanglimeng/pages/index/index.wxss

445 lines
7.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

page {
background-color: #0f0f1b;
color: #e0e0e0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
.container {
min-height: 100vh;
background-color: #0f0f1b;
padding: 40rpx 30rpx 100rpx;
box-sizing: border-box;
color: #e0e0e0;
display: flex;
flex-direction: column;
position: relative;
}
/* 自定义返回按钮样式 */
.nav-back {
position: absolute;
top: 40rpx;
left: 30rpx;
display: flex;
align-items: center;
z-index: 100;
padding: 10rpx 20rpx;
border-radius: 30rpx;
background: rgba(255, 255, 255, 0.05);
}
.back-icon {
font-size: 32rpx;
margin-right: 8rpx;
color: #c9a0dc;
}
.back-text {
font-size: 26rpx;
color: #c9a0dc;
letter-spacing: 2rpx;
}
/* 标题通用样式 */
.title-area {
text-align: center;
margin-top: 40rpx;
margin-bottom: 60rpx;
}
.app-title {
font-size: 44rpx;
font-weight: 600;
color: #c9a0dc;
letter-spacing: 4rpx;
display: block;
margin-bottom: 16rpx;
}
.instruction {
font-size: 26rpx;
color: #8a8a9d;
letter-spacing: 1rpx;
}
/* 1. 牌阵选择列表 */
.spread-list {
display: flex;
flex-direction: column;
gap: 30rpx;
}
.spread-item {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(201, 160, 220, 0.2);
padding: 40rpx;
border-radius: 20rpx;
transition: all 0.3s ease;
}
.spread-hover {
background: rgba(201, 160, 220, 0.1);
transform: translateY(-4rpx);
border-color: rgba(201, 160, 220, 0.5);
}
.spread-name {
font-size: 34rpx;
font-weight: 500;
color: #c9a0dc;
display: block;
margin-bottom: 10rpx;
}
.spread-desc {
font-size: 24rpx;
color: #6a6a7d;
}
/* 2. 洗牌仪式感 */
.ritual-area {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.shuffling-container {
position: relative;
width: 200rpx;
height: 300rpx;
margin-bottom: 80rpx;
}
.shuffling-card {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 12rpx;
box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.5);
animation: shuffle 1s infinite alternate ease-in-out;
}
@keyframes shuffle {
from { transform: translateX(-40rpx) rotate(-5deg); }
to { transform: translateX(40rpx) rotate(5deg); }
}
.ritual-hint {
font-size: 28rpx;
color: #c9a0dc;
opacity: 0.8;
animation: breathe 2s infinite ease-in-out;
}
@keyframes breathe {
0%, 100% { opacity: 0.4; }
50% { opacity: 1; }
}
/* 3. 抽牌区域 (槽位 + 扇形) */
.drawing-area {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
padding-top: 40rpx;
}
.slots-container {
display: flex;
flex-wrap: wrap; /* 允许换行 */
justify-content: center;
gap: 20rpx; /* 保持20rpx间距与计算一致 */
min-height: 240rpx; /* 改为最小高度 */
max-height: 480rpx; /* 最多两排的高度 */
margin-bottom: 60rpx;
width: 100%;
padding: 0 30rpx; /* 增加左右padding确保居中 */
}
.slot-item {
width: 100rpx; /* 与WXS计算的宽度一致 */
height: 160rpx; /* 与WXS计算的高度一致 */
position: relative;
flex-shrink: 0; /* 防止收缩 */
}
.slot-placeholder {
width: 100%;
height: 100%;
border: 2rpx dashed rgba(201, 160, 220, 0.3);
border-radius: 12rpx;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.02);
}
.slot-num {
font-size: 40rpx;
color: rgba(201, 160, 220, 0.2);
font-family: serif;
}
.slot-card-wrapper {
width: 100%;
height: 100%;
animation: flyInSlot 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
.slot-card-back {
width: 100%;
height: 100%;
border-radius: 12rpx;
box-shadow: 0 8rpx 20rpx rgba(0,0,0,0.6);
border: 1px solid rgba(255, 255, 255, 0.1);
}
@keyframes flyInSlot {
from {
transform: translateY(400rpx) scale(0.8) rotate(10deg);
opacity: 0;
}
to {
transform: translateY(0) scale(1) rotate(0);
opacity: 1;
}
}
.fan-deck {
position: relative;
height: 380rpx;
width: 100%;
margin-top: 20rpx;
perspective: 1000px;
overflow: visible; /* 允许卡牌飞出容器 */
}
.fan-card {
position: absolute;
left: 50%;
bottom: 0;
width: 150rpx;
height: 260rpx;
margin-left: -75rpx;
transform-origin: bottom center;
transition: transform 0.6s cubic-bezier(0.19, 1, 0.22, 1);
z-index: 10;
}
.card-back-sm {
width: 100%;
height: 100%;
border-radius: 10rpx;
box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.5);
border: 1px solid rgba(255, 255, 255, 0.05);
}
.fan-card.is-selected {
z-index: 100;
pointer-events: auto; /* 允许点击已抽出的牌返回 */
}
.draw-count {
text-align: center;
font-size: 36rpx;
color: #c9a0dc;
margin-top: 60rpx;
}
.confirm-draw-btn {
margin: 40rpx auto;
background: #c9a0dc;
color: #1a1a2e;
border-radius: 40rpx;
font-weight: 600;
width: 300rpx;
}
/* 4. 翻牌结果展示 */
.spread-display {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 30rpx;
padding: 40rpx 0;
}
/* 牌阵特定布局 */
.spread-display.three_time_flow,
.spread-display.three_problem_solution,
.spread-display.two_choice_decision {
flex-direction: row;
}
.card-slot {
display: flex;
flex-direction: column;
align-items: center;
width: 200rpx;
}
.pos-name {
font-size: 22rpx;
color: #8a8a9d;
margin-bottom: 20rpx;
}
.flip-scene {
width: 180rpx;
height: 300rpx;
perspective: 1000rpx;
}
.flip-card {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.6s;
transform-style: preserve-3d;
}
.flip-card.flipped {
transform: rotateY(180deg);
}
.card-face {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 12rpx;
overflow: hidden;
}
.face-back { background: #2a2a3e; }
.face-front { background: #1a1a2e; transform: rotateY(180deg); }
.card-image { width: 100%; height: 100%; }
.card-image.reversed { transform: rotate(180deg); }
.card-name-sm {
margin-top: 16rpx;
font-size: 24rpx;
color: #c9a0dc;
}
/* 5. 深度解读区域 */
.interpretation-area {
margin-top: 60rpx;
background: rgba(255, 255, 255, 0.03);
border-radius: 24rpx;
padding: 40rpx;
}
.theme-box {
text-align: center;
margin-bottom: 60rpx;
background: rgba(201, 160, 220, 0.08);
padding: 30rpx;
border-radius: 16rpx;
}
.label {
display: block;
font-size: 20rpx;
color: #c9a0dc;
text-transform: uppercase;
letter-spacing: 4rpx;
margin-bottom: 16rpx;
opacity: 0.6;
}
.theme-box .content {
font-size: 34rpx;
font-weight: 500;
color: #ffffff;
line-height: 1.4;
}
.info-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30rpx;
margin-bottom: 60rpx;
}
.info-item .content {
font-size: 26rpx;
line-height: 1.6;
color: #b0b0cf;
}
.pos-meanings {
border-top: 1px solid rgba(255, 255, 255, 0.05);
padding-top: 40rpx;
margin-bottom: 60rpx;
}
.pos-meaning-item {
margin-bottom: 40rpx;
}
.pos-title {
font-size: 24rpx;
color: #c9a0dc;
display: block;
margin-bottom: 12rpx;
font-weight: 500;
}
.pos-text {
font-size: 26rpx;
color: #b0b0cf;
line-height: 1.8;
}
.advice-box {
background: linear-gradient(135deg, rgba(201, 160, 220, 0.1), rgba(201, 160, 220, 0.03));
padding: 40rpx;
border-radius: 20rpx;
border-left: 4rpx solid #c9a0dc;
}
.advice-box .content {
font-size: 28rpx;
color: #ffffff;
font-weight: 500;
line-height: 1.6;
}
.reset-btn {
margin-top: 80rpx;
background: transparent;
color: #c9a0dc;
border: 1px solid rgba(201, 160, 220, 0.4);
font-size: 24rpx;
border-radius: 40rpx;
width: 240rpx;
}
/* AI Loading */
.loading-ai {
display: flex;
flex-direction: column;
align-items: center;
padding: 80rpx 0;
color: #c9a0dc;
font-size: 26rpx;
}
.loading-dot {
font-size: 60rpx;
margin-bottom: 30rpx;
animation: flash 1.5s infinite;
}
@keyframes flash {
0%, 100% { opacity: 0.3; transform: scale(0.9); }
50% { opacity: 1; transform: scale(1.1); }
}