AHAN // ADVANCED HEURISTIC ANALYTICS NETWORK

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

65 語系多源同步 NODE LIVE

AI 深度運算解析中...

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

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

⚡ 智庫深度能力

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

AHAN v2.0 • 國際情報智庫

無實質情報內容:標題與內文皆為占位符
文化社會

無實質情報內容:標題與內文皆為占位符

#桌遊文化 #龍與地下城 #DND #休閒娛樂
就緒
聲線:
倍速:
字級:
⚡ 核心事實

本次提交之原始素材僅顯示「Dnd Campaign 2026 09 27」此一極簡標題字串,內文區塊為完全空白,並未提供任何具備實質敘事的事件描述、人物指涉、時空背景、數據佐證或戰略意涵。

這份素材實質上等同於一個空的內容容器,無法從中萃取任何可供分析的新聞主體、因果鏈條或政策走向。 標題中所提及的「Dnd」通常為桌遊經典《龍與地下城》(Dungeons & Dragons)之英文縮寫,而「Campaign」在該文化脈絡中意指遊戲主持人所設計的一段冒險劇情,「2026 09 27」則可能為預定進行該活動的日期。

然而,在缺乏任何描述性段落、引述來源或組織主體的情況下,本次素材不具備構成國際情報調查報導之最低資訊密度。 從情報分析的角度視之,這份原始資料的資訊熵(information entropy)趨近於零,無法支撐任何嚴肅的因果推論或趨勢研判。

🧭 背景脈絡與深層解析

本素材之根本問題在於「內容空缺」本身。當原始新聞僅提供一個無實質內文的標題時,情報分析者必須回頭檢視資訊生產鏈上游的三個可能成因:

一、
素材抓取管線的技術性失靈:自動化爬蟲系統可能在擷取網頁內容時遭遇動態渲染失敗、登入牆阻擋或 JavaScript 載入逾時,導致僅抓到 `` 標籤而未獲取內文。這在 HamletHub 等地方社群平台的新聞索引頁中相當常見,<mark class="marker-amber">因為該類網站常將活動日曆、社群貼文與新聞稿混合編列</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-sans font-bold text-accent-cyan mr-1.5 mt-0.5 text-sm select-none">二、</span><div class="flex-1"><mark class="marker-amber">原始來源即為低資訊密度的占位紀錄</mark>:某些平台在建立活動頁面時,會先用標題占位,內文留待主辦方後續補充填寫。此種情況下,<mark class="marker-amber">標題本身並非新聞,而是尚未成形的「<span class="marker-amber font-medium">活動預訂欄位</span>」</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-sans font-bold text-accent-cyan mr-1.5 mt-0.5 text-sm select-none">三、</span><div class="flex-1"><mark class="marker-amber">資訊編輯流程的人為疏漏</mark>:亦可能是內容農場(content farm)在批量生成頁面時,未完成自動填充即提前發布。</div></div></div> <p class="leading-[1.95] tracking-wide mb-6 last:mb-0 text-[15px] sm:text-[16px] text-gray-200">基於上述判斷,<mark class="marker-amber">此事件本質上屬於「<span class="marker-amber font-medium">資訊基礎設施層級的技術或行政疏失</span>」,並不存在任何實質的利益博弈、政商角力或地緣衝突可供分析。</mark> 若強行從「<span class="marker-amber font-medium">龍與地下城桌遊產業</span>」的角度延伸探討,雖可談論 TSR 與 Wizards of the Coast 的品牌授權演變、《開放遊戲授權》(OGL)爭議如何重塑全球桌遊創作者生態,但這些論述將完全脫離原始素材所能支撐的範圍,屬於分析者的主觀投射而非情報重構。</p> <p class="leading-[1.95] tracking-wide mb-6 last:mb-0 text-[15px] sm:text-[16px] text-gray-200"><mark class="marker-amber">因此,本段落選擇忠實呈現素材空缺的事實,並回頭檢視資訊空缺本身的成因,而非編造一個不存在的衝突敘事。</mark> 這是情報分析倫理中的基本紀律——寧可承認無知,也不可以無據推論。</p> </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">對技術架構或供應鏈無任何可識別的衝擊</mark>。唯一值得技術人員關注的,是網頁爬蟲與內容萃取管線在面對低結構化、低資訊密度頁面時的容錯設計議題。</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">不構成任何可進行估值重估的訊號</mark>。市場上並未因本次內容出現任何可觀察的價格波動、交易量異常或法人行為改變,不具備投資決策參考價值。</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">對終端定價、生活成本或就業市場均無實質影響</mark>。若該標題確實對應一個 DND 桌遊團的開團活動,則其影響僅侷限於少數參與者的休閒娛樂安排,與總體民生經濟完全脫鉤。</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"><mark class="marker-cyan">由於原始素材並未提供可供推演的事件主體</mark>,以下三種情境並非針對特定新聞的預測,而是針對「<span class="marker-cyan font-medium">內容空缺型情報任務</span>」此一特殊情境的後續處置建議:</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">基準情境(素材補件完成)</mark>:若原始素材確為抓取失誤,預期在補件後將浮現一個與桌遊活動相關的低優先級社群紀錄。此情境下,本次深度報導任務將轉化為一則地方文化活動側記,<mark class="marker-cyan">情報價值評等將降至最低,且無需啟動任何後續追蹤機制</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">2.</span><div class="flex-1"><mark class="marker-cyan">極端風險情境(訊號隱匿)</mark>:在極低機率下,看似無意義的標題可能是一種「<span class="marker-cyan font-medium">隱語式情報傳遞</span>」手段,標題中的日期「<span class="marker-cyan font-medium">2026 09 27</span>」可能暗藏某種協調行動的時間錨點。然而,<mark class="marker-cyan">此種詮釋高度依賴情報分析者的過度聯想,缺乏任何經驗證據支持</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-cyan">轉折突破情境(社群文化觀察窗口)</mark>:若將此素材重新定位為「<span class="marker-cyan font-medium">地方社群平台資訊治理</span>」的研究樣本,則可進一步分析 HamletHub 等區域性內容平台在資訊結構化程度、SEO 優化策略與內容品質控管上的系統性問題。此一轉化雖然脫離原始任務框架,<mark class="marker-cyan">卻可能對未來優化情報抓取管線、降低誤判率提供實質參考價值</mark>。</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"> <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>:面對資訊密度不足的原始素材,情報分析者應立即啟動「<span class="marker-green font-medium">素材驗證退件機制</span>」,<mark class="marker-green">優先要求前端抓取系統重試或人工補件,而非強行產出無據分析</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">2.</span><div class="flex-1"><mark class="marker-green">中長期系統優化</mark>:建議在情報管線中建置「<span class="marker-green font-medium">內容品質閾值過濾器</span>」,<mark class="marker-green">當自動擷取的文字長度低於特定下限(如 50 字)且缺乏時間、人物、地點等基礎新聞要素時,自動標記為 low-yield 素材並進入待補件佇列</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-green">分析倫理紀律</mark>:在任何情況下,<mark class="marker-green">分析者不得為了完成交付而以想像力填補事實空缺</mark>。承認「<span class="marker-green font-medium">素材不足</span>」本身即是一種專業判斷的展現,也是維持智庫機構長期公信力的根本基石。</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-6aba860e0c10c" 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 起因觸發:原始素材僅含「Dnd Campaign 2026 09 27」單行標題,內文完全空缺 </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 二階擴散:管線工程師回頭檢查抓取系統於 HamletHub 平台的擷取成功率 </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"> 04 宏觀終局:建立「低資訊密度素材」的標準退件與補件機制,全面提升情報生產線的訊噪比 </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-6aba860e0c10c'); 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="26460"> <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/26503" 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"> 奈及利亞鄰國奈米比亞獵巫屠殺:19年九命血淚與制度失靈 </p> <p class="text-[11px] text-gray-500 line-clamp-1 font-mono"> 同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導 </p> </a> <a href="/article/26504" 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/26505" 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://www.hamlethub.com/events/dnd-campaign-2026-09-27" 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>⏱ 約 5 分鐘</span> <span>•</span> <span>📑 1,863 字</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"> 本次素材的事實查核評等為「unverified(🔴 0-59分)」,主因為:來源網站 www.hamlethub.com 為美國康乃狄克州的地方社群與活動資訊平台,權威性極低;且原始素材除一個標題字串外,完全缺乏可供驗證的人物、事件、數據或引述。由於內容主體根本不存在,無法進行任何有意義的交叉比對。HamletHub 雖為合法營運之社群網站,但其內容多為地方活動公告、學校訊息與社區新聞,並非國際情報或財經領域的權威來源。綜合而言,本次素材在來源權威度(低)、內容可驗證度(零)、數據佐證度(零)三個維度上均處於最低區間,故評分給予 15 分並標記為 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/26503" 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"> 奈及利亞鄰國奈米比亞獵巫屠殺:19年九命血淚與制度失靈 </p> <p class="text-[11px] text-gray-500 mt-1 line-clamp-1">同屬「文化社會」領域之跨事件演進脈絡與連鎖傳導</p> </a> <a href="/article/26504" 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/26505" 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/26503" 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-1486406146926-c627a92ad1ab?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"> 奈及利亞鄰國奈米比亞獵巫屠殺:19年九命血淚與制度失靈 </p> <span class="text-[10px] text-gray-500 font-mono mt-0.5 block">09/27</span> </div> </a> <a href="/article/26504" 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-1486406146926-c627a92ad1ab?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/27</span> </div> </a> <a href="/article/26505" 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-1524995997946-a1c2e315a42f?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/27</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="DND" 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"> #DND </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 = "\u684c\u904a\u6587\u5316"; 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>