/** * GMIIE Live Desk UI — last-updated banner, this-week digest, markets ticker, jurisdiction selector. */ (function (global) { const DESK_PAGES = { home: { desk: 'all', showMarkets: false }, fraud: { desk: 'fraud', showMarkets: false }, legislative: { desk: 'legislative', showMarkets: false }, tracker: { desk: 'all', showMarkets: true }, engine: { desk: 'all', showMarkets: true }, cbdc: { desk: 'cbdc', showMarkets: false }, sports: { desk: 'sports_nil', showMarkets: false }, nil: { desk: 'sports_nil', showMarkets: false }, classroom: { desk: 'all', showMarkets: false }, query: { desk: 'all', showMarkets: false }, }; let jurisdiction = localStorage.getItem('gmiie-jurisdiction') || 'US-FED'; function injectStyles() { if (document.getElementById('gld-styles')) return; const s = document.createElement('style'); s.id = 'gld-styles'; s.textContent = ` .gld-live-bar{background:var(--gold-bg,rgba(184,149,58,.1));border-bottom:1px solid var(--gold-bd,rgba(184,149,58,.25));padding:8px 48px;font-family:var(--mono,'JetBrains Mono',monospace);font-size:9px;color:var(--ink2,#444);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;} .gld-live-bar strong{color:var(--gold,#b8953a);} .gld-jurisdiction{display:flex;align-items:center;gap:6px;flex-wrap:wrap;} .gld-jurisdiction label{font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3,#777);} .gld-jurisdiction select{font-family:var(--mono);font-size:9px;padding:4px 8px;border:1px solid var(--rule,#d4c9a8);background:var(--paper,#faf8f3);color:var(--ink,#1a1a1a);} .gld-week{margin:16px 0;padding:14px;border:1px solid var(--rule,#d4c9a8);background:var(--surface,#ece8dc);} .gld-week-hd{font-family:var(--mono);font-size:8px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--gold,#b8953a);margin-bottom:8px;} .gld-week ul{margin:0;padding-left:18px;font-size:12px;color:var(--ink2,#444);line-height:1.65;} .gld-week p.gld-grok{font-size:12px;color:var(--ink,#1a1a1a);margin-top:10px;padding-top:10px;border-top:1px dashed var(--rule,#d4c9a8);font-style:italic;} .gld-ticker{background:var(--band,#1a1a1a);color:var(--band-ink,rgba(255,255,255,.75));padding:6px 48px;font-family:var(--mono);font-size:8px;display:flex;align-items:center;gap:16px;overflow-x:auto;white-space:nowrap;} .gld-ticker .gld-tk-lbl{color:var(--gold,#b8953a);font-weight:700;letter-spacing:.1em;flex-shrink:0;} .gld-ticker .up{color:var(--green,#34d399);} .gld-ticker .down{color:var(--red,#f87171);} @media(max-width:768px){.gld-live-bar,.gld-ticker{padding-left:16px;padding-right:16px;}}`; document.head.appendChild(s); } function pageKey() { return ( document.body.getAttribute('data-gmiie-page') || location.pathname.replace(/^\//, '').replace(/\.html$/, '') || 'home' ); } function formatTs(iso, tz) { if (!iso) return '—'; try { return new Intl.DateTimeFormat('en-US', { timeZone: tz || Intl.DateTimeFormat().resolvedOptions().timeZone, dateStyle: 'medium', timeStyle: 'short', }).format(new Date(iso)); } catch { return new Date(iso).toUTCString(); } } function ensureLiveBar() { if (document.getElementById('gld-live-bar')) return document.getElementById('gld-live-bar'); injectStyles(); const bar = document.createElement('div'); bar.id = 'gld-live-bar'; bar.className = 'gld-live-bar'; bar.innerHTML = 'Loading live desk…' + '
' + '
'; const mast = document.querySelector('.masthead'); if (mast && mast.parentNode) { mast.parentNode.insertBefore(bar, mast.nextSibling); } else { document.body.insertBefore(bar, document.body.firstChild); } const sel = bar.querySelector('#gld-jurisdiction-select'); sel.value = jurisdiction; sel.addEventListener('change', () => { jurisdiction = sel.value; localStorage.setItem('gmiie-jurisdiction', jurisdiction); loadDigest(); }); return bar; } function ensureWeekSection() { const main = document.querySelector('main'); if (!main || document.getElementById('gld-week')) return null; const sec = document.createElement('section'); sec.id = 'gld-week'; sec.className = 'gld-week'; sec.innerHTML = '
This week · GMIIE Live Desk
' + '' + ''; const intro = main.querySelector('.intro') || main.firstElementChild; if (intro && intro.nextSibling) { main.insertBefore(sec, intro.nextSibling); } else { main.prepend(sec); } return sec; } function ensureTicker() { if (document.getElementById('gld-ticker')) return; const cfg = DESK_PAGES[pageKey()] || {}; if (!cfg.showMarkets) return; injectStyles(); const t = document.createElement('div'); t.id = 'gld-ticker'; t.className = 'gld-ticker'; t.innerHTML = 'MarketsLoading…'; const bar = document.getElementById('gld-live-bar'); if (bar && bar.nextSibling) { bar.parentNode.insertBefore(t, bar.nextSibling); } else { const mast = document.querySelector('.masthead'); if (mast) mast.parentNode.insertBefore(t, mast.nextSibling); } } async function loadMarkets() { try { const r = await fetch('/api/gmiie/live/markets', { signal: AbortSignal.timeout(10000) }); const data = r.ok ? await r.json() : null; const el = document.getElementById('gld-ticker-body'); if (!el) return; if (!data || data.status === 'unavailable' || !data.assets?.length) { el.textContent = data?.note || 'Markets feed unavailable'; if (data?.fetched_at) el.textContent += ' · last attempt ' + formatTs(data.fetched_at, 'UTC'); return; } el.innerHTML = data.assets .map((a) => { const ch = a.change_24h_pct; const cls = ch > 0 ? 'up' : ch < 0 ? 'down' : ''; const sign = ch > 0 ? '+' : ''; return ( '' + a.symbol + ' $' + Math.round(a.price_usd).toLocaleString() + ' (' + sign + (ch?.toFixed(2) ?? '—') + '%)' ); }) .join(' · '); } catch (_) {} } async function loadDigest() { const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; const url = '/api/gmiie/live/digest?jurisdiction=' + encodeURIComponent(jurisdiction) + '&tz=' + encodeURIComponent(tz); try { const r = await fetch(url, { signal: AbortSignal.timeout(12000) }); const data = r.ok ? await r.json() : null; const upd = document.getElementById('gld-last-updated'); if (upd && data) { upd.innerHTML = 'Last updated: ' + formatTs(data.generated_at, data.timezone) + ' · ' + (data.timezone || tz) + (data.as_of_date ? ' · As of ' + data.as_of_date : ''); } else if (upd) { upd.textContent = 'Live desk pending — static snapshot'; } const pubDate = document.getElementById('pub-date'); if (pubDate && data?.generated_at) { pubDate.textContent = formatTs(data.generated_at, data.timezone || tz).toUpperCase(); } const ftGen = document.getElementById('ft-gen'); if (ftGen && data?.generated_at) { ftGen.textContent = ' · Live desk ' + formatTs(data.generated_at, 'UTC'); } const list = document.getElementById('gld-week-list'); if (list && data?.this_week?.length) { list.innerHTML = data.this_week.map((i) => '
  • ' + esc(i.text) + '
  • ').join(''); } const grok = document.getElementById('gld-grok-summary'); if (grok && data?.grok_summary) { grok.textContent = data.grok_summary; grok.style.display = 'block'; } else if (grok) { grok.style.display = 'none'; } } catch (_) { fallbackStaticDigest(); } } function esc(s) { const d = document.createElement('div'); d.textContent = s || ''; return d.innerHTML; } async function fallbackStaticDigest() { try { const r = await fetch('/data/gmiie-daily-digest.json', { signal: AbortSignal.timeout(8000) }); if (!r.ok) return; const data = await r.json(); const upd = document.getElementById('gld-last-updated'); if (upd) { upd.innerHTML = 'Last updated: ' + formatTs(data.generated_at, data.timezone) + ' · ' + (data.timezone || 'UTC') + ' (static fallback)'; } const list = document.getElementById('gld-week-list'); if (list && data.this_week) { list.innerHTML = data.this_week.map((i) => '
  • ' + esc(i.text) + '
  • ').join(''); } } catch (_) {} } function init() { const key = pageKey(); if (!document.body.hasAttribute('data-gmiie-desk')) return; ensureLiveBar(); if (['home', 'fraud', 'legislative', 'tracker', 'engine', 'cbdc', 'classroom'].includes(key)) { ensureWeekSection(); } ensureTicker(); loadDigest(); loadMarkets(); setInterval(loadMarkets, 4 * 60 * 60 * 1000); setInterval(loadDigest, 30 * 60 * 1000); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } global.GMIIELiveDesk = { init, loadDigest, loadMarkets }; })(typeof window !== 'undefined' ? window : globalThis);