huaanglimeng/pages/index/index.wxss

441 lines
7.5 KiB
Plaintext

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;
justify-content: center;
gap: 20rpx;
height: 240rpx;
margin-bottom: 60rpx;
width: 100%;
}
.slot-item {
width: 140rpx;
height: 220rpx;
position: relative;
}
.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); }
}