{"id":1842,"date":"2025-12-22T17:03:22","date_gmt":"2025-12-22T09:03:22","guid":{"rendered":"https:\/\/invescoe.com\/?page_id=1842"},"modified":"2026-05-11T14:13:05","modified_gmt":"2026-05-11T06:13:05","slug":"trading-dashboard","status":"publish","type":"page","link":"https:\/\/invescoe.com\/bn\/trading-dashboard\/","title":{"rendered":"Trading Dashboard"},"content":{"rendered":"<div class=\"brz brz-root__container brz-reset-all brz-root__container-page\">\n<section id=\"kvZmIgcYJQ4W_kvZmIgcYJQ4W\" class=\"brz-section brz-section__header brz-section__header-type--animated brz-css-d-sectionheader brz-css-38qahy\">\n<div class=\"brz-section__header--animated brz-css-d-sectionheader brz-css-38qahy\">\n<div class=\"brz-section__header-sticky-item brz-css-d-sectionheaderstickyitem brz-css-17c7crz\" data-brz-custom-id=\"g7HUMF2QZ_22\">\n<div class=\"brz-bg\">\n<div class=\"brz-bg-color\"><\/div>\n<\/div>\n<div class=\"brz-container brz-css-d-sectionheaderstickyitem-container brz-css-1ppx3v1\">\n<div class=\"brz-row__container brz-css-d-row-row brz-css-19uhvyt\" data-brz-custom-id=\"ulAGVtoApYZf\">\n<div class=\"brz-row brz-css-d-row-container brz-css-19p1ekn\">\n<div class=\"brz-columns brz-css-d-column-column brz-css-18qum1r\" data-brz-custom-id=\"vuPFRPGnLdMh\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-14kcv2w\">\n<div class=\"brz-row__container brz-css-d-row-row brz-css-1lg20oa\" data-brz-custom-id=\"lFzvMhxGT95E\">\n<div class=\"brz-row brz-row--inner brz-css-d-row-container brz-css-r-row-container brz-css-16d45k2\">\n<div class=\"brz-columns brz-css-d-column-column brz-css-50fdn6\" data-brz-custom-id=\"ffXsFp3Linsf\">\n<div class=\"brz-bg\">\n<div class=\"brz-bg-color\"><\/div>\n<\/div>\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-1dufgj2\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-snv497 brz-wrapper\">\n<div class=\"brz-image brz-css-d-image-lunm0pvhxags-parent brz-css-5ux109\" data-brz-custom-id=\"lUnM0pVHxAGS\"><img decoding=\"async\" class=\"brz-img\" src=\"https:\/\/invescoe.com\/wp-content\/uploads\/brizy\/imgs\/cropped-ChatGPT-Image-Oct-2-2025-05_06_10-PM-86x86x0x14x86x58x1759396226.png\" loading=\"lazy\" title=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"brz-columns brz-css-d-column-column brz-css-5dlsvc\" data-brz-custom-id=\"lE_lQ_WaDMYZ\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-o3f4rx\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-hpg2kr brz-wrapper\"><\/div>\n<\/div>\n<\/div>\n<div class=\"brz-columns brz-css-d-column-column brz-css-clilr8\" data-brz-custom-id=\"zs9Am6ACcCqX\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-12esgko\">\n<div class=\"brz-wrapper-clone brz-flex-xs-wrap brz-css-d-cloneable brz-css-1e5lmyx\" data-brz-custom-id=\"fbAnLlwBmiPV\"><a class=\"brz-a brz-btn brz-css-d-button brz-css-jyrt55 brz-css-d-button-bg brz-css-rksk57\" target=\"_self\" rel=\"noopener\" data-brz-link-type=\"external\" data-brz-custom-id=\"m4HNmoLq6bsg\"><span data-brz-translate-text=\"1\" class=\"brz-span brz-text__editor\">Sign in<\/span><\/a><a class=\"brz-a brz-btn brz-css-d-button brz-css-18y7fw7 brz-css-d-button-bg brz-css-hwbic7\" target=\"_self\" rel=\"noopener\" data-brz-link-type=\"external\" data-brz-custom-id=\"fcIIlYnP2o3R\"><span data-brz-translate-text=\"1\" class=\"brz-span brz-text__editor\">GET STARTED&nbsp;<\/span><\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"brz-section__menu-item brz-css-d-sectionheaderitem brz-css-oiku98\" data-brz-custom-id=\"r_x1jUoNBSQQ\">\n<div class=\"brz-bg\">\n<div class=\"brz-bg-color\"><\/div>\n<\/div>\n<div class=\"brz-container brz-css-d-sectionheaderitem-container brz-css-11he4mz\">\n<div class=\"brz-row__container brz-css-d-row-row brz-css-13me6d0\" data-brz-custom-id=\"hvvGEg3c41ht\">\n<div class=\"brz-row brz-css-d-row-container brz-css-ppglmz\">\n<div class=\"brz-columns brz-css-d-column-column brz-css-1fewsms\" data-brz-custom-id=\"qKfyzvRU5Hej\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-1h9ahme\">\n<div class=\"brz-row__container brz-css-d-row-row brz-css-fo1jku\" data-brz-custom-id=\"c2Od7ZVG2H9o\">\n<div class=\"brz-row brz-row--inner brz-css-d-row-container brz-css-r-row-container brz-css-btvdhv\">\n<div class=\"brz-columns brz-css-d-column-column brz-css-fr9b6d\" data-brz-custom-id=\"diHSbsyHUvsn\">\n<div class=\"brz-bg\">\n<div class=\"brz-bg-color\"><\/div>\n<\/div>\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-efdf6s\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-vaxl0x brz-wrapper\">\n<div class=\"brz-image brz-css-d-image-xidhtzepoope-parent brz-css-sm4xlw\" data-brz-custom-id=\"xidhTzEPooPe\"><img decoding=\"async\" class=\"brz-img\" src=\"https:\/\/invescoe.com\/wp-content\/uploads\/brizy\/imgs\/cropped-ChatGPT-Image-Oct-2-2025-05_06_10-PM-86x86x0x14x86x58x1759396226.png\" loading=\"lazy\" title=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"brz-columns brz-css-d-column-column brz-css-17j0kz2\" data-brz-custom-id=\"hw4w82tAqWvZ\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-kjedjk\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-1qettw4 brz-wrapper\"><\/div>\n<\/div>\n<\/div>\n<div class=\"brz-columns brz-css-d-column-column brz-css-1n0q7km\" data-brz-custom-id=\"pCpW780rAic8\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-1pl9yiw\">\n<div class=\"brz-wrapper-clone brz-flex-xs-wrap brz-css-d-cloneable brz-css-1v0st3m\" data-brz-custom-id=\"vSS8WrnqtyAq\"><a class=\"brz-a brz-btn brz-css-d-button brz-css-18wp954 brz-css-d-button-bg brz-css-144hgnj\" target=\"_self\" rel=\"noopener\" data-brz-link-type=\"external\" data-brz-custom-id=\"dyxWVYwjSfhE\"><span data-brz-translate-text=\"1\" class=\"brz-span brz-text__editor\">Sign in<\/span><\/a><a class=\"brz-a brz-btn brz-css-d-button brz-css-17jwn8q brz-css-d-button-bg brz-css-ddj11b\" target=\"_self\" rel=\"noopener\" data-brz-link-type=\"external\" data-brz-custom-id=\"oaRdIzk9lp98\"><span data-brz-translate-text=\"1\" class=\"brz-span brz-text__editor\">GET STARTED&nbsp;<\/span><\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"rnlQJCpU9rPz_rnlQJCpU9rPz\" class=\"brz-section brz-css-d-section brz-css-1hcluer\">\n<div class=\"brz-section__content brz-section--fullWidth brz-css-d-sectionitem-bg brz-css-cb2x01\" data-brz-custom-id=\"mJY2bxMp6Wo7\">\n<div class=\"brz-bg\">\n<div class=\"brz-bg-color\"><\/div>\n<\/div>\n<div class=\"brz-container brz-css-d-sectionitem-container brz-css-19f5v83\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-fde9c5 brz-wrapper\">\n<div class=\"brz-embed-code brz-css-d-embedcode brz-css-f6otbj\" data-brz-custom-id=\"xD5plQcYZurr\">\n<div class=\"brz-embed-content\">\n<div><!-- Trading Dashboard Embed (WordPress-safe) --><\/p>\n<div id=\"tcdash-embed\">\n<p>    \/* EVERYTHING scoped to #tcdash-embed to avoid breaking WP theme *\/<br \/>\n    #tcdash-embed,<br \/>\n    #tcdash-embed * { box-sizing: border-box; }<\/p>\n<p>    #tcdash-embed {<br \/>\n      margin: 0;<br \/>\n      padding: 0;<br \/>\n      font-family: &#8216;Inter&#8217;, -apple-system, BlinkMacSystemFont, &#8216;Segoe UI&#8217;, sans-serif;<br \/>\n      background: #0a0a0a;<br \/>\n      color: #ffffff;<br \/>\n      overflow-x: hidden;<br \/>\n      width: 100%;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .dashboard-wrapper {<br \/>\n      position: relative;<br \/>\n      width: 100%;<br \/>\n      min-height: 100%;<br \/>\n      background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0f0f0f 100%);<br \/>\n      overflow: hidden;<br \/>\n      border-radius: 12px;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .world-map-bg {<br \/>\n      position: absolute;<br \/>\n      top: 50%;<br \/>\n      left: 50%;<br \/>\n      transform: translate(-50%, -50%);<br \/>\n      width: 90%;<br \/>\n      height: 80%;<br \/>\n      opacity: 0.03;<br \/>\n      background-image: url(&#8220;data:image\/svg+xml,%3Csvg xmlns=&#8217;http:\/\/www.w3.org\/2000\/svg&#8217; viewBox=&#8217;0 0 1200 600&#8217;%3E%3Cpath fill=&#8217;%23ffffff&#8217; d=&#8217;M200,150 L220,140 L240,145 L260,150 L280,155 L300,150 L320,160 L340,155 L360,165 L380,160 L400,170 L420,165 L440,175 L460,180 L480,175 L500,185 L520,180 L540,190 L560,185 L580,195 L600,190 L620,200 L640,195 L660,205 L680,210 L700,205 L720,215 L740,220 L760,215 L780,225 L800,220 L820,230 L840,225 L860,235 L880,240 L900,235 L920,245 L940,240 L960,250 L980,245 L1000,255 M150,200 L170,210 L190,205 L210,215 L230,220 L250,215 L270,225 L290,230 L310,225 L330,235 L350,240 L370,235 L390,245 L410,250 L430,245 L450,255 L470,260 L490,255 L510,265 L530,270 L550,265 L570,275 L590,280 L610,275 L630,285 L650,290 L670,285 L690,295 L710,300 L730,295 L750,305 L770,310 L790,305 L810,315 L830,320 L850,315 L870,325 L890,330 L910,325 L930,335 L950,340 L970,335 L990,345&#8217;\/%3E%3C\/svg%3E&#8221;);<br \/>\n      background-size: contain;<br \/>\n      background-repeat: no-repeat;<br \/>\n      background-position: center;<br \/>\n      pointer-events: none;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .grid-overlay {<br \/>\n      position: absolute;<br \/>\n      top: 0;<br \/>\n      left: 0;<br \/>\n      width: 100%;<br \/>\n      height: 100%;<br \/>\n      background-image:<br \/>\n        linear-gradient(rgba(212, 175, 55, 0.03) 1px, transparent 1px),<br \/>\n        linear-gradient(90deg, rgba(212, 175, 55, 0.03) 1px, transparent 1px);<br \/>\n      background-size: 50px 50px;<br \/>\n      pointer-events: none;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .content-container {<br \/>\n      position: relative;<br \/>\n      z-index: 2;<br \/>\n      width: 100%;<br \/>\n      padding: 3rem 2rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .top-badges {<br \/>\n      display: flex;<br \/>\n      gap: 1rem;<br \/>\n      justify-content: center;<br \/>\n      flex-wrap: wrap;<br \/>\n      margin-bottom: 2rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .badge {<br \/>\n      padding: 0.4rem 1rem;<br \/>\n      background: rgba(212, 175, 55, 0.15);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.4);<br \/>\n      border-radius: 20px;<br \/>\n      font-size: 0.75rem;<br \/>\n      font-weight: 600;<br \/>\n      text-transform: uppercase;<br \/>\n      letter-spacing: 0.05em;<br \/>\n      color: #d4af37;<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      gap: 0.4rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .badge-dot {<br \/>\n      width: 6px;<br \/>\n      height: 6px;<br \/>\n      background: #d4af37;<br \/>\n      border-radius: 50%;<br \/>\n      animation: tcdash-pulse 2s ease-in-out infinite;<br \/>\n    }<\/p>\n<p>    @keyframes tcdash-pulse {<br \/>\n      0%, 100% { opacity: 1; transform: scale(1); }<br \/>\n      50% { opacity: 0.5; transform: scale(0.8); }<br \/>\n    }<\/p>\n<p>    @keyframes tcdash-fadeIn {<br \/>\n      0% { opacity: 0; transform: translateY(10px); }<br \/>\n      100% { opacity: 1; transform: translateY(0); }<br \/>\n    }<\/p>\n<p>    #tcdash-embed .hero-content {<br \/>\n      text-align: center;<br \/>\n      max-width: 1100px;<br \/>\n      margin: 0 auto 3rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .headline {<br \/>\n      font-size: clamp(2rem, 5vw, 3.5rem);<br \/>\n      font-weight: 800;<br \/>\n      line-height: 1.2;<br \/>\n      margin-bottom: 1.5rem;<br \/>\n      background: linear-gradient(135deg, #ffffff 0%, #d4af37 100%);<br \/>\n      -webkit-background-clip: text;<br \/>\n      -webkit-text-fill-color: transparent;<br \/>\n      background-clip: text;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .subtext {<br \/>\n      font-size: clamp(1rem, 2vw, 1.25rem);<br \/>\n      font-weight: 400;<br \/>\n      line-height: 1.6;<br \/>\n      color: #b0b0b0;<br \/>\n      margin-bottom: 0;<br \/>\n      max-width: 800px;<br \/>\n      margin-left: auto;<br \/>\n      margin-right: auto;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .dashboard-grid {<br \/>\n      display: grid;<br \/>\n      grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));<br \/>\n      gap: 1.5rem;<br \/>\n      max-width: 1400px;<br \/>\n      margin: 0 auto;<br \/>\n      padding: 0 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .dashboard-card {<br \/>\n      background: rgba(20, 20, 20, 0.8);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.2);<br \/>\n      border-radius: 12px;<br \/>\n      padding: 1.5rem;<br \/>\n      backdrop-filter: blur(10px);<br \/>\n      transition: all 0.3s ease;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .dashboard-card:hover {<br \/>\n      border-color: rgba(212, 175, 55, 0.5);<br \/>\n      transform: translateY(-2px);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .card-header {<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      justify-content: space-between;<br \/>\n      margin-bottom: 1rem;<br \/>\n      gap: 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .card-title {<br \/>\n      font-size: 0.9rem;<br \/>\n      font-weight: 600;<br \/>\n      text-transform: uppercase;<br \/>\n      letter-spacing: 0.05em;<br \/>\n      color: #d4af37;<br \/>\n      white-space: nowrap;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .live-indicator {<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      gap: 0.5rem;<br \/>\n      font-size: 0.75rem;<br \/>\n      color: #22c55e;<br \/>\n      white-space: nowrap;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .live-dot {<br \/>\n      width: 8px;<br \/>\n      height: 8px;<br \/>\n      background: #22c55e;<br \/>\n      border-radius: 50%;<br \/>\n      animation: tcdash-pulse 2s ease-in-out infinite;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .api-status {<br \/>\n      display: inline-block;<br \/>\n      padding: 0.3rem 0.8rem;<br \/>\n      background: rgba(34, 197, 94, 0.15);<br \/>\n      border: 1px solid rgba(34, 197, 94, 0.4);<br \/>\n      border-radius: 12px;<br \/>\n      font-size: 0.7rem;<br \/>\n      font-weight: 600;<br \/>\n      color: #22c55e;<br \/>\n      margin-left: 0.5rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .api-status.demo {<br \/>\n      background: rgba(251, 191, 36, 0.15);<br \/>\n      border-color: rgba(251, 191, 36, 0.4);<br \/>\n      color: #fbbf24;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .ticker-container {<br \/>\n      grid-column: 1 \/ -1;<br \/>\n      background: rgba(15, 15, 15, 0.95);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.3);<br \/>\n      border-radius: 12px;<br \/>\n      padding: 1.5rem;<br \/>\n      overflow: hidden;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .ticker-items {<br \/>\n      display: flex;<br \/>\n      gap: 3rem;<br \/>\n      animation: tcdash-scroll 30s linear infinite;<br \/>\n      will-change: transform;<br \/>\n    }<\/p>\n<p>    @keyframes tcdash-scroll {<br \/>\n      0% { transform: translateX(0); }<br \/>\n      100% { transform: translateX(-50%); }<br \/>\n    }<\/p>\n<p>    #tcdash-embed .ticker-item {<br \/>\n      display: flex;<br \/>\n      flex-direction: column;<br \/>\n      min-width: 150px;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .ticker-symbol {<br \/>\n      font-size: 1.1rem;<br \/>\n      font-weight: 700;<br \/>\n      margin-bottom: 0.3rem;<br \/>\n      color: #ffffff;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .ticker-price {<br \/>\n      font-size: 1.4rem;<br \/>\n      font-weight: 800;<br \/>\n      margin-bottom: 0.2rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .ticker-change {<br \/>\n      font-size: 0.85rem;<br \/>\n      font-weight: 600;<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      gap: 0.3rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .positive { color: #22c55e; }<br \/>\n    #tcdash-embed .negative { color: #ef4444; }<\/p>\n<p>    #tcdash-embed .news-ticker {<br \/>\n      background: rgba(212, 175, 55, 0.1);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.3);<br \/>\n      border-radius: 8px;<br \/>\n      padding: 1rem;<br \/>\n      overflow: hidden;<br \/>\n      margin-top: 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-scroll {<br \/>\n      display: flex;<br \/>\n      gap: 2rem;<br \/>\n      animation: tcdash-scroll 40s linear infinite;<br \/>\n      will-change: transform;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-item {<br \/>\n      white-space: nowrap;<br \/>\n      font-size: 0.9rem;<br \/>\n      color: #e0e0e0;<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      gap: 0.5rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-bullet {<br \/>\n      width: 4px;<br \/>\n      height: 4px;<br \/>\n      background: #d4af37;<br \/>\n      border-radius: 50%;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .sentiment-gauge { text-align: center; }<\/p>\n<p>    #tcdash-embed .gauge-container {<br \/>\n      position: relative;<br \/>\n      width: 200px;<br \/>\n      height: 100px;<br \/>\n      margin: 1rem auto;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .gauge-needle {<br \/>\n      position: absolute;<br \/>\n      bottom: 0;<br \/>\n      left: 50%;<br \/>\n      width: 3px;<br \/>\n      height: 80px;<br \/>\n      background: linear-gradient(to top, #d4af37, #f4d03f);<br \/>\n      transform-origin: bottom center;<br \/>\n      transform: translateX(-50%) rotate(-15deg);<br \/>\n      transition: transform 1s ease;<br \/>\n      border-radius: 2px;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .gauge-labels {<br \/>\n      display: flex;<br \/>\n      justify-content: space-between;<br \/>\n      margin-top: 0.5rem;<br \/>\n      font-size: 0.85rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .bearish-label { color: #ef4444; font-weight: 600; }<br \/>\n    #tcdash-embed .bullish-label { color: #22c55e; font-weight: 600; }<\/p>\n<p>    #tcdash-embed .sentiment-value {<br \/>\n      font-size: 1.8rem;<br \/>\n      font-weight: 800;<br \/>\n      color: #22c55e;<br \/>\n      margin-top: 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .pair-selector { margin-bottom: 1rem; position: relative; }<\/p>\n<p>    #tcdash-embed .selector-button {<br \/>\n      width: 100%;<br \/>\n      padding: 0.8rem 1rem;<br \/>\n      background: rgba(212, 175, 55, 0.1);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.3);<br \/>\n      border-radius: 8px;<br \/>\n      color: #ffffff;<br \/>\n      font-size: 0.95rem;<br \/>\n      font-weight: 600;<br \/>\n      cursor: pointer;<br \/>\n      display: flex;<br \/>\n      justify-content: space-between;<br \/>\n      align-items: center;<br \/>\n      transition: all 0.3s ease;<br \/>\n      gap: 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .selector-button:hover {<br \/>\n      background: rgba(212, 175, 55, 0.2);<br \/>\n      border-color: rgba(212, 175, 55, 0.5);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .arrow-icon { transition: transform 0.3s ease; flex: 0 0 auto; }<br \/>\n    #tcdash-embed .arrow-icon.open { transform: rotate(180deg); }<\/p>\n<p>    #tcdash-embed .dropdown-menu {<br \/>\n      position: absolute;<br \/>\n      top: calc(100% + 0.5rem);<br \/>\n      left: 0;<br \/>\n      right: 0;<br \/>\n      background: rgba(20, 20, 20, 0.98);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.3);<br \/>\n      border-radius: 8px;<br \/>\n      max-height: 300px;<br \/>\n      overflow-y: auto;<br \/>\n      z-index: 1000;<br \/>\n      display: none;<br \/>\n      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .dropdown-menu.open { display: block; }<\/p>\n<p>    #tcdash-embed .dropdown-item {<br \/>\n      padding: 0.8rem 1rem;<br \/>\n      color: #e0e0e0;<br \/>\n      font-size: 0.9rem;<br \/>\n      cursor: pointer;<br \/>\n      transition: all 0.2s ease;<br \/>\n      border-bottom: 1px solid rgba(212, 175, 55, 0.1);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .dropdown-item:last-child { border-bottom: none; }<br \/>\n    #tcdash-embed .dropdown-item:hover { background: rgba(212, 175, 55, 0.15); color: #ffffff; }<br \/>\n    #tcdash-embed .dropdown-item.selected { background: rgba(212, 175, 55, 0.2); color: #d4af37; font-weight: 700; }<\/p>\n<p>    #tcdash-embed .bull-bear-container {<br \/>\n      display: flex;<br \/>\n      justify-content: space-around;<br \/>\n      align-items: center;<br \/>\n      padding: 1rem 0;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .direction-active { opacity: 1; transform: scale(1); }<br \/>\n    #tcdash-embed .direction-inactive { opacity: 0.3; transform: scale(0.9); }<\/p>\n<p>    #tcdash-embed .icon-svg { width: 80px; height: 80px; margin-bottom: 0.5rem; }<br \/>\n    #tcdash-embed .icon-label { font-size: 0.9rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; }<br \/>\n    #tcdash-embed .bull-label { color: #22c55e; }<br \/>\n    #tcdash-embed .bear-label { color: #ef4444; }<\/p>\n<p>    #tcdash-embed .chart-preview {<br \/>\n      position: relative;<br \/>\n      height: 120px;<br \/>\n      display: flex;<br \/>\n      align-items: flex-end;<br \/>\n      justify-content: space-around;<br \/>\n      padding: 1rem 0;<br \/>\n      border-top: 1px solid rgba(212, 175, 55, 0.2);<br \/>\n      margin-top: 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .candlestick { width: 12px; display: flex; flex-direction: column; align-items: center; }<br \/>\n    #tcdash-embed .wick { width: 2px; background: #666; }<br \/>\n    #tcdash-embed .candle-body { width: 12px; border: 1px solid; }<br \/>\n    #tcdash-embed .green-candle .candle-body { background: #22c55e; border-color: #22c55e; }<br \/>\n    #tcdash-embed .red-candle .candle-body { background: #ef4444; border-color: #ef4444; }<\/p>\n<p>    #tcdash-embed .news-section-wrapper { position: relative; margin-top: 1.5rem; }<\/p>\n<p>    #tcdash-embed .news-grid {<br \/>\n      display: grid;<br \/>\n      grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));<br \/>\n      gap: 1.5rem;<br \/>\n      transition: opacity 0.3s ease;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-grid.transitioning { opacity: 0.5; }<\/p>\n<p>    #tcdash-embed .news-card {<br \/>\n      background: rgba(30, 30, 30, 0.6);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.2);<br \/>\n      border-radius: 10px;<br \/>\n      padding: 1.25rem;<br \/>\n      transition: all 0.3s ease;<br \/>\n      cursor: pointer;<br \/>\n      display: flex;<br \/>\n      flex-direction: column;<br \/>\n      gap: 0.75rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-card:hover {<br \/>\n      border-color: rgba(212, 175, 55, 0.5);<br \/>\n      transform: translateY(-3px);<br \/>\n      box-shadow: 0 4px 16px rgba(212, 175, 55, 0.1);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-meta { display: flex; justify-content: space-between; align-items: center; font-size: 0.8rem; }<br \/>\n    #tcdash-embed .news-source { color: #d4af37; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; }<br \/>\n    #tcdash-embed .news-time { color: #888; }<br \/>\n    #tcdash-embed .news-headline { font-size: 1.1rem; font-weight: 700; line-height: 1.4; color: #ffffff; margin: 0; }<br \/>\n    #tcdash-embed .news-snippet { font-size: 0.9rem; line-height: 1.5; color: #b0b0b0; margin: 0; flex-grow: 1; }<\/p>\n<p>    #tcdash-embed .news-sentiment {<br \/>\n      display: inline-block;<br \/>\n      padding: 0.4rem 0.9rem;<br \/>\n      border-radius: 6px;<br \/>\n      font-size: 0.8rem;<br \/>\n      font-weight: 600;<br \/>\n      text-transform: uppercase;<br \/>\n      letter-spacing: 0.05em;<br \/>\n      align-self: flex-start;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-sentiment.positive {<br \/>\n      background: rgba(34, 197, 94, 0.15);<br \/>\n      border: 1px solid rgba(34, 197, 94, 0.4);<br \/>\n      color: #22c55e;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-sentiment.negative {<br \/>\n      background: rgba(239, 68, 68, 0.15);<br \/>\n      border: 1px solid rgba(239, 68, 68, 0.4);<br \/>\n      color: #ef4444;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-nav-buttons {<br \/>\n      display: flex;<br \/>\n      justify-content: center;<br \/>\n      align-items: center;<br \/>\n      gap: 1rem;<br \/>\n      margin-top: 1.5rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-nav-btn {<br \/>\n      background: rgba(212, 175, 55, 0.15);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.4);<br \/>\n      color: #d4af37;<br \/>\n      width: 45px;<br \/>\n      height: 45px;<br \/>\n      border-radius: 50%;<br \/>\n      cursor: pointer;<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      justify-content: center;<br \/>\n      transition: all 0.3s ease;<br \/>\n      font-size: 1.2rem;<br \/>\n      font-weight: 700;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-nav-btn:hover:not(:disabled) {<br \/>\n      background: rgba(212, 175, 55, 0.3);<br \/>\n      border-color: rgba(212, 175, 55, 0.6);<br \/>\n      transform: scale(1.1);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-nav-btn:disabled { opacity: 0.3; cursor: not-allowed; }<br \/>\n    #tcdash-embed .news-page-indicator { font-size: 0.9rem; color: #b0b0b0; font-weight: 600; min-width: 80px; text-align: center; }<\/p>\n<p>    #tcdash-embed .news-slider-container { width: 100%; max-width: 400px; margin: 1.5rem auto 0; padding: 0 1rem; }<\/p>\n<p>    #tcdash-embed .news-slider {<br \/>\n      width: 100%;<br \/>\n      height: 8px;<br \/>\n      -webkit-appearance: none;<br \/>\n      appearance: none;<br \/>\n      background: rgba(212, 175, 55, 0.2);<br \/>\n      border-radius: 10px;<br \/>\n      outline: none;<br \/>\n      cursor: pointer;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-slider::-webkit-slider-thumb {<br \/>\n      -webkit-appearance: none;<br \/>\n      appearance: none;<br \/>\n      width: 24px;<br \/>\n      height: 24px;<br \/>\n      background: linear-gradient(135deg, #d4af37 0%, #f4d03f 100%);<br \/>\n      border-radius: 50%;<br \/>\n      cursor: pointer;<br \/>\n      box-shadow: 0 0 10px rgba(212, 175, 55, 0.5);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-slider::-moz-range-thumb {<br \/>\n      width: 24px;<br \/>\n      height: 24px;<br \/>\n      background: linear-gradient(135deg, #d4af37 0%, #f4d03f 100%);<br \/>\n      border-radius: 50%;<br \/>\n      border: none;<br \/>\n      cursor: pointer;<br \/>\n      box-shadow: 0 0 10px rgba(212, 175, 55, 0.5);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-overlay {<br \/>\n      position: fixed;<br \/>\n      top: 0;<br \/>\n      left: 0;<br \/>\n      width: 100%;<br \/>\n      height: 100%;<br \/>\n      background: rgba(0, 0, 0, 0.85);<br \/>\n      display: none;<br \/>\n      align-items: center;<br \/>\n      justify-content: center;<br \/>\n      z-index: 9999;<br \/>\n      padding: 2rem;<br \/>\n      backdrop-filter: blur(5px);<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-overlay.open { display: flex; }<\/p>\n<p>    #tcdash-embed .news-modal-content {<br \/>\n      background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%);<br \/>\n      border: 2px solid rgba(212, 175, 55, 0.4);<br \/>\n      border-radius: 16px;<br \/>\n      max-width: 700px;<br \/>\n      width: 100%;<br \/>\n      max-height: 85%;<br \/>\n      overflow-y: auto;<br \/>\n      padding: 2.5rem;<br \/>\n      position: relative;<br \/>\n      box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);<br \/>\n      animation: tcdash-modalSlideIn 0.3s ease;<br \/>\n    }<\/p>\n<p>    @keyframes tcdash-modalSlideIn {<br \/>\n      0% { opacity: 0; transform: translateY(-30px); }<br \/>\n      100% { opacity: 1; transform: translateY(0); }<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-close {<br \/>\n      position: absolute;<br \/>\n      top: 1.5rem;<br \/>\n      right: 1.5rem;<br \/>\n      background: rgba(212, 175, 55, 0.15);<br \/>\n      border: 1px solid rgba(212, 175, 55, 0.4);<br \/>\n      color: #d4af37;<br \/>\n      width: 40px;<br \/>\n      height: 40px;<br \/>\n      border-radius: 50%;<br \/>\n      cursor: pointer;<br \/>\n      display: flex;<br \/>\n      align-items: center;<br \/>\n      justify-content: center;<br \/>\n      font-size: 1.5rem;<br \/>\n      font-weight: 700;<br \/>\n      transition: all 0.3s ease;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-header {<br \/>\n      display: flex;<br \/>\n      justify-content: space-between;<br \/>\n      align-items: center;<br \/>\n      margin-bottom: 1.5rem;<br \/>\n      padding-right: 3rem;<br \/>\n      gap: 1rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-source {<br \/>\n      color: #d4af37;<br \/>\n      font-weight: 700;<br \/>\n      text-transform: uppercase;<br \/>\n      letter-spacing: 0.05em;<br \/>\n      font-size: 0.9rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-time { color: #888; font-size: 0.85rem; }<\/p>\n<p>    #tcdash-embed .news-modal-headline {<br \/>\n      font-size: 1.8rem;<br \/>\n      font-weight: 800;<br \/>\n      line-height: 1.3;<br \/>\n      color: #ffffff;<br \/>\n      margin-bottom: 1.5rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-sentiment {<br \/>\n      display: inline-block;<br \/>\n      padding: 0.5rem 1.2rem;<br \/>\n      border-radius: 8px;<br \/>\n      font-size: 0.85rem;<br \/>\n      font-weight: 700;<br \/>\n      text-transform: uppercase;<br \/>\n      letter-spacing: 0.05em;<br \/>\n      margin-bottom: 1.5rem;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-sentiment.positive {<br \/>\n      background: rgba(34, 197, 94, 0.2);<br \/>\n      border: 1px solid rgba(34, 197, 94, 0.5);<br \/>\n      color: #22c55e;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-sentiment.negative {<br \/>\n      background: rgba(239, 68, 68, 0.2);<br \/>\n      border: 1px solid rgba(239, 68, 68, 0.5);<br \/>\n      color: #ef4444;<br \/>\n    }<\/p>\n<p>    #tcdash-embed .news-modal-body { font-size: 1.05rem; line-height: 1.8; color: #d0d0d0; margin-bottom: 2rem; }<br \/>\n    #tcdash-embed .news-modal-tags { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-bottom: 1.5rem; }<br \/>\n    #tcdash-embed .news-tag { padding: 0.4rem 0.9rem; background: rgba(212, 175, 55, 0.15); border: 1px solid rgba(212, 175, 55, 0.3); border-radius: 20px; font-size: 0.8rem; font-weight: 600; color: #d4af37; }<\/p>\n<p>    #tcdash-embed .news-modal-footer {<br \/>\n      padding-top: 1.5rem;<br \/>\n      border-top: 1px solid rgba(212, 175, 55, 0.2);<br \/>\n      font-size: 0.85rem;<br \/>\n      color: #888;<br \/>\n      font-style: italic;<br \/>\n    }<\/p>\n<p>    @media (max-width: 768px) {<br \/>\n      #tcdash-embed .content-container { padding: 2rem 1rem; }<br \/>\n      #tcdash-embed .dashboard-grid { grid-template-columns: 1fr; }<br \/>\n      #tcdash-embed .ticker-container { grid-column: 1; }<br \/>\n      #tcdash-embed .gauge-container { width: 150px; height: 75px; }<br \/>\n      #tcdash-embed .gauge-needle { height: 60px; }<br \/>\n      #tcdash-embed .news-grid { grid-template-columns: 1fr; }<br \/>\n    }<\/p>\n<div class=\"dashboard-wrapper\">\n<div class=\"world-map-bg\"><\/div>\n<div class=\"grid-overlay\"><\/div>\n<p>    <!-- News Modal --><\/p>\n<div class=\"news-modal-overlay\" id=\"tcdash-news-modal-overlay\">\n<div class=\"news-modal-content\" id=\"tcdash-news-modal-content\">\n        <button class=\"news-modal-close\" id=\"tcdash-news-modal-close\">\u00d7<\/button><\/p>\n<div class=\"news-modal-header\">\n          <span class=\"news-modal-source\" id=\"tcdash-modal-source\">Reuters<\/span><br \/>\n          <span class=\"news-modal-time\" id=\"tcdash-modal-time\">2h ago<\/span>\n        <\/div>\n<h2 class=\"news-modal-headline\" id=\"tcdash-modal-headline\"><\/h2>\n<div class=\"news-modal-sentiment positive\" id=\"tcdash-modal-sentiment\">Bullish Impact<\/div>\n<div class=\"news-modal-body\" id=\"tcdash-modal-body\"><\/div>\n<div class=\"news-modal-tags\" id=\"tcdash-modal-tags\"><\/div>\n<div class=\"news-modal-footer\">\n          This is demo content. Add your News API key in the script to see real market news.\n        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"content-container\">\n<div class=\"top-badges\">\n<div class=\"badge\">\n<div class=\"badge-dot\"><\/div>\n<p> Live<\/p><\/div>\n<div class=\"badge\">AI Powered<\/div>\n<div class=\"badge\">Real-time<\/div>\n<div class=\"badge\">Pro Traders<\/div>\n<\/p><\/div>\n<div class=\"hero-content\">\n<h1 class=\"headline\" id=\"tcdash-headline\">Trade Ahead of the Crowd \u2013 Real-Time News &amp; Market Sentiment at Your Fingertips<\/h1>\n<p class=\"subtext\" id=\"tcdash-subtext\">Instantly identify bullish &amp; bearish signals in stocks and gold using AI-powered market analysis and breaking news insights.<\/p>\n<\/p><\/div>\n<div class=\"dashboard-grid\">\n        <!-- Ticker --><\/p>\n<div class=\"ticker-container\">\n<div class=\"card-header\">\n<div class=\"card-title\">\n              Live Market Data <span class=\"api-status demo\" id=\"tcdash-market-status\">Demo Mode<\/span>\n            <\/div>\n<div class=\"live-indicator\">\n<div class=\"live-dot\"><\/div>\n<p><span>Live<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"ticker-items\" id=\"tcdash-ticker-items\">\n            <!-- initial demo content (will be replaced if API key is set) -->\n          <\/div>\n<div class=\"news-ticker\">\n<div class=\"news-scroll\" id=\"tcdash-news-scroll\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>        <!-- Sentiment --><\/p>\n<div class=\"dashboard-card\">\n<div class=\"card-header\">\n<div class=\"card-title\">Market Sentiment<\/div>\n<\/div>\n<div class=\"sentiment-gauge\">\n<div class=\"gauge-container\">\n<div class=\"gauge-needle\" id=\"tcdash-gauge-needle\"><\/div>\n<\/p><\/div>\n<div class=\"gauge-labels\"><span class=\"bearish-label\">Bearish<\/span> <span class=\"bullish-label\">Bullish<\/span><\/div>\n<div class=\"sentiment-value\" id=\"tcdash-sentiment-value\">+68% Bullish<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>        <!-- Market Direction --><\/p>\n<div class=\"dashboard-card\">\n<div class=\"card-header\">\n<div class=\"card-title\">Market Direction<\/div>\n<\/div>\n<div class=\"pair-selector\">\n            <button class=\"selector-button\" id=\"tcdash-selector-button\"><br \/>\n              <span id=\"tcdash-selected-pair\">SPY &#8211; S&amp;P 500 ETF<\/span><\/p>\n<p>            <\/button><\/p>\n<div class=\"dropdown-menu\" id=\"tcdash-dropdown-menu\">\n<div class=\"dropdown-item\" data-pair=\"SPY\" data-name=\"SPY - S&amp;P 500 ETF\" data-trend=\"bull\">SPY &#8211; S&amp;P 500 ETF<\/div>\n<div class=\"dropdown-item\" data-pair=\"GOLD\" data-name=\"GOLD - Gold Futures\" data-trend=\"bull\">GOLD &#8211; Gold Futures<\/div>\n<div class=\"dropdown-item\" data-pair=\"USDX\" data-name=\"USDX - US Dollar Index\" data-trend=\"bear\">USDX &#8211; US Dollar Index<\/div>\n<div class=\"dropdown-item\" data-pair=\"AAPL\" data-name=\"AAPL - Apple Inc\" data-trend=\"bull\">AAPL &#8211; Apple Inc<\/div>\n<div class=\"dropdown-item\" data-pair=\"TSLA\" data-name=\"TSLA - Tesla Inc\" data-trend=\"bear\">TSLA &#8211; Tesla Inc<\/div>\n<div class=\"dropdown-item\" data-pair=\"MSFT\" data-name=\"MSFT - Microsoft\" data-trend=\"bull\">MSFT &#8211; Microsoft<\/div>\n<div class=\"dropdown-item\" data-pair=\"GOOGL\" data-name=\"GOOGL - Alphabet\" data-trend=\"bull\">GOOGL &#8211; Alphabet<\/div>\n<div class=\"dropdown-item\" data-pair=\"AMZN\" data-name=\"AMZN - Amazon\" data-trend=\"bull\">AMZN &#8211; Amazon<\/div>\n<div class=\"dropdown-item\" data-pair=\"NVDA\" data-name=\"NVDA - Nvidia\" data-trend=\"bull\">NVDA &#8211; Nvidia<\/div>\n<div class=\"dropdown-item\" data-pair=\"BTC\" data-name=\"BTC - Bitcoin\" data-trend=\"bull\">BTC &#8211; Bitcoin<\/div>\n<div class=\"dropdown-item\" data-pair=\"ETH\" data-name=\"ETH - Ethereum\" data-trend=\"bear\">ETH &#8211; Ethereum<\/div>\n<div class=\"dropdown-item\" data-pair=\"EUR\/USD\" data-name=\"EUR\/USD - Euro\/Dollar\" data-trend=\"bull\">EUR\/USD &#8211; Euro\/Dollar<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"bull-bear-container\" id=\"tcdash-bull-bear-display\"><\/div>\n<div class=\"chart-preview\" id=\"tcdash-chart-preview\"><\/div>\n<\/p><\/div>\n<p>        <!-- News Grid --><\/p>\n<div class=\"dashboard-card\" style=\"grid-column: 1 \/ -1\">\n<div class=\"card-header\">\n<div class=\"card-title\">\n              Breaking Market News <span class=\"api-status demo\" id=\"tcdash-news-status\">Demo Mode<\/span>\n            <\/div>\n<div class=\"live-indicator\">\n<div class=\"live-dot\"><\/div>\n<p><span>Live<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"news-section-wrapper\">\n<div class=\"news-grid\" id=\"tcdash-news-grid\"><\/div>\n<div class=\"news-nav-buttons\">\n              <button class=\"news-nav-btn\" id=\"tcdash-news-prev-btn\">\u2039<\/button><br \/>\n              <span class=\"news-page-indicator\" id=\"tcdash-news-page-indicator\">1 \/ 3<\/span><br \/>\n              <button class=\"news-nav-btn\" id=\"tcdash-news-next-btn\">\u203a<\/button>\n            <\/div>\n<div class=\"news-slider-container\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>    (function(){<br \/>\n      \/\/ ====== CONFIG (set your keys here) ======<br \/>\n      const config = {<br \/>\n        alpha_vantage_key: &#8220;&#8221;, \/\/ &lt;- put your Alpha Vantage key<br \/>\n        news_api_key: &quot;&quot;       \/\/<br \/>\n              fetch(`https:\/\/www.alphavantage.co\/query?function=GLOBAL_QUOTE&amp;symbol=${symbol}&amp;apikey=${config.alpha_vantage_key}`)<br \/>\n                .then(res =&gt; res.json())<br \/>\n            )<br \/>\n          );<\/p>\n<p>          return results.map((data, i) =&gt; {<br \/>\n            const quote = data &amp;&amp; data[&#8216;Global Quote&#8217;];<br \/>\n            if (!quote) return null;<br \/>\n            const price = parseFloat(quote[&#8217;05. price&#8217;]);<br \/>\n            const changePctStr = (quote[&#8217;10. change percent&#8217;] || &#8220;0&#8221;).replace(&#8220;%&#8221;,&#8221;&#8221;);<br \/>\n            const changePct = parseFloat(changePctStr);<br \/>\n            return {<br \/>\n              symbol: symbols[i],<br \/>\n              price: isFinite(price) ? price.toFixed(2) : &#8220;0.00&#8221;,<br \/>\n              change: isFinite(changePct) ? changePct : 0<br \/>\n            };<br \/>\n          }).filter(Boolean);<br \/>\n        } catch (e) {<br \/>\n          console.error(&#8220;Market data fetch error:&#8221;, e);<br \/>\n          return null;<br \/>\n        }<br \/>\n      }<\/p>\n<p>      async function fetchNewsArticles() {<br \/>\n        if (!config.news_api_key) return null;<br \/>\n        try {<br \/>\n          const res = await fetch(<br \/>\n            `https:\/\/newsapi.org\/v2\/everything?q=stock+market+OR+gold+OR+trading&amp;sortBy=publishedAt&amp;language=en&amp;pageSize=12&amp;apiKey=${config.news_api_key}`<br \/>\n          );<br \/>\n          const data = await res.json();<br \/>\n          return data &amp;&amp; data.articles ? data.articles : null;<br \/>\n        } catch (e) {<br \/>\n          console.error(&#8220;News fetch error:&#8221;, e);<br \/>\n          return null;<br \/>\n        }<br \/>\n      }<\/p>\n<p>      function updateMarketDisplay(data) {<br \/>\n        const tickerContainer = $(&#8220;tcdash-ticker-items&#8221;);<br \/>\n        const list = data &amp;&amp; data.length ? data : demoTickers;<\/p>\n<p>        let html = &#8220;&#8221;;<br \/>\n        list.forEach(item =&gt; {<br \/>\n          const isPositive = item.change &gt;= 0;<br \/>\n          const changeClass = isPositive ? &#8220;positive&#8221; : &#8220;negative&#8221;;<br \/>\n          const arrow = isPositive ? &#8220;\u25b2&#8221; : &#8220;\u25bc&#8221;;<br \/>\n          html += `<\/p>\n<div class=\"ticker-item\">\n<div class=\"ticker-symbol\">${item.symbol}<\/div>\n<div class=\"ticker-price ${changeClass}\">$${item.price}<\/div>\n<div class=\"ticker-change ${changeClass}\">${arrow} ${Math.abs(item.change).toFixed(2)}%<\/div>\n<\/p><\/div>\n<p>          `;<br \/>\n        });<\/p>\n<p>        tickerContainer.innerHTML = html + html; \/\/ duplicate for scrolling<\/p>\n<p>        if (data &amp;&amp; data.length) {<br \/>\n          $(&#8220;tcdash-market-status&#8221;).textContent = &#8220;Live Data&#8221;;<br \/>\n          $(&#8220;tcdash-market-status&#8221;).classList.remove(&#8220;demo&#8221;);<br \/>\n        }<br \/>\n      }<\/p>\n<p>      function updateNewsTicker(headlines) {<br \/>\n        const el = $(&#8220;tcdash-news-scroll&#8221;);<br \/>\n        const list = (headlines &amp;&amp; headlines.length) ? headlines : demoHeadlines;<br \/>\n        let html = &#8220;&#8221;;<br \/>\n        list.forEach(h =&gt; {<br \/>\n          html += `<\/p>\n<div class=\"news-item\"><span class=\"news-bullet\"><\/span>${h}<\/div>\n<p>`;<br \/>\n        });<br \/>\n        el.innerHTML = html + html;<br \/>\n      }<\/p>\n<p>      function getDefaultNewsArticles() {<br \/>\n        return [<br \/>\n          { title:&#8221;Fed Officials Signal Cautious Approach to Rate Cuts Amid Strong Labor Market&#8221;, description:&#8221;Federal Reserve policymakers indicated they are in no rush to lower interest rates, citing persistent inflation concerns and robust employment data&#8230;&#8221; },<br \/>\n          { title:&#8221;Gold Prices Surge to Six-Month High on Safe-Haven Demand&#8221;, description:&#8221;Spot gold climbed above $2,050 per ounce as investors seek refuge amid geopolitical tensions and inflation hedge opportunities&#8230;&#8221; },<br \/>\n          { title:&#8221;Tech Giants Report Better-Than-Expected Q4 Earnings&#8221;, description:&#8221;Major technology companies exceeded analyst expectations with strong revenue growth driven by AI investments and cloud computing demand&#8230;&#8221; },<br \/>\n          { title:&#8221;Dollar Weakens Against Major Currencies on Rate Cut Speculation&#8221;, description:&#8221;The US Dollar Index fell to its lowest level in three months as markets price in potential Federal Reserve rate cuts in the second half of the year&#8230;&#8221; },<br \/>\n          { title:&#8221;Central Banks Accelerate Gold Reserve Purchases in Q4&#8243;, description:&#8221;Global central banks purchased a record 400 tons of gold in the fourth quarter, reflecting concerns about currency volatility and economic uncertainty&#8230;&#8221; },<br \/>\n          { title:&#8221;S&amp;P 500 Reaches New All-Time High Driven by Tech Rally&#8221;, description:&#8221;The benchmark index closed at a record high as technology stocks led gains, with investors optimistic about corporate earnings and economic resilience&#8230;&#8221; },<br \/>\n          { title:&#8221;Oil Prices Stabilize After Recent Volatility&#8221;, description:&#8221;Crude oil futures found support around $75 per barrel as supply concerns balanced against demand uncertainties&#8230;&#8221; },<br \/>\n          { title:&#8221;Cryptocurrency Markets See Renewed Interest from Institutional Investors&#8221;, description:&#8221;Bitcoin and Ethereum gained ground as major investment firms announced new digital asset products&#8230;&#8221; }<br \/>\n        ];<br \/>\n      }<\/p>\n<p>      function updateNewsGrid(articles) {<br \/>\n        allNewsArticles = articles &amp;&amp; articles.length ? articles : getDefaultNewsArticles();<br \/>\n        currentNewsPage = 0;<\/p>\n<p>        if (articles &amp;&amp; articles.length) {<br \/>\n          $(&#8220;tcdash-news-status&#8221;).textContent = &#8220;Live Data&#8221;;<br \/>\n          $(&#8220;tcdash-news-status&#8221;).classList.remove(&#8220;demo&#8221;);<br \/>\n        }<\/p>\n<p>        renderNewsPage();<br \/>\n      }<\/p>\n<p>      function renderNewsPage() {<br \/>\n        const newsGrid = $(&#8220;tcdash-news-grid&#8221;);<br \/>\n        const sources = [&#8216;Reuters&#8217;,&#8217;Bloomberg&#8217;,&#8217;CNBC&#8217;,&#8217;Financial Times&#8217;,&#8217;Wall Street Journal&#8217;,&#8217;MarketWatch&#8217;];<\/p>\n<p>        const startIdx = currentNewsPage * NEWS_PER_PAGE;<br \/>\n        const pageArticles = allNewsArticles.slice(startIdx, startIdx + NEWS_PER_PAGE);<\/p>\n<p>        let html = &#8220;&#8221;;<br \/>\n        pageArticles.forEach((article, idx) =&gt; {<br \/>\n          const timeAgo = `${Math.floor(Math.random()*12)+1}h ago`;<br \/>\n          const sentiment = Math.random() &gt; 0.3 ? &#8220;positive&#8221; : &#8220;negative&#8221;;<br \/>\n          const sentimentText = sentiment === &#8220;positive&#8221; ? &#8220;Bullish Impact&#8221; : &#8220;Bearish Impact&#8221;;<br \/>\n          const source = sources[(startIdx + idx) % sources.length];<br \/>\n          const snippet = article.description ? (article.description.substring(0,150) + &#8220;&#8230;&#8221;) : &#8220;Market analysis and insights on this developing story&#8230;&#8221;;<br \/>\n          const articleIndex = startIdx + idx;<\/p>\n<p>          html += `<\/p>\n<div class=\"news-card\" data-article-index=\"${articleIndex}\">\n<div class=\"news-meta\">\n                <span class=\"news-source\">${source}<\/span><br \/>\n                <span class=\"news-time\">${timeAgo}<\/span>\n              <\/div>\n<h3 class=\"news-headline\">${article.title}<\/h3>\n<p class=\"news-snippet\">${snippet}<\/p>\n<div class=\"news-sentiment ${sentiment}\">${sentimentText}<\/div>\n<\/p><\/div>\n<p>          `;<br \/>\n        });<\/p>\n<p>        newsGrid.innerHTML = html;<\/p>\n<p>        newsGrid.querySelectorAll(&#8220;.news-card&#8221;).forEach(card =&gt; {<br \/>\n          card.addEventListener(&#8220;click&#8221;, () =&gt; {<br \/>\n            const i = parseInt(card.getAttribute(&#8220;data-article-index&#8221;), 10);<br \/>\n            openNewsModal(i);<br \/>\n          });<br \/>\n        });<\/p>\n<p>        updateNewsNavigation();<br \/>\n      }<\/p>\n<p>      function updateNewsNavigation() {<br \/>\n        const totalPages = Math.ceil(allNewsArticles.length \/ NEWS_PER_PAGE);<br \/>\n        $(&#8220;tcdash-news-prev-btn&#8221;).disabled = currentNewsPage === 0;<br \/>\n        $(&#8220;tcdash-news-next-btn&#8221;).disabled = currentNewsPage &gt;= totalPages &#8211; 1;<br \/>\n        $(&#8220;tcdash-news-page-indicator&#8221;).textContent = `${currentNewsPage + 1} \/ ${totalPages}`;<br \/>\n        $(&#8220;tcdash-news-slider&#8221;).max = Math.max(0, totalPages &#8211; 1);<br \/>\n        $(&#8220;tcdash-news-slider&#8221;).value = currentNewsPage;<br \/>\n      }<\/p>\n<p>      function openNewsModal(articleIndex) {<br \/>\n        const article = allNewsArticles[articleIndex];<br \/>\n        if (!article) return;<\/p>\n<p>        const sources = [&#8216;Reuters&#8217;,&#8217;Bloomberg&#8217;,&#8217;CNBC&#8217;,&#8217;Financial Times&#8217;,&#8217;Wall Street Journal&#8217;,&#8217;MarketWatch&#8217;];<br \/>\n        const source = sources[articleIndex % sources.length];<br \/>\n        const timeAgo = `${Math.floor(Math.random()*12)+1}h ago`;<br \/>\n        const sentiment = Math.random() &gt; 0.3 ? &#8220;positive&#8221; : &#8220;negative&#8221;;<br \/>\n        const sentimentText = sentiment === &#8220;positive&#8221; ? &#8220;Bullish Impact&#8221; : &#8220;Bearish Impact&#8221;;<\/p>\n<p>        const fullBody = article.description || (<br \/>\n          &#8220;This breaking news story explores the latest developments in the financial markets.nn&#8221; +<br \/>\n          &#8220;Analysts are monitoring the situation as it unfolds and traders are adjusting positions accordingly.&#8221;<br \/>\n        );<\/p>\n<p>        const tagOptions = [&#8216;Breaking&#8217;,&#8217;Market Impact&#8217;,&#8217;Trending&#8217;,&#8217;Analysis&#8217;,&#8217;Hot Topic&#8217;,&#8217;Price Action&#8217;,&#8217;Tech Sector&#8217;,&#8217;Gold&#8217;,&#8217;Forex&#8217;,&#8217;Stocks&#8217;];<br \/>\n        const tags = [tagOptions[Math.floor(Math.random()*tagOptions.length)], tagOptions[Math.floor(Math.random()*tagOptions.length)]];<\/p>\n<p>        $(&#8220;tcdash-modal-source&#8221;).textContent = source;<br \/>\n        $(&#8220;tcdash-modal-time&#8221;).textContent = timeAgo;<br \/>\n        $(&#8220;tcdash-modal-headline&#8221;).textContent = article.title;<br \/>\n        $(&#8220;tcdash-modal-sentiment&#8221;).textContent = sentimentText;<br \/>\n        $(&#8220;tcdash-modal-sentiment&#8221;).className = `news-modal-sentiment ${sentiment}`;<br \/>\n        $(&#8220;tcdash-modal-body&#8221;).textContent = fullBody;<br \/>\n        $(&#8220;tcdash-modal-tags&#8221;).innerHTML = tags.map(t =&gt; `<span class=\"news-tag\">${t}<\/span>`).join(&#8220;&#8221;);<\/p>\n<p>        $(&#8220;tcdash-news-modal-overlay&#8221;).classList.add(&#8220;open&#8221;);<br \/>\n        document.documentElement.style.overflow = &#8220;hidden&#8221;;<br \/>\n      }<\/p>\n<p>      function closeNewsModal() {<br \/>\n        $(&#8220;tcdash-news-modal-overlay&#8221;).classList.remove(&#8220;open&#8221;);<br \/>\n        document.documentElement.style.overflow = &#8220;&#8221;;<br \/>\n      }<\/p>\n<p>      function analyzeSentiment(headlines) {<br \/>\n        if (!headlines || !headlines.length) return 68;<br \/>\n        const pos = [&#8216;rally&#8217;,&#8217;surge&#8217;,&#8217;gain&#8217;,&#8217;high&#8217;,&#8217;growth&#8217;,&#8217;positive&#8217;,&#8217;up&#8217;,&#8217;bull&#8217;,&#8217;strong&#8217;];<br \/>\n        const neg = [&#8216;fall&#8217;,&#8217;drop&#8217;,&#8217;loss&#8217;,&#8217;low&#8217;,&#8217;decline&#8217;,&#8217;negative&#8217;,&#8217;down&#8217;,&#8217;bear&#8217;,&#8217;weak&#8217;];<br \/>\n        let score = 0;<br \/>\n        headlines.forEach(h =&gt; {<br \/>\n          const s = h.toLowerCase();<br \/>\n          pos.forEach(w =&gt; { if (s.includes(w)) score += 5; });<br \/>\n          neg.forEach(w =&gt; { if (s.includes(w)) score -= 5; });<br \/>\n        });<br \/>\n        return Math.max(-100, Math.min(100, score));<br \/>\n      }<\/p>\n<p>      function updateSentiment(score) {<br \/>\n        const needle = $(&#8220;tcdash-gauge-needle&#8221;);<br \/>\n        const value = $(&#8220;tcdash-sentiment-value&#8221;);<br \/>\n        const rotation = (score \/ 100) * 90;<br \/>\n        needle.style.transform = `translateX(-50%) rotate(${rotation}deg)`;<\/p>\n<p>        if (score &gt; 0) { value.textContent = `+${score}% Bullish`; value.style.color = &#8220;#22c55e&#8221;; }<br \/>\n        else if (score &lt; 0) { value.textContent = `${score}% Bearish`; value.style.color = &quot;#ef4444&quot;; }<br \/>\n        else { value.textContent = &quot;Neutral&quot;; value.style.color = &quot;#fbbf24&quot;; }<br \/>\n      }<\/p>\n<p>      \/\/ Market direction visuals<br \/>\n      const sentimentScores = { SPY:68, GOLD:75, USDX:-45, AAPL:72, TSLA:-38, MSFT:65, GOOGL:70, AMZN:62, NVDA:85, BTC:58, ETH:-42, &#039;EUR\/USD&#039;:55 };<br \/>\n      const chartPatterns = {<br \/>\n        SPY: [<br \/>\n          { type:&#039;green&#039;, wickTop:15, body:35, wickBottom:8 },<br \/>\n          { type:&#039;red&#039;, wickTop:20, body:25, wickBottom:12 },<br \/>\n          { type:&#039;green&#039;, wickTop:10, body:45, wickBottom:5 },<br \/>\n          { type:&#039;green&#039;, wickTop:12, body:38, wickBottom:7 },<br \/>\n          { type:&#039;red&#039;, wickTop:18, body:28, wickBottom:10 },<br \/>\n          { type:&#039;green&#039;, wickTop:8, body:42, wickBottom:6 }<br \/>\n        ],<br \/>\n        GOLD: [<br \/>\n          { type:&#039;green&#039;, wickTop:12, body:40, wickBottom:6 },<br \/>\n          { type:&#039;green&#039;, wickTop:8, body:38, wickBottom:5 },<br \/>\n          { type:&#039;red&#039;, wickTop:15, body:22, wickBottom:10 },<br \/>\n          { type:&#039;green&#039;, wickTop:10, body:45, wickBottom:7 },<br \/>\n          { type:&#039;green&#039;, wickTop:14, body:36, wickBottom:8 },<br \/>\n          { type:&#039;green&#039;, wickTop:9, body:48, wickBottom:5 }<br \/>\n        ],<br \/>\n        USDX: [<br \/>\n          { type:&#039;red&#039;, wickTop:18, body:32, wickBottom:8 },<br \/>\n          { type:&#039;red&#039;, wickTop:20, body:28, wickBottom:12 },<br \/>\n          { type:&#039;green&#039;, wickTop:12, body:25, wickBottom:10 },<br \/>\n          { type:&#039;red&#039;, wickTop:16, body:35, wickBottom:9 },<br \/>\n          { type:&#039;red&#039;, wickTop:22, body:30, wickBottom:11 },<br \/>\n          { type:&#039;red&#039;, wickTop:19, body:38, wickBottom:10 }<br \/>\n        ]<br \/>\n      };<\/p>\n<p>      function updateBullBearDisplay(trend) {<br \/>\n        const isBull = trend === &quot;bull&quot;;<br \/>\n        $(&quot;tcdash-bull-bear-display&quot;).innerHTML = `<\/p>\n<div class=\"bull-icon ${isBull ? 'direction-active' : 'direction-inactive'}\">\n<div class=\"icon-label bull-label\">Bull ${isBull ? &#8216;\u2713&#8217; : &#8221;}<\/div>\n<\/p><\/div>\n<div class=\"bear-icon ${!isBull ? 'direction-active' : 'direction-inactive'}\">\n<div class=\"icon-label bear-label\">Bear ${!isBull ? &#8216;\u2713&#8217; : &#8221;}<\/div>\n<\/p><\/div>\n<p>        `;<br \/>\n      }<\/p>\n<p>      function updateChartDisplay(pairSymbol) {<br \/>\n        const pattern = chartPatterns[pairSymbol] || chartPatterns.SPY;<br \/>\n        $(&#8220;tcdash-chart-preview&#8221;).innerHTML = pattern.map(c =&gt; `<\/p>\n<div class=\"candlestick ${c.type === 'green' ? 'green-candle' : 'red-candle'}\">\n<div class=\"wick\"><\/div>\n<div class=\"candle-body\"><\/div>\n<div class=\"wick\"><\/div>\n<\/p><\/div>\n<p>        `).join(&#8220;&#8221;);<br \/>\n      }<\/p>\n<p>      function initializeMarketDirection() {<br \/>\n        const selectorButton = $(&#8220;tcdash-selector-button&#8221;);<br \/>\n        const dropdownMenu = $(&#8220;tcdash-dropdown-menu&#8221;);<br \/>\n        const arrowIcon = $(&#8220;tcdash-arrow-icon&#8221;);<br \/>\n        const selectedPairText = $(&#8220;tcdash-selected-pair&#8221;);<\/p>\n<p>        selectorButton.addEventListener(&#8220;click&#8221;, (e) =&gt; {<br \/>\n          e.stopPropagation();<br \/>\n          dropdownMenu.classList.toggle(&#8220;open&#8221;);<br \/>\n          arrowIcon.classList.toggle(&#8220;open&#8221;);<br \/>\n        });<\/p>\n<p>        document.addEventListener(&#8220;click&#8221;, () =&gt; {<br \/>\n          dropdownMenu.classList.remove(&#8220;open&#8221;);<br \/>\n          arrowIcon.classList.remove(&#8220;open&#8221;);<br \/>\n        });<\/p>\n<p>        const items = dropdownMenu.querySelectorAll(&#8220;.dropdown-item&#8221;);<br \/>\n        items.forEach(item =&gt; {<br \/>\n          item.addEventListener(&#8220;click&#8221;, (e) =&gt; {<br \/>\n            e.stopPropagation();<br \/>\n            items.forEach(i =&gt; i.classList.remove(&#8220;selected&#8221;));<br \/>\n            item.classList.add(&#8220;selected&#8221;);<\/p>\n<p>            const pairSymbol = item.getAttribute(&#8220;data-pair&#8221;);<br \/>\n            const pairName = item.getAttribute(&#8220;data-name&#8221;);<br \/>\n            const trend = item.getAttribute(&#8220;data-trend&#8221;);<\/p>\n<p>            selectedPairText.textContent = pairName;<br \/>\n            updateBullBearDisplay(trend);<br \/>\n            updateChartDisplay(pairSymbol);<br \/>\n            updateSentiment(sentimentScores[pairSymbol] || 0);<\/p>\n<p>            dropdownMenu.classList.remove(&#8220;open&#8221;);<br \/>\n            arrowIcon.classList.remove(&#8220;open&#8221;);<br \/>\n          });<br \/>\n        });<\/p>\n<p>        if (items[0]) items[0].classList.add(&#8220;selected&#8221;);<br \/>\n        updateBullBearDisplay(&#8220;bull&#8221;);<br \/>\n        updateChartDisplay(&#8220;SPY&#8221;);<br \/>\n      }<\/p>\n<p>      function initializeNewsNavigation() {<br \/>\n        $(&#8220;tcdash-news-modal-close&#8221;).addEventListener(&#8220;click&#8221;, closeNewsModal);<br \/>\n        $(&#8220;tcdash-news-modal-overlay&#8221;).addEventListener(&#8220;click&#8221;, (e) =&gt; {<br \/>\n          if (e.target === $(&#8220;tcdash-news-modal-overlay&#8221;)) closeNewsModal();<br \/>\n        });<\/p>\n<p>        $(&#8220;tcdash-news-prev-btn&#8221;).addEventListener(&#8220;click&#8221;, () =&gt; {<br \/>\n          if (currentNewsPage &gt; 0) {<br \/>\n            currentNewsPage&#8211;;<br \/>\n            $(&#8220;tcdash-news-grid&#8221;).classList.add(&#8220;transitioning&#8221;);<br \/>\n            setTimeout(() =&gt; { renderNewsPage(); $(&#8220;tcdash-news-grid&#8221;).classList.remove(&#8220;transitioning&#8221;); }, 150);<br \/>\n          }<br \/>\n        });<\/p>\n<p>        $(&#8220;tcdash-news-next-btn&#8221;).addEventListener(&#8220;click&#8221;, () =&gt; {<br \/>\n          const totalPages = Math.ceil(allNewsArticles.length \/ NEWS_PER_PAGE);<br \/>\n          if (currentNewsPage  { renderNewsPage(); $(&#8220;tcdash-news-grid&#8221;).classList.remove(&#8220;transitioning&#8221;); }, 150);<br \/>\n          }<br \/>\n        });<\/p>\n<p>        $(&#8220;tcdash-news-slider&#8221;).addEventListener(&#8220;input&#8221;, (e) =&gt; {<br \/>\n          const newPage = parseInt(e.target.value, 10);<br \/>\n          if (newPage !== currentNewsPage) {<br \/>\n            currentNewsPage = newPage;<br \/>\n            $(&#8220;tcdash-news-grid&#8221;).classList.add(&#8220;transitioning&#8221;);<br \/>\n            setTimeout(() =&gt; { renderNewsPage(); $(&#8220;tcdash-news-grid&#8221;).classList.remove(&#8220;transitioning&#8221;); }, 150);<br \/>\n          }<br \/>\n        });<br \/>\n      }<\/p>\n<p>      async function initializeAPIs() {<br \/>\n        \/\/ Always render demo first (fast)<br \/>\n        updateMarketDisplay(null);<br \/>\n        updateNewsTicker(null);<br \/>\n        updateNewsGrid(null);<\/p>\n<p>        \/\/ Market<br \/>\n        if (config.alpha_vantage_key) {<br \/>\n          const data = await fetchMarketData();<br \/>\n          if (data &amp;&amp; data.length) {<br \/>\n            updateMarketDisplay(data);<br \/>\n            clearInterval(marketDataInterval);<br \/>\n            marketDataInterval = setInterval(async () =&gt; {<br \/>\n              const d = await fetchMarketData();<br \/>\n              if (d &amp;&amp; d.length) updateMarketDisplay(d);<br \/>\n            }, 60000);<br \/>\n          }<br \/>\n        }<\/p>\n<p>        \/\/ News<br \/>\n        if (config.news_api_key) {<br \/>\n          const articles = await fetchNewsArticles();<br \/>\n          if (articles &amp;&amp; articles.length) {<br \/>\n            updateNewsGrid(articles);<br \/>\n            const headlines = articles.map(a =&gt; a.title);<br \/>\n            updateNewsTicker(headlines);<br \/>\n            updateSentiment(analyzeSentiment(headlines));<\/p>\n<p>            clearInterval(newsInterval);<br \/>\n            newsInterval = setInterval(async () =&gt; {<br \/>\n              const a = await fetchNewsArticles();<br \/>\n              if (a &amp;&amp; a.length) {<br \/>\n                updateNewsGrid(a);<br \/>\n                const h = a.map(x =&gt; x.title);<br \/>\n                updateNewsTicker(h);<br \/>\n                updateSentiment(analyzeSentiment(h));<br \/>\n              }<br \/>\n            }, 300000);<br \/>\n          }<br \/>\n        }<br \/>\n      }<\/p>\n<p>      \/\/ Boot<br \/>\n      initializeMarketDirection();<br \/>\n      initializeNewsNavigation();<br \/>\n      initializeAPIs();<br \/>\n    })();<\/p>\n<\/div>\n<p><!-- \/Trading Dashboard Embed -->\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<footer id=\"ePCz2OagoQa0_ePCz2OagoQa0\" class=\"brz-footer brz-css-d-sectionfooter-section brz-css-is3e7i\" data-brz-custom-id=\"ePCz2OagoQa0\">\n<div class=\"brz-bg\">\n<div class=\"brz-bg-color\"><\/div>\n<\/div>\n<div class=\"brz-container brz-css-d-sectionfooter-container brz-css-1an4265\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-pt8n1a brz-wrapper\">\n<div class=\"brz-rich-text brz-rich-text__custom brz-css-d-richtext brz-css-wxckmj\" data-brz-custom-id=\"yfStts37wyqJ\">\n<div data-brz-translate-text=\"1\">\n<p class=\"brz-text-lg-justify brz-tp-lg-empty brz-ff-lato brz-ft-google brz-fs-lg-11 brz-fss-lg-px brz-fw-lg-400 brz-ls-lg-0 brz-lh-lg-1_4 brz-vfw-lg-400 brz-fwdth-lg-100 brz-fsft-lg-0 brz-css-cf3Ji\" data-generated-css=\"brz-css-e7IKv\" data-uniq-id=\"i2FzV\"><strong class=\"brz-cp-color8\">Disclaimer:<\/strong><span class=\"brz-cp-color8\"> Investor Connect Edge provides educational content only. Nothing here is financial, investment, trading, legal, or tax advice. Markets carry risk. You are fully responsible for all trading and investment decisions and outcomes.<\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"brz-row__container brz-css-d-row-row brz-css-revc0s\" data-brz-custom-id=\"yrsOhru70Dnt\">\n<div class=\"brz-bg\"><\/div>\n<div class=\"brz-row brz-css-d-row-container brz-css-tv96uz\">\n<div class=\"brz-columns brz-css-d-column-column brz-css-1it9zkj\" data-brz-custom-id=\"anEAN1DpQh4m\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-1sectsz\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-od5jgg brz-wrapper\">\n<div class=\"brz-image brz-css-d-image-p3s1pja5wbxn-parent brz-css-3dp6aw\" data-brz-custom-id=\"p3S1PjA5Wbxn\"><img decoding=\"async\" class=\"brz-img\" src=\"https:\/\/invescoe.com\/wp-content\/uploads\/brizy\/imgs\/cropped-ChatGPT-Image-Oct-2-2025-05_06_10-PM-71x71x0x11x71x49x1759396226.png\" loading=\"lazy\" title=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"brz-columns brz-css-d-column-column brz-css-z7e25p\" data-brz-custom-id=\"ebo4aA4h5ht7\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-1ci9c95\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-1xougsn brz-wrapper\">\n<div class=\"brz-rich-text brz-rich-text__custom brz-css-d-richtext brz-css-1tk2fy5\" data-brz-custom-id=\"gjZ8erdfuzNl\">\n<div data-brz-translate-text=\"1\">\n<p class=\"brz-fsft-lg-0 brz-fwdth-lg-100 brz-vfw-lg-400 brz-lh-lg-1 brz-ls-lg-0 brz-fw-lg-700 brz-fss-lg-px brz-fs-lg-11 brz-ft-google brz-ff-comfortaa brz-tp-lg-empty brz-text-sm-center brz-text-xs-center brz-text-lg-center brz-tp-sm-empty brz-fs-sm-12 brz-fss-sm-px brz-fw-sm-300 brz-ls-sm-0 brz-lh-sm-1_3 brz-vfw-sm-400 brz-fwdth-sm-100 brz-fsft-sm-0 brz-fss-xs-px brz-fw-xs-300 brz-ls-xs-0 brz-lh-xs-1_7 brz-vfw-xs-400 brz-fwdth-xs-100 brz-fsft-xs-0 brz-tp-xs-empty brz-fs-xs-12 brz-css-qUsIL\" data-generated-css=\"brz-css-hGmGd\" data-uniq-id=\"wiSGZ\"><strong class=\"brz-uppercase-true brz-bold-true brz-capitalize-on\">Investor Connect Edge. All rights reserved.&nbsp;<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"brz-columns brz-css-d-column-column brz-css-1ruu6bq\" data-brz-custom-id=\"fSCeBuZ3_iGk\">\n<div class=\"brz-column__items brz-css-d-column-bg brz-css-1caoeir\">\n<div class=\"brz-wrapper-clone brz-flex-xs-wrap brz-css-d-cloneable brz-css-lmbwv4\" data-brz-custom-id=\"mjb4yaDkjfvm\">\n<div class=\"brz-icon__container\" data-brz-custom-id=\"sCw9haqIN6U9\"><a class=\"brz-a\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\" data-brz-link-type=\"external\"><span class=\"brz-icon brz-span brz-css-d-icon-icon brz-css-14e5eqa\"><\/span><\/a><\/div>\n<div class=\"brz-icon__container\" data-brz-custom-id=\"pQ1QgvViVmUX\"><a class=\"brz-a\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\" data-brz-link-type=\"external\"><span class=\"brz-icon brz-span brz-css-d-icon-icon brz-css-emzaw2\"><\/span><\/a><\/div>\n<div class=\"brz-icon__container\" data-brz-custom-id=\"lyqvTy3SmCXd\"><a class=\"brz-a\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\" data-brz-link-type=\"external\"><span class=\"brz-icon brz-span brz-css-d-icon-icon brz-css-19kxh6d\"><\/span><\/a><\/div>\n<div class=\"brz-icon__container\" data-brz-custom-id=\"l2g363VBwDzZ\"><a class=\"brz-a\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\" data-brz-link-type=\"external\"><span class=\"brz-icon brz-span brz-css-d-icon-icon brz-css-6tr0ez\"><\/span><\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/footer><\/div>\n<p><!-- version:1766394136 --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sign inGET STARTED&nbsp; Sign inGET STARTED&nbsp; \/* EVERYTHING scoped to #tcdash-embed to avoid breaking WP theme *\/ #tcdash-embed, #tcdash-embed * { box-sizing: border-box; } #tcdash-embed { margin: 0; padding: 0; font-family: &#8216;Inter&#8217;, -apple-system, BlinkMacSystemFont, &#8216;Segoe UI&#8217;, sans-serif; background: #0a0a0a; color: #ffffff; overflow-x: hidden; width: 100%; } #tcdash-embed .dashboard-wrapper { position: relative; width: 100%; min-height: 100%; [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":1734,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"brizy-blank-template.php","meta":{"footnotes":""},"categories":[17],"tags":[50],"class_list":["post-1842","page","type-page","status-publish","has-post-thumbnail","hentry","category-apps","tag-tiny_course"],"blocksy_meta":[],"brizy_media":[{"id":1562,"url":"https:\/\/invescoe.com\/wp-content\/uploads\/2025\/10\/cropped-ChatGPT-Image-Oct-2-2025-05_06_10-PM.png","name":"cropped-ChatGPT-Image-Oct-2-2025-05_06_10-PM.png","meta":{"brizy_attachment_uid":"wp-d8be17047aefd8cd60aca9d0a14f1294.png","brizy_post_uid":["8b8306d3027ad6d798ddfd91af62bfd5","4fe342c50eab6dc3659b80c203b192d5"]}}],"_links":{"self":[{"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/pages\/1842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/comments?post=1842"}],"version-history":[{"count":10,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/pages\/1842\/revisions"}],"predecessor-version":[{"id":1861,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/pages\/1842\/revisions\/1861"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/media\/1734"}],"wp:attachment":[{"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/media?parent=1842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/categories?post=1842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/invescoe.com\/bn\/wp-json\/wp\/v2\/tags?post=1842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}