You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1882 lines
47 KiB
1882 lines
47 KiB
<template>
|
|
<view class="ie-page">
|
|
<view class="ambient ambient-a"></view>
|
|
<view class="ambient ambient-b"></view>
|
|
<view class="top-safe" :style="{ height: menuButtonInfo.top + 'px' }"></view>
|
|
|
|
<view class="status-head">
|
|
<view class="time-line">{{ timeLabel }}</view>
|
|
<view class="live-line">此刻有 <text class="count-num">{{ displayAwakeCount }}</text> 个灵魂在线漂流。</view>
|
|
<view class="sub-line">{{ waitingCount }} 个人正在等一句话。</view>
|
|
<view class="archive-entry planet-entry" @tap="openProfile">
|
|
<view class="planet-ring"></view>
|
|
<view class="planet-icon">◌</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="drift-field">
|
|
<view class="wave-line wave-a"></view>
|
|
<view class="wave-line wave-b"></view>
|
|
<view class="drift-fragment" v-for="(item,index) in driftMessages" :key="item.text"
|
|
:class="['fragment-' + index, item.type, item.mood]" @tap="selectDrift(item)">
|
|
<view class="fragment-dot"></view>
|
|
<view class="fragment-text">{{ item.text }}</view>
|
|
<view class="bubble-actions" v-if="activeDriftText === item.text" @tap.stop>
|
|
<view @tap="replyDrift">回复</view>
|
|
<view @tap="likeDrift">轻轻赞</view>
|
|
</view>
|
|
</view>
|
|
<view class="signal-planet" :style="galaxyStyle" @touchstart.stop="startGalaxyDrag" @touchmove.stop="moveGalaxyDrag"
|
|
@touchend="endGalaxyDrag" @touchcancel="endGalaxyDrag">
|
|
<view class="galaxy-breath">
|
|
<view class="galaxy-ring ring-main"></view>
|
|
<view class="galaxy-ring ring-second"></view>
|
|
<view class="galaxy-ring ring-third"></view>
|
|
<view class="orbit-planet" v-for="(planet,index) in orbitPlanets" :key="planet.name"
|
|
:class="'orbit-planet-' + index" :style="orbitPlanetStyles[index]"></view>
|
|
<view class="galaxy-body">
|
|
<view class="liquid liquid-a"></view>
|
|
<view class="liquid liquid-b"></view>
|
|
<view class="soul-particle soul-a"></view>
|
|
<view class="soul-particle soul-b"></view>
|
|
<view class="soul-particle soul-c"></view>
|
|
<view class="planet-core">
|
|
<view class="planet-text">有人也在等你</view>
|
|
<view class="planet-sub">{{ currentMode === 'i' ? '安静靠近' : '轻轻热闹' }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="mood-dock">
|
|
<view class="dock-title">
|
|
<text>{{ displayMoodCopy }}</text><text class="typing-cursor" v-if="displayMoodCopy.length < activeMood.copy.length"></text>
|
|
</view>
|
|
<scroll-view scroll-x class="dock-scroll" show-scrollbar="false">
|
|
<view class="dock-row">
|
|
<view class="mood-chip" v-for="item in moods" :key="item.key"
|
|
:class="{ active: currentMood === item.key }" @tap="changeMood(item.key)">
|
|
<text class="mood-icon">{{ item.icon }}</text>{{ item.label }}
|
|
</view>
|
|
<view class="mode-switch" @tap="toggleMode">{{ currentMode }} · {{ currentMode === 'i' ? '慢一点' : '亮一点' }}</view>
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
|
|
<view class="bottom-actions">
|
|
<view class="tab-glow"></view>
|
|
<view class="bottom-item active"><text class="tab-icon">⌛</text><text>此刻</text></view>
|
|
<view class="bottom-item" @tap="goFate"><text class="tab-icon">⌁</text><text>缘分</text></view>
|
|
<view class="bottom-item" @tap="goMessages"><text class="tab-icon">◔</text><text>消息</text></view>
|
|
<view class="bottom-item" @tap="goUniverse"><text class="tab-icon">♙</text><text>我的</text></view>
|
|
</view>
|
|
|
|
<view class="match-mask" v-if="showMatch" @tap="closeMatch">
|
|
<view class="match-panel" @tap.stop>
|
|
<view class="match-top">
|
|
<view class="match-label">半匿名漂流者</view>
|
|
<view class="close" @tap="closeMatch">×</view>
|
|
</view>
|
|
<view class="companion-orb" :class="currentMode">{{ matchedPerson.avatar }}</view>
|
|
<view class="match-name">{{ matchedPerson.name }}</view>
|
|
<view class="match-state">{{ activeMood.label }} · {{ matchedPerson.state }}</view>
|
|
<view class="match-quote">{{ matchedPerson.quote }}</view>
|
|
<view class="match-actions">
|
|
<view class="ghost-btn" @tap="skipMatch">轻轻划过</view>
|
|
<view class="solid-btn" @tap="goChat">进入限时陪伴</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="profile-mask" v-if="showProfile" @tap="closeProfile">
|
|
<view class="profile-mini" @tap.stop>
|
|
<view class="mini-orb">◌</view>
|
|
<view class="mini-title">半匿名漂流者</view>
|
|
<view class="mini-sub">今天更适合:{{ currentMode === 'i' ? '慢一点靠近' : '轻轻热闹一下' }}</view>
|
|
<view class="mini-action" @tap="goUniverse">进入我的宇宙</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
menuButtonInfo: { top: 44 },
|
|
currentMood: 'quiet',
|
|
currentMode: 'i',
|
|
chancesLeft: 3,
|
|
showMatch: false,
|
|
now: new Date(),
|
|
awakeCount: 127,
|
|
displayAwakeCount: 0,
|
|
waitingCount: 49,
|
|
liveTimer: null,
|
|
countTimer: null,
|
|
showProfile: false,
|
|
activeDriftText: '',
|
|
displayMoodCopy: '对方没有催我讲话,沉默变得没那么尴尬。',
|
|
moodTypeTimer: null,
|
|
galaxyRotateX: -8,
|
|
galaxyRotateY: 18,
|
|
galaxyDragging: false,
|
|
galaxyMoved: false,
|
|
galaxyStartX: 0,
|
|
galaxyStartY: 0,
|
|
galaxyAutoAngle: 0,
|
|
galaxyTimer: null,
|
|
orbitPlanets: [
|
|
{ name: 'mint', angle: 12, radiusX: 224, radiusY: 58, size: 18, speed: 1.05, color: 'rgba(169,255,231,.92)' },
|
|
{ name: 'violet', angle: 86, radiusX: 190, radiusY: 92, size: 26, speed: .72, color: 'rgba(162,155,254,.86)' },
|
|
{ name: 'peach', angle: 156, radiusX: 246, radiusY: 74, size: 15, speed: .9, color: 'rgba(255,184,209,.9)' },
|
|
{ name: 'lemon', angle: 218, radiusX: 202, radiusY: 110, size: 12, speed: 1.22, color: 'rgba(255,226,139,.88)' },
|
|
{ name: 'aqua', angle: 288, radiusX: 270, radiusY: 84, size: 22, speed: .62, color: 'rgba(132,233,255,.82)' },
|
|
{ name: 'snow', angle: 332, radiusX: 166, radiusY: 48, size: 10, speed: 1.38, color: 'rgba(255,255,255,.95)' }
|
|
],
|
|
matchText: "随机遇见一个人",
|
|
doneText: "今天先到这里",
|
|
moods: [{"key":"quiet","label":"想安静","icon":"◐","copy":"对方没有催我讲话,沉默变得没那么尴尬。"},{"key":"talk","label":"想说话","icon":"◒","copy":"聊了一个很小的日常话题,心情被拉亮了一点。"},{"key":"listen","label":"听着呢","icon":"◌","copy":"像有人坐在旁边,不需要解释为什么低落。"},{"key":"drift","label":"轻了一点","icon":"✦","copy":"只是给今天留一点柔软的痕迹。"}],
|
|
companions: {"i":[{"name":"树荫下的风","avatar":"风","state":"在校园里发呆","quote":"可以安静待 15 分钟,不用急着找话题。"},{"name":"耳机里的云","avatar":"云","state":"刚从教室出来","quote":"今天只想慢慢说两句。"}],"e":[{"name":"便利店灯光","avatar":"光","state":"想聊点不重要的","quote":"要不要交换一句今天最荒唐的小事?"},{"name":"操场散步员","avatar":"跑","state":"刚从操场回来","quote":"我可以负责开场,你负责随便接。"}]},
|
|
matchedPerson: {},
|
|
stateBubbles: [
|
|
{ type: 'i', text: '有人刚下课,想安静走一会。', time: '2 分钟前' },
|
|
{ type: 'e', text: '一个 e 人想聊 5 分钟废话。', time: '刚刚' },
|
|
{ type: 'i', text: '图书馆三楼有人在发呆。', time: '8 分钟前' }
|
|
],
|
|
quickSignals: [
|
|
{ icon: '☁', text: '有点 emo', sub: '不想解释', mood: 'quiet' },
|
|
{ icon: '✦', text: '太无聊了', sub: '想被拉一下', mood: 'talk' },
|
|
{ icon: '◌', text: '只想旁听', sub: '听别人说说', mood: 'listen' }
|
|
],
|
|
driftMessages: [
|
|
{ type: 'i', mood: 'quiet', text: '东操现在风很舒服' },
|
|
{ type: 'i', mood: 'listen', text: '有人在图书馆假装努力' },
|
|
{ type: 'e', mood: 'talk', text: '谁愿意陪我散步 10 分钟' },
|
|
{ type: 'i', mood: 'quiet', text: '刚刚有人有点低落' },
|
|
{ type: 'e', mood: 'talk', text: '想听一个不重要的故事' },
|
|
{ type: 'i', mood: 'drift', text: '走在路上突然有点空' }
|
|
],
|
|
rules: [{"title":"半匿名","desc":"不展示学校、真实照片和复杂资料。"},{"title":"限时","desc":"房间自然结束,关系不会变成负担。"},{"title":"低压力","desc":"可以聊天,也可以只发一个“我在”。"}]
|
|
}
|
|
},
|
|
computed: {
|
|
activeMood() {
|
|
return this.moods.find(item => item.key === this.currentMood) || this.moods[0]
|
|
},
|
|
timeLabel() {
|
|
const hours = String(this.now.getHours()).padStart(2, '0')
|
|
const minutes = String(this.now.getMinutes()).padStart(2, '0')
|
|
return `${hours}:${minutes}`
|
|
},
|
|
galaxyStyle() {
|
|
return 'transform: translate(-50%, -50%);'
|
|
},
|
|
orbitPlanetStyles() {
|
|
return this.orbitPlanets.map((planet) => {
|
|
const angle = (planet.angle + this.galaxyRotateY + this.galaxyAutoAngle * planet.speed) * Math.PI / 180
|
|
const tilt = this.galaxyRotateX * Math.PI / 180
|
|
const depth = Math.sin(angle)
|
|
const x = Math.cos(angle) * planet.radiusX
|
|
const y = Math.sin(angle) * planet.radiusY * Math.cos(tilt) + Math.sin(tilt) * 20
|
|
const scale = 0.72 + (depth + 1) * 0.18
|
|
const opacity = 0.42 + (depth + 1) * 0.25
|
|
const blur = depth > 0 ? 0 : 1.2
|
|
const zIndex = Math.round(8 + (depth + 1) * 7)
|
|
return [
|
|
`width: ${planet.size}rpx`,
|
|
`height: ${planet.size}rpx`,
|
|
`background: ${planet.color}`,
|
|
`color: ${planet.color}`,
|
|
`opacity: ${opacity}`,
|
|
`z-index: ${zIndex}`,
|
|
`filter: blur(${blur}rpx)`,
|
|
`transform: translate(-50%, -50%) translate(${x}rpx, ${y}rpx) scale(${scale})`
|
|
].join(';')
|
|
})
|
|
}
|
|
},
|
|
onLoad() {
|
|
if (uni.getMenuButtonBoundingClientRect) {
|
|
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
|
|
}
|
|
this.pickCompanion()
|
|
this.animateAwakeCount(this.awakeCount)
|
|
this.liveTimer = setInterval(() => {
|
|
this.now = new Date()
|
|
this.awakeCount = 118 + Math.floor(Math.random() * 28)
|
|
this.waitingCount = 39 + Math.floor(Math.random() * 18)
|
|
this.animateAwakeCount(this.awakeCount)
|
|
}, 2600)
|
|
this.galaxyTimer = setInterval(() => {
|
|
this.galaxyAutoAngle = (this.galaxyAutoAngle + 1.2) % 360
|
|
}, 50)
|
|
this.displayMoodCopy = this.activeMood.copy
|
|
},
|
|
onUnload() {
|
|
if (this.liveTimer) {
|
|
clearInterval(this.liveTimer)
|
|
this.liveTimer = null
|
|
}
|
|
if (this.countTimer) {
|
|
clearInterval(this.countTimer)
|
|
this.countTimer = null
|
|
}
|
|
if (this.galaxyTimer) {
|
|
clearInterval(this.galaxyTimer)
|
|
this.galaxyTimer = null
|
|
}
|
|
if (this.moodTypeTimer) {
|
|
clearInterval(this.moodTypeTimer)
|
|
this.moodTypeTimer = null
|
|
}
|
|
},
|
|
methods: {
|
|
animateAwakeCount(target) {
|
|
if (this.countTimer) {
|
|
clearInterval(this.countTimer)
|
|
}
|
|
const start = this.displayAwakeCount
|
|
const diff = target - start
|
|
let step = 0
|
|
this.countTimer = setInterval(() => {
|
|
step += 1
|
|
const progress = Math.min(step / 18, 1)
|
|
const eased = 1 - Math.pow(1 - progress, 3)
|
|
this.displayAwakeCount = Math.round(start + diff * eased)
|
|
if (progress >= 1) {
|
|
clearInterval(this.countTimer)
|
|
this.countTimer = null
|
|
}
|
|
}, 24)
|
|
},
|
|
pickCompanion() {
|
|
const list = this.companions[this.currentMode]
|
|
this.matchedPerson = list[Math.floor(Math.random() * list.length)]
|
|
},
|
|
openMatch() {
|
|
if (this.chancesLeft === 0) {
|
|
uni.showToast({ title: this.doneText, icon: 'none' })
|
|
return
|
|
}
|
|
this.pickCompanion()
|
|
this.showMatch = true
|
|
},
|
|
closeMatch() { this.showMatch = false },
|
|
toggleMode() {
|
|
this.currentMode = this.currentMode === 'i' ? 'e' : 'i'
|
|
},
|
|
changeMood(key) {
|
|
this.currentMood = key
|
|
this.playMoodCopy(this.activeMood.copy)
|
|
},
|
|
selectDrift(item) {
|
|
this.currentMood = item.mood
|
|
this.currentMode = item.type
|
|
this.playMoodCopy(this.activeMood.copy)
|
|
this.activeDriftText = this.activeDriftText === item.text ? '' : item.text
|
|
},
|
|
playMoodCopy(text) {
|
|
if (this.moodTypeTimer) {
|
|
clearInterval(this.moodTypeTimer)
|
|
this.moodTypeTimer = null
|
|
}
|
|
const chars = Array.from(text)
|
|
let index = 0
|
|
this.displayMoodCopy = ''
|
|
this.moodTypeTimer = setInterval(() => {
|
|
index += 1
|
|
this.displayMoodCopy = chars.slice(0, index).join('')
|
|
if (index >= chars.length) {
|
|
clearInterval(this.moodTypeTimer)
|
|
this.moodTypeTimer = null
|
|
}
|
|
}, 42)
|
|
},
|
|
replyDrift() {
|
|
uni.showToast({ title: '可以从一句话开始', icon: 'none' })
|
|
},
|
|
likeDrift() {
|
|
uni.showToast({ title: '已轻轻回应', icon: 'none' })
|
|
},
|
|
openProfile() {
|
|
this.openMatch()
|
|
},
|
|
closeProfile() {
|
|
this.showProfile = false
|
|
},
|
|
getGalaxyPoint(event) {
|
|
const touch = (event.touches && event.touches[0]) || (event.changedTouches && event.changedTouches[0])
|
|
if (!touch) return null
|
|
const x = touch.pageX !== undefined ? touch.pageX : touch.clientX
|
|
const y = touch.pageY !== undefined ? touch.pageY : touch.clientY
|
|
if (x === undefined || y === undefined) return null
|
|
return { x, y }
|
|
},
|
|
startGalaxyDrag(event) {
|
|
const point = this.getGalaxyPoint(event)
|
|
if (!point) return
|
|
this.galaxyDragging = true
|
|
this.galaxyMoved = false
|
|
this.galaxyStartX = point.x
|
|
this.galaxyStartY = point.y
|
|
},
|
|
moveGalaxyDrag(event) {
|
|
if (!this.galaxyDragging) return
|
|
const point = this.getGalaxyPoint(event)
|
|
if (!point) return
|
|
const deltaX = point.x - this.galaxyStartX
|
|
const deltaY = point.y - this.galaxyStartY
|
|
if (Math.abs(deltaX) + Math.abs(deltaY) > 4) {
|
|
this.galaxyMoved = true
|
|
}
|
|
this.galaxyRotateY = (this.galaxyRotateY + deltaX * 0.82) % 360
|
|
this.galaxyRotateX = Math.max(-48, Math.min(48, this.galaxyRotateX - deltaY * 0.28))
|
|
this.galaxyStartX = point.x
|
|
this.galaxyStartY = point.y
|
|
},
|
|
endGalaxyDrag() {
|
|
if (!this.galaxyDragging) return
|
|
this.galaxyDragging = false
|
|
if (!this.galaxyMoved) {
|
|
this.goMatch()
|
|
}
|
|
},
|
|
skipMatch() {
|
|
this.chancesLeft = Math.max(this.chancesLeft - 1, 0)
|
|
this.showMatch = false
|
|
uni.showToast({ title: "这次轻轻划过了", icon: 'none' })
|
|
},
|
|
goChat() {
|
|
this.chancesLeft = Math.max(this.chancesLeft - 1, 0)
|
|
this.showMatch = false
|
|
uni.navigateTo({ url: '/package1/ieBrowser/chat?mode=' + this.currentMode + '&mood=' + this.currentMood })
|
|
},
|
|
goMatch() {
|
|
uni.navigateTo({ url: '/package1/ieBrowser/match?mode=' + this.currentMode + '&mood=' + this.currentMood })
|
|
},
|
|
goRecords() { uni.navigateTo({ url: '/package1/ieBrowser/chatList' }) },
|
|
goArchive() { uni.navigateTo({ url: '/package1/ieBrowser/universe' }) },
|
|
goFate() { uni.navigateTo({ url: '/package1/ieBrowser/fate' }) },
|
|
goMessages() { uni.navigateTo({ url: '/package1/ieBrowser/messages' }) },
|
|
goUniverse() { uni.navigateTo({ url: '/package1/ieBrowser/universe' }) }
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
page {
|
|
background: #f7f9ff;
|
|
}
|
|
|
|
.ie-page {
|
|
min-height: 100vh;
|
|
padding: 0 32rpx 164rpx;
|
|
box-sizing: border-box;
|
|
color: #161b2e;
|
|
background:
|
|
radial-gradient(circle at 82% 8%, rgba(221, 231, 255, .96), rgba(221, 231, 255, 0) 330rpx),
|
|
radial-gradient(circle at 18% 28%, rgba(169, 255, 231, .48), rgba(169, 255, 231, 0) 300rpx),
|
|
radial-gradient(circle at 86% 62%, rgba(255, 184, 209, .32), rgba(255, 184, 209, 0) 360rpx),
|
|
linear-gradient(180deg, #fbfdff 0%, #eef4ff 52%, #fff4e8 100%);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.ambient {
|
|
position: absolute;
|
|
border-radius: 50%;
|
|
filter: blur(10rpx);
|
|
opacity: .74;
|
|
animation: floatGlow 8s ease-in-out infinite;
|
|
}
|
|
|
|
.ambient-a {
|
|
top: 190rpx;
|
|
right: -90rpx;
|
|
width: 250rpx;
|
|
height: 250rpx;
|
|
background: rgba(139, 124, 255, .16);
|
|
}
|
|
|
|
.ambient-b {
|
|
left: -130rpx;
|
|
top: 520rpx;
|
|
width: 330rpx;
|
|
height: 330rpx;
|
|
background: rgba(255, 214, 165, .34);
|
|
animation-delay: 1.6s;
|
|
}
|
|
|
|
.page-head {
|
|
position: relative;
|
|
z-index: 1;
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
padding-top: 76rpx;
|
|
animation: riseIn .58s ease both;
|
|
}
|
|
|
|
.eyebrow {
|
|
color: rgba(22, 27, 46, .42);
|
|
font-size: 22rpx;
|
|
letter-spacing: 6rpx;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.hero-title {
|
|
margin-top: 18rpx;
|
|
font-size: 56rpx;
|
|
line-height: 68rpx;
|
|
font-weight: 800;
|
|
letter-spacing: -1rpx;
|
|
}
|
|
|
|
.hero-desc {
|
|
width: 500rpx;
|
|
margin-top: 16rpx;
|
|
color: rgba(22, 27, 46, .56);
|
|
font-size: 26rpx;
|
|
line-height: 42rpx;
|
|
}
|
|
|
|
.archive-entry {
|
|
width: 92rpx;
|
|
height: 92rpx;
|
|
border: 1rpx solid rgba(255, 255, 255, .8);
|
|
border-radius: 50%;
|
|
text-align: center;
|
|
line-height: 92rpx;
|
|
color: rgba(22, 27, 46, .58);
|
|
font-size: 23rpx;
|
|
background: rgba(255, 255, 255, .62);
|
|
backdrop-filter: blur(24rpx);
|
|
box-shadow: 0 18rpx 50rpx rgba(96, 112, 160, .12);
|
|
}
|
|
|
|
.night-card,
|
|
.chance-card,
|
|
.state-flow {
|
|
position: relative;
|
|
z-index: 1;
|
|
border: 1rpx solid rgba(255, 255, 255, .76);
|
|
background: rgba(255, 255, 255, .62);
|
|
box-shadow: 0 28rpx 80rpx rgba(96, 112, 160, .13);
|
|
backdrop-filter: blur(28rpx);
|
|
animation: riseIn .58s ease both;
|
|
}
|
|
|
|
.night-card {
|
|
margin-top: 54rpx;
|
|
padding: 38rpx;
|
|
border-radius: 46rpx;
|
|
animation-delay: .08s;
|
|
}
|
|
|
|
.night-label,
|
|
.match-label {
|
|
color: #6c69d8;
|
|
font-size: 22rpx;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.night-copy {
|
|
margin-top: 18rpx;
|
|
color: #161b2e;
|
|
font-size: 38rpx;
|
|
line-height: 58rpx;
|
|
font-weight: 750;
|
|
}
|
|
|
|
.mood-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.mood-chip {
|
|
height: 62rpx;
|
|
line-height: 62rpx;
|
|
padding: 0 26rpx;
|
|
margin: 0 16rpx 16rpx 0;
|
|
border-radius: 999rpx;
|
|
color: rgba(22, 27, 46, .52);
|
|
background: rgba(255, 255, 255, .58);
|
|
font-size: 24rpx;
|
|
transition: all .24s ease;
|
|
}
|
|
|
|
.mood-chip.active {
|
|
color: #11162a;
|
|
background: #a9ffe7;
|
|
box-shadow: 0 12rpx 28rpx rgba(169, 255, 231, .28);
|
|
}
|
|
|
|
.mode-section {
|
|
position: relative;
|
|
z-index: 1;
|
|
margin-top: 42rpx;
|
|
animation: riseIn .58s ease .14s both;
|
|
}
|
|
|
|
.section-line {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.section-title {
|
|
margin-bottom: 20rpx;
|
|
color: #161b2e;
|
|
font-size: 30rpx;
|
|
font-weight: 750;
|
|
}
|
|
|
|
.section-more {
|
|
margin-bottom: 20rpx;
|
|
color: rgba(22, 27, 46, .38);
|
|
font-size: 22rpx;
|
|
}
|
|
|
|
.mode-grid {
|
|
display: flex;
|
|
gap: 20rpx;
|
|
}
|
|
|
|
.mode-card {
|
|
flex: 1;
|
|
min-height: 218rpx;
|
|
padding: 30rpx;
|
|
border: 1rpx solid rgba(255, 255, 255, .76);
|
|
border-radius: 38rpx;
|
|
background: rgba(255, 255, 255, .5);
|
|
box-sizing: border-box;
|
|
box-shadow: 0 18rpx 54rpx rgba(96, 112, 160, .1);
|
|
transition: transform .18s ease, border-color .24s ease, background .24s ease;
|
|
}
|
|
|
|
.mode-card:active,
|
|
.match-button:active,
|
|
.state-bubble:active {
|
|
transform: scale(.97);
|
|
}
|
|
|
|
.mode-card.active {
|
|
border-color: rgba(169, 255, 231, .95);
|
|
background: rgba(255, 255, 255, .72);
|
|
}
|
|
|
|
.mode-mark {
|
|
width: 76rpx;
|
|
height: 76rpx;
|
|
border-radius: 28rpx;
|
|
text-align: center;
|
|
line-height: 76rpx;
|
|
font-size: 42rpx;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.mode-i .mode-mark {
|
|
color: #f7f4ff;
|
|
background: #8b7cff;
|
|
}
|
|
|
|
.mode-e .mode-mark {
|
|
color: #11162a;
|
|
background: #a9ffe7;
|
|
}
|
|
|
|
.mode-title {
|
|
margin-top: 24rpx;
|
|
font-size: 30rpx;
|
|
font-weight: 750;
|
|
}
|
|
|
|
.mode-desc {
|
|
margin-top: 12rpx;
|
|
color: rgba(22, 27, 46, .52);
|
|
font-size: 23rpx;
|
|
line-height: 36rpx;
|
|
}
|
|
|
|
.chance-card {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-top: 34rpx;
|
|
padding: 32rpx;
|
|
border-radius: 38rpx;
|
|
animation-delay: .2s;
|
|
}
|
|
|
|
.chance-title {
|
|
font-size: 30rpx;
|
|
font-weight: 750;
|
|
}
|
|
|
|
.chance-sub {
|
|
margin-top: 10rpx;
|
|
color: rgba(22, 27, 46, .5);
|
|
font-size: 23rpx;
|
|
}
|
|
|
|
.chance-count {
|
|
width: 110rpx;
|
|
height: 110rpx;
|
|
border-radius: 50%;
|
|
text-align: center;
|
|
line-height: 110rpx;
|
|
color: #11162a;
|
|
background: linear-gradient(145deg, #ffffff, #a9ffe7);
|
|
font-size: 34rpx;
|
|
font-weight: 800;
|
|
box-shadow: 0 18rpx 42rpx rgba(169, 255, 231, .34);
|
|
}
|
|
|
|
.match-button {
|
|
position: relative;
|
|
z-index: 1;
|
|
height: 108rpx;
|
|
margin-top: 34rpx;
|
|
border-radius: 999rpx;
|
|
text-align: center;
|
|
line-height: 108rpx;
|
|
color: #11162a;
|
|
background: linear-gradient(135deg, #ffffff, #a9ffe7 58%, #ffd6a5);
|
|
font-size: 30rpx;
|
|
font-weight: 800;
|
|
box-shadow: 0 24rpx 58rpx rgba(169, 255, 231, .3);
|
|
overflow: hidden;
|
|
animation: breathButton 2.8s ease-in-out infinite;
|
|
}
|
|
|
|
.match-button.disabled {
|
|
color: rgba(22, 27, 46, .36);
|
|
background: rgba(255, 255, 255, .48);
|
|
box-shadow: none;
|
|
}
|
|
|
|
.pulse {
|
|
position: absolute;
|
|
left: 34rpx;
|
|
top: 34rpx;
|
|
width: 40rpx;
|
|
height: 40rpx;
|
|
border-radius: 50%;
|
|
background: rgba(139, 124, 255, .16);
|
|
}
|
|
|
|
.state-flow {
|
|
margin-top: 44rpx;
|
|
padding: 30rpx;
|
|
border-radius: 40rpx;
|
|
animation-delay: .26s;
|
|
}
|
|
|
|
.flow-cloud {
|
|
min-height: 280rpx;
|
|
position: relative;
|
|
}
|
|
|
|
.state-bubble {
|
|
width: 560rpx;
|
|
margin-bottom: 18rpx;
|
|
padding: 24rpx 26rpx;
|
|
border-radius: 999rpx;
|
|
background: rgba(255, 255, 255, .56);
|
|
box-shadow: 0 14rpx 38rpx rgba(96, 112, 160, .1);
|
|
display: flex;
|
|
align-items: center;
|
|
animation: floatBubble 7s ease-in-out infinite;
|
|
}
|
|
|
|
.state-bubble:nth-child(2) {
|
|
width: 500rpx;
|
|
margin-left: 80rpx;
|
|
animation-delay: .9s;
|
|
}
|
|
|
|
.state-bubble:nth-child(3) {
|
|
width: 540rpx;
|
|
margin-left: 26rpx;
|
|
animation-delay: 1.8s;
|
|
}
|
|
|
|
.bubble-type {
|
|
width: 54rpx;
|
|
height: 54rpx;
|
|
margin-right: 18rpx;
|
|
border-radius: 50%;
|
|
text-align: center;
|
|
line-height: 54rpx;
|
|
font-size: 24rpx;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.bubble-type.i {
|
|
color: #f7f4ff;
|
|
background: #8b7cff;
|
|
}
|
|
|
|
.bubble-type.e {
|
|
color: #11162a;
|
|
background: #a9ffe7;
|
|
}
|
|
|
|
.bubble-text {
|
|
flex: 1;
|
|
color: rgba(22, 27, 46, .72);
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.bubble-time {
|
|
margin-left: 14rpx;
|
|
color: rgba(22, 27, 46, .34);
|
|
font-size: 20rpx;
|
|
}
|
|
|
|
.bottom-actions {
|
|
position: fixed;
|
|
left: 30rpx;
|
|
right: 30rpx;
|
|
bottom: 30rpx;
|
|
z-index: 10;
|
|
display: flex;
|
|
padding: 10rpx;
|
|
border: 1rpx solid rgba(255, 255, 255, .76);
|
|
border-radius: 999rpx;
|
|
background: rgba(255, 255, 255, .62);
|
|
backdrop-filter: blur(24rpx);
|
|
box-shadow: 0 20rpx 60rpx rgba(96, 112, 160, .16);
|
|
}
|
|
|
|
.bottom-item {
|
|
flex: 1;
|
|
height: 72rpx;
|
|
line-height: 72rpx;
|
|
text-align: center;
|
|
border-radius: 999rpx;
|
|
color: rgba(22, 27, 46, .45);
|
|
font-size: 23rpx;
|
|
}
|
|
|
|
.bottom-item.active {
|
|
color: #11162a;
|
|
background: #dffef4;
|
|
}
|
|
|
|
.match-mask {
|
|
position: fixed;
|
|
left: 0;
|
|
top: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
z-index: 20;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
padding: 30rpx;
|
|
background: rgba(22, 27, 46, .18);
|
|
backdrop-filter: blur(18rpx);
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.match-panel {
|
|
width: 100%;
|
|
padding: 34rpx;
|
|
border: 1rpx solid rgba(255, 255, 255, .76);
|
|
border-radius: 46rpx;
|
|
background: rgba(255, 255, 255, .76);
|
|
box-sizing: border-box;
|
|
box-shadow: 0 30rpx 90rpx rgba(96, 112, 160, .18);
|
|
}
|
|
|
|
.match-top {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.close {
|
|
color: rgba(22, 27, 46, .45);
|
|
font-size: 42rpx;
|
|
line-height: 34rpx;
|
|
}
|
|
|
|
.companion-orb {
|
|
width: 152rpx;
|
|
height: 152rpx;
|
|
margin: 34rpx auto 0;
|
|
border-radius: 50%;
|
|
text-align: center;
|
|
line-height: 152rpx;
|
|
font-size: 48rpx;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.companion-orb.i {
|
|
color: #f7f4ff;
|
|
background: linear-gradient(145deg, #8b7cff, #dde7ff);
|
|
}
|
|
|
|
.companion-orb.e {
|
|
color: #11162a;
|
|
background: linear-gradient(145deg, #a9ffe7, #ffd6a5);
|
|
}
|
|
|
|
.match-name {
|
|
margin-top: 24rpx;
|
|
text-align: center;
|
|
font-size: 36rpx;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.match-state {
|
|
margin-top: 10rpx;
|
|
text-align: center;
|
|
color: rgba(22, 27, 46, .48);
|
|
font-size: 23rpx;
|
|
}
|
|
|
|
.match-quote {
|
|
margin-top: 30rpx;
|
|
padding: 26rpx;
|
|
border-radius: 28rpx;
|
|
color: rgba(22, 27, 46, .72);
|
|
background: rgba(255, 255, 255, .58);
|
|
font-size: 26rpx;
|
|
line-height: 42rpx;
|
|
}
|
|
|
|
.match-actions {
|
|
display: flex;
|
|
gap: 18rpx;
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.ghost-btn,
|
|
.solid-btn {
|
|
flex: 1;
|
|
height: 86rpx;
|
|
border-radius: 999rpx;
|
|
text-align: center;
|
|
line-height: 86rpx;
|
|
font-size: 25rpx;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.ghost-btn {
|
|
color: rgba(22, 27, 46, .55);
|
|
background: rgba(255, 255, 255, .54);
|
|
}
|
|
|
|
.solid-btn {
|
|
color: #11162a;
|
|
background: #a9ffe7;
|
|
}
|
|
|
|
@keyframes riseIn {
|
|
from { opacity: 0; transform: translateY(20rpx); }
|
|
to { opacity: 1; transform: translateY(0); }
|
|
}
|
|
|
|
@keyframes floatGlow {
|
|
0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
|
|
50% { transform: translate3d(20rpx, -26rpx, 0) scale(1.08); }
|
|
}
|
|
|
|
@keyframes floatBubble {
|
|
0%, 100% { transform: translateY(0); }
|
|
50% { transform: translateY(-12rpx); }
|
|
}
|
|
|
|
@keyframes breathButton {
|
|
0%, 100% { transform: scale(1); }
|
|
50% { transform: scale(1.018); }
|
|
}
|
|
|
|
.ie-page {
|
|
padding-bottom: 170rpx;
|
|
color: #161b2e;
|
|
background:
|
|
radial-gradient(circle at 12% 10%, rgba(221,231,255,.92), transparent 320rpx),
|
|
radial-gradient(circle at 88% 18%, rgba(169,255,231,.54), transparent 360rpx),
|
|
radial-gradient(circle at 20% 72%, rgba(255,214,165,.5), transparent 380rpx),
|
|
radial-gradient(circle at 86% 78%, rgba(255,184,209,.32), transparent 420rpx),
|
|
linear-gradient(180deg, #fbfdff 0%, #eef4ff 58%, #fff7ec 100%);
|
|
}
|
|
|
|
.ie-page::before {
|
|
content: '';
|
|
position: absolute;
|
|
inset: 0;
|
|
pointer-events: none;
|
|
opacity: .12;
|
|
background-image:
|
|
radial-gradient(circle, rgba(22,27,46,.34) 0 1rpx, transparent 1rpx),
|
|
radial-gradient(circle, rgba(139,124,255,.22) 0 1rpx, transparent 1rpx);
|
|
background-size: 42rpx 42rpx, 68rpx 68rpx;
|
|
animation: noiseFloat 9s steps(6) infinite;
|
|
}
|
|
|
|
.ie-page::after {
|
|
content: '';
|
|
position: absolute;
|
|
left: -20%;
|
|
top: -15%;
|
|
width: 140%;
|
|
height: 120%;
|
|
pointer-events: none;
|
|
background: linear-gradient(120deg, transparent 15%, rgba(255,255,255,.42), transparent 45%, rgba(169,255,231,.24), transparent 70%);
|
|
filter: blur(18rpx);
|
|
animation: auroraMove 12s ease-in-out infinite alternate;
|
|
}
|
|
|
|
.status-head {
|
|
position: relative;
|
|
z-index: 2;
|
|
padding-top: 74rpx;
|
|
}
|
|
|
|
.time-line {
|
|
font-size: 46rpx;
|
|
line-height: 58rpx;
|
|
font-weight: 300;
|
|
letter-spacing: 2rpx;
|
|
color: #161b2e;
|
|
}
|
|
|
|
.live-line {
|
|
width: 560rpx;
|
|
margin-top: 18rpx;
|
|
font-size: 34rpx;
|
|
line-height: 48rpx;
|
|
font-weight: 700;
|
|
color: #161b2e;
|
|
}
|
|
|
|
.sub-line {
|
|
margin-top: 8rpx;
|
|
color: rgba(22,27,46,.48);
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.status-head .archive-entry {
|
|
position: absolute;
|
|
right: 0;
|
|
top: 72rpx;
|
|
width: 134rpx;
|
|
height: 58rpx;
|
|
line-height: 58rpx;
|
|
border-radius: 999rpx;
|
|
color: rgba(22,27,46,.58);
|
|
background: rgba(255,255,255,.58);
|
|
border-color: rgba(255,255,255,.78);
|
|
box-shadow: 0 24rpx 70rpx rgba(96,112,160,.13);
|
|
}
|
|
|
|
.drift-field {
|
|
position: relative;
|
|
z-index: 2;
|
|
height: 660rpx;
|
|
margin-top: 28rpx;
|
|
}
|
|
|
|
.wave-line {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
border: 1rpx solid rgba(139,124,255,.16);
|
|
border-radius: 50%;
|
|
transform: translate(-50%, -50%) rotate(-12deg);
|
|
}
|
|
|
|
.wave-a {
|
|
width: 620rpx;
|
|
height: 310rpx;
|
|
animation: orbitBreath 7.5s ease-in-out infinite;
|
|
}
|
|
|
|
.wave-b {
|
|
width: 460rpx;
|
|
height: 460rpx;
|
|
border-color: rgba(169,255,231,.34);
|
|
animation: orbitSpin 18s linear infinite;
|
|
}
|
|
|
|
.signal-planet {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
width: 246rpx;
|
|
height: 246rpx;
|
|
transform: translate(-50%, -50%);
|
|
border-radius: 50%;
|
|
background: rgba(255,255,255,.52);
|
|
box-shadow:
|
|
0 0 0 1rpx rgba(255,255,255,.78),
|
|
0 28rpx 90rpx rgba(169,255,231,.24),
|
|
inset 0 0 70rpx rgba(255,255,255,.38);
|
|
backdrop-filter: blur(26rpx);
|
|
overflow: hidden;
|
|
animation: planetBreath 3.2s ease-in-out infinite;
|
|
}
|
|
|
|
.liquid {
|
|
position: absolute;
|
|
border-radius: 45%;
|
|
filter: blur(2rpx);
|
|
}
|
|
|
|
.liquid-a {
|
|
left: -30rpx;
|
|
top: 22rpx;
|
|
width: 220rpx;
|
|
height: 190rpx;
|
|
background: rgba(169,255,231,.58);
|
|
animation: liquidMove 7s ease-in-out infinite;
|
|
}
|
|
|
|
.liquid-b {
|
|
right: -44rpx;
|
|
bottom: 10rpx;
|
|
width: 190rpx;
|
|
height: 210rpx;
|
|
background: rgba(139,124,255,.28);
|
|
animation: liquidMove 8s ease-in-out infinite reverse;
|
|
}
|
|
|
|
.planet-core {
|
|
position: relative;
|
|
z-index: 2;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
text-align: center;
|
|
}
|
|
|
|
.planet-text {
|
|
width: 150rpx;
|
|
font-size: 28rpx;
|
|
line-height: 38rpx;
|
|
font-weight: 700;
|
|
color: #161b2e;
|
|
}
|
|
|
|
.planet-sub {
|
|
margin-top: 10rpx;
|
|
color: rgba(22,27,46,.48);
|
|
font-size: 21rpx;
|
|
}
|
|
|
|
.drift-fragment {
|
|
position: absolute;
|
|
z-index: 3;
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 16rpx 22rpx;
|
|
border: 1rpx solid rgba(255,255,255,.78);
|
|
border-radius: 999rpx;
|
|
background: rgba(255,255,255,.64);
|
|
backdrop-filter: blur(22rpx);
|
|
box-shadow: 0 18rpx 60rpx rgba(0,0,0,.12);
|
|
animation: fragmentFloat 8s ease-in-out infinite;
|
|
}
|
|
|
|
.fragment-dot {
|
|
width: 12rpx;
|
|
height: 12rpx;
|
|
margin-right: 12rpx;
|
|
border-radius: 50%;
|
|
background: #a9ffe7;
|
|
box-shadow: 0 0 20rpx rgba(169,255,231,.8);
|
|
}
|
|
|
|
.drift-fragment.e .fragment-dot {
|
|
background: #ffd6a5;
|
|
box-shadow: 0 0 20rpx rgba(255,214,165,.75);
|
|
}
|
|
|
|
.fragment-text {
|
|
color: rgba(22,27,46,.72);
|
|
font-size: 23rpx;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.fragment-0 { left: 18rpx; top: 72rpx; animation-delay: .2s; }
|
|
.fragment-1 { right: 18rpx; top: 154rpx; animation-delay: 1.1s; }
|
|
.fragment-2 { left: 62rpx; bottom: 110rpx; animation-delay: 2s; }
|
|
.fragment-3 { right: 26rpx; bottom: 196rpx; animation-delay: .6s; }
|
|
.fragment-4 { left: 210rpx; top: 18rpx; animation-delay: 1.7s; }
|
|
.fragment-5 { left: 154rpx; bottom: 28rpx; animation-delay: 2.4s; }
|
|
|
|
.mood-dock {
|
|
position: relative;
|
|
z-index: 3;
|
|
margin-top: -34rpx;
|
|
padding: 28rpx;
|
|
border: 1rpx solid rgba(255,255,255,.9);
|
|
border-radius: 42rpx;
|
|
background:
|
|
linear-gradient(135deg, rgba(255,255,255,.88), rgba(255,255,255,.54)),
|
|
radial-gradient(circle at 18% 0%, rgba(169,255,231,.26), transparent 180rpx),
|
|
radial-gradient(circle at 88% 100%, rgba(255,184,209,.16), transparent 220rpx);
|
|
backdrop-filter: blur(30rpx);
|
|
box-shadow:
|
|
0 28rpx 80rpx rgba(96,112,160,.16),
|
|
inset 0 1rpx 0 rgba(255,255,255,.96),
|
|
inset 0 -1rpx 0 rgba(139,124,255,.08);
|
|
overflow: hidden;
|
|
animation: panelBreath 5.6s ease-in-out infinite;
|
|
}
|
|
|
|
.mood-dock::before {
|
|
content: '';
|
|
position: absolute;
|
|
left: -20%;
|
|
top: -80%;
|
|
width: 140%;
|
|
height: 120%;
|
|
background: linear-gradient(110deg, transparent 18%, rgba(255,255,255,.48), transparent 58%);
|
|
animation: glassSweep 7s ease-in-out infinite;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.dock-title {
|
|
position: relative;
|
|
z-index: 1;
|
|
color: rgba(22,27,46,.72);
|
|
font-size: 27rpx;
|
|
line-height: 42rpx;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.dock-scroll {
|
|
width: 100%;
|
|
margin-top: 20rpx;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.dock-row {
|
|
position: relative;
|
|
z-index: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.mood-dock .mood-chip,
|
|
.mode-switch {
|
|
flex-shrink: 0;
|
|
height: 64rpx;
|
|
line-height: 64rpx;
|
|
padding: 0 26rpx;
|
|
margin-right: 14rpx;
|
|
border-radius: 999rpx;
|
|
color: rgba(22,27,46,.5);
|
|
background: rgba(255,255,255,.72);
|
|
border: 1rpx solid rgba(255,255,255,.82);
|
|
box-shadow:
|
|
0 10rpx 28rpx rgba(96,112,160,.08),
|
|
inset 0 1rpx 0 rgba(255,255,255,.9);
|
|
font-size: 23rpx;
|
|
transition: transform .16s ease, background .24s ease;
|
|
}
|
|
|
|
.mood-dock .mood-chip:active,
|
|
.mode-switch:active {
|
|
transform: scale(.96);
|
|
}
|
|
|
|
.mood-dock .mood-chip.active {
|
|
color: #161b2e;
|
|
background: linear-gradient(135deg, #eafff8, #a9ffe7);
|
|
box-shadow:
|
|
0 14rpx 34rpx rgba(169,255,231,.34),
|
|
inset 0 1rpx 0 rgba(255,255,255,.92);
|
|
}
|
|
|
|
.mode-switch {
|
|
color: #6c69d8;
|
|
border: 1rpx solid rgba(139,124,255,.2);
|
|
background: linear-gradient(135deg, rgba(255,255,255,.78), rgba(221,231,255,.58));
|
|
}
|
|
|
|
.page-head,
|
|
.night-card:not(.mood-console),
|
|
.mode-section,
|
|
.chance-card,
|
|
.match-button,
|
|
.state-flow,
|
|
.quick-signals {
|
|
display: none;
|
|
}
|
|
|
|
.bottom-actions {
|
|
padding: 12rpx;
|
|
border-radius: 999rpx;
|
|
background:
|
|
linear-gradient(135deg, rgba(255,255,255,.88), rgba(255,255,255,.58)),
|
|
radial-gradient(circle at 12% 0%, rgba(169,255,231,.2), transparent 160rpx);
|
|
border: 1rpx solid rgba(255,255,255,.9);
|
|
box-shadow:
|
|
0 24rpx 80rpx rgba(96,112,160,.18),
|
|
inset 0 1rpx 0 rgba(255,255,255,.96),
|
|
inset 0 -1rpx 0 rgba(139,124,255,.08);
|
|
}
|
|
|
|
.bottom-item {
|
|
height: 70rpx;
|
|
line-height: 70rpx;
|
|
color: rgba(22,27,46,.38);
|
|
transition: transform .16s ease, background .24s ease;
|
|
}
|
|
|
|
.bottom-item:active {
|
|
transform: scale(.96);
|
|
}
|
|
|
|
.bottom-item.active {
|
|
color: #161b2e;
|
|
background: linear-gradient(135deg, #eafff8, #a9ffe7);
|
|
box-shadow:
|
|
0 12rpx 30rpx rgba(169,255,231,.34),
|
|
inset 0 1rpx 0 rgba(255,255,255,.95);
|
|
}
|
|
|
|
@keyframes panelBreath {
|
|
0%, 100% { transform: translateY(0); box-shadow: 0 28rpx 80rpx rgba(96,112,160,.16), inset 0 1rpx 0 rgba(255,255,255,.96), inset 0 -1rpx 0 rgba(139,124,255,.08); }
|
|
50% { transform: translateY(-4rpx); box-shadow: 0 34rpx 92rpx rgba(96,112,160,.2), inset 0 1rpx 0 rgba(255,255,255,.98), inset 0 -1rpx 0 rgba(139,124,255,.12); }
|
|
}
|
|
|
|
@keyframes glassSweep {
|
|
0%, 70%, 100% { transform: translateX(-40%) rotate(8deg); opacity: 0; }
|
|
80% { opacity: .7; }
|
|
92% { transform: translateX(45%) rotate(8deg); opacity: 0; }
|
|
}
|
|
|
|
@keyframes noiseFloat {
|
|
0%, 100% { transform: translate3d(0,0,0); }
|
|
50% { transform: translate3d(-16rpx, 10rpx, 0); }
|
|
}
|
|
|
|
@keyframes auroraMove {
|
|
from { transform: translateX(-70rpx) rotate(-4deg); opacity: .5; }
|
|
to { transform: translateX(70rpx) rotate(4deg); opacity: .9; }
|
|
}
|
|
|
|
@keyframes orbitBreath {
|
|
0%, 100% { transform: translate(-50%, -50%) rotate(-12deg) scale(.96); opacity: .42; }
|
|
50% { transform: translate(-50%, -50%) rotate(-6deg) scale(1.05); opacity: .9; }
|
|
}
|
|
|
|
@keyframes orbitSpin {
|
|
from { transform: translate(-50%, -50%) rotate(0deg); }
|
|
to { transform: translate(-50%, -50%) rotate(360deg); }
|
|
}
|
|
|
|
@keyframes planetBreath {
|
|
0%, 100% { transform: translate(-50%, -50%) scale(.98); }
|
|
50% { transform: translate(-50%, -50%) scale(1.04); }
|
|
}
|
|
|
|
@keyframes liquidMove {
|
|
0%, 100% { transform: translate(0, 0) rotate(0deg) scale(1); }
|
|
50% { transform: translate(22rpx, 18rpx) rotate(18deg) scale(1.12); }
|
|
}
|
|
|
|
@keyframes fragmentFloat {
|
|
0%, 100% { transform: translate3d(0,0,0); }
|
|
50% { transform: translate3d(0,-18rpx,0); }
|
|
}
|
|
|
|
/* All-day airy theme override: keep motion, remove heavy night mood. */
|
|
.ie-page {
|
|
color: #161b2e;
|
|
background:
|
|
radial-gradient(circle at 12% 10%, rgba(221,231,255,.92), transparent 320rpx),
|
|
radial-gradient(circle at 88% 18%, rgba(169,255,231,.54), transparent 360rpx),
|
|
radial-gradient(circle at 20% 72%, rgba(255,214,165,.5), transparent 380rpx),
|
|
radial-gradient(circle at 86% 78%, rgba(255,184,209,.32), transparent 420rpx),
|
|
linear-gradient(180deg, #fbfdff 0%, #eef4ff 58%, #fff7ec 100%);
|
|
}
|
|
|
|
.ie-page::before {
|
|
opacity: .11;
|
|
background-image:
|
|
radial-gradient(circle, rgba(22,27,46,.34) 0 1rpx, transparent 1rpx),
|
|
radial-gradient(circle, rgba(139,124,255,.22) 0 1rpx, transparent 1rpx);
|
|
}
|
|
|
|
.ie-page::after {
|
|
background: linear-gradient(120deg, transparent 12%, rgba(255,255,255,.42), transparent 42%, rgba(169,255,231,.24), transparent 70%);
|
|
opacity: .75;
|
|
}
|
|
|
|
.time-line,
|
|
.live-line,
|
|
.planet-text {
|
|
color: #161b2e;
|
|
}
|
|
|
|
.sub-line,
|
|
.planet-sub {
|
|
color: rgba(22,27,46,.48);
|
|
}
|
|
|
|
.status-head .archive-entry,
|
|
.mood-dock,
|
|
.drift-fragment,
|
|
.bottom-actions {
|
|
background: rgba(255,255,255,.58);
|
|
border-color: rgba(255,255,255,.78);
|
|
box-shadow: 0 24rpx 70rpx rgba(96,112,160,.13);
|
|
}
|
|
|
|
.drift-fragment {
|
|
background: rgba(255,255,255,.64);
|
|
}
|
|
|
|
.fragment-text,
|
|
.dock-title {
|
|
color: rgba(22,27,46,.72);
|
|
}
|
|
|
|
.wave-line {
|
|
border-color: rgba(139,124,255,.16);
|
|
}
|
|
|
|
.wave-b {
|
|
border-color: rgba(169,255,231,.34);
|
|
}
|
|
|
|
.signal-planet {
|
|
background: rgba(255,255,255,.52);
|
|
box-shadow:
|
|
0 0 0 1rpx rgba(255,255,255,.78),
|
|
0 28rpx 90rpx rgba(169,255,231,.24),
|
|
inset 0 0 70rpx rgba(255,255,255,.38);
|
|
}
|
|
|
|
.liquid-a {
|
|
background: rgba(169,255,231,.58);
|
|
}
|
|
|
|
.liquid-b {
|
|
background: rgba(139,124,255,.28);
|
|
}
|
|
|
|
.mood-dock .mood-chip,
|
|
.mode-switch {
|
|
color: rgba(22,27,46,.54);
|
|
background: rgba(255,255,255,.68);
|
|
}
|
|
|
|
.mode-switch {
|
|
color: #6c69d8;
|
|
border-color: rgba(139,124,255,.18);
|
|
}
|
|
|
|
.bottom-actions {
|
|
background: rgba(255,255,255,.72);
|
|
}
|
|
|
|
.bottom-item {
|
|
color: rgba(22,27,46,.42);
|
|
}
|
|
|
|
.bottom-item.active {
|
|
color: #161b2e;
|
|
background: rgba(169,255,231,.9);
|
|
}
|
|
|
|
/* Final polish for the two floating controls. */
|
|
.mood-dock {
|
|
background:
|
|
linear-gradient(135deg, rgba(255,255,255,.88), rgba(255,255,255,.54)),
|
|
radial-gradient(circle at 18% 0%, rgba(169,255,231,.26), transparent 180rpx),
|
|
radial-gradient(circle at 88% 100%, rgba(255,184,209,.16), transparent 220rpx);
|
|
border-color: rgba(255,255,255,.9);
|
|
border-radius: 42rpx;
|
|
box-shadow:
|
|
0 28rpx 80rpx rgba(96,112,160,.16),
|
|
inset 0 1rpx 0 rgba(255,255,255,.96),
|
|
inset 0 -1rpx 0 rgba(139,124,255,.08);
|
|
}
|
|
|
|
.mood-dock .mood-chip,
|
|
.mode-switch {
|
|
background: rgba(255,255,255,.72);
|
|
border: 1rpx solid rgba(255,255,255,.82);
|
|
box-shadow: 0 10rpx 28rpx rgba(96,112,160,.08), inset 0 1rpx 0 rgba(255,255,255,.9);
|
|
}
|
|
|
|
.mood-dock .mood-chip.active {
|
|
background: linear-gradient(135deg, #eafff8, #a9ffe7);
|
|
box-shadow: 0 14rpx 34rpx rgba(169,255,231,.34), inset 0 1rpx 0 rgba(255,255,255,.92);
|
|
}
|
|
|
|
.bottom-actions {
|
|
background:
|
|
linear-gradient(135deg, rgba(255,255,255,.88), rgba(255,255,255,.58)),
|
|
radial-gradient(circle at 12% 0%, rgba(169,255,231,.2), transparent 160rpx);
|
|
border-color: rgba(255,255,255,.9);
|
|
box-shadow:
|
|
0 24rpx 80rpx rgba(96,112,160,.18),
|
|
inset 0 1rpx 0 rgba(255,255,255,.96),
|
|
inset 0 -1rpx 0 rgba(139,124,255,.08);
|
|
}
|
|
|
|
.bottom-item.active {
|
|
background: linear-gradient(135deg, #eafff8, #a9ffe7);
|
|
box-shadow: 0 12rpx 30rpx rgba(169,255,231,.34), inset 0 1rpx 0 rgba(255,255,255,.95);
|
|
}
|
|
|
|
/* Z-generation Morandi neumorphism polish. */
|
|
.live-line {
|
|
font-size: 48rpx;
|
|
line-height: 64rpx;
|
|
font-weight: 300;
|
|
letter-spacing: -1rpx;
|
|
}
|
|
|
|
.count-num {
|
|
display: inline-block;
|
|
min-width: 74rpx;
|
|
font-weight: 700;
|
|
color: #6c5ce7;
|
|
animation: countPop .42s ease;
|
|
}
|
|
|
|
.sub-line {
|
|
display: inline-block;
|
|
margin-top: 16rpx;
|
|
padding: 10rpx 20rpx;
|
|
border-radius: 999rpx;
|
|
background: rgba(255,255,255,.52);
|
|
backdrop-filter: blur(16rpx);
|
|
box-shadow: inset 0 1rpx 0 rgba(255,255,255,.9), 0 10rpx 28rpx rgba(96,112,160,.08);
|
|
text-align: left;
|
|
}
|
|
|
|
.planet-entry {
|
|
width: 88rpx !important;
|
|
height: 88rpx !important;
|
|
border-radius: 50% !important;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: linear-gradient(135deg, #6c5ce7, #a29bfe) !important;
|
|
box-shadow: 0 18rpx 46rpx rgba(108,92,231,.28), 0 0 0 10rpx rgba(162,155,254,.12) !important;
|
|
transition: transform .18s ease;
|
|
}
|
|
|
|
.planet-entry:active {
|
|
transform: scale(.94);
|
|
box-shadow: 0 24rpx 62rpx rgba(108,92,231,.36), 0 0 0 16rpx rgba(162,155,254,.12) !important;
|
|
}
|
|
|
|
.planet-ring {
|
|
position: absolute;
|
|
width: 62rpx;
|
|
height: 28rpx;
|
|
border: 3rpx solid rgba(255,255,255,.5);
|
|
border-radius: 50%;
|
|
transform: rotate(-18deg);
|
|
}
|
|
|
|
.planet-icon {
|
|
position: relative;
|
|
z-index: 1;
|
|
color: #fff;
|
|
font-size: 42rpx;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.drift-fragment {
|
|
border-radius: 40rpx;
|
|
box-shadow:
|
|
10rpx 14rpx 34rpx rgba(150,164,190,.16),
|
|
-8rpx -8rpx 24rpx rgba(255,255,255,.82),
|
|
inset 1rpx 1rpx 1rpx rgba(255,255,255,.9),
|
|
inset -2rpx -2rpx 6rpx rgba(139,124,255,.06);
|
|
transition: transform .18s ease, box-shadow .18s ease;
|
|
}
|
|
|
|
.drift-fragment:active {
|
|
transform: translateY(-8rpx) scale(1.02);
|
|
box-shadow:
|
|
14rpx 20rpx 46rpx rgba(150,164,190,.2),
|
|
-8rpx -8rpx 24rpx rgba(255,255,255,.9),
|
|
inset 1rpx 1rpx 1rpx rgba(255,255,255,.95);
|
|
}
|
|
|
|
.drift-fragment.quiet,
|
|
.drift-fragment.listen,
|
|
.drift-fragment.drift {
|
|
background: linear-gradient(135deg, rgba(229,238,248,.86), rgba(255,255,255,.62));
|
|
}
|
|
|
|
.drift-fragment.talk {
|
|
background: linear-gradient(135deg, rgba(255,214,165,.74), rgba(255,255,255,.62));
|
|
}
|
|
|
|
.drift-fragment.e {
|
|
background: linear-gradient(135deg, rgba(255,184,209,.62), rgba(255,255,255,.62));
|
|
}
|
|
|
|
.bubble-actions {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 72rpx;
|
|
transform: translateX(-50%);
|
|
display: flex;
|
|
padding: 8rpx;
|
|
border-radius: 999rpx;
|
|
background: rgba(255,255,255,.72);
|
|
backdrop-filter: blur(18rpx);
|
|
box-shadow: 0 16rpx 40rpx rgba(96,112,160,.14);
|
|
}
|
|
|
|
.bubble-actions view {
|
|
padding: 8rpx 18rpx;
|
|
border-radius: 999rpx;
|
|
color: rgba(22,27,46,.62);
|
|
font-size: 20rpx;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.signal-planet {
|
|
border-radius: 47% 53% 44% 56% / 56% 42% 58% 44%;
|
|
animation: planetBreath 3.2s ease-in-out infinite, blobMorph 9s ease-in-out infinite;
|
|
}
|
|
|
|
.signal-planet {
|
|
width: 370rpx;
|
|
height: 370rpx;
|
|
background: transparent;
|
|
box-shadow: none;
|
|
overflow: visible;
|
|
perspective: 980rpx;
|
|
animation: none;
|
|
}
|
|
|
|
.galaxy-breath {
|
|
position: absolute;
|
|
inset: 0;
|
|
animation: galaxyBreath 4.2s ease-in-out infinite;
|
|
}
|
|
|
|
.galaxy-body {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
width: 226rpx;
|
|
height: 226rpx;
|
|
transform: translate(-50%, -50%) translateZ(34rpx);
|
|
border-radius: 47% 53% 44% 56% / 56% 42% 58% 44%;
|
|
background:
|
|
radial-gradient(circle at 28% 24%, rgba(255,255,255,.92), rgba(255,255,255,0) 36%),
|
|
radial-gradient(circle at 70% 74%, rgba(162,155,254,.64), rgba(162,155,254,0) 44%),
|
|
linear-gradient(135deg, rgba(169,255,231,.74), rgba(221,231,255,.72) 54%, rgba(255,184,209,.48));
|
|
box-shadow:
|
|
0 34rpx 90rpx rgba(108,92,231,.2),
|
|
inset 10rpx 12rpx 34rpx rgba(255,255,255,.62),
|
|
inset -20rpx -22rpx 42rpx rgba(108,92,231,.17);
|
|
overflow: hidden;
|
|
z-index: 12;
|
|
animation: blobMorph 9s ease-in-out infinite;
|
|
}
|
|
|
|
.galaxy-body::before {
|
|
content: '';
|
|
position: absolute;
|
|
left: 22rpx;
|
|
top: 18rpx;
|
|
width: 88rpx;
|
|
height: 70rpx;
|
|
border-radius: 50%;
|
|
background: radial-gradient(circle, rgba(255,255,255,.82), rgba(255,255,255,0) 68%);
|
|
filter: blur(2rpx);
|
|
z-index: 1;
|
|
}
|
|
|
|
.galaxy-ring {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
border-radius: 50%;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.orbit-planet {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
border-radius: 50%;
|
|
pointer-events: none;
|
|
box-shadow:
|
|
0 0 18rpx rgba(255,255,255,.72),
|
|
0 0 34rpx currentColor,
|
|
inset 3rpx 4rpx 8rpx rgba(255,255,255,.68),
|
|
inset -4rpx -5rpx 10rpx rgba(108,92,231,.18);
|
|
transition: transform .08s linear, opacity .08s linear, filter .08s linear;
|
|
}
|
|
|
|
.orbit-planet::after {
|
|
content: '';
|
|
position: absolute;
|
|
left: 18%;
|
|
top: 16%;
|
|
width: 34%;
|
|
height: 28%;
|
|
border-radius: 50%;
|
|
background: rgba(255,255,255,.86);
|
|
filter: blur(1rpx);
|
|
}
|
|
|
|
.orbit-planet-1,
|
|
.orbit-planet-4 {
|
|
box-shadow:
|
|
0 0 22rpx rgba(162,155,254,.42),
|
|
0 0 46rpx currentColor,
|
|
inset 4rpx 5rpx 10rpx rgba(255,255,255,.66),
|
|
inset -5rpx -7rpx 12rpx rgba(108,92,231,.2);
|
|
}
|
|
|
|
.ring-main {
|
|
width: 430rpx;
|
|
height: 132rpx;
|
|
margin-left: -215rpx;
|
|
margin-top: -66rpx;
|
|
border: 12rpx solid rgba(111, 231, 224, .34);
|
|
box-shadow: 0 0 34rpx rgba(169,255,231,.3), inset 0 0 22rpx rgba(255,255,255,.44);
|
|
transform: rotateX(66deg) rotateZ(-14deg);
|
|
animation: ringDrift 9s linear infinite;
|
|
}
|
|
|
|
.ring-second {
|
|
width: 360rpx;
|
|
height: 108rpx;
|
|
margin-left: -180rpx;
|
|
margin-top: -54rpx;
|
|
border: 4rpx solid rgba(162,155,254,.36);
|
|
transform: rotateX(72deg) rotateZ(24deg) translateZ(24rpx);
|
|
animation: ringDrift 12s linear infinite reverse;
|
|
}
|
|
|
|
.ring-third {
|
|
width: 292rpx;
|
|
height: 292rpx;
|
|
margin-left: -146rpx;
|
|
margin-top: -146rpx;
|
|
border: 3rpx solid rgba(255,214,165,.34);
|
|
transform: rotateX(18deg) rotateY(64deg);
|
|
animation: ringDrift 15s linear infinite;
|
|
}
|
|
|
|
.galaxy-body .liquid-a {
|
|
left: -38rpx;
|
|
top: 14rpx;
|
|
width: 202rpx;
|
|
height: 182rpx;
|
|
}
|
|
|
|
.galaxy-body .liquid-b {
|
|
right: -50rpx;
|
|
bottom: -16rpx;
|
|
width: 194rpx;
|
|
height: 190rpx;
|
|
}
|
|
|
|
.galaxy-body .planet-text {
|
|
width: 146rpx;
|
|
font-size: 30rpx;
|
|
line-height: 40rpx;
|
|
}
|
|
|
|
.galaxy-body .planet-sub {
|
|
font-size: 21rpx;
|
|
}
|
|
|
|
.soul-particle {
|
|
position: absolute;
|
|
width: 8rpx;
|
|
height: 8rpx;
|
|
border-radius: 50%;
|
|
background: rgba(255,255,255,.86);
|
|
box-shadow: 0 0 18rpx rgba(255,255,255,.8);
|
|
z-index: 2;
|
|
animation: soulFloat 5s ease-in-out infinite;
|
|
}
|
|
|
|
.soul-a { left: 64rpx; top: 54rpx; }
|
|
.soul-b { right: 58rpx; top: 96rpx; animation-delay: 1.2s; }
|
|
.soul-c { left: 118rpx; bottom: 58rpx; animation-delay: 2s; }
|
|
|
|
.planet-sub {
|
|
animation: subBreath 3s ease-in-out infinite;
|
|
}
|
|
|
|
.dock-title {
|
|
text-align: center;
|
|
font-size: 30rpx;
|
|
line-height: 44rpx;
|
|
font-style: normal;
|
|
font-weight: 650;
|
|
white-space: nowrap;
|
|
letter-spacing: -.2rpx;
|
|
background: linear-gradient(180deg, rgba(255,255,255,0), rgba(169,255,231,.1));
|
|
border-radius: 28rpx;
|
|
padding: 8rpx 8rpx 14rpx;
|
|
min-height: 66rpx;
|
|
}
|
|
|
|
.typing-cursor {
|
|
display: inline-block;
|
|
width: 3rpx;
|
|
height: 30rpx;
|
|
margin-left: 6rpx;
|
|
border-radius: 999rpx;
|
|
background: rgba(108,92,231,.58);
|
|
vertical-align: -4rpx;
|
|
animation: typingCursor .86s steps(1) infinite;
|
|
}
|
|
|
|
.mood-icon {
|
|
display: inline-block;
|
|
margin-right: 8rpx;
|
|
transition: transform .24s ease;
|
|
}
|
|
|
|
.mood-dock .mood-chip:active .mood-icon {
|
|
transform: translateY(-3rpx) scale(1.12);
|
|
}
|
|
|
|
.tab-glow {
|
|
position: absolute;
|
|
left: 12rpx;
|
|
bottom: 8rpx;
|
|
width: calc(25% - 6rpx);
|
|
height: 6rpx;
|
|
border-radius: 999rpx;
|
|
background: linear-gradient(90deg, rgba(169,255,231,0), rgba(169,255,231,.95), rgba(169,255,231,0));
|
|
box-shadow: 0 0 18rpx rgba(169,255,231,.7);
|
|
}
|
|
|
|
.bottom-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 76rpx;
|
|
line-height: 1;
|
|
font-size: 22rpx;
|
|
}
|
|
|
|
.tab-icon {
|
|
margin-bottom: 6rpx;
|
|
font-size: 28rpx;
|
|
filter: grayscale(1);
|
|
opacity: .55;
|
|
}
|
|
|
|
.bottom-item.active .tab-icon {
|
|
filter: none;
|
|
opacity: 1;
|
|
color: #6c5ce7;
|
|
}
|
|
|
|
.profile-mask {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 30;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
padding: 34rpx;
|
|
background: rgba(22,27,46,.12);
|
|
backdrop-filter: blur(18rpx);
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.profile-mini {
|
|
width: 100%;
|
|
padding: 40rpx 34rpx;
|
|
border-radius: 44rpx;
|
|
background: rgba(255,255,255,.78);
|
|
border: 1rpx solid rgba(255,255,255,.9);
|
|
box-shadow: 0 30rpx 90rpx rgba(96,112,160,.18), inset 0 1rpx 0 rgba(255,255,255,.96);
|
|
text-align: center;
|
|
}
|
|
|
|
.mini-orb {
|
|
width: 104rpx;
|
|
height: 104rpx;
|
|
margin: 0 auto;
|
|
border-radius: 50%;
|
|
line-height: 104rpx;
|
|
color: #fff;
|
|
background: linear-gradient(135deg, #6c5ce7, #a29bfe);
|
|
font-size: 44rpx;
|
|
}
|
|
|
|
.mini-title {
|
|
margin-top: 22rpx;
|
|
font-size: 34rpx;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.mini-sub {
|
|
margin-top: 10rpx;
|
|
color: rgba(22,27,46,.5);
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.mini-action {
|
|
margin-top: 28rpx;
|
|
height: 82rpx;
|
|
line-height: 82rpx;
|
|
border-radius: 999rpx;
|
|
color: #161b2e;
|
|
background: linear-gradient(135deg, #eafff8, #a9ffe7);
|
|
font-size: 26rpx;
|
|
font-weight: 700;
|
|
}
|
|
|
|
@keyframes countPop {
|
|
0% { transform: translateY(8rpx) scale(.96); opacity: .55; }
|
|
70% { transform: translateY(-3rpx) scale(1.04); opacity: 1; }
|
|
100% { transform: translateY(0) scale(1); }
|
|
}
|
|
|
|
@keyframes blobMorph {
|
|
0%, 100% { border-radius: 47% 53% 44% 56% / 56% 42% 58% 44%; }
|
|
50% { border-radius: 58% 42% 55% 45% / 44% 58% 42% 56%; }
|
|
}
|
|
|
|
@keyframes soulFloat {
|
|
0%, 100% { transform: translate3d(0,0,0); opacity: .36; }
|
|
50% { transform: translate3d(12rpx,-18rpx,0); opacity: .95; }
|
|
}
|
|
|
|
@keyframes subBreath {
|
|
0%, 100% { opacity: .75; }
|
|
50% { opacity: 1; }
|
|
}
|
|
|
|
@keyframes typingCursor {
|
|
0%, 48% { opacity: 1; }
|
|
49%, 100% { opacity: 0; }
|
|
}
|
|
|
|
@keyframes galaxyBreath {
|
|
0%, 100% { transform: scale(.98); }
|
|
50% { transform: scale(1.035); }
|
|
}
|
|
|
|
@keyframes ringDrift {
|
|
from { filter: hue-rotate(0deg); }
|
|
to { filter: hue-rotate(18deg); }
|
|
}
|
|
</style>
|
|
|