/* ============================================================
   二次元导航站 - 主样式
   v3.5：删对比样式 / 加评分徽标+吐槽+直达按钮样式
   ============================================================ */

:root {
    --accent: #a855f7;
    --accent-hover: #9333ea;
    --bg: #f8fafc;
    --card-bg: #ffffff;
    --text: #1e293b;
    --text-muted: #64748b;
    --border: #e2e8f0;
    --input-bg: #ffffff;
    --shadow: 0 1px 3px rgba(0,0,0,.08), 0 4px 12px rgba(0,0,0,.04);
    --shadow-lg: 0 4px 16px rgba(0,0,0,.12);
    --radius: 12px;
}

* { margin:0; padding:0; box-sizing:border-box; }
body { font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif; background:var(--bg); color:var(--text); line-height:1.6; }

a { color:var(--accent); text-decoration:none; }
a:hover { color:var(--accent-hover); }

/* ========== 公告栏 ========== */
.announcement-bar { background:linear-gradient(90deg,#fce7f3,#ede9fe); padding:8px 24px; display:flex; align-items:center; gap:10px; border-bottom:1px solid var(--border); }
.announcement-icon { font-size:18px; }
.announcement-text { flex:1; font-size:13px; color:var(--text); }
.announcement-close { background:none; border:none; font-size:20px; cursor:pointer; color:var(--text-muted); padding:0 8px; }

/* ========== 头部 ========== */
.header { background:var(--card-bg); border-bottom:1px solid var(--border); position:sticky; top:0; z-index:100; backdrop-filter:blur(10px); background:rgba(255,255,255,.9); }
.header-inner { max-width:1200px; margin:0 auto; padding:12px 20px; display:flex; align-items:center; justify-content:space-between; }
.logo { display:flex; align-items:center; gap:8px; font-size:20px; font-weight:700; color:var(--text); }
.logo-icon { font-size:28px; }
.nav { display:flex; gap:4px; }
.nav-link { padding:8px 14px; border-radius:8px; font-size:14px; color:var(--text-muted); transition:.2s; }
.nav-link:hover, .nav-link.active { background:var(--accent); color:#fff; }
.header-actions { display:flex; gap:8px; align-items:center; }
.theme-toggle { background:var(--card-bg); border:1px solid var(--border); border-radius:8px; padding:8px 12px; font-size:18px; cursor:pointer; transition:.2s; }
.theme-toggle:hover { border-color:var(--accent); }
.btn-submit { background:var(--accent); color:#fff; padding:8px 18px; border-radius:8px; font-size:14px; font-weight:500; transition:.2s; }
.btn-submit:hover { background:var(--accent-hover); color:#fff; }

/* ========== 搜索区 ========== */
.search-section { padding:48px 20px 32px; text-align:center; background:linear-gradient(180deg, var(--card-bg) 0%, var(--bg) 100%); }
.search-container { max-width:680px; margin:0 auto; }
.search-title { font-size:28px; font-weight:700; margin-bottom:20px; }
.search-box { display:flex; gap:8px; margin-bottom:20px; }
.search-box input { flex:1; padding:14px 20px; border:2px solid var(--border); border-radius:12px; font-size:15px; background:var(--input-bg); color:var(--text); transition:.2s; }
.search-box input:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(168,85,247,.1); }
.search-btn { padding:14px 28px; background:var(--accent); color:#fff; border:none; border-radius:12px; font-size:15px; font-weight:500; cursor:pointer; transition:.2s; }
.search-btn:hover { background:var(--accent-hover); }
.hot-tags { font-size:13px; color:var(--text-muted); }
.hot-tags-label { margin-right:8px; }
.tag-chip { display:inline-block; padding:4px 12px; margin:3px; border-radius:20px; font-size:12px; background:var(--card-bg); border:1px solid var(--border); color:var(--text-muted); cursor:pointer; transition:.2s; }
.tag-chip:hover { border-color:var(--accent); color:var(--accent); }

/* ========== 统计卡片 ========== */
.stats-section { max-width:1200px; margin:0 auto; padding:0 20px 24px; }
.stats-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:16px; }
.stat-card { background:var(--card-bg); border-radius:var(--radius); padding:20px; text-align:center; box-shadow:var(--shadow); transition:.2s; }
.stat-card:hover { transform:translateY(-2px); box-shadow:var(--shadow-lg); }
.stat-icon { font-size:28px; margin-bottom:6px; }
.stat-num { font-size:32px; font-weight:700; color:var(--accent); }
.stat-label { font-size:13px; color:var(--text-muted); margin-top:2px; }

/* ========== 新闻资讯 ========== */
.news-section { max-width:1200px; margin:0 auto 24px; padding:0 20px; }
.news-container { background:var(--card-bg); border-radius:var(--radius); padding:16px 20px; box-shadow:var(--shadow); border:1px solid var(--border); }
.news-header { display:flex; align-items:baseline; gap:12px; margin-bottom:12px; padding-bottom:8px; border-bottom:1px solid var(--border); }
.news-title { font-size:18px; font-weight:700; }
.news-subtitle { font-size:12px; color:var(--text-muted); }
.news-list { display:flex; flex-direction:column; }
.news-item { display:flex; align-items:center; gap:8px; padding:7px 0; border-bottom:1px solid var(--border); font-size:13px; transition:.2s; text-decoration:none; color:var(--text); }
.news-item:last-child { border-bottom:none; }
.news-item:hover { background:var(--bg); padding-left:8px; border-radius:6px; }
.news-dot { color:var(--accent); font-weight:700; font-size:14px; }
.news-item-title { flex:1; font-weight:500; }
.news-source { font-size:11px; color:var(--text-muted); background:var(--bg); padding:1px 8px; border-radius:10px; white-space:nowrap; }
.news-time { font-size:11px; color:var(--text-muted); white-space:nowrap; }

/* ========== 随机滚动吐槽条 ========== */
.ticker-bar {
    max-width:1200px;
    margin:0 auto 16px;
    padding:0 20px;
    display:flex;
    align-items:center;
    gap:10px;
}
.ticker-label {
    flex-shrink:0;
    font-size:13px;
    font-weight:600;
    color:var(--accent);
    background:rgba(168,85,247,.08);
    padding:4px 10px;
    border-radius:8px;
    white-space:nowrap;
}
.ticker-viewport {
    flex:1;
    overflow:hidden;
    position:relative;
    height:28px;
    mask-image:linear-gradient(90deg, transparent 0, #000 8%, #000 92%, transparent 100%);
    -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 8%, #000 92%, transparent 100%);
}
.ticker-track {
    position:absolute;
    top:0; left:0;
    display:flex;
    flex-direction:column;
    animation:tickerScroll 8s linear infinite;
}
.ticker-track:hover { animation-play-state:paused; }
.ticker-item {
    height:28px;
    display:flex;
    align-items:center;
    gap:8px;
    font-size:12px;
    white-space:nowrap;
    padding:0 12px;
    color:var(--text);
}
.ticker-nick {
    font-weight:600;
    color:var(--accent);
    flex-shrink:0;
}
.ticker-site {
    font-size:11px;
    color:var(--text-muted);
    background:var(--bg);
    padding:1px 6px;
    border-radius:4px;
    flex-shrink:0;
}
.ticker-text {
    color:var(--text);
    overflow:hidden;
    text-overflow:ellipsis;
    flex:1;
}
@keyframes tickerScroll {
    0%   { transform:translateY(0); }
    100% { transform:translateY(-50%); }
}

/* ========== 热门站点 ========== */
.hot-sites-section { max-width:1200px; margin:0 auto 32px; padding:0 20px; }
.hot-sites-container { background:linear-gradient(135deg, var(--card-bg) 0%, rgba(168,85,247,.03) 100%); border-radius:var(--radius); padding:20px; box-shadow:var(--shadow); border:1px solid var(--border); }
.hot-sites-header { display:flex; align-items:baseline; gap:12px; margin-bottom:16px; }
.hot-sites-title { font-size:20px; font-weight:700; }
.hot-sites-sub { font-size:12px; color:var(--text-muted); }
.hot-sites-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:12px; }
.hot-site-card { background:var(--card-bg); border:1px solid var(--border); border-radius:var(--radius); padding:14px; display:flex; gap:12px; transition:.2s; position:relative; }
.hot-site-card:hover { transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:var(--accent); }
.hot-site-rank { position:absolute; top:8px; right:10px; font-size:11px; color:var(--accent); font-weight:600; background:rgba(168,85,247,.08); padding:1px 6px; border-radius:4px; }

/* ========== 主内容 ========== */
.main-content { max-width:1200px; margin:0 auto; padding:0 20px 40px; }

.category-section { margin-bottom:36px; }
.category-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:16px; padding-bottom:8px; border-bottom:2px solid var(--border); }
.category-title { font-size:20px; font-weight:700; display:flex; align-items:center; gap:8px; }
.category-icon { font-size:24px; }
.category-count { font-size:13px; color:var(--text-muted); }
.cat-actions { display:flex; align-items:center; gap:8px; }

.sites-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; }
.site-card { background:var(--card-bg); border:1px solid var(--border); border-radius:var(--radius); padding:16px; display:flex; gap:12px; transition:.2s; box-shadow:var(--shadow); position:relative; }
.site-card:hover { transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:var(--accent); }
.site-favicon { flex-shrink:0; width:40px; height:40px; border-radius:8px; overflow:hidden; background:#f1f5f9; display:flex; align-items:center; justify-content:center; }
.site-favicon img { width:24px; height:24px; }
.site-info { flex:1; min-width:0; }
.site-name { font-weight:600; font-size:15px; color:var(--text); display:block; margin-bottom:4px; word-break:break-all; }
.site-desc { font-size:12px; color:var(--text-muted); margin-bottom:6px; overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.site-tags { display:flex; flex-wrap:wrap; gap:4px; }
.site-tag { display:inline-block; padding:1px 8px; border-radius:4px; font-size:11px; }
.site-status { flex-shrink:0; display:flex; align-items:center; }
.status-dot { width:8px; height:8px; border-radius:50%; display:inline-block; }
.status-online { background:#10b981; }
.status-offline { background:#94a3b8; }
.status-unknown { background:#94a3b8; }
.status-error { background:#ef4444; }
.status-checking { background:#f59e0b; animation:pulse 1s infinite; }
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.4} }

/* ========== 卡片右上角：点击次数（纯数字，无图标） ========== */
.card-clicks {
    position:absolute;
    top:8px;
    right:10px;
    font-size:11px;
    font-weight:600;
    color:var(--accent);
    background:rgba(168,85,247,.08);
    padding:1px 6px;
    border-radius:10px;
    z-index:2;
}

/* ========== 评分 + 吐槽 同行（标签下面） ========== */
.site-meta {
    display:flex;
    align-items:center;
    gap:8px;
    margin-top:8px;
    flex-wrap:wrap;
}
.user-score {
    display:inline-flex;
    align-items:center;
    font-size:12px;
    font-weight:700;
    padding:2px 8px;
    border-radius:10px;
    background:rgba(168,85,247,.12);
    color:var(--accent);
    border:1px solid rgba(168,85,247,.3);
}
.user-score.empty {
    background:rgba(148,163,184,.08);
    color:var(--text-muted);
    border-color:rgba(148,163,184,.25);
    font-weight:500;
}
.review-count {
    display:inline-flex;
    align-items:center;
    gap:2px;
    font-size:12px;
    font-weight:600;
    padding:2px 8px;
    border-radius:10px;
    background:rgba(99,102,241,.08);
    color:#6366f1;
    border:1px solid rgba(99,102,241,.2);
}
.review-count.zero {
    background:rgba(148,163,184,.08);
    color:var(--text-muted);
    border-color:rgba(148,163,184,.2);
    font-weight:500;
}

/* ========== 右下角直达按钮（小号实底紫） ========== */
.site-actions {
    position:absolute;
    right:10px;
    bottom:10px;
    z-index:2;
}
.btn-go {
    display:inline-flex;
    align-items:center;
    gap:3px;
    padding:4px 12px;
    background:var(--accent);
    color:#fff !important;
    border:none;
    border-radius:6px;
    font-size:12px;
    font-weight:500;
    cursor:pointer;
    text-decoration:none;
    transition:background .15s;
    font-family:inherit;
    line-height:1.4;
}
.btn-go:hover { background:var(--accent-hover); color:#fff !important; }

/* ========== 密码保护表单 ========== */
.password-form-wrap { max-width:400px; margin:20px auto; text-align:center; }
.pwd-error { background:#ef444422; color:#ef4444; border:1px solid #ef444444; padding:10px 16px; border-radius:8px; margin-bottom:16px; font-size:13px; }
.password-form { display:flex; gap:8px; align-items:center; background:var(--bg); padding:16px; border-radius:12px; border:1px solid var(--border); }
.password-form .lock-icon { font-size:20px; }
.password-form input[type="password"] { flex:1; padding:10px 14px; border:1px solid var(--border); border-radius:8px; background:var(--input-bg); color:var(--text); font-size:14px; }
.password-form button { padding:10px 20px; background:var(--accent); color:#fff; border:none; border-radius:8px; font-size:14px; cursor:pointer; }
.password-form button:hover { background:var(--accent-hover); }

/* ========== 友链 ========== */
.friends-section { max-width:1200px; margin:0 auto; padding:24px 20px 40px; }
.section-title { font-size:20px; font-weight:700; margin-bottom:16px; }
.friends-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:12px; margin-bottom:16px; }
.friend-card { background:var(--card-bg); border:1px solid var(--border); border-radius:var(--radius); padding:14px; transition:.2s; box-shadow:var(--shadow); }
.friend-card:hover { border-color:var(--accent); transform:translateY(-1px); }
.friend-name { font-weight:600; font-size:14px; margin-bottom:4px; }
.friend-desc { font-size:12px; color:var(--text-muted); }
.friend-apply { text-align:center; }
.btn-apply { display:inline-block; padding:10px 24px; background:var(--accent); color:#fff; border-radius:8px; font-size:14px; transition:.2s; }
.btn-apply:hover { background:var(--accent-hover); color:#fff; }

/* ========== 页脚 ========== */
.footer { text-align:center; padding:24px 20px; border-top:1px solid var(--border); color:var(--text-muted); font-size:13px; }
.footer-tip { font-size:12px; margin-top:4px; opacity:.8; }

/* ========== 弹窗 ========== */
.modal-overlay { display:none; position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:200; align-items:center; justify-content:center; padding:20px; }
.modal-overlay.active { display:flex; }
.modal-content { background:var(--card-bg); border-radius:16px; padding:28px; max-width:560px; width:100%; max-height:90vh; overflow-y:auto; position:relative; box-shadow:var(--shadow-lg); }
.modal-close { position:absolute; top:12px; right:16px; background:none; border:none; font-size:24px; cursor:pointer; color:var(--text-muted); }
.modal-body h2 { margin-bottom:12px; }
.modal-desc { color:var(--text-muted); margin-bottom:12px; }
.modal-tags { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:16px; }
.modal-actions { margin-bottom:16px; }
.btn-visit { display:inline-block; padding:10px 20px; background:var(--accent); color:#fff; border-radius:8px; font-size:14px; }
.btn-visit:hover { background:var(--accent-hover); color:#fff; }
.modal-meta { font-size:13px; color:var(--text-muted); border-top:1px solid var(--border); padding-top:12px; }
.modal-meta p { margin:4px 0; }
.modal-scores { margin:8px 0 12px; font-size:14px; }
.modal-avg { margin:6px 0 12px; font-size:14px; color:var(--accent); font-weight:600; }

/* ========== 弹窗内：三维度打分器 ========== */
.modal-rating { margin:12px 0 14px; padding:12px; background:rgba(168,85,247,.04); border:1px solid rgba(168,85,247,.15); border-radius:10px; }
.rating-title { font-size:13px; font-weight:600; color:var(--accent); margin-bottom:8px; }
.rating-rows { display:flex; flex-direction:column; gap:6px; }
.rating-row { display:flex; align-items:center; gap:10px; font-size:13px; }
.rating-label { min-width:60px; font-weight:500; color:var(--text-muted); }
.rating-stars { display:inline-flex; gap:2px; cursor:pointer; }
.rating-stars span { font-size:18px; opacity:.25; transition:opacity .15s; user-select:none; }
.rating-stars span.active { opacity:1; }
.rating-val { font-size:12px; color:var(--text-muted); margin-left:auto; }
.rating-actions { margin-top:8px; display:flex; align-items:center; gap:8px; }
.rating-tip { font-size:11px; color:var(--text-muted); }

/* ========== 弹窗内：吐槽区 ========== */
.modal-reviews { margin-top:14px; padding:12px; background:rgba(99,102,241,.03); border:1px solid rgba(99,102,241,.15); border-radius:10px; }
.modal-reviews .rating-title { color:#6366f1; }
.review-list { display:flex; flex-direction:column; gap:6px; margin-bottom:8px; }
.review-item { background:rgba(99,102,241,.06); border:1px solid rgba(99,102,241,.12); border-radius:8px; padding:7px 10px; font-size:12px; }
.review-head { display:flex; align-items:center; gap:6px; margin-bottom:2px; }
.review-nick { font-weight:600; color:#6366f1; font-size:11px; }
.review-time { font-size:10px; color:var(--text-muted); margin-left:auto; }
.review-text { color:var(--text); line-height:1.5; word-break:break-word; }
.review-empty { font-size:11px; color:var(--text-muted); text-align:center; padding:6px 0; margin:0; }
.review-form { display:flex; gap:6px; }
.review-form input[type="text"] { flex:1; padding:6px 10px; border:1px solid var(--border); border-radius:6px; font-size:12px; background:var(--input-bg); color:var(--text); font-family:inherit; }
.review-form input[type="text"]:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 2px rgba(168,85,247,.15); }
.review-form button { padding:6px 14px; background:var(--accent); color:#fff; border:none; border-radius:6px; font-size:12px; cursor:pointer; font-family:inherit; }
.review-form button:hover { background:var(--accent-hover); }

/* ========== Toast ========== */
.toast-container { position:fixed; top:20px; right:20px; z-index:300; display:flex; flex-direction:column; gap:8px; }
.toast { background:var(--card-bg); border:1px solid var(--border); border-radius:8px; padding:12px 20px; font-size:14px; box-shadow:var(--shadow-lg); animation:slideIn .3s ease; }
.toast.fade-out { opacity:0; transition:opacity .3s; }
@keyframes slideIn { from{transform:translateX(100%);opacity:0} to{transform:translateX(0);opacity:1} }

/* ========== 按钮通用 ========== */
.btn-refresh { padding:6px 14px; background:var(--card-bg); border:1px solid var(--border); border-radius:8px; font-size:13px; cursor:pointer; color:var(--text); transition:.2s; }
.btn-refresh:hover { border-color:var(--accent); color:var(--accent); }

/* ========== 响应式 ========== */
@media (max-width:768px) {
    .header-inner { flex-wrap:wrap; gap:8px; }
    .nav { order:3; width:100%; overflow-x:auto; }
    .search-title { font-size:22px; }
    .stats-grid { grid-template-columns:repeat(2,1fr); }
    .sites-grid { grid-template-columns:1fr; }
    .hot-sites-grid { grid-template-columns:1fr; }
    .news-container { padding:12px; }
    .fab { width:44px; height:44px; }
    .fab svg { width:18px; height:18px; }
    .cat-panel { width:260px; right:8px; }
    .ticker-bar { padding:0 12px; }
}

/* ========== 置顶分类横幅 ========== */
.priority-banner {
    max-width:1200px;
    margin:0 auto 16px;
    padding:10px 20px;
    background:linear-gradient(90deg, rgba(168,85,247,.08), rgba(168,85,247,.02));
    border:1px solid rgba(168,85,247,.3);
    border-radius:var(--radius);
    font-size:13px;
    color:var(--text);
    display:flex;
    align-items:center;
    gap:10px;
}
.priority-banner strong { color:var(--accent); }
.priority-clear {
    margin-left:auto;
    font-size:12px;
    color:var(--text-muted);
    text-decoration:none;
    padding:4px 10px;
    border-radius:6px;
    transition:.2s;
}
.priority-clear:hover { background:rgba(239,68,68,.1); color:#ef4444; }

.cat-priority {
    border:2px solid var(--accent) !important;
    box-shadow:0 0 0 4px rgba(168,85,247,.08), var(--shadow-lg) !important;
    animation:catPinIn .4s ease;
}
@keyframes catPinIn {
    0% { opacity:0; transform:translateY(-10px); }
    100% { opacity:1; transform:translateY(0); }
}
.cat-pin {
    font-size:12px;
    background:var(--accent);
    color:#fff;
    padding:1px 8px;
    border-radius:10px;
    margin-left:6px;
    vertical-align:middle;
}

/* ========== 悬浮按钮 ========== */
.fab {
    position:fixed;
    right:20px;
    width:48px;
    height:48px;
    border-radius:50%;
    border:none;
    background:var(--accent);
    color:#fff;
    display:flex;
    align-items:center;
    justify-content:center;
    cursor:pointer;
    box-shadow:0 4px 12px rgba(168,85,247,.4);
    z-index:250;
    opacity:1;
    visibility:visible;
    transform:scale(1);
    transition:background .2s, transform .2s, box-shadow .2s;
}
.fab:hover { background:var(--accent-hover); transform:scale(1.08); box-shadow:0 6px 16px rgba(168,85,247,.55); }
.fab-backtop { bottom:88px; }
.fab-categories { bottom:28px; }
.fab-categories.active { background:var(--accent-hover); transform:scale(1.08); }
.fab svg { color:#fff; }

/* ========== 分类展开面板 ========== */
.cat-panel {
    position:fixed;
    bottom:88px;
    right:20px;
    width:280px;
    max-height:60vh;
    overflow-y:auto;
    background:var(--card-bg);
    border:1px solid var(--border);
    border-radius:var(--radius);
    box-shadow:var(--shadow-lg);
    z-index:240;
    opacity:0;
    visibility:hidden;
    transform:translateY(16px);
    transition:opacity .3s ease, visibility .3s, transform .3s ease;
}
.cat-panel.active { opacity:1; visibility:visible; transform:translateY(0); }
.cat-panel-header {
    display:flex; align-items:center; justify-content:space-between;
    padding:12px 16px; border-bottom:1px solid var(--border);
    font-weight:600; font-size:14px; position:sticky; top:0;
    background:var(--card-bg); border-radius:var(--radius) var(--radius) 0 0; z-index:1;
}
.cat-panel-close { background:none; border:none; font-size:20px; cursor:pointer; color:var(--text-muted); line-height:1; padding:0 4px; }
.cat-panel-close:hover { color:var(--accent); }
.cat-panel-body { padding:6px 8px 10px; display:flex; flex-direction:column; gap:2px; }
.cat-panel-item {
    display:flex; align-items:center; gap:10px;
    padding:9px 12px; border-radius:8px;
    font-size:13px; color:var(--text); text-decoration:none; transition:background .2s;
}
.cat-panel-item:hover { background:rgba(168,85,247,.08); color:var(--accent); }
.cat-panel-icon { font-size:16px; width:20px; text-align:center; }
.cat-panel-name { flex:1; }
.cat-panel-lock { font-size:12px; }
.cat-panel-home { margin-top:6px; border-top:1px solid var(--border); padding-top:10px; font-weight:500; }

.cat-dock {
    width:100%; max-width:1200px; margin:0 auto;
    padding:0 20px; display:flex; flex-direction:column; gap:0; box-sizing:border-box;
}
.cat-dock:empty { display:none; }
.cat-dock .category-section { margin-bottom:36px; width:100%; box-sizing:border-box; animation:catJumpIn .35s ease; }
.cat-dock .sites-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:14px; }
.cat-dock .site-card {
    background:var(--card-bg); border:1px solid var(--border);
    border-radius:var(--radius); padding:16px; display:flex; gap:12px;
    transition:.2s; box-shadow:var(--shadow);
}
.cat-dock .site-card:hover { transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:var(--accent); }

@keyframes catJumpIn {
    0%   { opacity:0; transform:translateY(-12px); }
    100% { opacity:1; transform:translateY(0); }
}
/* ========== 评分星星 ========== */
.rating-stars span.lit { color:#ffb800; text-shadow:0 0 6px #ffb80088; }
.rating-stars span { color:#666; transition:.2s; }