/** * 文件级注释：H5 游客页面样式 * 说明：包含资料页面和聊天页面的所有样式 * 设计风格：暗色主题，现代简约 *//* ========== 基础变量 ========== */:root {    /* 主色调 */    --primary-color: #6366f1;    --primary-light: #818cf8;    --primary-dark: #4f46e5;    --primary-glow: rgba(99, 102, 241, 0.3);        /* 背景色 */    --bg-primary: #0c0c1d;    --bg-secondary: #13132b;    --bg-tertiary: #1e1e3f;    --bg-card: #181835;    --bg-hover: #232350;        /* 文字色 */    --text-primary: #f8fafc;    --text-secondary: #94a3b8;    --text-muted: #64748b;        /* 状态色 */    --success-color: #10b981;    --warning-color: #f59e0b;    --danger-color: #ef4444;    --info-color: #3b82f6;        /* 消息气泡 */    --bubble-self: linear-gradient(135deg, #6366f1, #8b5cf6);    --bubble-other: #1e1e3f;        /* 间距 */    --spacing-xs: 4px;    --spacing-sm: 8px;    --spacing-md: 16px;    --spacing-lg: 24px;    --spacing-xl: 32px;        /* 圆角 */    --radius-sm: 8px;    --radius-md: 12px;    --radius-lg: 20px;    --radius-xl: 28px;    --radius-full: 50%;        /* 安全区域 */    --safe-area-top: env(safe-area-inset-top);    --safe-area-bottom: env(safe-area-inset-bottom);        /* 动画 */    --transition-fast: 0.15s ease;    --transition-normal: 0.25s ease;    --transition-slow: 0.4s ease;}/* ========== 基础样式 ========== */* {    margin: 0;    padding: 0;    box-sizing: border-box;}html, body {    height: 100%;    font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;    background: var(--bg-primary);    color: var(--text-primary);    line-height: 1.6;    -webkit-font-smoothing: antialiased;    -moz-osx-font-smoothing: grayscale;    overflow-x: hidden;}/* 添加背景渐变效果 */body::before {    content: '';    position: fixed;    top: 0;    left: 0;    right: 0;    height: 50vh;    background: radial-gradient(ellipse at top, var(--primary-glow) 0%, transparent 70%);    pointer-events: none;    z-index: -1;}a {    color: var(--primary-light);    text-decoration: none;    transition: color var(--transition-fast);}a:hover {    color: var(--primary-color);}img {    max-width: 100%;    height: auto;}button {    font-family: inherit;    cursor: pointer;    border: none;    outline: none;    transition: all var(--transition-normal);}button:active {    transform: scale(0.96);}/* ========== 加载状态 ========== */.loading-container {    display: flex;    flex-direction: column;    align-items: center;    justify-content: center;    height: 100vh;    gap: var(--spacing-lg);}.loading-spinner {    width: 56px;    height: 56px;    border: 3px solid var(--bg-tertiary);    border-top-color: var(--primary-color);    border-radius: var(--radius-full);    animation: spin 0.8s linear infinite;}@keyframes spin {    to { transform: rotate(360deg); }}.loading-container p {    color: var(--text-secondary);    font-size: 15px;}/* ========== 错误页面 ========== */.error-container {    display: flex;    flex-direction: column;    align-items: center;    justify-content: center;    height: 100vh;    padding: var(--spacing-xl);    text-align: center;}.error-icon {    font-size: 72px;    margin-bottom: var(--spacing-lg);    animation: bounce 1s ease infinite;}@keyframes bounce {    0%, 100% { transform: translateY(0); }    50% { transform: translateY(-10px); }}.error-container h2 {    font-size: 24px;    font-weight: 600;    margin-bottom: var(--spacing-sm);}.error-container p {    color: var(--text-secondary);    margin-bottom: var(--spacing-xl);}.btn-back {    padding: var(--spacing-md) var(--spacing-xl);    background: var(--bg-tertiary);    color: var(--text-primary);    border-radius: var(--radius-lg);    font-weight: 500;    transition: all var(--transition-normal);}.btn-back:hover {    background: var(--primary-color);    text-decoration: none;    box-shadow: 0 8px 24px var(--primary-glow);}/* ========== 资料页面 ========== */.profile-container {    min-height: 100vh;    padding-bottom: 100px;    animation: fadeIn 0.5s ease;}@keyframes fadeIn {    from { opacity: 0; }    to { opacity: 1; }}.profile-header {    position: relative;    height: 220px;    overflow: visible;}.header-bg {    position: absolute;    top: 0;    left: 0;    right: 0;    bottom: 0;    background: linear-gradient(135deg, var(--primary-color), var(--primary-dark), #7c3aed);    opacity: 0.9;    overflow: hidden;    border-radius: 0 0 var(--radius-xl) var(--radius-xl);}.header-bg::after {    content: '';    position: absolute;    bottom: 0;    left: 0;    right: 0;    height: 80px;    background: linear-gradient(to top, var(--bg-primary), transparent);}.avatar-container {    position: absolute;    bottom: -55px;    left: 50%;    transform: translateX(-50%);    z-index: 10;}.avatar {    width: 110px;    height: 110px;    border-radius: var(--radius-full);    border: 4px solid var(--bg-primary);    object-fit: cover;    background: var(--bg-tertiary);    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);}.online-indicator {    position: absolute;    bottom: 8px;    right: 8px;    width: 22px;    height: 22px;    border-radius: var(--radius-full);    border: 3px solid var(--bg-primary);    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);}.online-indicator.online {    background: var(--success-color);    box-shadow: 0 0 12px var(--success-color);}.online-indicator.offline {    background: var(--text-muted);}.profile-info {    padding: 70px var(--spacing-lg) var(--spacing-lg);    text-align: center;}.display-name {    font-size: 26px;    font-weight: 700;    margin-bottom: var(--spacing-xs);    background: linear-gradient(135deg, var(--text-primary), var(--primary-light));    -webkit-background-clip: text;    -webkit-text-fill-color: transparent;    background-clip: text;}.username {    color: var(--text-secondary);    font-size: 15px;    margin-bottom: var(--spacing-md);}.bio {    color: var(--text-secondary);    font-size: 15px;    max-width: 320px;    margin: 0 auto var(--spacing-lg);    word-break: break-word;    line-height: 1.6;}/* 简介中的链接 */.bio-link {    color: var(--primary-light);    text-decoration: none;    border-bottom: 1px dashed var(--primary-light);    transition: all var(--transition-fast);}.bio-link:hover {    color: var(--primary-color);    border-bottom-style: solid;}.status-text {    display: inline-flex;    align-items: center;    gap: var(--spacing-sm);    padding: var(--spacing-sm) var(--spacing-md);    background: var(--bg-tertiary);    border-radius: var(--radius-xl);    font-size: 13px;    color: var(--text-secondary);}.status-text.online {    color: var(--success-color);    background: rgba(16, 185, 129, 0.1);}.group-stats {    display: flex;    justify-content: center;    gap: var(--spacing-xl);    margin-top: var(--spacing-lg);}.stat-item {    display: flex;    align-items: center;    gap: var(--spacing-sm);    color: var(--text-secondary);    font-size: 14px;}.stat-value {    font-weight: 700;    font-size: 18px;    color: var(--text-primary);}/* ========== 按钮样式 ========== */.profile-actions {    padding: 0 var(--spacing-lg);    display: flex;    flex-direction: column;    gap: var(--spacing-md);}.btn-primary, .btn-secondary {    display: flex;    align-items: center;    justify-content: center;    gap: var(--spacing-sm);    padding: var(--spacing-md) var(--spacing-lg);    border-radius: var(--radius-lg);    font-size: 16px;    font-weight: 600;}.btn-primary {    background: linear-gradient(135deg, var(--primary-color), var(--primary-dark));    color: var(--text-primary);    box-shadow: 0 8px 24px var(--primary-glow);}.btn-primary:hover {    transform: translateY(-2px);    box-shadow: 0 12px 32px var(--primary-glow);}.btn-secondary {    background: var(--bg-tertiary);    color: var(--text-primary);    border: 1px solid var(--bg-hover);}.btn-secondary:hover {    background: var(--bg-hover);    border-color: var(--primary-color);}.btn-icon {    font-size: 20px;}/* ========== 游客提示 ========== */.guest-tip {    margin: var(--spacing-xl) var(--spacing-lg);    padding: var(--spacing-lg);    background: var(--bg-card);    border-radius: var(--radius-lg);    text-align: center;    border: 1px solid var(--bg-tertiary);}.guest-tip p {    font-size: 14px;    color: var(--text-secondary);    margin: var(--spacing-xs) 0;}.guest-tip p:first-child {    color: var(--primary-light);    font-weight: 500;}/* ========== 下载横幅 ========== */.download-banner {    position: fixed;    bottom: 0;    left: 0;    right: 0;    padding: var(--spacing-md);    padding-bottom: calc(var(--spacing-md) + var(--safe-area-bottom));    background: var(--bg-secondary);    border-top: 1px solid var(--bg-tertiary);    display: flex;    align-items: center;    justify-content: space-between;    z-index: 100;    backdrop-filter: blur(20px);    -webkit-backdrop-filter: blur(20px);}.banner-content {    display: flex;    align-items: center;    gap: var(--spacing-md);}.banner-logo {    width: 44px;    height: 44px;    border-radius: var(--radius-md);    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);}.banner-title {    font-weight: 700;    font-size: 16px;}.banner-desc {    font-size: 13px;    color: var(--text-secondary);}.btn-download {    padding: var(--spacing-sm) var(--spacing-lg);    background: var(--primary-color);    color: var(--text-primary);    border-radius: var(--radius-lg);    font-size: 14px;    font-weight: 600;}.btn-download:hover {    text-decoration: none;    background: var(--primary-dark);}/* ========== 聊天页面 ========== */.chat-body {    display: flex;    flex-direction: column;    height: 100vh;    overflow: hidden;}.chat-header {    position: fixed;    top: 0;    left: 0;    right: 0;    height: calc(60px + var(--safe-area-top));    padding: var(--safe-area-top) var(--spacing-md) 0;    background: var(--bg-secondary);    border-bottom: 1px solid var(--bg-tertiary);    display: flex;    align-items: center;    gap: var(--spacing-sm);    z-index: 100;    backdrop-filter: blur(20px);    -webkit-backdrop-filter: blur(20px);}.chat-header .btn-back {    width: 40px;    height: 40px;    display: flex;    align-items: center;    justify-content: center;    background: transparent;    color: var(--text-primary);    border-radius: var(--radius-full);    padding: 0;}.chat-header .btn-back:hover {    background: var(--bg-tertiary);}.header-info {    flex: 1;    display: flex;    align-items: center;    gap: var(--spacing-md);}.header-avatar {    width: 42px;    height: 42px;    border-radius: var(--radius-full);    object-fit: cover;    background: var(--bg-tertiary);    border: 2px solid var(--bg-hover);}.header-name {    font-size: 17px;    font-weight: 600;}.header-status {    font-size: 13px;    color: var(--text-secondary);}/* ========== 消息列表 ========== */.message-list {    flex: 1;    overflow-y: auto;    padding: calc(70px + var(--safe-area-top)) var(--spacing-md) var(--spacing-md);    padding-bottom: 160px;    display: flex;    flex-direction: column;    gap: var(--spacing-md);}.load-more {    text-align: center;    padding: var(--spacing-md);}.load-more button {    padding: var(--spacing-sm) var(--spacing-lg);    background: var(--bg-tertiary);    color: var(--text-secondary);    border-radius: var(--radius-lg);    font-size: 14px;}.load-more button:hover {    background: var(--bg-hover);    color: var(--text-primary);}.empty-state {    flex: 1;    display: flex;    flex-direction: column;    align-items: center;    justify-content: center;    color: var(--text-muted);}.empty-icon {    font-size: 56px;    margin-bottom: var(--spacing-md);    opacity: 0.6;}/* ========== 消息气泡 ========== */.message-item {    display: flex;    gap: var(--spacing-sm);    max-width: 80%;    animation: slideIn 0.3s ease;}@keyframes slideIn {    from { opacity: 0; transform: translateY(12px); }    to { opacity: 1; transform: translateY(0); }}.message-item.self {    flex-direction: row-reverse;    align-self: flex-end;    padding-right: var(--spacing-sm);}.message-item.other {    align-self: flex-start;}.message-avatar {    width: 38px;    height: 38px;    border-radius: var(--radius-full);    object-fit: cover;    background: var(--bg-tertiary);    flex-shrink: 0;}.message-content {    display: flex;    flex-direction: column;    gap: 3px;}.message-item.self .message-content {    align-items: flex-end;}.message-sender {    font-size: 12px;    color: var(--text-secondary);    padding: 0 var(--spacing-sm);}.message-bubble {    padding: var(--spacing-md);    border-radius: var(--radius-lg);    word-break: break-word;    position: relative;}.message-item.self .message-bubble {    background: var(--bubble-self);    border-bottom-right-radius: var(--spacing-xs);    box-shadow: 0 4px 16px var(--primary-glow);}.message-item.other .message-bubble {    background: var(--bubble-other);    border-bottom-left-radius: var(--spacing-xs);}.message-text {    font-size: 15px;    line-height: 1.5;    white-space: pre-wrap;}/* 消息中的链接 */.message-link {    color: inherit;    text-decoration: underline;    text-decoration-style: dashed;    text-underline-offset: 2px;    transition: all var(--transition-fast);    word-break: break-all;}.message-link:hover {    text-decoration-style: solid;    opacity: 0.85;}/* 自己发送的消息链接 - 白色调 */.message-item.self .message-link {    color: rgba(255, 255, 255, 0.95);}/* 对方消息链接 - 主题色 */.message-item.other .message-link {    color: var(--primary-light);}.message-time {    font-size: 11px;    color: var(--text-muted);    padding: 0 var(--spacing-sm);}/* 图片消息 */.message-image {    max-width: 260px;    border-radius: var(--radius-md);    cursor: pointer;    transition: transform var(--transition-fast);}.message-image:hover {    transform: scale(1.02);}/* 视频消息 */.message-video {    position: relative;    max-width: 260px;    cursor: pointer;}.message-video img {    width: 100%;    border-radius: var(--radius-md);}.video-play-btn {    position: absolute;    top: 50%;    left: 50%;    transform: translate(-50%, -50%);    width: 52px;    height: 52px;    background: rgba(0, 0, 0, 0.6);    border-radius: var(--radius-full);    display: flex;    align-items: center;    justify-content: center;    color: white;    font-size: 22px;    backdrop-filter: blur(8px);    transition: all var(--transition-fast);}.message-video:hover .video-play-btn {    background: var(--primary-color);    transform: translate(-50%, -50%) scale(1.1);}/* 语音消息 */.message-audio {    display: flex;    align-items: center;    gap: var(--spacing-sm);    min-width: 140px;    padding: var(--spacing-sm);    cursor: pointer;}.audio-icon {    font-size: 22px;}.audio-waveform {    flex: 1;    height: 28px;    display: flex;    align-items: center;    gap: 3px;}.audio-bar {    width: 3px;    background: currentColor;    border-radius: 2px;    opacity: 0.6;    transition: height var(--transition-fast);}.message-audio.playing .audio-bar {    animation: waveform 0.5s ease-in-out infinite alternate;}@keyframes waveform {    from { height: 8px; }    to { height: 24px; }}.audio-duration {    font-size: 13px;    color: var(--text-secondary);}/* 文件消息 */.message-file {    display: flex;    align-items: center;    gap: var(--spacing-md);    padding: var(--spacing-md);    background: var(--bg-tertiary);    border-radius: var(--radius-md);    cursor: pointer;    min-width: 220px;    transition: background var(--transition-fast);}.message-file:hover {    background: var(--bg-hover);}.file-icon {    font-size: 36px;}.file-info {    flex: 1;    overflow: hidden;}.file-name {    font-size: 14px;    font-weight: 500;    white-space: nowrap;    overflow: hidden;    text-overflow: ellipsis;}.file-size {    font-size: 12px;    color: var(--text-secondary);}/* 位置消息 */.message-location {    display: flex;    flex-direction: column;    gap: var(--spacing-sm);    cursor: pointer;}.location-map {    width: 220px;    height: 130px;    background: var(--bg-tertiary);    border-radius: var(--radius-md);    display: flex;    align-items: center;    justify-content: center;    font-size: 40px;}.location-name {    font-size: 14px;    font-weight: 500;}.location-address {    font-size: 12px;    color: var(--text-secondary);}/* 联系人消息 */.message-contact {    display: flex;    align-items: center;    gap: var(--spacing-md);    padding: var(--spacing-md);    background: var(--bg-tertiary);    border-radius: var(--radius-md);    cursor: pointer;}.contact-avatar {    width: 48px;    height: 48px;    border-radius: var(--radius-full);}.contact-name {    font-size: 15px;    font-weight: 500;}/* 系统消息 */.message-system {    text-align: center;    padding: var(--spacing-sm) var(--spacing-lg);    color: var(--text-muted);    font-size: 13px;    background: var(--bg-card);    border-radius: var(--radius-lg);    margin: var(--spacing-sm) auto;}/* ========== 输入区域 ========== */.chat-input-area {    position: fixed;    bottom: 0;    left: 0;    right: 0;    background: linear-gradient(to top, var(--bg-secondary), rgba(19, 19, 43, 0.95));    border-top: 1px solid var(--bg-tertiary);    padding: var(--spacing-md);    padding-bottom: calc(var(--spacing-md) + var(--safe-area-bottom));    z-index: 100;    backdrop-filter: blur(24px);    -webkit-backdrop-filter: blur(24px);}.guest-limit-tip {    display: flex;    align-items: center;    gap: var(--spacing-sm);    padding: var(--spacing-sm) var(--spacing-md);    background: linear-gradient(135deg, rgba(245, 158, 11, 0.15), rgba(245, 158, 11, 0.05));    border: 1px solid rgba(245, 158, 11, 0.25);    border-radius: var(--radius-lg);    margin-bottom: var(--spacing-md);    font-size: 13px;}.guest-limit-tip .tip-icon {    font-size: 14px;}.guest-limit-tip span {    color: var(--warning-color);    flex: 1;}.guest-limit-tip .download-link {    color: var(--primary-light);    font-weight: 600;    padding: 4px 12px;    background: rgba(99, 102, 241, 0.2);    border-radius: var(--radius-md);    font-size: 12px;}.input-container {    display: flex;    align-items: center;    gap: var(--spacing-sm);}.input-wrapper {    flex: 1;    position: relative;    display: flex;    align-items: center;    background: var(--bg-tertiary);    border-radius: 24px;    padding: 0 16px;    min-height: 48px;    border: 2px solid transparent;    transition: all var(--transition-normal);}.input-wrapper:focus-within {    border-color: var(--primary-color);    background: var(--bg-card);    box-shadow: 0 0 0 4px var(--primary-glow);}.message-input {    flex: 1;    background: transparent;    border: none;    outline: none;    color: var(--text-primary);    font-size: 16px;    resize: none;    max-height: 100px;    min-height: 24px;    line-height: 24px;    padding: 12px 0;    margin: 0;}.message-input::placeholder {    color: var(--text-muted);    line-height: 24px;}.char-count {    position: absolute;    right: 12px;    top: 50%;    transform: translateY(-50%);    font-size: 11px;    color: var(--text-muted);    opacity: 0;    transition: opacity var(--transition-fast);    pointer-events: none;}.input-wrapper:focus-within .char-count {    opacity: 1;}/* 多行时字符计数移到底部 */.input-wrapper.multiline .char-count {    top: auto;    bottom: 8px;    transform: none;}.char-count.warning {    color: var(--warning-color);}.char-count.danger {    color: var(--danger-color);}.btn-send {    width: 48px;    height: 48px;    background: linear-gradient(135deg, var(--primary-color), var(--primary-dark));    color: var(--text-primary);    border-radius: var(--radius-full);    display: flex;    align-items: center;    justify-content: center;    flex-shrink: 0;    box-shadow: 0 4px 20px var(--primary-glow);    transition: all var(--transition-normal);}.btn-send .send-icon {    transition: transform var(--transition-fast);}.btn-send:disabled {    background: var(--bg-tertiary);    color: var(--text-muted);    box-shadow: none;}.btn-send:not(:disabled):hover {    transform: scale(1.08);    box-shadow: 0 6px 28px var(--primary-glow);}.btn-send:not(:disabled):hover .send-icon {    transform: translateX(2px);}.btn-send:not(:disabled):active {    transform: scale(0.95);}/* 功能按钮区 */.input-actions {    display: flex;    align-items: center;    justify-content: space-between;    padding-top: var(--spacing-md);    border-top: 1px solid var(--bg-tertiary);    margin-top: var(--spacing-md);}.action-btns {    display: flex;    gap: var(--spacing-xs);}.action-btn {    width: 36px;    height: 36px;    background: var(--bg-tertiary);    border-radius: var(--radius-md);    display: flex;    align-items: center;    justify-content: center;    font-size: 18px;    transition: all var(--transition-fast);    border: 1px solid transparent;}.action-btn:hover {    background: var(--bg-hover);    border-color: var(--bg-hover);    transform: scale(1.1);}.action-btn:active {    transform: scale(0.95);}.download-tip {    display: flex;    align-items: center;    gap: var(--spacing-xs);    padding: 6px 12px;    background: linear-gradient(135deg, rgba(99, 102, 241, 0.15), rgba(139, 92, 246, 0.1));    border: 1px solid rgba(99, 102, 241, 0.25);    border-radius: var(--radius-lg);    font-size: 12px;    color: var(--primary-light);    transition: all var(--transition-fast);}.download-tip:hover {    background: linear-gradient(135deg, rgba(99, 102, 241, 0.25), rgba(139, 92, 246, 0.2));    text-decoration: none;    transform: translateY(-1px);}.download-icon {    font-size: 14px;}/* ========== WebSocket 状态 ========== */.ws-status {    position: fixed;    top: calc(70px + var(--safe-area-top));    left: 50%;    transform: translateX(-50%);    display: flex;    align-items: center;    gap: var(--spacing-sm);    padding: var(--spacing-sm) var(--spacing-lg);    background: var(--bg-card);    border-radius: var(--radius-xl);    font-size: 13px;    color: var(--text-secondary);    z-index: 99;    backdrop-filter: blur(12px);    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);}.ws-dot {    width: 8px;    height: 8px;    border-radius: var(--radius-full);    background: var(--warning-color);    animation: pulse 1.5s infinite;}.ws-status.connected .ws-dot {    background: var(--success-color);    animation: none;}.ws-status.error .ws-dot {    background: var(--danger-color);    animation: none;}@keyframes pulse {    0%, 100% { opacity: 1; transform: scale(1); }    50% { opacity: 0.5; transform: scale(0.8); }}/* ========== Toast 提示 ========== */.toast {    position: fixed;    bottom: 180px;    left: 50%;    transform: translateX(-50%) translateY(20px);    padding: var(--spacing-md) var(--spacing-xl);    background: var(--bg-card);    color: var(--text-primary);    border-radius: var(--radius-xl);    font-size: 14px;    font-weight: 500;    opacity: 0;    transition: all var(--transition-normal);    z-index: 200;    pointer-events: none;    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);}.toast.show {    opacity: 1;    transform: translateX(-50%) translateY(0);}.toast.error {    background: linear-gradient(135deg, var(--danger-color), #dc2626);}.toast.success {    background: linear-gradient(135deg, var(--success-color), #059669);}/* ========== 图片/视频预览 ========== */.image-viewer, .video-player {    position: fixed;    top: 0;    left: 0;    right: 0;    bottom: 0;    z-index: 300;    display: flex;    align-items: center;    justify-content: center;}.viewer-overlay, .player-overlay {    position: absolute;    top: 0;    left: 0;    right: 0;    bottom: 0;    background: rgba(0, 0, 0, 0.95);    backdrop-filter: blur(20px);}.viewer-image, .player-video {    position: relative;    max-width: 92%;    max-height: 92%;    z-index: 1;    border-radius: var(--radius-md);}.viewer-close, .player-close {    position: absolute;    top: calc(var(--spacing-lg) + var(--safe-area-top));    right: var(--spacing-lg);    width: 44px;    height: 44px;    background: var(--bg-tertiary);    color: var(--text-primary);    border-radius: var(--radius-full);    font-size: 24px;    z-index: 2;    display: flex;    align-items: center;    justify-content: center;}.viewer-close:hover, .player-close:hover {    background: var(--danger-color);}/* ========== 应用介绍页面 ========== */.app-intro-container {    min-height: 100vh;    display: flex;    align-items: flex-start;    justify-content: center;    padding: calc(var(--spacing-xl) * 1.25) var(--spacing-xl) calc(var(--spacing-xl) * 1.5);    background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 100%);}.app-intro-content {    width: 100%;    max-width: 1200px;    text-align: center;    animation: slideUp 0.5s ease;    margin-left: auto;    margin-right: auto;}.app-intro-grid {    display: grid;    gap: var(--spacing-xl);    grid-template-columns: 1fr;    align-items: stretch;}.app-intro-main {    display: flex;    flex-direction: column;    gap: var(--spacing-xl);}.app-intro-header {    margin-bottom: var(--spacing-xl);}.mobile-only {    display: block;}.desktop-only {    display: none;}.app-logo {    width: 120px;    height: 120px;    margin: 0 auto var(--spacing-lg);    /*background: linear-gradient(135deg, var(--primary-color), var(--primary-light));*/    border-radius: var(--radius-xl);    display: flex;    align-items: center;    justify-content: center;    /*box-shadow: 0 20px 60px rgba(99, 102, 241, 0.4);*/    position: relative;    overflow: hidden;}.app-logo::before {    content: '';    position: absolute;    top: -50%;    left: -50%;    width: 200%;    height: 200%;    background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, transparent 70%);    animation: rotate 20s linear infinite;}.app-logo img {    width: 80px;    height: 80px;    border-radius: var(--radius-md);    position: relative;    z-index: 1;}.app-logo-placeholder {    font-size: 64px;    position: relative;    z-index: 1;}.app-title {    font-size: 36px;    font-weight: 700;    color: var(--text-primary);    margin-bottom: var(--spacing-sm);    background: linear-gradient(135deg, var(--primary-light), var(--primary-color));    -webkit-background-clip: text;    -webkit-text-fill-color: transparent;    background-clip: text;}.app-subtitle {    font-size: 18px;    color: var(--text-secondary);    margin-bottom: var(--spacing-xl);}.app-features {    margin-bottom: var(--spacing-xl);    text-align: left;}.feature-item {    display: flex;    align-items: flex-start;    gap: var(--spacing-md);    padding: var(--spacing-lg);    background: var(--bg-card);    border-radius: var(--radius-md);    margin-bottom: var(--spacing-md);    transition: all var(--transition-fast);}.feature-item:hover {    background: var(--bg-hover);    transform: translateY(-2px);    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);}.feature-icon {    font-size: 32px;    flex-shrink: 0;    width: 48px;    height: 48px;    display: flex;    align-items: center;    justify-content: center;    background: rgba(99, 102, 241, 0.1);    border-radius: var(--radius-md);}.feature-content h3 {    font-size: 18px;    font-weight: 600;    color: var(--text-primary);    margin-bottom: var(--spacing-xs);}.feature-content p {    font-size: 14px;    color: var(--text-secondary);    line-height: 1.6;}.app-download-section {    margin-top: var(--spacing-xl);}.desktop-download-panel {    padding: var(--spacing-xl);    background: var(--bg-card);    border-radius: var(--radius-lg);    border: 1px solid var(--bg-tertiary);    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25);    align-self: stretch;}.desktop-panel-header {    display: flex;    flex-direction: column;    gap: var(--spacing-xs);    margin-bottom: var(--spacing-lg);    text-align: left;}.desktop-subtitle {    font-size: 13px;    color: var(--text-secondary);    letter-spacing: 0.5px;}.desktop-title {    font-size: 24px;    font-weight: 700;}.desktop-desc {    color: var(--text-secondary);    font-size: 14px;    line-height: 1.6;}.desktop-download-grid {    display: grid;    gap: var(--spacing-md);}.desktop-download-card {    padding: var(--spacing-lg);    background: var(--bg-secondary);    border-radius: var(--radius-md);    border: 1px solid var(--bg-tertiary);    display: flex;    flex-direction: column;    gap: var(--spacing-sm);    transition: all var(--transition-fast);}.desktop-download-card:hover {    transform: translateY(-2px);    box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28);}.desktop-download-card.is-recommend {    border-color: var(--primary-color);    box-shadow: 0 12px 32px var(--primary-glow);}.download-card-header {    display: flex;    align-items: center;    gap: var(--spacing-md);}.download-card-icon {    width: 44px;    height: 44px;    border-radius: var(--radius-md);    background: rgba(255, 255, 255, 0.04);    display: flex;    align-items: center;    justify-content: center;    font-size: 24px;}.download-card-header h3 {    font-size: 18px;    margin-bottom: 2px;}.download-card-header p {    color: var(--text-secondary);    font-size: 13px;}.download-card-desc {    color: var(--text-secondary);    font-size: 14px;    line-height: 1.6;}.btn-download-card {    width: 100%;    margin-top: var(--spacing-sm);    padding: var(--spacing-md);    border-radius: var(--radius-md);    border: 1px solid var(--bg-hover);    background: var(--bg-tertiary);    color: var(--text-primary);    font-size: 15px;    font-weight: 600;    transition: all var(--transition-fast);}.btn-download-card:hover {    background: var(--bg-hover);    border-color: var(--primary-color);    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);}.download-recommend {    margin-left: auto;    padding: 4px 8px;    border-radius: var(--radius-sm);    background: rgba(99, 102, 241, 0.15);    color: var(--primary-light);    font-size: 12px;    font-weight: 600;    display: none;}.desktop-download-card.is-recommend .download-recommend {    display: inline-flex;}.desktop-hint {    margin-top: var(--spacing-md);    color: var(--text-muted);    font-size: 12px;}.btn-download-primary {    width: 100%;    padding: var(--spacing-md) var(--spacing-xl);    background: linear-gradient(135deg, var(--primary-color), var(--primary-light));    border: none;    border-radius: var(--radius-md);    color: white;    font-size: 18px;    font-weight: 600;    cursor: pointer;    transition: all var(--transition-fast);    display: flex;    align-items: center;    justify-content: center;    gap: var(--spacing-sm);    box-shadow: 0 8px 24px rgba(99, 102, 241, 0.4);}.btn-download-primary:hover {    transform: translateY(-2px);    box-shadow: 0 12px 32px rgba(99, 102, 241, 0.5);}.btn-download-primary:active {    transform: translateY(0);}.btn-download-primary .btn-icon {    font-size: 24px;}.download-hint {    margin-top: var(--spacing-lg);    font-size: 13px;    color: var(--text-muted);}.download-hint code {    padding: 2px 6px;    background: var(--bg-tertiary);    border-radius: var(--radius-sm);    font-family: 'Monaco', 'Menlo', 'Courier New', monospace;    color: var(--primary-light);}@keyframes rotate {    from { transform: rotate(0deg); }    to { transform: rotate(360deg); }}/* ========== 响应式适配 ========== */@media (min-width: 768px) {    .profile-container {        max-width: 500px;        margin: 0 auto;    }    .chat-header, .chat-input-area {        max-width: 800px;        left: 50%;        transform: translateX(-50%);        border-radius: 0 0 var(--radius-lg) var(--radius-lg);    }        .chat-input-area {        border-radius: var(--radius-lg) var(--radius-lg) 0 0;    }    .message-list {        max-width: 800px;        margin: 0 auto;    }        .ws-status {        left: 50%;        transform: translateX(-50%);    }}@media (min-width: 992px) {    .app-intro-container {        padding: var(--spacing-xl) var(--spacing-xl) calc(var(--spacing-xl) * 1.5);    }    .app-intro-content {        text-align: center;    }    .app-intro-grid {        grid-template-columns: 1fr;        align-items: center;        column-gap: var(--spacing-xl);    }    .app-intro-header {        text-align: center;    }    .app-features {        display: block;    }    .app-download-section {        max-width: 420px;        margin-left: auto;        margin-right: auto;    }    .mobile-only {        display: none;    }    .desktop-only {        display: block;    }}/* ========== 滚动条美化 ========== */::-webkit-scrollbar {    width: 6px;}::-webkit-scrollbar-track {    background: transparent;}::-webkit-scrollbar-thumb {    background: var(--bg-tertiary);    border-radius: 3px;}::-webkit-scrollbar-thumb:hover {    background: var(--bg-hover);}/* ========== App 唤起提示 ========== */.app-open-tip {    position: fixed;    top: 0;    left: 0;    right: 0;    bottom: 0;    background: rgba(0, 0, 0, 0.7);    display: flex;    align-items: center;    justify-content: center;    z-index: 9999;    backdrop-filter: blur(8px);    -webkit-backdrop-filter: blur(8px);    animation: fadeIn 0.2s ease;}.app-tip-content {    display: flex;    flex-direction: column;    align-items: center;    gap: var(--spacing-md);    padding: var(--spacing-xl);    background: var(--bg-card);    border-radius: var(--radius-lg);    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);}.app-tip-spinner {    width: 40px;    height: 40px;    border: 3px solid var(--bg-tertiary);    border-top-color: var(--primary-color);    border-radius: var(--radius-full);    animation: spin 0.8s linear infinite;}.app-tip-content span {    color: var(--text-secondary);    font-size: 15px;}