/* ===== 花卷洞察 v2.6 · Q版橙光主题（精修版）=====
   优化清单：
   - 删重复 .radar-grid / 死代码 .score-hero
   - 间距系统统一 (8-12-16-24)
   - 字体层级收紧 (11/13/15/18/24/32)
   - 卡片 hover 强化 (厚边+位移)
   - Tab 过渡更丝滑
   - 表格交替行色
   - 散点 tooltip 精修
   - 响应式修复 (.hero-overlay→.hero-text)
================================================= */
:root {
    /* 阳光背景 */
    --sun-yellow: #FFC93C;
    --sun-orange: #FF8E2B;
    --sun-deep:   #F26B1F;

    /* 主品牌 */
    --pink:        #E91E63;
    --pink-soft:   #FF5C8A;
    --pink-pale:   #FFE4ED;

    /* 紫色描边/文字 */
    --ink:         #4A148C;
    --ink-soft:    #7B3FBF;
    --ink-faint:   #C4ADE6;

    /* 暖白基底 */
    --cream:       #FFE0CC;
    --cream-pale:  #FFF6EC;
    --paper:       #FFFCF5;
    --paper-deep:  #FFF1DC;

    /* 状态色（克制：3 色） */
    --status-action: var(--pink);
    --status-warn:   #F26B1F;
    --status-ok:     #1B998B;

    /* 描边 */
    --stroke:      3px;
    --stroke-thin: 2px;
    --radius:      14px;
    --radius-sm:   10px;
    --radius-lg:   22px;

    /* 阴影 — 厚边偏移 */
    --shadow-sm:   0 2px 0 0 var(--ink), 0 2px 8px rgba(74,20,140,.07);
    --shadow-md:   0 3px 0 0 var(--ink), 0 4px 14px rgba(74,20,140,.10);
    --shadow-lg:   0 4px 0 0 var(--ink), 0 8px 22px rgba(74,20,140,.12);

    /* 文字层级 */
    --text:        #2A0E45;
    --text-sub:    #6B4D8C;
    --text-light:  #A492C4;
    --fz-xs:       11px;
    --fz-sm:       13px;
    --fz-base:     15px;
    --fz-lg:       18px;
    --fz-xl:       24px;
    --fz-2xl:      32px;

    /* 渐变 */
    --grad-sun:    radial-gradient(circle at 50% 20%, #FFE07A 0%, #FFB627 35%, #FF8E2B 70%, #F26B1F 100%);
    --grad-pink:   linear-gradient(135deg, #E91E63 0%, #FF5C8A 100%);
    --grad-card:   linear-gradient(180deg, #FFFCF5 0%, #FFF6EC 100%);
    --grad-soft:   linear-gradient(135deg, #FFE4ED 0%, #FFF6EC 100%);
}

* { margin: 0; padding: 0; box-sizing: border-box; }

body {
    font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
    background: var(--grad-sun);
    background-attachment: fixed;
    color: var(--text);
    line-height: 1.6;
    font-size: var(--fz-sm);
    min-height: 100vh;
    -webkit-font-smoothing: antialiased;
}

/* 背景阳光放射线纹理 */
body::before {
    content: '';
    position: fixed;
    inset: 0;
    background: repeating-conic-gradient(
        from 0deg at 50% 30%,
        transparent 0deg 14deg,
        rgba(255,255,255,.04) 14deg 15deg
    );
    pointer-events: none;
    z-index: 0;
}

/* ===== 品牌头图（左图右文） ===== */
.hero {
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 18px;
    align-items: center;
    width: 100%;
    max-width: 1400px;
    margin: 16px auto 0;
    padding: 0 12px;
    z-index: 1;
    position: relative;
}
.hero-img {
    display: block;
    width: 180px; height: 180px;
    object-fit: contain;
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
    background: var(--paper);
    transition: transform .25s cubic-bezier(.34,1.56,.64,1);
}
.hero-img:hover { transform: scale(1.04) rotate(-1deg); }
.hero-text {
    background: var(--paper);
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius-lg);
    padding: 18px 24px;
    box-shadow: var(--shadow-md);
    position: relative;
}
/* 气泡尾巴三角 */
.hero-text::before {
    content: '';
    position: absolute;
    left: -10px; top: 50%;
    transform: translateY(-50%) rotate(45deg);
    width: 16px; height: 16px;
    background: var(--paper);
    border-left: var(--stroke) solid var(--ink);
    border-bottom: var(--stroke) solid var(--ink);
}
.hero-title {
    font-size: var(--fz-2xl);
    font-weight: 900;
    color: var(--pink);
    -webkit-text-stroke: 1.2px var(--ink);
    text-shadow: 2px 2px 0 var(--sun-yellow);
    letter-spacing: 2px;
    line-height: 1.15;
}
.hero-sub {
    font-size: var(--fz-sm);
    color: var(--ink);
    font-weight: 600;
    margin-top: 6px;
    opacity: .85;
}
.hero-tags {
    display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap;
}
.hero-tags span {
    background: var(--cream-pale);
    color: var(--ink);
    padding: 3px 10px;
    border-radius: 10px;
    font-size: var(--fz-xs);
    font-weight: 700;
    border: 1.5px solid var(--ink);
}

/* ===== 顶部状态条 ===== */
.topbar {
    max-width: 1400px;
    margin: 12px auto 0;
    padding: 0 12px;
    z-index: 1;
    position: relative;
}
.topbar-stats { display: flex; gap: 8px; flex-wrap: wrap; }
.stat-chip {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: 20px;
    padding: 5px 14px;
    font-size: var(--fz-xs);
    color: var(--ink);
    font-weight: 700;
    box-shadow: 0 2px 0 0 var(--ink);
}

/* ===== Tab 切换 ===== */
.tabs {
    display: flex;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    padding: 5px;
    margin: 12px 12px 0;
    gap: 3px;
    position: sticky; top: 12px; z-index: 99;
    box-shadow: var(--shadow-sm);
    max-width: 1400px;
    margin-left: auto; margin-right: auto;
}
.tab {
    flex: 1;
    padding: 10px 12px;
    cursor: pointer;
    border: var(--stroke-thin) solid transparent;
    border-radius: var(--radius-sm);
    color: var(--ink-soft);
    font-size: var(--fz-sm);
    font-weight: 700;
    background: transparent;
    transition: all .2s cubic-bezier(.16,1,.3,1);
    text-align: center;
    position: relative;
    overflow: hidden;
}
.tab::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--grad-pink);
    opacity: 0;
    transition: opacity .2s;
    border-radius: var(--radius-sm);
    z-index: -1;
}
.tab:hover { color: var(--pink); background: var(--pink-pale); }
.tab.on { color: #fff; border-color: var(--ink); box-shadow: 0 2px 0 0 var(--ink); }
.tab.on::after { opacity: 1; }

.container {
    max-width: 1400px;
    margin: 16px auto 40px;
    padding: 0 12px;
    position: relative;
    z-index: 1;
}

.panel { display: none; }
.panel.on {
    display: block;
    animation: pop-in .3s cubic-bezier(.34,1.56,.64,1);
}
#insight-content {
    display: flex; flex-direction: column; gap: 8px;
}
@keyframes pop-in {
    0% { opacity: 0; transform: scale(.97) translateY(6px); }
    100% { opacity: 1; transform: scale(1) translateY(0); }
}

/* ===== 卡片通用 ===== */
.card {
    background: var(--grad-card);
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
    padding: 20px;
    margin-bottom: 16px;
    transition: box-shadow .2s, transform .15s;
}
.card:hover {
    box-shadow: var(--shadow-lg);
}
.card-title {
    font-size: var(--fz-base);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 14px;
    display: flex;
    align-items: center;
    gap: 8px;
    padding-bottom: 10px;
    border-bottom: var(--stroke-thin) dashed var(--ink-faint);
}

/* ===== Tab 1 KPI 网格 ===== */
.kpi-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 10px;
}
.kpi-cell {
    text-align: center;
    padding: 16px 8px 12px;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .2s cubic-bezier(.34,1.56,.64,1), box-shadow .2s;
    position: relative;
}
.kpi-cell:hover {
    transform: translateY(-3px);
    box-shadow: 0 4px 0 0 var(--ink);
}
.kpi-label {
    font-size: var(--fz-xs);
    color: var(--text-sub);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .5px;
    margin-bottom: 6px;
}
.kpi-value {
    font-size: 24px;
    font-weight: 900;
    color: var(--pink);
    -webkit-text-stroke: .4px var(--ink);
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
}
.kpi-grade {
    font-size: var(--fz-xs);
    color: var(--ink);
    background: var(--sun-yellow);
    padding: 1px 8px;
    border-radius: 8px;
    border: 1.5px solid var(--ink);
    font-weight: 800;
    margin-left: 4px;
    display: inline-block;
    vertical-align: middle;
}
.kpi-sub {
    font-size: 10px;
    color: var(--text-light);
    margin-top: 4px;
    font-weight: 600;
}
.kpi-rank {
    display: inline-block;
    margin-top: 6px;
    padding: 3px 12px;
    border-radius: 999px;
    font-size: 10px;
    font-weight: 800;
    letter-spacing: .3px;
    border: 1.5px solid transparent;
    transition: transform .15s;
}
.kpi-rank:hover { transform: scale(1.08); }
/* v2.8 色阶收敛 — 统一暖系淡底+彩字(非实心块) */
.kpi-rank--top5  { background: var(--pink-pale);  color: var(--pink);       border-color: var(--pink);     }
.kpi-rank--top25 { background: #FFF1DC;           color: var(--sun-orange); border-color: var(--sun-orange); }
.kpi-rank--mid   { background: var(--cream-pale); color: var(--ink-soft);  border-color: var(--ink-soft); }
.kpi-rank--low25 { background: var(--paper);      color: var(--text-sub);  border-color: var(--ink-faint); }
.kpi-rank--low50 { background: var(--paper);      color: var(--text-light); border-color: var(--ink-faint); }
.kpi-rank--none  { background: transparent;       color: var(--text-sub);  border-color: transparent;      }

/* 数值单位 */
.kpi-unit {
    font-size: 12px;
    font-weight: 700;
    color: var(--text-sub);
    margin-left: 2px;
    vertical-align: baseline;
    opacity: .7;
}

/* ===== 5 维雷达 ===== */
.radar-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 10px;
}
.radar-cell {
    text-align: center;
    padding: 14px 6px;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .2s cubic-bezier(.34,1.56,.64,1);
}
.radar-cell:hover { transform: translateY(-3px); }
.radar-cell .v {
    font-size: 22px;
    font-weight: 800;
    color: var(--pink);
    -webkit-text-stroke: .4px var(--ink);
    line-height: 1.1;
}
.radar-cell .l {
    font-size: var(--fz-xs);
    color: var(--ink);
    margin-top: 4px;
    font-weight: 700;
}
.radar-cell .s {
    font-size: 10px;
    color: var(--text-light);
    margin-top: 2px;
}

/* ===== 待补短板 ===== */
.gap-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px 16px;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-left: 6px solid var(--status-warn);
    border-radius: var(--radius-sm);
    margin-bottom: 10px;
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .15s;
}
.gap-item:hover { transform: translateX(2px); }
.gap-item.high { border-left-color: var(--status-action); }
.gap-item.medium { border-left-color: var(--status-warn); }
.gap-item .num {
    font-weight: 800;
    color: #fff;
    background: var(--status-warn);
    min-width: 28px; height: 28px;
    border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    border: 2px solid var(--ink);
    flex-shrink: 0;
    font-size: var(--fz-sm);
    line-height: 1;
}
.gap-item.high .num { background: var(--status-action); }
.gap-item .text { flex: 1; font-size: var(--fz-sm); color: var(--text); font-weight: 500; line-height: 1.5; }
.gap-role-models { margin-top: 8px; padding-left: 0; }
.gap-model-label { font-size: var(--fz-xs); color: var(--status-ok); font-weight: 700; margin-bottom: 4px; }
.gap-model-chip {
    display: inline-block;
    font-size: var(--fz-xs);
    color: var(--ink);
    font-weight: 700;
    text-decoration: none;
    padding: 3px 10px;
    background: var(--cream-pale);
    border: 1.5px solid var(--ink-faint);
    border-radius: 8px;
    margin-right: 6px;
    margin-bottom: 4px;
    transition: all .15s;
    cursor: pointer;
}
.gap-model-chip:hover { color: var(--pink); border-color: var(--pink); background: var(--pink-pale); transform: translateY(-1px); }

/* ===== 本周建议下钻 ===== */
.weekly-drill-blogger {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink-faint);
    border-radius: var(--radius-sm);
    padding: 10px 14px;
    margin-bottom: 8px;
    transition: transform .15s;
}
.weekly-drill-blogger:hover { transform: translateY(-2px); box-shadow: 0 3px 0 0 var(--ink); }
.weekly-drill-header {
    display: flex; align-items: center; gap: 8px; margin-bottom: 6px;
}
.weekly-drill-videos {
    display: flex; flex-direction: column; gap: 4px;
}
.weekly-drill-vid {
    display: flex; justify-content: space-between; align-items: center;
    font-size: var(--fz-xs); color: var(--text-sub);
    padding: 4px 8px;
    background: var(--cream-pale);
    border-radius: 6px;
}
.weekly-drill-vid .vid-title {
    font-weight: 600; color: var(--text);
    max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.weekly-drill-vid .vid-stats {
    font-weight: 700; font-size: 10px;
}

/* ===== v2.12: Top 3 最佳视频 ===== */
.top3-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}
.top3-card {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    padding: 16px;
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .2s cubic-bezier(.34,1.56,.64,1);
}
.top3-card:hover { transform: translateY(-3px); box-shadow: 0 4px 0 0 var(--ink); }
.top3-medal {
    font-size: var(--fz-base);
    font-weight: 900;
    color: var(--pink);
    margin-bottom: 6px;
    -webkit-text-stroke: .3px var(--ink);
}
.top3-title {
    font-size: var(--fz-sm);
    font-weight: 600;
    color: var(--ink);
    line-height: 1.4;
    margin-bottom: 8px;
    min-height: 36px;
}
.top3-meta {
    font-size: 10px;
    color: var(--text-sub);
    margin-bottom: 10px;
    font-weight: 600;
}
.top3-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 4px;
    margin-bottom: 10px;
}
.top3-stat {
    text-align: center;
}
.top3-val {
    display: block;
    font-size: 16px;
    font-weight: 800;
    color: var(--pink);
    line-height: 1.1;
}
.top3-lbl {
    display: block;
    font-size: 9px;
    color: var(--text-sub);
    font-weight: 600;
    margin-top: 2px;
}
.top3-link {
    display: inline-block;
    font-size: var(--fz-xs);
    color: var(--ink-soft);
    font-weight: 700;
    text-decoration: none;
    padding: 4px 10px;
    background: var(--cream-pale);
    border-radius: 8px;
    border: 1.5px solid var(--ink-faint);
    transition: all .15s;
}
.top3-link:hover { color: var(--pink); border-color: var(--pink); background: var(--pink-pale); }

/* ===== v2.12: 发布节奏 ===== */
.rhythm-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}
.rhythm-cell {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    padding: 14px 10px;
    text-align: center;
    box-shadow: 0 2px 0 0 var(--ink);
}
.rhythm-month {
    font-size: var(--fz-base);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 8px;
}
.rhythm-stat {
    margin: 6px 0;
}
.rhythm-num {
    display: inline-block;
    font-size: 18px;
    font-weight: 800;
    color: var(--pink);
    min-width: 50px;
}
.rhythm-label {
    display: inline-block;
    font-size: 10px;
    color: var(--text-sub);
    font-weight: 600;
    margin-left: 4px;
}
.rhythm-tip {
    margin-top: 10px;
    font-size: var(--fz-xs);
    color: var(--text-sub);
    font-weight: 500;
    padding: 6px 12px;
    background: var(--cream-pale);
    border-radius: 8px;
    border-left: 4px solid var(--sun-orange);
}

/* v2.12: 右侧 Y 轴 */
.ax-label-right { fill: var(--status-ok) !important; font-weight: 700; }

@media (max-width: 768px) {
    .top3-grid { grid-template-columns: 1fr; }
    .rhythm-grid { grid-template-columns: 1fr; }
    .top3-stats { grid-template-columns: repeat(4, 1fr); }
}

/* ===== 视频趋势图 ===== */
.trend-legend {
    display: flex; gap: 16px; flex-wrap: wrap;
    margin-bottom: 10px; padding: 0 4px;
    font-size: var(--fz-xs);
    color: var(--ink);
    font-weight: 600;
    align-items: center;
}
.legend-item { display: inline-flex; align-items: center; gap: 6px; }
.legend-dot {
    display: inline-block;
    width: 12px; height: 12px;
    border-radius: 50%;
    border: 1.5px solid var(--ink);
}
.legend-tip {
    color: var(--text-sub);
    font-weight: 500;
    margin-left: auto;
    font-size: var(--fz-xs);
}
.trend-svg-host {
    position: relative;
    width: 100%;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    box-shadow: 0 2px 0 0 var(--ink);
    padding: 6px;
    box-sizing: border-box;
    cursor: crosshair;
}
.trend-svg {
    display: block;
    width: 100%;
    height: auto;
    max-height: 420px;
    pointer-events: none; /* 所有事件交给 host */
}
.trend-svg .ax-tick {
    font-size: 10px;
    fill: var(--text-sub);
    font-family: "SF Mono", Menlo, monospace;
}
.trend-svg .ax-label { font-size: 10px; fill: var(--text-sub); font-weight: 600; }
.trend-svg .ax-title { font-size: var(--fz-xs); fill: var(--ink); font-weight: 800; }

.trend-meta {
    margin-top: 10px;
    font-size: var(--fz-sm);
    color: var(--text-sub);
    padding: 0 4px;
}

.trend-dot { pointer-events: none; }
.trend-hit { cursor: pointer; }

/* 悬停悬浮窗（不参与布局，不抖动） */
#trend-tooltip {
    display: none;
    position: fixed;
    background: var(--paper);
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius-sm);
    padding: 10px 16px;
    box-shadow: var(--shadow-lg);
    z-index: 999;
    max-width: 420px;
    font-size: var(--fz-sm);
    color: var(--ink);
    font-weight: 600;
    line-height: 1.5;
    pointer-events: none;
}
#trend-tooltip b {
    display: block;
    font-weight: 800;
    color: var(--text);
    margin-bottom: 4px;
}
#trend-tooltip .tip-meta {
    font-size: var(--fz-xs);
    color: var(--text-sub);
    font-weight: 500;
}

/* ===== Tab 2 行动清单 ===== */
.priority-group { margin-bottom: 16px; }
.priority-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 10px;
    padding: 10px 14px;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    font-weight: 800;
    color: var(--ink);
    font-size: var(--fz-sm);
    box-shadow: 0 2px 0 0 var(--ink);
}
.priority-header .badge {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 10px;
    font-size: var(--fz-xs);
    color: #fff;
    font-weight: 800;
    border: 1.5px solid var(--ink);
}
.priority-header .badge.P0   { background: var(--status-action); }
.priority-header .badge.P1   { background: var(--status-warn); }
.priority-header .badge.skip { background: var(--paper-deep); color: var(--text-sub); border-color: var(--text-light); }

.action-item {
    background: var(--paper);
    padding: 14px 16px;
    border-radius: var(--radius-sm);
    margin-bottom: 10px;
    border: var(--stroke-thin) solid var(--ink);
    border-left: 6px solid var(--ink-faint);
    display: flex;
    align-items: center;
    gap: 12px;
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .2s cubic-bezier(.34,1.56,.64,1);
}
.action-item:hover { transform: translateX(4px); }
.action-item.P0   { border-left-color: var(--status-action); }
.action-item.P1   { border-left-color: var(--status-warn); }
.action-item.P2   { border-left-color: var(--ink-soft); }
.action-item.skip { opacity: .55; border-left-color: var(--ink-faint); }
.action-item .num {
    min-width: 32px; height: 32px;
    border-radius: 50%;
    background: var(--cream);
    display: flex; align-items: center; justify-content: center;
    font-weight: 800;
    font-size: var(--fz-sm);
    color: var(--ink);
    border: 2px solid var(--ink);
    flex-shrink: 0;
    transition: transform .2s;
}
.action-item.P0 .num { background: var(--status-action); color: #fff; }
.action-item.P1 .num { background: var(--status-warn); color: #fff; }
.action-item .body { flex: 1; }
.action-item .body .title { font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.action-item .body .reason { font-size: var(--fz-xs); color: var(--text-sub); font-weight: 500; }
.action-item .ip-tag {
    background: var(--sun-yellow);
    color: var(--ink);
    padding: 3px 10px;
    border-radius: 10px;
    font-size: var(--fz-xs);
    font-weight: 800;
    border: 1.5px solid var(--ink);
    flex-shrink: 0;
}

/* ===== Tab 3 表格 ===== */
.data-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-size: var(--fz-sm);
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    overflow: hidden;
    box-shadow: 0 2px 0 0 var(--ink);
}
.data-table th {
    background: var(--paper-deep);
    color: var(--ink);
    padding: 11px 12px;
    text-align: left;
    font-weight: 800;
    border-bottom: var(--stroke-thin) solid var(--ink);
    font-size: var(--fz-xs);
    letter-spacing: .5px;
    position: sticky; top: 0;
}
.data-table td {
    padding: 11px 12px;
    border-bottom: 1px dashed var(--ink-faint);
    color: var(--text);
    font-weight: 500;
}
.data-table tbody tr:nth-child(even) td { background: rgba(255,241,220,.4); }
.data-table tbody tr:hover td { background: var(--cream-pale); }
.data-table tbody tr:hover td:first-child { font-weight: 800; color: var(--ink); }
.data-table tbody tr:last-child td { border-bottom: none; }

/* 单元格内联标签 */
.cell-tag {
    display: inline-block;
    padding: 2px 10px;
    border: 1.5px solid var(--ink);
    border-radius: 6px;
    font-size: 10px;
    font-weight: 700;
    background: transparent;
    color: var(--ink);
}
.cell-tag.action { color: var(--status-action); border-color: var(--status-action); }
.cell-tag.warn   { color: var(--status-warn);   border-color: var(--status-warn); }
.cell-tag.ok     { color: var(--status-ok);     border-color: var(--status-ok); }
.cell-tag.skip   { color: var(--text-sub);      border-color: var(--text-light); }

/* 耽美IP热度排名 */
.heat-rank {
    display: inline-block;
    font-size: 13px;
    font-weight: 700;
}
.heat-rank.hot   { color: var(--pink); }
.heat-rank.warm  { color: var(--sun-orange); }
.heat-rank.cool  { color: var(--ink-soft); }

.heat-bar {
    display: inline-flex;
    align-items: center;
    position: relative;
    width: 100%;
    min-width: 80px;
}
.heat-fill {
    display: inline-block;
    height: 14px;
    border-radius: 4px;
    transition: width .5s ease;
}
.heat-fill.hot   { background: var(--pink); }
.heat-fill.warm  { background: var(--sun-orange); }
.heat-fill.cool  { background: var(--ink-soft); }
.heat-val {
    display: inline-block;
    font-size: 12px;
    font-weight: 700;
    margin-left: 6px;
    color: var(--ink);
}

.heat-tip {
    font-size: var(--fz-xs);
    color: var(--text-light);
    margin-bottom: 8px;
}

/* 散点图 */
.scatter-wrap {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    padding: 18px;
    margin-top: 16px;
    box-shadow: var(--shadow-sm);
}
.scatter-canvas { width: 100%; height: 420px; position: relative; }
.scatter-dot {
    position: absolute;
    border-radius: 50%;
    cursor: pointer;
    transition: transform .2s, box-shadow .2s;
    border: 2px solid var(--ink);
    background: var(--cream);
}
.scatter-dot:hover {
    transform: scale(1.8);
    z-index: 10;
    box-shadow: 0 0 0 4px rgba(255,255,255,.6), 0 0 0 6px var(--ink-faint);
}
.scatter-dot.me {
    background: var(--pink) !important;
    box-shadow: 0 0 0 4px var(--sun-yellow), 0 0 0 6px var(--ink);
    z-index: 5;
    animation: pulse-me 2s ease-in-out infinite;
}
@keyframes pulse-me {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.15); }
}
.scatter-tip {
    font-size: var(--fz-xs);
    color: var(--text-sub);
    margin-top: 10px;
    padding: 8px 12px;
    background: var(--cream-pale);
    border-radius: 8px;
    border-left: 4px solid var(--sun-orange);
}

/* ===== v2.9 新增：Tab 1 视频总数据聚合卡 ===== */
.totals-header {
    font-size: var(--fz-xs);
    color: var(--text-sub);
    font-weight: 700;
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 10px;
}
.totals-meta { color: var(--ink-soft); font-weight: 500; }
.totals-meta b { color: var(--ink); font-weight: 800; }
.totals-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 10px;
}
.totals-cell {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    box-shadow: 0 2px 0 0 var(--ink);
    padding: 14px 8px;
    text-align: center;
    transition: transform .2s;
}
.totals-cell:hover { transform: translateY(-2px); }
.totals-label {
    font-size: 10px;
    color: var(--text-sub);
    font-weight: 700;
    margin-bottom: 6px;
    text-transform: uppercase;
    letter-spacing: .3px;
}
.totals-value {
    font-size: 20px;
    font-weight: 900;
    color: var(--pink);
    -webkit-text-stroke: .3px var(--ink);
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
}

/* ===== v2.9 新增：Tab 3 二次元子赛道总览 ===== */
.track-my-badge {
    display: inline-block;
    background: var(--grad-pink);
    color: #fff;
    padding: 5px 14px;
    border-radius: 999px;
    font-size: var(--fz-sm);
    font-weight: 800;
    border: 2px solid var(--ink);
    box-shadow: 0 2px 0 0 var(--ink);
    margin-bottom: 14px;
}
.track-my-badge b { font-weight: 900; }
.track-tip {
    font-size: var(--fz-xs);
    color: var(--text-sub);
    margin-top: 12px;
    padding: 8px 12px;
    background: var(--cream-pale);
    border-radius: 8px;
    border-left: 4px solid var(--sun-orange);
}
.track-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px;
}
.track-cell {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    box-shadow: 0 2px 0 0 var(--ink);
    padding: 14px;
    position: relative;
    transition: transform .2s cubic-bezier(.34,1.56,.64,1);
}
.track-cell:hover { transform: translateY(-3px); box-shadow: 0 4px 0 0 var(--ink); }
.track-cell.me {
    background: var(--grad-soft);
    border: var(--stroke) solid var(--pink);
    box-shadow: 0 3px 0 0 var(--ink), 0 0 0 3px var(--pink-pale);
}
.me-badge {
    position: absolute;
    top: -10px; right: 10px;
    background: var(--pink);
    color: #fff;
    padding: 2px 10px;
    border-radius: 999px;
    font-size: 10px;
    font-weight: 800;
    border: 2px solid var(--ink);
}
.track-name {
    font-size: var(--fz-lg);
    font-weight: 900;
    color: var(--ink);
    margin-bottom: 6px;
}
.track-opp {
    font-size: 32px;
    font-weight: 900;
    color: var(--pink);
    -webkit-text-stroke: .5px var(--ink);
    line-height: 1;
    margin-bottom: 6px;
}
.opp-unit { font-size: 14px; color: var(--ink-soft); font-weight: 700; margin-left: 4px; opacity: .7; }
.track-level { margin-bottom: 10px; }
.track-stats { margin: 10px 0; }
.ts-row {
    display: flex;
    justify-content: space-between;
    font-size: var(--fz-xs);
    color: var(--text-sub);
    padding: 4px 0;
    border-bottom: 1px dashed var(--ink-faint);
}
.ts-row:last-child { border-bottom: none; }
.ts-row b { color: var(--ink); font-weight: 800; }
.track-meter {
    display: flex;
    height: 8px;
    border-radius: 4px;
    overflow: hidden;
    border: 1.5px solid var(--ink);
    margin-top: 6px;
}
.meter-seg { height: 100%; transition: width .4s; }
.meter-seg.blue { background: var(--status-ok); }
.meter-seg.rate { background: var(--status-action); }
.meter-seg.ceil { background: var(--status-warn); }
.track-meter-legend {
    display: flex;
    gap: 8px;
    margin-top: 6px;
    font-size: 10px;
    color: var(--text-sub);
    font-weight: 600;
    justify-content: center;
}
.track-meter-legend i {
    display: inline-block;
    width: 8px; height: 8px;
    border-radius: 50%;
    margin-right: 3px;
    vertical-align: middle;
}

/* ===== Tab 4 竞品对标 ===== */
.peer-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 12px;
    margin-bottom: 16px;
}
.peer-card {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    padding: 14px;
    cursor: pointer;
    transition: all .2s cubic-bezier(.34,1.56,.64,1);
    box-shadow: 0 2px 0 0 var(--ink);
    position: relative;
}
.peer-card:hover { transform: translateY(-3px); box-shadow: 0 4px 0 0 var(--ink); }
.peer-card.selected {
    border-color: var(--pink);
    border-width: var(--stroke);
    background: var(--grad-soft);
    box-shadow: 0 3px 0 0 var(--ink), 0 0 0 3px var(--pink);
}
.peer-card.selected::after {
    content: '✓';
    position: absolute;
    top: -8px; right: -8px;
    width: 24px; height: 24px;
    background: var(--pink);
    color: #fff;
    border: 2px solid var(--ink);
    border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-weight: 800;
    font-size: var(--fz-sm);
}
.peer-card .name { font-weight: 800; color: var(--ink); margin-bottom: 4px; font-size: var(--fz-base); }
.peer-card .meta { font-size: var(--fz-xs); color: var(--text-sub); font-weight: 500; }
.peer-card .ips { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 4px; }
.peer-card .ips span {
    background: var(--sun-yellow);
    color: var(--ink);
    padding: 2px 8px;
    border-radius: 8px;
    font-size: 10px;
    font-weight: 700;
    border: 1.5px solid var(--ink);
}
.peer-card .score {
    font-size: var(--fz-xs);
    color: var(--pink);
    margin-top: 8px;
    font-weight: 800;
}

.videos-compare {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 14px;
    margin-top: 16px;
}
.video-col {
    background: var(--paper);
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius);
    padding: 14px;
    box-shadow: var(--shadow-sm);
}
.video-col .col-header {
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 10px;
    padding-bottom: 10px;
    border-bottom: var(--stroke-thin) dashed var(--ink-faint);
    font-size: var(--fz-sm);
    display: flex; align-items: center; gap: 6px;
}
.video-col .col-header.me { color: var(--pink); }
.video-item {
    padding: 10px 8px;
    border-bottom: 1px dashed var(--ink-faint);
    font-size: var(--fz-xs);
}
.video-item:last-child { border-bottom: none; }
.video-item .title { margin-bottom: 6px; color: var(--text); font-weight: 500; line-height: 1.4; }
.video-item .meta { color: var(--text-sub); display: flex; gap: 10px; font-size: var(--fz-xs); }
.video-item .inter { color: var(--pink); font-weight: 800; }

/* ===== Loading & Empty ===== */
.loading {
    text-align: center;
    padding: 50px;
    color: var(--ink);
    font-weight: 600;
    font-size: var(--fz-sm);
}
.loading::before {
    content: '🍥';
    display: block;
    font-size: 48px;
    margin-bottom: 12px;
    animation: spin 1.5s linear infinite;
}
@keyframes spin {
    0% { transform: rotate(0); }
    100% { transform: rotate(360deg); }
}
.empty {
    text-align: center;
    padding: 50px;
    color: var(--ink-soft);
    font-size: var(--fz-sm);
    font-weight: 500;
}

/* ===== 响应式 ===== */
@media (max-width: 768px) {
    .hero {
        grid-template-columns: 100px 1fr;
        gap: 12px;
    }
    .hero-img { width: 100px; height: 100px; }
    .hero-text::before { display: none; }  /* 小屏不画三角 */
    .hero-text { padding: 14px 16px; }
    .hero-title { font-size: 22px; }
    .hero-sub { font-size: var(--fz-xs); }
    .tabs {
        top: 10px;
        margin: 10px 8px 0;
        overflow-x: auto;
        flex-wrap: nowrap;
    }
    .tab { padding: 8px 10px; font-size: 12px; flex: 0 0 auto; white-space: nowrap; }
    .container { padding: 0 8px; }
    .kpi-grid { grid-template-columns: repeat(3, 1fr); }
    .totals-grid { grid-template-columns: repeat(2, 1fr); }
    .kpi-value { font-size: 18px; }
    .radar-grid { grid-template-columns: repeat(5, 1fr); gap: 6px; }
    .radar-cell { padding: 8px 2px; }
    .radar-cell .v { font-size: 16px; }
    .radar-cell .l { font-size: 10px; }
    .peer-grid { grid-template-columns: 1fr 1fr; }
    .videos-compare { grid-template-columns: 1fr; }
    .data-table th, .data-table td { padding: 8px 6px; font-size: var(--fz-xs); }
}

/* ===== v3.0 Tab 5: 洞察报告 ===== */
.insight-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 10px;
}
.insight-card {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    padding: 14px;
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .2s cubic-bezier(.34,1.56,.64,1);
    position: relative;
}
.insight-card:hover { transform: translateY(-3px); box-shadow: 0 4px 0 0 var(--ink); }
.insight-card.rec-3 { border-left: 5px solid var(--status-ok); }
.insight-card.rec-2 { border-left: 5px solid var(--status-action); }
.insight-card.rec-1 { border-left: 5px solid var(--status-warn); opacity: .85; }
.insight-card.rec-0 { border-left: 5px solid var(--ink-faint); opacity: .7; }
.insight-card-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
.insight-rec { font-size: 10px; font-weight: 800; padding: 2px 8px; border-radius: 8px; }
.rec-3 .insight-rec { background: var(--status-ok); color: #fff; }
.rec-2 .insight-rec { background: var(--pink-pale); color: var(--pink); }
.rec-1 .insight-rec { background: var(--sun-yellow); color: var(--ink); }
.rec-0 .insight-rec { background: var(--ink-faint); color: var(--text-sub); }
.insight-num { font-size: var(--fz-xs); color: var(--text-sub); font-weight: 700; }
.insight-card-title { font-size: var(--fz-sm); font-weight: 800; color: var(--ink); margin-bottom: 6px; line-height: 1.3; }
.insight-card-kw { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 8px; }
.kw-tag { font-size: 10px; padding: 1px 6px; background: var(--cream-pale); border-radius: 4px; color: var(--ink-soft); font-weight: 600; }
.insight-card-stats { display: flex; gap: 8px; font-size: 10px; color: var(--text-sub); font-weight: 600; margin-bottom: 4px; }
.insight-card-meta { display: flex; gap: 8px; font-size: 10px; color: var(--text-light); margin-bottom: 6px; }
.insight-card-meta .density { color: var(--status-warn); font-weight: 700; }
.insight-card-ips { display: flex; flex-wrap: wrap; gap: 3px; margin-bottom: 6px; }
.ip-chip { font-size: 9px; padding: 1px 6px; background: var(--sun-yellow); color: var(--ink); border-radius: 4px; font-weight: 700; }
.insight-card-footer { font-size: 10px; color: var(--pink); font-weight: 700; border-top: 1px dashed var(--ink-faint); padding-top: 6px; line-height: 1.3; }
.insight-card-est { font-size: 10px; color: var(--status-ok); font-weight: 700; margin-top: 4px; padding-top: 4px; border-top: 1px dashed var(--ink-faint); }
/* v2.19: 赛道机会 · 卡片网格重设计 */

/* ── 板块标题（替代 card-title） ── */
.section-header {
    display: flex; align-items: center; gap: 10px;
    margin-bottom: 24px; padding-bottom: 14px;
    border-bottom: var(--stroke) solid var(--ink);
}
.section-header-icon {
    font-size: 24px; width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
    background: var(--paper-deep); border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm); box-shadow: 0 2px 0 0 var(--ink);
}
.section-header-text h3 {
    font-size: var(--fz-lg); font-weight: 900; color: var(--ink);
    margin: 0; line-height: 1.2;
}
.section-header-text span {
    font-size: var(--fz-xs); color: var(--text-sub); font-weight: 600;
}

/* ── 赛道卡片网格 ── */
.opportunity-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: 12px;
    margin-bottom: 32px;
}
.opp-card {
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius);
    padding: 0;
    overflow: hidden;
    box-shadow: var(--shadow-sm);
    transition: transform .15s, box-shadow .15s;
    display: flex; flex-direction: column;
}
.opp-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lg);
}
.opp-card-header {
    padding: 16px 18px 12px;
    border-bottom: 1px dashed var(--ink-faint);
}
.opp-card-name {
    font-size: var(--fz-lg); font-weight: 900; color: var(--ink);
    line-height: 1.2; margin-bottom: 4px;
}
.opp-card-sub {
    font-size: var(--fz-xs); font-weight: 700;
    display: inline-block;
    padding: 2px 10px; border-radius: 6px;
    border: 1.5px solid var(--ink-faint);
    color: var(--text-sub); background: var(--cream-pale);
}
.opp-card-body {
    padding: 14px 18px;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 8px;
}
.opp-metric {
    text-align: center;
    padding: 8px 4px;
    background: var(--cream-pale);
    border-radius: var(--radius-sm);
}
.opp-metric-val {
    font-size: var(--fz-base); font-weight: 900; color: var(--ink);
    line-height: 1.2;
}
.opp-metric-val.hot { color: var(--pink); }
.opp-metric-lbl {
    font-size: 10px; color: var(--text-sub); font-weight: 700;
    margin-top: 2px;
}
.opp-card-footer {
    padding: 10px 18px 14px;
    border-top: 1px dashed var(--ink-faint);
    display: flex; flex-direction: column; gap: 6px;
}
.opp-top-row {
    display: flex; align-items: baseline; gap: 8px;
    font-size: var(--fz-xs);
}
.opp-top-label {
    font-weight: 800; color: var(--ink); white-space: nowrap;
    font-size: 10px;
}
.opp-top-chips {
    display: flex; flex-wrap: wrap; gap: 4px;
}
.opp-chip {
    font-size: 10px; font-weight: 600;
    padding: 1px 7px; border-radius: 999px;
    border: 1.5px solid var(--ink-faint);
    color: var(--text-sub); background: var(--paper);
    white-space: nowrap;
}
.opp-chip.hot {
    color: var(--pink); border-color: var(--pink-pale);
    background: var(--pink-pale);
}

/* ── 素材搜索 ── */
.search-hero {
    display: flex; gap: 10px; margin-bottom: 16px;
}
.search-hero input {
    flex: 1; padding: 14px 18px;
    font-size: var(--fz-base); font-weight: 500;
    font-family: inherit;
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius);
    background: var(--paper);
    box-shadow: 0 3px 0 0 var(--ink);
    transition: box-shadow .15s, transform .15s;
    outline: none;
}
.search-hero input:focus {
    box-shadow: 0 4px 0 0 var(--ink), 0 0 0 3px var(--pink-pale);
    transform: translateY(-1px);
}
.search-hero button {
    padding: 14px 28px;
    font-size: var(--fz-base); font-weight: 900;
    font-family: inherit;
    background: var(--pink); color: #fff;
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius);
    cursor: pointer;
    box-shadow: 0 3px 0 0 var(--ink);
    transition: transform .12s, box-shadow .12s;
    white-space: nowrap;
}
.search-hero button:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 0 0 var(--ink);
}
.search-hero button:active {
    transform: translateY(2px);
    box-shadow: 0 1px 0 0 var(--ink);
}

.mat-result-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 8px;
    margin-bottom: 12px;
}
.mat-result-card {
    padding: 12px 14px;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink-faint);
    border-radius: var(--radius-sm);
    transition: border-color .12s, background .12s;
}
.mat-result-card:hover {
    border-color: var(--pink);
    background: var(--pink-pale);
}
.mat-result-blogger {
    font-size: var(--fz-sm); font-weight: 800; color: var(--ink);
    margin-bottom: 3px;
}
.mat-result-title {
    font-size: var(--fz-xs); font-weight: 600; color: var(--pink);
    line-height: 1.4; margin-bottom: 6px;
}
.mat-result-stats {
    display: flex; gap: 12px;
    font-size: 10px; font-weight: 700; color: var(--text-sub);
}
.mat-result-stats b { color: var(--ink); }

.search-hint-bar {
    font-size: var(--fz-xs); font-weight: 600; color: var(--text-sub);
    padding: 8px 14px;
    background: var(--cream-pale);
    border-left: 3px solid var(--pink);
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
    margin-bottom: 48px;
}

/* ── v2.19: 搜索模式下拉 + 下钻 ── */
.search-mode-select {
    padding: 10px 12px;
    font-size: var(--fz-sm); font-weight: 700;
    font-family: inherit;
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    background: var(--paper);
    cursor: pointer;
    box-shadow: 0 3px 0 0 var(--ink);
    outline: none;
    min-width: 110px;
}
.search-mode-select:focus {
    box-shadow: 0 4px 0 0 var(--ink), 0 0 0 3px var(--pink-pale);
}

.mat-result-header {
    font-size: var(--fz-xs); font-weight: 700; color: var(--text-sub);
    padding: 6px 12px; margin-bottom: 8px;
    background: var(--cream-pale); border-radius: var(--radius-sm);
}
.mat-result-top { cursor: pointer; }
.mat-expand-hint {
    font-size: 10px; font-weight: 700; color: var(--ink-faint);
    margin-left: auto; transition: color .15s;
}
.mat-result-card:hover .mat-expand-hint { color: var(--pink); }
.mat-result-card.expanded {
    border-color: var(--pink);
    box-shadow: 0 2px 0 0 var(--pink);
}

.mat-result-detail {
    margin-top: 10px; padding-top: 10px;
    border-top: 1px dashed var(--ink-faint);
    animation: pop-in .2s cubic-bezier(.34,1.56,.64,1);
}
.mat-detail-grid {
    display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
}
.mat-detail-item {
    display: flex; gap: 6px; align-items: baseline;
    font-size: var(--fz-xs);
}
.mat-dl {
    font-weight: 700; color: var(--text-sub); min-width: 48px;
    white-space: nowrap;
}
.mat-dv {
    font-weight: 600; color: var(--ink); word-break: break-all;
}
.mat-dv.accent { color: var(--pink); }
.mat-dl-link {
    color: var(--pink); font-weight: 700; text-decoration: none;
}
.mat-dl-link:hover { text-decoration: underline; }

/* ── 面面小黑预测 · 卡片式重设计（v2.18 保留 + 微调） ── */
.predict-section-header {
    display: flex; align-items: center; gap: 10px;
    margin-bottom: 20px;
}
.predict-section-header .section-header-icon { background: var(--pink-pale); }

.predict-bar {
    display: flex; gap: 10px; margin-bottom: 20px;
}
.predict-bar input {
    flex: 1; padding: 14px 18px;
    font-size: var(--fz-base); font-weight: 500;
    font-family: inherit;
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius);
    background: var(--paper);
    box-shadow: 0 3px 0 0 var(--ink);
    outline: none;
    transition: box-shadow .15s, transform .15s;
}
.predict-bar input:focus {
    box-shadow: 0 4px 0 0 var(--ink), 0 0 0 3px var(--pink-pale);
    transform: translateY(-1px);
}
.predict-bar button {
    padding: 14px 28px;
    font-size: var(--fz-base); font-weight: 900;
    font-family: inherit;
    background: var(--ink-soft); color: #fff;
    border: var(--stroke) solid var(--ink);
    border-radius: var(--radius);
    cursor: pointer;
    box-shadow: 0 3px 0 0 var(--ink);
    transition: transform .12s, box-shadow .12s;
    white-space: nowrap;
}
.predict-bar button:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 0 0 var(--ink);
}

@media (max-width: 768px) {
    .opportunity-grid { grid-template-columns: 1fr; }
    .mat-result-grid { grid-template-columns: 1fr; }
    .opp-card-body { grid-template-columns: repeat(2, 1fr); }
    .predict-duo { flex-direction: column; align-items: center; }
    .predict-card { max-width: 100%; }
    .predict-vs { padding: 8px 0; }
    .search-hero, .predict-bar { flex-direction: column; }
}

/* v2.16: 赛道下钻 · 优化名称显示+全卡可点 */
.track-cell.expanded { border-color: var(--pink); box-shadow: 0 4px 0 0 var(--ink), 0 0 0 3px var(--pink-pale); }
.track-click-hint { opacity: .5; transition: opacity .15s; font-size:10px; color:var(--text-light); margin-top:4px; }
.track-cell:hover .track-click-hint { opacity: 1; color: var(--pink); }

#track-drilldown { animation: pop-in .3s cubic-bezier(.34,1.56,.64,1); }

.drilldown-wide {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 8px;
}
.dw-card {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--paper);
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    box-shadow: 0 2px 0 0 var(--ink);
    cursor: pointer;
    text-decoration: none;
    transition: transform .12s, box-shadow .12s;
}
.dw-card:hover { transform: translateY(-2px); box-shadow: 0 4px 0 0 var(--ink); }
.dw-rank {
    font-size: 22px; font-weight: 900; color: var(--pink);
    flex-shrink: 0; width: 36px; text-align: center;
    -webkit-text-stroke: .3px var(--ink); line-height: 1;
}
.dw-info { flex: 1; min-width: 0; }
.dw-name {
    font-weight: 800; font-size: var(--fz-sm); color: var(--ink);
    line-height: 1.4; margin-bottom: 2px;
}
.dw-tags {
    font-size: 10px; color: var(--text-sub); line-height: 1.3;
}
.dw-stats {
    display: flex; gap: 10px; flex-shrink: 0;
}
.dw-s { text-align: center; min-width: 48px; }
.dw-sv { display: block; font-size: 14px; font-weight: 800; color: var(--ink); line-height: 1.2; }
.dw-sv.hot { color: var(--pink); }
.dw-sl { display: block; font-size: 9px; color: var(--text-sub); font-weight: 600; }

@media (max-width: 768px) {
    .drilldown-wide { grid-template-columns: 1fr; }
    .dw-card { padding: 10px; gap: 8px; }
}
/* v2.16: 灵感情报 */
.viral-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 10px; }
.viral-card {
    display: flex; gap: 12px; padding: 14px;
    background: var(--paper); border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm); box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .12s;
}
.viral-card:hover { transform: translateY(-2px); box-shadow: 0 4px 0 0 var(--ink); }
.viral-rank { font-size: 22px; font-weight: 900; color: var(--pink); flex-shrink: 0; width: 32px; text-align: center; -webkit-text-stroke: .3px var(--ink); }
.viral-body { flex: 1; min-width: 0; }
.viral-title { font-weight: 700; font-size: var(--fz-sm); color: var(--ink); line-height: 1.4; margin-bottom: 4px; }
.viral-meta { font-size: 10px; color: var(--text-sub); margin-bottom: 6px; }
.viral-stats { display: flex; gap: 10px; margin-bottom: 6px; }
.vs-item { font-size: var(--fz-xs); color: var(--ink); font-weight: 600; }
.vs-item.hot { color: var(--pink); }
.viral-insight { font-size: var(--fz-xs); color: var(--status-ok); font-weight: 700; background: var(--cream-pale); padding: 4px 8px; border-radius: 6px; margin-top: 4px; }

.tip-row { 
    padding: 8px 12px; font-size: var(--fz-sm); color: var(--ink); font-weight: 600;
    border-bottom: 1px dashed var(--ink-faint); line-height: 1.5;
}
.tip-row:last-child { border-bottom: none; }

@media (max-width: 768px) { .viral-grid { grid-template-columns: 1fr; } }

/* v2.19: 面面小黑预测 · 大卡片决斗式 */
.predict-duo {
    display: flex;
    align-items: stretch;
    justify-content: center;
    gap: 0;
    padding: 32px 0;
    position: relative;
}

/* 单张卡片 */
.predict-card {
    flex: 1;
    max-width: 400px;
    text-align: center;
    padding: 40px 24px 28px;
    position: relative;
    transition: transform .2s;
}
.predict-card:first-child {
    border-radius: var(--radius) 0 0 var(--radius);
}
.predict-card:last-child {
    border-radius: 0 var(--radius) var(--radius) 0;
}

/* 头像区 */
.predict-avatar-wrap {
    position: relative;
    width: 120px; height: 120px;
    margin: 0 auto 18px;
}
.predict-avatar-ring {
    position: absolute;
    inset: -6px;
    border-radius: 50%;
    border: 3px solid var(--ink-faint);
    opacity: .3;
    animation: pulse-ring 3s ease-in-out infinite;
}
@keyframes pulse-ring {
    0%, 100% { transform: scale(1); opacity: .25; }
    50% { transform: scale(1.06); opacity: .5; }
}
.predict-card-avatar {
    position: relative;
    width: 120px; height: 120px;
    border-radius: 50%;
    overflow: hidden;
    border: var(--stroke) solid var(--ink);
    box-shadow: 0 6px 0 0 var(--ink), 0 0 0 4px var(--paper);
    margin: 0 auto;
    z-index: 1;
}
.predict-card-avatar img {
    width: 100%; height: 100%; object-fit: cover;
    transition: transform .3s;
}
.predict-card:hover .predict-card-avatar img {
    transform: scale(1.08);
}

/* 性格徽章 */
.predict-card-badge {
    display: inline-block;
    font-size: 11px; font-weight: 800;
    padding: 3px 14px;
    border-radius: 999px;
    margin-bottom: 8px;
    letter-spacing: .5px;
}
.mm-card .predict-card-badge {
    background: var(--pink-pale); color: var(--pink);
    border: 2px solid var(--pink);
}
.xh-card .predict-card-badge {
    background: var(--cream-pale); color: var(--ink-soft);
    border: 2px solid var(--ink-faint);
}
.predict-card-badge.xh {
    background: var(--cream-pale); color: var(--ink-soft);
    border: 2px solid var(--ink-faint);
}

/* 名字 & 口头禅 */
.predict-card-name {
    font-weight: 900; font-size: var(--fz-xl); color: var(--ink);
    margin-bottom: 2px; letter-spacing: .5px;
}
.mm-card .predict-card-name { color: var(--pink); }
.xh-card .predict-card-name { color: var(--ink-soft); }

.predict-card-says {
    font-size: var(--fz-xs); color: var(--text-sub);
    font-style: italic; margin-bottom: 16px;
    opacity: .8;
}

/* 分隔线 */
.predict-divider-line {
    width: 48px; height: 2px;
    margin: 0 auto 16px;
    border-radius: 1px;
}
.mm-card .predict-divider-line { background: var(--pink); }
.xh-card .predict-divider-line { background: var(--ink-faint); }

/* 分数 */
.predict-card-score {
    font-size: 42px; font-weight: 900;
    -webkit-text-stroke: 1px var(--ink);
    line-height: 1.05;
}
.mm-card .predict-card-score { color: var(--pink); }
.xh-card .predict-card-score { color: var(--ink-soft); }
.predict-card-score.sec {
    font-size: 26px; -webkit-text-stroke: .6px var(--ink);
    margin-top: 12px;
}

.predict-card-label {
    font-size: var(--fz-xs); font-weight: 700;
    color: var(--text-sub); margin-top: 2px;
    letter-spacing: .5px; text-transform: uppercase;
}
.predict-card-label.sec { color: var(--text-light); }

.predict-card-note {
    font-size: 11px; font-weight: 600; color: var(--text-sub);
    margin-top: 16px; padding-top: 12px;
    border-top: 1px dashed var(--ink-faint);
    line-height: 1.5;
}

/* VS 对决徽章 */
.predict-vs {
    display: flex; align-items: center; justify-content: center;
    width: 56px; height: 56px;
    border-radius: 50%;
    background: var(--paper-deep);
    border: var(--stroke) solid var(--ink);
    box-shadow: 0 4px 0 0 var(--ink);
    font-size: 16px; font-weight: 900; color: var(--sun-orange);
    -webkit-text-stroke: .4px var(--ink);
    z-index: 2; flex-shrink: 0;
    margin: auto -8px;
}

/* 卡片底座 */
.predict-card {
    background: var(--paper);
    border: var(--stroke) solid var(--ink);
    box-shadow: var(--shadow-md);
}
.predict-card:hover {
    transform: translateY(-4px);
    box-shadow: var(--shadow-lg);
}
.mm-card { border-color: var(--pink); }
.mm-card::before {
    content: ''; position: absolute; top: 0; left: 0; right: 0;
    height: 6px; background: var(--grad-pink);
}
.xh-card { border-color: var(--ink-faint); }
.xh-card::before {
    content: ''; position: absolute; top: 0; left: 0; right: 0;
    height: 6px; background: var(--ink-faint);
}
.predict-card { overflow: hidden; }

@media (max-width: 768px) {
    .predict-duo {
        flex-direction: column;
        align-items: center;
        gap: 16px;
    }
    .predict-card {
        max-width: 100%; border-radius: var(--radius) !important;
    }
    .predict-card:first-child,
    .predict-card:last-child {
        border-radius: var(--radius);
    }
    .predict-vs {
        margin: -12px 0;
        transform: rotate(90deg);
    }
    .predict-card-avatar,
    .predict-avatar-wrap { width: 100px; height: 100px; }
    .predict-card-score { font-size: 36px; }
    .predict-card-score.sec { font-size: 22px; }
}

/* ===== Tab 4: IP热度排行榜 ===== */
.heat-filter-chip {
    display: inline-block;
    padding: 4px 14px;
    font-size: 12px;
    font-weight: 700;
    font-family: inherit;
    color: var(--ink-soft);
    background: transparent;
    border: 2px solid var(--ink-faint);
    border-radius: 999px;
    cursor: pointer;
    transition: all .15s cubic-bezier(.34,1.56,.64,1);
}
.heat-filter-chip:hover {
    color: var(--pink);
    border-color: var(--pink);
    background: var(--pink-pale);
}
.heat-filter-chip.on {
    color: #fff;
    background: var(--pink);
    border-color: var(--ink);
    box-shadow: 0 2px 0 0 var(--ink);
}

/* 热度表格行悬停 */
.heat-row[data-density="蓝海"]:hover td { background: rgba(27,153,139,.08) !important; }
.heat-row[data-density="红海"]:hover td { background: rgba(233,30,99,.06) !important; }

/* 自定义IP标签查询 */
.custom-tag-input-wrap {
    display: flex;
    gap: 10px;
    margin-top: 8px;
}
.custom-tag-input {
    flex: 1;
    padding: 12px 16px;
    font-size: var(--fz-sm);
    font-weight: 500;
    font-family: inherit;
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    background: var(--paper);
    box-shadow: 0 2px 0 0 var(--ink);
    transition: box-shadow .15s, transform .15s;
    outline: none;
}
.custom-tag-input:focus {
    box-shadow: 0 3px 0 0 var(--ink), 0 0 0 3px var(--pink-pale);
    transform: translateY(-1px);
}
.custom-tag-input::placeholder {
    color: var(--text-light);
    font-weight: 400;
}
.custom-tag-btn {
    padding: 12px 22px;
    font-size: var(--fz-sm);
    font-weight: 900;
    font-family: inherit;
    background: var(--pink);
    color: #fff;
    border: var(--stroke-thin) solid var(--ink);
    border-radius: var(--radius-sm);
    cursor: pointer;
    box-shadow: 0 2px 0 0 var(--ink);
    transition: transform .12s, box-shadow .12s;
    white-space: nowrap;
}
.custom-tag-btn:hover {
    transform: translateY(-1px);
    box-shadow: 0 3px 0 0 var(--ink);
}
.custom-tag-btn:active {
    transform: translateY(2px);
    box-shadow: 0 1px 0 0 var(--ink);
}
.custom-tag-btn:disabled {
    opacity: .6;
    cursor: not-allowed;
    transform: none;
}

/* 热度表格滚动容器 */
.heat-table-scroll {
    max-height: 600px;
    overflow-y: auto;
    border-radius: var(--radius-sm);
}
.heat-table-scroll::-webkit-scrollbar {
    width: 8px;
}
.heat-table-scroll::-webkit-scrollbar-track {
    background: var(--cream-pale);
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
}
.heat-table-scroll::-webkit-scrollbar-thumb {
    background: var(--ink-faint);
    border-radius: 4px;
}
.heat-table-scroll::-webkit-scrollbar-thumb:hover {
    background: var(--ink-soft);
}

@media (max-width: 768px) {
    .custom-tag-input-wrap {
        flex-direction: column;
    }
    .heat-table-scroll {
        max-height: 400px;
    }
}
