// ═══════════════════════════════════════════════════════════
// Leftshifted - Shared Components
// ═══════════════════════════════════════════════════════════
const { useState, useEffect, useRef, useCallback, Fragment } = React;

// ── Routing ─────────────────────────────────────────────
const navigate = (path) => {
  window.location.hash = path;
  window.scrollTo({ top: 0, behavior: 'instant' });
};

// ── Arrow Icon ──────────────────────────────────────────
const ArrowIcon = ({ size = 11 }) => (
  <svg viewBox="0 0 10 10" fill="currentColor" style={{ width: size, height: size, display: 'block' }}>
    <path d="M5 0l-.88.88L7.63 4.4H0v1.26h7.63L4.12 9.18 5 10.06l5-5z" />
  </svg>
);

// ── Button ──────────────────────────────────────────────
const Btn = ({ children, variant = 'primary', onClick, href, size = 'md', className = '' }) => {
  const handleClick = () => {
    if (href) navigate(href);
    if (onClick) onClick();
  };
  return (
    <button className={`btn btn--${variant} ${size === 'sm' ? 'btn--sm' : ''} ${className}`} onClick={handleClick}>
      <span className="btn__label">{children}</span>
      <span className="btn__tile"><ArrowIcon /></span>
    </button>
  );
};

// ── Eyebrow ─────────────────────────────────────────────
const Eyebrow = ({ children, variant = 'default', className = '' }) => (
  <span className={`eyebrow ${variant === 'dark' ? 'eyebrow--on-dark' : ''} ${variant === 'blue' ? 'eyebrow--on-blue' : ''} ${className}`}>
    {children}
  </span>
);

// ── Numbered Eyebrow (services pages) ───────────────────
const NumEyebrow = ({ number, children }) => (
  <div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>
    <span style={{
      width: 28, height: 28, borderRadius: 8,
      background: 'var(--ls-midnight-navy)', color: '#fff',
      display: 'grid', placeItems: 'center',
      font: '600 14px/1 var(--font-display)',
      flexShrink: 0,
    }}>{number}</span>
    <span style={{
      font: 'var(--type-eyebrow)',
      letterSpacing: 'var(--tracking-mono)',
      textTransform: 'uppercase',
    }}>{children}</span>
  </div>
);

// ── Union Pattern Overlay ───────────────────────────────
const UnionOverlay = ({ opacity = 0.1 }) => (
  <div style={{
    position: 'absolute', inset: 0, pointerEvents: 'none',
    mask: `url("${res('assets/brand/Union.svg')}") top left / 220px auto repeat`,
    WebkitMask: `url("${res('assets/brand/Union.svg')}") top left / 220px auto repeat`,
    background: `rgba(255,255,255,${opacity})`,
  }} />
);

// ── Decorative scattered squares ────────────────────────
const DecorSquares = ({ seed = 0, layout }) => {
  const layouts = {
    challenge: [
      // Top-left pair
      { top: '8%', left: '13%', size: 32, color: '#030228', rotate: 0 },
      { top: '4%', left: '16%', size: 28, color: '#3D3D6B', rotate: 0 },
      // Left edge
      { top: '30%', left: '-1%', size: 24, color: 'rgba(255,255,255,.25)', rotate: 0 },
      // Bottom-left pair
      { bottom: '15%', left: '5%', size: 26, color: '#5A5A8A', rotate: 0 },
      { bottom: '10%', left: '8%', size: 28, color: '#3D3D6B', rotate: 0 },
      // Top-right solo
      { top: '5%', right: '22%', size: 24, color: 'rgba(255,255,255,.3)', rotate: 0 },
      // Top-right pair
      { top: '4%', right: '2%', size: 30, color: '#030228', rotate: 0 },
      { top: '10%', right: '5%', size: 26, color: 'rgba(255,255,255,.3)', rotate: 0 },
      // Right edge
      { top: '48%', right: '-1%', size: 28, color: 'rgba(255,255,255,.2)', rotate: 0 },
      // Bottom-right
      { bottom: '18%', right: '18%', size: 24, color: '#030228', rotate: 0 },
      // Bottom-right pair
      { bottom: '6%', right: '3%', size: 28, color: '#030228', rotate: 0 },
      { bottom: '10%', right: '5%', size: 24, color: '#3D3D6B', rotate: 0 },
    ],
    default: [
      { top: '6%', right: '4%', size: 48, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '18%', right: '8%', size: 24, color: 'var(--ls-neutral-400)', rotate: 0 },
      { bottom: '8%', left: '3%', size: 44, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { bottom: '22%', right: '5%', size: 32, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '50%', left: '2%', size: 20, color: 'var(--ls-neutral-200)', rotate: 0 },
      { bottom: '35%', left: '5%', size: 28, color: 'var(--ls-neutral-400)', rotate: 0 },
    ],
    proof: [
      { top: '2%', right: '-6%', size: 36, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '18%', right: '-9%', size: 30, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '38%', right: '-11%', size: 60, height: 24, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '52%', right: '-5%', size: 28, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '68%', right: '-10%', size: 32, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { top: '82%', right: '-3%', size: 30, color: 'var(--ls-midnight-navy)', rotate: 0 },
      { bottom: '4%', left: '10%', size: 34, color: 'var(--ls-midnight-navy)', rotate: 0 },
    ],
  };
  const squares = layouts[layout] || layouts.default;
  return (
    <div style={{ position: 'absolute', inset: 0, overflow: 'hidden', pointerEvents: 'none' }}>
      {squares.map((p, i) => (
        <div key={i} style={{
          position: 'absolute', width: p.size, height: p.height || p.size,
          background: p.color, borderRadius: 4,
          transform: `rotate(${p.rotate}deg)`,
          top: p.top, left: p.left, right: p.right, bottom: p.bottom,
        }} />
      ))}
    </div>
  );
};

// ── Logo placeholder bar ────────────────────────────────
const LogoBar = ({ variant = 'default' }) => {
  const logos = [
    { src: res('assets/logos/bt.png'), alt: 'BT', invert: true, w: 41, h: 41 },
    { src: res('assets/logos/butternut-box.png'), alt: 'Butternut Box', rect: true, noround: true, invert: true },
    { src: res('assets/logos/ee.png'), alt: 'EE', invert: true, w: 77, h: 49 },
    { src: res('assets/logos/memoyo.png'), alt: 'Memoyo', rect: true, w: 142, h: 52 },
    { src: res('assets/logos/mlc.png'), alt: 'The MLC', rect: true, invert: true, w: 217, h: 37 },
    { src: res('assets/logos/northrow.png'), alt: 'Northrow', invert: true, large: true, w: 92, h: 84 },
    { src: res('assets/logos/openreach.png'), alt: 'Openreach', rect: true, invert: true, w: 187, h: 35 },
    { src: res('assets/logos/sainsburys.png'), alt: 'Sainsbury\'s', rect: true, invert: true, w: 138, h: 67 },
    { src: res('assets/logos/sumup.png'), alt: 'SumUp', w: 108, h: 57 },
    { src: res('assets/logos/twentyai.png'), alt: 'TwentyAI', rect: true, large: true, invert: true, w: 155, h: 63 },
  ];
  return (
    <div className={`logo-bar ${variant === 'dark' ? 'is-dark' : ''}`}>
      <span className="logo-bar__label">Trusted by leading organisations</span>
      <div className="logo-bar__logos">
        {logos.map((logo, i) => (
          <img key={i} src={logo.src} alt={logo.alt}
            style={logo.w ? { width: `calc(${logo.w}px * var(--logo-scale, 1))`, height: `calc(${logo.h}px * var(--logo-scale, 1))` } : undefined}
            className={`logo-bar__logo-img ${logo.rect ? 'is-rect' : ''} ${logo.invert ? (variant === 'dark' ? 'is-darken' : 'is-invert') : ''} ${logo.noround ? 'is-noround' : ''} ${logo.large ? 'is-large' : ''}`} />
        ))}
      </div>
    </div>
  );
};

// ── FAQ Accordion ───────────────────────────────────────
const FAQ = ({ items, variant = 'default' }) => {
  const [openIdx, setOpenIdx] = useState(0);
  return (
    <div className="faq-list">
      {items.map((item, i) => {
        const isOpen = openIdx === i;
        return (
          <div key={i} className={`faq-item ${isOpen ? 'is-open' : ''}`}>
            <button className="faq-item__q" onClick={() => setOpenIdx(isOpen ? -1 : i)}>
              <span className={`faq-item__icon ${isOpen ? 'open' : ''}`}>
                {isOpen ? '−' : '+'}
              </span>
              <span>{item.q}</span>
            </button>
            {isOpen && (
              <div className="faq-item__a"><p>{item.a}</p></div>
            )}
          </div>
        );
      })}
    </div>
  );
};

const defaultFaqItems = [
  { q: 'How much will it cost?', a: 'Nearly all projects are fixed-fee and scoped upfront so you know what you\'re getting. Most projects start from £10k and scale based on scope, speed and complexity.\n\nWe offer on-demand retainers for longer engagements and ongoing work.\n\nOur incentive is your success, not our hours.' },
  { q: 'How does onboarding work?', a: 'Fast. We\'re remote-first with on-site presence for the moments that matter. Once signed, we can typically have a principal on your project the following week.\n\nFrom there it\'s straightforward: systems access, introductions, getting to know how you work, and we get to work immediately.\n\nNo notice periods, no handoffs to a delivery team, no agencies sat in the middle.' },
  { q: 'When can I expect to see results?', a: 'Fast. Most clients see proof of value within 4 weeks, and impact within the project itself - in a market where 80% of data and AI projects fail and the typical engagement takes 3-6 months to deliver nothing.' },
  { q: 'Are there any projects you won\'t take on?', a: 'Yes, and we do this often. We won\'t take on work where we can\'t see a clear route to commercial value. We\'d rather tell you upfront and work together when it makes sense, than set fire to your budget and waste all our time.' },
  { q: 'Who will I be working with?', a: 'Seniors, always. No bait-and-switch. Every engagement is led by a Leftshifted principal and supported by a lean team of seasoned experts. We don\'t learn on your time and spend.' },
];

// ── Navigation ──────────────────────────────────────────
const Nav = ({ current, light }) => {
  const [scrolled, setScrolled] = useState(false);
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 20);
    window.addEventListener('scroll', onScroll, { passive: true });
    return () => window.removeEventListener('scroll', onScroll);
  }, []);

  const links = [
    { label: 'Services', path: '/services', modal: true },
    { label: 'PR & Comms', path: '/pr-comms' },
    { label: 'Case Studies', path: '/case-studies' },
  ];

  const serviceGroups = [
    { name: 'Strategy', components: ['Leadership', 'Data Strategy'] },
    { name: 'Data', components: ['Data Architecture', 'Data Engineering', 'Data Science', 'Data Analysis'] },
    { name: 'AI', components: ['MLOps', 'AIOps'] },
    { name: 'Cloud', components: ['Solution Architecture', 'Cloud Engineering', 'Security', 'DevOps'] },
  ];

  const [servicesOpen, setServicesOpen] = useState(false);
  const [mobileOpen, setMobileOpen] = useState(false);
  const closeTimer = useRef(null);
  const openServices = () => { clearTimeout(closeTimer.current); setServicesOpen(true); };
  const scheduleClose = () => { closeTimer.current = setTimeout(() => setServicesOpen(false), 120); };
  useEffect(() => {
    document.body.style.overflow = (servicesOpen || mobileOpen) ? 'hidden' : '';
  }, [servicesOpen, mobileOpen]);
  useEffect(() => {
    const mq = window.matchMedia('(max-width: 900px)');
    const onChange = () => { if (!mq.matches) { setMobileOpen(false); document.body.style.overflow = ''; } };
    mq.addEventListener('change', onChange);
    return () => { mq.removeEventListener('change', onChange); document.body.style.overflow = ''; };
  }, []);
  const go = (p) => { setMobileOpen(false); navigate(p); };

  return (
    <header className={`site-nav ${scrolled ? 'is-scrolled' : ''} ${servicesOpen ? 'services-open' : ''} ${light ? 'site-nav--light' : ''}`}>
      <div className="site-nav__inner page-wrap">
        <a className="site-nav__logo" onClick={() => navigate('/')}>
          <img src={servicesOpen ? res('assets/brand/logo-nav-dark.svg') : light ? res('assets/brand/logo-nav-light.svg') : res('assets/brand/logo-nav.png')} alt="Leftshifted" className="site-nav__logo-img" />
        </a>
        <nav className="site-nav__links">
          {links.map(link => (
            <div key={link.path} className="site-nav__link-wrap"
              onMouseEnter={() => link.modal && openServices()}
              onMouseLeave={() => link.modal && scheduleClose()}
            >
              <a
                className={`site-nav__link ${current === link.path ? 'is-active' : ''}`}
                onClick={() => navigate(link.path)}
              >
                {link.label}
              </a>
            </div>
          ))}
        </nav>
        <Btn variant="primary" size="sm" className="site-nav__cta" onClick={() => window.open('https://cal.com/leftshifted/15min', '_blank')}>
          Let's have a chat
        </Btn>
        <button className="site-nav__burger" aria-label="Menu" aria-expanded={mobileOpen} onClick={() => setMobileOpen(o => !o)}>
          <span className={mobileOpen ? 'is-x' : ''}></span>
          <span className={mobileOpen ? 'is-x' : ''}></span>
        </button>
      </div>
      <div className={`mobile-menu ${mobileOpen ? 'is-open' : ''}`}>
          <nav className="mobile-menu__links">
            <a className="mobile-menu__link" onClick={() => go('/services')}>Services</a>
            <div className="mobile-menu__sub">
              {serviceGroups.map(g => {
                const pill = { Strategy: { bg: 'var(--ls-lime)', fg: 'var(--ls-midnight-navy)' }, Data: { bg: 'var(--ls-midnight-navy)', fg: '#fff' }, AI: { bg: '#FF5A6E', fg: '#fff' }, Cloud: { bg: '#FFC845', fg: 'var(--ls-midnight-navy)' } }[g.name] || { bg: 'rgba(255,255,255,.12)', fg: '#fff' };
                const st = { background: pill.bg, color: pill.fg };
                return g.name === 'Data'
                  ? <a key={g.name} className="ls-pill" style={st} onClick={() => go('/data')}>{g.name}</a>
                  : <span key={g.name} className="ls-pill is-disabled" style={st}>{g.name}</span>;
              })}
            </div>
            <a className="mobile-menu__link" onClick={() => go('/pr-comms')}>PR &amp; Comms</a>
            <a className="mobile-menu__link" onClick={() => go('/case-studies')}>Case Studies</a>
            <a className="mobile-menu__link" onClick={() => go('/about')}>About</a>
            <a className="mobile-menu__link" onClick={() => go('/contact')}>Contact</a>
          </nav>
          <Btn variant="primary" onClick={() => { setMobileOpen(false); window.open('https://cal.com/leftshifted/15min', '_blank'); }}>
            Let's have a chat
          </Btn>
        </div>
      {servicesOpen && (
        <div className="services-modal" onMouseEnter={openServices} onMouseLeave={scheduleClose}>
          <div className="services-modal__inner page-wrap">
            <div className="services-modal__grid">
              {serviceGroups.map((g, i) => {
                const linkable = g.name === 'Data';
                return (
                  <div key={i} className="services-modal__col">
                    {linkable ? (
                      <a className="services-modal__service" onClick={() => { navigate(g.name === 'Data' ? '/data' : '/services'); setServicesOpen(false); }}>{g.name}</a>
                    ) : (
                      <span className="services-modal__service is-disabled">{g.name}</span>
                    )}
                    <div className="services-modal__components">
                      {g.components.map((c, j) => <span key={j}>{c}</span>)}
                    </div>
                  </div>
                );
              })}
            </div>
            <a className="services-modal__explore" onClick={() => { navigate('/services'); setServicesOpen(false); }}>
              See our services <span>&rarr;</span>
            </a>
          </div>
        </div>
      )}
    </header>
  );
};

// ── Footer ──────────────────────────────────────────────
const Footer = () => {
  const footerCols = [
    {
      title: 'Services',
      links: [
        { label: 'Strategy', path: '/services', disabled: true },
        { label: 'Data', path: '/data' },
        { label: 'AI', path: '/services', disabled: true },
        { label: 'Cloud', path: '/services', disabled: true },
      ],
    },
    {
      title: 'Practices',
      links: [
        { label: 'PR & Comms', path: '/pr-comms' },
      ],
    },
    {
      title: 'Company',
      links: [
        { label: 'About us', path: '/about' },
        { label: 'Case studies', path: '/case-studies' },
        { label: 'Contact', path: '/contact' },
        { label: 'Privacy', path: '/privacy' },
      ],
    },
  ];

  return (
    <footer className="site-footer">
      <div className="footer-main">
        <div className="footer-main__inner page-wrap">
          <div className="footer-main__grid">
            <div className="footer-main__links">
              {footerCols.map((col, i) => (
                <div key={i} className="footer-flat-col">
                  <h4 className="footer-flat-col__title">{col.title}</h4>
                  {col.links.map((l, j) => l.heading ? (
                    <span key={j} className="footer-flat-col__heading">{l.label}</span>
                  ) : l.disabled ? (
                    <span key={j} className="is-disabled">{l.label}</span>
                  ) : (
                    <a key={j} onClick={() => navigate(l.path)}>{l.label}</a>
                  ))}
                </div>
              ))}
            </div>
          </div>
        </div>
      </div>
      <div className="footer-logo">
        <div className="footer-logo__top page-wrap">
          <span className="footer-logo__copyright">© 2026 Leftshifted. All rights reserved.</span>
          <div className="footer-social">
            <a href="https://www.linkedin.com/company/leftshifted" target="_blank" rel="noopener noreferrer" className="footer-social__icon" aria-label="LinkedIn">
              <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
            </a>
            <a href="https://api.whatsapp.com/message/PDYDHAJXXAKUA1?autoload=1&amp;app_absent=0" target="_blank" rel="noopener noreferrer" className="footer-social__icon" aria-label="WhatsApp">
              <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>
            </a>
          </div>
        </div>
        <div className="footer-logo__inner">
          <img src={res("assets/brand/logo-arrow-glyph.png")} alt="" className="footer-logo__mark" />
        </div>
      </div>
    </footer>
  );
};

// ── Why Themes (shared "why solve with us" grid) ────────
const whyThemesData = [
  { title: 'Impact at scale', icon: 'trending-up', metric: '12.5x avg. ROI', mMetric: '£231M+ and 12.5x avg. ROI', desc: '£231M+ in commercial results. We aim at 10x+ ROI (we\'ve delivered 50x+ before).\n\nAnd because we don\'t take on anything if we can\'t see how to get you ROI, every engagement delivers. We\'re running at 100% success rate.' },
  { title: 'Battle-tested', mTitle: 'Experts in data and AI', icon: 'shield-check', metric: '15+ yrs', desc: 'Direct access to senior data and AI experts with track records delivering massive commercial impact.\n\nYou will never get someone learning on your time.' },
  { title: 'End to end', mTitle: 'End-to-end', icon: 'git-merge', metric: '1 team', mMetric: '1 team, always led by a senior+', desc: 'No gap between strategy and delivery, because there isn\'t one. We handle the entire journey from steerco to IT signoffs, getting sense out of 3rd party engineers to lines of code, so you never have to bridge a gap yourself.' },
  { title: 'On-demand', mTitle: 'No contract lock-in', icon: 'zap', metric: 'No lock-in', mMetric: '2 week commitments', desc: 'Good contractors aren\'t available at short notice.\n\nBig firms need weeks just to resource a team and need a large contract to justify the effort.\n\nLeftshifted starts when you need us, works to a fixed fee, and stays only as long as the problem requires.' },
  { title: 'Built for speed', icon: 'rocket', metric: '0 ramp-up', desc: 'We\'re remote-first for rapid onboarding, with on-site presence for the moments that matter.\n\nNo notice periods, no handoffs to a delivery team, no agencies sat in the middle.' },
  { title: 'Built to leave', mTitle: 'Built to leave, asked to return', icon: 'log-out', metric: '3-5 projects', mMetric: '3-5 projects per client', desc: 'We design every engagement to end from day one. Every engagement ends with a handover and a client who is less dependent on us than when we started.\n\nAnd because of that, we keep getting asked to come back. Most for 3-5 projects.' },
];
const WhyThemes = () => (
  <div className="why-themes">
    {whyThemesData.map((t, i) => (
      <div key={i} className="why-theme">
        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: 12 }}>
          <div className="why-theme__icon">
            <i data-lucide={t.icon} style={{ width: 20, height: 20 }}></i>
          </div>
          {t.metric && <div style={{ font: '700 28px/1 var(--font-display)', letterSpacing: '-0.03em', color: 'var(--ls-ultramarine-blue)' }}><span className="wt-d">{t.metric}</span>{t.mMetric && <span className="wt-m" data-long={t.mMetric.includes('\n') ? '' : undefined}>{t.mMetric}</span>}</div>}
        </div>
        <h4 className="why-theme__title"><span className="wt-d">{t.title}</span>{t.mTitle && <span className="wt-m">{t.mTitle}</span>}</h4>
        <p className="why-theme__desc">{t.desc}</p>
      </div>
    ))}
  </div>
);

// ── Page Shell ──────────────────────────────────────────
const PageShell = ({ current, light, children }) => (
  <div className="page-shell">
    <Nav current={current} light={light} />
    <main>{children}</main>
    <Footer />
  </div>
);

// ── Section wrapper ─────────────────────────────────────
const Section = ({ children, bg, className = '', style = {}, id }) => (
  <section
    id={id}
    className={`section ${bg ? `section--${bg}` : ''} ${className}`}
    style={{ position: 'relative', ...style }}
  >
    <div className="page-wrap">{children}</div>
  </section>
);

// Export everything to window
Object.assign(window, {
  ArrowIcon, Btn, Eyebrow, NumEyebrow, UnionOverlay, DecorSquares,
  LogoBar, FAQ, defaultFaqItems, Nav, Footer, PageShell, Section, navigate, WhyThemes,
});
