/* ============================================= 全局 Reset & 变量 ============================================= */ :root { --bg: #f4f5f7; --sidebar-bg: #ffffff; --card-bg: #ffffff; --border: #e8eaed; --text: #1a1d23; --text-sub: #6b7280; --text-muted: #9ca3af; --accent: #0bc4e3; --accent-2: #1677ff; --accent-green: #52c41a; --accent-red: #ff4d4f; --accent-gold: #faad14; --sidebar-w: 13vw; --titlebar-h: 4vh; --radius: 10px; --shadow: 0 2px 12px rgba(0,0,0,.07); } * { margin:0; padding:0; box-sizing:border-box; outline:none; } html { width:100%; height:100%; font-size: calc(12px + 0.3vw); } body { font-family: 'Microsoft YaHei', 'PingFang SC', sans-serif; background: var(--bg); color: var(--text); width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: column; font-size: 1rem; } .app-shell { flex: 1; min-height: 0; width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: column; background: var(--bg); } /* ============================================= 顶部标题栏 ============================================= */ .titlebar { height: clamp(30px, 4vh, 44px); background: #ffffff; border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; padding: 0 1vw 0 1.2vw; flex-shrink: 0; user-select: none; -webkit-app-region: drag; } .titlebar-left { display: flex; align-items: center; gap: 8px; } .titlebar-logo { width: 22px; height: 22px; object-fit: contain; display: block; flex-shrink: 0; } .titlebar-title { font-size: 16px; color: var(--text); font-weight: 700; letter-spacing: .5px; } .titlebar-title em { font-style: italic; color: #1677ff; } .titlebar-btns { display: flex; gap: 6px; -webkit-app-region: no-drag; } .tb-btn { width: 28px; height: 22px; border: none; border-radius: 5px; background: transparent; color: var(--text-sub); font-size: 13px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; line-height: 1; } .tb-btn:hover { background: #f0f0f0; } .tb-close:hover { background: #ff4d4f; color: #fff; } .tb-min:hover { background: #e8eaed; } /* ============================================= app-body:标题栏下方整体 ============================================= */ .app-body { flex: 1; display: flex; overflow: hidden; min-height: 0; } /* ============================================= 侧边栏 ============================================= */ .sidebar { width: 230px; background: var(--sidebar-bg); border-right: 1px solid var(--border); display: flex; flex-direction: column; flex-shrink: 0; } .logo { padding: 22px 20px 18px; border-bottom: 1px solid var(--border); display: flex; justify-content: center; align-items: center; } .logo-text { font-size: 20px; font-weight: 400; color: var(--text); letter-spacing: 1px; } .logo-em { font-style: italic; font-weight: 800; color: #1677ff; font-size: 26px; margin-right: 1px; } .nav { flex: 1; padding: 16px 10px; display: flex; flex-direction: column; gap: 8px; } .nav-item { display: flex; align-items: center; gap: 14px; padding: 0 16px; height: 54px; min-height: 54px; box-sizing: border-box; cursor: pointer; color: var(--text-sub); text-decoration: none; font-size: 15px; position: relative; border-radius: 10px; transition: background 0.15s, color 0.15s, transform 0.18s cubic-bezier(.34,1.56,.64,1); transform-origin: center; } /* emoji 图标 */ .nav-icon { font-size: 20px; line-height: 1; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; } /* hover:整个按钮轻微放大 */ .nav-item:hover { background: #F0F6FC; color: var(--text); transform: scale(1.03); } /* active:背景 + 蓝色文字 + 左侧蓝条 */ .nav-item.active { background: #F0F6FC; color: #1677ff; font-weight: 600; transform: scale(1); border-left: 5px solid #1677ff; padding-left: 11px; } /* 非active时左边透明占位,保持宽度一致 */ .nav-item:not(.active) { border-left: 5px solid transparent; padding-left: 11px; } /* 删除::before,改用border-left实现 */ .nav-item.active::before { display: none; } /* ============================================= 主内容区 & 页面切换 ============================================= */ .main { flex: 1; overflow: hidden; position: relative; min-width: 0; display: flex; flex-direction: column; } .page { flex: 1; width: 100%; overflow-y: auto; padding: 24px; display: none; min-height: 0; box-sizing: border-box; } .page.active { display: flex; flex-direction: column; } /* 皮肤库、美化库不需要 padding,各自控制 */ #page-skins.active, #page-beauty.active { padding: 0; } /* 工具箱、设置页用 block 滚动 */ #page-settings.active, #page-tools.active { display: block; overflow-y: auto; padding: 0; } .page::-webkit-scrollbar { width: 5px; } .page::-webkit-scrollbar-track { background: transparent; } .page::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; } /* ============================================= 通用卡片 ============================================= */ .card { background: var(--card-bg); border-radius: var(--radius); border: 1px solid var(--border); padding: 20px; box-shadow: var(--shadow); } .card-title { font-size: 14px; font-weight: 600; color: var(--text); margin-bottom: 14px; display: flex; align-items: center; gap: 6px; } /* ============================================= 主页布局 ============================================= */ .home-grid { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: auto 1fr; gap: 16px; width: 100%; align-content: start; } /* 欢迎横幅 */ .welcome-banner { grid-column: 1 / -1; background: linear-gradient(135deg, #0bc4e3 0%, #1677ff 100%); border-radius: var(--radius); padding: 22px 28px; color: #fff; display: flex; align-items: center; justify-content: space-between; } .welcome-title { font-size: 22px; font-weight: 700; display: flex; align-items: center; gap: 10px; } .welcome-sub { margin-top: 6px; font-size: 13px; opacity: .85; } .welcome-actions { display: flex; gap: 10px; } .btn { padding: 8px 16px; border-radius: 6px; font-size: 13px; cursor: pointer; border: none; font-family: inherit; transition: all 0.15s; display: inline-flex; align-items: center; gap: 5px; } .btn-primary { background: var(--accent-2); color: #fff; } .btn-primary:hover { background: #0958d9; } .btn-white { background: rgba(255,255,255,.9); color: var(--accent-2); } .btn-white:hover { background: #fff; } .btn-outline { background: transparent; border: 1px solid var(--border); color: var(--text-sub); } .btn-outline:hover { border-color: var(--accent); color: var(--accent); } .btn-danger { background: #fff0f0; border: 1px solid #ffccc7; color: var(--accent-red); } .btn-danger:hover { background: #ffccc7; } /* ============================================= 主页 - 账号信息卡 ============================================= */ .account-card {} .account-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--border); font-size: 13px; } .account-row:last-child { border-bottom: none; } .account-label { color: var(--text-sub); } .account-value { color: var(--text); font-weight: 500; } .account-value.blue { color: var(--accent-2); } .account-value.green { color: var(--accent-green); } .account-actions { display: flex; gap: 10px; margin-top: 16px; } /* 状态徽章 */ .badge { display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: 11px; font-weight: 600; } .badge-green { background: #f6ffed; color: var(--accent-green); border: 1px solid #b7eb8f; } .badge-red { background: #fff1f0; color: var(--accent-red); border: 1px solid #ffa39e; } /* ============================================= 主页 - 游戏状态卡 ============================================= */ .game-status-card .status-row { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--border); font-size: 13px; } .game-status-card .status-row:last-child { border-bottom: none; } .status-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 18px; flex-shrink: 0; } .status-icon.blue { background: #e6f4ff; } .status-icon.green { background: #f6ffed; } .status-icon.gold { background: #fffbe6; } .status-info { flex: 1; } .status-info .s-label { color: var(--text-muted); font-size: 12px; } .status-info .s-value { color: var(--text); font-weight: 600; margin-top: 1px; } /* ============================================= 主页 - 新闻资讯卡(右下角) ============================================= */ .news-card { grid-column: 2; grid-row: 2; } .news-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .news-more { font-size: 12px; color: var(--accent-2); cursor: pointer; text-decoration: none; } /* 新闻列表可滚动区域,最多显示8条,支持鼠标滚轮 */ .news-list-scroll { max-height: 320px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #d1d5db transparent; } .news-list-scroll::-webkit-scrollbar { width: 4px; } .news-list-scroll::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 2px; } .news-item { display: flex; align-items: center; gap: 10px; padding: 11px 8px; border-bottom: 1px solid var(--border); border-radius: 6px; cursor: pointer; transition: background 0.15s, transform 0.22s cubic-bezier(.25,.46,.45,.94); } .news-item:last-child { border-bottom: none; } .news-item:hover { background: #f0f6ff; transform: translateY(-2px); } .news-item:hover .news-title { color: var(--accent-2); } /* 标签:新闻/视频/公告 */ .news-tag { flex-shrink: 0; font-size: 11px; padding: 1px 6px; border: 1px solid; border-radius: 3px; font-weight: 500; line-height: 18px; } .news-thumb { width: 96px; height: 60px; border-radius: 6px; object-fit: cover; flex-shrink: 0; background: #e8eaed; } .news-content { flex: 1; min-width: 0; } .news-title { flex: 1; min-width: 0; font-size: 13px; color: var(--text); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; transition: color 0.15s; } .news-date { flex-shrink: 0; font-size: 12px; color: var(--text-muted); white-space: nowrap; } .news-thumb { width: 96px; height: 60px; border-radius: 6px; object-fit: cover; flex-shrink: 0; background: #e8eaed; } .news-content { flex: 1; min-width: 0; } .news-title { font-size: 13px; color: var(--text); line-height: 1.5; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; transition: color 0.15s; font-weight: 500; } .news-date { font-size: 12px; color: var(--text-muted); margin-top: 4px; } /* ============================================= 皮肤库 - 英雄列表页 ============================================= */ .skins-toolbar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; flex-wrap: nowrap; gap: 10px; background: #ffffff; border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 16px; box-shadow: var(--shadow); flex-shrink: 0; } .role-tabs { display: flex; gap: 6px; flex-wrap: wrap; flex: 1; } .role-tab { width: 88px; height: 40px; border-radius: 20px; font-size: 14px; cursor: pointer; border: 1.5px solid #e8eaed; background: #ffffff; color: #6b7280; display: flex; align-items: center; justify-content: center; gap: 5px; transition: transform 0.18s cubic-bezier(.34,1.56,.64,1), border-color 0.15s, color 0.15s, box-shadow 0.15s; white-space: nowrap; flex-shrink: 0; user-select: none; } .role-tab span:first-child { font-size: 18px; line-height: 1; } .role-tab-icon { font-size: 18px; line-height: 1; } .role-tab:hover { transform: scale(1.06); border-color: #c0c8d8; color: var(--text); box-shadow: 0 2px 8px rgba(0,0,0,0.08); } .role-tab.active { background: #ffffff; color: #1677ff; border-color: #1677ff; border-width: 2px; font-weight: 600; transform: scale(1); box-shadow: none; } /* 右侧:英雄数 + 搜索框 */ .champ-search-box { display: flex; align-items: center; gap: 10px; flex-shrink: 0; } .champ-count { font-size: 14px; color: var(--text-muted); white-space: nowrap; padding-left: 12px; border-left: 1px solid var(--border); } .champ-count-num { color: var(--accent-2); font-weight: 600; } .search-input { width: 240px; height: 40px; padding: 0 14px; border: 1px solid var(--border); border-radius: 8px; font-size: 14px; font-family: inherit; outline: none; color: var(--text-sub); background: #f5f6f8; transition: border-color 0.15s, background 0.15s, box-shadow 0.15s; } .search-input::placeholder { color: #b0b8c4; } .search-input:focus { background: #fff; border-color: #1677FF; box-shadow: 0 0 0 2px rgba(22,119,255,0.12); } /* 英雄网格 */ /* 英雄网格 - 自适应,随窗口宽度变化 */ .champ-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(80px, 9vw, 160px), 1fr)); gap: clamp(8px, 1vw, 16px); padding: 0 4px; /* 防止卡片阴影被裁切 */ } .champ-card { border-radius: 12px; overflow: hidden; /* hidden防止图片超出圆角 */ cursor: pointer; background: var(--card-bg); border: 1.5px solid transparent; box-shadow: 0 2px 8px rgba(0,0,0,.08); transition: box-shadow 0.3s ease, transform 0.3s cubic-bezier(.25,.46,.45,.94), border-color 0.2s; transform: translateZ(0); will-change: transform; } .champ-card:hover { box-shadow: 0 10px 28px rgba(0,0,0,.18); transform: translateY(-6px) scale(1.03); border-color: rgba(22,119,255,0.3); } /* 图片单独包一层限制溢出 */ .champ-card .champ-img-wrap { border-radius: 0; /* 父级已有overflow:hidden,不需要再单独设圆角 */ overflow: hidden; width: 100%; aspect-ratio: 1; position: relative; } /* hover 时底部渐变黑色遮罩 */ .champ-card .champ-img-wrap::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 50%; background: linear-gradient(to top, rgba(0,0,0,0.55) 0%, transparent 100%); opacity: 0; transition: opacity 0.25s ease; pointer-events: none; border-radius: 0; } .champ-card:hover .champ-img-wrap::after { opacity: 1; } .champ-card img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.3s cubic-bezier(.34,1.56,.64,1); } .champ-card:hover img { transform: scale(1.12); } .champ-card .champ-name { text-align: center; font-size: 12px; padding: 7px 4px 10px; /* 底部留白10px */ color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; background: var(--card-bg); border-radius: 0; } /* ============================================= 皮肤详情页 - 对齐参考项目 ============================================= */ /* 顶部信息栏 */ .sp-info-bar { flex-shrink: 0; width: auto; /* 配合 margin: 0 16px 使用,不用 width:100% 避免溢出 */ height: clamp(46px, 6vh, 62px); background: var(--card-bg); border: 1px solid var(--border); border-radius: 12px; display: flex; align-items: center; justify-content: space-between; padding: 0 clamp(12px, 1.5vw, 22px); margin-bottom: 10px; box-sizing: border-box; } .sp-info-left { display: flex; align-items: center; gap: 14px; } .sp-info-avatar { width: 38px; height: 38px; border-radius: 50%; object-fit: cover; background: var(--border); border: 2px solid var(--border); } .sp-info-name { font-size: 17px; font-weight: 700; color: var(--text); } .sp-info-sub { font-size: 12px; color: var(--text-sub); background: var(--bg); border: 1px solid var(--border); border-radius: 12px; padding: 3px 10px; margin-left: 4px; } .sp-info-right { display: flex; align-items: center; gap: 10px; } .sp-info-count { display: flex; align-items: center; gap: 6px; padding: 4px 12px; background: rgba(22,93,255,0.08); border: 1.5px solid rgba(22,93,255,0.2); border-radius: 20px; font-size: 12px; font-weight: 600; color: var(--accent-2); } .sp-info-count svg { width: 14px; height: 14px; fill: var(--accent-2); flex-shrink: 0; } .sp-back-btn { display: flex; align-items: center; gap: 5px; height: 30px; padding: 0 12px; border: 1.5px solid var(--border); border-radius: 7px; background: var(--bg); color: var(--text); font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.15s; } .sp-back-btn svg { width: 15px; height: 15px; fill: var(--text); } .sp-back-btn:hover { background: var(--accent-2); color: #fff; border-color: var(--accent-2); } .sp-back-btn:hover svg { fill: #fff; } /* 大图画布区域 */ .sp-canvas { flex-shrink: 0; width: auto; /* 配合 margin: 0 16px 使用 */ height: clamp(360px, 52vh, 660px); position: relative; background: #0a0e14; border-radius: 14px; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; } /* 大图铺满整个canvas */ .sp-bg-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 15%; /* 让人物上半身/脸部更完整显示 */ display: block; transition: opacity 0.35s ease, transform 0.6s cubic-bezier(.25,.46,.45,.94); transform-origin: center top; } .sp-canvas:hover .sp-bg-img { transform: scale(1.04); } .sp-bg-loading { position: absolute; inset: 0; z-index: 5; background: rgba(10,14,20,0.65); display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity .2s; } .sp-bg-loading.show { opacity: 1; } /* ── 炫彩圆点行:右上角,从右滑入 ── */ .sp-chroma-row { position: absolute; top: 12px; right: 12px; display: flex; align-items: center; gap: 6px; flex-wrap: nowrap; z-index: 20; background: rgba(10,14,30,0.7); padding: 7px 12px; border-radius: 22px; backdrop-filter: blur(6px); border: 1px solid rgba(255,255,255,0.15); transform: translateX(20px); opacity: 0; transition: transform 0.32s cubic-bezier(.34,1.56,.64,1), opacity 0.25s ease; } .sp-chroma-row.visible { transform: translateX(0); opacity: 1; } .sp-chroma-dot { width: 20px; height: 20px; border-radius: 50%; cursor: pointer; flex-shrink: 0; border: 2px solid rgba(255,255,255,0.3); transition: transform 0.18s, border-color 0.18s, box-shadow 0.18s; box-shadow: 0 1px 4px rgba(0,0,0,0.5); } .sp-chroma-dot:hover { transform: scale(1.3); border-color: #fff; } .sp-chroma-dot.active { border-color: #fff; box-shadow: 0 0 0 2.5px rgba(255,255,255,0.45); transform: scale(1.2); } /* ── 炫彩预览卡片:右上角,蓝色边框,从右滑入 ── */ .sp-chroma-card-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 底部信息条 */ .sp-bottom-bar { position: absolute; bottom: 0; left: 0; right: 0; z-index: 8; background: linear-gradient(0deg, rgba(0,0,0,0.92) 0%, rgba(0,0,0,0.55) 70%, transparent 100%); padding-top: 60px; } .sp-name-box { display: flex; flex-direction: column; align-items: flex-start; padding: 0 20px 10px; } .sp-skin-name { font-size: 26px; font-weight: 700; color: #fff; text-shadow: 0 2px 10px rgba(0,0,0,0.7); line-height: 1.2; margin-bottom: 5px; } .sp-skin-desc { font-size: 12px; color: rgba(255,255,255,0.72); line-height: 1.65; max-width: 55%; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } .sp-action-row { display: flex; gap: 10px; margin-top: 14px; } .sp-btn-apply { height: 40px; padding: 0 22px; background: var(--accent-2); color: #fff; border: none; border-radius: 7px; font-size: 13px; font-weight: 700; cursor: pointer; transition: transform 0.3s cubic-bezier(.25,.46,.45,.94), background 0.15s, box-shadow 0.3s; } .sp-btn-apply:hover { background: #0958d9; transform: translateY(-4px); box-shadow: 0 8px 20px rgba(22,119,255,0.45); } .sp-btn-apply:active { transform: translateY(-1px); } .sp-btn-career { height: 40px; padding: 0 22px; background: rgba(255,255,255,0.12); color: #fff; border: 1.5px solid rgba(255,255,255,0.35); border-radius: 7px; font-size: 13px; font-weight: 700; cursor: pointer; backdrop-filter: blur(6px); transition: transform 0.3s cubic-bezier(.25,.46,.45,.94), background 0.15s, box-shadow 0.3s; } .sp-btn-career:hover { background: rgba(255,255,255,0.22); transform: translateY(-4px); box-shadow: 0 8px 20px rgba(0,0,0,0.25); } .sp-btn-career:active { transform: translateY(-1px); } /* 缩略图横向滚动行 */ .sp-thumb-row { display: flex; align-items: center; background: rgba(0,0,0,0.55); padding: 10px 0; gap: 0; } .sp-arrow-btn { flex-shrink: 0; width: 36px; height: 36px; border-radius: 50%; background: rgba(255,255,255,0.15); border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; margin: 0 8px; transition: background 0.2s, transform 0.2s; } .sp-arrow-btn svg { width: 20px; height: 20px; fill: #fff; } .sp-arrow-btn:hover { background: var(--accent-2); transform: scale(1.1); } .sp-thumb-scroll { flex: 1; min-width: 0; height: 160px; overflow: hidden; position: relative; } .sp-thumb-track { display: flex; gap: 8px; padding: 8px 8px; height: 100%; align-items: flex-start; box-sizing: border-box; transition: transform 0.4s cubic-bezier(0.4,0,0.2,1); will-change: transform; cursor: grab; user-select: none; flex-wrap: wrap; } .sp-thumb-track.dragging { cursor: grabbing; transition: none; } /* 单个缩略图 - 对齐参考图白色卡片 */ .sp-thumb { flex-shrink: 0; width: 100%; border-radius: 10px; overflow: hidden; cursor: pointer; border: 1.5px solid transparent; position: relative; background: #ffffff; box-shadow: 0 1px 4px rgba(0,0,0,0.08); transition: border-color 0.18s, box-shadow 0.18s; display: flex; flex-direction: column; } .sp-thumb:hover img { transform: scale(1.1); } .sp-thumb:hover .sp-thumb-img-wrap::after { opacity: 1; } .sp-thumb.active { border-color: #1E88D8; box-shadow: 0 0 0 1px rgba(30,136,216,0.2); } .sp-thumb.active .sp-thumb-name { color: #1E88D8; } /* 图片容器 */ .sp-thumb-img-wrap { position: relative; overflow: hidden; border-radius: 8px 8px 0 0; aspect-ratio: 1; width: 100%; } .sp-thumb-img-wrap::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,0.45) 0%, transparent 60%); opacity: 0; transition: opacity 0.22s ease; pointer-events: none; } .sp-thumb img { width: 100%; height: 100%; object-fit: cover; object-position: center top; display: block; transition: transform 0.28s cubic-bezier(.34,1.56,.64,1); } .sp-thumb-name { background: #fff; padding: 5px 5px 6px; font-size: 11px; font-weight: 400; color: #333333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: center; border-top: 1px solid rgba(0,0,0,0.05); transition: color 0.18s; } /* 角标 */ .sp-thumb-corner { position: absolute; top: 5px; right: 5px; min-width: 24px; height: 24px; background: #1890ff; border-radius: 7px; display: flex; align-items: center; justify-content: center; padding: 0 4px; z-index: 4; box-shadow: 0 2px 6px rgba(24,144,255,0.5); } .sp-thumb-corner span { font-size: 13px; font-weight: 800; color: #fff; line-height: 1; } .sp-thumb-quest { position: absolute; top: 5px; right: 5px; padding: 5px 4px; background: #e53935; border-radius: 5px; z-index: 4; writing-mode: vertical-rl; text-orientation: upright; letter-spacing: 1px; } .sp-thumb-quest span { font-size: 11px; font-weight: 700; color: #fff; line-height: 1; } /* ============================================= /* ============================================= Toast 通知框 - 顶部居中,支持多个叠加 ============================================= */ #toast-container { position: fixed; top: 16px; left: 50%; transform: translateX(-50%); z-index: 99999; display: flex; flex-direction: column; align-items: center; gap: 8px; pointer-events: none; white-space: nowrap; } .toast { display: inline-flex; align-items: center; gap: 12px; background: #ffffff; border-radius: 14px; box-shadow: 0 4px 16px rgba(0,0,0,0.10); border-left: 4px solid #52c41a; padding: 13px 22px 13px 16px; pointer-events: auto; position: relative; overflow: hidden; animation: toastIn 0.38s cubic-bezier(.34,1.56,.64,1) forwards; } .toast.err { border-left-color: #1677ff; } .toast.leaving { animation: toastOut 0.28s ease forwards; } @keyframes toastIn { from { opacity: 0; transform: translateY(-16px) scale(0.94); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes toastOut { from { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 0; transform: translateY(-10px) scale(0.96); } } .toast-icon { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 17px; font-weight: 700; background: #f0fff4; color: #52c41a; } .toast.err .toast-icon { background: #e8f4ff; color: #1677ff; font-style: italic; } .toast-body { font-size: 15px; font-weight: 400; color: #969696; line-height: 1.4; } .toast-bar { position: absolute; bottom: 0; left: 0; height: 3px; background: #52c41a; animation: toastBar 2.6s linear forwards; } .toast.err .toast-bar { background: #1677ff; } @keyframes toastBar { from { width: 100%; } to { width: 0%; } } .loading-spin { display: flex; justify-content: center; align-items: center; height: 120px; color: var(--text-muted); gap: 10px; font-size: 13px; } .loading-spin::before { content: ''; width: 18px; height: 18px; border: 2px solid #e8eaed; border-top-color: var(--accent); border-radius: 50%; animation: spin .7s linear infinite; flex-shrink: 0; } @keyframes spin { to { transform: rotate(360deg); } } .placeholder-page { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 60vh; color: var(--text-muted); gap: 12px; } .placeholder-page svg { width: 60px; height: 60px; fill: #d1d5db; } .placeholder-page p { font-size: 15px; } /* 皮肤库页面 */ #page-skins { padding: 0; gap: 0; overflow: hidden; display: flex; flex-direction: column; } #page-skins:not(.active) { display: none !important; } /* ============================================= 皮肤详情 - 炫彩 wrap(圆点+卡片,右上角整体) ============================================= */ .sp-chroma-wrap { position: absolute; z-index: 999; display: flex; flex-direction: column; align-items: flex-end; gap: 6px; transform: translateX(30px); opacity: 0; transition: transform 0.38s cubic-bezier(.34,1.56,.64,1), opacity 0.28s ease; pointer-events: none; } .sp-chroma-wrap.visible { transform: translateX(0); opacity: 1; pointer-events: auto; } /* 炫彩卡片:点击圆点后弹出 */ .sp-chroma-card { width: 200px; background: rgba(8,12,28,0.88); backdrop-filter: blur(16px); border: 1.5px solid rgba(255,255,255,0.18); border-radius: 12px; overflow: hidden; opacity: 0; pointer-events: none; transform: translateY(-8px) scale(0.95); transition: opacity 0.22s ease, transform 0.25s cubic-bezier(.34,1.56,.64,1); position: relative; z-index: 25; } .sp-chroma-card.visible { opacity: 1 !important; pointer-events: auto; transform: translateY(0) scale(1) !important; } /* 皮肤图标网格(大图下方,独立滚动) */ .sp-skin-grid-wrap { flex: 1; width: auto; /* 配合 margin: 0 16px 使用 */ min-height: 0; background: #ffffff; border-radius: 12px; border: 1px solid var(--border); box-shadow: 0 2px 8px rgba(0,0,0,0.06); margin-top: 10px; overflow: hidden; display: flex; flex-direction: column; box-sizing: border-box; } /* 顶部固定间距(不随滚动消失) */ .sp-skin-grid-wrap::before { content: ''; display: block; height: 14px; flex-shrink: 0; } .sp-skin-grid-inner { overflow-y: auto; overflow-x: hidden; flex: 1; padding: 0 14px 14px; scrollbar-width: thin; scrollbar-color: #c5c8d0 transparent; } .sp-skin-grid-inner::-webkit-scrollbar { width: 5px; } .sp-skin-grid-inner::-webkit-scrollbar-thumb { background: #c5c8d0; border-radius: 3px; } .sp-skin-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 10px; } /* 英雄网格外层卡片(和皮肤详情的 sp-skin-grid-wrap 一致) */ .champ-grid-card { flex: 1; min-height: 0; margin: 0 16px 16px; background: #ffffff; border-radius: 14px; border: 1px solid var(--border); box-shadow: 0 2px 8px rgba(0,0,0,0.06); overflow: hidden; display: flex; flex-direction: column; box-sizing: border-box; } /* 英雄列表滚动容器 */ .champ-grid-scroll { flex: 1; min-height: 0; overflow-y: scroll; /* 始终显示滚动条 */ overflow-x: hidden; padding: 14px 14px 14px 14px; scrollbar-width: thin; scrollbar-color: #8c9096 transparent; } .champ-grid-scroll::-webkit-scrollbar { width: 6px; } .champ-grid-scroll::-webkit-scrollbar-track { background: rgba(0,0,0,0.04); border-radius: 3px; } .champ-grid-scroll::-webkit-scrollbar-thumb { background: #c5c8d0; border-radius: 3px; min-height: 40px; } .champ-grid-scroll::-webkit-scrollbar-thumb:hover { background: #8c9096; } /* 底部占位 */ .champ-grid::after { content: ''; display: block; height: 16px; grid-column: 1 / -1; } /* 职业筛选标签 */ .role-tabs { display: flex; gap: 8px; flex-wrap: wrap; flex: 1; } /* 加载中 Toast */ .toast-loading { border-left-color: #1677ff; } .toast-spinner { width: 20px; height: 20px; border-radius: 50%; border: 2.5px solid #e8f4ff; border-top-color: #1677ff; flex-shrink: 0; animation: spin .7s linear infinite; } /* ============================================= 美化库 ============================================= */ #page-beauty { padding: 0; overflow: hidden; display: flex; flex-direction: column; flex: 1; min-height: 0; } #page-beauty > * { box-sizing: border-box; width: 100%; } #page-beauty:not(.active) { display: none !important; } .beauty-wrap { display: flex; flex-direction: column; flex: 1; min-height: 0; height: 100%; /* 确保撑满父容器 */ overflow: hidden; } /* 顶部分类Tab */ .beauty-tabs { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 16px; background: #ffffff; border: 1px solid var(--border); border-radius: var(--radius); flex-shrink: 0; flex-wrap: nowrap; margin: 14px 16px 10px; /* 左右16px,和皮肤库toolbar一致 */ box-shadow: var(--shadow); } .beauty-tab { display: flex; align-items: center; justify-content: center; gap: 6px; padding: 0; width: 104px; height: 40px; border-radius: 20px; border: 1.5px solid #e8eaed; background: #fff; color: #6b7280; font-size: 14px; cursor: pointer; transition: transform 0.18s cubic-bezier(.34,1.56,.64,1), border-color 0.15s, color 0.15s, box-shadow 0.15s; white-space: nowrap; flex-shrink: 0; user-select: none; } .beauty-tab:hover { transform: scale(1.06); border-color: #c0c8d8; color: var(--text); box-shadow: 0 2px 8px rgba(0,0,0,0.08); } .beauty-tab.active { font-weight: 600; border-width: 2px; transform: scale(1); box-shadow: none; } .beauty-total { font-size: 14px; color: var(--text-muted); white-space: nowrap; padding-left: 12px; border-left: 1px solid var(--border); flex-shrink: 0; background: none; border-radius: 0; height: auto; display: flex; align-items: center; gap: 4px; } .beauty-total-num { color: var(--accent-2); font-weight: 600; } /* 图片网格滚动容器 */ .beauty-grid-wrap { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 0 16px 14px 16px; /* 左右16px,和皮肤库一致 */ scrollbar-width: thin; scrollbar-color: #c5c8d0 transparent; } .beauty-grid-wrap::-webkit-scrollbar { width: 5px; } .beauty-grid-wrap::-webkit-scrollbar-thumb { background: #c5c8d0; border-radius: 3px; } .beauty-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(110px, 10vw, 180px), 1fr)); gap: clamp(8px, 1vw, 14px); padding-top: 14px; padding-bottom: 14px; align-content: start; /* 有几行就占几行,不拉伸撑满 */ } /* 图片缺失时的提示覆盖层 */ .beauty-card-img-wrap.img-missing { background: #f5f6f8; display: flex; align-items: center; justify-content: center; } .beauty-img-missing-tip { display: none; font-size: 12px; color: #9ca3af; text-align: center; pointer-events: none; } .beauty-card-img-wrap.img-missing .beauty-img-missing-tip { display: block; } [data-theme="dark"] .beauty-card-img-wrap.img-missing { background: #252840; } [data-theme="dark"] .beauty-img-missing-tip { color: #565e7a; } /* 界面(jm)宽屏:横向比例 16:5,自适应列 */ .beauty-grid-wide { grid-template-columns: repeat(auto-fill, minmax(380px, 1fr)); } .beauty-img-wide { aspect-ratio: 16/5 !important; } /* 单个美化卡片 - 和sp-thumb完全一致 */ .beauty-card { border-radius: 10px; overflow: hidden; cursor: pointer; border: 1.5px solid transparent; position: relative; background: #ffffff; box-shadow: 0 1px 4px rgba(0,0,0,0.08); transition: border-color 0.18s, box-shadow 0.18s; display: flex; flex-direction: column; transform: translateZ(0); will-change: transform; } .beauty-card:hover { border-color: #1E88D8; box-shadow: 0 0 0 1px rgba(30,136,216,0.2); } .beauty-card:hover .beauty-card-img-wrap img { transform: scale(1.1); } .beauty-card-img-wrap { position: relative; overflow: hidden; border-radius: 8px 8px 0 0; aspect-ratio: 1; width: 100%; background: #f8f8f8; transform: translateZ(0); /* 强制GPU渲染,修复overflow:hidden在缩放时失效 */ } .beauty-card-img-wrap img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; transition: transform 0.28s cubic-bezier(.34,1.56,.64,1); } .beauty-card-name { background: #fff; padding: 5px 5px 6px; font-size: 11px; font-weight: 400; color: #333333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: center; border-top: 1px solid rgba(0,0,0,0.05); transition: color 0.18s; } .beauty-card:hover .beauty-card-name { color: #1E88D8; } .beauty-card.active .beauty-card-name { color: #1E88D8; } /* 底部操作栏 */ .beauty-footer { flex-shrink: 0; padding: 12px 20px; background: #fff; border-top: 1px solid var(--border); display: flex; align-items: center; } .beauty-clear-btn { height: 40px; padding: 0 28px; background: #1677ff; color: #fff; border: none; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; transition: transform 0.3s cubic-bezier(.25,.46,.45,.94), box-shadow 0.3s; } .beauty-clear-btn:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(22,119,255,0.4); } /* 界面(jm)宽屏网格 — 已在上方统一定义,此处删除重复规则 */ /* ============================================= 使用指南卡片 ============================================= */ .guide-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; } .guide-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; } .guide-item { display: flex; align-items: center; gap: 8px; font-size: 13px; flex-wrap: wrap; } .guide-num { width: 20px; height: 20px; border-radius: 50%; background: #1677ff; color: #fff; font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .guide-text { color: var(--text); flex: 1; } .guide-link { color: #1677ff; font-size: 12px; text-decoration: none; white-space: nowrap; flex-shrink: 0; } .guide-link:hover { text-decoration: underline; } .guide-disclaimer { background: #fffbe6; border: 1px solid #ffe58f; border-left: 3px solid #faad14; border-radius: 4px; padding: 10px 12px; font-size: 12px; color: #666; line-height: 1.7; margin-bottom: 14px; } .guide-footer { display: flex; gap: 10px; } .guide-btn-manual { flex: 1; height: 36px; border: 1px solid var(--border); border-radius: 6px; background: #fff; color: var(--text-sub); font-size: 13px; cursor: pointer; transition: border-color 0.15s, color 0.15s; } .guide-btn-manual:hover { border-color: #1677ff; color: #1677ff; } .guide-btn-service { flex: 1; height: 36px; border: none; border-radius: 6px; background: #52c41a; color: #fff; font-size: 13px; font-weight: 600; cursor: pointer; transition: background 0.15s, transform 0.2s; } .guide-btn-service:hover { background: #389e0d; transform: translateY(-1px); } /* ============================================= 美化下载圆形进度弹窗 ============================================= */ #beauty-progress-modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 999999; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.5); backdrop-filter: blur(6px); } #beauty-progress-modal.hidden { display: none; } .beauty-progress-box { background: #fff; border-radius: 24px; padding: 36px 44px 28px; display: flex; flex-direction: column; align-items: center; gap: 18px; box-shadow: 0 24px 64px rgba(0,0,0,0.22); min-width: 260px; } .beauty-progress-ring-wrap { position: relative; width: 160px; height: 160px; flex-shrink: 0; } .beauty-progress-ring-wrap svg { position: absolute; top: 0; left: 0; width: 160px; height: 160px; transform: rotate(-90deg); filter: drop-shadow(0 0 8px rgba(22,119,255,0.4)); z-index: 2; pointer-events: none; } .beauty-progress-ring-bg { fill: none; stroke: #eef2ff; stroke-width: 5; } .beauty-progress-ring-bar { fill: none; stroke: url(#progressGrad); stroke-width: 5; stroke-linecap: round; transition: stroke-dashoffset 0.45s cubic-bezier(.4,0,.2,1); } .beauty-progress-img { position: absolute; top: 8px; left: 8px; width: 144px; height: 144px; border-radius: 50%; object-fit: cover; object-position: center center; background: #f0f0f0; z-index: 1; } /* 百分比放在圆圈底部,不挡图片主体 */ .beauty-progress-pct { position: absolute; bottom: 10px; left: 0; right: 0; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; color: #fff; text-shadow: 0 1px 4px rgba(0,0,0,0.8), 0 0 8px rgba(0,0,0,0.5); z-index: 3; } .beauty-progress-label { font-size: 14px; color: var(--text-sub); text-align: center; max-width: 220px; line-height: 1.6; font-weight: 500; } .beauty-progress-speed { font-size: 12px; color: var(--text-muted); margin-top: -10px; } /* ============================================= 设置页面 ============================================= */ #page-settings { padding: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #c5c8d0 transparent; } #page-settings::-webkit-scrollbar { width: 5px; } #page-settings::-webkit-scrollbar-thumb { background: #c5c8d0; border-radius: 3px; } .settings-wrap { width: 100%; padding: 14px 16px 40px; display: flex; flex-direction: column; gap: 16px; box-sizing: border-box; } /* 顶部标题区 —— 白色底,和美化库Tab栏一致 */ .settings-header { display: flex; align-items: center; gap: 14px; background: #ffffff; border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 16px; box-shadow: var(--shadow); } .settings-header-icon { width: 40px; height: 40px; border-radius: 10px; background: #e6f4ff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .settings-header-title { font-size: 15px; font-weight: 700; color: var(--text); } .settings-header-sub { font-size: 12px; color: var(--text-muted); margin-top: 2px; } /* 主体区 */ .settings-body { display: flex; flex-direction: column; gap: 18px; } /* 各分区块 */ .settings-section { background: #fff; border: 1px solid var(--border); border-radius: 14px; overflow: hidden; box-shadow: 0 2px 10px rgba(0,0,0,0.06); } .settings-section-title { display: flex; align-items: center; gap: 10px; padding: 16px 20px 14px; font-size: 15px; font-weight: 700; color: var(--text); border-bottom: 1px solid var(--border); background: #fafbfc; } .settings-section-icon { width: 30px; height: 30px; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .settings-section-badge { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 20px; letter-spacing: .5px; margin-left: auto; } .badge-cn { background: linear-gradient(90deg, #fa541c, #fa8c16); color: #fff; } .badge-global { background: linear-gradient(90deg, #1677ff, #36cfc9); color: #fff; } /* 清理残留卡 */ .settings-clean-card { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 20px 22px; flex-wrap: wrap; } .settings-clean-info { flex: 1; min-width: 0; } .settings-clean-title { font-size: 14px; font-weight: 600; color: var(--text); margin-bottom: 6px; } .settings-clean-desc { font-size: 13px; color: var(--text-sub); line-height: 1.6; margin-bottom: 10px; } .settings-clean-tags { display: flex; gap: 8px; flex-wrap: wrap; } .settings-tag { font-size: 13px; padding: 6px 14px; border-radius: 20px; font-weight: 600; } .tag-warn { background: #fffbe6; color: #d46b08; border: 1px solid #ffe58f; } .tag-safe { background: #f6ffed; color: #389e0d; border: 1px solid #b7eb8f; } .settings-clean-btn { flex-shrink: 0; display: flex; align-items: center; gap: 7px; height: 44px; padding: 0 22px; background: linear-gradient(135deg, #ff4d4f, #ff7a45); color: #fff; border: none; border-radius: 10px; font-size: 14px; font-weight: 700; cursor: pointer; box-shadow: 0 4px 14px rgba(255,77,79,0.38); transition: transform 0.25s cubic-bezier(.34,1.56,.64,1), box-shadow 0.25s; } .settings-clean-btn:hover { transform: translateY(-3px); box-shadow: 0 8px 22px rgba(255,77,79,0.5); } .settings-clean-btn:active { transform: translateY(-1px); } /* 复选框组 */ .settings-checks-group { display: flex; gap: 32px; padding: 18px 22px 22px; } .settings-check-label { display: flex; align-items: center; gap: 12px; cursor: pointer; user-select: none; } /* 自定义方框 —— 放大版 */ .settings-check-box { width: 28px; height: 28px; border-radius: 7px; border: 2px solid #d1d5db; background: #fff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: border-color 0.15s, background 0.15s, box-shadow 0.15s; box-sizing: border-box; } /* 勾选状态 */ .settings-check-box.checked { background: #1677ff; border-color: #1677ff; box-shadow: 0 3px 10px rgba(22,119,255,0.4); } /* 勾选后显示 ✓ */ .settings-check-box.checked::after { content: ''; width: 7px; height: 12px; border: 2.5px solid #fff; border-top: none; border-left: none; transform: rotate(45deg) translateY(-1px); display: block; } /* hover */ .settings-check-label:hover .settings-check-box { border-color: #1677ff; } .settings-check-text { font-size: 15px; font-weight: 600; color: var(--text); } /* 复选框行右侧红色提示 */ .settings-check-tip { margin-left: auto; font-size: 13px; font-weight: 500; color: #ff4d4f; background: #fff1f0; border: 1px solid #ffccc7; border-radius: 8px; padding: 6px 14px; line-height: 1.5; align-self: center; } /* 分隔线(清理卡片内) */ .settings-divider { height: 1px; background: var(--border); margin: 0 22px; } /* ============================================= 工具箱页面 ============================================= */ .tools-wrap { display: flex; flex-direction: column; gap: 16px; padding: 14px 16px 40px; width: 100%; box-sizing: border-box; } /* 主布局:左2列功能卡 + 右段位卡 */ .tools-main-grid { display: grid; grid-template-columns: 1fr minmax(22vw, 380px); gap: clamp(10px, 1.2vw, 18px); align-items: stretch; width: 100%; } /* 左侧容器 —— 透明传递,让 tools-grid 直接参与 main-grid 布局 */ .tools-left { display: flex; flex-direction: column; min-height: 0; } /* 左侧 2列功能卡网格,撑满左侧高度 */ .tools-grid { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 14px; flex: 1; } /* 单个功能卡片 */ .tools-card { background: #fff; border: 1px solid var(--border); border-radius: 16px; padding: 26px 24px; display: flex; align-items: center; gap: 18px; box-shadow: 0 2px 10px rgba(0,0,0,0.06); transition: box-shadow 0.3s ease, transform 0.3s cubic-bezier(.25,.46,.45,.94); cursor: default; box-sizing: border-box; min-height: 130px; } .tools-card:hover { box-shadow: 0 10px 28px rgba(0,0,0,0.13); transform: translateY(-6px); } .tools-card-icon { width: 60px; height: 60px; border-radius: 16px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .tools-card-info { flex: 1; min-width: 0; } .tools-card-title { font-size: 17px; font-weight: 700; color: var(--text); margin-bottom: 6px; } .tools-card-desc { font-size: 13px; color: var(--text-muted); } /* 开关 toggle */ .tools-toggle { flex-shrink: 0; width: 46px; height: 26px; border-radius: 13px; background: #e0e0e0; position: relative; cursor: pointer; transition: background 0.25s; } .tools-toggle.on { background: #1677ff; } .tools-toggle-dot { position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: #fff; box-shadow: 0 1px 4px rgba(0,0,0,0.2); transition: left 0.25s cubic-bezier(.34,1.56,.64,1); } .tools-toggle.on .tools-toggle-dot { left: 23px; } /* 段位修改卡片 —— 右侧,和左侧等高 */ .tools-rank-card { background: #fff; border: 1px solid var(--border); border-radius: 16px; box-shadow: 0 2px 10px rgba(0,0,0,0.06); overflow: hidden; transition: box-shadow 0.3s ease, transform 0.3s cubic-bezier(.25,.46,.45,.94); display: flex; flex-direction: column; } .tools-rank-card:hover { box-shadow: 0 10px 28px rgba(0,0,0,0.13); transform: translateY(-6px); } .tools-rank-title { display: flex; align-items: center; gap: 10px; padding: 14px 20px; font-size: 15px; font-weight: 700; color: var(--text); border-bottom: 1px solid var(--border); background: #fafbfc; } .tools-rank-body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 14px; flex: 1; justify-content: center; } .tools-rank-row { display: flex; gap: 14px; } .tools-rank-field { flex: 1; display: flex; flex-direction: column; gap: 7px; } .tools-rank-field-full { width: 100%; } .tools-rank-label { font-size: 12px; font-weight: 600; color: var(--text-sub); } /* 段位下拉 */ .tools-select-wrap { position: relative; } .tools-select { width: 100%; height: 42px; padding: 0 36px 0 14px; border-radius: 10px; border: 1.5px solid var(--border); background: #f5f6f8; font-size: 14px; font-weight: 600; font-family: inherit; color: var(--text); outline: none; appearance: none; -webkit-appearance: none; cursor: pointer; transition: border-color 0.15s, background 0.15s, box-shadow 0.15s; } .tools-select:focus { background: #fff; border-color: #1677ff; box-shadow: 0 0 0 3px rgba(22,119,255,0.10); } .tools-select-arrow { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); pointer-events: none; color: #9ca3af; font-size: 14px; } /* 工具箱底部提示 */ .tools-footer-tip { font-size: 13px; font-weight: 500; color: #ff4d4f; background: #fff1f0; border: 1px solid #ffccc7; border-radius: 10px; padding: 12px 18px; text-align: center; letter-spacing: .3px; } /* ============================================= 侧边栏底部用户区 ============================================= */ .sidebar-user { margin: auto 10px 12px; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--border); background: #f8f9fb; display: flex; align-items: center; gap: 10px; cursor: pointer; transition: background 0.15s, box-shadow 0.15s; flex-shrink: 0; } .sidebar-user:hover { background: #eef2ff; box-shadow: 0 2px 10px rgba(22,119,255,0.1); } .sidebar-user-avatar { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; border: 2px solid #d1d5db; flex-shrink: 0; background: #e8eaed; } .sidebar-user-info { flex: 1; min-width: 0; } .sidebar-user-name { font-size: 13px; font-weight: 600; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sidebar-user-sub { font-size: 11px; color: var(--text-muted); margin-top: 1px; } /* ============================================= 用户信息弹出卡片 — 重新设计 ============================================= */ .user-card { position: fixed; width: 240px; background: #fff; border: 1px solid var(--border); border-radius: 20px; box-shadow: 0 12px 40px rgba(0,0,0,0.15); z-index: 99998; overflow: hidden; animation: userCardIn 0.22s cubic-bezier(.34,1.56,.64,1); box-sizing: border-box; } .user-card.hidden { display: none; } @keyframes userCardIn { from { opacity: 0; transform: translateY(10px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } /* 顶部蓝色渐变区 */ .user-card-bg { height: 68px; background: linear-gradient(135deg, #1677ff 0%, #0bc4e3 100%); } /* 头像悬浮区 */ .user-card-avatar-wrap { position: relative; display: flex; justify-content: center; margin-top: -38px; margin-bottom: 4px; } .user-card-avatar { width: 76px; height: 76px; border-radius: 50%; object-fit: cover; border: 3px solid #fff; box-shadow: 0 4px 16px rgba(22,119,255,0.4); background: #e8eaed; display: block; } .user-card-level { position: absolute; bottom: -6px; left: 50%; transform: translateX(-50%); font-size: 11px; font-weight: 700; color: #fff; background: linear-gradient(90deg, #1677ff, #0bc4e3); border-radius: 10px; padding: 2px 10px; border: 2px solid #fff; white-space: nowrap; box-shadow: 0 2px 8px rgba(22,119,255,0.5); z-index: 1; } /* 昵称居中 */ .user-card-name { text-align: center; font-size: 15px; font-weight: 700; color: var(--text); padding: 0 16px; margin: 14px 0 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 信息行 */ .user-card-rows { border-top: 1px solid var(--border); padding: 8px 16px 14px; } .user-card-row { display: flex; justify-content: space-between; align-items: center; padding: 7px 0; font-size: 13px; border-bottom: 1px solid #f0f0f0; } .user-card-row:last-child { border-bottom: none; } .user-card-label { color: var(--text-muted); } .user-card-value { font-weight: 600; color: var(--text); } .user-card-expire { color: #ff4d4f; } /* ============================================= 暗色主题 ============================================= */ [data-theme="dark"] { --bg: #0f1117; --sidebar-bg: #1a1d27; --card-bg: #1e2130; --border: #2e3347; --text: #e8eaf0; --text-sub: #8b92a8; --text-muted: #565e7a; --accent: #0bc4e3; --accent-2: #4d8fff; --shadow: 0 2px 12px rgba(0,0,0,.35); } [data-theme="dark"] body { background: var(--bg); color: var(--text); } [data-theme="dark"] .titlebar { background: #1a1d27; border-bottom-color: var(--border); } [data-theme="dark"] .sidebar { background: var(--sidebar-bg); border-right-color: var(--border); } [data-theme="dark"] .nav-item:hover { background: #252840; } [data-theme="dark"] .nav-item.active { background: #252840; color: var(--accent-2); } [data-theme="dark"] .card, [data-theme="dark"] .tools-card, [data-theme="dark"] .tools-rank-card, [data-theme="dark"] .settings-section, [data-theme="dark"] .beauty-tabs, [data-theme="dark"] .skins-toolbar { background: var(--card-bg); border-color: var(--border); } [data-theme="dark"] .sp-skin-grid-wrap, [data-theme="dark"] .beauty-footer { background: var(--card-bg); border-color: var(--border); } [data-theme="dark"] .champ-card { background: #252840; border-color: #2e3347; } [data-theme="dark"] .champ-card:hover { border-color: rgba(77,143,255,0.5); box-shadow: 0 10px 28px rgba(0,0,0,.45); } [data-theme="dark"] .champ-grid-card { background: #1a1d27; border-color: var(--border); } [data-theme="dark"] .champ-card .champ-name { background: #252840; color: var(--text); } [data-theme="dark"] .sp-thumb, [data-theme="dark"] .beauty-card { background: #252840; } [data-theme="dark"] .sp-thumb-name, [data-theme="dark"] .beauty-card-name { background: #252840; color: var(--text-sub); } [data-theme="dark"] .search-input, [data-theme="dark"] .tools-select { background: #252840; border-color: var(--border); color: var(--text); } [data-theme="dark"] .sidebar-user { background: #252840; border-color: var(--border); } [data-theme="dark"] .user-card { background: #1e2130; border-color: var(--border); } [data-theme="dark"] .settings-section-title, [data-theme="dark"] .tools-rank-title { background: #252840; } [data-theme="dark"] .tb-btn:hover { background: #2e3347; } [data-theme="dark"] .welcome-banner { background: linear-gradient(135deg, #1a3a6e 0%, #0f2a52 100%); } [data-theme="dark"] .role-tab { background: var(--card-bg); border-color: var(--border); color: var(--text-sub); } [data-theme="dark"] .logo { border-bottom-color: var(--border); } /* ── 暗色主题补充 ── */ /* 美化库 tab */ [data-theme="dark"] .beauty-tab { background: #1e2130; border-color: #2e3347; color: #8b92a8; } [data-theme="dark"] .beauty-tab:hover { background: #252840; border-color: #4d8fff; color: #e8eaf0; } [data-theme="dark"] .beauty-tabs { background: #1a1d27; border-color: #2e3347; } [data-theme="dark"] .beauty-total { color: #8b92a8; } [data-theme="dark"] .beauty-grid-wrap { background: transparent; } /* 美化卡片名字 */ [data-theme="dark"] .beauty-card-name { background: #252840; color: #8b92a8; border-top-color: #2e3347; } [data-theme="dark"] .beauty-card { background: #252840; border-color: #2e3347; } /* 工具箱底部提示 */ [data-theme="dark"] .tools-footer-tip { background: #2a1a1f; border-color: #4a2530; color: #ff7875; } /* 工具箱 toggle 背景 */ [data-theme="dark"] .tools-toggle { background: #2e3347; } [data-theme="dark"] .tools-toggle.on { background: #4d8fff; } /* 段位下拉 */ [data-theme="dark"] .tools-select { background: #252840; border-color: #2e3347; color: #e8eaf0; } [data-theme="dark"] .tools-select-arrow { color: #565e7a; } [data-theme="dark"] .tools-rank-label { color: #8b92a8; } /* 设置页标题卡 */ [data-theme="dark"] .settings-header { background: #1e2130; border-color: #2e3347; } [data-theme="dark"] .settings-header-title { color: #e8eaf0; } [data-theme="dark"] .settings-header-sub { color: #8b92a8; } [data-theme="dark"] .settings-header-icon { background: #252840; } /* 设置页分区块 */ [data-theme="dark"] .settings-section-title { background: #252840; border-bottom-color: #2e3347; color: #e8eaf0; } [data-theme="dark"] .settings-clean-title { color: #e8eaf0; } [data-theme="dark"] .settings-clean-desc { color: #8b92a8; } /* tag标签 */ [data-theme="dark"] .tag-warn { background: #2a2210; border-color: #5a4500; color: #ffc53d; } [data-theme="dark"] .tag-safe { background: #0f2a1a; border-color: #1a5c30; color: #73d13d; } /* 复选框文字 */ [data-theme="dark"] .settings-check-text { color: #e8eaf0; } [data-theme="dark"] .settings-check-box { border-color: #4d8fff; background: #1e2130; } [data-theme="dark"] .settings-check-tip { background: #2a1a1f; border-color: #4a2530; color: #ff7875; } /* 设置页分隔线 */ [data-theme="dark"] .settings-divider { background: #2e3347; } [data-theme="dark"] .settings-clean-card { background: #1e2130; } /* 工具箱 rank 卡片标题 */ [data-theme="dark"] .tools-rank-title { background: #252840; color: #e8eaf0; border-bottom-color: #2e3347; } [data-theme="dark"] .tools-rank-body { background: #1e2130; } [data-theme="dark"] .tools-rank-card { background: #1e2130; border-color: #2e3347; } /* page背景 */ [data-theme="dark"] .page { background: #0f1117; } [data-theme="dark"] .main { background: #0f1117; } /* 滚动条 */ [data-theme="dark"] ::-webkit-scrollbar-thumb { background: #4a5068; } [data-theme="dark"] ::-webkit-scrollbar-thumb:hover { background: #5e6480; } [data-theme="dark"] ::-webkit-scrollbar-track { background: rgba(255,255,255,0.03); } /* 皮肤库搜索框 */ [data-theme="dark"] .search-input { background: #252840; border-color: #2e3347; color: #e8eaf0; } [data-theme="dark"] .search-input::placeholder { color: #565e7a; } /* role tab */ [data-theme="dark"] .role-tab { background: #1e2130; border-color: #2e3347; color: #8b92a8; } [data-theme="dark"] .role-tab.active { background: #1e2130; border-color: #4d8fff; color: #4d8fff; } /* skins toolbar */ [data-theme="dark"] .skins-toolbar { background: #1a1d27; border-color: #2e3347; } [data-theme="dark"] .champ-count { color: #8b92a8; border-left-color: #2e3347; } /* 用户信息弹出卡片暗色 */ [data-theme="dark"] .user-card { background: #1e2130; border-color: #2e3347; box-shadow: 0 8px 32px rgba(0,0,0,0.45); } [data-theme="dark"] .user-card-bg { background: linear-gradient(135deg, #0a3a7a 0%, #0a5a8a 100%); } [data-theme="dark"] .user-card-avatar { border-color: #1e2130; } [data-theme="dark"] .user-card-level { border-color: #1e2130; } [data-theme="dark"] .user-card-name { color: #e8eaf0; } [data-theme="dark"] .user-card-rows { border-top-color: #2e3347; } [data-theme="dark"] .user-card-row { border-bottom-color: #2e3347; } [data-theme="dark"] .user-card-label { color: #8b92a8; } [data-theme="dark"] .user-card-value:not(.user-card-expire) { color: #e8eaf0; } [data-theme="dark"] .user-card-level { background: linear-gradient(90deg, #1677ff, #0bc4e3); } /* 侧边栏底部用户区 */ [data-theme="dark"] .sidebar-user { background: #252840; border-color: #2e3347; } [data-theme="dark"] .sidebar-user:hover { background: #2e3347; } [data-theme="dark"] .sidebar-user-name { color: #e8eaf0; } [data-theme="dark"] .sidebar-user-sub { color: #565e7a; } /* 美化库图片容器暗色背景修复 */ [data-theme="dark"] .beauty-card-img-wrap { background: #252840; } [data-theme="dark"] .beauty-card:hover { border-color: #4d8fff; box-shadow: 0 0 0 1px rgba(77,143,255,0.2); } [data-theme="dark"] .beauty-card:hover .beauty-card-name { color: #4d8fff; } [data-theme="dark"] .beauty-card.active .beauty-card-name { color: #4d8fff; } /* 修复暗色主题美化库hover白色框 */ [data-theme="dark"] .beauty-card { background: #252840; border-color: #2e3347; } [data-theme="dark"] .beauty-card .beauty-card-img-wrap { background: #252840; } /* 美化资源下载按钮 */ .beauty-download-btn { height: 46px; padding: 0 32px; background: linear-gradient(135deg, #1677ff, #0bc4e3); color: #fff; border: none; border-radius: 12px; font-size: 15px; font-weight: 700; cursor: pointer; box-shadow: 0 4px 16px rgba(22,119,255,0.4); transition: transform 0.25s cubic-bezier(.34,1.56,.64,1), box-shadow 0.25s; } .beauty-download-btn:hover { transform: translateY(-3px); box-shadow: 0 8px 24px rgba(22,119,255,0.5); } /* ============================================= CEF 窗口自适应 — 统一响应式规则 ============================================= */ /* 确保 html/body 撑满窗口 */ html, body { width: 100%; height: 100%; overflow: hidden; } .app-shell, .app-body, .main { width: 100%; min-width: 0; } /* 大窗口 ≥ 1200px */ @media (min-width: 1200px) { :root { --sidebar-w: 180px; } .champ-grid { grid-template-columns: repeat(7, 1fr); } } /* 标准窗口 900-1199px */ @media (min-width: 900px) and (max-width: 1199px) { :root { --sidebar-w: 160px; } .champ-grid { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); } .role-tab { width: 80px; font-size: 13px; } } /* 小窗口 700-899px */ @media (min-width: 700px) and (max-width: 899px) { :root { --sidebar-w: 140px; } .champ-grid { grid-template-columns: repeat(auto-fill, minmax(95px, 1fr)); gap: 10px; } .nav-item { font-size: 13px; height: 46px; min-height: 46px; } .role-tab { width: 70px; height: 36px; font-size: 12px; } .search-input { width: 160px; } .skins-toolbar { flex-wrap: wrap; padding: 8px 12px; } .beauty-tabs { margin: 8px 10px 6px; padding: 8px 10px; } .beauty-tab { width: 82px; height: 34px; font-size: 12px; } .tools-main-grid { grid-template-columns: 1fr; } .tools-rank-card { height: auto; } } /* 超小窗口 < 700px */ @media (max-width: 699px) { :root { --sidebar-w: 52px; } .nav-item span:not(.nav-icon) { display: none; } .nav-item { padding: 0; justify-content: center; gap: 0; } .logo-em { font-size: 14px; } .sidebar-user-info { display: none; } .sidebar-user-avatar { width: 30px; height: 30px; } .champ-grid { grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); gap: 8px; } .skins-toolbar { flex-wrap: wrap; gap: 6px; } .role-tabs { gap: 4px; } .role-tab { width: 60px; height: 32px; font-size: 11px; } .search-input { width: 120px; } .beauty-tabs { margin: 8px 10px 6px; padding: 8px 10px; } .beauty-tab { width: 70px; height: 32px; font-size: 11px; } .tools-main-grid { grid-template-columns: 1fr; } .tools-card { padding: 16px; } .tools-rank-card { height: auto; } .settings-wrap { padding: 10px 10px 20px; } } /* 高度较小的窗口 */ @media (max-height: 500px) { .nav-item { height: 40px; min-height: 40px; } .logo { padding: 12px 10px; } .champ-card .champ-name { font-size: 11px; } } /* ============================================= 皮肤详情页自适应 ============================================= */ .sp-canvas { height: clamp(360px, 52vh, 660px); } .sp-skin-name { font-size: clamp(18px, 2.2vw, 30px); } .sp-btn-apply, .sp-btn-career { height: clamp(34px, 4.5vh, 46px); padding: 0 clamp(14px, 1.8vw, 26px); font-size: clamp(12px, 1.1vw, 15px); } .sp-info-bar { height: clamp(46px, 6vh, 62px); padding: 0 clamp(12px, 1.5vw, 22px); } .sp-info-name { font-size: clamp(14px, 1.4vw, 20px); } /* 美化库tab自适应 */ .beauty-tab { width: clamp(70px, 8vw, 120px); height: clamp(32px, 4.5vh, 46px); font-size: clamp(11px, 1vw, 14px); } /* 工具箱卡片自适应 */ .tools-card { padding: clamp(14px, 2vh, 28px) clamp(14px, 1.8vw, 26px); min-height: clamp(100px, 14vh, 180px); } .tools-card-title { font-size: clamp(13px, 1.3vw, 19px); } .tools-card-desc { font-size: clamp(11px, 0.9vw, 14px); } .tools-card-icon { width: clamp(42px, 5vw, 68px); height: clamp(42px, 5vw, 68px); font-size: clamp(22px, 3vw, 40px); } /* 设置页自适应 */ .settings-clean-title { font-size: clamp(13px, 1.2vw, 16px); } .settings-clean-desc { font-size: clamp(11px, 0.9vw, 13px); } .settings-clean-btn { height: clamp(36px, 5vh, 48px); padding: 0 clamp(14px, 1.8vw, 24px); font-size: clamp(12px, 1vw, 15px); } .settings-check-text { font-size: clamp(13px, 1.2vw, 17px); } .settings-check-box { width: clamp(22px, 2.5vw, 32px); height: clamp(22px, 2.5vw, 32px); } /* ============================================= 皮肤库 & 皮肤详情 高端化升级 ============================================= */ /* toolbar 加 margin,和美化库tabs一致 */ .skins-toolbar { margin: 14px 16px 10px; flex-shrink: 0; } /* 英雄卡片升级(补充属性,不重写基础定义)*/ /* 基础定义已在上方 .champ-card 中,这里只补充升级属性 */ .champ-card .champ-name { font-size: clamp(11px, 0.85vw, 13px); padding: 7px 4px 10px; /* 保持底部留白 */ font-weight: 500; letter-spacing: 0.2px; } /* 皮肤详情 - 信息栏升级(#page-skins 已有 padding:0 16px,不需要左右margin) */ .sp-info-bar { background: var(--card-bg); border-radius: 14px; box-shadow: var(--shadow); margin: 14px 16px 10px; width: auto; flex-shrink: 0; box-sizing: border-box; } /* 皮肤详情 - 大图区域升级 */ .sp-canvas { margin: 0 16px 10px; border-radius: 16px; box-shadow: 0 4px 20px rgba(0,0,0,.2); flex-shrink: 0; width: auto; } /* 皮肤详情 - 皮肤网格升级 */ .sp-skin-grid-wrap { margin: 0 16px 16px; border-radius: 14px; box-shadow: var(--shadow); width: auto; } /* 皮肤缩略图升级 */ .sp-thumb { border-radius: 12px; transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s cubic-bezier(.25,.46,.45,.94); } .sp-thumb:hover { transform: translateY(-2px); box-shadow: 0 4px 14px rgba(0,0,0,.14); } .sp-thumb.active { border-color: #1677ff; box-shadow: 0 0 0 2px rgba(22,119,255,0.25); } /* 应用皮肤按钮升级 */ .sp-btn-apply { background: linear-gradient(135deg, #1677ff, #0bc4e3); box-shadow: 0 4px 14px rgba(22,119,255,0.4); border-radius: 10px; transition: transform 0.25s cubic-bezier(.34,1.56,.64,1), box-shadow 0.25s; } .sp-btn-apply:hover { background: linear-gradient(135deg, #0958d9, #1677ff); transform: translateY(-3px); box-shadow: 0 8px 20px rgba(22,119,255,0.5); } .sp-btn-career { border-radius: 10px; backdrop-filter: blur(8px); transition: transform 0.25s cubic-bezier(.34,1.56,.64,1), background 0.2s; } .sp-btn-career:hover { background: rgba(255,255,255,0.28); transform: translateY(-3px); } /* 皮肤名称升级 */ #spSkinName { font-size: clamp(18px, 2.2vw, 28px) !important; font-weight: 800 !important; letter-spacing: 0.5px; text-shadow: 0 2px 12px rgba(0,0,0,0.8) !important; } /* 返回按钮升级 */ .sp-back-btn { border-radius: 10px; font-weight: 600; transition: background 0.15s, color 0.15s, transform 0.2s; } .sp-back-btn:hover { background: var(--accent-2); color: #fff; border-color: var(--accent-2); transform: translateX(-2px); } /* ============================================= 英雄选择自动跟踪按钮 ============================================= */ .csw-toggle-btn { display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 13px; border-radius: 20px; border: 1.5px solid #d1d5db; background: #f5f6f8; color: #9ca3af; font-size: 13px; font-family: inherit; font-weight: 500; cursor: pointer; white-space: nowrap; flex-shrink: 0; transition: all 0.2s; user-select: none; } .csw-toggle-btn:hover { border-color: #52c41a; color: #52c41a; background: #f6ffed; } /* 开启状态 */ .csw-toggle-btn.on { border-color: #52c41a; background: #f6ffed; color: #389e0d; } .csw-toggle-btn.on::before { content: ''; display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: #52c41a; flex-shrink: 0; animation: csw-btn-pulse 1.6s ease-in-out infinite; } @keyframes csw-btn-pulse { 0%,100% { box-shadow: 0 0 0 0 rgba(82,196,26,.5); } 50% { box-shadow: 0 0 0 4px rgba(82,196,26,.0); } } /* 暗色主题适配 */ [data-theme="dark"] .csw-toggle-btn { background: #1e2130; border-color: #2e3347; color: #6b7280; } [data-theme="dark"] .csw-toggle-btn:hover, [data-theme="dark"] .csw-toggle-btn.on { background: #162312; border-color: #52c41a; color: #52c41a; }