zhibo/android-app/app/src/main/assets/web/styles/yuanchi.css

799 lines
14 KiB
CSS
Raw Normal View History

2026-01-06 14:24:42 +08:00
/* ========== 基础重置 ========== */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-tap-highlight-color: transparent;
}
:root {
2026-01-09 13:46:36 +08:00
--bg-dark: #1a0a2e;
--bg-purple: #2d1b4e;
--neon-pink: #FF6B9D;
2026-01-06 14:24:42 +08:00
--neon-cyan: #08D9D6;
--neon-purple: #a855f7;
2026-01-09 13:46:36 +08:00
--center-pink: #FF7EB3;
2026-01-06 14:24:42 +08:00
--text-primary: #ffffff;
2026-01-09 13:46:36 +08:00
--text-secondary: rgba(255, 255, 255, 0.7);
2026-01-06 14:24:42 +08:00
2026-01-09 13:46:36 +08:00
/* 轨道半径 */
--orbit-radius: min(32vw, 120px);
2026-01-06 14:24:42 +08:00
--avatar-size: min(15vw, 56px);
2026-01-09 13:46:36 +08:00
--center-size: min(30vw, 115px);
/* 底部面板高度 */
--sheet-peek-height: 200px;
--sheet-expanded-height: 70vh;
2026-01-06 14:24:42 +08:00
}
html, body {
width: 100%;
height: 100%;
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif;
background: var(--bg-dark);
color: var(--text-primary);
2026-01-09 13:46:36 +08:00
overflow: hidden;
2026-01-06 14:24:42 +08:00
}
/* ========== 主容器 ========== */
.pond-app {
position: relative;
width: 100%;
max-width: 430px;
2026-01-09 13:46:36 +08:00
height: 100vh;
height: 100dvh;
2026-01-06 14:24:42 +08:00
margin: 0 auto;
2026-01-09 13:46:36 +08:00
background: linear-gradient(180deg, #1a0a2e 0%, #2d1b4e 50%, #1a0a2e 100%);
overflow: hidden;
display: flex;
flex-direction: column;
2026-01-06 14:24:42 +08:00
}
.pond-inner {
position: relative;
z-index: 10;
2026-01-09 13:46:36 +08:00
padding: 12px 16px;
flex: 1;
2026-01-06 14:24:42 +08:00
display: flex;
flex-direction: column;
2026-01-09 13:46:36 +08:00
overflow: hidden;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* ========== 背景层 - 星空效果 ========== */
2026-01-06 14:24:42 +08:00
.bg-layer {
position: fixed;
inset: 0;
overflow: hidden;
pointer-events: none;
}
.gradient-orb {
position: absolute;
border-radius: 50%;
2026-01-09 13:46:36 +08:00
filter: blur(100px);
opacity: 0.5;
2026-01-06 14:24:42 +08:00
}
.orb-1 {
2026-01-09 13:46:36 +08:00
width: 300px;
height: 300px;
top: -100px;
left: -100px;
background: #4a2c7a;
2026-01-06 14:24:42 +08:00
}
.orb-2 {
2026-01-09 13:46:36 +08:00
width: 250px;
height: 250px;
top: 20%;
right: -80px;
background: #6b3fa0;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* 星星效果 */
.bg-layer::before {
content: '';
2026-01-06 14:24:42 +08:00
position: absolute;
inset: 0;
background-image:
2026-01-09 13:46:36 +08:00
radial-gradient(2px 2px at 20px 30px, white, transparent),
radial-gradient(2px 2px at 40px 70px, rgba(255,255,255,0.8), transparent),
radial-gradient(1px 1px at 90px 40px, white, transparent),
radial-gradient(2px 2px at 130px 80px, rgba(255,255,255,0.6), transparent),
radial-gradient(1px 1px at 160px 120px, white, transparent),
radial-gradient(2px 2px at 200px 50px, rgba(255,255,255,0.7), transparent),
radial-gradient(1px 1px at 250px 160px, white, transparent),
radial-gradient(2px 2px at 300px 100px, rgba(255,255,255,0.5), transparent);
background-size: 350px 200px;
animation: twinkle 4s ease-in-out infinite;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
@keyframes twinkle {
0%, 100% { opacity: 0.8; }
50% { opacity: 1; }
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* ========== 顶部栏 ========== */
.top-bar {
2026-01-06 14:24:42 +08:00
display: flex;
justify-content: space-between;
align-items: center;
2026-01-09 13:46:36 +08:00
margin-bottom: 8px;
2026-01-06 14:24:42 +08:00
flex-shrink: 0;
}
2026-01-09 13:46:36 +08:00
.page-title {
font-size: 22px;
2026-01-06 14:24:42 +08:00
font-weight: 700;
2026-01-09 13:46:36 +08:00
color: var(--text-primary);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.filter-btn {
font-size: 12px;
color: var(--text-secondary);
padding: 6px 12px;
background: rgba(255, 255, 255, 0.1);
border-radius: 14px;
border: 1px solid rgba(255, 255, 255, 0.2);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* ========== 匹配圆环区域 ========== */
2026-01-06 14:24:42 +08:00
.match-area {
position: relative;
width: 100%;
2026-01-09 13:46:36 +08:00
flex: 1;
min-height: 280px;
max-height: 380px;
margin: 0 auto;
2026-01-06 14:24:42 +08:00
display: flex;
align-items: center;
justify-content: center;
}
2026-01-09 13:46:36 +08:00
/* 中心按钮 - 粉色圆形 */
2026-01-06 14:24:42 +08:00
.center-ring {
position: absolute;
width: var(--center-size);
height: var(--center-size);
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 10;
}
2026-01-09 13:46:36 +08:00
/* 脉冲动画 */
2026-01-06 14:24:42 +08:00
.ring-pulse {
position: absolute;
2026-01-09 13:46:36 +08:00
inset: -8px;
2026-01-06 14:24:42 +08:00
border-radius: 50%;
2026-01-09 13:46:36 +08:00
background: rgba(255, 126, 179, 0.25);
animation: pulse-expand 2s ease-out infinite;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.ring-pulse.delay-1 { animation-delay: 0.6s; }
.ring-pulse.delay-2 { animation-delay: 1.2s; }
2026-01-06 14:24:42 +08:00
2026-01-09 13:46:36 +08:00
@keyframes pulse-expand {
0% { transform: scale(1); opacity: 0.5; }
100% { transform: scale(1.6); opacity: 0; }
2026-01-06 14:24:42 +08:00
}
.ring-core {
position: absolute;
2026-01-09 13:46:36 +08:00
inset: 0;
background: linear-gradient(180deg, #FFB6D3 0%, #FF7EB3 40%, #FF6BA8 100%);
2026-01-06 14:24:42 +08:00
border-radius: 50%;
cursor: pointer;
box-shadow:
2026-01-09 13:46:36 +08:00
0 6px 24px rgba(255, 107, 157, 0.5),
inset 0 2px 8px rgba(255, 255, 255, 0.3);
2026-01-06 14:24:42 +08:00
transition: transform 0.2s;
}
.ring-core:active {
2026-01-09 13:46:36 +08:00
transform: scale(0.95);
2026-01-06 14:24:42 +08:00
}
.core-inner {
width: 100%;
height: 100%;
display: flex;
2026-01-09 13:46:36 +08:00
flex-direction: column;
2026-01-06 14:24:42 +08:00
align-items: center;
justify-content: center;
2026-01-09 13:46:36 +08:00
gap: 2px;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.core-text {
font-size: min(5vw, 20px);
font-weight: 700;
2026-01-06 14:24:42 +08:00
color: #fff;
2026-01-09 13:46:36 +08:00
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
}
.core-sub {
font-size: min(2.6vw, 10px);
color: rgba(255, 255, 255, 0.9);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* 轨道环 - 虚线圆 */
2026-01-06 14:24:42 +08:00
.orbit-ring {
position: absolute;
2026-01-09 13:46:36 +08:00
width: calc(var(--orbit-radius) * 2 + 20px);
height: calc(var(--orbit-radius) * 2 + 20px);
2026-01-06 14:24:42 +08:00
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
2026-01-09 13:46:36 +08:00
border: 1.5px dashed rgba(255, 255, 255, 0.15);
2026-01-06 14:24:42 +08:00
border-radius: 50%;
pointer-events: none;
}
2026-01-09 13:46:36 +08:00
/* 用户头像容器 */
2026-01-06 14:24:42 +08:00
.orbit-users {
position: absolute;
2026-01-09 13:46:36 +08:00
width: calc(var(--orbit-radius) * 2 + var(--avatar-size));
height: calc(var(--orbit-radius) * 2 + var(--avatar-size) + 40px);
2026-01-06 14:24:42 +08:00
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.orbit-user {
position: absolute;
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
2026-01-09 13:46:36 +08:00
transition: transform 0.2s;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.orbit-user:active {
transform: scale(1.05);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* 6个用户位置 - 模拟左边图片布局 */
.orbit-user[data-pos="1"] {
left: 50%;
2026-01-06 14:24:42 +08:00
top: 0;
2026-01-09 13:46:36 +08:00
transform: translateX(-50%);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.orbit-user[data-pos="2"] {
left: 0;
top: 18%;
transform: translateX(-20%);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.orbit-user[data-pos="3"] {
right: 0;
top: 18%;
transform: translateX(20%);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.orbit-user[data-pos="4"] {
left: 0;
top: 62%;
transform: translateX(-10%);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.orbit-user[data-pos="5"] {
right: 0;
top: 62%;
transform: translateX(10%);
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.orbit-user[data-pos="6"] {
left: 50%;
bottom: 0;
transform: translateX(-50%);
2026-01-06 14:24:42 +08:00
}
.user-avatar {
width: var(--avatar-size);
height: var(--avatar-size);
border-radius: 50%;
padding: 2px;
2026-01-09 13:46:36 +08:00
background: linear-gradient(135deg, #FF6B9D, #a855f7, #08D9D6);
2026-01-06 14:24:42 +08:00
position: relative;
flex-shrink: 0;
}
.avatar-img {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
2026-01-09 13:46:36 +08:00
background: #2d1b4e;
border: 2px solid #1a0a2e;
2026-01-06 14:24:42 +08:00
}
.user-name {
2026-01-09 13:46:36 +08:00
font-size: 11px;
2026-01-06 14:24:42 +08:00
font-weight: 600;
color: var(--text-primary);
margin-top: 4px;
text-align: center;
2026-01-09 13:46:36 +08:00
max-width: 70px;
2026-01-06 14:24:42 +08:00
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-shadow: 0 1px 3px rgba(0,0,0,0.8);
}
.user-location {
2026-01-09 13:46:36 +08:00
font-size: 9px;
2026-01-06 14:24:42 +08:00
color: var(--text-secondary);
text-align: center;
text-shadow: 0 1px 2px rgba(0,0,0,0.8);
2026-01-09 13:46:36 +08:00
display: flex;
align-items: center;
gap: 3px;
}
.user-location::before {
content: '○';
font-size: 6px;
color: #4ade80;
}
/* ========== 广告横幅 ========== */
.promo-banner {
display: flex;
align-items: center;
padding: 10px 14px;
margin-bottom: 10px;
gap: 8px;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.15);
border-radius: 12px;
flex-shrink: 0;
}
.promo-icon-img {
width: 48px;
height: 36px;
object-fit: contain;
border-radius: 6px;
}
.promo-icon {
font-size: 20px;
}
.promo-text {
font-size: 11px;
color: var(--text-secondary);
}
.promo-link {
flex: 1;
font-size: 13px;
font-weight: 600;
color: var(--text-primary);
}
.promo-new {
font-size: 10px;
padding: 2px 8px;
background: linear-gradient(90deg, #FF6B9D, #FF8E53);
color: #fff;
border-radius: 8px;
font-weight: 600;
2026-01-06 14:24:42 +08:00
}
/* ========== 快捷操作按钮 ========== */
.quick-actions {
display: flex;
gap: 10px;
2026-01-09 13:46:36 +08:00
margin-bottom: 8px;
2026-01-06 14:24:42 +08:00
flex-shrink: 0;
}
.action-btn {
flex: 1;
2026-01-09 13:46:36 +08:00
height: 52px;
2026-01-06 14:24:42 +08:00
border: none;
2026-01-09 13:46:36 +08:00
border-radius: 26px;
2026-01-06 14:24:42 +08:00
display: flex;
align-items: center;
justify-content: center;
2026-01-09 13:46:36 +08:00
gap: 8px;
2026-01-06 14:24:42 +08:00
cursor: pointer;
position: relative;
overflow: hidden;
2026-01-09 13:46:36 +08:00
transition: all 0.2s ease;
padding: 0 14px;
2026-01-06 14:24:42 +08:00
}
.action-btn:active {
2026-01-09 13:46:36 +08:00
transform: scale(0.97);
2026-01-06 14:24:42 +08:00
}
.action-btn.pink {
2026-01-09 13:46:36 +08:00
background: linear-gradient(90deg, #FF6B9D, #FF8E9B);
box-shadow: 0 4px 14px rgba(255, 107, 157, 0.4);
2026-01-06 14:24:42 +08:00
}
.action-btn.cyan {
2026-01-09 13:46:36 +08:00
background: linear-gradient(90deg, #E8D5F2, #F5E6FA);
box-shadow: 0 4px 14px rgba(168, 85, 247, 0.2);
}
.action-btn.cyan .btn-label,
.action-btn.cyan .btn-sub {
color: #6b3fa0;
2026-01-06 14:24:42 +08:00
}
.btn-icon {
2026-01-09 13:46:36 +08:00
font-size: 22px;
}
.btn-content {
display: flex;
flex-direction: column;
align-items: flex-start;
2026-01-06 14:24:42 +08:00
}
.btn-label {
2026-01-09 13:46:36 +08:00
font-size: 14px;
font-weight: 700;
2026-01-06 14:24:42 +08:00
color: #fff;
}
2026-01-09 13:46:36 +08:00
.btn-sub {
font-size: 9px;
color: rgba(255, 255, 255, 0.8);
}
/* ========== 可折叠底部面板 ========== */
.bottom-sheet {
position: fixed;
left: 0;
right: 0;
bottom: 0;
max-width: 430px;
margin: 0 auto;
background: #fff;
border-radius: 20px 20px 0 0;
z-index: 100;
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
transform: translateY(calc(100% - 160px));
max-height: var(--sheet-expanded-height);
box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.15);
}
.bottom-sheet.expanded {
transform: translateY(0);
}
/* 拖动手柄 */
.sheet-handle {
display: flex;
justify-content: center;
padding: 10px 16px 6px;
cursor: pointer;
}
.handle-bar {
width: 36px;
height: 4px;
background: #ddd;
border-radius: 2px;
}
/* 区块头部 - 默认显示在底部 */
.section-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 16px;
margin-bottom: 12px;
}
.section-title {
font-size: 16px;
font-weight: 700;
color: #333;
}
/* 上滑查看更多按钮 */
.section-more {
display: flex;
align-items: center;
gap: 4px;
font-size: 12px;
color: #999;
padding: 4px 10px;
background: #f5f5f5;
border-radius: 12px;
cursor: pointer;
}
.section-more::before {
content: '↑';
font-size: 10px;
}
.bottom-sheet.expanded .section-more {
display: none;
}
/* 快速匹配玩伴卡片区域 - 默认显示 */
.match-grid {
display: flex;
gap: 10px;
padding: 0 16px;
}
.bottom-sheet.expanded .match-grid {
display: flex;
}
/* 底部面板内容 - 默认隐藏 */
.sheet-content {
display: none;
padding: 0 16px 24px;
overflow-y: auto;
max-height: calc(var(--sheet-expanded-height) - 50px);
-webkit-overflow-scrolling: touch;
}
.bottom-sheet.expanded .sheet-content {
display: block;
}
.sheet-section {
margin-bottom: 20px;
}
.peek-section {
padding-bottom: 10px;
}
/* ========== 快速匹配玩伴卡片 ========== */
.match-grid {
display: flex;
gap: 10px;
padding: 0 16px;
}
.match-card {
flex: 1;
padding: 14px 10px;
border-radius: 14px;
cursor: pointer;
transition: transform 0.2s;
position: relative;
overflow: hidden;
min-height: 80px;
}
.match-card:active {
transform: scale(0.96);
}
.match-card:nth-child(1) {
background: linear-gradient(135deg, #FFE4EC 0%, #FFCDD9 100%);
}
.match-card:nth-child(2) {
background: linear-gradient(135deg, #E0F4F4 0%, #B8E8E8 100%);
}
.match-card:nth-child(3) {
background: linear-gradient(135deg, #FFE8F0 0%, #FFD4E4 100%);
}
.match-info {
display: flex;
flex-direction: column;
gap: 4px;
}
.match-title {
font-size: 13px;
font-weight: 700;
color: #333;
}
.match-desc {
font-size: 10px;
color: #888;
}
.match-icon {
position: absolute;
right: 6px;
bottom: 6px;
font-size: 28px;
opacity: 0.9;
}
/* ========== 派对 ========== */
.party-grid {
2026-01-06 14:24:42 +08:00
display: grid;
grid-template-columns: repeat(3, 1fr);
2026-01-09 13:46:36 +08:00
grid-template-rows: auto auto;
2026-01-06 14:24:42 +08:00
gap: 10px;
}
2026-01-09 13:46:36 +08:00
.party-card {
2026-01-06 14:24:42 +08:00
position: relative;
2026-01-09 13:46:36 +08:00
border-radius: 14px;
overflow: hidden;
cursor: pointer;
transition: transform 0.2s;
min-height: 70px;
}
.party-card:active {
transform: scale(0.96);
}
.party-card.large {
grid-column: span 2;
min-height: 85px;
}
.party-bg {
position: absolute;
inset: 0;
}
.party-bg.pink { background: linear-gradient(135deg, #FF8FAB, #FF6B8A); }
.party-bg.cyan { background: linear-gradient(135deg, #4ECDC4, #45B7AA); }
.party-bg.purple { background: linear-gradient(135deg, #B794F6, #9F7AEA); }
.party-bg.orange { background: linear-gradient(135deg, #FFB347, #FF9500); }
.party-bg.green { background: linear-gradient(135deg, #68D391, #48BB78); }
.party-content {
position: relative;
z-index: 1;
padding: 10px;
2026-01-06 14:24:42 +08:00
display: flex;
flex-direction: column;
2026-01-09 13:46:36 +08:00
height: 100%;
}
.party-title {
font-size: 13px;
font-weight: 700;
color: #fff;
}
.party-count, .party-desc {
font-size: 9px;
color: rgba(255, 255, 255, 0.85);
margin-top: 2px;
}
.party-tag {
margin-top: auto;
font-size: 9px;
padding: 3px 8px;
background: rgba(255, 255, 255, 0.25);
border-radius: 10px;
color: #fff;
width: fit-content;
}
/* ========== 小游戏 ========== */
.game-list {
display: flex;
gap: 10px;
overflow-x: auto;
padding-bottom: 4px;
-webkit-overflow-scrolling: touch;
}
.game-list::-webkit-scrollbar {
display: none;
}
.game-item {
flex-shrink: 0;
display: flex;
2026-01-06 14:24:42 +08:00
align-items: center;
2026-01-09 13:46:36 +08:00
gap: 8px;
padding: 10px 16px;
background: #f5f5f5;
border-radius: 20px;
2026-01-06 14:24:42 +08:00
cursor: pointer;
}
2026-01-09 13:46:36 +08:00
.game-item:active {
background: #eee;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.game-name {
font-size: 13px;
font-weight: 500;
color: #333;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.game-icon {
font-size: 18px;
}
2026-01-06 14:24:42 +08:00
2026-01-09 13:46:36 +08:00
/* ========== 一起玩 ========== */
.together-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.together-card {
display: flex;
flex-direction: column;
align-items: center;
padding: 14px 8px;
background: #f8f8f8;
border-radius: 14px;
cursor: pointer;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.together-card:active {
transform: scale(0.96);
}
.together-icon {
font-size: 26px;
margin-bottom: 6px;
}
.together-info {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
}
.together-title {
font-size: 12px;
font-weight: 600;
color: #333;
}
.together-desc {
2026-01-06 14:24:42 +08:00
font-size: 10px;
2026-01-09 13:46:36 +08:00
color: #999;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
/* ========== 响应式 ========== */
@media (max-height: 700px) {
2026-01-06 14:24:42 +08:00
:root {
2026-01-09 13:46:36 +08:00
--orbit-radius: min(28vw, 105px);
2026-01-06 14:24:42 +08:00
--avatar-size: min(13vw, 48px);
2026-01-09 13:46:36 +08:00
--center-size: min(26vw, 100px);
--sheet-peek-height: 180px;
2026-01-06 14:24:42 +08:00
}
.match-area {
2026-01-09 13:46:36 +08:00
min-height: 240px;
max-height: 320px;
2026-01-06 14:24:42 +08:00
}
}
@media (max-height: 600px) {
:root {
2026-01-09 13:46:36 +08:00
--orbit-radius: min(24vw, 90px);
2026-01-06 14:24:42 +08:00
--avatar-size: min(11vw, 42px);
2026-01-09 13:46:36 +08:00
--center-size: min(22vw, 85px);
--sheet-peek-height: 160px;
2026-01-06 14:24:42 +08:00
}
.match-area {
2026-01-09 13:46:36 +08:00
min-height: 200px;
max-height: 280px;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.page-title {
font-size: 20px;
2026-01-06 14:24:42 +08:00
}
.action-btn {
2026-01-09 13:46:36 +08:00
height: 46px;
2026-01-06 14:24:42 +08:00
}
2026-01-09 13:46:36 +08:00
.btn-sub {
2026-01-06 14:24:42 +08:00
display: none;
}
}