/* ========== 基础重置 ========== */ * { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; } :root { --bg-dark: #1a0a2e; --bg-purple: #2d1b4e; --neon-pink: #FF6B9D; --neon-cyan: #08D9D6; --neon-purple: #a855f7; --center-pink: #FF7EB3; --text-primary: #ffffff; --text-secondary: rgba(255, 255, 255, 0.7); /* 轨道半径 */ --orbit-radius: min(32vw, 120px); --avatar-size: min(15vw, 56px); --center-size: min(30vw, 115px); /* 底部面板高度 */ --sheet-peek-height: 200px; --sheet-expanded-height: 70vh; } html, body { width: 100%; height: 100%; font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif; background: var(--bg-dark); color: var(--text-primary); overflow: hidden; } /* ========== 主容器 ========== */ .pond-app { position: relative; width: 100%; max-width: 430px; height: 100vh; height: 100dvh; margin: 0 auto; background: linear-gradient(180deg, #1a0a2e 0%, #2d1b4e 50%, #1a0a2e 100%); overflow: hidden; display: flex; flex-direction: column; } .pond-inner { position: relative; z-index: 10; padding: 12px 16px; flex: 1; display: flex; flex-direction: column; overflow: hidden; } /* ========== 背景层 - 星空效果 ========== */ .bg-layer { position: fixed; inset: 0; overflow: hidden; pointer-events: none; } .gradient-orb { position: absolute; border-radius: 50%; filter: blur(100px); opacity: 0.5; } .orb-1 { width: 300px; height: 300px; top: -100px; left: -100px; background: #4a2c7a; } .orb-2 { width: 250px; height: 250px; top: 20%; right: -80px; background: #6b3fa0; } /* 星星效果 */ .bg-layer::before { content: ''; position: absolute; inset: 0; background-image: 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; } @keyframes twinkle { 0%, 100% { opacity: 0.8; } 50% { opacity: 1; } } /* ========== 顶部栏 ========== */ .top-bar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; flex-shrink: 0; } .page-title { font-size: 22px; font-weight: 700; color: var(--text-primary); } .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); } /* ========== 匹配圆环区域 ========== */ .match-area { position: relative; width: 100%; flex: 1; min-height: 280px; max-height: 380px; margin: 0 auto; display: flex; align-items: center; justify-content: center; } /* 中心按钮 - 粉色圆形 */ .center-ring { position: absolute; width: var(--center-size); height: var(--center-size); left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 10; } /* 脉冲动画 */ .ring-pulse { position: absolute; inset: -8px; border-radius: 50%; background: rgba(255, 126, 179, 0.25); animation: pulse-expand 2s ease-out infinite; } .ring-pulse.delay-1 { animation-delay: 0.6s; } .ring-pulse.delay-2 { animation-delay: 1.2s; } @keyframes pulse-expand { 0% { transform: scale(1); opacity: 0.5; } 100% { transform: scale(1.6); opacity: 0; } } .ring-core { position: absolute; inset: 0; background: linear-gradient(180deg, #FFB6D3 0%, #FF7EB3 40%, #FF6BA8 100%); border-radius: 50%; cursor: pointer; box-shadow: 0 6px 24px rgba(255, 107, 157, 0.5), inset 0 2px 8px rgba(255, 255, 255, 0.3); transition: transform 0.2s; } .ring-core:active { transform: scale(0.95); } .core-inner { width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; } .core-text { font-size: min(5vw, 20px); font-weight: 700; color: #fff; 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); } /* 轨道环 - 虚线圆 */ .orbit-ring { position: absolute; width: calc(var(--orbit-radius) * 2 + 20px); height: calc(var(--orbit-radius) * 2 + 20px); left: 50%; top: 50%; transform: translate(-50%, -50%); border: 1.5px dashed rgba(255, 255, 255, 0.15); border-radius: 50%; pointer-events: none; } /* 用户头像容器 */ .orbit-users { position: absolute; width: calc(var(--orbit-radius) * 2 + var(--avatar-size)); height: calc(var(--orbit-radius) * 2 + var(--avatar-size) + 40px); left: 50%; top: 50%; transform: translate(-50%, -50%); } .orbit-user { position: absolute; display: flex; flex-direction: column; align-items: center; cursor: pointer; transition: transform 0.2s; } .orbit-user:active { transform: scale(1.05); } /* 6个用户位置 - 模拟左边图片布局 */ .orbit-user[data-pos="1"] { left: 50%; top: 0; transform: translateX(-50%); } .orbit-user[data-pos="2"] { left: 0; top: 18%; transform: translateX(-20%); } .orbit-user[data-pos="3"] { right: 0; top: 18%; transform: translateX(20%); } .orbit-user[data-pos="4"] { left: 0; top: 62%; transform: translateX(-10%); } .orbit-user[data-pos="5"] { right: 0; top: 62%; transform: translateX(10%); } .orbit-user[data-pos="6"] { left: 50%; bottom: 0; transform: translateX(-50%); } .user-avatar { width: var(--avatar-size); height: var(--avatar-size); border-radius: 50%; padding: 2px; background: linear-gradient(135deg, #FF6B9D, #a855f7, #08D9D6); position: relative; flex-shrink: 0; } .avatar-img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; background: #2d1b4e; border: 2px solid #1a0a2e; } .user-name { font-size: 11px; font-weight: 600; color: var(--text-primary); margin-top: 4px; text-align: center; max-width: 70px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-shadow: 0 1px 3px rgba(0,0,0,0.8); } .user-location { font-size: 9px; color: var(--text-secondary); text-align: center; text-shadow: 0 1px 2px rgba(0,0,0,0.8); 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; } /* ========== 快捷操作按钮 ========== */ .quick-actions { display: flex; gap: 10px; margin-bottom: 8px; flex-shrink: 0; } .action-btn { flex: 1; height: 52px; border: none; border-radius: 26px; display: flex; align-items: center; justify-content: center; gap: 8px; cursor: pointer; position: relative; overflow: hidden; transition: all 0.2s ease; padding: 0 14px; } .action-btn:active { transform: scale(0.97); } .action-btn.pink { background: linear-gradient(90deg, #FF6B9D, #FF8E9B); box-shadow: 0 4px 14px rgba(255, 107, 157, 0.4); } .action-btn.cyan { 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; } .btn-icon { font-size: 22px; } .btn-content { display: flex; flex-direction: column; align-items: flex-start; } .btn-label { font-size: 14px; font-weight: 700; color: #fff; } .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 { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: auto auto; gap: 10px; } .party-card { position: relative; 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; display: flex; flex-direction: column; 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; align-items: center; gap: 8px; padding: 10px 16px; background: #f5f5f5; border-radius: 20px; cursor: pointer; } .game-item:active { background: #eee; } .game-name { font-size: 13px; font-weight: 500; color: #333; } .game-icon { font-size: 18px; } /* ========== 一起玩 ========== */ .together-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } .together-card { display: flex; flex-direction: column; align-items: center; padding: 14px 8px; background: #f8f8f8; border-radius: 14px; cursor: pointer; } .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 { font-size: 10px; color: #999; } /* ========== 响应式 ========== */ @media (max-height: 700px) { :root { --orbit-radius: min(28vw, 105px); --avatar-size: min(13vw, 48px); --center-size: min(26vw, 100px); --sheet-peek-height: 180px; } .match-area { min-height: 240px; max-height: 320px; } } @media (max-height: 600px) { :root { --orbit-radius: min(24vw, 90px); --avatar-size: min(11vw, 42px); --center-size: min(22vw, 85px); --sheet-peek-height: 160px; } .match-area { min-height: 200px; max-height: 280px; } .page-title { font-size: 20px; } .action-btn { height: 46px; } .btn-sub { display: none; } }