
:root {
  --primary:#007AFF;
  --primary-deep:#0071E3;
  --primary-soft:rgba(0,122,255,0.08);
  --surface:#F5F5F7;
  --card:#FFFFFF;
  --ink:#1D1D1F;
  --ink-2:#6E6E73;
  --ink-3:#86868B;
  --line:#E5E5EA;
  --up:#FF3B30;
  --down:#34C759;
  --down-soft:rgba(52,199,89,0.10);
  --lift:0 12px 32px rgba(0,0,0,0.08);
  --radius:12px;
  --font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display",
          "Helvetica Neue",Helvetica,Arial,sans-serif;
}
* { box-sizing:border-box; margin:0; padding:0; }
html,body { height:100%; }
body {
  background:var(--surface);
  color:var(--ink);
  font-family:var(--font);
  font-size:14px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
a { color:var(--primary); text-decoration:none; }
button { font-family:var(--font); cursor:pointer; border:none; background:none; }
.app {
  display:flex;
  min-height:100vh;
}
.sidebar {
  width:224px;
  flex-shrink:0;
  background:var(--card);
  border-right:1px solid var(--line);
  padding:20px 14px;
  display:flex;
  flex-direction:column;
  position:sticky;
  top:0;
  height:100vh;
}
.sidebar-brand {
  display:flex;
  align-items:center;
  gap:10px;
  padding:6px 10px 20px;
  font-size:15px;
  font-weight:600;
  letter-spacing:-0.2px;
}
.sidebar-brand .dot {
  width:26px; height:26px;
  border-radius:8px;
  background:var(--primary);
  color:#fff;
  display:grid; place-items:center;
  font-size:14px; font-weight:700;
}
.sidebar-section {
  font-size:11px;
  color:var(--ink-3);
  text-transform:uppercase;
  letter-spacing:0.6px;
  padding:14px 10px 6px;
}
.nav-item {
  display:flex;
  align-items:center;
  gap:10px;
  padding:9px 12px;
  border-radius:9px;
  color:var(--ink-2);
  font-size:14px;
  font-weight:500;
  transition:background 0.15s,color 0.15s;
  cursor:pointer;
  user-select:none;
}
.nav-item:hover { background:rgba(0,0,0,0.04); color:var(--ink); }
.nav-item.active {
  background:var(--primary-soft);
  color:var(--primary);
  font-weight:600;
}
.nav-item .nav-icon { width:18px; text-align:center; }
.main {
  flex:1;
  min-width:0;
  padding:24px 32px 48px;
}
.topbar {
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:16px;
  margin-bottom:24px;
}
.topbar-title {
  font-size:22px;
  font-weight:700;
  letter-spacing:-0.4px;
}
.topbar-sub {
  font-size:13px;
  color:var(--ink-2);
  margin-top:4px;
}
.time-picker {
  display:flex;
  align-items:center;
  gap:6px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:5px 8px;
  box-shadow:0 1px 2px rgba(0,0,0,0.03);
}
.time-picker .tp-btn {
  width:30px; height:30px;
  display:grid; place-items:center;
  border-radius:8px;
  color:var(--ink-2);
  font-size:16px;
  transition:background 0.15s,color 0.15s;
}
.time-picker .tp-btn:hover { background:rgba(0,0,0,0.05); color:var(--ink); }
.time-picker .tp-select {
  appearance:none;
  -webkit-appearance:none;
  border:none;
  background:transparent;
  font-family:var(--font);
  font-size:14px;
  font-weight:600;
  color:var(--ink);
  padding:4px 6px;
  border-radius:7px;
  text-align:center;
  cursor:pointer;
  outline:none;
}
.time-picker .tp-select:hover { background:rgba(0,0,0,0.04); }
.time-picker .tp-sep { color:var(--ink-3); font-size:13px; }
.card {
  background:var(--card);
  border-radius:var(--radius);
  border:1px solid var(--line);
  box-shadow:0 1px 2px rgba(0,0,0,0.03);
}
.card-pad { padding:20px; }
.card-title {
  font-size:15px;
  font-weight:600;
  letter-spacing:-0.2px;
  margin-bottom:16px;
}
.kpi-grid {
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
  gap:16px;
  margin-bottom:20px;
}
.kpi {
  padding:18px 20px;
  display:flex;
  flex-direction:column;
  gap:6px;
}
.kpi-label { font-size:13px; color:var(--ink-2); }
.kpi-value {
  font-size:26px;
  font-weight:700;
  letter-spacing:-0.6px;
  font-variant-numeric:tabular-nums;
}
.kpi-delta { font-size:12px; display:flex; align-items:center; gap:4px; }
.table-wrap { overflow-x:auto; }
table.data-table { width:100%; border-collapse:collapse; }
.data-table th {
  text-align:left;
  font-size:12px;
  font-weight:500;
  color:var(--ink-3);
  padding:10px 16px;
  border-bottom:1px solid var(--line);
  white-space:nowrap;
}
.data-table td {
  font-size:13px;
  padding:13px 16px;
  border-bottom:1px solid var(--line);
  white-space:nowrap;
  font-variant-numeric:tabular-nums;
}
.data-table tbody tr { transition:background 0.12s; cursor:pointer; }
.data-table tbody tr:hover { background:rgba(0,0,0,0.02); }
.shop-core-table {
  table-layout:fixed;
  width:100%;
  border-collapse:collapse;
}
.shop-core-table th,
.shop-core-table td {
  padding:14px 0;
  vertical-align:middle;
}
.shop-core-table .col-shop { width:24%; text-align:left; padding-left:16px; }
.shop-core-table .col-trend { width:14%; text-align:center; }
.shop-core-table .col-sales { width:14%; text-align:right; padding-right:16px; }
.shop-core-table .col-yoy { width:12%; text-align:right; padding-right:16px; }
.shop-core-table .col-mom { width:12%; text-align:right; padding-right:16px; }
.shop-core-table .col-cat-num { width:12%; text-align:right; padding-right:16px; }
.shop-core-table .col-prod-num { width:12%; text-align:right; padding-right:16px; }
.data-table td.num,.data-table th.num { text-align:right; }
.num-up   { color:var(--up); }
.num-down { color:var(--down); }
.num-flat { color:var(--ink-3); }
.delta-badge {
  display:inline-flex;
  align-items:center;
  gap:3px;
  padding:2px 7px;
  border-radius:6px;
  font-size:12px;
  font-weight:600;
  font-variant-numeric:tabular-nums;
}
.delta-badge.up   { color:var(--up); background:rgba(255,59,48,0.08); }
.delta-badge.down { color:var(--down); background:rgba(52,199,89,0.08); }
.delta-badge.flat { color:var(--ink-3); background:rgba(0,0,0,0.04); }
.breadcrumb {
  display:flex;
  align-items:center;
  gap:6px;
  font-size:13px;
  color:var(--ink-3);
  margin-bottom:16px;
  flex-wrap:wrap;
}
.breadcrumb a { color:var(--ink-2); text-decoration:none; }
.breadcrumb a:hover { color:var(--primary); text-decoration:underline; }
.breadcrumb .sep { color:var(--ink-3); }
.breadcrumb .current { color:var(--ink); font-weight:600; }
.tag {
  display:inline-flex;
  align-items:center;
  padding:2px 8px;
  border-radius:6px;
  font-size:12px;
  font-weight:500;
}
.tag.blue  { color:var(--primary); background:var(--primary-soft); }
.tag.gray  { color:var(--ink-2); background:rgba(0,0,0,0.05); }
.btn {
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:8px 16px;
  border-radius:10px;
  font-size:14px;
  font-weight:600;
  transition:background 0.15s,opacity 0.15s;
  user-select:none;
}
.btn-primary { background:var(--primary); color:#fff; }
.btn-primary:hover { background:var(--primary-deep); }
.btn-ghost { background:rgba(0,0,0,0.04); color:var(--ink); }
.btn-ghost:hover { background:rgba(0,0,0,0.07); }
.empty {
  padding:64px 20px;
  text-align:center;
  color:var(--ink-3);
  font-size:13px;
}
.empty-icon { font-size:40px; margin-bottom:12px; opacity:0.7; }
.empty-msg { font-size:14px; color:var(--ink-3); }
.topnav {
  display:flex;
  justify-content:space-between;
  align-items:center;
  height:56px;
  padding:0 28px;
  background:rgba(255,255,255,0.82);
  backdrop-filter:saturate(180%) blur(20px);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  border-bottom:1px solid var(--line);
  position:sticky;
  top:0;
  z-index:100;
}
.topnav-left { display:flex; align-items:center; gap:28px; }
.topnav-logo { display:flex; align-items:center; gap:9px; font-size:15px; font-weight:600; color:var(--ink); letter-spacing:-0.2px; }
.logo-dot {
  width:26px; height:26px;
  border-radius:8px;
  background:var(--primary);
  color:#fff;
  display:grid; place-items:center;
  font-size:14px; font-weight:700;
}
.topnav-links { display:flex; gap:4px; }
.topnav-link {
  padding:6px 14px;
  border-radius:8px;
  color:var(--ink-2);
  font-size:14px;
  font-weight:500;
  transition:background 0.15s,color 0.15s;
}
.topnav-link:hover { background:rgba(0,0,0,0.04); color:var(--ink); }
.topnav-link.active { background:var(--primary-soft); color:var(--primary); font-weight:600; }
.topnav-right { display:flex; align-items:center; gap:20px; }
.user-menu { display:flex; gap:16px; font-size:13px; color:var(--ink-2); }
.user-menu span { cursor:pointer; transition:color 0.15s; }
.user-menu span:hover { color:var(--primary); }
.content {
  width:100%;
  max-width:1640px;
  margin:0 auto;
  padding:28px 32px 64px;
}
@media (max-width:1440px) {
  .content { max-width:1280px; }
}
@media (max-width:1024px) {
  .content { max-width:100%; padding:24px 20px 48px; }
}
.page-head {
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  gap:16px;
  margin-bottom:22px;
}
.page-title { font-size:22px; font-weight:700; letter-spacing:-0.4px; }
.page-sub { font-size:13px; color:var(--ink-2); margin-top:4px; }
.toast {
  position:fixed;
  top:72px;
  left:50%;
  transform:translateX(-50%) translateY(-8px);
  background:rgba(29,29,31,0.9);
  color:#fff;
  font-size:13px;
  padding:10px 18px;
  border-radius:10px;
  opacity:0;
  transition:opacity 0.25s,transform 0.25s;
  z-index:999;
  pointer-events:none;
}
.toast.show { opacity:1; transform:translateX(-50%) translateY(0); }
.rank-tabs {
  display:inline-flex;
  gap:4px;
  background:rgba(0,0,0,0.04);
  border-radius:10px;
  padding:3px;
}
.rank-tab {
  padding:7px 18px;
  border-radius:8px;
  font-size:14px;
  font-weight:500;
  color:var(--ink-2);
  cursor:pointer;
  transition:background 0.15s,color 0.15s;
  user-select:none;
}
.rank-tab.active { background:var(--card); color:var(--ink); font-weight:600; box-shadow:0 1px 3px rgba(0,0,0,0.06); }
.entry-grid {
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:20px;
  margin-top:24px;
}
.entry-card {
  display:flex;
  align-items:center;
  gap:16px;
  padding:26px 24px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:0 1px 2px rgba(0,0,0,0.03);
  cursor:pointer;
  transition:box-shadow 0.18s,transform 0.18s;
}
.entry-card:hover { box-shadow:var(--lift); transform:translateY(-2px); }
.entry-icon {
  width:52px; height:52px;
  border-radius:14px;
  display:grid; place-items:center;
  font-size:26px;
  flex-shrink:0;
}
.entry-icon.blue { background:var(--primary-soft); }
.entry-icon.green { background:var(--down-soft); }
.entry-title { font-size:17px; font-weight:600; letter-spacing:-0.2px; }
.entry-desc { font-size:13px; color:var(--ink-2); margin-top:3px; }
.entry-arrow { margin-left:auto; color:var(--ink-3); font-size:18px; }
.page-head-left { display:flex; align-items:center; gap:12px; }
.cat-count {
  display:inline-flex; align-items:center;
  padding:3px 10px; border-radius:999px;
  background:var(--primary-soft); color:var(--primary);
  font-size:12px; font-weight:600;
}
.metric-tabs { display:inline-flex; gap:4px; background:rgba(0,0,0,0.04); border-radius:10px; padding:3px; }
.metric-tab {
  padding:6px 16px; border-radius:8px; font-size:13px; font-weight:500;
  color:var(--ink-2); cursor:pointer; transition:background 0.15s,color 0.15s; user-select:none;
}
.metric-tab.active { background:var(--card); color:var(--ink); font-weight:600; box-shadow:0 1px 3px rgba(0,0,0,0.06); }
.cat-grid {
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:16px;
}
.cat-card {
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--radius);
  box-shadow:0 1px 2px rgba(0,0,0,0.03);
  padding:16px 18px 18px;
  display:flex;
  flex-direction:column;
  gap:12px;
  transition:box-shadow 0.18s,transform 0.18s,border-color 0.18s;
}
.cat-card:hover { box-shadow:var(--lift); transform:translateY(-2px); border-color:rgba(0,122,255,0.25); }
.cat-card-head { display:flex; justify-content:space-between; align-items:center; gap:10px; }
.cat-card-name {
  display:inline-flex; align-items:center; gap:6px;
  cursor:pointer; flex:1; min-width:0;
}
.cat-card-name-text {
  font-size:15px; font-weight:600; letter-spacing:-0.2px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  transition:color 0.15s;
}
.cat-card-name:hover .cat-card-name-text { color:var(--primary); }
.cat-card-arrow { color:var(--ink-3); font-size:16px; flex-shrink:0; }
.cat-rank-btn {
  flex-shrink:0;
  padding:5px 12px;
  border-radius:8px;
  background:var(--primary);
  color:#fff;
  font-size:12px; font-weight:600;
  transition:background 0.15s;
}
.cat-rank-btn:hover { background:var(--primary-deep); }
.cat-card-value {
  font-size:28px; font-weight:700; letter-spacing:-0.6px;
  font-variant-numeric:tabular-nums; color:var(--ink);
}
.cat-card-value small { font-size:14px; font-weight:500; color:var(--ink-2); margin-left:2px; }
.cat-card-meta {
  display:flex; align-items:center; flex-wrap:wrap; gap:6px;
  font-size:12px; color:var(--ink-2);
}
.cat-meta-dot { color:var(--ink-3); }
.data-table.sortable th { cursor:pointer; user-select:none; transition:color 0.15s; }
.data-table.sortable th:hover { color:var(--ink); }
.data-table.sortable th.sortable-active { color:var(--primary); }
.sort-arrow { font-size:10px; }
.upload-zone {
  border:2px dashed var(--line);
  border-radius:var(--radius);
  padding:40px 24px;
  text-align:center;
  cursor:pointer;
  transition:border-color 0.15s,background 0.15s;
  background:var(--card);
}
.upload-zone:hover,.upload-zone.dragover { border-color:var(--primary); background:var(--primary-soft); }
.upload-icon { font-size:40px; opacity:0.7; }
.upload-hint { font-size:14px; color:var(--ink-2); margin-top:10px; }
.upload-hint strong { color:var(--primary); }
.upload-progress { height:6px; border-radius:3px; background:rgba(0,0,0,0.06); overflow:hidden; margin-top:16px; }
.upload-progress > div { height:100%; background:var(--primary); border-radius:3px; transition:width 0.2s; }
.row-actions { display:none; gap:6px; }
tr:hover .row-actions { display:inline-flex; }
.row-action {
  font-size:12px;
  color:var(--primary);
  cursor:pointer;
  padding:2px 8px;
  border-radius:6px;
  background:var(--primary-soft);
}
.row-action:hover { background:rgba(0,122,255,0.15); }
.shop-chip {
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:6px 14px;
  border-radius:10px;
  background:var(--card);
  border:1px solid var(--line);
  font-size:13px;
  font-weight:500;
  cursor:pointer;
  user-select:none;
  transition:border-color 0.15s,background 0.15s;
}
.shop-chip.on { border-color:var(--primary); background:var(--primary-soft); color:var(--primary); }
.bar-track { height:8px; border-radius:4px; background:rgba(0,0,0,0.05); overflow:hidden; flex:1; min-width:60px; }
.bar-fill { height:100%; border-radius:4px; background:var(--primary); }
.bar-fill.alt { background:var(--ink-3); }
.pf-overlay {
  position:fixed;
  inset:0;
  background:rgba(0,0,0,0.35);
  backdrop-filter:blur(2px);
  -webkit-backdrop-filter:blur(2px);
  display:flex;
  align-items:center;
  justify-content:center;
  z-index:1000;
  padding:24px;
  animation:pf-fade 0.18s ease;
}
@keyframes pf-fade { from { opacity:0; } to { opacity:1; } }
.pf-card {
  width:400px;
  max-width:100%;
  background:var(--card);
  border-radius:16px;
  box-shadow:0 20px 60px rgba(0,0,0,0.15);
  overflow:hidden;
  animation:pf-pop 0.22s cubic-bezier(0.2,0.8,0.3,1);
}
@keyframes pf-pop { from { opacity:0; transform:scale(0.96) translateY(8px); } to { opacity:1; transform:none; } }
.pf-header {
  display:flex;
  align-items:center;
  gap:14px;
  padding:22px 24px 16px;
}
.pf-avatar {
  width:52px; height:52px;
  border-radius:50%;
  background:linear-gradient(135deg,var(--primary),#5AC8FA);
  color:#fff;
  display:grid; place-items:center;
  font-size:22px; font-weight:700;
  flex-shrink:0;
}
.pf-id { min-width:0; }
.pf-name { font-size:18px; font-weight:700; letter-spacing:-0.3px; }
.pf-badge {
  display:inline-flex;
  align-items:center;
  padding:2px 9px;
  border-radius:999px;
  font-size:11px;
  font-weight:600;
  margin-top:4px;
}
.pf-badge.pf-admin { color:var(--primary); background:var(--primary-soft); }
.pf-badge.pf-user  { color:var(--ink-2); background:rgba(0,0,0,0.05); }
.pf-body {
  padding:2px 24px 18px;
  border-top:1px solid var(--line);
}
.pf-row {
  display:flex;
  align-items:flex-start;
  gap:16px;
  padding:11px 0;
  border-bottom:1px solid var(--line);
}
.pf-row:last-child { border-bottom:none; }
.pf-label {
  width:88px;
  flex-shrink:0;
  font-size:13px;
  color:var(--ink-3);
}
.pf-value {
  flex:1;
  min-width:0;
  font-size:13px;
  color:var(--ink);
  word-break:break-all;
}
.pf-col { flex-direction:column; gap:6px; }
.pf-col .pf-label { width:auto; }
.pf-perm { display:flex; flex-direction:column; gap:6px; }
.perm-full { color:var(--primary); font-weight:500; }
.perm-none { color:var(--ink-3); }
.perm-list { display:flex; flex-wrap:wrap; gap:6px; }
.perm-list em {
  font-style:normal;
  padding:3px 10px;
  border-radius:8px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:12px;
}
.perm-more { color:var(--ink-3); font-size:12px; align-self:center; }
.pf-footer {
  padding:14px 24px;
  display:flex;
  justify-content:flex-end;
  border-top:1px solid var(--line);
}
.pf-close {
  padding:8px 22px;
  border-radius:10px;
  background:var(--primary);
  color:#fff;
  font-size:14px;
  font-weight:600;
  transition:background 0.15s;
}
.pf-close:hover { background:var(--primary-deep); }
.task-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:16px; }
.task-card {
  background:var(--card); border:1px solid var(--line); border-radius:var(--radius);
  padding:18px 20px; box-shadow:0 1px 2px rgba(0,0,0,0.03);
  transition:box-shadow 0.18s,transform 0.18s;
}
.task-card:hover { box-shadow:var(--lift); transform:translateY(-2px); }
.task-card-head { display:flex; justify-content:space-between; align-items:flex-start; gap:10px; }
.task-card-name { font-size:15px; font-weight:600; letter-spacing:-0.2px; }
.task-card-actions { display:flex; gap:6px; flex-shrink:0; }
.task-card-actions .row-action { display:inline-block; }
.task-card-meta { display:flex; gap:14px; margin-top:12px; font-size:12px; color:var(--ink-2); flex-wrap:wrap; }
.modal-mask { position:fixed; inset:0; background:rgba(0,0,0,0.35); display:none; align-items:center; justify-content:center; z-index:1000; }
.modal-mask.show { display:flex; }
.modal-card { width:560px; max-width:92vw; max-height:84vh; background:var(--card); border-radius:16px; overflow:hidden; display:flex; flex-direction:column; animation:pf-pop 0.2s cubic-bezier(0.2,0.8,0.3,1); }
.modal-head { display:flex; justify-content:space-between; align-items:center; padding:18px 22px; font-size:17px; font-weight:600; border-bottom:1px solid var(--line); }
.modal-head .x { cursor:pointer; color:var(--ink-3); font-size:18px; }
.modal-body { padding:20px 22px; overflow-y:auto; }
.modal-foot { display:flex; justify-content:flex-end; gap:10px; padding:16px 22px; border-top:1px solid var(--line); }
.field-label { font-size:13px; color:var(--ink-2); margin-bottom:6px; }
.text-input { width:100%; padding:10px 12px; border:1px solid var(--line); border-radius:10px; font-size:14px; font-family:var(--font); outline:none; background:var(--card); color:var(--ink); }
.text-input:focus { border-color:var(--primary); }
.shop-picker { display:flex; flex-wrap:wrap; gap:8px; margin-top:12px; max-height:220px; overflow-y:auto; }
.filter-bar { margin-bottom:16px; }
.filter-tag {
  display:inline-flex; align-items:center; gap:8px;
  padding:6px 12px; border-radius:10px;
  background:var(--primary-soft); color:var(--primary);
  font-size:13px; font-weight:500;
}
.filter-clear { cursor:pointer; opacity:0.8; font-size:12px; }
.filter-clear:hover { opacity:1; }
.metric-unit {
  font-size:12px;
  color:var(--ink-3);
  text-align:right;
  padding:8px 4px 0;
  user-select:none;
}
.bar-chart-scroll { overflow-x:auto; padding-bottom:4px; }
.bar-chart { display:flex; align-items:flex-end; gap:12px; padding:16px 4px 8px; min-width:max-content; }
.bar-cat { display:flex; flex-direction:column; align-items:center; gap:6px; min-width:56px; }
.bar-bars { display:flex; align-items:flex-end; gap:4px; height:180px; }
.bar-col { display:flex; flex-direction:column; justify-content:flex-end; height:100%; width:18px; }
.bar { width:100%; border-radius:4px 4px 0 0; min-height:2px; transition:height 0.3s; }
.bar-cat-label { font-size:11px; color:var(--ink-3); max-width:80px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center; }
.chart-legend { display:flex; flex-wrap:wrap; gap:16px; padding:4px 8px 12px; font-size:12px; color:var(--ink-2); }
.chart-legend i { display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:5px; }
.cat-layout { display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:10px; }
.cat-layout-item {
  padding:12px 14px; border:1px solid var(--line); border-radius:10px;
  cursor:pointer; transition:border-color 0.15s,background 0.15s;
}
.cat-layout-item:hover { border-color:rgba(0,122,255,0.3); background:rgba(0,122,255,0.03); }
.cat-layout-item.active { border-color:var(--primary); background:var(--primary-soft); }
.cat-layout-name { font-size:13px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cat-layout-nums { display:flex; align-items:baseline; gap:8px; margin-top:6px; }
.cat-layout-sales { font-size:16px; font-weight:700; font-variant-numeric:tabular-nums; }
.cat-layout-pct { font-size:12px; color:var(--ink-2); }
.cat-layout-prod { font-size:12px; color:var(--ink-3); margin-left:auto; }
.section-gap { margin-top:20px; }
.cat-selector-wrap { position:relative; }
.cat-selector-btn {
  display:inline-flex; align-items:center; gap:10px;
  padding:4px 10px; margin:-4px -10px;
  border:none; background:none; cursor:pointer;
  border-radius:10px; transition:background 0.15s;
}
.cat-selector-btn:hover { background:rgba(0,0,0,0.04); }
.cat-selector-title { font-size:22px; font-weight:700; letter-spacing:-0.4px; }
.cat-selector-count {
  display:inline-flex; align-items:center;
  padding:3px 10px; border-radius:999px;
  background:var(--primary-soft); color:var(--primary);
  font-size:12px; font-weight:600;
}
.cat-selector-arrow { color:var(--ink-3); font-size:13px; transition:transform 0.15s; }
.cat-selector-wrap.open .cat-selector-arrow { transform:rotate(180deg); }
.cat-selector-panel {
  position:absolute; top:calc(100% + 8px); left:0;
  width:min(780px,calc(100vw - 24px)); max-height:min(640px,78vh);
  background:var(--card); border:1px solid var(--line);
  border-radius:12px; box-shadow:var(--lift);
  display:none; flex-direction:column; z-index:300; overflow:hidden;
}
.cat-selector-wrap.open .cat-selector-panel { display:flex; }
.cat-selector-search {
  margin:12px 12px 8px; padding:8px 12px;
  border:1px solid var(--line); border-radius:8px;
  font-size:13px; font-family:var(--font); outline:none;
  color:var(--ink); background:var(--card);
}
.cat-selector-search:focus { border-color:var(--primary); }
.cat-selector-tree { overflow-y:auto; padding:0 8px 10px; }
.cat-tree-item {
  display:flex; align-items:center; gap:6px;
  padding:8px 10px; border-radius:8px; cursor:pointer;
  font-size:13px; color:var(--ink); transition:background 0.12s;
}
.cat-tree-item:hover { background:rgba(0,0,0,0.04); }
.cat-tree-item.all {
  font-weight:600; border-bottom:1px solid var(--line);
  margin-bottom:4px; border-radius:8px 8px 0 0;
}
.cat-tree-arrow { width:14px; color:var(--ink-3); font-size:11px; flex-shrink:0; text-align:center; }
.cat-tree-name {
  flex:1; min-width:0; width:100%;
  white-space:normal; word-break:break-all; line-height:1.5;
}
.cat-tree-item { align-items:flex-start; }
.cat-tree-item.search-hit { align-items:flex-start; }
.cat-tree-item.search-hit .cat-tree-sep { color:var(--ink-3); font-weight:400; }
.cat-tree-item.active .cat-tree-name { color:var(--primary); }
.cat-tree-children { padding-left:16px; }
.cat-tree-tip { padding:20px 10px; color:var(--ink-3); font-size:12px; text-align:center; }
.rank-link {
  color:var(--ink);
  text-decoration:none;
  transition:color 0.15s;
}
.rank-link:hover { color:var(--primary); text-decoration:underline; }
.cell-clamp {
  display:inline-block;
  max-width:15em;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  vertical-align:middle;
}
.thumb-head { text-align:center; }
.thumb-cell { padding:6px 12px !important; }
.rank-thumb-wrap { position:relative; width:48px; height:48px; }
.rank-thumb {
  width:48px; height:48px; border-radius:4px;
  object-fit:cover; display:block;
  border:1px solid var(--line); background:#fff;
}
.rank-thumb.broken { display:none; }
.rank-thumb-placeholder {
  display:block; width:48px; height:48px; border-radius:4px;
  background:rgba(0,0,0,0.06);
}
.rank-preview-global {
  position:fixed; z-index:9999;
  width:320px; height:320px;
  border-radius:12px;
  background:#f5f5f7;
  box-shadow:0 12px 48px rgba(0,0,0,0.16);
  border:1px solid var(--line);
  overflow:hidden;
  display:none;
  pointer-events:none;
}
.rank-preview-global img {
  width:100%; height:100%; object-fit:contain;
  display:block;
}
.product-grid {
  display:grid; grid-template-columns:repeat(7,1fr); gap:12px;
}
.product-card {
  border:1px solid var(--line); border-radius:12px; overflow:hidden;
  background:var(--card); cursor:pointer;
  transition:box-shadow 0.18s,transform 0.18s;
}
.product-card:hover { box-shadow:var(--lift); transform:translateY(-2px); }
.product-card-img {
  aspect-ratio:1; background:rgba(0,0,0,0.03);
  display:flex; align-items:center; justify-content:center; overflow:hidden;
}
.product-card-img img { width:100%; height:100%; object-fit:cover; display:block; }
.product-card-img img.broken { display:none; }
.product-card-body { padding:8px 10px 10px; }
.product-card-title {
  font-size:12px; line-height:1.4; color:var(--ink);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.product-card-meta {
  display:flex; justify-content:space-between; align-items:baseline;
  margin-top:6px; font-size:11px; gap:6px;
}
.product-card-sales { font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums; white-space:nowrap; }
.product-card-shop { color:var(--ink-3); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
@media (max-width:1400px) { .product-grid { grid-template-columns:repeat(5,1fr); } }
@media (max-width:1000px) { .product-grid { grid-template-columns:repeat(4,1fr); } }
@media (max-width:640px) { .product-grid { grid-template-columns:repeat(3,1fr); } }
.rank-toolbar {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:16px;
  flex-wrap:wrap;
  margin-bottom:16px;
  padding-bottom:14px;
  border-bottom:1px solid var(--line);
}
.rank-search {
  position:relative;
  flex:1;
  max-width:420px;
  min-width:220px;
  display:flex;
  align-items:center;
  gap:8px;
}
.rank-search-input {
  flex:1;
  width:100%;
  height:34px;
  padding:0 32px 0 12px;
  border:1px solid #E5E7EB;
  border-radius:12px;
  font-size:13px;
  color:var(--ink);
  background:var(--card);
  outline:none;
  transition:border-color 0.15s,box-shadow 0.15s;
}
.rank-search-input::placeholder { color:var(--ink-3); }
.rank-search-input:focus {
  border-color:var(--primary);
  box-shadow:0 0 0 3px rgba(0,122,255,0.12);
}
.rank-search-clear {
  position:absolute;
  right:46px;
  top:50%;
  transform:translateY(-50%);
  width:18px; height:18px;
  border-radius:50%;
  background:rgba(0,0,0,0.10);
  color:#fff;
  font-size:12px;
  line-height:1;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  transition:background 0.15s;
}
.rank-search-clear:hover { background:rgba(0,0,0,0.20); }
.rank-search-btn {
  width:34px; height:34px;
  flex-shrink:0;
  border-radius:12px;
  background:var(--primary);
  color:#fff;
  font-size:15px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transition:background 0.15s;
}
.rank-search-btn:hover { background:var(--primary-deep); }
.rank-price-filter {
  display:flex;
  align-items:center;
  gap:6px;
  font-size:13px;
  color:var(--ink-2);
  white-space:nowrap;
}
.rank-price-label { font-weight:500; }
.rank-price-unit { color:var(--ink-3); }
.rank-price-input {
  width:80px;
  height:34px;
  padding:0 10px;
  border:1px solid #E5E7EB;
  border-radius:12px;
  font-size:13px;
  color:var(--ink);
  background:var(--card);
  outline:none;
  text-align:center;
  font-variant-numeric:tabular-nums;
  transition:border-color 0.15s,box-shadow 0.15s;
}
.rank-price-input:focus {
  border-color:var(--primary);
  box-shadow:0 0 0 3px rgba(0,122,255,0.12);
}
.rank-price-input::placeholder { color:var(--ink-3); }
.rank-filter-btn {
  margin-left:6px;
  height:34px;
  padding:0 16px;
  border-radius:12px;
  background:var(--primary);
  color:#fff;
  font-size:13px;
  font-weight:600;
  white-space:nowrap;
  transition:background 0.15s;
}
.rank-filter-btn:hover { background:var(--primary-deep); }
.rank-pagination {
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:10px;
  margin-top:16px;
  padding-top:14px;
  border-top:1px solid var(--line);
  font-size:13px;
  color:var(--ink-2);
}
.pg-info { margin-right:auto; color:var(--ink-3); }
.pg-btn {
  height:30px;
  padding:0 12px;
  border:1px solid #E5E7EB;
  border-radius:8px;
  background:var(--card);
  color:var(--ink-2);
  font-size:12px;
  cursor:pointer;
  transition:border-color 0.15s,color 0.15s,background 0.15s;
}
.pg-btn:hover:not(:disabled) { border-color:var(--primary); color:var(--primary); }
.pg-btn:disabled { opacity:0.4; cursor:not-allowed; }
.pg-current { color:var(--ink); font-variant-numeric:tabular-nums; }
.pg-jump { display:flex; align-items:center; gap:6px; }
.pg-input {
  width:48px;
  height:30px;
  padding:0 6px;
  border:1px solid #E5E7EB;
  border-radius:8px;
  font-size:12px;
  text-align:center;
  outline:none;
  font-variant-numeric:tabular-nums;
}
.pg-input:focus { border-color:var(--primary); box-shadow:0 0 0 3px rgba(0,122,255,0.12); }
.pg-size {
  height:30px;
  padding:0 8px;
  border:1px solid #E5E7EB;
  border-radius:8px;
  background:var(--card);
  color:var(--ink-2);
  font-size:12px;
  outline:none;
  cursor:pointer;
}
.pg-size:focus { border-color:var(--primary); }
.trend-cell,.trend-pct { text-align:center; }
.trend-btn {
  padding:3px 10px;
  border-radius:6px;
  background:var(--primary-soft);
  color:var(--primary);
  font-size:12px;
  cursor:pointer;
  white-space:nowrap;
  transition:background 0.15s;
}
.trend-btn:hover { background:rgba(0,122,255,0.16); }
.trend-up { color:#F53F3F; font-variant-numeric:tabular-nums; font-weight:500; }
.trend-down { color:#00B42A; font-variant-numeric:tabular-nums; font-weight:500; }
.trend-none { color:var(--ink-3); }
.trend-modal-overlay {
  position:fixed; inset:0; z-index:1000;
  background:rgba(0,0,0,0.32);
  display:flex; align-items:center; justify-content:center;
}
.trend-modal {
  background:#fff; border-radius:12px;
  box-shadow:0 12px 48px rgba(0,0,0,0.18);
  width:680px; max-width:94vw;
  overflow:hidden;
}
.trend-modal-head {
  display:flex; justify-content:space-between; align-items:center;
  padding:16px 20px; border-bottom:1px solid var(--line);
}
.trend-modal-title {
  font-size:15px; font-weight:600; color:var(--ink);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.trend-modal-close {
  width:28px; height:28px; border-radius:8px;
  background:rgba(0,0,0,0.05); color:var(--ink-2);
  font-size:16px; line-height:1; flex-shrink:0;
  display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:background 0.15s;
}
.trend-modal-close:hover { background:rgba(0,0,0,0.10); }
.trend-modal-body { padding:20px; display:flex; justify-content:center; }
.trend-chart-svg { display:block; max-width:100%; }
.trend-axis { font-size:11px; fill:var(--ink-3); }
.trend-empty { padding:60px 0; color:var(--ink-3); font-size:14px; }
.product-card-trend {
  display:flex; align-items:center; gap:8px;
  margin-top:8px; font-size:11px; flex-wrap:wrap;
}
.trend-item { color:var(--ink-2); white-space:nowrap; }
.trend-btn-card { margin-left:auto; }
.modal-card-sm { width:480px; }
.btn-block { width:100%; justify-content:center; }
.btn:disabled { opacity:0.4; cursor:not-allowed; }
.shop-search-box { position:relative; }
.shop-search-icon { position:absolute; right:12px; top:50%; transform:translateY(-50%); color:var(--ink-3); font-size:15px; pointer-events:none; }
.picker-selected { display:flex; flex-wrap:wrap; gap:8px; margin-top:12px; min-height:0; }
.shop-tag {
  display:inline-flex; align-items:center; gap:6px;
  padding:5px 12px; border-radius:8px;
  background:var(--primary-soft); color:var(--primary);
  font-size:13px; font-weight:500;
}
.shop-tag i { cursor:pointer; font-style:normal; opacity:0.7; }
.shop-tag i:hover { opacity:1; }
.shop-picker { display:flex; flex-direction:column; gap:2px; margin-top:10px; max-height:260px; overflow-y:auto; border:1px solid var(--line); border-radius:10px; padding:4px; }
.shop-picker-item {
  display:flex; align-items:center; gap:10px;
  padding:8px 10px; border-radius:8px; cursor:pointer;
  transition:background 0.15s;
}
.shop-picker-item:hover { background:rgba(0,0,0,0.04); }
.shop-picker-item.on { background:var(--primary-soft); }
.shop-avatar {
  width:30px; height:30px; border-radius:50%; flex-shrink:0;
  background:linear-gradient(135deg,#007AFF,#5856D6);
  color:#fff; font-size:14px; font-weight:600;
  display:inline-flex; align-items:center; justify-content:center;
}
.shop-picker-name { flex:1; font-size:14px; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.shop-picker-check { color:var(--primary); font-weight:700; }
.picker-tip { font-size:12px; color:var(--ink-3); margin-top:8px; }
.picker-empty { padding:14px; text-align:center; font-size:13px; color:var(--ink-3); }
.ov-shop-name { margin-left:8px; font-weight:500; }
.trend-btn-ghost { background:rgba(0,0,0,0.04); color:var(--ink-2); }
.trend-btn-ghost:hover { background:rgba(0,0,0,0.08); color:var(--ink); }
.drag-handle {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:24px; height:24px;
  margin-right:6px;
  color:var(--ink-3);
  cursor:grab;
  font-size:16px;
  font-weight:700;
  user-select:none;
  vertical-align:middle;
  transition:color 0.15s;
}
.drag-handle:hover { color:var(--ink); }
.drag-handle:active { cursor:grabbing; }
.shop-core-table tr.dragging { opacity:0.5; }
.shop-core-table tr.drag-over { box-shadow:inset 0 2px 0 var(--primary); }
.perm-toolbar {
  padding:8px 16px;
  border-bottom:1px solid var(--line);
  margin-bottom:8px;
}
.check-all-box {
  display:inline-flex;
  align-items:center;
  gap:6px;
  cursor:pointer;
  font-size:14px;
  color:var(--ink);
}
.cat-perm-tree {
  max-height:400px;
  overflow-y:auto;
  padding:0 8px;
}
.cat-row {
  display:flex;
  align-items:center;
  gap:6px;
  min-height:32px;
  padding:0 4px;
}
.cat-toggle {
  width:16px;
  height:16px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  color:var(--ink-3);
  font-size:12px;
  user-select:none;
  transition:transform 0.2s;
  flex-shrink:0;
}
.cat-toggle-empty { visibility:hidden; }
.cat-label {
  display:flex;
  align-items:center;
  gap:8px;
  cursor:pointer;
  flex:1;
  min-width:0;
}
.cat-label span { font-size:13px; }
.cat-level-2 .cat-row { padding-left:24px; }
.cat-level-3 .cat-row { padding-left:46px; }
.cat-item.collapsed .cat-children { display:none; }
.cat-item.collapsed .cat-toggle { transform:rotate(-90deg); }
.leaf-tag {
  margin-left:6px;
  padding:1px 6px;
  font-size:11px;
  color:var(--primary);
  background:var(--primary-soft,rgba(0,122,255,0.1));
  border-radius:2px;
}
.time-selector { position:relative; }
.time-mode-tabs { display:flex; align-items:center; gap:24px; }
.time-tab {
  font-size:14px;
  color:var(--ink-2);
  cursor:pointer;
  padding:6px 0;
  position:relative;
  user-select:none;
  display:inline-flex;
  align-items:center;
  gap:4px;
  transition:color 0.15s;
}
.time-tab:hover { color:var(--ink); }
.time-tab.active { color:var(--primary); font-weight:600; }
.time-tab.active::after {
  content:'';
  position:absolute;
  bottom:0; left:0;
  width:100%; height:2px;
  background:var(--primary);
  border-radius:1px;
}
.time-arrow { font-style:normal; font-size:12px; }
.time-panel {
  position:absolute;
  top:calc(100% + 8px);
  right:0;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  box-shadow:0 8px 24px rgba(0,0,0,0.12);
  padding:16px 20px;
  z-index:1000;
  min-width:320px;
}
.time-panel-title {
  text-align:center;
  font-size:13px;
  color:var(--ink-2);
  padding-bottom:12px;
  border-bottom:1px solid var(--line);
  margin-bottom:12px;
}
.time-year-grid {
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:8px;
  margin-bottom:14px;
}
.time-year-item {
  text-align:center;
  padding:8px 0;
  font-size:14px;
  color:var(--ink);
  border-radius:6px;
  cursor:pointer;
  transition:background 0.15s;
}
.time-year-item:hover { background:rgba(0,0,0,0.05); }
.time-year-item.active { background:var(--primary); color:#fff; }
.time-month-row {
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  border-top:1px solid var(--line);
  padding-top:12px;
}
.time-month-item {
  padding:6px 10px;
  font-size:13px;
  color:var(--ink);
  border-radius:6px;
  cursor:pointer;
  transition:background 0.15s;
}
.time-month-item:hover { background:rgba(0,0,0,0.05); }
.time-month-item.active { background:var(--primary); color:#fff; }
.shop-del {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:22px; height:22px;
  margin-left:8px;
  border-radius:6px;
  color:var(--primary);
  font-size:14px;
  line-height:1;
  cursor:pointer;
  opacity:0.7;
  vertical-align:middle;
  transition:opacity 0.15s,background 0.15s;
}
.shop-del:hover { opacity:1; background:var(--primary-soft); }
.shop-del.disabled { opacity:0.3; cursor:not-allowed; pointer-events:none; }
.analysis-cell { text-align:center; }
.analysis-link {
  color:var(--primary);
  font-size:13px;
  font-weight:500;
  text-decoration:none;
  cursor:pointer;
  white-space:nowrap;
  transition:color 0.15s;
}
.analysis-link:hover { color:var(--primary-deep); }
.global-loading {
  position:fixed; top:0; left:0;
  width:100%; height:100%;
  background-color:rgba(255,255,255,0.85);
  z-index:999999;
  display:flex; align-items:center; justify-content:center;
}
.loading-box { text-align:center; }
.loading-spinner {
  width:40px; height:40px;
  border:3px solid #e5e7eb;
  border-top-color:var(--primary,#007AFF);
  border-radius:50%;
  margin:0 auto 12px;
  animation:spin 0.8s linear infinite;
}
.loading-text { font-size:14px; color:#666; }
@keyframes spin {
  from { transform:rotate(0deg); }
  to { transform:rotate(360deg); }
}
.wm-switch {
  display:inline-block;
  width:36px;
  height:20px;
  border-radius:10px;
  background:#d0d0d0;
  position:relative;
  cursor:pointer;
  transition:background .2s;
  vertical-align:middle;
  flex-shrink:0;
}
.wm-switch.on { background:var(--primary); }
.wm-switch::after {
  content:'';
  position:absolute;
  width:16px; height:16px;
  border-radius:50%;
  background:#fff;
  top:2px; left:2px;
  transition:left .2s;
  box-shadow:0 1px 2px rgba(0,0,0,.2);
}
.wm-switch.on::after { left:18px; }
.rl-switch {
  display:inline-block;
  width:36px;
  height:20px;
  border-radius:10px;
  background:#d0d0d0;
  position:relative;
  cursor:pointer;
  transition:background .2s;
  vertical-align:middle;
  flex-shrink:0;
}
.rl-switch.on { background:#34C759; }
.rl-switch::after {
  content:'';
  position:absolute;
  width:16px; height:16px;
  border-radius:50%;
  background:#fff;
  top:2px; left:2px;
  transition:left .2s;
  box-shadow:0 1px 2px rgba(0,0,0,.2);
}
.rl-switch.on::after { left:18px; }
.captcha-modal-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.4); display:flex; align-items:center; justify-content:center; z-index:9999; }
.captcha-modal { background:#fff; border-radius:12px; width:300px; padding:20px; box-shadow:var(--lift,0 12px 32px rgba(0,0,0,0.08)); }
.captcha-modal-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.captcha-modal-title { font-size:15px; font-weight:600; color:var(--foreground,#1d1d1f); }
.captcha-modal-close { border:none; background:none; font-size:18px; color:#8e8e93; cursor:pointer; line-height:1; padding:2px 6px; }
.captcha-modal-body { display:flex; flex-direction:column; gap:10px; }
.captcha-svg { display:flex; justify-content:center; border:1px solid var(--border,#E5E5EA); border-radius:8px; padding:4px; background:#F5F5F7; }
.captcha-svg svg { display:block; }
.captcha-input { border:1px solid var(--border,#E5E5EA); border-radius:8px; padding:9px 12px; font-size:15px; outline:none; letter-spacing:4px; text-align:center; }
.captcha-input:focus { border-color:#007AFF; }
.captcha-err { font-size:12px; color:#FF3B30; min-height:14px; }
.captcha-modal-foot { display:flex; gap:10px; justify-content:flex-end; margin-top:6px; }
.btn-ghost { border:1px solid var(--border,#E5E5EA); background:#fff; color:var(--foreground,#1d1d1f); border-radius:8px; padding:8px 16px; font-size:13px; cursor:pointer; }
.btn-primary { border:none; background:#007AFF; color:#fff; border-radius:8px; padding:8px 16px; font-size:13px; cursor:pointer; }
.btn-primary:disabled { opacity:0.5; cursor:default; }
.device-list { display:flex; flex-direction:column; gap:8px; max-height:240px; overflow-y:auto; }
.device-row { display:flex; align-items:center; gap:10px; border:1px solid var(--border,#E5E5EA); border-radius:8px; padding:8px 12px; }
.device-fp { font-family:Menlo,monospace; font-size:12px; color:var(--ink-2,#6e6e73); flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.device-time { font-size:12px; color:var(--ink-3,#8e8e93); white-space:nowrap; }
.device-empty { color:var(--ink-3,#8e8e93); font-size:13px; padding:10px 0; }
.device-config { display:flex; gap:14px; align-items:center; flex-wrap:wrap; }
.device-config label { display:flex; align-items:center; gap:6px; font-size:13px; color:var(--ink-2,#6e6e73); }
.cat-tree-group { font-size:11px; color:var(--ink-3,#8e8e93); padding:8px 12px 3px; letter-spacing:0.5px; }
.cat-tree-hl { color:#007AFF; font-weight:600; }
.device-row-warn { background:rgba(255,204,0,0.12); border-color:#FFCC00; }
.device-warn-tag { font-size:11px; color:#B25000; background:rgba(255,204,0,0.18); border-radius:4px; padding:2px 6px; margin-left:8px; }
.device-new-tag { font-size:10px; color:#B25000; font-weight:600; }
.device-ip { font-size:11px; color:var(--ink-3,#8e8e93); }
.ov-shop-link { color:var(--foreground,#1f2937); text-decoration:none; transition:color .2s; }
.ov-shop-link:hover { color:var(--accent,#2563eb); text-decoration:underline; }
.tag.red { background:rgba(255,59,48,0.1); color:#FF3B30; }

/* ===== 悬浮大图交互优化（2026-09-26）：底部信息栏 + 复制按钮 ===== */
.rank-preview-global {
  display: none;
  flex-direction: column;
  pointer-events: auto;   /* 允许鼠标移入交互 */
}
.rank-preview-global .preview-img-wrap {
  flex: 1;
  overflow: hidden;
  background: #fff;
  min-height: 0;
}
.rank-preview-global .preview-img-wrap img {
  width: 100%; height: 100%; object-fit: contain;
  display: block;
}
.rank-preview-global .preview-info {
  padding: 10px 12px;
  background: #fff;
  border-top: 1px solid #E5E5EA;
  font-size: 12px;
  line-height: 1.5;
}
.rank-preview-global .preview-title {
  color: #007AFF;
  text-decoration: none;
  display: block;
  margin-bottom: 6px;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  cursor: pointer;
}
.rank-preview-global .preview-title:hover {
  text-decoration: underline;
}
.rank-preview-global .preview-id-row {
  display: flex;
  align-items: center;
  gap: 4px;
  color: #6E6E73;
}
.rank-preview-global .preview-id {
  flex: none; /* 2026-09-26 按钮紧贴ID */
}
.rank-preview-global .preview-copy-btn {
  width: 22px; height: 22px;
  border: 1px solid #E5E5EA;
  border-radius: 4px;
  background: #fff;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: #6E6E73;
  padding: 0;
}
.rank-preview-global .preview-copy-btn:hover {
  background: #F5F5F7;
}
.rank-preview-global .preview-copy-btn.copied {
  color: #34C759;
  border-color: #34C759;
}

/* ===== 大图卡片优化（2026-09-26）：店铺链接 + 商品ID行 + 复制按钮 ===== */
.product-card-shop .shop-link {
  color: #86868B;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  display: block;
}
.product-card-shop .shop-link:hover {
  color: #007AFF;
  text-decoration: underline;
}
.product-card-id-inline {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 10px;
  color: #86868B;
  margin-left: auto; /* 推到右边，趋势按钮左边 */
}
.product-card-id-inline .id-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100px;
}
.product-card-id-inline .id-copy-btn {
  flex: none;
  width: 16px; height: 16px;
  border: 1px solid #E5E5EA;
  border-radius: 3px;
  background: #fff;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  color: #86868B;
  padding: 0;
}
.product-card-id-inline .id-copy-btn:hover {
  background: #F5F5F7;
}
.product-card-id-inline .id-copy-btn.copied {
  color: #34C759;
  border-color: #34C759;
}

/* ===== 类目搜索选择器（2026-09-26，店铺分析上榜商品） ===== */
.cat-pick { position: relative; display: inline-block; }
.cat-pick-trigger {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%; height: 34px; padding: 0 10px;
  border: 1px solid #E5E5EA; border-radius: 8px; background: #fff;
  font-size: 13px; color: #1D1D1F; cursor: pointer;
}
.cat-pick-trigger span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cat-pick-arrow { color: #86868B; font-size: 11px; }
.cat-pick-dropdown {
  position: absolute; top: 38px; left: 0; width: 240px; z-index: 300;
  background: #fff; border: 1px solid #E5E5EA; border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.10); padding: 8px;
}
.cat-pick-search {
  width: 100%; height: 30px; padding: 0 10px; margin-bottom: 6px;
  border: 1px solid #E5E5EA; border-radius: 6px; font-size: 13px; outline: none;
}
.cat-pick-search:focus { border-color: #007AFF; }
.cat-pick-list { max-height: 260px; overflow-y: auto; }
.cat-pick-item {
  padding: 7px 10px; font-size: 13px; color: #1D1D1F; cursor: pointer;
  border-radius: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cat-pick-item:hover { background: #F5F5F7; }

