:root {
    --primary: #4a6cf7;
    --primary-dark: #3a56d4;
    --sidebar-bg: #1e293b;
    --sidebar-hover: #334155;
    --bg: #f1f5f9;
    --card-bg: #fff;
    --text: #1e293b;
    --text-light: #64748b;
    --border: #e2e8f0;
    --meituan: #ff6b00;
    --douyin: #fe2c55;
    --gaode: #28a745;
    --alipay: #1677ff;
    --shadow: 0 1px 3px rgba(0,0,0,.08);
    --shadow-md: 0 4px 6px rgba(0,0,0,.07);
    --radius: 12px;
    --radius-sm: 8px;
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text);overflow:hidden;height:100vh}
.app-container{display:flex;height:100vh}

/* === 侧边栏 === */
.sidebar{width:230px;min-width:230px;background:var(--sidebar-bg);color:#fff;display:flex;flex-direction:column}
.sidebar-header{padding:22px 18px;display:flex;align-items:center;gap:10px;border-bottom:1px solid rgba(255,255,255,.08)}
.sidebar-header i{font-size:22px;color:var(--primary)}
.sidebar-header h2{font-size:15px;font-weight:600;white-space:nowrap}
.nav-list{list-style:none;padding:10px 0;flex:1}
.nav-item{display:flex;align-items:center;gap:10px;padding:11px 18px;cursor:pointer;transition:.2s;border-left:3px solid transparent;color:rgba(255,255,255,.65);font-size:14px;position:relative}
.nav-item:hover{background:var(--sidebar-hover);color:#fff}
.nav-item.active{background:rgba(74,108,247,.15);color:#fff;border-left-color:var(--primary)}
.nav-item i{width:20px;text-align:center;font-size:15px}
.nav-badge{position:absolute;right:14px;font-style:normal;font-size:11px;background:rgba(255,255,255,.15);padding:1px 8px;border-radius:10px;color:rgba(255,255,255,.7);display:none}
.nav-badge.show{display:inline}
.sidebar-footer{padding:14px 18px;border-top:1px solid rgba(255,255,255,.08);font-size:11px;color:rgba(255,255,255,.35)}

/* === 主内容 === */
.main-content{flex:1;overflow-y:auto;padding:28px}
.page{display:none}
.page.active{display:block;animation:fadeIn .3s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.page-header{margin-bottom:22px}
.page-header h1{font-size:22px;font-weight:700;display:flex;align-items:center;gap:10px}
.page-header h1 i{color:var(--primary)}

/* === 上传 === */
.upload-section{background:var(--card-bg);border-radius:var(--radius);padding:22px;margin-bottom:22px;box-shadow:var(--shadow)}
.upload-section h3{font-size:15px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.upload-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}
.upload-card{border:2px dashed var(--border);border-radius:var(--radius-sm);padding:20px 16px;text-align:center;transition:.3s}
.upload-card-wide{grid-column:span 2}
.upload-card:hover{border-color:var(--primary);background:rgba(74,108,247,.02)}
.upload-card.uploaded{border-color:#22c55e;border-style:solid;background:rgba(34,197,94,.04)}
.upload-icon{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 10px;font-size:18px}
.primary-color{background:rgba(74,108,247,.1);color:var(--primary)}
.meituan-color{background:rgba(255,107,0,.1);color:var(--meituan)}
.douyin-color{background:rgba(254,44,85,.1);color:var(--douyin)}
.gaode-color{background:rgba(40,167,69,.1);color:var(--gaode)}
.alipay-color{background:rgba(22,119,255,.1);color:var(--alipay)}
.upload-card h4{font-size:13px;margin-bottom:4px}
.upload-desc{font-size:11px;color:var(--text-light);margin-bottom:6px;line-height:1.4}
.upload-status{font-size:12px;color:var(--text-light);margin-bottom:10px}
.upload-status.success{color:#22c55e;font-weight:500}
.upload-btn{display:inline-flex;align-items:center;gap:5px;padding:7px 14px;background:var(--primary);color:#fff;border-radius:6px;font-size:12px;cursor:pointer;transition:.2s}
.upload-btn:hover{background:var(--primary-dark)}
.upload-btn input[type="file"]{display:none}
.btn-small{padding:5px 10px;font-size:11px}

/* 提交按钮区域 */
.upload-actions{display:flex;align-items:center;justify-content:space-between;margin-top:18px;padding-top:18px;border-top:1px solid var(--border)}
.upload-actions-info{font-size:13px;color:var(--text-light)}
.upload-actions-info span{font-weight:500}
.upload-actions-btns{display:flex;gap:10px}
.btn-submit{padding:10px 28px;background:linear-gradient(135deg,#4a6cf7,#6366f1);color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .3s;box-shadow:0 2px 8px rgba(74,108,247,.3)}
.btn-submit:hover:not(:disabled){background:linear-gradient(135deg,#3a56d4,#4f46e5);transform:translateY(-1px);box-shadow:0 4px 12px rgba(74,108,247,.4)}
.btn-submit:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.btn-submit:active:not(:disabled){transform:translateY(0)}
.btn-submit.loading{pointer-events:none;opacity:.7}
.btn-submit.loading i{animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.btn-clear-all{padding:8px 16px;background:#fff;color:#ef4444;border:1px solid #fecaca;border-radius:6px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:5px;transition:.2s}
.btn-clear-all:hover{background:#fef2f2;border-color:#ef4444}

/* === 筛选 === */
.filter-section{background:var(--card-bg);border-radius:var(--radius);padding:22px;margin-bottom:22px;box-shadow:var(--shadow)}
.filter-section h3{font-size:15px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.filter-controls{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.filter-group{display:flex;flex-direction:column;gap:5px}
.filter-group label{font-size:12px;color:var(--text-light);font-weight:500}
.filter-group input,.filter-group select{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;color:var(--text);background:#fff;outline:none;transition:.2s;min-width:130px}
.filter-group input:focus,.filter-group select:focus{border-color:var(--primary)}
.btn-filter{padding:7px 18px;background:var(--primary);color:#fff;border:none;border-radius:6px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:5px;transition:.2s}
.btn-filter:hover{background:var(--primary-dark)}
.btn-reset{padding:7px 18px;background:#fff;color:var(--text-light);border:1px solid var(--border);border-radius:6px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:5px;transition:.2s}
.btn-reset:hover{background:var(--bg);color:var(--text)}
.date-range-hint{margin-top:10px;font-size:12px;color:var(--primary);background:rgba(74,108,247,.06);padding:6px 14px;border-radius:6px;display:none;align-items:center;gap:6px}
.date-range-hint.show{display:flex}
.date-range-hint i{font-size:11px}
.date-range-hint .hint-clickable{cursor:pointer;text-decoration:underline;font-weight:600}
.date-range-hint .hint-clickable:hover{color:var(--primary-dark)}
.filter-result-msg{margin-top:10px;font-size:13px;color:#ef4444;background:rgba(239,68,68,.06);padding:8px 14px;border-radius:6px;display:none;align-items:center;gap:6px}
.filter-result-msg.show{display:flex}
.filter-result-msg i{font-size:12px}

/* === 统计卡片 === */
.stats-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin-bottom:22px}
.stat-card{background:var(--card-bg);border-radius:var(--radius);padding:18px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow);transition:.2s}
.stat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.stat-icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.stat-info h4{font-size:12px;color:var(--text-light);font-weight:500;margin-bottom:3px}
.stat-value{font-size:22px;font-weight:700;line-height:1.2}
.stat-extra{font-size:11px;color:var(--text-light);margin-top:2px;font-weight:400}
.stat-label{font-size:11px;color:var(--text-light)}

/* === 美团门店概览条 === */
.meituan-stats-area{margin-bottom:22px}
.mt-dashboard{width:100%}
.mt-summary-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}
.mt-summary-item{background:var(--card-bg);border-radius:var(--radius);padding:18px 20px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow);transition:.2s}
.mt-summary-item:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.mt-summary-icon{width:42px;height:42px;border-radius:10px;background:rgba(74,108,247,.08);color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0}
.mt-summary-label{font-size:12px;color:var(--text-light);margin-bottom:2px}
.mt-summary-num{font-size:20px;font-weight:700;color:var(--text)}
.mt-summary-sub{font-size:11px;color:var(--text-light);margin-top:1px}

/* === 总汇总-多平台区块 === */
.summary-platform-block{margin-bottom:20px}
.summary-platform-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:var(--card-bg);border-radius:var(--radius-sm);box-shadow:var(--shadow);margin-bottom:14px}
.summary-platform-title{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px}
.summary-platform-meta{display:flex;align-items:center;gap:12px}
.spm-tag{font-size:13px;color:var(--text-light);background:#f1f5f9;padding:4px 12px;border-radius:20px}
.spm-tag strong{color:var(--text);font-size:14px}

/* === 美团各门店卡片 === */
.mt-store-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.mt-store-card{background:var(--card-bg);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);transition:.2s}
.mt-store-card:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(0,0,0,.1)}
.mt-store-head{padding:12px 18px;color:#fff;display:flex;align-items:center;justify-content:space-between}
.mt-store-name{font-size:14px;font-weight:700;display:flex;align-items:center;gap:7px}
.mt-store-name i{font-size:12px;opacity:.85}
.mt-store-pct{font-size:20px;font-weight:700;opacity:.9}
.mt-store-body{padding:14px 18px}
.mt-store-row{display:flex;gap:8px}
.mt-kpi{flex:1;text-align:center;padding:10px 6px;background:var(--bg);border-radius:var(--radius-sm)}
.mt-kpi-val{font-size:15px;font-weight:700;line-height:1.3;white-space:nowrap}
.mt-kpi-lbl{font-size:11px;color:var(--text-light);margin-top:3px}
.mt-kpi-sub{font-size:10px;color:#94a3b8;margin-top:2px}

/* === 图表 === */
.charts-section{display:grid;grid-template-columns:repeat(2,1fr);gap:22px;margin-bottom:22px}
.chart-container{background:var(--card-bg);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow)}
.chart-container.full-width{grid-column:1/-1}
.chart-container h3{font-size:14px;margin-bottom:14px}

/* === 表格 === */
.table-section{background:var(--card-bg);border-radius:var(--radius);padding:22px;margin-bottom:22px;box-shadow:var(--shadow)}
.table-section h3{font-size:15px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.table-wrapper{overflow-x:auto;max-height:600px;overflow-y:auto}
table{width:100%;border-collapse:collapse;font-size:12px}
thead{position:sticky;top:0;z-index:10}
thead th{background:#f8fafc;padding:9px 10px;text-align:left;font-weight:600;color:var(--text-light);border-bottom:2px solid var(--border);white-space:nowrap}
tbody td{padding:8px 10px;border-bottom:1px solid var(--border)}
tbody tr:hover{background:rgba(74,108,247,.03)}
.empty-msg{text-align:center;color:var(--text-light);padding:36px!important;font-size:13px}
.summary-row td{font-weight:700;background:#f0f5ff;color:var(--primary)}
.num-highlight{color:var(--primary);font-weight:700}
.num-positive{color:#22c55e;font-weight:600}
.num-negative{color:#ef4444;font-weight:600}

/* === 渠道汇总表 === */
.channel-table{font-size:13px}
.channel-table th{text-align:center;padding:10px 12px;background:#f0f5ff;color:var(--text);font-size:13px}
.channel-table td{text-align:center;padding:9px 12px}
.channel-table td:first-child,.channel-table th:first-child{text-align:left;white-space:nowrap}
.channel-table .summary-row td{background:#e8efff;font-weight:700;color:var(--primary)}
.yoy-row td{background:#fefce8;font-size:12px;color:var(--text-light);font-style:italic;border-bottom:1px solid #fef3c7}
.store-table-title{text-align:center;font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px;padding:8px;background:#f8fafc;border-radius:var(--radius-sm)}
.month-header-row td{background:linear-gradient(135deg,#f0f5ff,#e8efff);color:var(--primary);font-size:13px;padding:10px 12px!important;border-bottom:2px solid rgba(74,108,247,.15)}
.month-subtotal-row td{background:#f0fdf4;color:#15803d;font-size:12px;border-bottom:2px solid rgba(34,197,94,.2)}

/* === 响应式 === */
@media(max-width:1200px){.charts-section{grid-template-columns:1fr}.upload-card-wide{grid-column:span 1}.mt-summary-row{grid-template-columns:repeat(2,1fr)}.mt-store-grid{grid-template-columns:repeat(2,1fr)}.summary-platform-header{flex-direction:column;align-items:flex-start;gap:8px}}
@media(max-width:768px){.sidebar{width:56px;min-width:56px}.sidebar-header h2,.nav-item span,.sidebar-footer,.nav-badge{display:none!important}.sidebar-header{justify-content:center;padding:18px 8px}.nav-item{justify-content:center;padding:12px 8px}.main-content{padding:14px}.upload-grid{grid-template-columns:1fr}.filter-controls{flex-direction:column;align-items:stretch}.stats-cards{grid-template-columns:1fr 1fr}.mt-summary-row{grid-template-columns:1fr 1fr}.mt-store-grid{grid-template-columns:1fr}.mt-store-row{flex-wrap:wrap;gap:6px}.mt-kpi{min-width:calc(50% - 4px)}.summary-platform-meta{flex-wrap:wrap;gap:6px}}

/* ===== 好评统计页面 ===== */
/* 周/月标签切换 */
.rs-tabs{display:flex;gap:0;margin-bottom:18px;background:#f1f5f9;border-radius:10px;padding:3px;width:fit-content}
.rs-tab-btn{padding:8px 24px;border:none;border-radius:8px;background:transparent;color:#64748b;cursor:pointer;font-size:13px;font-weight:600;transition:all .25s;display:flex;align-items:center;gap:6px}
.rs-tab-btn.active{background:#fff;color:#1e293b;box-shadow:0 1px 4px rgba(0,0,0,.1)}
.rs-tab-btn:hover:not(.active){color:#334155;background:rgba(255,255,255,.5)}
.rs-tab-panel{display:none}
.rs-tab-panel.active{display:block}
.rs-group{margin-bottom:28px}
.rs-group-title{font-size:15px;font-weight:700;color:#334155;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.rs-group-title i{color:#f59e0b}
.rs-table-block{margin-bottom:22px;background:#fff;border-radius:10px;padding:16px 18px;box-shadow:0 1px 4px rgba(0,0,0,.06)}
.rs-period-tag{padding:6px 0 12px 12px;border-left:4px solid #fbbf24;font-size:15px;color:#1e293b;display:flex;align-items:center;gap:8px}
.rs-period-tag strong{font-size:16px}
.rs-period-tag span{font-size:12px;color:#94a3b8}
.rs-table{width:100%;border-collapse:collapse;font-size:13px}
.rs-table thead th{background:#f8fafc;padding:9px 12px;text-align:center;font-weight:600;color:#475569;border-bottom:2px solid #e2e8f0;white-space:nowrap}
.rs-table thead th:first-child{text-align:left}
.rs-table tbody td{padding:8px 12px;text-align:center;border-bottom:1px solid #f1f5f9;white-space:nowrap}
.rs-table tbody td:first-child{text-align:left;font-weight:600;color:#1e293b}
.rs-table tbody tr:hover{background:#f8fafc}

/* 好评率颜色 */
.rs-rate-excellent{color:#16a34a;font-weight:700}
.rs-rate-good{color:#2563eb;font-weight:600}
.rs-rate-ok{color:#d97706;font-weight:600}
.rs-rate-bad{color:#dc2626;font-weight:700}

/* 未好评高亮 */
.rs-bad-highlight{color:#dc2626;font-weight:700}

/* 好评列高亮表头 */
.rs-th-highlight{background:#fef9c3!important;color:#92400e}

/* 人员名称列 */
.rs-name-cell{font-weight:700;color:#1e293b}

/* 总计行 */
.rs-total-row{background:linear-gradient(90deg,#fef3c7,#fef9c3)!important;font-weight:700}
.rs-total-row td{border-top:2px solid #f59e0b;color:#92400e;font-weight:700;padding:10px 12px}
.rs-total-row:hover{background:linear-gradient(90deg,#fef3c7,#fef9c3)!important}

/* 上传区域内好评统计卡片 */
#page-review-stats .upload-card{transition:all .3s}
#page-review-stats .upload-card.uploaded{border-color:#22c55e;background:linear-gradient(135deg,#f0fdf4,#dcfce7)}

/* 好评统计筛选栏 */
#rs-filter-bar{margin-bottom:18px;gap:14px;align-items:flex-end;flex-wrap:wrap}
.filter-confirm-btn{padding:8px 22px;border:none;border-radius:8px;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;cursor:pointer;font-size:13px;font-weight:600;transition:all .2s;display:flex;align-items:center;gap:6px;box-shadow:0 2px 6px rgba(37,99,235,.3)}
.filter-confirm-btn:hover{background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 3px 10px rgba(37,99,235,.4)}
.filter-reset-btn{padding:8px 18px;border:1px solid #e2e8f0;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;font-size:13px;transition:all .2s;display:flex;align-items:center;gap:6px}
.filter-reset-btn:hover{background:#f1f5f9;color:#1e293b;border-color:#cbd5e1}

@media(max-width:768px){.rs-table-block{padding:10px 8px}.rs-table{font-size:12px}.rs-table thead th,.rs-table tbody td{padding:6px 6px}}

/* 滚动条 */
::-webkit-scrollbar{width:5px;height:5px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:#94a3b8}
