<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://bright-portmantage.com/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/about/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/contact/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/careers/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/licenses/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/security/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/aml-kyc/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/risks/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/complaints/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/privacy/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/terms/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/fraud-warning/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/fees/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/deposit-withdrawal/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/withdrawal-policy/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/getting-started/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/crypto-basics/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/faq/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/articles/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/products/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/products/stocks/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/products/crypto/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/products/ai/</loc>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>https://bright-portmantage.com/products/personal-support/</loc>
    <changefreq>weekly</changefreq>
  </url>
</urlset>
<style>.tv-ticker-wrapper {
    padding-top: 10px;
    position: relative;
    overflow: hidden;
    width: 100%;
    height: 70px;
    z-index: 1;
}

/* large item strip is taller — fixed 70px clipped the TradingView tape */
.tv-ticker-wrapper[data-tv-item-size="normal"] {
    height: 118px;
}

/* hide-chart removes the sparkline row — shrink the wrapper so the tape does
   not leave an empty band under the prices (host is block-size:100%). */
.tv-ticker-wrapper[data-tv-hide-chart="true"] {
    height: 60px;
}

.tv-ticker-wrapper[data-tv-hide-chart="true"][data-tv-item-size="normal"] {
    height: 60px;
}

.tv-ticker-wrapper[data-tv-theme="dark"] {
    color-scheme: dark;
}

/* Opaque strip only when transparency is off (TradingView palette / page bleed). */
.tv-ticker-wrapper[data-tv-theme="dark"][data-tv-transparent="false"] {
    background: #131722;
}

.tv-ticker-wrapper[data-tv-theme="dark"][data-tv-transparent="true"] {
    background: transparent;
}

.tv-ticker-wrapper[data-tv-theme="light"] {
    color-scheme: light;
}

.tv-ticker-wrapper[data-tv-theme="light"][data-tv-transparent="false"] {
    background: #ffffff;
}

.tv-ticker-wrapper[data-tv-theme="light"][data-tv-transparent="true"] {
    background: transparent;
}

.tv-ticker-wrapper[data-tv-theme="dark"] tv-ticker-tape {
    color-scheme: dark;
}

.tv-ticker-wrapper[data-tv-theme="light"] tv-ticker-tape {
    color-scheme: light;
}

.tv-ticker-host {
    position: relative;
    z-index: 1;
    display: block;
    width: calc(100% + 40px);
    margin-left: -2px;
    height: 100%;
    opacity: 0;
    transition: opacity 0.35s ease;
}

.tv-ticker-wrapper.is-ready .tv-ticker-host {
    opacity: 1;
}

.tv-ticker-placeholder {
    position: absolute;
    inset: 10px 56px 10px 0;
    z-index: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    border-radius: 14px;
    background: rgba(15, 23, 42, 0.28);
    backdrop-filter: blur(4px);
    transition: opacity 0.3s ease;
}

.tv-ticker-wrapper[data-tv-transparent="true"] .tv-ticker-placeholder {
    background: transparent;
    backdrop-filter: none;
}

/* keep the [data-tv-transparent="true"] rule above winning — only paint the
   light placeholder when transparency is off. */
.tv-ticker-wrapper[data-tv-theme="light"][data-tv-transparent="false"] .tv-ticker-placeholder {
    background: rgba(255, 255, 255, 0.6);
}

.tv-ticker-spinner {
    width: 14px;
    height: 14px;
    border-radius: 999px;
    border: 2px solid rgba(203, 213, 225, 0.24);
    border-top-color: rgba(226, 232, 240, 0.95);
    animation: tvTickerSpinner 0.8s linear infinite;
}

.tv-ticker-wrapper[data-tv-theme="light"] .tv-ticker-spinner {
    border: 2px solid rgba(15, 23, 42, 0.16);
    border-top-color: rgba(15, 23, 42, 0.75);
}

.tv-ticker-loading-text {
    font-size: 12px;
    line-height: 1;
    color: rgba(226, 232, 240, 0.78);
    letter-spacing: 0.04em;
}

.tv-ticker-wrapper[data-tv-theme="light"] .tv-ticker-loading-text {
    color: rgba(15, 23, 42, 0.65);
}

.tv-ticker-wrapper.is-ready .tv-ticker-placeholder {
    opacity: 0;
    pointer-events: none;
}

@keyframes tvTickerSpinner {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

.tv-ticker-wrapper::after {
    content: "";
    position: absolute;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 27px;
    background: transparent;
    z-index: 10;
}

.tv-ticker-blocker {
    position: absolute;
    inset: 0;
    z-index: 20;
    background: transparent;
    pointer-events: all;
    cursor: default;
}

.tv-ticker-overlay {
    position: absolute;
    right: -3px;
    bottom: 2px;
    z-index: 999;
    display: flex;
    align-items: center;
    background: #121037;
    border-radius: 50%;
    overflow: hidden;
}

.tv-ticker-overlay img {
    height: 40px;
    width: auto;
    display: block;
}</style>
<script>(() => {
  // Locale tape bundles may 404; retry with /w/en/.
  const TV_TAPE_FALLBACK_RE =
    /^https:\/\/widgets\.tradingview-widget\.com\/w\/([a-z]{2})\/(tv-ticker-tape\.js)(.*)$/i;

  const tradingViewTapeEnFallback = (url) => {
    const m = url.match(TV_TAPE_FALLBACK_RE);
    if (!m || (m[1] && m[1].toLowerCase() === "en")) return "";
    return `https://widgets.tradingview-widget.com/w/en/${m[2]}${m[3] || ""}`;
  };

  const scriptSelectorFor = (url) =>
    `script[data-tv-ticker-script="${CSS?.escape ? CSS.escape(url) : url}"]`;

  const revealQueues = new Map();

  const flushReveals = (url) => {
    const queue = revealQueues.get(url);
    if (!queue) return;
    while (queue.length > 0) {
      queue.shift()();
    }
  };

  const attachTapeAttempt = (url) => {
    const script = document.createElement("script");
    script.type = "module";
    script.async = true;
    script.src = url;
    script.dataset.tvTickerScript = url;
    script.addEventListener(
      "load",
      () => {
        script.dataset.loaded = "true";
        flushReveals(url);
      },
      { once: true }
    );
    script.addEventListener(
      "error",
      () => {
        script.remove();
        const fb = tradingViewTapeEnFallback(url);
        if (fb) {
          const queue = revealQueues.get(url) || [];
          revealQueues.delete(url);
          revealQueues.set(fb, (revealQueues.get(fb) || []).concat(queue));
          attachTapeAttempt(fb);
        } else {
          revealQueues.delete(url);
        }
      },
      { once: true }
    );
    document.head.appendChild(script);
  };

  const loadTradingViewTape = (url, onLoaded) => {
    if (!revealQueues.has(url)) revealQueues.set(url, []);
    revealQueues.get(url).push(onLoaded);

    const existing =
      typeof document.querySelector === "function"
        ? document.querySelector(scriptSelectorFor(url))
        : null;

    if (existing instanceof HTMLScriptElement) {
      if (existing.dataset.loaded === "true") {
        flushReveals(url);
        return;
      }
      existing.addEventListener(
        "load",
        () => flushReveals(url),
        { once: true }
      );
      return;
    }

    attachTapeAttempt(url);
  };

  const mountTicker = (root) => {
    if (root.dataset.chartTickerReady === "1") return;

    const host = root.querySelector("[data-chart-ticker-host]");
    const scriptSrc = root.dataset.tvScript;
    const symbols = root.dataset.tvSymbols;

    if (!(host instanceof HTMLElement) || !scriptSrc || !symbols) return;

    root.dataset.chartTickerReady = "1";

    const themeAttr = root.dataset.tvTheme || "dark";

    const ticker = document.createElement("tv-ticker-tape");
    ticker.setAttribute("symbols", symbols);
    ticker.setAttribute("item-size", root.dataset.tvItemSize || "compact");
    ticker.setAttribute("theme", themeAttr);
    ticker.style.colorScheme = themeAttr;

    if (root.dataset.tvTransparent === "true") {
      ticker.setAttribute("transparent", "");
    }

    if (root.dataset.tvHideChart === "true") {
      ticker.setAttribute("hide-chart", "");
    }

    host.replaceChildren(ticker);

    const revealTicker = () => {
      window.setTimeout(() => {
        root.classList.add("is-ready");
      }, 180);
    };

    if (window.customElements?.get("tv-ticker-tape")) {
      revealTicker();
      return;
    }

    loadTradingViewTape(scriptSrc, revealTicker);
  };

  const loadTickers = () => {
    window.setTimeout(() => {
      document.querySelectorAll("[data-chart-ticker]").forEach((el) => {
        if (el instanceof HTMLElement) mountTicker(el);
      });
    }, 1200);
  };

  if (document.readyState === "complete") {
    loadTickers();
    return;
  }

  window.addEventListener("load", loadTickers, { once: true });
})();</script>
<div
    class="tv-ticker-wrapper"
    data-beacon-component="chart-ticker"
    data-chart-ticker
    data-tv-script="https://widgets.tradingview-widget.com/w/en/tv-ticker-tape.js"
    data-tv-symbols="FX_IDC:USDCAD,FX_IDC:EURCAD,FX_IDC:GBPCAD,FX_IDC:AUDCAD,FX_IDC:CADJPY,OANDA:XAUUSD,BINANCE:BTCUSDT,BINANCE:ETHUSDT,BINANCE:SOLUSDT"
    data-tv-item-size="compact"
    data-tv-theme="light"
    data-tv-transparent="false"
    data-tv-hide-chart="true">
    <div class="tv-ticker-host" data-chart-ticker-host aria-hidden="true"></div>
    <div class="tv-ticker-placeholder" aria-hidden="true">
        <span class="tv-ticker-spinner"></span>
        <span class="tv-ticker-loading-text">Loading...</span>
    </div>
    <div class="tv-ticker-blocker"></div>
</div>
