PageSourceSearch

https://bsriq.com/news/

html bsriq.com collected 2026-10-02 01:24:36 UTC 29,517 bytes, 488 lines download raw bytes

1<!doctype html>
2<html lang="zh-CN">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1">
6<meta name="description" content="跨境娜娜新闻中心:亚马逊卖家每日快讯、每周行业周报、每月深度盘点。关税、平台政策、算法变化,一站跟进。">
7<title>亚马逊新闻中心 · 跨境娜娜 Simone</title>
8<meta property="og:type" content="website">
9<meta property="og:title" content="📅 亚马逊新闻中心 · BSRIQ">
10<meta property="og:description" content="日更快讯 + 每周周报 + 每月盘点,带娜娜的个人点评,政策变动不漏看。">
11<meta property="og:url" content="https://bsriq.com/news/">
12<meta property="og:image" content="https://bsriq.com/assets/og.jpg">
13<meta property="og:site_name" content="BSRIQ · 跨境娜娜 Simone">
14<meta name="twitter:card" content="summary_large_image">
15<link rel="stylesheet" href="/style.css">
16<style>
17  /* 情报分级:P0 必须今天处理,P1 已生效进 SOP,P2 待确认只进情景,不进成本表 */
18  .news-scope{--p0:#B4402A;--p0-wash:rgba(180,64,42,.08);--p0-line:rgba(180,64,42,.30);
19              --p2:#8A8474;--p2-wash:rgba(138,132,116,.10);}
20
21  .ntabs{display:flex;gap:6px;border-bottom:2px solid var(--line);margin:30px 0 0;flex-wrap:wrap;}
22  .ntab{padding:10px 22px;font-size:15px;cursor:pointer;border:none;background:none;color:var(--text-soft);font-family:inherit;border-bottom:3px solid transparent;margin-bottom:-2px;}
23  .ntab[aria-selected="true"]{color:var(--gold);border-bottom-color:var(--gold);font-weight:700;}
24  .ntab:focus-visible{outline:2px solid var(--gold);outline-offset:2px;border-radius:3px;}
25  .npanel{display:none;padding:26px 0 10px;} .npanel.on{display:block;}
26
27  /* ---- 同步状态条 ---- */
28  .sync-note{display:flex;gap:10px 18px;align-items:center;flex-wrap:wrap;background:var(--bg-card);border:1px solid var(--line);border-radius:8px;padding:12px 16px;margin:0 0 18px;color:var(--text-soft);font-size:12.5px;}
29  .sync-note strong{color:var(--text);}
30  .sync-note .dot{width:7px;height:7px;border-radius:50%;background:var(--green);flex:none;}
31
32  /* ---- 控制条:搜索 + 分级 + 标签 ---- */
33  .nctrl{background:var(--bg-card);border:1px solid var(--line);border-radius:8px;padding:14px 16px;margin:0 0 20px;display:flex;flex-direction:column;gap:11px;}
34  .nctrl .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
35  .nctrl .lbl{font-size:11.5px;color:var(--text-dim);letter-spacing:.08em;flex:none;width:44px;}
36  .nsearch{flex:1;min-width:190px;font-family:inherit;font-size:14px;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:8px 12px;}
37  .nsearch:focus{outline:none;border-color:var(--gold-dim);}
38  .chip{font-family:inherit;font-size:12.5px;cursor:pointer;background:var(--bg);color:var(--text-soft);border:1px solid var(--line);border-radius:999px;padding:4px 13px;}
39  .chip:hover{border-color:var(--gold-dim);color:var(--text);}
40  .chip[aria-pressed="true"]{background:var(--gold-wash);border-color:var(--gold-dim);color:var(--gold);font-weight:700;}
41  .chip:focus-visible{outline:2px solid var(--gold);outline-offset:1px;}
42  .chip .n{font-family:var(--mono);font-size:11px;opacity:.65;margin-left:5px;}
43  .nresult{font-size:12.5px;color:var(--text-dim);}
44  .nresult b{color:var(--gold);font-variant-numeric:tabular-nums;}
45  .nreset{font-size:12.5px;color:var(--text-dim);background:none;border:none;cursor:pointer;font-family:inherit;text-decoration:underline;padding:0;}
46  .nreset:hover{color:var(--gold);}
47
48  /* ---- 一期日报 ---- */
49  .day{margin:0 0 14px;border:1px solid var(--line);border-radius:10px;background:var(--bg-card);overflow:hidden;}
50  .day.latest{border-color:var(--gold-dim);box-shadow:var(--shadow);}
51  .day-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 20px;cursor:pointer;list-style:none;}
52  .day-head::-webkit-details-marker{display:none;}
53  .day-head:hover{background:var(--bg-card-hi);}
54  .day-head:focus-visible{outline:2px solid var(--gold);outline-offset:-2px;}
55  .day-head .dt{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;margin:0;}
56  .day-head .wd{font-size:13px;color:var(--text-dim);}
57  .day-head .ago{font-size:12px;color:var(--text-dim);font-variant-numeric:tabular-nums;}
58  .day-head .issue{font-family:var(--mono);font-size:11px;color:var(--gold);border:1px solid var(--gold-dim);border-radius:999px;padding:2px 9px;}
59  .day-head .cnt{margin-left:auto;font-size:12px;color:var(--text-dim);font-variant-numeric:tabular-nums;}
60  .day-head .caret{font-size:11px;color:var(--text-dim);transition:transform .15s;}
61  details[open] > .day-head .caret{transform:rotate(90deg);}
62  .day-body{padding:0 20px 18px;}
63  .today-badge{font-size:10.5px;letter-spacing:.1em;background:var(--gold);color:#fff;border-radius:3px;padding:2px 7px;font-weight:700;}
64
65  .action{background:var(--gold-wash);border-left:3px solid var(--gold);border-radius:4px;padding:12px 16px;margin:0 0 14px;font-size:13.5px;color:var(--text-soft);line-height:1.75;}
66  .action b{color:var(--gold);}
67
68  /* ---- 单条情报 ---- */
69  .nitem{border:1px solid var(--line);border-left:3px solid var(--line);border-radius:7px;padding:15px 18px;margin-bottom:10px;background:var(--bg-card);}
70  .nitem.p0{border-left-color:var(--p0);background:var(--p0-wash);}
71  .nitem.p1{border-left-color:var(--gold);}
72  .nitem.p2{border-left-color:var(--p2);}
73  .nmeta{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-bottom:8px;}
74  .ncat{font-size:11px;font-weight:700;border-radius:3px;padding:2px 9px;letter-spacing:.03em;
75        background:var(--gold);color:#fff;}
76  .ntag{font-size:11px;color:var(--text-dim);border:1px solid var(--line);border-radius:2px;padding:1px 8px;letter-spacing:.06em;}
77  .prio{font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.06em;border-radius:2px;padding:1px 7px;}
78  .prio.p0{background:var(--p0);color:#fff;}
79  .prio.p1{background:var(--gold-wash);color:var(--gold);border:1px solid var(--gold-dim);}
80  .prio.p2{background:var(--p2-wash);color:var(--p2);}
81  .verify{font-size:10.5px;color:var(--text-dim);border:1px solid var(--line);border-radius:2px;padding:1px 7px;}
82  .verify.soft{color:var(--p0);border-color:var(--p0-line);}
83  .when{font-size:10.5px;color:var(--text-dim);}
84  .nitem h4{font-size:16px;margin:0 0 7px;line-height:1.55;}
85  .nitem p{margin:0;font-size:14px;color:var(--text-soft);line-height:1.8;}
86  .nitem mark{background:var(--gold-wash);color:var(--gold);font-weight:700;padding:0 1px;}
87  .srcs{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-top:10px;}
88  .srcs .lb{font-size:11.5px;color:var(--text-dim);}
89  .src{font-size:11.5px;color:var(--text-dim);text-decoration:none;border-bottom:1px dotted var(--gold-dim);}
90  .src:hover{color:var(--gold);border-bottom-color:var(--gold);}
91
92  .report-sources{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:14px;padding-top:11px;border-top:1px solid var(--line);}
93  .report-sources .label{font-size:11.5px;color:var(--text-dim);}
94  .report-sources a{font-size:11.5px;color:var(--text-dim);text-decoration:none;border-bottom:1px dotted var(--gold-dim);}
95  .report-sources a:hover{color:var(--gold);border-bottom-color:var(--gold);}
96
97  .m-card{background:var(--gold-wash);border:1px dashed var(--gold-dim);border-radius:8px;padding:22px 26px;margin-bottom:14px;}
98  .m-card h3{margin:0 0 6px;font-size:19px;}
99  .m-card .st{font-size:12px;color:var(--gold);letter-spacing:.08em;}
100  .m-card p{color:var(--text-soft);font-size:14px;margin:8px 0 0;}
101  .kw{display:inline-block;font-size:12.5px;background:var(--bg-card);border:1px solid var(--line);border-radius:999px;padding:3px 12px;margin:8px 8px 0 0;color:var(--text);}
102  .me{background:var(--gold-wash);border:1px dashed var(--gold-dim);border-radius:8px;padding:16px 20px;margin-bottom:14px;}
103  .me .who{font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--gold);display:block;margin-bottom:6px;}
104  .me p{margin:0;font-size:14.5px;color:var(--text);font-family:var(--serif);line-height:1.9;}
105  .access-card{background:var(--gold-wash);border:1px dashed var(--gold-dim);border-radius:8px;padding:22px 24px;margin:0 0 22px;}
106  .access-card .access-label{display:inline-block;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;color:var(--gold);margin-bottom:7px;}
107  .access-card h3{font-size:18px;margin:0 0 7px;}
108  .access-card p{font-size:13.5px;color:var(--text-soft);margin:0 0 13px;}
109  .access-card .access-btn{display:inline-block;background:var(--gold);color:#fff;text-decoration:none;border-radius:5px;padding:8px 15px;font-size:13px;font-weight:700;}
110  .access-card .access-btn.alt{background:transparent;color:var(--gold);border:1px solid var(--gold-dim);margin-left:8px;}
111  .empty{color:var(--text-dim);font-size:14px;padding:26px 0;text-align:center;}
112
113  @media (max-width:560px){
114    .nctrl .lbl{width:auto;}
115    .day-head{padding:12px 14px;gap:8px;}
116    .day-head .dt{font-size:16px;}
117    .day-head .cnt{margin-left:0;}
118    .day-body{padding:0 14px 14px;}
119    .nitem{padding:13px 14px;}
120  }
121  @media (prefers-reduced-motion:reduce){ .caret{transition:none;} }
122</style>
123</head>
124<body>
125<header class="top">
126  <div class="wrap top-inner">
127    <a class="brand" href="/" style="text-decoration:none;">NANA SIMONE</a>
128    <nav class="menu" aria-label="页面导航">
129      <a href="/">首页</a>
130      <a href="/ads/">广告分析</a>
131      <a href="/resources/">工具资源</a>
132      <a href="/deals/">折扣码</a>
133      <a href="/#contact">联系</a>
134    </nav>
135  </div>
136</header>
137<main class="news-scope">
138  <div class="hero" style="padding:56px 0 24px;">
139    <div class="wrap">
140      <p class="eyebrow">News Center</p>
141      <h1 style="font-size:clamp(32px,5.5vw,52px);">亚马逊<span class="gold-text">新闻中心</span></h1>
142      <p class="hero-line" style="margin-bottom:0;">关税、平台政策、算法变化——<b>每日快讯 · 每周周报 · 每月盘点</b>,三个节奏一站跟进。每条都标了<b>分级</b>:<b>P0</b> 今天必须处理;<b>P1</b> 官方一手、已生效,可进 SOP 和成本表;<b>P2</b> 媒体二手或待确认,只进情景、不改售价采购。想看长文?关注公众号 / 头条号<b>「跨境娜娜」</b>,或看站内<a href="/blog/">随笔日记 →</a></p>
143    </div>
144  </div>
145
146  <section style="padding-top:8px;border-bottom:none;">
147    <div class="wrap">
148      <div class="ntabs" role="tablist" aria-label="情报节奏">
149        <button class="ntab" role="tab" id="t-daily" aria-controls="p-daily" aria-selected="true" data-p="daily">📅 每日快讯</button>
150        <button class="ntab" role="tab" id="t-weekly" aria-controls="p-weekly" aria-selected="false" data-p="weekly">📰 每周周报</button>
151        <button class="ntab" role="tab" id="t-monthly" aria-controls="p-monthly" aria-selected="false" data-p="monthly">🗓️ 每月盘点</button>
152      </div>
153
154      <div class="npanel on" id="p-daily" role="tabpanel" aria-labelledby="t-daily"></div>
155      <div class="npanel" id="p-weekly" role="tabpanel" aria-labelledby="t-weekly" hidden></div>
156      <div class="npanel" id="p-monthly" role="tabpanel" aria-labelledby="t-monthly" hidden></div>
157    </div>
158  </section>
159</main>
160<footer class="wrap">
161  <span>© 2026 娜娜 Simone · bsriq.com</span>
162  <span class="mono">BSRIQ = BSR + IQ · 让你的 BSR 长智商</span>
163</footer>
164
165<script src="/news/public-data.js"></script>
vendor: 1 bytes, line 165
165
166<script>
167(function(){
168  var access={authenticated:false,member:false};
169  // 筛选状态放在闭包里,会员数据异步加载后重渲染不会丢失用户已选的条件。
170  var filter={q:'',prio:'',cat:''};  // cat=情报大类,tag 降级为卡片上的次级说明
171  var openDays={};       // 用户手动展开/收起过的期号
172  var openTouched=false; // 用户是否动过折叠,动过就不再自动只展开最新一期
173
174  var esc=function(s){return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');};
175  var safeUrl=function(value){
176    try{var u=new URL(value);return (u.protocol==='http:'||u.protocol==='https:')?u.href:'';}catch(e){return '';}
177  };
178  function loadScript(src){
179    return new Promise(function(resolve,reject){
180      var s=document.createElement('script');
181      s.src=src;s.async=false;s.onload=resolve;s.onerror=reject;
182      document.head.appendChild(s);
183    });
184  }
185
186  /* ---------- 数据 ---------- */
187  function currentDaily(){
188    var daily=access.member
189      ?(window.NEWS_LATEST_DAILY||[]).concat(window.NEWS_DAILY||[])
190      :(window.NEWS_PUBLIC_DAILY||[]);
191    var seen={};
192    return daily.filter(function(day){
193      var key=day.date||day.syncKey;
194      if(!key||seen[key])return false;
195      seen[key]=true;return true;
196    }).sort(function(a,b){return String(b.date||'').localeCompare(String(a.date||''));});
197  }
198  function currentMeta(){
199    if(access.member)return window.NEWS_SYNC_META||window.NEWS_PUBLIC_META;
200    return window.NEWS_PUBLIC_META;
201  }
202
203  /* ---------- 把 "已核实事实|P1|今日节点" 拆成结构化分级 ---------- */
204  function parseStatus(raw){
205    var s=String(raw||'');
206    // 口径:字符串里的 P1/P2 是「信源等级」(P1 官方一手 / P2 媒体二手),
207    // 而「P0风险卡」是当日处理优先级。只要出现 P0 就按 P0 处理,否则退回信源等级。
208    var m=s.match(/P0/)?['P0','0']:s.match(/P([0-3])/);
209    var prio=m?(m[0]==='P0'?'P0':('P'+m[1])):'';
210    var parts=s.split(/[||]/).map(function(x){return x.trim();}).filter(Boolean);
211    var verify='',when='';
212    parts.forEach(function(part){
213      if(/^P[0-3]/.test(part))return;
214      if(/核实|确认|推断|口径/.test(part)){ if(!verify)verify=part; }
215      else if(!when){ when=part; }
216    });
217    // 「待确认」类信息不能进成本表,单独标出来
218    return {prio:prio, verify:verify, when:when, soft:/待确认|推断/.test(verify)};
219  }
220  function prioClass(p){ return p==='P0'?'p0':(p==='P1'?'p1':(p?'p2':'')); }
221
222  /* ---------- 标题/正文清洗:兼容早期 data.js 的写法 ---------- */
223  function normalize(it){
224    var title=String(it.t||'').trim();
225    var desc=String(it.d||'').trim();
226    if(/…$/.test(title)&&desc){
227      var combined=title.slice(0,-1)+desc;
228      var boundary=combined.search(/[。;]/);
229      if(boundary>=0){title=combined.slice(0,boundary+1);desc=combined.slice(boundary+1).trim();}
230      else{title=combined;desc='';}
231    }
232    title=title.replace(/^[::;;·\s]+/,'');
233    desc=desc.replace(/^[::;;·\s]+/,'');
234    var sources=(it.sources||[]).slice();
235    if(it.s)sources.unshift({label:'原始信源',url:it.s});
236    var valid=[],used={};
237    sources.forEach(function(src){var url=safeUrl(src.url);if(url&&!used[url]){used[url]=true;valid.push({label:src.label||'原始信源',url:url});}});
238    valid.slice().reverse().forEach(function(src){
239      var label=String(src.label||'').replace(/[.*+?^${}()|[\]\\]/g,'\\$&');
240      if(label)desc=desc.replace(new RegExp('[|·\\s]*'+label+'[。.]?$'),'').trim();
241    });
242    return {title:title,desc:desc,sources:valid,tag:it.tag||'跨境情报',cat:it.cat||'',status:parseStatus(it.status)};
243  }
244
245  /* ---------- 搜索命中高亮 ---------- */
246  function hl(text,q){
247    var safe=esc(text);
248    if(!q)return safe;
249    var needle=esc(q).replace(/[.*+?^${}()|[\]\\]/g,'\\$&');
250    try{ return safe.replace(new RegExp(needle,'gi'),function(m){return '<mark>'+m+'</mark>';}); }
251    catch(e){ return safe; }
252  }
253  function matches(n,day){
254    if(filter.prio&&n.status.prio!==filter.prio)return false;
255    if(filter.cat&&n.cat!==filter.cat)return false;
256    if(filter.q){
257      var hay=(n.title+' '+n.desc+' '+n.tag+' '+n.cat+' '+(day.action||'')).toLowerCase();
258      if(hay.indexOf(filter.q.toLowerCase())<0)return false;
259    }
260    return true;
261  }
262
263  function daysAgo(dateStr){
264    var d=new Date(String(dateStr)+'T00:00:00+08:00');
265    if(isNaN(d))return '';
266    var today=new Date();
267    var diff=Math.floor((today-d)/86400000);
268    if(diff<=0)return '今天';
269    if(diff===1)return '昨天';
270    return diff+' 天前';
271  }
272
273  function accessCard(kind){
274    var from=encodeURIComponent('/news/');
275    if(!access.authenticated){
276      return '<div class="access-card"><span class="access-label">MEMBER CONTENT</span><h3>'+(kind==='daily'?'当前开放今日 3 条精选摘要':'周报与月度盘点为会员内容')+'</h3><p>88.88 元 24 小时体验码或年卡会员可解锁今日完整快讯、全部历史日报、周报和月报。</p><a class="access-btn" href="/join/?from='+from+'">登录 / 绑定会员码</a><a class="access-btn alt" href="/join/?from='+from+'">了解会员</a></div>';
277    }
278    return '<div class="access-card"><span class="access-label">MEMBER REQUIRED</span><h3>当前账号尚未开通有效会员</h3><p>88.88 元 24 小时体验码或年卡会员可解锁今日完整快讯、全部历史日报、周报和月报。</p><a class="access-btn" href="/join/?from='+from+'">绑定会员码</a></div>';
279  }
280
281  /* ---------- 控制条 ---------- */
282  function controlBar(days,total,shown){
283    var cats={},prios={};
284    days.forEach(function(day){
285      (day.items||[]).forEach(function(it){
286        var n=normalize(it);
287        if(n.cat)cats[n.cat]=(cats[n.cat]||0)+1;
288        if(n.status.prio)prios[n.status.prio]=(prios[n.status.prio]||0)+1;
289      });
290    });
291    // 大类顺序固定,不随当日条数抖动,用户肌肉记忆才稳
292    var CATS=['政策与关税','平台规则','物流与供应链','AI 与工具','市场与宏观','每日综述'];
293    var catNames=CATS.filter(function(c){return cats[c];});
294    var prioHtml=['P0','P1','P2'].filter(function(p){return prios[p];}).map(function(p){
295      return '<button class="chip" type="button" data-prio="'+p+'" aria-pressed="'+(filter.prio===p)+'">'+p+'<span class="n">'+prios[p]+'</span></button>';
296    }).join('');
297    var tagHtml=catNames.map(function(t){
298      return '<button class="chip" type="button" data-cat="'+esc(t)+'" aria-pressed="'+(filter.cat===t)+'">'+esc(t)+'<span class="n">'+cats[t]+'</span></button>';
299    }).join('');
300    var active=filter.q||filter.prio||filter.cat;
301    return '<div class="nctrl">'
302      +'<div class="row"><span class="lbl">搜索</span>'
303      +'<input class="nsearch" id="nq" type="search" placeholder="搜关税、PBBD、锂电、Agent…" value="'+esc(filter.q)+'" aria-label="搜索情报">'
304      +'</div>'
305      +(prioHtml?'<div class="row"><span class="lbl">分级</span>'+prioHtml+'</div>':'')
306      +(tagHtml?'<div class="row"><span class="lbl">分类</span>'+tagHtml+'</div>':'')
307      +'<div class="row"><span class="nresult">显示 <b>'+shown+'</b> / '+total+' 条情报</span>'
308      +(active?'<button class="nreset" type="button" id="nreset">清除筛选</button>':'')
309      +'</div></div>';
310  }
311
312  /* ---------- 每日快讯 ---------- */
313  function renderDaily(){
314    var days=currentDaily();
315    var d=document.getElementById('p-daily');
316    var meta=currentMeta();
317    var scope=access.member?'已解锁完整快讯与全部档案':'公开 3 条精选摘要';
318    var syncHtml=meta?'<div class="sync-note"><span class="dot" aria-hidden="true"></span><strong>每日跨境情报已更新</strong><span>更新至 '+esc(meta.syncedThrough)+' · '+esc(meta.issueRange)+'</span><span>'+scope+'</span></div>':'';
319
320    var total=0;
321    days.forEach(function(day){total+=(day.items||[]).length;});
322
323    var shown=0, body='', latestKey=days.length?(days[0].date||days[0].syncKey):'';
324    days.forEach(function(day){
325      var key=day.date||day.syncKey;
326      var kept=(day.items||[]).map(normalize).filter(function(n){return matches(n,day);});
327      shown+=kept.length;
328      if(!kept.length)return;
329      var isLatest=(key===latestKey);
330      // 默认只展开最新一期;一旦用户动过折叠,或正在筛选,就按用户/筛选结果来
331      var open=openTouched?!!openDays[key]:(isLatest||!!filter.q||!!filter.prio||!!filter.cat);
332      body+='<details class="day'+(isLatest?' latest':'')+'"'+(open?' open':'')+' data-key="'+esc(key)+'">'
333        +'<summary class="day-head">'
334        +'<span class="caret" aria-hidden="true">▶</span>'
335        +'<h3 class="dt">'+esc(day.date)+'</h3>'
336        +'<span class="wd">'+esc(day.weekday||'')+'</span>'
337        +'<span class="ago">'+esc(daysAgo(day.date))+'</span>'
338        +(isLatest?'<span class="today-badge">最新一期</span>':'')
339        +(day.issue?'<span class="issue">第 '+esc(day.issue)+' 期'+(day.priority?' · '+esc(day.priority):'')+'</span>':'')
340        +'<span class="cnt">'+kept.length+' 条</span>'
341        +'</summary><div class="day-body">'
342        + (day.me&&!day.syncKey?'<div class="me"><span class="who">NANA 说</span><p>'+esc(day.me)+'</p></div>':'')
343        + (day.action?'<div class="action"><b>今日动作:</b>'+hl(day.action,filter.q)+'</div>':'')
344        + kept.map(function(n){
345            var pc=prioClass(n.status.prio);
346            return '<article class="nitem'+(pc?' '+pc:'')+'">'
347              +'<div class="nmeta">'+(n.cat?'<span class="ncat">'+esc(n.cat)+'</span>':'')+'<span class="ntag">'+esc(n.tag)+'</span>'
348              +(n.status.prio?'<span class="prio '+pc+'">'+esc(n.status.prio)+'</span>':'')
349              +(n.status.verify?'<span class="verify'+(n.status.soft?' soft':'')+'">'+esc(n.status.verify)+'</span>':'')
350              +(n.status.when?'<span class="when">'+esc(n.status.when)+'</span>':'')
351              +'</div>'
352              +'<h4>'+hl(n.title,filter.q)+'</h4>'
353              +(n.desc?'<p>'+hl(n.desc,filter.q)+'</p>':'')
354              +(n.sources.length?'<div class="srcs"><span class="lb">信源:</span>'+n.sources.map(function(src){return '<a class="src" href="'+esc(src.url)+'" target="_blank" rel="noopener noreferrer">'+esc(src.label)+'</a>';}).join('')+'</div>':'')
355              +'</article>';
356          }).join('')
357        +'</div></details>';
358    });
359
360    var ctrl=total>=5?controlBar(days,total,shown):'';
361    if(!days.length)body='<p class="empty">今日快讯整理中。</p>';
362    else if(!shown)body='<p class="empty">没有符合条件的情报。换个关键词,或点「清除筛选」看全部。</p>';
363
364    d.innerHTML=syncHtml+ctrl+body
365      +(!access.member?accessCard('daily'):'')
366      +'<div class="me" style="text-align:center;"><span class="who">FOLLOW NANA</span><p style="font-family:inherit;">深度长文版 + 工具折扣码汇总,在公众号和头条号<b>「跨境娜娜」</b>——微信 / 头条 App 内搜索关注。咨询直连微信 <b>simone2288</b>。</p></div>';
367
368    bindDailyEvents();
369  }
370
371  function bindDailyEvents(){
372    var d=document.getElementById('p-daily');
373    var q=d.querySelector('#nq');
374    if(q){
375      var timer=null;
376      q.addEventListener('input',function(){
377        clearTimeout(timer);
378        var v=q.value;
379        timer=setTimeout(function(){
380          filter.q=v;
381          var pos=q.selectionStart;
382          renderDaily();
383          var nq=document.getElementById('nq');
384          if(nq){nq.focus();try{nq.setSelectionRange(pos,pos);}catch(e){}}
385        },180);
386      });
387    }
388    d.querySelectorAll('.chip[data-prio]').forEach(function(b){
389      b.addEventListener('click',function(){
390        filter.prio=(filter.prio===b.dataset.prio)?'':b.dataset.prio;
391        renderDaily();
392      });
393    });
394    d.querySelectorAll('.chip[data-cat]').forEach(function(b){
395      b.addEventListener('click',function(){
396        filter.cat=(filter.cat===b.dataset.cat)?'':b.dataset.cat;
397        renderDaily();
398      });
399    });
400    var reset=d.querySelector('#nreset');
401    if(reset)reset.addEventListener('click',function(){filter={q:'',prio:'',cat:''};renderDaily();});
402    d.querySelectorAll('details.day').forEach(function(el){
403      el.addEventListener('toggle',function(){
404        openTouched=true;
405        openDays[el.dataset.key]=el.open;
406      });
407    });
408  }
409
410  /* ---------- 周报 / 月报 ---------- */
411  function reportSources(sources){
412    var valid=[],used={};
413    (sources||[]).forEach(function(src){
414      var url=safeUrl(src.url);
415      if(url&&!used[url]){used[url]=true;valid.push({label:src.label||'原始信源',url:url});}
416    });
417    return valid.length?'<div class="report-sources"><span class="label">公开信源:</span>'+valid.map(function(src){return '<a href="'+esc(src.url)+'" target="_blank" rel="noopener noreferrer">'+esc(src.label)+'</a>';}).join('')+'</div>':'';
418  }
419  function renderWeekly(){
420    var w=document.getElementById('p-weekly');
421    if(!access.member){w.innerHTML=accessCard('weekly');return;}
422    w.innerHTML=(window.NEWS_WEEKLY||[]).map(function(wk){
423    return '<article class="nitem"><div style="display:flex;gap:14px;align-items:baseline;flex-wrap:wrap;"><span style="font-family:var(--mono);color:var(--gold);font-weight:800;font-size:18px;">'+esc(wk.no)+'</span><h4 style="margin:0;">'+esc(wk.title)+'</h4><span style="font-size:12px;color:var(--text-dim);">'+esc(wk.period)+'</span></div>'
424      +(wk.sections||[]).map(function(sec){
425        return '<p style="margin:10px 0 4px;font-weight:700;color:var(--gold);font-size:13.5px;">'+esc(sec.h)+'</p><ul style="margin:0;padding-left:20px;">'+(sec.points||[]).map(function(pt){return '<li style="font-size:14px;color:var(--text-soft);margin:3px 0;">'+esc(pt)+'</li>';}).join('')+'</ul>';
426      }).join('')
427      +(wk.note?'<p style="margin:12px 0 0;font-size:13px;color:var(--text-dim);">'+esc(wk.note)+'</p>':'')
428      +reportSources(wk.sources)+'</article>';
429    }).join('') || '<p class="empty">本月周报整理中。</p>';
430  }
431  function renderMonthly(){
432    var m=document.getElementById('p-monthly');
433    if(!access.member){m.innerHTML=accessCard('monthly');return;}
434    m.innerHTML=(window.NEWS_MONTHLY||[]).map(function(mo){
435    return '<div class="m-card"><span class="st">'+esc(mo.status)+'</span><h3>'+esc(mo.month)+' 盘点</h3>'
436      +(mo.keywords||[]).map(function(k){return '<span class="kw">'+esc(k)+'</span>';}).join('')
437      +(mo.sections||[]).map(function(sec){
438        return '<p style="margin:14px 0 4px;font-weight:700;color:var(--gold);font-size:14px;">'+esc(sec.h)+'</p><ul style="margin:0;padding-left:20px;">'+(sec.points||[]).map(function(pt){return '<li style="font-size:14px;color:var(--text-soft);margin:4px 0;">'+esc(pt)+'</li>';}).join('')+'</ul>';
439      }).join('')
440      +(mo.note?'<p>'+esc(mo.note)+'</p>':'')
441      +reportSources(mo.sources)+'</div>';
442    }).join('') || '<p class="empty">本月盘点整理中。</p>';
443  }
444  function renderAll(){renderDaily();renderWeekly();renderMonthly();}
445
446  /* ---------- Tabs ---------- */
447  var tabs=[].slice.call(document.querySelectorAll('.ntab'));
448  function selectTab(btn){
449    tabs.forEach(function(x){
450      var on=(x===btn);
451      x.setAttribute('aria-selected',on?'true':'false');
452      var panel=document.getElementById('p-'+x.dataset.p);
453      panel.classList.toggle('on',on);
454      panel.hidden=!on;
455    });
456    btn.focus();
457  }
458  tabs.forEach(function(b,i){
459    b.addEventListener('click',function(){selectTab(b);});
460    b.addEventListener('keydown',function(e){
461      if(e.key!=='ArrowRight'&&e.key!=='ArrowLeft')return;
462      e.preventDefault();
463      selectTab(tabs[(i+(e.key==='ArrowRight'?1:tabs.length-1))%tabs.length]);
464    });
465  });
466
467  renderAll();
468  fetch('/api/member',{method:'GET',credentials:'same-origin',headers:{'Accept':'application/json'},cache:'no-store'})
469    .then(function(r){return r.ok?r.json():{authenticated:false,member:false};})
470    .then(function(state){
471      access.authenticated=!!state.authenticated;
472      access.member=!!state.member;
473      if(access.member){
474        return Promise.all([loadScript('/news/latest-data.js'),loadScript('/news/data.js').then(function(){
475          return loadScript('/news/weekly-data.js').catch(function(){
476            // 周报覆盖加载失败时,保留 data.js 的旧周报及会员状态。
477          });
478        })]);
479      }
480    })
481    .catch(function(){access.authenticated=false;access.member=false;})
482    .then(function(){renderAll();});
483})();
484</script>
vendor: 1 bytes, line 484
484
485<script src="/nav.js" defer></script>
vendor: 1 bytes, line 485
485
486<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"6de6b9ed6753452ba2ad7b0ebd2f0366","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 486
486
487<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a43fe88f1c90e7fc',t:'MTc5MDkwNDI3Ng=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
487</body>
488</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.