// QTG — Events & Expos shared data + helpers (new build)
// Single source of truth for upcoming + past events, loaded by the main
// events page AND each per-event recap page. Group-level (QTG) — no per-brand
// attribution. Lives at project root so <image-slot> sidecars persist.

// ── UPCOMING (authored order; soonest first) ──────────────────
const UPCOMING = [
  { slug:'ifx-cyprus-2026', name:'iFX EXPO Cyprus',
    date:'16–18 Jun 2026', start:'2026-06-16', month:'JUN 2026', city:'Limassol', country:'CY',
    role:'Attending', booth:'Booth TBA', logo:'assets/ifx-expo-logo.png', logoFit:'contain', logoLight:true, featured:true, url:'https://www.ifxexpo.com/',
    note:'The industry’s flagship Cyprus gathering — three days on the Limassol floor for demos, panels, and operator conversations across the QTG suite.' },
  { slug:'prop-firm-expo-2026', name:'Prop Firm Expo',
    date:'27 Jun 2026', start:'2026-06-27', month:'JUN 2026', city:'London', country:'GB',
    role:'Exhibiting · Speaking', booth:'Booth TBA', logo:'assets/prop-firm-expo-logo.png', url:'https://propfirmexpo.com/', brands:['QTG','YourPropFirm','QuantSentry'], panel:'Day 2 · 14:00',
    note:'The dedicated prop-firm gathering — we’ll be on the floor talking infrastructure, risk, and what it takes to launch and scale a firm.' },
  { slug:'forex-expo-dubai-2026', name:'Forex Expo Dubai',
    date:'22–23 Sep 2026', start:'2026-09-22', month:'SEP 2026', city:'Dubai', country:'AE',
    role:'Exhibiting', booth:'Booth TBA', logo:'assets/forex-expo-dubai-logo.png', logoFit:'contain', logoLight:true, url:'https://theforexexpo.com/dubai/', brands:['QTG','YourPropFirm','TradoPay'],
    note:'Back on the Dubai floor — dedicated time with MEA partners on payouts, KYC, and the regional risk landscape.' },
  { slug:'london-prop-trading-expo-2026', name:'London Prop Trading Expo',
    date:'23–24 Oct 2026', start:'2026-10-23', month:'OCT 2026', city:'London', country:'GB',
    role:'Exhibiting', booth:'Booth TBA', logo:'assets/london-prop-expo-logo.png', logoFit:'contain', url:'https://londonproptradingexpo.com/', brands:['QTG','YourPropFirm'],
    note:'The capital’s prop-trading gathering — two days of operator conversations on infrastructure, risk, and scaling a firm.' },
  { slug:'ifx-asia-2026', name:'iFX EXPO Asia 2026',
    date:'12–13 Nov 2026', start:'2026-11-12', month:'NOV 2026', city:'Singapore', country:'SG',
    role:'Exhibiting', booth:'Booth TBA', logo:'assets/ifx-asia-logo.png', logoFit:'contain', logoLight:true, url:'https://www.ifxexpo.com/', brands:['QTG','YourPropFirm'],
    note:'APAC payments and settlement in focus, with closed roundtables on cross-border flow for brokers expanding across the region.' },
];

// ── PAST (newest first) — each gets its own recap page ────────
const PAST = [
  { slug:'online-trading-expo-hk-2026', name:'Online Trading Expo Hong Kong',
    date:'27–28 May 2026', month:'MAY 2026', city:'Hong Kong', country:'HK',
    role:'Speaking', panel:'27 May · 13:45–14:30',
    href:'event-online-trading-expo-hk-2026.html',
    img:'assets/event-otx-hk-2026-card.png', relatedUpcoming:'ifx-cyprus-2026',
    gallery:[
      'assets/otx-hk-2026-panel.jpg',
      'assets/otx-hk-2026-booth.jpg',
    ],
    summary:'Co-founder Markus Sichler joined the “Future of Prop Trading” panel — regulation, funding models, and what actually makes an ideal funded trader — in front of a packed room of APAC operators.',
    highlights:[
      'Markus Sichler on the “Future of Prop Trading: Regulation, Funding Models and Ideal Trader Traits” panel.',
      'Strong APAC turnout — prop firms and brokers scaling across the region.',
      'Follow-up conversations on risk infrastructure and payments for Asian markets.',
    ] },
  { slug:'ifx-expo-dubai-2026', name:'iFX EXPO Dubai',
    date:'10–12 Feb 2026', month:'FEB 2026', city:'Dubai', country:'AE',
    role:'Exhibitor', booth:'Booth #140 (QTG) · #91 (YourPropFirm)',
    href:'event-ifx-expo-dubai-2026.html',
    relatedUpcoming:'forex-expo-dubai-2026',
    img:'assets/ifx-dubai-2026-booth-hq.jpg',
    imgPos:'50% 52%',
    gallery:[
      'assets/ifx-dubai-2026-team-group.jpg',
      'assets/ifx-dubai-2026-team.jpg',
      'assets/ifx-dubai-2026-meeting.jpg',
      'assets/ifx-dubai-2026-booth-hq.jpg',
      'assets/ifx-dubai-2026-booth-angle.jpg',
    ],
    summary:'We exhibited at iFX EXPO Dubai 2026 with two booths — QTG at #140 and YourPropFirm at #91 — showcasing our proprietary trading technology, risk management infrastructure, and migration tooling for prop firms and brokers moving onto the platform.',
    highlights:[
      'Exhibited at Booth #91 across the show floor.',
      'Showcased proprietary trading technology and risk management infrastructure.',
      'Walked operators through migration tooling for moving onto the platform.',
    ] },
  { slug:'world-of-trading-2025', name:'World of Trading',
    date:'07–08 Nov 2025', month:'NOV 2025', city:'Frankfurt', country:'DE',
    role:'Attending', booth:'Forum Messe Frankfurt',
    href:'event-world-of-trading-2025.html',
    relatedUpcoming:'ifx-cyprus-2026',
    img:'assets/wot-2025-floor.png', imgPos:'50% 40%',
    gallery:[
      'assets/wot-2025-thankyou.png',
      'assets/wot-2025-floor.png',
    ],
    summary:'World of Trading is Germany’s largest trade fair for active traders, held at Forum Messe Frankfurt and featured by Börse Frankfurt. We attended on 7–8 November 2025 to meet operators and partners across the DACH region, take the pulse of the European retail-trading scene, and continue conversations on prop-firm infrastructure, risk and payments.',
    highlights:[
      'Two days on the floor at Forum Messe Frankfurt — Germany’s biggest event for active traders.',
      'Met prop-firm operators, brokers and partners across the DACH region.',
      'Tracked European retail-trading trends — platforms, education, and funded-trader models.',
      'Follow-up conversations on risk infrastructure and payments for EU operators.',
    ] },
  { slug:'hk-fintech-week-2025', name:'Hong Kong FinTech Week',
    date:'03–07 Nov 2025', month:'NOV 2025', city:'Hong Kong', country:'HK',
    role:'Exhibitor', booth:'Booth 5E-WSU07',
    href:'event-hk-fintech-week-2025.html',
    relatedUpcoming:'ifx-asia-2026',
    img:'assets/hkfw-2025-booth-team.png', imgPos:'50% 56%',
    gallery:[
      'assets/hkfw-2025-team-booth.jpeg',
      'assets/hkfw-2025-neon.jpeg',
      'assets/hkfw-2025-booth-poster.jpeg',
      'assets/hkfw-2025-meet-1.jpeg',
      'assets/hkfw-2025-meet-triplea.jpeg',
      'assets/hkfw-2025-dbs.jpeg',
      'assets/hkfw-2025-hsbc.jpeg',
      'assets/hkfw-2025-huawei.jpeg',
    ],
    summary:'Hong Kong FinTech Week 2025 ran 3–7 November, with the main conference and official exhibition at the Hong Kong Convention and Exhibition Centre (HKCEC) on 3–4 November. We exhibited at Booth 5E-WSU07 — continuing the conversations from iFX EXPO Asia the week before.',
    highlights:[
      'Exhibited at Booth 5E-WSU07 inside the HKCEC.',
      'On the StartmeupHK Festival floor alongside DBS, HSBC, Huawei, and the wider ecosystem.',
      'Met partners and operators across payments, infrastructure, and digital assets.',
    ] },
  { slug:'ifx-expo-asia-hk-2025', name:'iFX EXPO Asia · Hong Kong',
    date:'26–28 Oct 2025', month:'OCT 2025', city:'Hong Kong', country:'HK',
    role:'Exhibitor · Speaker', booth:'Booth 82',
    href:'event-ifx-expo-asia-hk-2025.html',
    img:'assets/ifx-hk-2025-booth-team.png', imgPos:'50% 42%',
    relatedUpcoming:'ifx-asia-2026',
    panelTitle:'Quant Wars & Crypto Moves: The Prop Trading Shake-Up',
    panelTime:'iFX EXPO Speaker Hall · sponsored by EC Markets',
    video:'UN4hXDvZfb0',
    panelists:[
      ['Kelvin Zhao','Head of Greater China, Axi'],
      ['Bobby Winters','Group COO, Alchemy Prime · Alchemy Markets · Xoala'],
      ['Andrey Kalashnikov','Head of Match2Pay'],
      ['Gil Ben-Hur','Founder, The5ers.com'],
      ['Antreas Pilavakis','Operations Manager, FunderPro'],
    ],
    gallery:[
      'assets/ifx-hk-2025-panel-lineup.png',
      'assets/ifx-hk-2025-booth-wide.jpeg',
      'assets/ifx-hk-2025-team-1.jpeg',
      'assets/ifx-hk-2025-booth-talk.jpeg',
      'assets/ifx-hk-2025-booth-screen.jpeg',
      'assets/ifx-hk-2025-team-2.jpeg',
    ],
    summary:'We came to Hong Kong to exhibit at Booth 82 — and co-founder Markus Sichler took the stage to moderate “Quant Wars & Crypto Moves: The Prop Trading Shake-Up,” bringing together industry leaders on where prop trading heads next. Three days of live demos, operator conversations, and a packed Speaker Hall.',
    highlights:[
      'Markus Sichler moderated “Quant Wars & Crypto Moves: The Prop Trading Shake-Up” in the iFX EXPO Speaker Hall.',
      'The panel spanned APAC growth, quant & algo strategies, crypto, payments & payouts, and fraud prevention.',
      'Booth 82 ran three days of live demos of the all-in-one prop firm solution.',
      'Strong APAC turnout across prop firms and brokers scaling across the region.',
    ] },
  { slug:'forex-expo-dubai-2025', name:'Forex Expo Dubai',
    date:'06–07 Oct 2025', month:'OCT 2025', city:'Dubai', country:'AE',
    role:'Exhibitor', booth:'Booth 130',
    href:'event-forex-expo-dubai-2025.html',
    img:'assets/forex-dubai-2025-booth.jpg', imgPos:'50% 58%',
    relatedUpcoming:'forex-expo-dubai-2026',
    gallery:[
      'assets/forex-dubai-2025-booth.jpg',
      'assets/forex-dubai-2025-crowd.jpg',
    ],
    summary:'MEA operators are not exploring — they are buying. Three days of back-to-back conversations on payouts, KYC, and what the next 12 months of regional risk looks like. We live-demoed 22 payment rails across 6 regions and originated five new payout partnerships at the booth.',
    highlights:[
      'Live demo: 22 payment rails across 6 regions.',
      'Five new payout partnerships originated at the booth.',
      'Joint session with a Dubai-based broker on regional payment flow.',
    ] },
  { slug:'ifx-expo-dubai-2025', name:'iFX EXPO Dubai',
    date:'14–16 Jan 2025', month:'JAN 2025', city:'Dubai', country:'AE',
    role:'Exhibitor · Speaker', booth:'Exhibitor · Dubai World Trade Centre',
    href:'event-ifx-expo-dubai-2025.html',
    img:'assets/ifx-dubai-2025-floor.jpg', imgPos:'50% 50%',
    relatedUpcoming:'forex-expo-dubai-2026',
    panelTitle:'Prop Trading’s Next Phase: Building Sustainability Beyond the Hype',
    panelTime:'iFX EXPO Dubai · Idea Hub stage',
    video:'fP-Tsda3Mco',
    panelRole:'joined',
    moderator:'Crystal Lok · Head of Emerging Markets, OANDA',
    panelists:[
      ['Crystal Lok','Head of Emerging Markets, OANDA · Moderator'],
      ['Ran Strauss','Co-Founder & CEO, Leverate'],
      ['Markus Sichler','Co-Founder & Strategic Advisor, YourPropFirm'],
      ['Anton Sokolov','Marketing Manager, Brokeree Solutions'],
    ],
    gallery:[
      'assets/ifx-dubai-2025-panel-hq.jpg',
      'assets/ifx-dubai-2025-panel-2.jpg',
      'assets/ifx-dubai-2025-panel-3.jpg',
      'assets/ifx-dubai-2025-booth.jpg',
      'assets/ifx-dubai-2025-booth-qr.jpg',
      'assets/ifx-dubai-2025-floor.jpg',
    ],
    summary:'We opened the year in Dubai with back-to-back operator meetings — and co-founder Markus Sichler joined the panel “Prop Trading’s Next Phase: Building Sustainability Beyond the Hype.” MEA demand is real and immediate: payouts, KYC, and regional risk dominated every conversation on the floor.',
    highlights:[
      'Markus Sichler joined “Prop Trading’s Next Phase: Building Sustainability Beyond the Hype,” moderated by OANDA’s Crystal Lok.',
      'Packed booth across all three days at the Dubai World Trade Centre.',
      'Deep-dive sessions on payment rails and payouts for MEA.',
      'Several new prop-firm launch conversations originated on the floor.',
    ] },
  { slug:'forex-expo-dubai-2024', name:'Forex Expo Dubai',
    date:'07–08 Oct 2024', month:'OCT 2024', city:'Dubai', country:'AE',
    role:'Exhibitor', booth:'Booth #167',
    href:'event-forex-expo-dubai-2024.html',
    img:'assets/forex-dubai-2024-team.png',
    imgPos:'50% 0%',
    relatedUpcoming:'forex-expo-dubai-2026',
    gallery:[
      'assets/forex-dubai-2024-meeting.png',
      'assets/forex-dubai-2024-booth-wide.png',
      'assets/forex-dubai-2024-certificate.png',
      'assets/forex-dubai-2024-brochure.png',
      'assets/forex-dubai-2024-talking.png',
      'assets/forex-dubai-2024-aisle.png',
    ],
    summary:'Our first Forex Expo Dubai as an exhibitor. Two days of introductions and demos — and the start of MEA relationships that carried straight into the year ahead.',
    highlights:[
      'Introduced the platform to MEA operators for the first time.',
      'Strong interest in payouts and risk tooling.',
      'Laid the groundwork for our 2025 Dubai return.',
    ] },
  { slug:'ifx-expo-asia-2024', name:'iFX EXPO Asia · Bangkok',
    date:'16–18 Sep 2024', month:'SEP 2024', city:'Bangkok', country:'TH',
    role:'Exhibitor', booth:'Exhibitor · Main Hall',
    href:'event-ifx-expo-asia-2024.html',
    img:'assets/ifx-asia-2024-booth-team.webp',
    relatedUpcoming:'ifx-asia-2026',
    gallery:[
      'assets/ifx-asia-2024-ideahub.webp',
      'assets/ifx-asia-2024-markus.webp',
      'assets/ifx-asia-2024-brochure.webp',
      'assets/ifx-asia-2024-meeting-1.webp',
      'assets/ifx-asia-2024-meeting-2.webp',
      'assets/ifx-asia-2024-talk.webp',
    ],
    summary:'Bangkok gave us our clearest early signal that APAC was a priority market. Three days of conversations with regional brokers and prop firms set the tone for our Asia roadmap.',
    highlights:[
      'Met operators from across Southeast Asia.',
      'Early demos of the dashboard and risk stack.',
      'Set the direction for our APAC expansion.',
    ] },
  { slug:'ifx-expo-cyprus-2024', name:'iFX EXPO Cyprus',
    date:'18–20 Jun 2024', month:'JUN 2024', city:'Limassol', country:'CY',
    role:'Exhibitor', booth:'Exhibitor · Hall A',
    href:'event-ifx-expo-cyprus-2024.html',
    img:'assets/ifx-cyprus-2024-entrance.webp',
    relatedUpcoming:'ifx-cyprus-2026',
    gallery:[
      'assets/ifx-cyprus-2024-floor.webp',
      'assets/ifx-cyprus-2024-party.webp',
    ],
    summary:'Our first iFX EXPO in Cyprus. The Limassol floor is where the industry gathers — and it became the launchpad for the partnerships and product conversations that defined the rest of our year.',
    highlights:[
      'Debut presence on the Limassol floor.',
      'Dozens of operator and partner introductions.',
      'Kicked off relationships that shaped the 2025 roadmap.',
    ] },
];

const eventBySlug = (slug) => [...UPCOMING, ...PAST].find(e => e.slug === slug);

// Days-until countdown
const daysUntil = (iso) => {
  if (!iso) return null;
  const d = new Date(iso + 'T00:00:00');
  const now = new Date(); now.setHours(0,0,0,0);
  return Math.round((d - now) / 86400000);
};
const countdownLabel = (iso) => {
  const n = daysUntil(iso);
  if (n === null || n < 0) return null;
  if (n === 0) return 'Today';
  if (n === 1) return 'Tomorrow';
  if (n <= 30) return `In ${n} days`;
  const months = Math.floor(n / 30), rem = n % 30;
  let s = `${months} Month${months > 1 ? 's' : ''}`;
  if (rem > 0) s += ` ${rem} day${rem > 1 ? 's' : ''}`;
  return s;
};

// ── Role badges ───────────────────────────────────────────────
const EVT_ROLE_ICON = {
  Exhibiting: <svg width="11" height="11" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.1" strokeLinejoin="round"><path d="M2 5.5h8V10H2z"/><path d="M1.5 5.5 2.7 2.5h6.6L10.5 5.5"/><path d="M5 10V7.5h2V10"/></svg>,
  Speaking: <svg width="11" height="11" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.1" strokeLinecap="round" strokeLinejoin="round"><rect x="4.4" y="1.4" width="3.2" height="6" rx="1.6"/><path d="M3 6a3 3 0 0 0 6 0"/><path d="M6 9v1.6M4.5 10.6h3"/></svg>,
  Hosting: <svg width="11" height="11" viewBox="0 0 12 12" fill="none"><path d="M6 1.5L7.4 4.4l3.1.4-2.3 2.1.6 3.1L6 8.6 3.2 10l.6-3.1L1.5 4.8l3.1-.4L6 1.5z" stroke="currentColor" strokeWidth="1.1" strokeLinejoin="round"/></svg>,
  Attending: <svg width="11" height="11" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.1" strokeLinecap="round" strokeLinejoin="round"><circle cx="6" cy="4" r="2.1"/><path d="M2.4 10.2c0-2 1.6-3.3 3.6-3.3s3.6 1.3 3.6 3.3"/></svg>,
};
const parseRoles = (roleStr) => !roleStr ? ['Attending'] : roleStr.split('·').map(s=>s.trim()).map(s=>{
  if (/exhibit/i.test(s)) return 'Exhibiting';
  if (/speak/i.test(s)) return 'Speaking';
  if (/host/i.test(s)) return 'Hosting';
  return 'Attending';
});
const RoleBadge = ({role, accent=false}) => (
  <span className="mono evt-role" style={{
    display:'inline-flex', alignItems:'center', gap:5, fontSize:9, padding:'3px 8px', borderRadius:4,
    border:`1px solid ${accent ? 'var(--accent)' : 'var(--line-strong)'}`,
    color: accent ? 'var(--accent)' : 'var(--text-2)', letterSpacing:'0.1em', textTransform:'uppercase',
    background: accent ? 'var(--accent-faint)' : 'rgba(255,255,255,0.02)' }}>
    <span style={{display:'inline-flex'}}>{EVT_ROLE_ICON[role] || EVT_ROLE_ICON.Attending}</span>{role}
  </span>
);

// ── Country flags ─────────────────────────────────────────────
const EVT_FLAGS = {
  CY: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#fff"/><path d="M11 9c1.5-2 4.5-2 5 0v3c-2-1-4-1-5 0z M16 9c.5-2 3.5-2 5 0v3c-1-1-3-1-5 0z" fill="#d57800"/><path d="M9 14h14" stroke="#4e5b31" strokeWidth="0.8"/></svg>,
  US: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#fff"/>{[0,2,4,6,8,10].map(i=><rect key={i} y={1+i*2} width="32" height="1.4" fill="#b22234"/>)}<rect width="13" height="11" fill="#3c3b6e"/></svg>,
  ES: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#aa151b"/><rect y="5.5" width="32" height="11" fill="#f1bf00"/></svg>,
  AE: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#fff"/><rect width="32" height="7.3" fill="#00732f"/><rect y="14.7" width="32" height="7.3" fill="#000"/><rect width="8" height="22" fill="#ff0000"/></svg>,
  SG: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#fff"/><rect width="32" height="11" fill="#ed2939"/><circle cx="9" cy="5.5" r="3" fill="#fff"/><circle cx="10.5" cy="5.5" r="3" fill="#ed2939"/></svg>,
  GB: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#012169"/><path d="M0 0l32 22M32 0L0 22" stroke="#fff" strokeWidth="4"/><path d="M0 0l32 22M32 0L0 22" stroke="#c8102e" strokeWidth="2"/><path d="M16 0v22M0 11h32" stroke="#fff" strokeWidth="6"/><path d="M16 0v22M0 11h32" stroke="#c8102e" strokeWidth="3.5"/></svg>,
  HK: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#de2910"/><circle cx="16" cy="11" r="4.2" fill="#fff"/></svg>,
  TH: <svg viewBox="0 0 32 22" width="20" height="14"><rect width="32" height="22" fill="#fff"/><rect width="32" height="3.7" fill="#a51931"/><rect y="18.3" width="32" height="3.7" fill="#a51931"/><rect y="7.3" width="32" height="7.4" fill="#2d2a4a"/></svg>,
};
const Flag = ({code}) => {
  const f = EVT_FLAGS[code];
  if (!f) return null;
  return <span style={{display:'inline-flex', alignItems:'center', borderRadius:2, overflow:'hidden', border:'1px solid var(--line)', lineHeight:0}}>{f}</span>;
};

// ── Brands we exhibit under (round monogram markers) ──────────
const BRANDS = {
  QTG:            { label:'QTG',            short:'Q',  color:'oklch(0.82 0.16 200)', logo:'assets/qtg-avatar.png' },
  YourPropFirm:   { label:'YourPropFirm',   short:'YP', color:'oklch(0.84 0.16 165)', logo:'assets/brand-yourpropfirm.png' },
  TradoPay:       { label:'TradoPay',       short:'TP', color:'oklch(0.80 0.14 95)' },
  QuantSentry:    { label:'QuantSentry',    short:'QS', color:'oklch(0.78 0.18 320)' },
  QuantCX:        { label:'QuantCX',        short:'CX', color:'oklch(0.78 0.16 280)' },
  PropTradeGroup: { label:'PropTradeGroup', short:'PT', color:'oklch(0.82 0.14 35)' },
};
const BrandDots = ({brands}) => {
  const items = brands.map(b => BRANDS[b] || BRANDS.QTG).filter(t => t.logo);
  if (!items.length) return null;
  return (
    <span className="pbrands">
      {items.map((t,i)=><span key={i} className="pbrand imgmark" data-tip={t.label}><img src={t.logo} alt={t.label}/></span>)}
    </span>
  );
};

// ── Presence block: green dot + what we're doing at the event ──
const EventPresence = ({event:e}) => {
  const roles = parseRoles(e.role);
  const exhibiting = roles.includes('Exhibiting');
  const speaking = roles.includes('Speaking') || roles.includes('Hosting');
  return (
    <div className="evt-presence">
      <span className="pico"><svg width="13" height="14" viewBox="0 0 16 17" fill="currentColor" aria-hidden="true"><path d="M8 0a6 6 0 0 0-6 6c0 4.4 6 11 6 11s6-6.6 6-11a6 6 0 0 0-6-6zm0 8.2A2.2 2.2 0 1 1 8 3.8a2.2 2.2 0 0 1 0 4.4z"/></svg></span>
      <div className="pline">
        {exhibiting && <span className="plabel">Exhibiting</span>}
        {exhibiting && <span className="pmeta">· {e.booth}</span>}
        {exhibiting && e.brands && e.brands.length > 0 && <BrandDots brands={e.brands}/>}
        {!exhibiting && <span className="plabel">On the Ground</span>}
        {!exhibiting && !speaking && <span className="pbrands"><span className="pbrand imgmark" data-tip="Quant Technology Group"><img src="assets/qtg-avatar.png" alt="QTG"/></span></span>}
      </div>
    </div>
  );
};

Object.assign(window, { UPCOMING, PAST, eventBySlug, daysUntil, countdownLabel, RoleBadge, parseRoles, Flag, BRANDS, BrandDots, EventPresence });
