2734 lines
No EOL
52 KiB
Text
2734 lines
No EOL
52 KiB
Text
/* 地图页面 - 现代化设计 + 系统适配 */
|
|
page {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
background: #f5f5f5;
|
|
}
|
|
|
|
/* 地图容器 */
|
|
.map-container {
|
|
position: relative;
|
|
width: 100%;
|
|
background: #f5f5f5;
|
|
}
|
|
|
|
/* 地图组件 */
|
|
.map {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
/* 定位占位图 - 现代化设计 */
|
|
.location-placeholder {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 100;
|
|
}
|
|
|
|
.placeholder-content {
|
|
text-align: center;
|
|
color: white;
|
|
padding: 40px;
|
|
}
|
|
|
|
.location-icon {
|
|
font-size: 64px;
|
|
margin-bottom: 20px;
|
|
animation: float 3s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes float {
|
|
0%, 100% { transform: translateY(0); }
|
|
50% { transform: translateY(-10px); }
|
|
}
|
|
|
|
.placeholder-title {
|
|
font-size: 20px;
|
|
font-weight: 600;
|
|
margin-bottom: 8px;
|
|
display: block;
|
|
}
|
|
|
|
.placeholder-subtitle {
|
|
font-size: 14px;
|
|
opacity: 0.8;
|
|
margin-bottom: 30px;
|
|
display: block;
|
|
}
|
|
|
|
.location-progress {
|
|
width: 200px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.progress-bar {
|
|
width: 100%;
|
|
height: 4px;
|
|
background: rgba(255, 255, 255, 0.3);
|
|
border-radius: 2px;
|
|
overflow: hidden;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.progress-fill {
|
|
width: 100%;
|
|
height: 100%;
|
|
background: rgba(255, 255, 255, 0.8);
|
|
border-radius: 2px;
|
|
animation: progress 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes progress {
|
|
0% { transform: translateX(-100%); }
|
|
100% { transform: translateX(100%); }
|
|
}
|
|
|
|
.progress-text {
|
|
font-size: 12px;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
/* 顶部状态栏 - 系统适配 */
|
|
.top-bar {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
padding: 16rpx 32rpx;
|
|
background: linear-gradient(180deg, rgba(0, 0, 0, 0.3) 0%, transparent 100%);
|
|
z-index: 100;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
gap: 20rpx;
|
|
}
|
|
|
|
.location-info {
|
|
background: rgba(255, 255, 255, 0.95);
|
|
padding: 16rpx 20rpx;
|
|
border-radius: 48rpx;
|
|
backdrop-filter: blur(20rpx);
|
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12rpx;
|
|
flex: 1;
|
|
min-width: 0;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.location-info:active {
|
|
background: rgba(255, 255, 255, 1);
|
|
transform: scale(0.98);
|
|
}
|
|
|
|
.location-icon-small {
|
|
font-size: 24rpx;
|
|
opacity: 0.8;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.location-content {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.location-text {
|
|
font-size: 26rpx;
|
|
color: #2c3e50;
|
|
font-weight: 600;
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.location-debug {
|
|
font-size: 20rpx;
|
|
color: #7f8c8d;
|
|
margin-top: 2rpx;
|
|
display: block;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.weather-info {
|
|
background: rgba(255, 255, 255, 0.95);
|
|
padding: 16rpx 20rpx;
|
|
border-radius: 48rpx;
|
|
backdrop-filter: blur(20rpx);
|
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8rpx;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.weather-icon {
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.weather-text {
|
|
font-size: 24rpx;
|
|
color: #2c3e50;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* 左上角区域信息 - 完全透明背景 */
|
|
.location-info-minimal {
|
|
position: absolute;
|
|
background: transparent;
|
|
padding: 8px 12px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
min-width: 80px;
|
|
z-index: 100;
|
|
pointer-events: auto;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.location-info-minimal:active {
|
|
transform: scale(0.98);
|
|
}
|
|
|
|
.district-text-minimal {
|
|
font-size: 15px;
|
|
font-weight: 700;
|
|
color: #333;
|
|
text-shadow:
|
|
0 1px 3px rgba(255, 255, 255, 0.8),
|
|
0 0 6px rgba(255, 255, 255, 0.6),
|
|
1px 1px 0 rgba(255, 255, 255, 0.8),
|
|
-1px -1px 0 rgba(255, 255, 255, 0.8),
|
|
1px -1px 0 rgba(255, 255, 255, 0.8),
|
|
-1px 1px 0 rgba(255, 255, 255, 0.8);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.city-text-minimal {
|
|
font-size: 11px;
|
|
color: #666;
|
|
text-shadow:
|
|
0 1px 2px rgba(255, 255, 255, 0.8),
|
|
0 0 4px rgba(255, 255, 255, 0.6),
|
|
1px 1px 0 rgba(255, 255, 255, 0.8),
|
|
-1px -1px 0 rgba(255, 255, 255, 0.8),
|
|
1px -1px 0 rgba(255, 255, 255, 0.8),
|
|
-1px 1px 0 rgba(255, 255, 255, 0.8);
|
|
margin-top: 1px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* 天气信息 - 用户头像下方,完全透明 */
|
|
.weather-info-minimal {
|
|
position: absolute;
|
|
background: transparent;
|
|
padding: 8px 12px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
z-index: 100;
|
|
pointer-events: auto;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.weather-info-minimal:active {
|
|
transform: scale(0.98);
|
|
}
|
|
|
|
.weather-icon-minimal {
|
|
font-size: 18px;
|
|
animation: weather-float-minimal 3s ease-in-out infinite;
|
|
filter: drop-shadow(0 1px 2px rgba(255, 255, 255, 0.8));
|
|
}
|
|
|
|
/* 云彩图标特殊处理 - 黑色 */
|
|
.weather-icon-minimal.cloud-icon {
|
|
filter:
|
|
drop-shadow(0 1px 2px rgba(255, 255, 255, 0.8))
|
|
grayscale(1)
|
|
brightness(0.3);
|
|
}
|
|
|
|
@keyframes weather-float-minimal {
|
|
0%, 100% { transform: translateY(0); }
|
|
50% { transform: translateY(-1px); }
|
|
}
|
|
|
|
.weather-temp-minimal {
|
|
font-size: 15px;
|
|
font-weight: 700;
|
|
color: #333;
|
|
text-shadow:
|
|
0 1px 3px rgba(255, 255, 255, 0.8),
|
|
0 0 6px rgba(255, 255, 255, 0.6),
|
|
1px 1px 0 rgba(255, 255, 255, 0.8),
|
|
-1px -1px 0 rgba(255, 255, 255, 0.8),
|
|
1px -1px 0 rgba(255, 255, 255, 0.8),
|
|
-1px 1px 0 rgba(255, 255, 255, 0.8);
|
|
}
|
|
|
|
/* 🎨 现代化用户头像 - 右上角 */
|
|
.user-avatar {
|
|
position: absolute;
|
|
z-index: 100;
|
|
animation: avatarSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
@keyframes avatarSlideIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(60rpx) scale(0.8);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0) scale(1);
|
|
}
|
|
}
|
|
|
|
.avatar-container {
|
|
width: 88rpx;
|
|
height: 88rpx;
|
|
border-radius: 50%;
|
|
background: linear-gradient(145deg, #007AFF 0%, #5AC8FA 50%, #AF52DE 100%);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
position: relative;
|
|
box-shadow:
|
|
0 8rpx 24rpx rgba(0, 122, 255, 0.3),
|
|
0 3rpx 8rpx rgba(0, 122, 255, 0.2),
|
|
inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
|
|
border: 3rpx solid rgba(255, 255, 255, 0.95);
|
|
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
backdrop-filter: blur(10rpx);
|
|
}
|
|
|
|
.avatar-container:active {
|
|
transform: scale(0.92);
|
|
box-shadow:
|
|
0 4rpx 16rpx rgba(0, 122, 255, 0.4),
|
|
0 2rpx 6rpx rgba(0, 122, 255, 0.3),
|
|
inset 0 1rpx 0 rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
/* 悬停效果 */
|
|
@media (hover: hover) {
|
|
.avatar-container:hover {
|
|
transform: scale(1.05);
|
|
box-shadow:
|
|
0 12rpx 32rpx rgba(0, 122, 255, 0.4),
|
|
0 4rpx 12rpx rgba(0, 122, 255, 0.3),
|
|
inset 0 1rpx 0 rgba(255, 255, 255, 0.4);
|
|
}
|
|
}
|
|
|
|
.avatar-text {
|
|
font-size: 32rpx;
|
|
font-weight: 700;
|
|
color: white;
|
|
text-transform: uppercase;
|
|
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
|
|
letter-spacing: 1rpx;
|
|
}
|
|
|
|
/* 🎨 现代化在线状态指示器 */
|
|
.online-dot {
|
|
position: absolute;
|
|
bottom: 2rpx;
|
|
right: 2rpx;
|
|
width: 24rpx;
|
|
height: 24rpx;
|
|
background: linear-gradient(145deg, #34C759 0%, #30D158 100%);
|
|
border: 3rpx solid rgba(255, 255, 255, 0.95);
|
|
border-radius: 50%;
|
|
box-shadow:
|
|
0 3rpx 8rpx rgba(52, 199, 89, 0.3),
|
|
0 1rpx 3rpx rgba(52, 199, 89, 0.2);
|
|
animation: onlinePulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes onlinePulse {
|
|
0%, 100% {
|
|
transform: scale(1);
|
|
box-shadow:
|
|
0 3rpx 8rpx rgba(52, 199, 89, 0.3),
|
|
0 1rpx 3rpx rgba(52, 199, 89, 0.2);
|
|
}
|
|
50% {
|
|
transform: scale(1.1);
|
|
box-shadow:
|
|
0 4rpx 12rpx rgba(52, 199, 89, 0.4),
|
|
0 2rpx 6rpx rgba(52, 199, 89, 0.3);
|
|
}
|
|
}
|
|
|
|
/* 右侧功能按钮组 */
|
|
.right-controls {
|
|
position: absolute;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
z-index: 50;
|
|
}
|
|
|
|
.control-btn {
|
|
width: 44px;
|
|
height: 44px;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
backdrop-filter: blur(20px);
|
|
border-radius: 22px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
|
|
border: 1px solid rgba(255, 255, 255, 0.8);
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.control-btn:active {
|
|
transform: scale(0.95);
|
|
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
|
|
}
|
|
|
|
.btn-icon {
|
|
font-size: 18px;
|
|
}
|
|
|
|
.refresh-icon {
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.refresh-btn:active .refresh-icon {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
/* 底部定位按钮 - 新增 */
|
|
.location-btn {
|
|
position: absolute;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
z-index: 60;
|
|
}
|
|
|
|
.location-btn-inner {
|
|
width: 56px;
|
|
height: 56px;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
backdrop-filter: blur(20px);
|
|
border-radius: 28px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.15);
|
|
border: 1px solid rgba(255, 255, 255, 0.8);
|
|
transition: all 0.3s ease;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.location-btn:active .location-btn-inner {
|
|
transform: scale(0.95);
|
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
.location-btn .location-icon {
|
|
font-size: 22px;
|
|
position: relative;
|
|
z-index: 2;
|
|
animation: none;
|
|
}
|
|
|
|
.location-ripple {
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
width: 0;
|
|
height: 0;
|
|
border-radius: 50%;
|
|
background: rgba(102, 126, 234, 0.3);
|
|
transform: translate(-50%, -50%);
|
|
animation: location-ripple 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes location-ripple {
|
|
0% {
|
|
width: 0;
|
|
height: 0;
|
|
opacity: 1;
|
|
}
|
|
100% {
|
|
width: 80px;
|
|
height: 80px;
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
/* 用户详情卡片 - 现代化设计 */
|
|
.user-card {
|
|
position: absolute;
|
|
left: 16px;
|
|
right: 16px;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
backdrop-filter: blur(20px);
|
|
border-radius: 20px;
|
|
padding: 20px;
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
|
|
border: 1px solid rgba(255, 255, 255, 0.8);
|
|
transform: translateY(100%);
|
|
opacity: 0;
|
|
transition: all 0.3s ease;
|
|
z-index: 70;
|
|
}
|
|
|
|
.user-card.show {
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
}
|
|
|
|
.card-backdrop {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
height: 3px;
|
|
background: linear-gradient(90deg, #667eea, #764ba2, #f093fb);
|
|
border-radius: 20px 20px 0 0;
|
|
}
|
|
|
|
.card-header {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.card-avatar {
|
|
width: 48px;
|
|
height: 48px;
|
|
background: linear-gradient(135deg, #667eea, #764ba2);
|
|
border-radius: 12px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-right: 12px;
|
|
box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);
|
|
}
|
|
|
|
.card-avatar-text {
|
|
color: white;
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.card-info {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.card-name {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
color: #333;
|
|
margin-bottom: 4px;
|
|
display: block;
|
|
}
|
|
|
|
.card-distance {
|
|
font-size: 13px;
|
|
color: #666;
|
|
margin-bottom: 4px;
|
|
display: block;
|
|
}
|
|
|
|
.card-status {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
|
|
.status-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
background: #2ed573;
|
|
animation: pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
50% { opacity: 0.7; transform: scale(1.2); }
|
|
}
|
|
|
|
.status-text {
|
|
font-size: 11px;
|
|
color: #2ed573;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.card-close {
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 8px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: rgba(0, 0, 0, 0.05);
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.card-close:active {
|
|
background: rgba(0, 0, 0, 0.1);
|
|
transform: scale(0.9);
|
|
}
|
|
|
|
.close-icon {
|
|
font-size: 16px;
|
|
color: #666;
|
|
}
|
|
|
|
.card-actions {
|
|
display: flex;
|
|
gap: 12px;
|
|
}
|
|
|
|
.action-btn {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 12px 8px;
|
|
border-radius: 12px;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.action-btn:active {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
.chat-btn {
|
|
background: rgba(102, 126, 234, 0.1);
|
|
border: 1px solid rgba(102, 126, 234, 0.2);
|
|
}
|
|
|
|
.add-btn {
|
|
background: rgba(46, 213, 115, 0.1);
|
|
border: 1px solid rgba(46, 213, 115, 0.2);
|
|
}
|
|
|
|
.profile-btn {
|
|
background: rgba(255, 149, 0, 0.1);
|
|
border: 1px solid rgba(255, 149, 0, 0.2);
|
|
}
|
|
|
|
.action-icon {
|
|
font-size: 20px;
|
|
}
|
|
|
|
.action-text {
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
color: #333;
|
|
}
|
|
|
|
/* 浮动通知 */
|
|
.floating-notifications {
|
|
position: absolute;
|
|
z-index: 90;
|
|
}
|
|
|
|
.notification-item {
|
|
background: rgba(255, 255, 255, 0.95);
|
|
padding: 12rpx 20rpx;
|
|
border-radius: 32rpx;
|
|
backdrop-filter: blur(20rpx);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12rpx;
|
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
|
|
margin-bottom: 12rpx;
|
|
animation: slide-in-left 0.3s ease;
|
|
}
|
|
|
|
.notification-icon {
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.notification-text {
|
|
font-size: 24rpx;
|
|
color: #2c3e50;
|
|
font-weight: 500;
|
|
}
|
|
|
|
@keyframes slide-in-left {
|
|
from {
|
|
transform: translateX(-100%);
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
transform: translateX(0);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
/* 加载提示 - 优化设计 */
|
|
.loading-overlay {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 100;
|
|
}
|
|
|
|
.loading-content {
|
|
text-align: center;
|
|
color: white;
|
|
}
|
|
|
|
.loading-spinner {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.spinner-ring {
|
|
width: 20px;
|
|
height: 20px;
|
|
border: 2px solid rgba(255, 255, 255, 0.3);
|
|
border-top: 2px solid white;
|
|
border-radius: 50%;
|
|
margin: 0 3px;
|
|
animation: spin 1s linear infinite;
|
|
}
|
|
|
|
.spinner-ring:nth-child(2) {
|
|
animation-delay: 0.1s;
|
|
}
|
|
|
|
.spinner-ring:nth-child(3) {
|
|
animation-delay: 0.2s;
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% { transform: rotate(0deg); }
|
|
100% { transform: rotate(360deg); }
|
|
}
|
|
|
|
.loading-text {
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
margin-bottom: 8px;
|
|
display: block;
|
|
}
|
|
|
|
.loading-subtitle {
|
|
font-size: 13px;
|
|
opacity: 0.8;
|
|
display: block;
|
|
}
|
|
|
|
/* 响应式设计 */
|
|
@media (max-width: 375px) {
|
|
.right-controls {
|
|
right: 12px;
|
|
}
|
|
|
|
.control-btn {
|
|
width: 40px;
|
|
height: 40px;
|
|
border-radius: 20px;
|
|
}
|
|
|
|
.btn-icon {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.location-btn-inner {
|
|
width: 52px;
|
|
height: 52px;
|
|
border-radius: 26px;
|
|
}
|
|
|
|
.location-btn .location-icon {
|
|
font-size: 20px;
|
|
}
|
|
|
|
.user-card {
|
|
left: 12px;
|
|
right: 12px;
|
|
padding: 16px;
|
|
}
|
|
|
|
.card-avatar {
|
|
width: 44px;
|
|
height: 44px;
|
|
}
|
|
|
|
.card-avatar-text {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.action-btn {
|
|
padding: 10px 6px;
|
|
}
|
|
}
|
|
|
|
/* 深色模式支持 */
|
|
@media (prefers-color-scheme: dark) {
|
|
.control-btn,
|
|
.location-btn-inner,
|
|
.user-card {
|
|
background: rgba(42, 42, 42, 0.95);
|
|
border-color: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.card-name {
|
|
color: #fff;
|
|
}
|
|
|
|
.card-distance,
|
|
.close-icon,
|
|
.action-text {
|
|
color: #ccc;
|
|
}
|
|
|
|
.card-close {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.card-close:active {
|
|
background: rgba(255, 255, 255, 0.2);
|
|
}
|
|
}
|
|
|
|
/* 🔥 ===== 新增浮动UI样式 ===== */
|
|
|
|
/* 浮动头像 */
|
|
.floating-avatar {
|
|
position: fixed;
|
|
right: 32rpx;
|
|
z-index: 1000;
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
.floating-avatar:active {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
.floating-avatar .avatar-container {
|
|
width: 96rpx;
|
|
height: 96rpx;
|
|
position: relative;
|
|
border-radius: 50%;
|
|
overflow: hidden;
|
|
box-shadow: 0 8rpx 32rpx rgba(102, 126, 234, 0.4);
|
|
border: 6rpx solid rgba(255, 255, 255, 0.95);
|
|
}
|
|
|
|
.floating-avatar .user-avatar {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 50%;
|
|
}
|
|
|
|
.floating-avatar .avatar-ring {
|
|
position: absolute;
|
|
top: -6rpx;
|
|
left: -6rpx;
|
|
right: -6rpx;
|
|
bottom: -6rpx;
|
|
border: 4rpx solid transparent;
|
|
border-radius: 50%;
|
|
background: linear-gradient(45deg, #667eea, #764ba2, #f093fb);
|
|
background-clip: border-box;
|
|
animation: avatar-ring-rotate 3s linear infinite;
|
|
}
|
|
|
|
@keyframes avatar-ring-rotate {
|
|
0% { transform: rotate(0deg); }
|
|
100% { transform: rotate(360deg); }
|
|
}
|
|
|
|
.floating-avatar .online-indicator {
|
|
position: absolute;
|
|
bottom: 8rpx;
|
|
right: 8rpx;
|
|
width: 24rpx;
|
|
height: 24rpx;
|
|
background: #27ae60;
|
|
border: 4rpx solid white;
|
|
border-radius: 50%;
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.2);
|
|
animation: online-pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes online-pulse {
|
|
0%, 100% { transform: scale(1); }
|
|
50% { transform: scale(1.1); }
|
|
}
|
|
|
|
/* 底部浮动按钮组 */
|
|
.floating-buttons {
|
|
position: fixed;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
display: flex;
|
|
gap: 32rpx;
|
|
z-index: 1000;
|
|
}
|
|
|
|
.floating-btn {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 12rpx;
|
|
padding: 24rpx;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
backdrop-filter: blur(20rpx);
|
|
border-radius: 32rpx;
|
|
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.15);
|
|
border: 2rpx solid rgba(255, 255, 255, 0.8);
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
position: relative;
|
|
overflow: hidden;
|
|
min-width: 120rpx;
|
|
}
|
|
|
|
.floating-btn:active {
|
|
transform: scale(0.95);
|
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
.floating-btn::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
|
|
opacity: 0;
|
|
transition: opacity 0.3s ease;
|
|
}
|
|
|
|
.floating-btn:active::before {
|
|
opacity: 1;
|
|
}
|
|
|
|
.floating-btn .btn-icon {
|
|
position: relative;
|
|
width: 64rpx;
|
|
height: 64rpx;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: linear-gradient(135deg, #667eea, #764ba2);
|
|
box-shadow: 0 6rpx 20rpx rgba(102, 126, 234, 0.3);
|
|
z-index: 2;
|
|
}
|
|
|
|
.floating-btn .icon-emoji {
|
|
font-size: 32rpx;
|
|
filter: drop-shadow(0 2rpx 4rpx rgba(0, 0, 0, 0.2));
|
|
}
|
|
|
|
.floating-btn .icon-glow {
|
|
position: absolute;
|
|
top: -8rpx;
|
|
left: -8rpx;
|
|
right: -8rpx;
|
|
bottom: -8rpx;
|
|
background: radial-gradient(circle, rgba(255, 255, 255, 0.3), transparent);
|
|
border-radius: 50%;
|
|
animation: icon-glow-pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes icon-glow-pulse {
|
|
0%, 100% { opacity: 0.5; transform: scale(1); }
|
|
50% { opacity: 0.8; transform: scale(1.1); }
|
|
}
|
|
|
|
.floating-btn .btn-label {
|
|
font-size: 24rpx;
|
|
font-weight: 600;
|
|
color: #333;
|
|
z-index: 2;
|
|
position: relative;
|
|
}
|
|
|
|
/* 🎨 现代化通知徽章 */
|
|
.floating-btn .notification-badge {
|
|
position: absolute;
|
|
top: 8rpx;
|
|
right: 8rpx;
|
|
min-width: 40rpx;
|
|
height: 40rpx;
|
|
background: linear-gradient(145deg, #FF6B6B 0%, #FF8E8E 100%);
|
|
border-radius: 20rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: 3rpx solid rgba(255, 255, 255, 0.9);
|
|
box-shadow:
|
|
0 6rpx 20rpx rgba(255, 107, 107, 0.4),
|
|
0 2rpx 8rpx rgba(255, 107, 107, 0.3),
|
|
inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
|
|
z-index: 3;
|
|
animation: badgePulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes badgePulse {
|
|
0%, 100% {
|
|
transform: scale(1);
|
|
box-shadow:
|
|
0 6rpx 20rpx rgba(255, 107, 107, 0.4),
|
|
0 2rpx 8rpx rgba(255, 107, 107, 0.3),
|
|
inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
|
|
}
|
|
50% {
|
|
transform: scale(1.1);
|
|
box-shadow:
|
|
0 8rpx 24rpx rgba(255, 107, 107, 0.5),
|
|
0 3rpx 12rpx rgba(255, 107, 107, 0.4),
|
|
inset 0 1rpx 0 rgba(255, 255, 255, 0.4);
|
|
}
|
|
}
|
|
|
|
.floating-btn .badge-text {
|
|
font-size: 20rpx;
|
|
font-weight: 700;
|
|
color: white;
|
|
line-height: 1;
|
|
padding: 0 6rpx;
|
|
text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
/* 按钮特定样式 */
|
|
.friends-btn .btn-icon {
|
|
background: linear-gradient(135deg, #2ed573, #1dd1a1);
|
|
}
|
|
|
|
.messages-btn .btn-icon {
|
|
background: linear-gradient(135deg, #667eea, #764ba2);
|
|
}
|
|
|
|
/* 侧边操作按钮 */
|
|
.side-actions,
|
|
.right-actions {
|
|
position: fixed;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 24rpx;
|
|
z-index: 900;
|
|
}
|
|
|
|
.side-actions {
|
|
left: 32rpx;
|
|
}
|
|
|
|
.right-actions {
|
|
right: 32rpx;
|
|
}
|
|
|
|
.action-btn {
|
|
width: 88rpx;
|
|
height: 88rpx;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
backdrop-filter: blur(20rpx);
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 6rpx 24rpx rgba(0, 0, 0, 0.12);
|
|
border: 2rpx solid rgba(255, 255, 255, 0.8);
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.action-btn:active {
|
|
transform: scale(0.9);
|
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.16);
|
|
}
|
|
|
|
.action-btn .action-icon {
|
|
font-size: 36rpx;
|
|
filter: drop-shadow(0 2rpx 4rpx rgba(0, 0, 0, 0.1));
|
|
z-index: 2;
|
|
position: relative;
|
|
}
|
|
|
|
.action-btn .btn-ripple {
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
width: 0;
|
|
height: 0;
|
|
border-radius: 50%;
|
|
background: rgba(102, 126, 234, 0.2);
|
|
transform: translate(-50%, -50%);
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.action-btn:active .btn-ripple {
|
|
width: 120rpx;
|
|
height: 120rpx;
|
|
}
|
|
|
|
/* 特定按钮样式 */
|
|
.location-btn .action-icon {
|
|
color: #667eea;
|
|
}
|
|
|
|
.layer-btn .action-icon {
|
|
color: #2ed573;
|
|
}
|
|
|
|
.search-btn .action-icon {
|
|
color: #ff9500;
|
|
}
|
|
|
|
.nearby-btn .action-icon {
|
|
color: #ff6b6b;
|
|
}
|
|
|
|
.post-btn .action-icon {
|
|
color: #a55eea;
|
|
}
|
|
|
|
.nearby-count {
|
|
position: absolute;
|
|
top: -8rpx;
|
|
right: -8rpx;
|
|
min-width: 32rpx;
|
|
height: 32rpx;
|
|
background: #ff4757;
|
|
border-radius: 16rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 18rpx;
|
|
font-weight: 700;
|
|
color: white;
|
|
border: 3rpx solid white;
|
|
box-shadow: 0 4rpx 12rpx rgba(255, 71, 87, 0.4);
|
|
z-index: 3;
|
|
}
|
|
|
|
/* 响应式适配 */
|
|
@media (max-width: 375px) {
|
|
.floating-avatar {
|
|
right: 24rpx;
|
|
}
|
|
|
|
.floating-avatar .avatar-container {
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
}
|
|
|
|
.floating-buttons {
|
|
gap: 24rpx;
|
|
}
|
|
|
|
.floating-btn {
|
|
padding: 20rpx;
|
|
min-width: 100rpx;
|
|
}
|
|
|
|
.floating-btn .btn-icon {
|
|
width: 56rpx;
|
|
height: 56rpx;
|
|
}
|
|
|
|
.floating-btn .icon-emoji {
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.side-actions,
|
|
.right-actions {
|
|
gap: 20rpx;
|
|
}
|
|
|
|
.side-actions {
|
|
left: 24rpx;
|
|
}
|
|
|
|
.right-actions {
|
|
right: 24rpx;
|
|
}
|
|
|
|
.action-btn {
|
|
width: 72rpx;
|
|
height: 72rpx;
|
|
}
|
|
|
|
.action-btn .action-icon {
|
|
font-size: 32rpx;
|
|
}
|
|
}
|
|
|
|
/* 🔥 ===== 新增样式 ===== */
|
|
|
|
/* 用户头像通知小红点 */
|
|
.user-avatar .notification-dot {
|
|
position: absolute;
|
|
top: 8rpx;
|
|
right: 8rpx;
|
|
width: 16rpx;
|
|
height: 16rpx;
|
|
background: #ff4757;
|
|
border: 3rpx solid white;
|
|
border-radius: 50%;
|
|
box-shadow: 0 4rpx 12rpx rgba(255, 71, 87, 0.4);
|
|
z-index: 10;
|
|
animation: notification-pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes notification-pulse {
|
|
0%, 100% { transform: scale(1); opacity: 1; }
|
|
50% { transform: scale(1.2); opacity: 0.8; }
|
|
}
|
|
|
|
/* 附近的人数量显示 */
|
|
.right-controls .nearby-count {
|
|
position: absolute;
|
|
top: -8rpx;
|
|
right: -8rpx;
|
|
min-width: 32rpx;
|
|
height: 32rpx;
|
|
background: #ff4757;
|
|
border-radius: 16rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 18rpx;
|
|
font-weight: 700;
|
|
color: white;
|
|
border: 3rpx solid white;
|
|
box-shadow: 0 4rpx 12rpx rgba(255, 71, 87, 0.4);
|
|
z-index: 3;
|
|
padding: 0 6rpx;
|
|
}
|
|
|
|
/* 附近的人按钮样式 */
|
|
.right-controls .nearby-btn {
|
|
position: relative;
|
|
}
|
|
|
|
.right-controls .nearby-icon {
|
|
font-size: 20px;
|
|
color: #ff6b6b;
|
|
}
|
|
|
|
/* 深色模式适配 */
|
|
@media (prefers-color-scheme: dark) {
|
|
.floating-btn,
|
|
.action-btn {
|
|
background: rgba(42, 42, 42, 0.95);
|
|
border-color: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.floating-btn .btn-label {
|
|
color: #fff;
|
|
}
|
|
|
|
.floating-avatar .avatar-container {
|
|
border-color: rgba(42, 42, 42, 0.95);
|
|
}
|
|
|
|
.user-avatar .notification-dot,
|
|
.nearby-count {
|
|
border-color: rgba(42, 42, 42, 0.95);
|
|
}
|
|
}
|
|
|
|
/* 📱 响应式设计 - 现代化导航适配 */
|
|
@media screen and (max-width: 375px) {
|
|
/* 小屏幕适配 */
|
|
.floating-buttons {
|
|
gap: 32rpx;
|
|
}
|
|
|
|
.floating-btn {
|
|
min-width: 120rpx;
|
|
padding: 24rpx 20rpx;
|
|
}
|
|
|
|
.floating-btn .btn-icon {
|
|
width: 64rpx;
|
|
height: 64rpx;
|
|
}
|
|
|
|
.floating-btn .icon-emoji {
|
|
font-size: 32rpx;
|
|
}
|
|
|
|
.floating-btn .btn-label {
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.avatar-container {
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
}
|
|
|
|
.avatar-text {
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.online-dot {
|
|
width: 20rpx;
|
|
height: 20rpx;
|
|
}
|
|
}
|
|
|
|
@media screen and (min-width: 414px) {
|
|
/* 大屏幕优化 */
|
|
.floating-buttons {
|
|
gap: 48rpx;
|
|
}
|
|
|
|
.floating-btn {
|
|
min-width: 160rpx;
|
|
padding: 32rpx 28rpx;
|
|
}
|
|
|
|
.floating-btn .btn-icon {
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
}
|
|
|
|
.floating-btn .icon-emoji {
|
|
font-size: 40rpx;
|
|
}
|
|
|
|
.floating-btn .btn-label {
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.avatar-container {
|
|
width: 96rpx;
|
|
height: 96rpx;
|
|
}
|
|
|
|
.avatar-text {
|
|
font-size: 36rpx;
|
|
}
|
|
|
|
.online-dot {
|
|
width: 28rpx;
|
|
height: 28rpx;
|
|
}
|
|
}
|
|
|
|
/* 🎨 特殊设备适配 */
|
|
@media screen and (max-height: 667px) {
|
|
/* iPhone SE等小屏设备 */
|
|
.floating-buttons {
|
|
bottom: calc(env(safe-area-inset-bottom) + 32rpx) !important;
|
|
}
|
|
}
|
|
|
|
@media screen and (min-height: 812px) {
|
|
/* iPhone X及以上设备 */
|
|
.floating-buttons {
|
|
bottom: calc(env(safe-area-inset-bottom) + 48rpx) !important;
|
|
}
|
|
}
|
|
|
|
/* 🎨 横屏适配 */
|
|
@media screen and (orientation: landscape) {
|
|
.floating-buttons {
|
|
gap: 24rpx;
|
|
bottom: calc(env(safe-area-inset-bottom) + 24rpx) !important;
|
|
}
|
|
|
|
.floating-btn {
|
|
min-width: 100rpx;
|
|
padding: 20rpx 16rpx;
|
|
}
|
|
|
|
.floating-btn .btn-label {
|
|
font-size: 22rpx;
|
|
}
|
|
|
|
.avatar-container {
|
|
width: 72rpx;
|
|
height: 72rpx;
|
|
}
|
|
|
|
.avatar-text {
|
|
font-size: 26rpx;
|
|
}
|
|
}
|
|
.remind-slider-block {
|
|
margin: 18px 0 8px 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
.remind-label {
|
|
font-size: 15px;
|
|
color: #333;
|
|
margin-right: 8px;
|
|
}
|
|
.remind-value {
|
|
font-size: 15px;
|
|
color: #667eea;
|
|
margin-left: 8px;
|
|
font-weight: 600;
|
|
}
|
|
.remind-desc {
|
|
font-size: 13px;
|
|
color: #888;
|
|
margin-top: 8px;
|
|
text-align: left;
|
|
}
|
|
.remind-title-block {
|
|
margin-bottom: 8px;
|
|
text-align: left;
|
|
}
|
|
.remind-title {
|
|
font-size: 18px;
|
|
font-weight: 700;
|
|
color: #333;
|
|
display: block;
|
|
}
|
|
.remind-subtitle {
|
|
font-size: 13px;
|
|
color: #888;
|
|
margin-top: 2px;
|
|
display: block;
|
|
}
|
|
.remind-friends-mode-row {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
margin-bottom: 10px;
|
|
}
|
|
.remind-friends-block {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 4px;
|
|
}
|
|
.remind-friends-avatars {
|
|
display: flex;
|
|
gap: 4px;
|
|
margin-top: 2px;
|
|
}
|
|
.avatar-placeholder {
|
|
background: #f0f0f0;
|
|
color: #bbb;
|
|
}
|
|
.remind-mode-block {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.remind-mode-radio {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
.remind-mode-label {
|
|
font-size: 14px;
|
|
color: #333;
|
|
margin-right: 8px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
}
|
|
.remind-value.highlight {
|
|
color: #ff9500;
|
|
font-size: 17px;
|
|
font-weight: 700;
|
|
}
|
|
.remind-mode-checkbox {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
/* 好友选择弹窗样式 */
|
|
.friend-select-modal {
|
|
z-index: 20000;
|
|
position: fixed;
|
|
left: 0; top: 0; right: 0; bottom: 0;
|
|
background: rgba(0,0,0,0.45);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.friend-select-content {
|
|
background: #fff;
|
|
border-radius: 18px;
|
|
width: 320px;
|
|
max-width: 90vw;
|
|
max-height: 70vh;
|
|
box-shadow: 0 8px 32px rgba(0,0,0,0.18);
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
padding: 20px 16px 12px 16px;
|
|
}
|
|
.friend-select-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 8px;
|
|
}
|
|
.friend-select-title {
|
|
font-size: 18px;
|
|
font-weight: 700;
|
|
color: #333;
|
|
flex: 1;
|
|
text-align: left;
|
|
}
|
|
.friend-select-close {
|
|
font-size: 22px;
|
|
color: #888;
|
|
padding: 0 8px;
|
|
cursor: pointer;
|
|
transition: color 0.2s;
|
|
}
|
|
.friend-select-close:active {
|
|
color: #ff4757;
|
|
}
|
|
/* 好友选择弹窗美化 */
|
|
.friend-list-scroll {
|
|
max-height: 45vh;
|
|
padding-bottom: 8px;
|
|
}
|
|
.friend-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 10px 14px;
|
|
border-radius: 10px;
|
|
margin-bottom: 8px;
|
|
background: #fff;
|
|
transition: background 0.18s, box-shadow 0.18s, border 0.18s, transform 0.18s;
|
|
position: relative;
|
|
border: 1.5px solid transparent;
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.03);
|
|
cursor: pointer;
|
|
}
|
|
.friend-item:active {
|
|
transform: scale(0.97);
|
|
box-shadow: 0 2px 8px rgba(24,144,255,0.10);
|
|
}
|
|
.friend-item.selected {
|
|
background: #e6f7ff;
|
|
border: 1.5px solid #1890ff;
|
|
box-shadow: 0 2px 12px rgba(24,144,255,0.10);
|
|
}
|
|
.friend-item.selected .friend-avatar,
|
|
.friend-item.selected .friend-avatar-txt {
|
|
border: 2.5px solid #1890ff;
|
|
box-shadow: 0 0 0 2px #bae7ff;
|
|
}
|
|
.friend-item.disabled {
|
|
background: #f5f5f5;
|
|
color: #bbb;
|
|
cursor: not-allowed;
|
|
opacity: 0.7;
|
|
}
|
|
.friend-item.disabled .friend-avatar,
|
|
.friend-item.disabled .friend-avatar-txt {
|
|
filter: grayscale(1);
|
|
border: 2px solid #eee;
|
|
}
|
|
.friend-avatar,
|
|
.friend-avatar-txt {
|
|
width: 36px;
|
|
height: 36px;
|
|
border-radius: 50%;
|
|
margin-right: 12px;
|
|
background: #f0f0f0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 16px;
|
|
color: #888;
|
|
font-weight: 600;
|
|
border: 2px solid #f0f0f0;
|
|
transition: border 0.18s, box-shadow 0.18s, filter 0.18s;
|
|
}
|
|
.friend-nickname {
|
|
font-size: 15px;
|
|
color: #222;
|
|
font-weight: 500;
|
|
flex: 1;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
.friend-item.selected .friend-nickname {
|
|
color: #1890ff;
|
|
}
|
|
.friend-check {
|
|
margin-left: auto;
|
|
color: #1890ff;
|
|
font-size: 18px;
|
|
font-weight: bold;
|
|
background: #fff;
|
|
border-radius: 50%;
|
|
width: 26px;
|
|
height: 26px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 1px 4px rgba(24,144,255,0.08);
|
|
border: 2px solid #e6f7ff;
|
|
transition: background 0.18s, color 0.18s, border 0.18s;
|
|
}
|
|
.friend-item.selected .friend-check {
|
|
background: #1890ff;
|
|
color: #fff;
|
|
border: 2px solid #fff;
|
|
}
|
|
.friend-item.disabled .friend-check {
|
|
background: #eee;
|
|
color: #bbb;
|
|
border: 2px solid #eee;
|
|
}
|
|
.friend-selected-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-bottom: 10px;
|
|
min-height: 40px;
|
|
}
|
|
.friend-selected-avatar {
|
|
width: 36px;
|
|
height: 36px;
|
|
border-radius: 50%;
|
|
background: #f0f0f0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
position: relative;
|
|
font-size: 18px;
|
|
color: #888;
|
|
box-shadow: 0 2px 8px rgba(102,126,234,0.08);
|
|
border: 2px solid #667eea;
|
|
cursor: pointer;
|
|
transition: box-shadow 0.2s;
|
|
}
|
|
.friend-selected-avatar:active {
|
|
box-shadow: 0 4px 16px rgba(102,126,234,0.18);
|
|
}
|
|
.friend-selected-remove {
|
|
position: absolute;
|
|
top: -8px;
|
|
right: -8px;
|
|
width: 18px;
|
|
height: 18px;
|
|
background: #ff4757;
|
|
color: #fff;
|
|
border-radius: 50%;
|
|
font-size: 13px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 2px 8px rgba(255,71,87,0.18);
|
|
border: 2px solid #fff;
|
|
}
|
|
.friend-selected-placeholder {
|
|
background: #f8f8f8;
|
|
color: #bbb;
|
|
border: 2px dashed #ddd;
|
|
}
|
|
.friend-search-input {
|
|
width: 100%;
|
|
height: 32px;
|
|
border: 1px solid #e0e0e0;
|
|
border-radius: 8px;
|
|
padding: 0 12px;
|
|
font-size: 15px;
|
|
margin-bottom: 10px;
|
|
outline: none;
|
|
box-sizing: border-box;
|
|
}
|
|
.friend-select-done[disabled] {
|
|
background: #eee !important;
|
|
color: #bbb !important;
|
|
border: none;
|
|
}
|
|
.card-actions-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
position: absolute;
|
|
right: 12px;
|
|
top: 20px;
|
|
}
|
|
.remind-save-btn {
|
|
padding: 0 14px;
|
|
height: 28px;
|
|
line-height: 28px;
|
|
font-size: 14px;
|
|
border-radius: 14px;
|
|
margin-right: 2px;
|
|
}
|
|
|
|
/* 底部导航栏 */
|
|
.bottom-tab-bar {
|
|
position: fixed;
|
|
left: 0; right: 0; bottom: 0;
|
|
height: 56px;
|
|
background: #fff;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-around;
|
|
box-shadow: 0 -2px 12px rgba(0,0,0,0.06);
|
|
z-index: 10001;
|
|
}
|
|
.tab-btn {
|
|
flex: 1;
|
|
height: 40px;
|
|
margin: 0 8px;
|
|
border: none;
|
|
background: none;
|
|
font-size: 16px;
|
|
color: #666;
|
|
border-radius: 20px;
|
|
transition: background 0.2s;
|
|
}
|
|
.tab-btn:active {
|
|
background: #f0f4ff;
|
|
color: #1890ff;
|
|
}
|
|
|
|
/* 地点标记弹窗美化 */
|
|
.location-mark-modal {
|
|
z-index: 20000;
|
|
position: fixed;
|
|
left: 0; top: 0; right: 0; bottom: 0;
|
|
background: rgba(0,0,0,0.45);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.location-mark-content {
|
|
background: #fff;
|
|
border-radius: 24px;
|
|
width: 370px;
|
|
max-width: 96vw;
|
|
max-height: 80vh;
|
|
box-shadow: 0 12px 40px rgba(24,144,255,0.10), 0 2px 8px rgba(0,0,0,0.10);
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 0 0 18px 0;
|
|
overflow: hidden;
|
|
}
|
|
.location-mark-header {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 56px;
|
|
background: #f8fbff;
|
|
}
|
|
.location-mark-title {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
color: #222;
|
|
letter-spacing: 1px;
|
|
}
|
|
.location-mark-close {
|
|
position: absolute;
|
|
right: 18px;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
font-size: 22px;
|
|
color: #bbb;
|
|
padding: 4px 8px;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
transition: background 0.2s, color 0.2s;
|
|
}
|
|
.location-mark-close:active {
|
|
background: #f0f4ff;
|
|
color: #ff4757;
|
|
}
|
|
.location-mark-divider {
|
|
height: 1px;
|
|
background: #f0f4ff;
|
|
margin: 0 0 8px 0;
|
|
}
|
|
.location-mark-search-row {
|
|
display: flex;
|
|
align-items: center;
|
|
background: #f4f7fa;
|
|
border-radius: 18px;
|
|
margin: 16px 18px 10px 18px;
|
|
padding: 0 10px;
|
|
box-shadow: 0 1px 4px rgba(24,144,255,0.04);
|
|
position: relative;
|
|
}
|
|
.search-icon {
|
|
font-size: 18px;
|
|
color: #b0b8c7;
|
|
margin-right: 4px;
|
|
}
|
|
.location-mark-search {
|
|
flex: 1;
|
|
height: 36px;
|
|
border: none;
|
|
background: transparent;
|
|
font-size: 15px;
|
|
outline: none;
|
|
padding: 0 4px;
|
|
}
|
|
.clear-icon {
|
|
font-size: 16px;
|
|
color: #b0b8c7;
|
|
margin-left: 4px;
|
|
cursor: pointer;
|
|
transition: color 0.2s;
|
|
}
|
|
.clear-icon:active {
|
|
color: #ff4757;
|
|
}
|
|
.location-mark-list {
|
|
flex: 1;
|
|
min-height: 120px;
|
|
max-height: 340px;
|
|
overflow-y: auto;
|
|
padding: 0 12px 0 12px;
|
|
}
|
|
.location-mark-item-card {
|
|
background: #fff;
|
|
border-radius: 16px;
|
|
box-shadow: 0 2px 12px rgba(24,144,255,0.06);
|
|
margin-bottom: 16px;
|
|
padding: 0 0 0 0;
|
|
transition: box-shadow 0.2s;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.location-mark-item-card:active {
|
|
box-shadow: 0 4px 18px rgba(24,144,255,0.13);
|
|
}
|
|
.location-mark-item-main {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
padding: 16px 16px 10px 16px;
|
|
}
|
|
.location-mark-item-info {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.location-mark-name-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-bottom: 2px;
|
|
}
|
|
.location-mark-name {
|
|
font-size: 17px;
|
|
font-weight: 700;
|
|
color: #1890ff;
|
|
max-width: 110px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.location-mark-edit-btn,
|
|
.location-mark-del-btn {
|
|
font-size: 13px;
|
|
padding: 0 8px;
|
|
height: 24px;
|
|
line-height: 24px;
|
|
border-radius: 12px;
|
|
margin-left: 2px;
|
|
display: flex;
|
|
align-items: center;
|
|
border: none;
|
|
background: #f4f7fa;
|
|
color: #1890ff;
|
|
transition: background 0.2s, color 0.2s;
|
|
}
|
|
.location-mark-edit-btn:active {
|
|
background: #e6f7ff;
|
|
color: #1761a0;
|
|
}
|
|
.location-mark-del-btn {
|
|
color: #ff4757;
|
|
background: #fff0f0;
|
|
}
|
|
.location-mark-del-btn:active {
|
|
background: #ffeaea;
|
|
color: #c82333;
|
|
}
|
|
.location-mark-edit-btn .iconfont,
|
|
.location-mark-del-btn .iconfont {
|
|
font-size: 15px;
|
|
margin-right: 2px;
|
|
}
|
|
.location-mark-coord {
|
|
font-size: 13px;
|
|
color: #888;
|
|
overflow: hidden;
|
|
margin-top: 2px;
|
|
}
|
|
.location-mark-meta {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
gap: 8px;
|
|
margin-left: 14px;
|
|
}
|
|
.location-mark-friends {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
}
|
|
.location-mark-friend-avatar {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 50%;
|
|
background: #f0f0f0;
|
|
border: 1.5px solid #fff;
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.06);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 15px;
|
|
color: #888;
|
|
font-weight: 600;
|
|
overflow: hidden;
|
|
}
|
|
.location-mark-friend-avatar image {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 50%;
|
|
}
|
|
.location-mark-friend-btn {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 50%;
|
|
background: #e6f7ff;
|
|
color: #1890ff;
|
|
font-size: 20px;
|
|
line-height: 28px;
|
|
padding: 0;
|
|
border: none;
|
|
margin-left: 2px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 1px 4px rgba(24,144,255,0.08);
|
|
transition: background 0.2s, color 0.2s;
|
|
cursor: pointer;
|
|
}
|
|
.location-mark-friend-btn:active {
|
|
background: #bae7ff;
|
|
color: #1761a0;
|
|
}
|
|
.location-mark-type-tag {
|
|
font-size: 13px;
|
|
color: #fff;
|
|
border-radius: 12px;
|
|
padding: 3px 16px;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
font-weight: 600;
|
|
box-shadow: 0 1px 4px rgba(24,144,255,0.08);
|
|
transition: background 0.2s;
|
|
margin-top: 4px;
|
|
}
|
|
.location-mark-type-tag.arrive {
|
|
background: linear-gradient(90deg, #1890ff 60%, #40a9ff 100%);
|
|
}
|
|
.location-mark-type-tag.leave {
|
|
background: linear-gradient(90deg, #faad14 60%, #ffd666 100%);
|
|
color: #fff;
|
|
}
|
|
.location-mark-type-tag:active {
|
|
filter: brightness(0.92);
|
|
}
|
|
.location-mark-empty {
|
|
text-align: center;
|
|
color: #bbb;
|
|
font-size: 16px;
|
|
margin-top: 60px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.empty-icon {
|
|
font-size: 38px;
|
|
color: #e6f7ff;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
/* 遮罩层 */
|
|
.location-mark-mask {
|
|
position: fixed;
|
|
left: 0; top: 0; right: 0; bottom: 0;
|
|
background: rgba(0,0,0,0.45);
|
|
z-index: 20000;
|
|
}
|
|
/* 弹窗内容区 */
|
|
.location-mark-dialog {
|
|
position: fixed;
|
|
left: 50%;
|
|
top: 50%;
|
|
transform: translate(-50%, -50%);
|
|
background: #fff;
|
|
border-radius: 24px;
|
|
width: 370px;
|
|
max-width: 96vw;
|
|
max-height: 80vh;
|
|
box-shadow: 0 12px 40px rgba(24,144,255,0.10), 0 2px 8px rgba(0,0,0,0.10);
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: 0 0 18px 0;
|
|
overflow: hidden;
|
|
z-index: 20001;
|
|
animation: locationMarkDialogFadeIn 0.25s cubic-bezier(.4,0,.2,1);
|
|
}
|
|
/* 弹窗动画 */
|
|
@keyframes locationMarkDialogFadeIn {
|
|
0% { opacity: 0; transform: translate(-50%, -46%) scale(0.96); }
|
|
100% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
|
}
|
|
.location-mark-dialog-animate {
|
|
animation: locationMarkDialogFadeIn 0.25s cubic-bezier(.4,0,.2,1);
|
|
}
|
|
|
|
/* 底部弹出卡片样式 */
|
|
.location-mark-sheet {
|
|
position: fixed;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: #fff;
|
|
border-top-left-radius: 22px;
|
|
border-top-right-radius: 22px;
|
|
box-shadow: 0 -8px 32px rgba(24,144,255,0.10), 0 -2px 8px rgba(0,0,0,0.10);
|
|
z-index: 20001;
|
|
width: 100vw;
|
|
max-width: 100vw;
|
|
min-height: 220px;
|
|
max-height: 80vh;
|
|
display: flex;
|
|
flex-direction: column;
|
|
animation: locationMarkSheetSlideIn 0.28s cubic-bezier(.4,0,.2,1);
|
|
}
|
|
@keyframes locationMarkSheetSlideIn {
|
|
0% { transform: translateY(60px); opacity: 0; }
|
|
100% { transform: translateY(0); opacity: 1; }
|
|
}
|
|
.location-mark-sheet-animate {
|
|
animation: locationMarkSheetSlideIn 0.28s cubic-bezier(.4,0,.2,1);
|
|
}
|
|
.location-mark-sheet-handle-row {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
height: 32px;
|
|
padding: 0 12px 0 0;
|
|
position: relative;
|
|
}
|
|
.location-mark-sheet-handle {
|
|
width: 44px;
|
|
height: 5px;
|
|
border-radius: 3px;
|
|
background: #e6eaf0;
|
|
margin: 10px auto 0 auto;
|
|
}
|
|
.location-mark-sheet-close {
|
|
position: absolute;
|
|
right: 16px;
|
|
top: 8px;
|
|
font-size: 22px;
|
|
color: #bbb;
|
|
padding: 4px 8px;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
transition: background 0.2s, color 0.2s;
|
|
z-index: 1;
|
|
}
|
|
.location-mark-sheet-close:active {
|
|
background: #f0f4ff;
|
|
color: #ff4757;
|
|
}
|
|
.location-mark-sheet-title {
|
|
font-size: 18px;
|
|
font-weight: 700;
|
|
color: #222;
|
|
text-align: center;
|
|
margin-bottom: 6px;
|
|
}
|
|
.location-mark-list-sheet {
|
|
flex: 1;
|
|
min-height: 120px;
|
|
max-height: 54vh;
|
|
overflow-y: auto;
|
|
padding: 0 12px 0 12px;
|
|
}
|
|
/* 兼容原有卡片内容美化样式 */
|
|
|
|
/* POI提醒操作弹窗名称可编辑样式 */
|
|
.card-name-editable {
|
|
margin-bottom: 2px;
|
|
}
|
|
.card-name-input {
|
|
font-size: 17px;
|
|
font-weight: 700;
|
|
color: #222;
|
|
border: none;
|
|
background: transparent;
|
|
outline: none;
|
|
width: 100%;
|
|
padding: 0 0 2px 0;
|
|
border-bottom: 1.5px solid #e6eaf0;
|
|
transition: border-color 0.2s;
|
|
}
|
|
.card-name-input:focus {
|
|
border-bottom: 1.5px solid #1890ff;
|
|
}
|
|
.card-name-tip {
|
|
font-size: 12px;
|
|
color: #b0b8c7;
|
|
margin-top: 2px;
|
|
margin-left: 2px;
|
|
}
|
|
|
|
/* 优化后的地点标记卡片布局 */
|
|
.location-mark-item-card {
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
border-radius: 12px;
|
|
margin-bottom: 8px;
|
|
background: #fff;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
|
|
border: 1px solid #f0f0f0;
|
|
}
|
|
|
|
.location-mark-item-card:active {
|
|
transform: scale(0.98);
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.1);
|
|
background: #f8f9fa;
|
|
}
|
|
|
|
.location-mark-item-main-opt {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
padding: 16px 16px 6px 16px;
|
|
}
|
|
.location-mark-item-info-opt {
|
|
flex: 1;
|
|
min-width: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
}
|
|
.location-mark-name-opt {
|
|
font-size: 17px;
|
|
font-weight: 700;
|
|
color: #1890ff;
|
|
max-width: 140px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.location-mark-coord-opt {
|
|
font-size: 12px;
|
|
color: #b0b8c7;
|
|
margin-top: 2px;
|
|
max-width: 140px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.location-mark-actions-opt {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 6px;
|
|
margin-left: 12px;
|
|
}
|
|
.location-mark-edit-btn-opt,
|
|
.location-mark-del-btn-opt {
|
|
font-size: 13px;
|
|
padding: 0 8px;
|
|
height: 24px;
|
|
line-height: 24px;
|
|
border-radius: 12px;
|
|
display: flex;
|
|
align-items: center;
|
|
border: none;
|
|
background: #f4f7fa;
|
|
color: #1890ff;
|
|
transition: background 0.2s, color 0.2s;
|
|
}
|
|
.location-mark-edit-btn-opt:active {
|
|
background: #e6f7ff;
|
|
color: #1761a0;
|
|
}
|
|
.location-mark-del-btn-opt {
|
|
color: #ff4757;
|
|
background: #fff0f0;
|
|
}
|
|
.location-mark-del-btn-opt:active {
|
|
background: #ffeaea;
|
|
color: #c82333;
|
|
}
|
|
.location-mark-edit-btn-opt .iconfont,
|
|
.location-mark-del-btn-opt .iconfont {
|
|
font-size: 15px;
|
|
margin-right: 2px;
|
|
}
|
|
.location-mark-meta-opt {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 0 16px 12px 16px;
|
|
gap: 8px;
|
|
}
|
|
.location-mark-friends-opt {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
}
|
|
.location-mark-friend-avatar-opt {
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 50%;
|
|
background: #f0f0f0;
|
|
border: 1.5px solid #fff;
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.06);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 12px;
|
|
color: #888;
|
|
font-weight: 600;
|
|
overflow: hidden;
|
|
}
|
|
.location-mark-friend-avatar-opt image {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 50%;
|
|
}
|
|
.location-mark-friend-btn-opt {
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 50%;
|
|
background: #e6f7ff;
|
|
color: #1890ff;
|
|
font-size: 16px;
|
|
line-height: 22px;
|
|
padding: 0;
|
|
border: none;
|
|
margin-left: 2px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 1px 4px rgba(24,144,255,0.08);
|
|
transition: background 0.2s, color 0.2s;
|
|
cursor: pointer;
|
|
}
|
|
.location-mark-friend-btn-opt:active {
|
|
background: #bae7ff;
|
|
color: #1761a0;
|
|
}
|
|
.location-mark-type-tag-opt {
|
|
font-size: 12px;
|
|
color: #fff;
|
|
border-radius: 10px;
|
|
padding: 2px 12px;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
font-weight: 600;
|
|
box-shadow: 0 1px 4px rgba(24,144,255,0.08);
|
|
transition: background 0.2s;
|
|
margin-left: 8px;
|
|
}
|
|
.location-mark-type-tag-opt.arrive {
|
|
background: linear-gradient(90deg, #1890ff 60%, #40a9ff 100%);
|
|
}
|
|
.location-mark-type-tag-opt.leave {
|
|
background: linear-gradient(90deg, #faad14 60%, #ffd666 100%);
|
|
color: #fff;
|
|
}
|
|
.location-mark-type-tag-opt:active {
|
|
filter: brightness(0.92);
|
|
}
|
|
|
|
/* 地点标记浮动按钮 */
|
|
.location-mark-fab {
|
|
position: absolute;
|
|
bottom: 20px;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: 56px;
|
|
height: 56px;
|
|
border-radius: 50%;
|
|
background: linear-gradient(135deg, #1890ff 0%, #40a9ff 100%);
|
|
box-shadow: 0 4px 12px rgba(24, 144, 255, 0.3);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
z-index: 10;
|
|
}
|
|
|
|
.location-mark-fab:active {
|
|
transform: translateX(-50%) scale(0.95);
|
|
box-shadow: 0 2px 8px rgba(24, 144, 255, 0.4);
|
|
background: linear-gradient(135deg, #1761a0 0%, #1890ff 100%);
|
|
}
|
|
|
|
.location-mark-fab-icon {
|
|
font-size: 28px;
|
|
font-weight: 300;
|
|
color: #fff;
|
|
line-height: 1;
|
|
user-select: none;
|
|
transition: transform 0.2s ease;
|
|
}
|
|
|
|
.location-mark-fab:active .location-mark-fab-icon {
|
|
transform: rotate(45deg);
|
|
}
|
|
|
|
/*POI周边列表弹窗*/
|
|
.poi-around-modal {
|
|
position: fixed;
|
|
left: 0; right: 0; bottom: 0; top: 0;
|
|
z-index: 9999;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: center;
|
|
font-family: "PingFang SC", "Microsoft YaHei", Arial, sans-serif;
|
|
}
|
|
.poi-around-mask {
|
|
position: absolute;
|
|
left: 0; right: 0; top: 0; bottom: 0;
|
|
background: rgba(0,0,0,0.32);
|
|
}
|
|
.poi-around-sheet {
|
|
position: relative;
|
|
width: 92vw;
|
|
max-width: 500px;
|
|
background: #fff;
|
|
border-radius: 18px 18px 0 0;
|
|
padding: 24px 18px 18px 18px;
|
|
box-shadow: 0 -4px 24px rgba(0,0,0,0.10);
|
|
z-index: 1;
|
|
min-height: 220px;
|
|
animation: popUpSheet 0.25s cubic-bezier(.4,1.4,.6,1) 1;
|
|
}
|
|
@keyframes popUpSheet {
|
|
from { transform: translateY(100px); opacity: 0; }
|
|
to { transform: translateY(0); opacity: 1; }
|
|
}
|
|
.poi-around-close-x {
|
|
position: absolute;
|
|
top: 14px;
|
|
right: 14px;
|
|
width: 32px;
|
|
height: 32px;
|
|
background: #f5f6fa;
|
|
border-radius: 50%;
|
|
color: #888;
|
|
font-size: 20px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
transition: background 0.2s, color 0.2s;
|
|
z-index: 2;
|
|
}
|
|
.poi-around-close-x:active {
|
|
background: #e6eaf0;
|
|
color: #1890ff;
|
|
}
|
|
.poi-around-title {
|
|
font-size: 19px;
|
|
font-weight: bold;
|
|
margin-bottom: 16px;
|
|
text-align: center;
|
|
letter-spacing: 1px;
|
|
color: #222;
|
|
}
|
|
.poi-around-list {
|
|
max-height: 52vh;
|
|
overflow-y: auto;
|
|
margin-bottom: 10px;
|
|
}
|
|
.poi-around-item {
|
|
padding: 14px 0 10px 0;
|
|
border-bottom: 1px solid #f0f0f0;
|
|
cursor: pointer;
|
|
transition: background 0.18s;
|
|
border-radius: 8px;
|
|
}
|
|
.poi-around-item:active {
|
|
background: #f5f8ff;
|
|
}
|
|
.poi-around-name {
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
color: #1890ff;
|
|
margin-bottom: 2px;
|
|
word-break: break-all;
|
|
}
|
|
.poi-around-address {
|
|
font-size: 13px;
|
|
color: #888;
|
|
margin-top: 1px;
|
|
word-break: break-all;
|
|
}
|
|
.poi-around-distance {
|
|
font-size: 13px;
|
|
color: #faad14;
|
|
margin-top: 2px;
|
|
}
|
|
.poi-around-close-btn {
|
|
margin: 18px auto 0 auto;
|
|
width: 90px;
|
|
text-align: center;
|
|
background: #f5f5f5;
|
|
border-radius: 10px;
|
|
padding: 10px 0;
|
|
color: #666;
|
|
font-size: 15px;
|
|
letter-spacing: 1px;
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.04);
|
|
transition: background 0.2s, color 0.2s;
|
|
}
|
|
.poi-around-close-btn:active {
|
|
background: #e6eaf0;
|
|
color: #1890ff;
|
|
}
|
|
.poi-around-empty {
|
|
text-align: center;
|
|
color: #bbb;
|
|
padding: 32px 0;
|
|
font-size: 15px;
|
|
}
|
|
|
|
|
|
/**商家信息**/
|
|
.merchant-info-modal {
|
|
position: fixed;
|
|
left: 0; right: 0; bottom: 0;
|
|
z-index: 9999;
|
|
background: rgba(0,0,0,0.3);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: flex-end;
|
|
}
|
|
.merchant-info-card {
|
|
width: 92vw;
|
|
background: #fff;
|
|
border-radius: 20px 20px 0 0;
|
|
box-shadow: 0 -4px 24px rgba(0,0,0,0.10);
|
|
padding: 28px 20px 18px 20px;
|
|
margin-bottom: env(safe-area-inset-bottom);
|
|
position: relative;
|
|
animation: slideUp 0.25s;
|
|
}
|
|
@keyframes slideUp {
|
|
from { transform: translateY(100%);}
|
|
to { transform: translateY(0);}
|
|
}
|
|
.close-btn-abs {
|
|
position: absolute;
|
|
top: 14px;
|
|
right: 14px;
|
|
background: #f5f5f7;
|
|
border: none;
|
|
border-radius: 50%;
|
|
width: 34px;
|
|
height: 34px;
|
|
font-size: 22px;
|
|
color: #888;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 10;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
|
|
padding: 0;
|
|
transition: background 0.15s;
|
|
}
|
|
.close-btn-abs:active {
|
|
background: #ececec;
|
|
}
|
|
.merchant-info-header {
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
align-items: center;
|
|
margin-bottom: 2px;
|
|
}
|
|
.merchant-name {
|
|
font-size: 20px;
|
|
font-weight: bold;
|
|
color: #222;
|
|
flex: 1;
|
|
line-height: 1.2;
|
|
}
|
|
.merchant-info-row {
|
|
margin: 8px 0 0 0;
|
|
color: #666;
|
|
font-size: 14px;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 12px;
|
|
}
|
|
.merchant-info-meta {
|
|
margin-top: 2px;
|
|
color: #999;
|
|
font-size: 13px;
|
|
}
|
|
.merchant-address {
|
|
color: #444;
|
|
font-size: 15px;
|
|
font-weight: 500;
|
|
}
|
|
.merchant-packages {
|
|
margin: 16px 0 8px 0;
|
|
}
|
|
.package-card {
|
|
background: #f7f8fa;
|
|
border-radius: 12px;
|
|
box-shadow: 0 1px 4px rgba(0,0,0,0.03);
|
|
padding: 12px 14px 10px 14px;
|
|
margin-bottom: 10px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
transition: box-shadow 0.2s;
|
|
}
|
|
.package-card-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 2px;
|
|
}
|
|
.package-title {
|
|
font-weight: 600;
|
|
font-size: 15px;
|
|
color: #333;
|
|
}
|
|
.package-price {
|
|
color: #1aad19;
|
|
font-weight: bold;
|
|
font-size: 15px;
|
|
}
|
|
.package-desc {
|
|
color: #888;
|
|
font-size: 13px;
|
|
margin-top: 2px;
|
|
}
|
|
.merchant-actions {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
margin-top: 14px;
|
|
gap: 10px;
|
|
}
|
|
.action-btn {
|
|
flex: 1;
|
|
margin: 0;
|
|
background: #f0f3fa;
|
|
color: #333;
|
|
border-radius: 9px;
|
|
font-size: 16px;
|
|
padding: 10px 0;
|
|
border: none;
|
|
font-weight: 500;
|
|
transition: background 0.15s, color 0.15s;
|
|
}
|
|
.action-btn:active {
|
|
background: #e6e9f0;
|
|
}
|
|
.action-fav {
|
|
color: #ffb300;
|
|
background: #fffbe8;
|
|
border: 1px solid #ffe1a0;
|
|
}
|
|
.action-fav:active {
|
|
background: #fff3c1;
|
|
}
|
|
.action-nav {
|
|
color: #fff;
|
|
background: #1aad19;
|
|
border: none;
|
|
}
|
|
.action-nav:active {
|
|
background: #179b16;
|
|
}
|
|
.action-remind {
|
|
color: #3478f6;
|
|
background: #eaf2ff;
|
|
border: 1px solid #b3d1ff;
|
|
}
|
|
.action-remind:active {
|
|
background: #d6e7ff;
|
|
}
|
|
|
|
/* ===================== 炫酷地图气泡 callout ===================== */
|
|
.customCallout,
|
|
.callout-vertical {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: flex-start;
|
|
min-width: 110px;
|
|
max-width: 180px;
|
|
z-index: 999;
|
|
background: transparent;
|
|
box-shadow: none;
|
|
border: none;
|
|
padding: 0;
|
|
}
|
|
|
|
.callout-bubble {
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
border-radius: 18px;
|
|
box-shadow: 0 4px 24px 0 rgba(102,126,234,0.25), 0 0 12px 2px #fff3;
|
|
padding: 10px 16px 8px 16px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
position: relative;
|
|
border: 2px solid #fff;
|
|
animation: callout-pop 0.4s cubic-bezier(.68,-0.55,.27,1.55);
|
|
}
|
|
|
|
@keyframes callout-pop {
|
|
0% { transform: scale(0.7); opacity: 0; }
|
|
80% { transform: scale(1.1); opacity: 1; }
|
|
100% { transform: scale(1); opacity: 1; }
|
|
}
|
|
|
|
.callout-user .callout-bubble {
|
|
background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
|
|
box-shadow: 0 4px 24px 0 rgba(67,233,123,0.18), 0 0 12px 2px #fff3;
|
|
}
|
|
|
|
.callout-merchant .callout-bubble {
|
|
background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
|
|
box-shadow: 0 4px 24px 0 rgba(250,112,154,0.18), 0 0 12px 2px #fff3;
|
|
}
|
|
|
|
.callout-nickname {
|
|
font-size: 15px;
|
|
font-weight: bold;
|
|
color: rgb(8, 8, 8);
|
|
margin-bottom: 6px;
|
|
text-align: center;
|
|
letter-spacing: 1px;
|
|
text-shadow: 0 2px 8px #0006, 0 0 6px #fff8;
|
|
max-width: 120px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.callout-text-glow {
|
|
text-shadow: 0 0 8px #fff, 0 2px 8px #0006, 0 0 16px #fff8;
|
|
}
|
|
|
|
.callout-avatar {
|
|
width: 48px;
|
|
height: 48px;
|
|
border-radius: 50%;
|
|
border: 2px solid #fff;
|
|
box-shadow: 0 0 16px 2px #fff8, 0 2px 8px #0003;
|
|
margin-bottom: 6px;
|
|
background: #eee;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.callout-avatar-glow {
|
|
box-shadow: 0 0 16px 4px #38f9d7cc, 0 2px 8px #0003;
|
|
}
|
|
|
|
.callout-battery {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 13px;
|
|
color: rgb(10, 10, 10);
|
|
margin-top: 2px;
|
|
text-shadow: 0 1px 4px #0006;
|
|
font-weight: 500;
|
|
background: rgba(0,0,0,0.12);
|
|
border-radius: 8px;
|
|
padding: 2px 8px 2px 4px;
|
|
min-width: 38px;
|
|
justify-content: center;
|
|
}
|
|
|
|
.callout-battery-glow {
|
|
text-shadow: 0 0 8px #fff, 0 1px 4px #0006;
|
|
}
|
|
|
|
.callout-battery-icon {
|
|
width: 16px;
|
|
height: 16px;
|
|
margin-right: 4px;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.callout-merchant-icon {
|
|
width: 44px;
|
|
height: 44px;
|
|
border-radius: 12px;
|
|
margin-bottom: 4px;
|
|
background: #fff;
|
|
object-fit: cover;
|
|
box-shadow: 0 0 12px 2px #fff8, 0 2px 8px #0002;
|
|
}
|
|
|
|
.callout-merchant-glow {
|
|
box-shadow: 0 0 16px 4px #fa709acc, 0 2px 8px #0003;
|
|
}
|
|
|
|
.callout-arrow {
|
|
width: 0;
|
|
height: 0;
|
|
border-left: 12px solid transparent;
|
|
border-right: 12px solid transparent;
|
|
border-top: 14px solid #fff;
|
|
margin-top: -2px;
|
|
filter: drop-shadow(0 2px 6px #0003);
|
|
}
|
|
|
|
/* 兼容旧结构的圆形icon和内容 */
|
|
.circle {
|
|
width: 20px;
|
|
height: 20px;
|
|
border: 1px solid #ccc;
|
|
border-radius: 50%;
|
|
}
|
|
.icon {
|
|
width: 16px;
|
|
height: 16px;
|
|
}
|
|
.content {
|
|
flex: 0 1 auto;
|
|
margin: 0 10px;
|
|
font-size: 14px;
|
|
} |