/* AI关键词运营平台 · 网页版（排版沿用 SOP 标准系统） */
:root{--ink:#17212b;--muted:#75808c;--line:#e6e9ed;--blue:#2864f0;--blue2:#eff4ff;--green:#16a172;--green2:#eaf8f2;--orange:#e58a25;--orange2:#fff3e6;--red:#d64545;--red2:#fdecec;--purple:#7c3aed;--purple2:#f1ebff;--bg:#f6f8fb;--card:#fff}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}a{color:var(--blue);text-decoration:none;cursor:pointer}a:hover{text-decoration:underline}

/* ---------- 布局 ---------- */
.app{display:flex;min-height:100vh}
.side{width:238px;background:#fff;border-right:1px solid var(--line);padding:22px 14px 16px;position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column;overflow-y:auto;z-index:5}
.brand{font-weight:700;font-size:16px;letter-spacing:-.3px;display:flex;gap:9px;align-items:center;margin:0 8px 16px}
.mark{width:29px;height:29px;border-radius:9px;background:linear-gradient(135deg,#2467f2,#67a0ff);color:#fff;display:grid;place-items:center;font-weight:800;flex:none}
.company-box{margin:0 6px 14px;border:1px solid var(--line);border-radius:10px;padding:9px 10px;background:#fafbfc}
.company-box label{display:block;font-size:11px;color:var(--muted);margin-bottom:5px}
.company-box .row{display:flex;gap:6px}.company-box select{flex:1;min-width:0;border:1px solid #d9dfe6;border-radius:7px;padding:6px 8px;background:#fff}
.company-box .mini{margin-top:6px}
.navgrp{margin:2px 0}
.navgrp-h{color:#4c5864;margin:2px 4px;padding:8px 10px;border-radius:9px;display:flex;gap:10px;align-items:center;cursor:pointer;font-weight:600;user-select:none}
.navgrp-h:hover{background:#f4f6f9}.navgrp-h b{font-size:15px;font-weight:400;width:18px;text-align:center}.navgrp-h .caret{margin-left:auto;color:#a2aab4;font-size:11px;transition:transform .15s}
.navgrp.open .navgrp-h .caret{transform:rotate(90deg)}.navgrp.active>.navgrp-h{color:var(--blue)}
.navgrp-items{display:none;padding:0 0 4px 22px}.navgrp.open .navgrp-items{display:block}
.nav{color:#71808d;margin:1px 4px;padding:7px 12px;border-radius:8px;cursor:pointer;font-size:13px;position:relative}
.nav:hover{background:#f4f6f9}.nav.active{background:var(--blue2);color:var(--blue);font-weight:600}
.nav .cnt{float:right;font-size:11px;color:var(--muted)}
.sidefoot{margin-top:auto;padding-top:16px}.sidefoot .ver{color:#a2aab4;font-size:11px;margin:10px 8px 0}
.userbox{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fafbfc}.userbox .who{display:flex;align-items:center;gap:9px;margin-bottom:8px}.userbox .avatar{width:30px;height:30px;border-radius:50%;background:var(--blue2);color:var(--blue);font-weight:700;display:grid;place-items:center;font-size:13px;flex:none}.userbox .name{font-weight:650;font-size:13px;line-height:1.2}.userbox .role{color:var(--muted);font-size:11px}.userbox .ops{display:flex;gap:6px}.userbox .ops button{flex:1;padding:6px 0;font-size:12px}
.main{margin-left:238px;width:calc(100% - 238px);padding:28px 36px 48px;max-width:1500px}
.top{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:22px;gap:12px;flex-wrap:wrap}
.eyebrow{font-size:12px;color:var(--blue);font-weight:700;letter-spacing:1.5px}.title{font-size:26px;font-weight:750;margin:4px 0}.sub{color:var(--muted);max-width:900px;line-height:1.6}
.top-right{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.jobs-badge{display:none;align-items:center;gap:6px;background:var(--orange2);color:#b4600f;border-radius:14px;padding:5px 11px;font-size:12px;cursor:pointer}.jobs-badge.on{display:inline-flex}
.jobs-badge i{width:7px;height:7px;border-radius:50%;background:var(--orange);animation:pulse 1.2s infinite}
@keyframes pulse{50%{opacity:.3}}

/* ---------- 组件 ---------- */
.panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px;margin-bottom:18px}
.panelhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:12px;flex-wrap:wrap}.paneltitle{font-size:15px;font-weight:700}.panelhead .mini{margin-top:3px}
.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}.grid.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.g5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid.g6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid.g7{grid-template-columns:repeat(7,minmax(0,1fr))}
.kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:15px 18px}.kpi .label{color:var(--muted);font-size:12px}.kpi .num{font-size:25px;font-weight:730;margin-top:8px;line-height:1.1}.kpi .mini{margin-top:5px}
.kpi.blue .num{color:var(--blue)}.kpi.green .num{color:var(--green)}.kpi.orange .num{color:var(--orange)}.kpi.red .num{color:var(--red)}.kpi.purple .num{color:var(--purple)}
.cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.cols>.panel{margin-bottom:0}.cols+.panel,.cols+.cols{margin-top:18px}
.primary{border:0;background:var(--blue);color:#fff;padding:9px 16px;border-radius:8px;font-weight:650;box-shadow:0 3px 8px #2864f02e}
.ghost{background:#fff;border:1px solid #d9dfe6;color:#5e6b77;padding:8px 14px;border-radius:7px}.ghost:hover{border-color:#b9c4d0;color:var(--ink)}
.danger{background:#fff;border:1px solid #f1c3c3;color:var(--red);padding:8px 14px;border-radius:7px}.danger:hover{background:var(--red2)}
.success{border:0;background:var(--green);color:#fff;padding:9px 16px;border-radius:8px;font-weight:650}
.sm{padding:5px 10px!important;font-size:12px!important}.ghost.active{background:var(--blue2);color:var(--blue);border-color:var(--blue)}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.toolbar.filters{margin-bottom:12px}.toolbar .grow{flex:1}
.field{margin-bottom:12px}.field label{display:block;font-size:12px;color:#596673;margin-bottom:5px}.req{color:#ef5350}
.input,.textarea,.select{width:100%;border:1px solid #d9dfe6;border-radius:7px;padding:8px 10px;outline:0;background:#fff}.input:focus,.textarea:focus,.select:focus{border-color:var(--blue);box-shadow:0 0 0 3px #2864f01c}
.textarea{min-height:70px;resize:vertical;line-height:1.55}.input[readonly]{background:#f8fafc}.select.auto,.input.auto{width:auto}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.three{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.four{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.hint{font-size:11px;color:#9aa5b0;margin-top:4px;line-height:1.5}.mini{color:#6d7b88;font-size:12px}.muted{color:var(--muted)}.pre{white-space:pre-wrap;word-break:break-word}.nowrap{white-space:nowrap}.right{text-align:right}.center{text-align:center}.b{font-weight:650}
.pos,.positive{color:var(--green)}.neg,.negative{color:var(--red)}.warn-t{color:var(--orange)}
.check{display:inline-flex;gap:6px;align-items:center;cursor:pointer;font-size:13px;margin-right:12px}
.note{background:#fff8ed;border:1px solid #f7dfb9;border-radius:9px;padding:11px 13px;color:#966326;font-size:12px;line-height:1.65;margin-bottom:12px}.note.info{background:var(--blue2);border-color:#cfdcfb;color:#2f4f93}.note.good{background:var(--green2);border-color:#bfe6d4;color:#1f5d45}.note.bad{background:var(--red2);border-color:#f5c2c2;color:#9b2c2c}.note.plain{background:#f8fafc;border-color:var(--line);color:var(--ink)}
.empty{padding:36px 16px;text-align:center;color:#a2aab4}
.probe{border-radius:9px;padding:10px 12px;font-size:12px;line-height:1.6;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.probe-ok{background:var(--green2);border:1px solid #bfe6d4;color:#1f5d45}
.probe-warn{background:#fff8ed;border:1px solid #f7dfb9;color:#966326}
.probe-bad{background:var(--red2);border:1px solid #f5c2c2;color:#9b2c2c}
.probe-gray{background:#f1f3f5;border:1px solid var(--line);color:#5e6b77}
.tag{display:inline-block;background:var(--green2);color:#138a62;border-radius:12px;padding:3px 9px;font-size:11px;white-space:nowrap;line-height:1.4}.tag.warn{background:var(--orange2);color:#c26a12}.tag.bad{background:var(--red2);color:#c53030}.tag.neutral{background:#eef1f5;color:#5e6b77}.tag.blue{background:var(--blue2);color:var(--blue)}.tag.purple{background:var(--purple2);color:var(--purple)}
.chip{display:inline-block;background:#eef1f5;border-radius:6px;padding:2px 7px;font-size:11px;color:#5e6b77;margin:2px 4px 2px 0}
.bar{height:6px;background:#edf0f4;border-radius:5px;overflow:hidden}.bar i{display:block;height:100%;background:var(--blue);border-radius:5px;transition:width .3s}
.inline-bar{display:flex;align-items:center;gap:8px;min-width:110px}.inline-bar .bar{flex:1}
.divider{border-top:1px solid var(--line);margin:16px 0}
.section-t{font-size:13px;font-weight:700;margin:18px 0 10px}

/* 页内二级切换（少量使用） */
.seg{display:inline-flex;background:#eef1f5;border-radius:9px;padding:3px;gap:2px;margin-bottom:14px;flex-wrap:wrap}.seg button{border:0;background:transparent;padding:6px 13px;border-radius:7px;color:#5e6b77;font-size:13px}.seg button.on{background:#fff;color:var(--blue);font-weight:650;box-shadow:0 1px 3px #17212b1a}

/* 表格 */
.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;color:#7d8893;font-weight:500;font-size:12px;background:#fafbfc;white-space:nowrap;position:sticky;top:0}
.table td,.table th{padding:9px 11px;border-bottom:1px solid var(--line);vertical-align:top;white-space:nowrap}.table td.wrap{white-space:normal;min-width:220px;max-width:520px;line-height:1.55}.table tr:last-child td{border-bottom:0}
.table th.sortable{cursor:pointer;user-select:none}.table th.sortable:hover{color:var(--ink)}.table th .arrow{color:var(--blue);margin-left:3px}
.table tbody tr.clickable{cursor:pointer}.table tbody tr:hover td{background:#f8faff}.table tr.sel td{background:var(--blue2)}
.table td.num{text-align:right;font-variant-numeric:tabular-nums}.table td .clip{max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}.pager{display:flex;gap:6px;align-items:center}.pager select{width:auto;padding:4px 6px}
.tbl-scroll{max-height:560px;overflow:auto}

/* 弹窗 */
.modal{position:fixed;inset:0;background:#17212b66;display:flex;align-items:center;justify-content:center;z-index:200;padding:16px}
.modalbox{background:#fff;border-radius:12px;width:min(760px,96vw);padding:22px 24px;max-height:92vh;overflow:auto;box-shadow:0 20px 60px #17212b33;position:relative}
.modalbox>.close{position:sticky;top:0;float:right;z-index:3;border:0;background:#fff;border-radius:50%;width:32px;height:32px;font-size:22px;color:#8b96a1;box-shadow:0 1px 5px #17212b22;line-height:28px;margin:-6px -8px 0 0}
.modal-title{font-size:17px;font-weight:700;margin-bottom:14px}
.actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}

/* 提示条 */
.toasts{position:fixed;right:20px;top:20px;display:flex;flex-direction:column;gap:8px;z-index:300}
.toast{background:#17212b;color:#fff;padding:10px 16px;border-radius:9px;font-size:13px;box-shadow:0 6px 20px #17212b33;max-width:420px;animation:tin .2s}.toast.ok{background:#127a57}.toast.err{background:#b83232}.toast.warn{background:#b8650f}
.local-hint{position:fixed;left:0;right:0;top:0;z-index:250;display:flex;align-items:center;justify-content:center;gap:12px;padding:8px 16px;background:#fff8e6;border-bottom:1px solid #e6d9b0;color:#7a5c00;font-size:13px}.local-hint.warn{background:#fdeeee;border-bottom:1px solid #eec;color:#a33}.local-hint button{padding:2px 12px;border-radius:6px;border:1px solid #ccc;background:#fff;cursor:pointer}
@keyframes tin{from{transform:translateY(-6px);opacity:0}}

/* 后台任务面板 */
.job{border:1px solid var(--line);border-radius:10px;padding:14px;background:#fafcff}
.job-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.job-head .st{font-weight:650}.job .bar{height:8px;margin:6px 0 4px}
.log{background:#0f1720;color:#cfd8e3;border-radius:8px;padding:10px 12px;font:12px/1.6 Consolas,"Microsoft YaHei",monospace;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-all;margin-top:10px}
.log .l-success{color:#6fe0a8}.log .l-warning{color:#ffc46b}.log .l-error{color:#ff8080}.log .l-t{color:#6b7b8c;margin-right:6px}

/* 图表 */
.chart{width:100%;overflow-x:auto}.chart svg{display:block}.chart text{font-size:11px;fill:#6d7b88}
.legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:6px;font-size:12px;color:#5e6b77}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.chart-img{max-width:100%;border-radius:8px;border:1px solid var(--line)}

/* 卡片列表 */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.card{border:1px solid var(--line);border-radius:10px;padding:14px;background:#fff;display:flex;flex-direction:column;gap:6px}.card .ct{font-weight:700}.card .ca{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:6px}

.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;font-size:13px}.kv dt{color:var(--muted)}.kv dd{margin:0}
.doc{line-height:1.75;font-size:14px}.doc h1,.doc h2,.doc h3{margin:1em 0 .5em}.doc p{margin:.4em 0}

/* 登录 */
#login{position:fixed;inset:0;background:var(--bg);display:none;align-items:center;justify-content:center;z-index:100}
#login .modalbox{width:min(400px,94vw)}

@media(max-width:1100px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.g5,.grid.g6,.grid.g7{grid-template-columns:repeat(3,minmax(0,1fr))}.cols{grid-template-columns:1fr}}
@media(max-width:800px){.side{position:static;width:100%;height:auto}.app{flex-direction:column}.main{margin:0;width:100%;padding:18px 14px}.two,.three,.four{grid-template-columns:1fr}.grid.g3{grid-template-columns:1fr 1fr}}
