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); } }