{"id":271,"date":"2025-08-22T05:25:26","date_gmt":"2025-08-22T05:25:26","guid":{"rendered":"https:\/\/bioskinetics.com.au\/?page_id=271"},"modified":"2025-08-22T05:42:46","modified_gmt":"2025-08-22T05:42:46","slug":"global-mood-index","status":"publish","type":"page","link":"https:\/\/bioskinetics.com.au\/?page_id=271","title":{"rendered":"Global Mood Index"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"\/>\n<title>Global Mood Index<\/title>\n<style>\n  :root{\n    --bg:#0d0f1a;--card:#161a2e;--ink:#f1f5f9;--muted:#94a3b8;\n    --accent:#38bdf8;--happy:#22c55e;--sad:#ef4444;--neutral:#fbbf24;--lock:#64748b;\n  }\n  body{margin:0;font-family:system-ui,Roboto,Arial;background:var(--bg);color:var(--ink)}\n  header{text-align:center;padding:32px 16px}\n  h1{margin:0 0 8px;font-size:clamp(28px,5vw,40px)}\n  p.sub{margin:0;color:var(--muted)}\n  .wrap{max-width:1200px;margin:0 auto;padding:16px}\n  .grid{display:grid;gap:16px;grid-template-columns:1.3fr .9fr}\n  @media(max-width:960px){.grid{grid-template-columns:1fr}}\n  .card{background:var(--card);border:1px solid #22263f;border-radius:16px;overflow:hidden;box-shadow:0 8px 24px rgba(0,0,0,.4)}\n  .card h2{margin:0;padding:14px 16px;border-bottom:1px solid #22263f;font-size:18px}\n  .card .body{padding:16px}\n  .meter{height:20px;background:#111;border-radius:10px;overflow:hidden;margin:12px 0}\n  .meter-bar{height:100%;transition:width .5s}\n  .stats{display:flex;justify-content:space-around;margin:12px 0}\n  .stat{text-align:center}\n  .stat .k{font-size:22px;font-weight:700}\n  .cloud{display:flex;flex-wrap:wrap;gap:8px}\n  .tag{padding:4px 10px;border-radius:999px;font-size:14px}\n  .free{background:#1e293b;color:var(--muted)}\n  .paid-block{border:1px dashed #334;padding:14px;border-radius:14px;background:linear-gradient(180deg,#101325,#0a0d1a)}\n  .lock{color:var(--lock)}\n  .btn{display:inline-block;margin-top:10px;padding:10px 16px;border-radius:12px;background:linear-gradient(90deg,#22d3ee,#3b82f6);color:#fff;text-decoration:none}\n  table{width:100%;border-collapse:collapse;font-size:14px}\n  th,td{border-bottom:1px solid #22263f;padding:8px 6px;text-align:left}\n  th.sticky{position:sticky;top:0;background:var(--card);z-index:2}\n  .scroll{max-height:420px;overflow:auto;border-radius:12px}\n  .small{font-size:12px;color:var(--muted)}\n  .clickable{cursor:pointer}\n  \/* Modal *\/\n  #moodModal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:9999;align-items:center;justify-content:center}\n  #moodModal .sheet{background:#161a2e;border:1px solid #22263f;border-radius:14px;max-width:520px;width:92%;padding:20px;position:relative}\n  #moodModal .x{position:absolute;right:12px;top:8px;background:none;border:none;color:#aaa;font-size:20px;cursor:pointer}\n  #moodModal h3{margin:0 0 6px}\n  #moodModal p{margin:6px 0}\n  .badge{display:inline-block;padding:2px 8px;border-radius:999px;border:1px solid #2b3054;background:#0f1330;color:#cfe}\n<\/style>\n<script async src=\"https:\/\/js.stripe.com\/v3\/buy-button.js\"><\/script>\n<\/head>\n<body>\n\n<header>\n  <h1>Global Mood Index<\/h1>\n  <p class=\"sub\">Tracking worldwide happiness &#038; sadness in real time through social sentiment.<\/p>\n<\/header>\n\n<div class=\"wrap\">\n  <div class=\"grid\">\n    <!-- Live meter -->\n    <section class=\"card\">\n      <h2>Live Global Mood Meter<\/h2>\n      <div class=\"body\">\n        <p>Overall sentiment right now:<\/p>\n        <div class=\"meter\">\n          <div class=\"meter-bar\" id=\"moodBar\" style=\"width:65%;background:var(--happy)\"><\/div>\n        <\/div>\n        <div class=\"stats\">\n          <div class=\"stat\">\n            <div class=\"k\" id=\"kHappy\">65%<\/div>\n            <div>Happy<\/div>\n          <\/div>\n          <div class=\"stat\">\n            <div class=\"k\" id=\"kSad\">35%<\/div>\n            <div>Sad<\/div>\n          <\/div>\n        <\/div>\n        <p class=\"small\">Free preview uses a stable demo model. Connect your data feed for live scores.<\/p>\n      <\/div>\n    <\/section>\n\n    <!-- Word cloud -->\n    <section class=\"card\">\n      <h2>Daily Trending Emotions<\/h2>\n      <div class=\"body\">\n        <div class=\"cloud\" id=\"wordCloud\">\n          <span class=\"tag free\">joy<\/span>\n          <span class=\"tag free\">hope<\/span>\n          <span class=\"tag free\">stress<\/span>\n          <span class=\"tag free\">fear<\/span>\n          <span class=\"tag free\">love<\/span>\n          <span class=\"tag free\">anger<\/span>\n        <\/div>\n        <p class=\"small\">Auto-updates hourly with your data feed (or headline-driven demo if not connected).<\/p>\n      <\/div>\n    <\/section>\n\n    <!-- Country table -->\n    <section class=\"card\">\n      <h2>Country Sentiment Scores<\/h2>\n      <div class=\"body\">\n        <div class=\"scroll\">\n          <table id=\"countryTable\">\n            <thead>\n              <tr>\n                <th class=\"sticky\">Country<\/th>\n                <th class=\"sticky\">Mood Score<\/th>\n              <\/tr>\n            <\/thead>\n            <tbody><\/tbody>\n          <\/table>\n        <\/div>\n        <p class=\"small\">Tip: Click a country to see a brief explanation based on live headlines.<\/p>\n      <\/div>\n    <\/section>\n\n    <!-- Paid features -->\n    <section class=\"card\">\n      <h2>Unlock Deeper Insights \ud83d\udd12<\/h2>\n      <div class=\"body\">\n        <div class=\"paid-block\">\n          <h3 class=\"lock\">Historical Mood Charts<\/h3>\n          <p class=\"muted\">Track sentiment shifts over months &#038; years with interactive graphs.<\/p>\n          <stripe-buy-button buy-button-id=\"buy_btn_XXXXdemo\" data-publishable-key=\"pk_live_51QlMNxRqoS6Xq886zs3ibMrRlyEVhNdv0b9fOkPXNTeS9uUk6l2tuxTOMpLyifXf7TTdlRH5RrhKiauUcu2WLdpp00zAZxnBUZ\"><\/stripe-buy-button>\n        <\/div>\n        <div class=\"paid-block\" style=\"margin-top:12px\">\n          <h3 class=\"lock\">Exportable Data for Research<\/h3>\n          <p class=\"muted\">Download datasets for analysis or integration into your apps.<\/p>\n          <stripe-buy-button buy-button-id=\"buy_btn_XXXXdemo\" data-publishable-key=\"pk_live_51QlMNxRqoS6Xq886zs3ibMrRlyEVhNdv0b9fOkPXNTeS9uUk6l2tuxTOMpLyifXf7TTdlRH5RrhKiauUcu2WLdpp00zAZxnBUZ\"><\/stripe-buy-button>\n        <\/div>\n        <div class=\"paid-block\" style=\"margin-top:12px\">\n          <h3 class=\"lock\">AI Mood Predictions<\/h3>\n          <p class=\"muted\">Forecast how global moods will shift during major world events.<\/p>\n          <stripe-buy-button buy-button-id=\"buy_btn_XXXXdemo\" data-publishable-key=\"pk_live_51QlMNxRqoS6Xq886zs3ibMrRlyEVhNdv0b9fOkPXNTeS9uUk6l2tuxTOMpLyifXf7TTdlRH5RrhKiauUcu2WLdpp00zAZxnBUZ\"><\/stripe-buy-button>\n        <\/div>\n      <\/div>\n    <\/section>\n  <\/div>\n<\/div>\n\n<!-- Mood Reason Modal -->\n<div id=\"moodModal\">\n  <div class=\"sheet\">\n    <button class=\"x\" onclick=\"closeMood()\" aria-label=\"Close\">\u00d7<\/button>\n    <h3 id=\"modalCountry\"><\/h3>\n    <p class=\"badge\" id=\"modalScore\"><\/p>\n    <p id=\"modalReason\" style=\"color:#94a3b8\"><\/p>\n    <div id=\"modalHeadlines\"><\/div>\n    <p class=\"small\" style=\"margin-top:10px\">Explanations are generated from recent news headlines and simple sentiment signals.<\/p>\n  <\/div>\n<\/div>\n\n<script>\n\/* ---------- BASIC ERROR LOGGING ---------- *\/\nwindow.addEventListener('error', e => { console.log('JS error:', e.message); });\n\n\/* ---------- CONFIG ---------- *\/\nconst DATA_SHEET_URL = \"\";  \/\/ optional CSV with Country,Score\nconst NEWSAPI_KEY = \"\";     \/\/ optional NewsAPI.org key\nconst GUARDIAN_KEY = \"test\";\n\n\/* ---------- COUNTRIES AS ARRAY (no string\/split) ---------- *\/\nconst COUNTRIES = [\n\"Afghanistan\",\"Albania\",\"Algeria\",\"Andorra\",\"Angola\",\"Antigua and Barbuda\",\"Argentina\",\"Armenia\",\"Australia\",\"Austria\",\n\"Azerbaijan\",\"Bahamas\",\"Bahrain\",\"Bangladesh\",\"Barbados\",\"Belarus\",\"Belgium\",\"Belize\",\"Benin\",\"Bhutan\",\n\"Bolivia\",\"Bosnia and Herzegovina\",\"Botswana\",\"Brazil\",\"Brunei\",\"Bulgaria\",\"Burkina Faso\",\"Burundi\",\"Cabo Verde\",\n\"Cambodia\",\"Cameroon\",\"Canada\",\"Central African Republic\",\"Chad\",\"Chile\",\"China\",\"Colombia\",\"Comoros\",\n\"Congo (Congo-Brazzaville)\",\"Costa Rica\",\"Cote d'Ivoire\",\"Croatia\",\"Cuba\",\"Cyprus\",\"Czechia\",\n\"Democratic Republic of the Congo\",\"Denmark\",\"Djibouti\",\"Dominica\",\"Dominican Republic\",\"Ecuador\",\"Egypt\",\"El Salvador\",\n\"Equatorial Guinea\",\"Eritrea\",\"Estonia\",\"Eswatini\",\"Ethiopia\",\"Fiji\",\"Finland\",\"France\",\"Gabon\",\"Gambia\",\n\"Georgia\",\"Germany\",\"Ghana\",\"Greece\",\"Grenada\",\"Guatemala\",\"Guinea\",\"Guinea-Bissau\",\"Guyana\",\"Haiti\",\n\"Holy See\",\"Honduras\",\"Hungary\",\"Iceland\",\"India\",\"Indonesia\",\"Iran\",\"Iraq\",\"Ireland\",\"Israel\",\"Italy\",\n\"Jamaica\",\"Japan\",\"Jordan\",\"Kazakhstan\",\"Kenya\",\"Kiribati\",\"Kuwait\",\"Kyrgyzstan\",\"Laos\",\"Latvia\",\n\"Lebanon\",\"Lesotho\",\"Liberia\",\"Libya\",\"Liechtenstein\",\"Lithuania\",\"Luxembourg\",\"Madagascar\",\"Malawi\",\"Malaysia\",\n\"Maldives\",\"Mali\",\"Malta\",\"Marshall Islands\",\"Mauritania\",\"Mauritius\",\"Mexico\",\"Micronesia\",\"Moldova\",\"Monaco\",\n\"Mongolia\",\"Montenegro\",\"Morocco\",\"Mozambique\",\"Myanmar\",\"Namibia\",\"Nauru\",\"Nepal\",\"Netherlands\",\"New Zealand\",\n\"Nicaragua\",\"Niger\",\"Nigeria\",\"North Korea\",\"North Macedonia\",\"Norway\",\"Oman\",\"Pakistan\",\"Palau\",\"State of Palestine\",\n\"Panama\",\"Papua New Guinea\",\"Paraguay\",\"Peru\",\"Philippines\",\"Poland\",\"Portugal\",\"Qatar\",\"Romania\",\"Russia\",\n\"Rwanda\",\"Saint Kitts and Nevis\",\"Saint Lucia\",\"Saint Vincent and the Grenadines\",\"Samoa\",\"San Marino\",\"Sao Tome and Principe\",\"Saudi Arabia\",\"Senegal\",\"Serbia\",\n\"Seychelles\",\"Sierra Leone\",\"Singapore\",\"Slovakia\",\"Slovenia\",\"Solomon Islands\",\"Somalia\",\"South Africa\",\"South Korea\",\"South Sudan\",\n\"Spain\",\"Sri Lanka\",\"Sudan\",\"Suriname\",\"Sweden\",\"Switzerland\",\"Syria\",\"Tajikistan\",\"Tanzania\",\"Thailand\",\n\"Timor-Leste\",\"Togo\",\"Tonga\",\"Trinidad and Tobago\",\"Tunisia\",\"Turkiye\",\"Turkmenistan\",\"Tuvalu\",\"Uganda\",\"Ukraine\",\n\"United Arab Emirates\",\"United Kingdom\",\"United States of America\",\"Uruguay\",\"Uzbekistan\",\"Vanuatu\",\"Venezuela\",\"Vietnam\",\"Yemen\",\"Zambia\",\"Zimbabwe\"\n];\n\n\/* ---------- STABLE DEMO SCORE MODEL ---------- *\/\nfunction hashString(str){\n  let h = 2166136261>>>0;\n  for(let i=0;i<str.length;i++){ h ^= str.charCodeAt(i); h = Math.imul(h,16777619); }\n  return h>>>0;\n}\nfunction scoreForCountry(name){\n  const base = 45 + (hashString(name)%36); \/\/ 45..80\n  const t = new Date();\n  const drift = Math.sin((t.getUTCHours()\/24)*Math.PI*2)*5; \/\/ -5..+5\n  return Math.max(0, Math.min(100, Math.round(base + drift)));\n}\n\n\/* ---------- SENTIMENT WORDLIST ---------- *\/\nconst POS_WORDS = [\"win\",\"growth\",\"boost\",\"record\",\"optimism\",\"peace\",\"relief\",\"surge\",\"aid\",\"progress\",\"celebrates\",\"celebration\",\"improves\",\"expands\",\"recovery\",\"victory\",\"truce\",\"success\",\"upgrade\",\"soars\",\"rally\"];\nconst NEG_WORDS = [\"crisis\",\"protest\",\"inflation\",\"decline\",\"cut\",\"violence\",\"tension\",\"shortage\",\"scandal\",\"accident\",\"disaster\",\"earthquake\",\"flood\",\"wildfire\",\"war\",\"attack\",\"strike\",\"downturn\",\"unrest\",\"sanction\",\"outage\",\"layoffs\",\"recession\",\"fear\",\"concern\",\"anxiety\",\"anxious\",\"deadly\"];\nconst STOP = new Set([\"the\",\"a\",\"an\",\"and\",\"or\",\"to\",\"of\",\"in\",\"on\",\"for\",\"with\",\"by\",\"as\",\"at\",\"from\",\"over\",\"after\",\"amid\",\"into\",\"new\",\"latest\",\"update\",\"report\",\"says\",\"say\",\"vs\",\"de\",\"la\",\"le\",\"el\",\"los\"]);\n\n\/* ---------- LOAD SCORES ---------- *\/\nasync function loadCountryScores(){\n  if(!DATA_SHEET_URL){\n    return COUNTRIES.map(c=>({country:c, score:scoreForCountry(c)}));\n  }\n  try{\n    const res = await fetch(DATA_SHEET_URL);\n    const text = await res.text();\n    const [head, ...lines] = text.trim().split(\/\\r?\\n\/);\n    const cols = head.split(',').map(s=>s.trim().toLowerCase());\n    const iCountry = cols.indexOf('country');\n    const iScore = cols.indexOf('score');\n    const rows = lines.map(line=>{\n      const parts = line.split(',').map(s=>s.trim());\n      return {country: parts[iCountry], score: Number(parts[iScore])};\n    });\n    const map = new Map(rows.map(r=>[r.country, r.score]));\n    return COUNTRIES.map(c=>({country:c, score: map.has(c) ? map.get(c) : scoreForCountry(c)}));\n  }catch(e){\n    console.warn('CSV load failed, using demo scores:', e);\n    return COUNTRIES.map(c=>({country:c, score:scoreForCountry(c)}));\n  }\n}\n\n\/* ---------- NEWS FETCH (Guardian default, NewsAPI optional) ---------- *\/\nconst newsCache = new Map();\n\nasync function fetchNewsForCountry(country){\n  if(newsCache.has(country)) return newsCache.get(country);\n\n  if(NEWSAPI_KEY){\n    try{\n      const url = `https:\/\/newsapi.org\/v2\/everything?q=${encodeURIComponent(country)}&pageSize=5&sortBy=publishedAt&language=en&apiKey=${NEWSAPI_KEY}`;\n      const res = await fetch(url);\n      const json = await res.json();\n      if(json && json.articles){\n        const headlines = json.articles.map(a=>a.title).filter(Boolean);\n        newsCache.set(country, headlines);\n        return headlines;\n      }\n    }catch(e){ console.warn(\"NewsAPI failed; fallback to Guardian.\", e); }\n  }\n\n  try{\n    const url = `https:\/\/content.guardianapis.com\/search?q=${encodeURIComponent(country)}&page-size=5&order-by=newest&api-key=${GUARDIAN_KEY}`;\n    const res = await fetch(url);\n    const json = await res.json();\n    if(json && json.response && json.response.results){\n      const headlines = json.response.results.map(r=>r.webTitle).filter(Boolean);\n      newsCache.set(country, headlines);\n      return headlines;\n    }\n  }catch(e){ console.warn(\"Guardian fetch failed.\", e); }\n\n  newsCache.set(country, []);\n  return [];\n}\n\n\/* ---------- HEADLINE ANALYSIS ---------- *\/\nfunction analyzeHeadlines(headlines){\n  let score = 0;\n  const counts = new Map();\n  for(const h of headlines){\n    const tokens = h.toLowerCase().replace(\/[^a-z0-9\\s]\/g,' ').split(\/\\s+\/).filter(Boolean);\n    for(const t of tokens){\n      if(STOP.has(t)) continue;\n      if(POS_WORDS.includes(t)) score += 1;\n      if(NEG_WORDS.includes(t)) score -= 1;\n      if(!STOP.has(t) && t.length>3){\n        counts.set(t, (counts.get(t)||0)+1);\n      }\n    }\n  }\n  const sentiment = score===0?0:(score>0?1:-1);\n  const topKeywords = [...counts.entries()].sort((a,b)=>b[1]-a[1]).slice(0,5).map(([w])=>w);\n  return { sentiment, topKeywords };\n}\n\nfunction pickOne(arr){ return arr[Math.floor(Math.random()*arr.length)]; }\nfunction reasonFromSentiment(country, sentiment, topKeywords){\n  const topic = topKeywords[0] ? topKeywords[0] : \"current events\";\n  if(sentiment>0){\n    const frames = [\n      `a positive shift tied to ${topic}`,\n      `optimism around ${topic}`,\n      `celebratory headlines about ${topic}`,\n      `hopeful signals linked to ${topic}`\n    ];\n    return `${country} is trending happier, with ${pickOne(frames)}.`;\n  }else if(sentiment<0){\n    const frames = [\n      `concerns over ${topic}`,\n      `heightened anxiety about ${topic}`,\n      `tensions surrounding ${topic}`,\n      `worries reflected in coverage of ${topic}`\n    ];\n    return `${country} is leaning sadder due to ${pickOne(frames)}.`;\n  }else{\n    const frames = [\n      `mixed reactions to ${topic}`,\n      `balanced coverage around ${topic}`,\n      `a blend of hopeful and cautious headlines about ${topic}`\n    ];\n    return `${country} shows a steady mood with ${pickOne(frames)}.`;\n  }\n}\n\n\/* ---------- UI RENDER ---------- *\/\nfunction renderTable(list){\n  const tbody = document.querySelector('#countryTable tbody');\n  if(!tbody){ console.log('Country table body missing'); return; }\n  tbody.innerHTML = '';\n  const sorted = [...list].sort((a,b)=>b.score-a.score);\n  for(const r of sorted){\n    const emoji = r.score>=66?'\ud83d\ude0a':r.score>=50?'\ud83d\ude10':'\u2639\ufe0f';\n    const tr = document.createElement('tr');\n    tr.className = 'clickable';\n    tr.innerHTML = `<td>${r.country}<\/td><td>${r.score}% ${emoji}<\/td>`;\n    tr.onclick = ()=>openMood(r.country, r.score);\n    tbody.appendChild(tr);\n  }\n}\n\nfunction renderMeter(list){\n  const avg = Math.round(list.reduce((a,b)=>a+b.score,0)\/list.length);\n  const happy = avg, sad = 100-avg;\n  const bar = document.getElementById('moodBar');\n  if(bar){\n    bar.style.width = happy + '%';\n    bar.style.background = happy>60?'var(--happy)':happy>50?'var(--neutral)':'var(--sad)';\n  }\n  const h = document.getElementById('kHappy'), s = document.getElementById('kSad');\n  if(h) h.textContent = happy + '%';\n  if(s) s.textContent = sad + '%';\n}\n\nasync function renderWordCloudFromNews(){\n  const sample = [\"United States of America\",\"India\",\"Brazil\",\"United Kingdom\",\"Japan\",\"Germany\",\"Australia\",\"Nigeria\"];\n  const counts = new Map();\n  for(const c of sample){\n    const headlines = await fetchNewsForCountry(c);\n    const { topKeywords } = analyzeHeadlines(headlines);\n    for(const k of topKeywords){ counts.set(k, (counts.get(k)||0)+1); }\n  }\n  const cloud = document.getElementById('wordCloud');\n  if(!cloud) return;\n  cloud.innerHTML = '';\n  const top = [...counts.entries()].sort((a,b)=>b[1]-a[1]).slice(0,12).map(([w])=>w);\n  for(const w of top){\n    const span = document.createElement('span');\n    span.className = 'tag free';\n    span.textContent = w;\n    cloud.appendChild(span);\n  }\n}\n\n\/* ---------- MODAL ---------- *\/\nasync function openMood(country, score){\n  document.getElementById(\"modalCountry\").textContent = country;\n  document.getElementById(\"modalScore\").textContent = `Mood Score: ${score}%`;\n  document.getElementById(\"modalReason\").textContent = \"Fetching headlines\u2026\";\n  document.getElementById(\"modalHeadlines\").innerHTML = \"\";\n  document.getElementById(\"moodModal\").style.display=\"flex\";\n  try{\n    const headlines = await fetchNewsForCountry(country);\n    const { sentiment, topKeywords } = analyzeHeadlines(headlines);\n    const reason = reasonFromSentiment(country, sentiment, topKeywords);\n    document.getElementById(\"modalReason\").textContent = reason;\n\n    if(headlines.length){\n      const ul = document.createElement('ul');\n      ul.style.margin = '8px 0';\n      ul.style.paddingLeft = '18px';\n      for(const h of headlines.slice(0,5)){\n        const li = document.createElement('li');\n        li.textContent = h;\n        li.style.color = '#cfd8ea';\n        ul.appendChild(li);\n      }\n      document.getElementById(\"modalHeadlines\").appendChild(ul);\n    }else{\n      document.getElementById(\"modalHeadlines\").innerHTML = \"<p class='small'>No headlines available right now. Showing a generic explanation.<\/p>\";\n    }\n  }catch(e){\n    console.log('openMood error:', e);\n    document.getElementById(\"modalReason\").textContent = \"Unable to fetch news at the moment. Showing a generic explanation.\";\n  }\n}\nfunction closeMood(){ document.getElementById(\"moodModal\").style.display=\"none\"; }\n\n\/* ---------- BOOT ---------- *\/\nasync function boot(){\n  try{\n    const data = await loadCountryScores();\n    renderMeter(data);\n    renderTable(data);\n    renderWordCloudFromNews(); \/\/ async, non-blocking\n  }catch(e){\n    console.log('boot error:', e);\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', boot);\nsetInterval(boot, 10*60*1000); \/\/ refresh every 10 min\n<\/script>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Global Mood Index Global Mood Index Tracking worldwide happiness &#038; sadness in real time through social sentiment. Live Global Mood [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"blank-slate-template.php","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-271","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=\/wp\/v2\/pages\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=271"}],"version-history":[{"count":4,"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=\/wp\/v2\/pages\/271\/revisions"}],"predecessor-version":[{"id":277,"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=\/wp\/v2\/pages\/271\/revisions\/277"}],"wp:attachment":[{"href":"https:\/\/bioskinetics.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}