// Main form application
const { useState: useStateA, useEffect: useEffectA, useMemo: useMemoA } = React;

const FORM_TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "theme": "dark",
  "layout": "split",
  "calendarLayout": "side-by-side",
  "ctaLabel": "Agendar diagnóstico"
}/*EDITMODE-END*/;

function NexoIsotype() {
  return (
    <svg viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg" aria-label="NEXO Labs">
      <defs>
        <linearGradient id="formNexoGrad" x1="0%" y1="0%" x2="100%" y2="100%">
          <stop offset="0%" stopColor="#2A7FC1" />
          <stop offset="40%" stopColor="#1B4F8A" />
          <stop offset="100%" stopColor="#1A9E8F" />
        </linearGradient>
        <mask id="formNexoNodeCut" maskUnits="userSpaceOnUse">
          <rect width="500" height="500" fill="white" />
          <circle cx="250" cy="75" r="47" fill="black" />
          <circle cx="425" cy="250" r="47" fill="black" />
          <circle cx="250" cy="425" r="47" fill="black" />
          <circle cx="75" cy="250" r="47" fill="black" />
        </mask>
      </defs>
      <g className="nexo-rot">
        <g mask="url(#formNexoNodeCut)">
          <path d="M250,75 L425,250 L250,425 L75,250 Z" fill="none" stroke="url(#formNexoGrad)" strokeWidth="26" strokeLinejoin="round" />
          <line x1="250" y1="250" x2="250" y2="75" stroke="url(#formNexoGrad)" strokeWidth="26" strokeLinecap="round" />
          <line x1="250" y1="250" x2="425" y2="250" stroke="url(#formNexoGrad)" strokeWidth="26" strokeLinecap="round" />
          <line x1="250" y1="250" x2="250" y2="425" stroke="url(#formNexoGrad)" strokeWidth="26" strokeLinecap="round" />
          <line x1="250" y1="250" x2="75" y2="250" stroke="url(#formNexoGrad)" strokeWidth="26" strokeLinecap="round" />
        </g>
        <circle cx="250" cy="75" r="35.5" fill="none" stroke="url(#formNexoGrad)" strokeWidth="23" />
        <circle cx="425" cy="250" r="35.5" fill="none" stroke="url(#formNexoGrad)" strokeWidth="23" />
        <circle cx="250" cy="425" r="35.5" fill="none" stroke="url(#formNexoGrad)" strokeWidth="23" />
        <circle cx="75" cy="250" r="35.5" fill="none" stroke="url(#formNexoGrad)" strokeWidth="23" />
        <circle cx="250" cy="250" r="72" fill="url(#formNexoGrad)" />
      </g>
    </svg>
  );
}

function CheckIcon() {
  return (
    <svg viewBox="0 0 24 24" fill="none" stroke="white" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round">
      <path d="M5 12l5 5L20 7" />
    </svg>
  );
}

function ArrowIcon() {
  return (
    <svg className="arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round">
      <path d="M5 12h14M13 5l7 7-7 7" />
    </svg>
  );
}

function validateEmail(v) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(v.trim());
}

function validatePhone(v) {
  const digits = v.replace(/\D/g, '');
  return digits.length >= 7 && digits.length <= 14;
}

function FieldMsg({ touched, error, ok }) {
  if (touched && error) return <div className="field-msg">{error}</div>;
  if (ok) return <div className="field-msg ok">{ok}</div>;
  return <div className="field-msg empty"></div>;
}

function App() {
  const [t, setTweak] = useTweaks(FORM_TWEAK_DEFAULTS);

  // Apply theme class
  useEffectA(() => {
    document.body.classList.toggle('theme-light', t.theme === 'light');
  }, [t.theme]);

  // Form state
  const [razonSocial, setRazonSocial] = useStateA('');
  const [nitRuc, setNitRuc] = useStateA('');
  const [industria, setIndustria] = useStateA('');
  const [email, setEmail] = useStateA('');
  const [emailConfirm, setEmailConfirm] = useStateA('');
  const [countryCode, setCountryCode] = useStateA('CO');
  const [phone, setPhone] = useStateA('');
  const [country, setCountry] = useStateA('CO');
  const [city, setCity] = useStateA('');
  const [direccion, setDireccion] = useStateA('');
  const [direccionAdicional, setDireccionAdicional] = useStateA('');
  const [acceptTerms, setAcceptTerms] = useStateA(false);
  const [selectedDate, setSelectedDate] = useStateA(null);
  const [selectedAvailable, setSelectedAvailable] = useStateA(true);

  const [touched, setTouched] = useStateA({});
  const [submitted, setSubmitted] = useStateA(false);
  const [success, setSuccess] = useStateA(false);

  const countryObj = COUNTRY_BY_CODE[country];
  const cityList = countryObj ? countryObj.cities : [];

  // When country changes, reset city + sync phone country code
  useEffectA(() => {
    setCity('');
    setCountryCode(country);
  }, [country]);

  const touch = (k) => setTouched(prev => prev[k] ? prev : { ...prev, [k]: true });

  // Validation
  const errors = useMemoA(() => {
    const e = {};
    if (!razonSocial.trim() || razonSocial.trim().length < 2)
      e.razonSocial = 'Ingresa la razón social de tu empresa';
    if (!nitRuc.trim() || nitRuc.trim().length < 3)
      e.nitRuc = 'Ingresa el NIT, RUC o número de identificación fiscal';
    if (!industria.trim() || industria.trim().length < 2)
      e.industria = 'Ingresa el sector o industria de tu empresa';
    if (!email.trim()) e.email = 'Ingresa tu correo electrónico';
    else if (!validateEmail(email)) e.email = 'Correo no válido';
    if (!emailConfirm.trim()) e.emailConfirm = 'Confirma tu correo';
    else if (emailConfirm.trim().toLowerCase() !== email.trim().toLowerCase())
      e.emailConfirm = 'Los correos no coinciden';
    if (!phone.trim()) e.phone = 'Ingresa tu teléfono';
    else if (!validatePhone(phone)) e.phone = 'Teléfono no válido';
    if (!country) e.country = 'Selecciona un país';
    if (!city) e.city = 'Selecciona una ciudad';
    if (!direccion.trim() || direccion.trim().length < 5)
      e.direccion = 'Ingresa la dirección de tu empresa (mín. 5 caracteres)';
    if (!selectedDate) e.date = 'Selecciona una fecha';
    else if (!selectedAvailable) e.date = 'La fecha elegida no está disponible. Selecciona otra.';
    if (!acceptTerms) e.terms = 'Debes aceptar los términos';
    return e;
  }, [razonSocial, nitRuc, industria, email, emailConfirm, phone, country, city, direccion, selectedDate, selectedAvailable, acceptTerms]);

  const isValid = Object.keys(errors).length === 0;

  // Stepper progress
  const stepStatus = useMemoA(() => {
    const s1 = razonSocial.trim() && nitRuc.trim() && industria.trim() && email.trim() && emailConfirm.trim();
    const s2 = phone.trim() && country && city && direccion.trim();
    const s3 = !!selectedDate && selectedAvailable;
    return [s1, s2, s3];
  }, [razonSocial, nitRuc, industria, email, emailConfirm, phone, country, city, direccion, selectedDate, selectedAvailable]);

  const currentStep = stepStatus.findIndex(s => !s);

  const handleSubmit = async (e) => {
    e.preventDefault();
    setSubmitted(true);
    setTouched({
      razonSocial: true, nitRuc: true, industria: true,
      email: true, emailConfirm: true,
      phone: true, country: true, city: true, direccion: true, terms: true,
      date: true,
    });
    if (!isValid) {
      // scroll to first error
      const firstErrEl = document.querySelector('.field.has-error, .terms-row.has-error');
      if (firstErrEl) firstErrEl.scrollIntoView({ block: 'center', behavior: 'smooth' });
      return;
    }

    if (selectedDate) {
      const base =
        typeof window !== 'undefined' && window.NEXO_AVAILABLE_DATES_API_BASE != null
          ? String(window.NEXO_AVAILABLE_DATES_API_BASE).replace(/\/$/, '')
          : '';
      const verifyUrl = `${base || ''}/api/available-dates?month=${selectedDate.getMonth() + 1}&year=${selectedDate.getFullYear()}`;
      try {
        const r = await fetch(verifyUrl, { credentials: 'same-origin' });
        if (r.ok) {
          const data = await r.json();
          const key = dateKey(selectedDate);
          if (Array.isArray(data.available) && !data.available.includes(key)) {
            setSelectedAvailable(false);
            const firstErrEl = document.querySelector('.calendar-shell');
            if (firstErrEl) firstErrEl.scrollIntoView({ block: 'center', behavior: 'smooth' });
            return;
          }
        }
      } catch (_) {
        /* verificación best-effort si la API no responde */
      }
    }

    // Enviar datos a n8n para generar contrato y guardarlo en BD
    try {
      await fetch('https://n8n.nexolatam.net/webhook/formulario-diagnostico', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          company_name:   razonSocial.trim(),
          nit_ruc_tax_id: nitRuc.trim(),
          industry:       industria.trim(),
          contact_email:  email.trim().toLowerCase(),
          contact_phone:  (COUNTRY_BY_CODE[countryCode]?.dial || '') + ' ' + phone.trim(),
          country:        COUNTRY_BY_CODE[country]?.name || country,
          city:           city,
          address:        direccion.trim() + (direccionAdicional.trim() ? ', ' + direccionAdicional.trim() : ''),
          scheduled_date: dateKey(selectedDate),
        })
      });
    } catch (err) {
      // Si falla la llamada a n8n, igual mostramos éxito al cliente.
      // El equipo puede recuperar el dato manualmente desde los logs del formulario.
      console.error('[NEXO] Error enviando a n8n:', err);
    }

    setSuccess(true);
    window.scrollTo({ top: 0, behavior: 'smooth' });
  };

  // ── Tweaks panel ────────────────────────────────────────
  const tweaksUI = (
    <TweaksPanel title="Tweaks">
      <TweakSection label="Aspecto">
        <TweakRadio
          label="Tema"
          value={t.theme}
          onChange={v => setTweak('theme', v)}
          options={[
            { value: 'dark',  label: 'Oscuro' },
            { value: 'light', label: 'Claro' },
          ]}
        />
        <TweakRadio
          label="Layout"
          value={t.layout}
          onChange={v => setTweak('layout', v)}
          options={[
            { value: 'split', label: 'Con panel' },
            { value: 'single', label: 'Centrado' },
          ]}
        />
        <TweakRadio
          label="Calendario"
          value={t.calendarLayout}
          onChange={v => setTweak('calendarLayout', v)}
          options={[
            { value: 'side-by-side', label: 'Lado a lado' },
            { value: 'stacked', label: 'Apilado' },
          ]}
        />
      </TweakSection>
      <TweakSection label="Copy">
        <TweakText
          label="Texto del botón"
          value={t.ctaLabel}
          onChange={v => setTweak('ctaLabel', v)}
        />
      </TweakSection>
    </TweaksPanel>
  );

  // ── Success view ────────────────────────────────────────
  if (success) {
    return (
      <div className="page">
        <Topbar />
        <div className="form-card" style={{maxWidth: 720, margin: '40px auto'}}>
          <div className="success">
            <div className="success-mark">
              <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="white" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round">
                <path d="M5 12l5 5L20 7" />
              </svg>
            </div>
            <h2>¡Diagnóstico agendado!</h2>
            <p>
              Hemos recibido tu solicitud para <strong style={{color: 'var(--teal)'}}>{razonSocial}</strong>.
              Te enviamos los detalles a <strong>{email}</strong>. Un miembro de nuestro equipo te contactará en menos de 24 horas para confirmar.
            </p>
            <div className="success-summary">
              <div className="summary-row">
                <span className="k">Empresa</span>
                <span className="v">{razonSocial}</span>
              </div>
              <div className="summary-row">
                <span className="k">Visita</span>
                <span className="v">{fmtDateShort(selectedDate)} · jornada completa</span>
              </div>
              <div className="summary-row">
                <span className="k">Ubicación</span>
                <span className="v">
                  {direccion}
                  {direccionAdicional.trim() ? `, ${direccionAdicional.trim()}` : ''}
                  {' · '}{city}, {countryObj.name}
                </span>
              </div>
              <div className="summary-row">
                <span className="k">Contacto</span>
                <span className="v">{COUNTRY_BY_CODE[countryCode].dial} {phone}</span>
              </div>
            </div>
            <div className="success-actions">
              <button className="ghost-btn" onClick={() => {
                setSuccess(false);
                setRazonSocial(''); setNitRuc(''); setIndustria('');
                setEmail(''); setEmailConfirm('');
                setPhone(''); setCity(''); setDireccion(''); setDireccionAdicional('');
                setAcceptTerms(false);
                setSelectedDate(null); setSelectedAvailable(true); setSubmitted(false);
                setTouched({});
              }}>Agendar otro diagnóstico</button>
            </div>
          </div>
        </div>
        {tweaksUI}
      </div>
    );
  }

  const fieldClass = (key) => {
    const hasError = touched[key] && errors[key];
    const isValidField = !errors[key] && touched[key];
    return 'field' + (hasError ? ' has-error' : '') + (isValidField ? ' is-valid' : '');
  };

  return (
    <div className="page">
      <Topbar />
      <div className={'layout ' + (t.layout === 'single' ? 'layout-single' : '')}>
        {/* Context panel */}
        <aside className="context-panel">
          <div className="eyebrow">Paso previo</div>
          <h1 className="context-title">
            Agenda tu <span className="gradient-text">Diagnóstico Integral</span>
          </h1>
          <p className="context-lede">
            Un análisis profundo de procesos, datos y operación. Pasamos
            3–4 días en tu empresa para identificar exactamente dónde están
            las pérdidas — antes de proponer cualquier tecnología.
          </p>
          <div className="context-meta">
            <div className="meta-row">
              <div className="meta-icon">3–4</div>
              <div><strong>Días de visita</strong><br />Trabajamos en tu operación, no desde un escritorio.</div>
            </div>
            <div className="meta-row">
              <div className="meta-icon">↓</div>
              <div><strong>Informe ejecutivo</strong><br />Hallazgos priorizados por impacto económico.</div>
            </div>
            <div className="meta-row">
              <div className="meta-icon">∅</div>
              <div><strong>Sin compromiso</strong><br />El informe es tuyo. Tú decides qué sigue.</div>
            </div>
          </div>
          <div className="stepper">
            <div className={'step ' + (stepStatus[0] ? 'done' : (currentStep === 0 ? 'current' : ''))}></div>
            <div className={'step ' + (stepStatus[1] ? 'done' : (currentStep === 1 ? 'current' : ''))}></div>
            <div className={'step ' + (stepStatus[2] ? 'done' : (currentStep === 2 ? 'current' : ''))}></div>
          </div>
          <div className="step-labels">
            <span className={stepStatus[0] ? 'active' : ''}>Empresa</span>
            <span className={stepStatus[1] ? 'active' : ''}>Contacto</span>
            <span className={stepStatus[2] ? 'active' : ''}>Agenda</span>
          </div>
        </aside>

        {/* Form card */}
        <form className="form-card" onSubmit={handleSubmit} noValidate>
          <div className="form-header">
            <div className="form-title">Información de la empresa</div>
            <div className="form-sub">Completa estos datos y elige una fecha para la visita. Confirmaremos por correo en menos de 24h.</div>
          </div>

          <div className="field-grid">
            {/* Razón social */}
            <div className={fieldClass('razonSocial')}>
              <label className="label">Razón social <span className="req">*</span></label>
              <input
                className="input"
                type="text"
                placeholder="Ej. Distribuidora Andina S.A.S."
                value={razonSocial}
                onChange={e => setRazonSocial(e.target.value)}
                onBlur={() => touch('razonSocial')}
              />
              <FieldMsg touched={touched.razonSocial || submitted} error={errors.razonSocial} />
            </div>

            {/* NIT / RUC */}
            <div className={fieldClass('nitRuc')}>
              <label className="label">NIT / RUC / ID Fiscal <span className="req">*</span></label>
              <input
                className="input"
                type="text"
                placeholder="Ej. 900123456-1"
                value={nitRuc}
                onChange={e => setNitRuc(e.target.value)}
                onBlur={() => touch('nitRuc')}
              />
              <FieldMsg touched={touched.nitRuc || submitted} error={errors.nitRuc} />
            </div>

            {/* Sector / industria */}
            <div className={fieldClass('industria')}>
              <label className="label">Sector / industria <span className="req">*</span></label>
              <input
                className="input"
                type="text"
                placeholder="Ej. Manufactura, Logística, Retail, Salud…"
                value={industria}
                onChange={e => setIndustria(e.target.value)}
                onBlur={() => touch('industria')}
              />
              <FieldMsg touched={touched.industria || submitted} error={errors.industria} />
            </div>

            {/* Correo */}
            <div className={fieldClass('email')}>
              <label className="label">Correo electrónico <span className="req">*</span></label>
              <input
                className="input"
                type="email"
                placeholder="nombre@empresa.com"
                value={email}
                onChange={e => setEmail(e.target.value)}
                onBlur={() => touch('email')}
                autoComplete="email"
              />
              <FieldMsg touched={touched.email || submitted} error={errors.email} />
            </div>

            {/* Confirmar correo (debajo de correo, full width) */}
            <div className={fieldClass('emailConfirm')}>
              <label className="label">
                Confirmar correo <span className="req">*</span>
                {email && emailConfirm && email.toLowerCase() === emailConfirm.toLowerCase() && (
                  <span className="hint" style={{color: 'var(--teal)'}}>✓ coincide</span>
                )}
              </label>
              <input
                className="input"
                type="email"
                placeholder="Repite tu correo"
                value={emailConfirm}
                onChange={e => setEmailConfirm(e.target.value)}
                onPaste={e => e.preventDefault()}
                onBlur={() => touch('emailConfirm')}
              />
              <FieldMsg touched={touched.emailConfirm || submitted} error={errors.emailConfirm} />
            </div>

            {/* Teléfono */}
            <div className={fieldClass('phone')}>
              <label className="label">Teléfono <span className="req">*</span></label>
              <div className="phone-shell">
                <select
                  className="phone-cc"
                  value={countryCode}
                  onChange={e => setCountryCode(e.target.value)}
                  aria-label="Código de país"
                >
                  {COUNTRIES.map(c => (
                    <option key={c.code} value={c.code}>{c.code} {c.dial}</option>
                  ))}
                </select>
                <input
                  className="phone-num"
                  type="tel"
                  placeholder="300 123 4567"
                  value={phone}
                  onChange={e => setPhone(e.target.value)}
                  onBlur={() => touch('phone')}
                />
              </div>
              <FieldMsg touched={touched.phone || submitted} error={errors.phone} />
            </div>

            {/* País (debajo de teléfono, full width) */}
            <div className={fieldClass('country')}>
              <label className="label">País <span className="req">*</span></label>
              <select
                className="select"
                value={country}
                onChange={e => setCountry(e.target.value)}
                onBlur={() => touch('country')}
              >
                {COUNTRIES.map(c => (
                  <option key={c.code} value={c.code}>{c.name}</option>
                ))}
              </select>
              <FieldMsg touched={touched.country || submitted} error={errors.country} />
            </div>

            {/* Ciudad */}
            <div className={fieldClass('city')}>
              <label className="label">Ciudad <span className="req">*</span></label>
              <select
                className="select"
                value={city}
                onChange={e => setCity(e.target.value)}
                onBlur={() => touch('city')}
                disabled={!country}
              >
                <option value="">Selecciona tu ciudad</option>
                {cityList.map(c => (
                  <option key={c} value={c}>{c}</option>
                ))}
              </select>
              <FieldMsg touched={touched.city || submitted} error={errors.city} />
            </div>

            {/* Dirección */}
            <div className={fieldClass('direccion')}>
              <label className="label">Dirección <span className="req">*</span></label>
              <input
                className="input"
                type="text"
                placeholder="Ej. Calle 72 #10-34, Oficina 501"
                value={direccion}
                onChange={e => setDireccion(e.target.value)}
                onBlur={() => touch('direccion')}
                autoComplete="street-address"
              />
              <FieldMsg touched={touched.direccion || submitted} error={errors.direccion} />
            </div>

            {/* Dirección adicional */}
            <div className="field">
              <label className="label">
                Dirección adicional <span className="hint">(opcional)</span>
              </label>
              <input
                className="input"
                type="text"
                placeholder="Ej. Torre B, piso 5, referencias de acceso"
                value={direccionAdicional}
                onChange={e => setDireccionAdicional(e.target.value)}
                autoComplete="address-line2"
              />
            </div>
          </div>

          {/* Sobre la visita — primero, arriba */}
          <div className="section-divider">
            <h3>Sobre la visita</h3>
            <span className="step-tag">Información importante</span>
          </div>

          <div className="visit-info-top">
            <div className="visit-row">
              <div className="visit-icon">⏱</div>
              <div><strong>4 – 6 horas por día</strong><br />Jornada laboral completa.</div>
            </div>
            <div className="visit-row">
              <div className="visit-icon">◷</div>
              <div><strong>3 – 4 días en total</strong><br />Inicia en la fecha elegida.</div>
            </div>
            <div className="visit-row">
              <div className="visit-icon">⌂</div>
              <div><strong>En tu empresa</strong><br />Nos desplazamos a tu sede.</div>
            </div>
          </div>

          {/* Fecha de visita — después */}
          <div className="section-divider">
            <h3>Fecha de visita</h3>
            <span className="step-tag">Sincronizado con nuestra agenda</span>
          </div>

          <div className={'calendar-shell ' + (t.calendarLayout === 'stacked' ? 'cal-stacked' : '')}>
            <Calendar
              selectedDate={selectedDate}
              selectedAvailable={selectedAvailable}
              onSelectDate={(d, isAvail) => {
                setSelectedDate(d);
                setSelectedAvailable(isAvail);
                touch('date');
              }}
            />
            <div className="visit-side">
              <div className="visit-selected">
                <div className="visit-selected-label">Fecha de inicio</div>
                {!selectedDate && (
                  <div className="visit-selected-empty">Elige una fecha en el calendario</div>
                )}
                {selectedDate && selectedAvailable && (
                  <div className="visit-selected-date">{fmtDateLong(selectedDate)}</div>
                )}
                {selectedDate && !selectedAvailable && (
                  <>
                    <div className="visit-selected-date visit-unavail-date">No disponible</div>
                    <div className="visit-unavail-sub">{fmtDateLong(selectedDate)}</div>
                  </>
                )}
              </div>
              <div className="visit-side-helper">
                {selectedDate && !selectedAvailable
                  ? <span style={{color: 'var(--danger)'}}>Por favor selecciona una fecha marcada como disponible.</span>
                  : 'Confirmaremos por correo en menos de 24 horas.'}
              </div>
            </div>
          </div>
          {submitted && errors.date && (
            <div style={{fontSize: 11, color: 'var(--danger)', marginTop: 10, display: 'flex', alignItems: 'center', gap: 6}}>
              <span style={{width: 4, height: 4, borderRadius: '50%', background: 'currentColor', display: 'inline-block'}}></span>
              {errors.date}
            </div>
          )}

          {/* Terms */}
          <label className={'terms-row ' + ((submitted && errors.terms) ? 'has-error' : '')} htmlFor="terms-cb">
            <input
              id="terms-cb"
              type="checkbox"
              style={{position: 'absolute', opacity: 0, pointerEvents: 'none'}}
              checked={acceptTerms}
              onChange={e => setAcceptTerms(e.target.checked)}
            />
            <span className={'checkbox ' + (acceptTerms ? 'checked' : '')}>
              <CheckIcon />
            </span>
            <span className="terms-text">
              Acepto los <a href="#" onClick={e => e.preventDefault()}>términos del servicio</a> y
              la <a href="#" onClick={e => e.preventDefault()}>política de privacidad</a> de NEXO Labs.
              Autorizo el contacto para confirmar la visita y el tratamiento de mis datos conforme a la normativa aplicable.
            </span>
          </label>

          <div className="form-footer">
            <span className="secure-note">Tus datos viajan cifrados · no se comparten con terceros</span>
            <button
              type="submit"
              className="submit-btn"
              disabled={submitted && !isValid}
            >
              {t.ctaLabel}
              <ArrowIcon />
            </button>
          </div>
        </form>
      </div>

      {tweaksUI}
    </div>
  );
}

function Topbar() {
  return (
    <div className="topbar">
      <a href="../" className="brand" aria-label="Volver a NEXO Labs">
        <div className="brand-mark"><NexoIsotype /></div>
        <div className="brand-name">NEXO <span>Labs</span></div>
      </a>
      <div className="top-meta">
        <span>Diagnóstico Integral</span>
        <span className="dot-sep">•</span>
        <span className="secure">Conexión segura</span>
      </div>
    </div>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(<App />);
