AHAN // ADVANCED HEURISTIC ANALYTICS NETWORK

連線全球情報節點 • 構建因果外溢模型...

65 語系多源同步 NODE LIVE

AI 深度運算解析中...

正在進行多維數據交叉驗證與演進拓撲重構

🌐
AHAN 格點全球
65 語系情報在線

智庫深度能力

🎙️ 微軟 Edge 真人語音 已啟用
🕵️‍♂️ GDELT 媒體風向修訂 DIFF TRACK
🔒 管理員身分登入

AHAN v2.0 • 國際情報智庫

廣播節目時段標題殘缺:內容空訊號下的情報鑑識與研判
文化社會

廣播節目時段標題殘缺:內容空訊號下的情報鑑識與研判

#媒體內容鑑識 #娛樂廣播產業 #資訊空訊號分析 #內容農場風險
就緒
聲線:
倍速:
字級:
核心事實

本次待研析的素材來源為 iHeartRadio 旗下 KISS 102.3 頻道,原始標題為「2026 09 15 1014 Elvis Duran And The Morni James Murr Murray On The Truth About Impract」,然而整篇報導內文完全空白,未提供任何實質敘事、訪談摘要、引言或數據資料。從標題結構研判,該節目應為知名晨間脫口秀《Elvis Duran and the Morning Show》的某一集錄音檔,由主持人 Elvis Duran、James Murray 與其他成員共同討論某項主題,惟「Impract」一詞極可能為「Imperfect(不完美)」的截斷殘字,或系統抓取時發生斷字錯誤,導致核心議題完全無法辨識。

這是一則典型的「標題殘缺、內文空缺」雙重空訊號事件,不具備任何可供情報分析實證推論的實質素材。從產業脈絡觀察,Elvis Duran 節目長期穩居美國廣播晨間時段收聽率領先群,每日觸及數百萬都會區通勤族,廣告商高度重視其收聽輪廓與議題設定能力,因此即便本素材缺乏內容,仍有助於理解美國地方廣播電台在數位串流時代的內容產製與分發生態。

🔥 背景脈絡與利益角力

本事件本質上並不涉及任何地緣政治、企業壟斷或利益博弈衝突,而是典型的媒體內容數位分發環節中出現的「資訊衰減」與「內容失真」現象。強行套用利益角力分析將違反情報研析的嚴謹性,故本文轉向解析此現象背後的結構性成因。

從歷史脈絡觀察,美國廣播產業自 1996 年《電信法》鬆綁管制後,經歷長達近三十年的高度整合:iHeartMedia 透過併購 ClearChannel 等交易,一舉成為全美最大的廣播帝國,旗下電台數量曾超過 850 座,覆蓋逾九成美國人口。這種「巨頭化」結構雖帶來規模經濟,卻也使內容產製高度標準化、模板化,大量仰賴自動化排程與 AI 輔助文案,導致 RSS feed、節目 API 與第三方爬蟲在抓取資料時,極易遭遇「標題截斷、章節錯置、摘要遺失」等技術性衰變。

1.
技術層面:許多 iHeartRadio 的節目頁面係由動態 JavaScript 渲染,傳統爬蟲僅能擷取 `` 標籤內的原始檔名(如本案的時間戳記與主持人姓名),而真正的節目內容需透過登入或串流介面才能取得,形成「<span class="marker-amber font-medium">標題可見、內容空窗</span>」的結構性落差。</div></div></div> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">2.</span><div class="flex-1"><mark class="marker-amber">產業層面</mark>:廣播電台為求 SEO 與 Podcast 平台收錄,往往在標題欄塞入大量時間碼與主持人姓名,卻未提供具備實質語意的內容摘要,反映出<mark class="marker-amber">廣播產業在轉型 Podcast 與串流媒體過程中,長期輕忽 metadata 治理與內容結構化</mark>的系統性缺陷。</div></div></div> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">3.</span><div class="flex-1"><mark class="marker-amber">資訊生態層面</mark>:當主流媒體內容大量仰賴自動化分發時,<mark class="marker-amber">「<span class="marker-amber font-medium">空訊號內容</span>」將污染下游的內容農場、AI 訓練資料集與新聞聚合平台</mark>,形成資訊可信度的骨牌式崩跌風險。</div></div></div> </div> </section> <!-- 3. 各界影響評估 --> <section class="insight-section impact-matrix animate-fade-in-up stagger-3 mb-8 sm:mb-10" id="section-impact-matrix"> <div class="insight-label text-accent-blue flex items-center gap-2"> <span class="text-base">🎯</span> <span class="font-bold tracking-wider text-xs sm:text-sm">各界影響評估</span> </div> <div class="grid grid-cols-1 sm:grid-cols-3 gap-3 mt-3"> <div class="impact-micro-card border-cyan-500/20 bg-cyan-950/10 rounded-xl p-3.5 sm:p-4 flex flex-col justify-between"> <div> <div class="flex items-center gap-2 mb-2 pb-2 border-b border-white/5"> <span class="text-base">💻</span> <span class="text-xs font-bold text-accent-cyan tracking-wider">產業與技術</span> </div> <div> <div class="leading-[1.75] text-[13px] sm:text-[13.5px] text-gray-300 font-normal">對技術架構師而言,本案凸顯 <mark class="marker-cyan">RSS 與 Podcast feed metadata 治理的關鍵缺口</mark>。前端爬蟲與內容聚合系統在處理動態渲染頁面時,應建置「<span class="marker-cyan font-medium">標題語意完整性檢查</span>」與「<span class="marker-cyan font-medium">內文空值告警機制</span>」,避免將殘缺標題污染至下游資料流。</div> </div> </div> </div> <div class="impact-micro-card border-emerald-500/20 bg-emerald-950/10 rounded-xl p-3.5 sm:p-4 flex flex-col justify-between"> <div> <div class="flex items-center gap-2 mb-2 pb-2 border-b border-white/5"> <span class="text-base">📈</span> <span class="text-xs font-bold text-emerald-400 tracking-wider">市場與投資</span> </div> <div> <div class="leading-[1.75] text-[13px] sm:text-[13.5px] text-gray-300 font-normal">對資本市場而言,<mark class="marker-green">iHeartMedia 等廣播巨頭的數位轉型進展仍存在顯著不確定性</mark>。Podcast 廣告營收雖高速成長,但底層內容基建(metadata、API 開放度、內容結構化程度)若未同步升級,將限制其 ARPU 提升與程序化廣告變現能力,長線估值重估風險不可忽視。</div> </div> </div> </div> <div class="impact-micro-card border-purple-500/20 bg-purple-950/10 rounded-xl p-3.5 sm:p-4 flex flex-col justify-between"> <div> <div class="flex items-center gap-2 mb-2 pb-2 border-b border-white/5"> <span class="text-base">🛒</span> <span class="text-xs font-bold text-purple-400 tracking-wider">民眾與社會</span> </div> <div> <div class="leading-[1.75] text-[13px] sm:text-[13.5px] text-gray-300 font-normal">對終端聽眾而言,<mark class="marker-cyan">本素材空缺事件意味著消費者在搜尋特定節目片段時,將面臨「<span class="marker-cyan font-medium">標題看似命中、點入卻毫無內容</span>」的體驗落差</mark>。</div> </div> </div> </div> </div> </section> <!-- 🛡️ 國際制裁與實體管制警報 (OpenSanctions & Export Control Alert) --> <!-- 🚢 聯合國商品貿易戰略貿易流向與依賴度 (UN Comtrade Strategic Commodity Flow) --> <!-- 4. 歷史借鏡與未來展望 --> <section class="insight-section future-outlook animate-fade-in-up stagger-3 mb-8 sm:mb-10" id="section-future-outlook"> <div class="insight-label flex items-center gap-2" style="color: #8b5cf6;"> <span class="text-base">🔮</span> <span class="font-bold tracking-wider text-xs sm:text-sm">歷史借鏡與未來展望</span> </div> <div class="insight-content-box bg-dark-900/50 p-3.5 sm:p-7 rounded-2xl border border-white/5 shadow-lg"> <p class="leading-[1.95] tracking-wide mb-6 last:mb-0 text-[15px] sm:text-[16px] text-gray-200">比對過去十年媒體內容數位化的重大轉折,例如 2014 蘋果 Podcasts 平台開放第三方託管、2020 Spotify 大舉進軍 Podcast 領域,本案所揭示的「<span class="marker-cyan font-medium">內容空訊號</span>」問題將在 AI 生成內容(AIGC)浪潮下被進一步放大。<mark class="marker-cyan">以下預測未來三種可能情境</mark>:</p> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">1.</span><div class="flex-1"><mark class="marker-cyan">基準情境(機率約 <span class="intel-metric">55%</span>)</mark>:主流廣播與 Podcast 平台在 2026 至 2028 年間陸續導入 <mark class="marker-cyan">AI 輔助 metadata 補完與內容摘要自動化系統</mark>,透過 LLM 為每一集節目生成結構化摘要、章節標記與關鍵字標籤。此情境下,「<span class="marker-cyan font-medium">空訊號內容</span>」比例將逐步下降至 <span class="intel-metric">5%</span> 以下,消費者搜尋體驗顯著改善,但中小型電台因成本壓力將更依賴平台預設的 AI 摘要,內容同質化風險上升。</div></div></div> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">2.</span><div class="flex-1"><mark class="marker-cyan">極端風險情境(機率約 <span class="intel-metric">20%</span>)</mark>:若廣播產業持續忽視內容基建,<mark class="marker-cyan">「<span class="marker-cyan font-medium">標題農場</span>」與「<span class="marker-cyan font-medium">AI 殘缺內容</span>」將在 2027 年前後形成規模化的資訊污染事件</mark>,迫使美國 FCC 或各州總檢察長介入調查,可能衍生新一輪的媒體內容監管立法,對 iHeartMedia 等巨頭的營運成本帶來結構性衝擊。</div></div></div> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">3.</span><div class="flex-1"><mark class="marker-cyan">轉折突破情境(機率約 <span class="intel-metric">25%</span>)</mark>:具備技術前瞻性的新創公司(例如 Podcastle、Descript 等)將推出 <mark class="marker-cyan">「<span class="marker-cyan font-medium">端到端 Podcast 內容治理 SaaS</span>」</mark>,從錄音、轉錄、摘要到分發 metadata 提供一站式服務,徹底重塑廣播產業的價值鏈分配,並吸引創投資金大規模湧入。</div></div></div> </div> </section> <!-- Google AdSense 文章原生廣告 (歷史借鏡與未來展望下方) --> <div class="in-article-ad-container my-6 sm:my-8 text-center overflow-hidden rounded-xl bg-dark-900/30 border border-white/5 py-2"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1047793966496162" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-1047793966496162" data-ad-slot="1837036246"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <!-- 5. 總結與決策建議 --> <section class="insight-section animate-fade-in-up stagger-4 mb-8 sm:mb-10" style="border-color: #10b981;" id="section-strategic-takeaways"> <div class="insight-label text-accent-green flex items-center gap-2"> <span class="text-base">💡</span> <span class="font-bold tracking-wider text-xs sm:text-sm">總結與決策建議</span> </div> <div class="insight-content-box bg-emerald-950/20 p-3.5 sm:p-7 rounded-2xl border border-emerald-500/20 shadow-lg"> <p class="leading-[1.95] tracking-wide mb-6 last:mb-0 text-[15px] sm:text-[16px] text-gray-200"><mark class="marker-green">面對媒體內容數位化的結構性缺陷</mark>,相關利害關係人應採取以下具體行動:</p> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">1.</span><div class="flex-1"><mark class="marker-green">即時避險策略</mark>:內容聚合平台與 AI 訓練資料供應商應<mark class="marker-green">立即建立「<span class="marker-green font-medium">空訊號樣本</span>」過濾機制</mark>,將 metadata 不完整、內文空白的節目樣本從訓練集中剔除,避免污染模型輸出品質;同時設立人工覆核通道,處理邊界案例。</div></div></div> <div class="space-y-3.5 my-5 pl-1 sm:pl-2"><div class="flex items-start gap-2.5 text-[15px] sm:text-[16px] leading-[1.85] text-gray-200"><span class="flex-shrink-0 font-mono font-bold text-accent-cyan min-w-[1.4rem] mt-0.5 text-sm select-none">2.</span><div class="flex-1"><mark class="marker-green">中長期佈局</mark>:廣播產業應<mark class="marker-green">優先投資 metadata 治理基礎建設</mark>,包括結構化節目摘要、章節標記與多語系翻譯,以提升在 AI 搜尋引擎與語音助理生態中的能見度;投資人則可密切關注 Podcast 內容基建新創的早期投資機會,捕捉產業典範轉移帶來的紅利。</div></div></div> </div> </section> <!-- 全球蝴蝶效應傳導鏈 (4階互動演繹引擎) --> <section class="glass-card p-3.5 sm:p-7 mb-8 sm:mb-10 border border-white/10 shadow-2xl rounded-2xl animate-fade-in-up stagger-5 bg-dark-900/60" id="section-ripple-chain"> <div id="ripple-engine-6aaa25e9ab1bc" class="ripple-transmission-engine my-4 select-none"> <!-- 頂部控制列 --> <div class="flex items-center justify-between flex-wrap gap-3 pb-3 mb-4 border-b border-white/10"> <div class="flex items-center gap-2"> <span class="w-2.5 h-2.5 rounded-full bg-accent-cyan animate-ping"></span> <span class="text-xs font-bold text-gray-200 tracking-wider uppercase">蝴蝶效應連鎖傳導</span> <span class="px-2 py-0.5 text-[10px] font-mono rounded-full bg-dark-800 text-accent-cyan border border-accent-cyan/30"> 4 階連鎖 </span> </div> <div class="flex items-center gap-2"> <button type="button" class="btn-simulate-ripple px-3 py-1.5 rounded-lg bg-cyan-500/10 hover:bg-cyan-500/20 border border-cyan-500/30 text-accent-cyan text-xs font-semibold transition-all flex items-center gap-1.5 shadow-sm active:scale-95"> <span class="play-icon">▶</span> <span class="play-text">播放推演</span> </button> </div> </div> <!-- 動態 N 階節點卡片流 --> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3 relative ripple-steps-container"> <div class="ripple-step-card relative rounded-xl border border-cyan-500/40 bg-gradient-to-b from-cyan-500/20 to-blue-500/10 bg-dark-900/90 p-4 transition-all duration-300 hover:scale-[1.02] cursor-pointer flex flex-col justify-between" data-step="0"> <div> <!-- 階段頂部微標籤 --> <div class="flex items-center justify-between mb-2.5"> <span class="px-2 py-0.5 rounded-md border text-[11px] font-mono font-bold text-accent-cyan bg-cyan-950/60 border-cyan-500/30 flex items-center gap-1"> <span>⚡</span> <span>01 起因觸發</span> </span> <span class="status-dot w-2 h-2 rounded-full bg-gray-600 transition-colors"></span> </div> <!-- 核心傳導文字 --> <p class="text-xs sm:text-[13px] font-medium text-gray-200 leading-relaxed step-text"> 01 起因觸發:iHeartRadio 動態頁面渲染失敗,導致爬蟲僅擷取殘缺標題 </p> </div> <!-- 底部動態光條 --> <div class="step-progress-bar absolute bottom-0 left-0 right-0 h-[2px] bg-transparent rounded-b-xl overflow-hidden"> <div class="step-progress-fill h-full w-0 bg-accent-cyan transition-all duration-500"></div> </div> <!-- 連接光束箭頭 (非最後一項在桌機版展示) --> <div class="hidden lg:flex absolute -right-3 top-1/2 -translate-y-1/2 z-10 w-6 h-6 rounded-full bg-dark-900 border border-white/20 items-center justify-center text-[10px] text-gray-400 ripple-connector-node pointer-events-none"> ➜ </div> </div> <div class="ripple-step-card relative rounded-xl border border-blue-500/40 bg-gradient-to-b from-blue-500/20 to-indigo-500/10 bg-dark-900/90 p-4 transition-all duration-300 hover:scale-[1.02] cursor-pointer flex flex-col justify-between" data-step="1"> <div> <!-- 階段頂部微標籤 --> <div class="flex items-center justify-between mb-2.5"> <span class="px-2 py-0.5 rounded-md border text-[11px] font-mono font-bold text-blue-400 bg-blue-950/60 border-blue-500/30 flex items-center gap-1"> <span>🌊</span> <span>02 一階傳導</span> </span> <span class="status-dot w-2 h-2 rounded-full bg-gray-600 transition-colors"></span> </div> <!-- 核心傳導文字 --> <p class="text-xs sm:text-[13px] font-medium text-gray-200 leading-relaxed step-text"> 02 一階傳導:第三方內容聚合平台收錄「空訊號樣本」,污染搜尋引擎索引 </p> </div> <!-- 底部動態光條 --> <div class="step-progress-bar absolute bottom-0 left-0 right-0 h-[2px] bg-transparent rounded-b-xl overflow-hidden"> <div class="step-progress-fill h-full w-0 bg-accent-cyan transition-all duration-500"></div> </div> <!-- 連接光束箭頭 (非最後一項在桌機版展示) --> <div class="hidden lg:flex absolute -right-3 top-1/2 -translate-y-1/2 z-10 w-6 h-6 rounded-full bg-dark-900 border border-white/20 items-center justify-center text-[10px] text-gray-400 ripple-connector-node pointer-events-none"> ➜ </div> </div> <div class="ripple-step-card relative rounded-xl border border-purple-500/40 bg-gradient-to-b from-purple-500/20 to-pink-500/10 bg-dark-900/90 p-4 transition-all duration-300 hover:scale-[1.02] cursor-pointer flex flex-col justify-between" data-step="2"> <div> <!-- 階段頂部微標籤 --> <div class="flex items-center justify-between mb-2.5"> <span class="px-2 py-0.5 rounded-md border text-[11px] font-mono font-bold text-purple-400 bg-purple-950/60 border-purple-500/30 flex items-center gap-1"> <span>💥</span> <span>03 二階擴散</span> </span> <span class="status-dot w-2 h-2 rounded-full bg-gray-600 transition-colors"></span> </div> <!-- 核心傳導文字 --> <p class="text-xs sm:text-[13px] font-medium text-gray-200 leading-relaxed step-text"> 03 二階擴散:AI 訓練資料集若未過濾此類樣本,將導致模型輸出品質下滑 </p> </div> <!-- 底部動態光條 --> <div class="step-progress-bar absolute bottom-0 left-0 right-0 h-[2px] bg-transparent rounded-b-xl overflow-hidden"> <div class="step-progress-fill h-full w-0 bg-accent-cyan transition-all duration-500"></div> </div> <!-- 連接光束箭頭 (非最後一項在桌機版展示) --> <div class="hidden lg:flex absolute -right-3 top-1/2 -translate-y-1/2 z-10 w-6 h-6 rounded-full bg-dark-900 border border-white/20 items-center justify-center text-[10px] text-gray-400 ripple-connector-node pointer-events-none"> ➜ </div> </div> <div class="ripple-step-card relative rounded-xl border border-emerald-500/40 bg-gradient-to-b from-emerald-500/20 to-teal-500/10 bg-dark-900/90 p-4 transition-all duration-300 hover:scale-[1.02] cursor-pointer flex flex-col justify-between" data-step="3"> <div> <!-- 階段頂部微標籤 --> <div class="flex items-center justify-between mb-2.5"> <span class="px-2 py-0.5 rounded-md border text-[11px] font-mono font-bold text-emerald-400 bg-emerald-950/60 border-emerald-500/30 flex items-center gap-1"> <span>🌐</span> <span>04 終局影響</span> </span> <span class="status-dot w-2 h-2 rounded-full bg-gray-600 transition-colors"></span> </div> <!-- 核心傳導文字 --> <p class="text-xs sm:text-[13px] font-medium text-gray-200 leading-relaxed step-text"> 03 宏觀終局:廣播產業若持續輕忽內容基建,將在 AIGC 時代喪失內容主導權 </p> </div> <!-- 底部動態光條 --> <div class="step-progress-bar absolute bottom-0 left-0 right-0 h-[2px] bg-transparent rounded-b-xl overflow-hidden"> <div class="step-progress-fill h-full w-0 bg-accent-cyan transition-all duration-500"></div> </div> <!-- 連接光束箭頭 (非最後一項在桌機版展示) --> </div> </div> </div> <script> (function() { const root = document.getElementById('ripple-engine-6aaa25e9ab1bc'); if (!root) return; const cards = root.querySelectorAll('.ripple-step-card'); const btn = root.querySelector('.btn-simulate-ripple'); const playIcon = btn.querySelector('.play-icon'); const playText = btn.querySelector('.play-text'); let isPlaying = false; let timer = null; cards.forEach((card, idx) => { card.addEventListener('click', () => { activateStep(idx); }); }); function activateStep(idx) { cards.forEach((c, i) => { const dot = c.querySelector('.status-dot'); const fill = c.querySelector('.step-progress-fill'); if (i === idx) { c.classList.add('ring-2', 'ring-accent-cyan', 'shadow-lg', 'shadow-cyan-500/20', 'bg-dark-800'); if (dot) { dot.className = 'status-dot w-2.5 h-2.5 rounded-full bg-accent-cyan animate-ping'; } if (fill) { fill.style.width = '100%'; fill.style.backgroundColor = '#00e5ff'; } } else if (i < idx) { c.classList.remove('ring-2', 'ring-accent-cyan', 'shadow-lg', 'shadow-cyan-500/20', 'bg-dark-800'); if (dot) { dot.className = 'status-dot w-2 h-2 rounded-full bg-emerald-400'; } if (fill) { fill.style.width = '100%'; fill.style.backgroundColor = '#10b981'; } } else { c.classList.remove('ring-2', 'ring-accent-cyan', 'shadow-lg', 'shadow-cyan-500/20', 'bg-dark-800'); if (dot) { dot.className = 'status-dot w-2 h-2 rounded-full bg-gray-600'; } if (fill) { fill.style.width = '0%'; } } }); } btn.addEventListener('click', () => { if (isPlaying) { clearInterval(timer); isPlaying = false; playIcon.textContent = '▶'; playText.textContent = '啟動連鎖推演'; return; } isPlaying = true; playIcon.textContent = '⏸'; playText.textContent = '推演中...'; let current = 0; activateStep(0); timer = setInterval(() => { current++; if (current >= cards.length) { clearInterval(timer); setTimeout(() => { isPlaying = false; playIcon.textContent = '🔄'; playText.textContent = '重新推演'; }, 800); } else { activateStep(current); } }, 850); }); })(); </script> </section> <!-- 6. 跨事件因果網路圖譜 (Causal Knowledge Graph & Intel Cards) --> <section class="glass-card p-3.5 sm:p-7 mb-8 sm:mb-10 border border-cyan-500/30 shadow-2xl rounded-2xl animate-fade-in-up bg-dark-900/90 backdrop-blur-md" id="section-causal-graph"> <!-- 戰情 HUD 頂部標題列 --> <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-3 mb-4 pb-3 border-b border-white/10"> <div class="flex items-center gap-2.5"> <span class="text-xl text-cyan-400">🔗</span> <div> <h3 class="text-sm sm:text-base font-black text-white tracking-wide flex items-center gap-2"> <span>因果網路圖譜</span> <span class="px-2 py-0.5 rounded-full text-[10px] font-mono font-bold bg-cyan-950 text-cyan-400 border border-cyan-500/30"> 3 節點 </span> </h3> <p class="text-[11px] text-gray-400 font-mono mt-0.5">可拖曳節點 · 點兩下開啟文章</p> </div> </div> <!-- 關聯類型圖例與重設按鈕 --> <div class="flex items-center gap-2 flex-wrap text-[11px] font-mono"> <span class="flex items-center gap-1 text-amber-400 bg-amber-950/40 px-2 py-0.5 rounded-md border border-amber-500/20"> <span class="w-1.5 h-1.5 rounded-full bg-amber-400"></span> 起因 </span> <span class="flex items-center gap-1 text-cyan-400 bg-cyan-950/40 px-2 py-0.5 rounded-md border border-cyan-500/20"> <span class="w-1.5 h-1.5 rounded-full bg-cyan-400"></span> 影響 </span> <span class="flex items-center gap-1 text-purple-400 bg-purple-950/40 px-2 py-0.5 rounded-md border border-purple-500/20"> <span class="w-1.5 h-1.5 rounded-full bg-purple-400"></span> 後續 </span> <button onclick="if(window.activeCausalGraph) window.activeCausalGraph.resetLayout()" class="px-2 py-0.5 rounded-md bg-dark-800 hover:bg-dark-700 text-gray-300 hover:text-white border border-white/10 transition-colors" title="重設節點位置"> 🔄 重設 </button> </div> </div> <!-- Canvas 圖譜視窗 --> <div class="causal-graph-container relative rounded-xl overflow-hidden bg-dark-950 border border-white/5 shadow-inner" style="height: 380px;" id="causal-graph" data-article-id="12751"> <canvas id="causal-canvas" class="w-full h-full block"></canvas> </div> <!-- 下方因果連動情報速覽清單 --> <div class="mt-4 pt-4 border-t border-white/5"> <div class="text-xs font-bold text-gray-400 uppercase tracking-wider mb-2.5 flex items-center justify-between font-mono"> <span>📋 關聯文章</span> <span class="text-[10px] text-gray-500">點擊直接閱讀</span> </div> <div class="grid grid-cols-1 sm:grid-cols-2 gap-2.5"> <a href="/article/12794" class="group p-3 rounded-xl bg-dark-950/60 hover:bg-dark-950 border border-white/5 hover:border-cyan-500/40 transition-all flex flex-col justify-between gap-1.5 shadow-sm"> <div class="flex items-center justify-between gap-2"> <span class="px-2 py-0.5 rounded text-[10px] font-mono font-bold border text-purple-400 bg-purple-950/60 border-purple-500/30"> 後續 ➡ </span> <span class="text-[10px] font-mono text-cyan-400 font-bold">86% 關聯度</span> </div> <p class="text-xs text-gray-200 group-hover:text-cyan-300 font-bold leading-snug line-clamp-2 transition-colors"> 紐西蘭先驅報加密訊息異常:原始情報素材解析受阻 </p> <p class="text-[11px] text-gray-500 line-clamp-1 font-mono"> 同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導 </p> </a> <a href="/article/12796" class="group p-3 rounded-xl bg-dark-950/60 hover:bg-dark-950 border border-white/5 hover:border-cyan-500/40 transition-all flex flex-col justify-between gap-1.5 shadow-sm"> <div class="flex items-center justify-between gap-2"> <span class="px-2 py-0.5 rounded text-[10px] font-mono font-bold border text-cyan-400 bg-cyan-950/60 border-cyan-500/30"> 影響 ⬇ </span> <span class="text-[10px] font-mono text-cyan-400 font-bold">80% 關聯度</span> </div> <p class="text-xs text-gray-200 group-hover:text-cyan-300 font-bold leading-snug line-clamp-2 transition-colors"> 新聞自由的光環與枷鎖:皮尤民調揭示美國社會的深層撕裂 </p> <p class="text-[11px] text-gray-500 line-clamp-1 font-mono"> 同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導 </p> </a> <a href="/article/12800" class="group p-3 rounded-xl bg-dark-950/60 hover:bg-dark-950 border border-white/5 hover:border-cyan-500/40 transition-all flex flex-col justify-between gap-1.5 shadow-sm"> <div class="flex items-center justify-between gap-2"> <span class="px-2 py-0.5 rounded text-[10px] font-mono font-bold border text-amber-400 bg-amber-950/60 border-amber-500/30"> 起因 ⬆ </span> <span class="text-[10px] font-mono text-cyan-400 font-bold">74% 關聯度</span> </div> <p class="text-xs text-gray-200 group-hover:text-cyan-300 font-bold leading-snug line-clamp-2 transition-colors"> 美國西班牙裔傳統月揭幕:人口紅利與文化認同的結構性轉折 </p> <p class="text-[11px] text-gray-500 line-clamp-1 font-mono"> 同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導 </p> </a> </div> </div> </section> <!-- ⚔️ ACLED 地緣衝突與安全熱區監測 (僅在與衝突熱區/紅海/俄烏/中東/台海相關時顯示) --> <!-- 🏛️ 聖路易斯聯準會 (FRED) 總經指標與因果連動驗證 (僅在與總經/央行/利率/原油相關時顯示) --> <!-- 原始來源 --> <div class="border-t border-white/5 pt-6 mt-8"> <a href="https://kiss1023.iheart.com/featured/elvis-duran/content/2026-09-15-1014-elvis-duran-and-the-morni-james-murr-murray-on-the-truth-about-impract/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 text-xs text-gray-600 hover:text-gray-400 transition-colors"> <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"/> </svg> 閱讀原始報導 </a> </div> </article> <!-- 右側側邊欄 --> <aside class="lg:w-80 flex-shrink-0 space-y-5"> <!-- 1. 文章指標 --> <div class="glass-card p-5 border border-white/10 shadow-xl rounded-2xl bg-dark-900/80"> <div class="flex items-center justify-between pb-3 mb-3 border-b border-white/5"> <span class="text-xs font-bold text-gray-300 tracking-wider uppercase flex items-center gap-1.5"> <span>📊</span> 文章指標 </span> <span class="text-[11px] font-mono text-accent-cyan bg-cyan-950/50 px-2 py-0.5 rounded border border-cyan-500/20"> 即時數據 </span> </div> <!-- 可信度環形圖 + 規格 --> <div class="flex items-center gap-4 mb-4"> <div class="credibility-ring"> <svg viewBox="0 0 80 80" width="76" height="76"> <circle class="ring-bg" cx="38" cy="38" r="28"/> <circle class="ring-fill" cx="38" cy="38" r="28" stroke="#ef4444" stroke-dasharray="175.9" stroke-dashoffset="160.225" /> </svg> <div class="ring-score text-lg" style="color: #ef4444"> 15 </div> </div> <div class="space-y-1"> <div><span class="badge badge-unverified">🔴 待證實</span></div> <p class="text-[11px] text-gray-500 font-mono">事實查核等級</p> <div class="flex items-center gap-2 text-[11px] text-gray-400 font-mono pt-1"> <span>⏱ 約 6 分鐘</span> <span>•</span> <span>📑 2,144 字</span> </div> </div> </div> <!-- 情緒與風險指數 --> <div class="bg-dark-950/60 p-3 rounded-xl border border-white/5 space-y-1.5"> <div class="flex items-center justify-between text-xs"> <span class="text-gray-400">市場與情緒指數</span> <span class="font-mono font-bold" style="color: #38bdf8">中性/均衡 (0.00)</span> </div> <div class="sentiment-bar w-full h-1.5 bg-dark-800 rounded-full overflow-hidden"> <div class="sentiment-indicator" style="left: 50%"></div> </div> </div> <p class="text-[11px] text-gray-400 leading-relaxed border-t border-white/5 pt-3 mt-3"> 多維事實查核說明:原始素材來自 iHeartRadio 旗下地方電台 KISS 102.3 的節目頁面,惟整篇內文完全空白,無任何可供實證檢核之引言、數據或事件描述。標題中的「Impract」明顯為截斷殘字,無法還原原始議題。來源本身具備一定品牌權威性(iHeartMedia 為全美最大廣播集團),但本次素材屬於「標題可見、內容空窗」的技術性擷取失敗,不構成可供新聞分析之有效內容,依規範判定為 unverified。情報分析僅得就「內容空訊號現象本身」及其產業結構性成因進行研判。 </p> </div> <!-- 📑 2. 懸浮智慧導航目錄 (Smart Table of Contents) --> <div class="glass-card p-5 border border-cyan-500/25 rounded-2xl bg-dark-900/90 shadow-xl sticky top-20 backdrop-blur-md z-30 hidden lg:block" id="article-toc-container"> <div class="flex items-center justify-between pb-2.5 mb-3 border-b border-white/10"> <div class="flex items-center gap-2"> <span class="text-base text-cyan-400">📑</span> <h3 class="text-xs font-bold text-white uppercase tracking-wider">情報章節目錄</h3> </div> <div class="flex items-center gap-1 text-[11px] font-mono font-bold text-cyan-400 bg-cyan-950/60 px-2 py-0.5 rounded border border-cyan-500/20"> <span id="toc-progress-percent">0%</span> </div> </div> <!-- 微光滾動進度條 --> <div class="w-full h-1 bg-dark-950 rounded-full overflow-hidden border border-white/5 mb-3"> <div id="toc-progress-bar" class="h-full bg-gradient-to-r from-cyan-400 via-blue-500 to-purple-500 rounded-full w-0 transition-all duration-150"></div> </div> <!-- 目錄項目清單 --> <nav class="space-y-1 font-sans text-xs max-h-[calc(100vh-250px)] overflow-y-auto pr-1"> <a href="#section-core-fact" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">⚡</span> <span class="truncate flex-1 font-medium">核心事實與事件全貌</span> </a> <a href="#section-core-conflict" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">🔥</span> <span class="truncate flex-1 font-medium">背景脈絡與利益角力</span> </a> <a href="#section-impact-matrix" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">🎯</span> <span class="truncate flex-1 font-medium">各界影響深度評估</span> </a> <a href="#section-future-outlook" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">🔮</span> <span class="truncate flex-1 font-medium">歷史借鏡與未來展望</span> </a> <a href="#section-strategic-takeaways" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">💡</span> <span class="truncate flex-1 font-medium">總結與決策建議</span> </a> <a href="#section-ripple-chain" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">🦋</span> <span class="truncate flex-1 font-medium">蝴蝶效應演繹鏈</span> </a> <a href="#section-causal-graph" class="toc-nav-item toc-nav-link group"> <span class="toc-icon text-xs flex-shrink-0">🔗</span> <span class="truncate flex-1 font-medium">跨事件因果網路圖譜</span> </a> </nav> </div> <!-- 📈 2. 72H 媒體聲量走勢 --> <div class="glass-card p-5 border border-cyan-500/20 rounded-2xl bg-dark-900/80"> <div class="flex items-center justify-between mb-2"> <h3 class="text-xs font-bold text-white uppercase tracking-wider flex items-center gap-1.5"> <span>📈</span> 72H 媒體聲量走勢 </h3> <span class="text-[10px] font-mono text-cyan-400">全球監控</span> </div> <p class="text-[11px] text-gray-400 mb-3 leading-relaxed"> 統計全球 65 種語言報導聲量(青)與地緣緊張度(紫)。 </p> <div class="relative w-full h-40"> <canvas id="gdelt-timeline-chart"></canvas> </div> </div> <!-- 🕵️‍♂️ 3. 原文修訂追蹤 --> <!-- 4. 關聯事件 --> <div class="glass-card p-5 border border-white/10 rounded-2xl bg-dark-900/80"> <h3 class="text-xs font-bold text-gray-300 uppercase tracking-wider mb-3 flex items-center gap-1.5"> <span>🔗</span> 關聯事件 </h3> <div class="space-y-2.5"> <a href="/article/12794" class="block group p-2.5 rounded-xl bg-dark-950/60 border border-white/5 hover:border-accent-cyan/40 hover:bg-dark-800/80 transition-all"> <div class="flex items-center gap-2 mb-1.5"> <span class="text-[10px] font-mono font-bold px-1.5 py-0.5 rounded border text-purple-400 bg-purple-950/50 border-purple-500/30"> ➡ 後續 </span> </div> <p class="text-xs font-medium text-gray-300 group-hover:text-accent-cyan transition-colors line-clamp-2 leading-snug"> 紐西蘭先驅報加密訊息異常:原始情報素材解析受阻 </p> <p class="text-[11px] text-gray-500 mt-1 line-clamp-1">同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導</p> </a> <a href="/article/12796" class="block group p-2.5 rounded-xl bg-dark-950/60 border border-white/5 hover:border-accent-cyan/40 hover:bg-dark-800/80 transition-all"> <div class="flex items-center gap-2 mb-1.5"> <span class="text-[10px] font-mono font-bold px-1.5 py-0.5 rounded border text-accent-cyan bg-cyan-950/50 border-cyan-500/30"> ⬇ 影響 </span> </div> <p class="text-xs font-medium text-gray-300 group-hover:text-accent-cyan transition-colors line-clamp-2 leading-snug"> 新聞自由的光環與枷鎖:皮尤民調揭示美國社會的深層撕裂 </p> <p class="text-[11px] text-gray-500 mt-1 line-clamp-1">同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導</p> </a> <a href="/article/12800" class="block group p-2.5 rounded-xl bg-dark-950/60 border border-white/5 hover:border-accent-cyan/40 hover:bg-dark-800/80 transition-all"> <div class="flex items-center gap-2 mb-1.5"> <span class="text-[10px] font-mono font-bold px-1.5 py-0.5 rounded border text-rose-400 bg-rose-950/50 border-rose-500/30"> ⬆ 起因 </span> </div> <p class="text-xs font-medium text-gray-300 group-hover:text-accent-cyan transition-colors line-clamp-2 leading-snug"> 美國西班牙裔傳統月揭幕:人口紅利與文化認同的結構性轉折 </p> <p class="text-[11px] text-gray-500 mt-1 line-clamp-1">同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導</p> </a> </div> </div> <!-- 5. 相關報導 --> <div class="glass-card p-5 border border-white/10 rounded-2xl bg-dark-900/80"> <h3 class="text-xs font-bold text-gray-300 uppercase tracking-wider mb-3 flex items-center gap-1.5"> <span>📡</span> 相關報導 </h3> <div class="space-y-3"> <a href="/article/12794" class="flex items-center gap-3 group"> <div class="w-14 h-14 rounded-lg overflow-hidden flex-shrink-0 bg-dark-950 border border-white/5"> <img src="https://images.unsplash.com/photo-1511632765486-a01980e01a18?auto=format&fit=crop&w=1200&q=80" alt="" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500" loading="lazy" referrerpolicy="no-referrer" onerror="this.src='https://images.unsplash.com/photo-1511632765486-a01980e01a18?auto=format&fit=crop&w=1200&q=80'"> </div> <div class="min-w-0 flex-1"> <p class="text-xs text-gray-300 group-hover:text-accent-cyan transition-colors line-clamp-2 leading-snug"> 紐西蘭先驅報加密訊息異常:原始情報素材解析受阻 </p> <span class="text-[10px] text-gray-500 font-mono mt-0.5 block">09/15</span> </div> </a> <a href="/article/12796" class="flex items-center gap-3 group"> <div class="w-14 h-14 rounded-lg overflow-hidden flex-shrink-0 bg-dark-950 border border-white/5"> <img src="https://images.unsplash.com/photo-1444723121867-7a241cacace9?auto=format&fit=crop&w=1200&q=80" alt="" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500" loading="lazy" referrerpolicy="no-referrer" onerror="this.src='https://images.unsplash.com/photo-1444723121867-7a241cacace9?auto=format&fit=crop&w=1200&q=80'"> </div> <div class="min-w-0 flex-1"> <p class="text-xs text-gray-300 group-hover:text-accent-cyan transition-colors line-clamp-2 leading-snug"> 新聞自由的光環與枷鎖:皮尤民調揭示美國社會的深層撕裂 </p> <span class="text-[10px] text-gray-500 font-mono mt-0.5 block">09/15</span> </div> </a> <a href="/article/12800" class="flex items-center gap-3 group"> <div class="w-14 h-14 rounded-lg overflow-hidden flex-shrink-0 bg-dark-950 border border-white/5"> <img src="https://images.unsplash.com/photo-1444723121867-7a241cacace9?auto=format&fit=crop&w=1200&q=80" alt="" class="w-full h-full object-cover group-hover:scale-110 transition-transform duration-500" loading="lazy" referrerpolicy="no-referrer" onerror="this.src='https://images.unsplash.com/photo-1444723121867-7a241cacace9?auto=format&fit=crop&w=1200&q=80'"> </div> <div class="min-w-0 flex-1"> <p class="text-xs text-gray-300 group-hover:text-accent-cyan transition-colors line-clamp-2 leading-snug"> 美國西班牙裔傳統月揭幕:人口紅利與文化認同的結構性轉折 </p> <span class="text-[10px] text-gray-500 font-mono mt-0.5 block">09/15</span> </div> </a> </div> </div> <!-- 6. 主題標籤 --> <div class="glass-card p-5 border border-white/10 rounded-2xl bg-dark-900/80"> <h3 class="text-xs font-bold text-gray-400 uppercase tracking-wider mb-3 flex items-center gap-1.5"> <span>🏷️</span> 主題標籤 </h3> <div class="flex flex-wrap gap-1.5"> <button data-tag="媒體內容鑑識" class="subtag-chip px-2.5 py-1 rounded-md bg-dark-950/80 border border-white/5 text-gray-400 hover:text-accent-cyan hover:border-accent-cyan/30 text-xs transition-all"> #媒體內容鑑識 </button> <button data-tag="娛樂廣播產業" class="subtag-chip px-2.5 py-1 rounded-md bg-dark-950/80 border border-white/5 text-gray-400 hover:text-accent-cyan hover:border-accent-cyan/30 text-xs transition-all"> #娛樂廣播產業 </button> <button data-tag="資訊空訊號分析" class="subtag-chip px-2.5 py-1 rounded-md bg-dark-950/80 border border-white/5 text-gray-400 hover:text-accent-cyan hover:border-accent-cyan/30 text-xs transition-all"> #資訊空訊號分析 </button> <button data-tag="內容農場風險" class="subtag-chip px-2.5 py-1 rounded-md bg-dark-950/80 border border-white/5 text-gray-400 hover:text-accent-cyan hover:border-accent-cyan/30 text-xs transition-all"> #內容農場風險 </button> </div> </div> <!-- 7. Google AdSense 原生資訊流廣告 (側邊欄最下方) --> <div class="glass-card p-4 border border-white/10 rounded-2xl bg-dark-900/80 overflow-hidden text-center shadow-xl"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1047793966496162" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6m+ee+1h-5u+8t" data-ad-client="ca-pub-1047793966496162" data-ad-slot="3085809781"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </aside> </div> </div> <!-- 📱 手機版懸浮快速目錄按鈕 (Mobile Floating TOC FAB) --> <div class="fixed bottom-20 right-4 z-40 lg:hidden"> <button onclick="toggleMobileTocDrawer()" class="flex items-center gap-2 px-3.5 py-2.5 rounded-full bg-dark-900/95 text-cyan-300 border border-cyan-500/40 shadow-xl shadow-cyan-950/80 backdrop-blur-md active:scale-95 transition-all text-xs font-bold font-mono"> <span class="text-sm">📑</span> <span>章節目錄</span> </button> </div> <!-- 手機版目錄抽屜 (Mobile TOC Drawer Bottom Sheet) --> <div id="mobile-toc-drawer" class="fixed inset-0 z-50 bg-black/70 backdrop-blur-sm hidden flex items-end justify-center lg:hidden" onclick="if(event.target === this) toggleMobileTocDrawer()"> <div class="bg-dark-900 border-t border-cyan-500/30 rounded-t-3xl p-5 w-full max-w-lg max-h-[75vh] flex flex-col shadow-2xl animate-fade-in-up"> <div class="flex items-center justify-between pb-3 border-b border-white/10 mb-3"> <div class="flex items-center gap-2 font-bold text-white text-sm"> <span>📑</span> <span>情報章節目錄</span> </div> <button onclick="toggleMobileTocDrawer()" class="p-1 rounded-lg text-gray-400 hover:text-white bg-dark-950 border border-white/10 text-xs">✕</button> </div> <div class="overflow-y-auto space-y-1.5 flex-1 pr-1 font-sans"> <a href="#section-core-fact" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">⚡</span> <span class="font-medium truncate">核心事實與事件全貌</span> </a> <a href="#section-core-conflict" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">🔥</span> <span class="font-medium truncate">背景脈絡與利益角力</span> </a> <a href="#section-impact-matrix" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">🎯</span> <span class="font-medium truncate">各界影響深度評估</span> </a> <a href="#section-future-outlook" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">🔮</span> <span class="font-medium truncate">歷史借鏡與未來展望</span> </a> <a href="#section-strategic-takeaways" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">💡</span> <span class="font-medium truncate">總結與決策建議</span> </a> <a href="#section-ripple-chain" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">🦋</span> <span class="font-medium truncate">蝴蝶效應演繹鏈</span> </a> <a href="#section-causal-graph" class="toc-nav-item toc-nav-link p-2.5 rounded-xl bg-dark-950/60 border border-white/5 flex items-center gap-2.5 text-xs text-gray-200"> <span class="text-sm flex-shrink-0">🔗</span> <span class="font-medium truncate">跨事件因果網路圖譜</span> </a> </div> </div> </div> <script> function copyText(text, el) { if (!text) return; const showCopiedFeedback = () => { if (!el) return; const btn = el.querySelector('.copy-btn'); if (btn) { const old = btn.textContent; btn.textContent = '✓ 已複製'; btn.classList.add('text-emerald-400', 'font-bold'); setTimeout(() => { btn.textContent = old; btn.classList.remove('text-emerald-400', 'font-bold'); }, 1800); } // 卡片微綠光反饋 el.classList.add('ring-1', 'ring-emerald-500/50', 'bg-emerald-950/20'); setTimeout(() => { el.classList.remove('ring-1', 'ring-emerald-500/50', 'bg-emerald-950/20'); }, 1800); }; // 1. 優先嘗試 Modern Clipboard API (HTTPS / Secure Context) if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(text).then(() => { showCopiedFeedback(); }).catch(() => { fallbackCopy(text, showCopiedFeedback); }); } else { // 2. HTTP 或非安全上下文:使用 textarea + execCommand 備援方案 fallbackCopy(text, showCopiedFeedback); } } function fallbackCopy(text, callback) { const ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.top = '-9999px'; ta.style.left = '-9999px'; ta.style.opacity = '0'; document.body.appendChild(ta); ta.focus(); ta.select(); try { const successful = document.execCommand('copy'); if (successful && typeof callback === 'function') { callback(); } } catch (err) { console.error('Fallback copy error:', err); } document.body.removeChild(ta); } window.copyText = copyText; // 📈 GDELT DOC 2.0 72H 聲量與情緒曲線圖渲染 document.addEventListener('DOMContentLoaded', async () => { const canvas = document.getElementById('gdelt-timeline-chart'); if (!canvas || typeof Chart === 'undefined') return; try { const query = "\u5a92\u9ad4\u5167\u5bb9\u9451\u8b58"; const res = await fetch(`/api/gdelt_analytics.php?action=timeline&query=${encodeURIComponent(query)}`); const json = await res.json(); if (!json.success || !json.volume) return; const labels = json.volume.map(item => item.date ? item.date.slice(5, 16) : ''); const volData = json.volume.map(item => item.value || 0); const toneData = (json.tone || []).map(item => item.value || 0); new Chart(canvas, { type: 'line', data: { labels: labels, datasets: [ { label: '全球報導聲量', data: volData, borderColor: '#00d4ff', backgroundColor: 'rgba(0, 212, 255, 0.1)', borderWidth: 2, tension: 0.35, fill: true, pointRadius: 0, pointHoverRadius: 4, yAxisID: 'y', }, { label: '情緒張力指數', data: toneData, borderColor: '#a855f7', borderWidth: 1.8, borderDash: [3, 3], tension: 0.35, fill: false, pointRadius: 0, pointHoverRadius: 4, yAxisID: 'y1', } ] }, options: { responsive: true, maintainAspectRatio: false, interaction: { mode: 'index', intersect: false }, plugins: { legend: { display: true, position: 'top', labels: { color: '#94a3b8', font: { size: 10, family: 'JetBrains Mono' }, boxWidth: 10 } }, tooltip: { backgroundColor: 'rgba(13, 17, 23, 0.95)', titleColor: '#ffffff', bodyColor: '#e2e8f0', borderColor: 'rgba(0, 212, 255, 0.3)', borderWidth: 1, padding: 8, } }, scales: { x: { grid: { display: false }, ticks: { color: '#64748b', font: { size: 9, family: 'JetBrains Mono' }, maxTicksLimit: 6 } }, y: { position: 'left', grid: { color: 'rgba(255, 255, 255, 0.05)' }, ticks: { color: '#00d4ff', font: { size: 9, family: 'JetBrains Mono' }, maxTicksLimit: 4 } }, y1: { position: 'right', grid: { display: false }, ticks: { color: '#a855f7', font: { size: 9, family: 'JetBrains Mono' }, maxTicksLimit: 4 } } } } }); } catch (err) { console.error('GDELT 走勢圖載入異常', err); } // 🏛️ 聖路易斯聯準會 (FRED) 總經時間序列折線圖渲染 const fredCanvas = document.getElementById('fred-macro-chart'); if (fredCanvas && typeof Chart !== 'undefined') { try { const seriesId = fredCanvas.dataset.seriesId || 'T10Y2Y'; const res = await fetch(`/api/macro_analytics.php?series=${encodeURIComponent(seriesId)}`); const json = await res.json(); if (json.success && json.series && json.series.data) { const sData = json.series.data; const labels = sData.map(d => d.date ? d.date.slice(5) : ''); const values = sData.map(d => d.value || 0); new Chart(fredCanvas, { type: 'line', data: { labels: labels, datasets: [ { label: json.series.indicator?.name || 'FRED 指標', data: values, borderColor: '#a855f7', backgroundColor: 'rgba(168, 85, 247, 0.12)', borderWidth: 2, tension: 0.3, fill: true, pointRadius: 0, pointHoverRadius: 5, } ] }, options: { responsive: true, maintainAspectRatio: false, interaction: { mode: 'index', intersect: false }, plugins: { legend: { display: false }, tooltip: { backgroundColor: 'rgba(13, 17, 23, 0.95)', titleColor: '#ffffff', bodyColor: '#e2e8f0', borderColor: 'rgba(168, 85, 247, 0.4)', borderWidth: 1, padding: 8, callbacks: { label: function(ctx) { return `${ctx.dataset.label}: ${ctx.raw} ${json.series.indicator?.unit || ''}`; } } } }, scales: { x: { grid: { display: false }, ticks: { color: '#64748b', font: { size: 9, family: 'JetBrains Mono' }, maxTicksLimit: 6 } }, y: { grid: { color: 'rgba(255, 255, 255, 0.05)' }, ticks: { color: '#c084fc', font: { size: 9, family: 'JetBrains Mono' }, maxTicksLimit: 4 } } } } }); } } catch (err) { console.error('FRED 總經圖載入異常', err); } } }); </script> <!-- 載入 Chart.js 核心庫 --> <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script> </main> <!-- 智庫級專業 Footer --> <footer class="border-t border-white/10 bg-dark-950/90 text-xs text-gray-400 mt-12"> <div class="max-w-7xl mx-auto px-4 sm:px-6 py-12"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 mb-8 pb-8 border-b border-white/5"> <!-- 欄位 1: 品牌定位 --> <div class="space-y-3"> <div class="flex items-center gap-2"> <span class="text-base font-black text-white font-brand">AHAN</span> <span class="text-xs text-gray-300 font-bold">格點全球</span> </div> <p class="text-[11px] text-gray-400 leading-relaxed font-mono"> <strong class="text-cyan-300 font-bold block mb-1">Advanced Heuristic Analytics Network</strong> 以全球格點為網,網羅牽動未來的地緣脈動。基於開源全球知識圖譜,AI 深度解構地緣政治、外溢衝擊與因果演進。 </p> <div class="flex items-center gap-2 text-[11px] text-emerald-400 font-mono pt-1"> <span class="w-2 h-2 rounded-full bg-emerald-400 animate-pulse"></span> <span>感知節點:GDELT 2.0 GKG LIVE</span> </div> </div> <!-- 欄位 2: 情報分析體系 --> <div class="space-y-2.5"> <h4 class="text-xs font-bold text-gray-200 tracking-wider">情報分析體系</h4> <ul class="space-y-1.5 text-[11px] text-gray-400"> <li>• 四步結構化洞察(事實還原與利益角力)</li> <li>• N 階蝴蝶效應連鎖傳導推演</li> <li>• 跨領域事件因果同盟圖譜</li> <li>• 各界利害關係人衝擊與情境因應矩陣</li> </ul> </div> <!-- 欄位 3: 數據源與標準 --> <div class="space-y-2.5"> <h4 class="text-xs font-bold text-gray-200 tracking-wider">數據源與指標</h4> <ul class="space-y-1.5 text-[11px] text-gray-400"> <li>• GDELT 全球事件知識圖譜</li> <li>• 聖路易聯準會 (FRED) 總經大數據</li> <li>• OpenSanctions 國際制裁與實體清單</li> <li>• 聯合國商品貿易統計庫 (UN Comtrade)</li> <li>• ACLED 全球武裝衝突與安全事件雷達</li> </ul> </div> <!-- 欄位 4: 規章與政策 --> <div class="space-y-2.5"> <h4 class="text-xs font-bold text-gray-200 tracking-wider">規範與政策</h4> <ul class="space-y-1.5 text-[11px] text-gray-400"> <li> <a href="/about" class="hover:text-cyan-300 transition-colors flex items-center gap-1.5"> <span>🌐</span> 關於格點全球 </a> </li> <li> <a href="/disclaimer" class="hover:text-cyan-300 transition-colors flex items-center gap-1.5"> <span>⚖️</span> 免責聲明 </a> </li> <li> <a href="/terms" class="hover:text-cyan-300 transition-colors flex items-center gap-1.5"> <span>📜</span> 服務條款 </a> </li> <li> <a href="/privacy" class="hover:text-cyan-300 transition-colors flex items-center gap-1.5"> <span>🛡️</span> 隱私權政策 </a> </li> </ul> <div class="pt-1"> <a href="/admin" class="inline-flex items-center gap-1 text-gray-400 hover:text-cyan-300 hover:underline text-[11px]"> <span>🔒 管理員登入 →</span> </a> </div> </div> </div> <!-- 底層版權與聲明 --> <div class="flex flex-col md:flex-row items-center justify-between gap-3 text-[11px] text-gray-500 font-mono text-center md:text-left"> <p>© 2026 AHAN 格點全球 (Advanced Heuristic Analytics Network). All Rights Reserved. 開源情報分析平台。</p> <div class="flex items-center gap-3 sm:gap-4 flex-wrap justify-center"> <a href="/about" class="hover:text-cyan-300 transition-colors">關於本站</a> <span>•</span> <a href="/disclaimer" class="hover:text-cyan-300 transition-colors">免責聲明</a> <span>•</span> <a href="/terms" class="hover:text-cyan-300 transition-colors">服務條款</a> <span>•</span> <a href="/privacy" class="hover:text-cyan-300 transition-colors">隱私權政策</a> <span>•</span> <a href="/sitemap.xml" target="_blank" class="text-gray-500 hover:text-cyan-400 transition-colors">🗺️ Sitemap</a> </div> </div> </div> </footer> <!-- 📱 手機專屬底部戰情導覽列 (Mobile Bottom Nav Bar) --> <div class="md:hidden fixed bottom-0 left-0 right-0 z-50 bg-dark-950/92 backdrop-blur-xl border-t border-white/10 px-2 py-1.5 pb-[max(0.5rem,env(safe-area-inset-bottom))] shadow-2xl flex items-center justify-around text-[10px] font-mono"> <a href="/" class="flex flex-col items-center gap-0.5 py-1 px-3 rounded-xl text-gray-400 hover:text-white"> <span class="text-base">🏠</span> <span>首頁</span> </a> <a href="/map" class="flex flex-col items-center gap-0.5 py-1 px-3 rounded-xl text-gray-400 hover:text-white"> <span class="text-base">🗺️</span> <span>地圖</span> </a> <button onclick="focusMobileSearch()" class="flex flex-col items-center gap-0.5 py-1 px-3 rounded-xl text-gray-400 hover:text-white"> <span class="text-base">🔍</span> <span>搜尋</span> </button> <button id="pwa-mobile-install-btn" onclick="triggerPwaInstall()" class="hidden flex flex-col items-center gap-0.5 py-1 px-3 rounded-xl text-cyan-300 bg-cyan-500/10 border border-cyan-500/30 animate-pulse"> <span class="text-base">📥</span> <span>安裝 App</span> </button> <a href="/admin" class="flex flex-col items-center gap-0.5 py-1 px-3 rounded-xl text-gray-400 hover:text-cyan-300" title="管理員登入"> <span class="text-base">🔒</span> <span>登入</span> </a> </div> <!-- 📥 PWA 專屬安裝引導彈窗 (PWA Install Toast / Modal) --> <div id="pwa-install-banner" class="hidden fixed bottom-16 sm:bottom-6 left-4 right-4 sm:left-auto sm:right-6 sm:w-96 z-50 glass-card p-4 border border-cyan-500/40 rounded-2xl bg-dark-900/95 shadow-2xl shadow-cyan-950/60 backdrop-blur-xl animate-fade-in-up"> <div class="flex items-start gap-3"> <div class="w-10 h-10 rounded-xl bg-dark-800 border border-cyan-500/40 flex items-center justify-center text-cyan-400 text-lg flex-shrink-0 shadow-lg shadow-cyan-500/20"> 🌐 </div> <div class="flex-1 min-w-0"> <h4 class="text-xs font-bold text-white flex items-center gap-1.5 mb-0.5"> <span>安裝「格點全球」App</span> <span class="text-[9px] font-mono px-1.5 py-0.2 rounded bg-cyan-950 text-cyan-400 border border-cyan-500/30">PWA</span> </h4> <p class="text-[11px] text-gray-400 leading-relaxed mb-3">享受一鍵開啟、即時情報推播與無網路離線閱讀體驗。</p> <div class="flex items-center gap-2"> <button onclick="triggerPwaInstall()" class="px-3.5 py-1.5 rounded-xl bg-gradient-to-r from-cyan-500 to-blue-600 text-dark-950 font-bold text-xs shadow-lg shadow-cyan-500/30 hover:scale-105 active:scale-95 transition-all"> 立即安裝 </button> <button onclick="dismissPwaBanner()" class="px-3 py-1.5 rounded-xl bg-dark-800 text-gray-400 hover:text-white text-xs transition-colors"> 稍後再說 </button> </div> </div> <button onclick="dismissPwaBanner()" class="text-gray-500 hover:text-white text-sm">✕</button> </div> </div> <!-- JavaScript (With Cache Busting) --> <script src="/assets/js/app.js?v=1788365166"></script> <script src="/assets/js/causal_graph.js?v=1788054210"></script> <!-- 📱 PWA Service Worker 註冊與安裝管理 --> <script> let deferredPrompt = null; // 1. 註冊 Service Worker if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/sw.js') .then((reg) => { console.log('GD-GRID PWA Service Worker 註冊成功 [Scope]:', reg.scope); }) .catch((err) => { console.error('Service Worker 註冊失敗:', err); }); }); } // 2. 監聽 PWA 可安裝事件 (beforeinstallprompt) window.addEventListener('beforeinstallprompt', (e) => { e.preventDefault(); deferredPrompt = e; // 顯示手機底部導覽列上的安裝按鈕與浮動橫幅 const mobileInstallBtn = document.getElementById('pwa-mobile-install-btn'); if (mobileInstallBtn) mobileInstallBtn.classList.remove('hidden'); const dismissed = localStorage.getItem('gd_pwa_dismissed'); if (!dismissed) { setTimeout(() => { const banner = document.getElementById('pwa-install-banner'); if (banner) banner.classList.remove('hidden'); }, 3000); } }); // 3. 觸發安裝提示 async function triggerPwaInstall() { if (!deferredPrompt) { // iOS Safari 提示引導 const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; if (isIos) { alert('📱 iOS 安裝方式:\n請點擊 Safari 底部「分享」按鈕 ➔ 選擇「加入主畫面 (+ Add to Home Screen)」即可完成安裝!'); } else { alert('您的瀏覽器已安裝或可在網址列右上角點擊安裝圖示。'); } return; } deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; console.log('PWA 安裝選擇結果:', outcome); deferredPrompt = null; dismissPwaBanner(); } function dismissPwaBanner() { const banner = document.getElementById('pwa-install-banner'); if (banner) banner.classList.add('hidden'); localStorage.setItem('gd_pwa_dismissed', 'true'); } function focusMobileSearch() { const input = document.getElementById('search-input'); if (input) { window.scrollTo({ top: 0, behavior: 'smooth' }); setTimeout(() => input.focus(), 300); } } </script> </body> </html>