// HeroReconciliation — animated hero asset for ininvoice landing.
// 3 floating document cards tell the story: pedido → albarán → factura.
// Problem rows highlighted. Alert pills call out discrepancies.
// Final green badge pays off the story: "Recuperas 45 €".

// ═════════ tokens ═════════
const T = {
  bg:         '#F5F3EE',
  dot:        'rgba(44,44,42,0.08)',
  paper:      '#FFFFFF',
  paperDark:  '#15131C',
  rowBg:      '#F1EFE8',
  rowBgDark:  '#1F1C26',

  ink:        '#2C2C2A',
  ink2:       '#5F5E5A',
  ink3:       '#888780',
  inkOnDark:  '#FFFFFF',
  inkOnDark2: 'rgba(255,255,255,0.55)',
  inkOnDark3: 'rgba(255,255,255,0.38)',

  amber:      '#EF9F27',
  amberBg:    '#FAEEDA',
  amberInk:   '#633806',
  coral:      '#E24B4A',
  coralLite:  '#F09595',
  coralInk:   '#791F1F',
  coralBgDk:  'rgba(226,75,74,0.15)',
  coralBrdDk: 'rgba(226,75,74,0.55)',
  green:      '#0F6E56',
  greenInk:   '#FFFFFF',
};

const FONT_SANS  = 'Geist, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
const FONT_MONO  = '"Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace';
const FONT_SERIF = '"Instrument Serif", Georgia, serif';

// ═════════ primitives ═════════
function CircledNum({ n, color, bg }) {
  return (
    <div style={{
      width: 16, height: 16, borderRadius: 999,
      background: bg,
      color: color,
      fontFamily: FONT_MONO, fontSize: 10, fontWeight: 600,
      display:'flex', alignItems:'center', justifyContent:'center',
      flexShrink: 0,
    }}>{n}</div>
  );
}

function LineRow({ label, qty, price, highlight, dark, muted, priceColor }) {
  const bg = highlight === 'amber'
    ? T.amberBg
    : highlight === 'coral' && dark
      ? T.coralBgDk
      : dark
        ? T.rowBgDark
        : T.rowBg;
  const border = highlight === 'coral' && dark
    ? `1px solid ${T.coralBrdDk}`
    : highlight === 'amber'
      ? `1px solid rgba(239,159,39,0.35)`
      : '1px solid transparent';
  return (
    <div
      className={highlight ? 'shimmer-row' : ''}
      style={{
        display:'grid',
        gridTemplateColumns: '1fr auto auto',
        gap: 8, alignItems:'center',
        padding: '8px 10px',
        background: bg,
        border: border,
        borderRadius: 8,
        fontSize: 11,
        color: dark ? (muted ? T.inkOnDark2 : T.inkOnDark) : (muted ? T.ink3 : T.ink),
      }}
    >
      <span style={{fontFamily: FONT_SANS, fontWeight: 450}}>{label}</span>
      <span style={{fontFamily: FONT_MONO, color: dark ? T.inkOnDark2 : T.ink3}}>{qty}</span>
      <span style={{
        fontFamily: FONT_MONO,
        color: priceColor || (dark ? (muted ? T.inkOnDark2 : T.inkOnDark) : T.ink),
        fontWeight: highlight ? 600 : 450,
        minWidth: 54, textAlign: 'right',
      }}>{price}</span>
    </div>
  );
}

// ═════════ skeleton bars ═════════
// Simulates document body as gray placeholder bars — reads as "paper abstraction"
function SkeletonRow({ widths, gap = 6, color = 'rgba(44,44,42,0.13)' }) {
  return (
    <div style={{display:'flex', gap, alignItems:'center'}}>
      {widths.map((w, i) => (
        <div key={i} style={{
          height: 4,
          width: w,
          borderRadius: 2,
          background: color,
        }}/>
      ))}
    </div>
  );
}

function SkeletonBlock({ rows, color, dark }) {
  const c = color || (dark ? 'rgba(255,255,255,0.18)' : 'rgba(44,44,42,0.13)');
  return (
    <div style={{display:'flex', flexDirection:'column', gap: 7}}>
      {rows.map((widths, i) => (
        <SkeletonRow key={i} widths={widths} color={c}/>
      ))}
    </div>
  );
}

// ═════════ cards ═════════
function DocCard({ kind, num, numColor, code, highlight, dark, rotate, x, y, delay, floatDelay }) {
  // highlight: { type: 'amber'|'coral', label, value, priceColor, row: 0..2 }
  // dark: boolean → dark card variant
  const CARD_W = 240;
  const CARD_H = 320;

  const paperBg   = dark ? T.paperDark : T.paper;
  const barColor  = dark ? 'rgba(255,255,255,0.16)' : 'rgba(44,44,42,0.12)';
  const barMuted  = dark ? 'rgba(255,255,255,0.10)' : 'rgba(44,44,42,0.07)';
  const markBg    = dark ? '#FFFFFF'  : '#1F1D29';
  const stampBg   = dark ? '#FFFFFF'  : '#1F1D29';
  const kindInk   = numColor;

  // Build a 3-row "lines table" — the row at `highlight.row` is replaced with real text
  const lineRows = [0, 1, 2].map(i => {
    if (highlight && highlight.row === i) {
      const isAmber = highlight.type === 'amber';
      const isCoral = highlight.type === 'coral';
      const rowBg = isAmber ? T.amberBg
                  : isCoral && dark ? T.coralBgDk
                  : isCoral ? '#FCEAEA'
                  : 'transparent';
      const border = isAmber ? 'rgba(239,159,39,0.30)'
                   : isCoral ? 'rgba(226,75,74,0.38)'
                   : 'transparent';
      return (
        <div key={i} className="shimmer-row" style={{
          display:'grid', gridTemplateColumns:'1fr auto', alignItems:'center',
          padding:'6px 8px',
          background: rowBg,
          border: `1px solid ${border}`,
          borderRadius: 4,
          fontSize: 10,
          color: dark ? T.inkOnDark : T.ink,
          whiteSpace: 'nowrap',
        }}>
          <span style={{fontFamily: FONT_SANS, fontWeight: 500, letterSpacing:'-0.005em'}}>{highlight.label}</span>
          <span style={{
            fontFamily: FONT_MONO, fontWeight: 600,
            color: highlight.priceColor || (dark ? T.inkOnDark : T.ink),
            whiteSpace: 'nowrap',
          }}>{highlight.value}</span>
        </div>
      );
    }
    // Neutral skeleton row — two bars (label + value)
    return (
      <div key={i} style={{
        display:'grid', gridTemplateColumns:'1fr auto', alignItems:'center',
        padding:'6px 8px',
        height: 22,
      }}>
        <div style={{height: 4, width: 72 + (i%2)*14, background: barColor, borderRadius: 2}}/>
        <div style={{height: 4, width: 32, background: barMuted, borderRadius: 2}}/>
      </div>
    );
  });

  return (
    <div
      className={`card-enter float-loop card-enter-${num}`}
      style={{
        position:'absolute',
        left: x, top: y,
        width: CARD_W,
        height: CARD_H,
        background: paperBg,
        border: dark ? '1px solid rgba(255,255,255,0.06)' : '1px solid rgba(44,44,42,0.08)',
        borderRadius: 3,
        padding: '18px 18px 16px',
        boxShadow: dark
          ? '0 1px 0 rgba(255,255,255,0.04), 0 3px 8px rgba(0,0,0,0.18), 0 30px 60px -24px rgba(21,19,28,0.45)'
          : '0 1px 0 rgba(44,44,42,0.02), 0 2px 6px rgba(44,44,42,0.05), 0 24px 48px -20px rgba(44,44,42,0.22)',
        '--doc-rotate': `${rotate}deg`,
        '--float-delay': `${floatDelay}s`,
        animationDelay: `${delay}s, calc(${delay}s + 1s), calc(${delay}s + 1s + var(--float-delay))`,
        zIndex: 2,
        display:'flex',
        flexDirection:'column',
      }}
    >
      {/* Top row: brand mark + header bars + code */}
      <div style={{
        display:'flex', alignItems:'flex-start', justifyContent:'space-between',
        gap: 10,
        marginBottom: 16,
      }}>
        <div style={{
          width: 26, height: 9,
          background: markBg,
          borderRadius: 1,
          flexShrink: 0,
          marginTop: 2,
        }}/>
        <div style={{display:'flex', flexDirection:'column', gap: 5, flex: 1, paddingTop: 4}}>
          <div style={{height: 3, width: '72%', background: barColor, borderRadius: 2}}/>
          <div style={{height: 3, width: '55%', background: barColor, borderRadius: 2}}/>
        </div>
      </div>

      {/* Kind label + code */}
      <div style={{
        display:'flex', alignItems:'center', justifyContent:'space-between',
        marginBottom: 12,
      }}>
        <span style={{
          fontFamily: FONT_SANS,
          fontSize: 9, fontWeight: 600,
          letterSpacing: '0.14em',
          color: kindInk,
          textTransform:'uppercase',
          display:'inline-flex', alignItems:'center', gap: 6,
        }}>
          <span style={{
            width: 13, height: 13, borderRadius: 999,
            background: dark ? 'rgba(255,255,255,0.1)' : 'rgba(44,44,42,0.06)',
            display:'inline-flex', alignItems:'center', justifyContent:'center',
            fontFamily: FONT_MONO, fontSize: 8, fontWeight: 600,
            color: kindInk,
          }}>{num}</span>
          {kind}
        </span>
        <span style={{
          fontFamily: FONT_MONO, fontSize: 9,
          color: dark ? T.inkOnDark3 : T.ink3,
          letterSpacing: '0.04em',
          whiteSpace: 'nowrap',
        }}>{code}</span>
      </div>

      {/* 3-row table (skeleton + highlighted row) */}
      <div style={{
        display:'flex', flexDirection:'column', gap: 2,
        marginBottom: 14,
      }}>
        {lineRows}
      </div>

      {/* Hairline */}
      <div style={{
        height: 1,
        background: dark ? 'rgba(255,255,255,0.08)' : 'rgba(44,44,42,0.08)',
        margin: '4px 0 14px',
      }}/>

      {/* Mid skeleton block (paragraph feel) */}
      <SkeletonBlock
        rows={[
          [58, 44, 38],
          [72, 30],
          [48, 52, 28],
        ]}
        dark={dark}
      />

      {/* Spacer */}
      <div style={{flex: 1, minHeight: 18}}/>

      {/* Bottom row: footer bars + stamp */}
      <div style={{
        display:'flex', alignItems:'flex-end', justifyContent:'space-between',
        gap: 12,
      }}>
        <div style={{display:'flex', flexDirection:'column', gap: 5, flex: 1}}>
          <div style={{height: 3, width: '45%', background: barMuted, borderRadius: 2}}/>
          <div style={{height: 3, width: '60%', background: barMuted, borderRadius: 2}}/>
        </div>
        <div style={{
          width: 38, height: 12,
          background: stampBg,
          borderRadius: 1,
          flexShrink: 0,
        }}/>
      </div>
    </div>
  );
}

// ═════════ pills ═════════
function AlertPill({ children, kind, x, y, delay }) {
  const isDark  = kind === 'dark';
  const isCoral = kind === 'coral';
  const isAmber = kind === 'amber';

  return (
    <div
      className="pill-pop float-loop"
      style={{
        position:'absolute',
        left: x, top: y,
        background: isDark ? T.paperDark : T.paper,
        color: isDark ? T.inkOnDark : T.ink,
        borderRadius: 999,
        padding: '8px 14px 8px 10px',
        display:'inline-flex',
        alignItems:'center',
        gap: 8,
        fontFamily: FONT_SANS,
        fontSize: 12,
        fontWeight: 500,
        whiteSpace: 'nowrap',
        boxShadow: isCoral
          ? '0 2px 4px rgba(226,75,74,0.15), 0 12px 28px -10px rgba(226,75,74,0.35)'
          : isDark
            ? '0 4px 12px rgba(0,0,0,0.15), 0 20px 44px -18px rgba(21,19,28,0.4)'
            : '0 1px 2px rgba(0,0,0,0.04), 0 10px 24px -10px rgba(44,44,42,0.18)',
        border: isCoral ? '1px solid rgba(226,75,74,0.28)' : 'none',
        '--float-delay': `${delay + 1.5}s`,
        animationDelay: `${delay}s, calc(${delay}s + 0.6s)`,
        zIndex: 5,
      }}
    >
      {children}
    </div>
  );
}

function PackageIcon() {
  return (
    <div style={{
      width: 20, height: 20, borderRadius: 999,
      background: T.amberBg,
      display:'flex', alignItems:'center', justifyContent:'center',
      flexShrink: 0,
    }}>
      <svg width="11" height="11" viewBox="0 0 16 16" fill="none">
        <path d="M2.5 4.5L8 1.8 13.5 4.5M2.5 4.5v7L8 14.2M2.5 4.5L8 7.2m0 7V7.2m0 0L13.5 4.5m0 0v7L8 14.2" stroke={T.amberInk} strokeWidth="1.3" strokeLinejoin="round"/>
      </svg>
    </div>
  );
}

function PulseDot({ color }) {
  return (
    <span style={{
      position:'relative',
      width: 10, height: 10, flexShrink: 0,
      display:'inline-flex',
      alignItems:'center', justifyContent:'center',
    }}>
      <span style={{
        position:'absolute', inset: 0,
        borderRadius: 999, background: color, opacity: 0.35,
        animation: 'pulseHalo 1.6s ease-out infinite',
      }}/>
      <span style={{
        width: 6, height: 6, borderRadius: 999, background: color,
        position:'relative', zIndex: 1,
      }}/>
    </span>
  );
}

function EuroIcon() {
  return (
    <div style={{
      width: 20, height: 20, borderRadius: 999,
      background: 'rgba(226,75,74,0.18)',
      color: T.coralLite,
      display:'flex', alignItems:'center', justifyContent:'center',
      fontFamily: FONT_MONO, fontSize: 12, fontWeight: 700,
      flexShrink: 0,
    }}>€</div>
  );
}

// ═════════ top chip ═════════
function BrandChip() {
  return (
    <div
      className="chip-pop"
      style={{
        position:'absolute',
        top: 18, left: '50%',
        transform:'translateX(-50%)',
        background: T.paper,
        borderRadius: 999,
        padding: '7px 14px 7px 8px',
        display:'inline-flex',
        alignItems:'center',
        gap: 8,
        fontFamily: FONT_SANS,
        fontSize: 12,
        fontWeight: 500,
        color: T.ink,
        whiteSpace: 'nowrap',
        boxShadow: '0 1px 2px rgba(0,0,0,0.04), 0 8px 22px -10px rgba(44,44,42,0.18)',
        zIndex: 10,
      }}
    >
      <div style={{
        width: 20, height: 20, borderRadius: 6,
        background: T.green,
        display:'flex', alignItems:'center', justifyContent:'center',
      }}>
        <svg width="11" height="11" viewBox="0 0 12 12" fill="none">
          <path d="M2 6.3L4.8 9 10 3.2" stroke="#fff" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"/>
        </svg>
      </div>
      IA detecta en tiempo real
    </div>
  );
}

// ═════════ final payoff badge ═════════
function PayoffBadge() {
  return (
    <div
      className="badge-pop"
      style={{
        position:'absolute',
        bottom: 22, left: '50%',
        transform:'translateX(-50%)',
        background: T.green,
        color: T.greenInk,
        borderRadius: 999,
        padding: '10px 22px 10px 12px',
        display:'inline-flex',
        alignItems:'center',
        gap: 12,
        whiteSpace: 'nowrap',
        boxShadow: '0 4px 14px rgba(15,110,86,0.25), 0 20px 48px -16px rgba(15,110,86,0.45)',
        zIndex: 10,
      }}
    >
      <div style={{
        width: 28, height: 28, borderRadius: 999,
        background: T.paper,
        display:'flex', alignItems:'center', justifyContent:'center',
        flexShrink: 0,
      }}>
        <svg width="14" height="14" viewBox="0 0 14 14" fill="none">
          <path d="M2 7L5.5 10.5 12 3.5" stroke={T.green} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
        </svg>
      </div>
      <div style={{display:'flex', flexDirection:'column', lineHeight: 1.1}}>
        <span style={{
          fontFamily: FONT_SANS, fontSize: 9, fontWeight: 500,
          letterSpacing: '0.12em',
          textTransform:'uppercase',
          color: 'rgba(255,255,255,0.68)',
          marginBottom: 2,
        }}>ininvoice bloquea el pago</span>
        <span style={{
          fontFamily: FONT_SANS, fontSize: 13, fontWeight: 500,
          letterSpacing: '-0.005em',
        }}>Recuperas <span style={{fontFamily: FONT_MONO, fontWeight: 600}}>45&nbsp;€</span></span>
      </div>
    </div>
  );
}

// ═════════ flow connectors ═════════
function Connectors() {
  // Card positions:
  //   Card1: x=40..308,  y=150..,  rotate -3°
  //   Card2: x=386..654, y=120..,  rotate +1.5°
  //   Card3: x=732..1000,y=150..,  rotate +4°
  // We draw two flowing dotted paths connecting card edges around the "problem row"
  // height (~y=300, where Tornillo M8 row sits).
  return (
    <svg
      aria-hidden
      style={{position:'absolute', inset: 0, pointerEvents:'none', zIndex: 1}}
      width="100%" height="100%" viewBox="0 0 1040 640" preserveAspectRatio="none"
    >
      <defs>
        <marker id="arrow-coral" viewBox="0 0 10 10" refX="8" refY="5"
                markerWidth="6" markerHeight="6" orient="auto-start-reverse">
          <path d="M 0 0 L 10 5 L 0 10 z" fill={T.coral}/>
        </marker>
        <marker id="arrow-neutral" viewBox="0 0 10 10" refX="8" refY="5"
                markerWidth="6" markerHeight="6" orient="auto-start-reverse">
          <path d="M 0 0 L 10 5 L 0 10 z" fill="rgba(44,44,42,0.5)"/>
        </marker>
      </defs>

      {/* Neutral gray: Card1 right edge → Card2 left edge */}
      <path
        d="M 300 320 C 340 310, 370 290, 400 278"
        fill="none"
        stroke="rgba(44,44,42,0.35)"
        strokeWidth="1.6"
        strokeDasharray="3 5"
        strokeLinecap="round"
        markerEnd="url(#arrow-neutral)"
        className="dash-flow"
      />

      {/* Coral: Card2 right edge → Card3 left edge */}
      <path
        d="M 640 278 C 675 290, 710 312, 740 322"
        fill="none"
        stroke={T.coral}
        strokeWidth="1.8"
        strokeDasharray="3 5"
        strokeLinecap="round"
        markerEnd="url(#arrow-coral)"
        className="dash-flow dash-flow-coral"
        opacity="0.9"
      />
    </svg>
  );
}

// ═════════ grid pattern bg ═════════
function DotPattern() {
  // Fine graph-paper grid (designer canvas aesthetic)
  return (
    <div aria-hidden style={{
      position:'absolute', inset: 0,
      backgroundImage: `
        linear-gradient(to right, rgba(44,44,42,0.05) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(44,44,42,0.05) 1px, transparent 1px)
      `,
      backgroundSize: '28px 28px',
      backgroundPosition: '0 0',
      pointerEvents:'none',
      zIndex: 0,
    }}/>
  );
}

// ═════════ main ═════════
function HeroReconciliation() {
  const wrapRef = React.useRef(null);
  const [scale, setScale] = React.useState(1);
  const [narrow, setNarrow] = React.useState(false);

  React.useEffect(() => {
    const STAGE_W = 1040;
    const calc = () => {
      const el = wrapRef.current;
      if (!el) return;
      const w = el.clientWidth;
      setNarrow(w < 720);
      setScale(Math.min(1, w / STAGE_W));
    };
    calc();
    window.addEventListener('resize', calc);
    return () => window.removeEventListener('resize', calc);
  }, []);

  const STAGE_W = 1040;
  const STAGE_H = 640;

  // ── Card 1: PEDIDO (paper, neutral)
  const card1 = {
    kind: 'Pedido', num: 1, numColor: T.ink,
    code: 'PO-112',
    highlight: null,
    rotate: -3,
    x: 60, y: 160, delay: 0.1,
    floatDelay: 0,
  };

  // ── Card 2: ALBARÁN (paper, amber problem row)
  const card2 = {
    kind: 'Albarán', num: 2, numColor: T.amberInk,
    code: 'ALB-091',
    highlight: { type: 'amber', label: 'Tornillo M8', value: '−5 uds', priceColor: T.amberInk, row: 0 },
    rotate: 1.5,
    x: 400, y: 130, delay: 0.5,
    floatDelay: 1.5,
  };

  // ── Card 3: FACTURA (dark, coral problem row)
  const card3 = {
    kind: 'Factura', num: 3, numColor: T.coralLite,
    code: 'FA-042',
    highlight: { type: 'coral', label: 'Tornillo M8', value: '+0,20 €/u', priceColor: T.coralLite, row: 0 },
    rotate: 4,
    x: 740, y: 160, delay: 0.9,
    floatDelay: 3,
    dark: true,
  };

  // ── Mobile: stack vertically, no rotations
  if (narrow) {
    const MOBILE_H = 3 * 300 + 2 * 16 + 140;
    return (
      <div ref={wrapRef} style={{
        width:'100%',
        background: T.bg,
        borderRadius: 24,
        overflow:'hidden',
        position:'relative',
        padding: '64px 16px 90px',
        minHeight: MOBILE_H,
      }}>
        <DotPattern/>
        <BrandChip/>
        <div style={{display:'flex', flexDirection:'column', gap: 16, position:'relative', zIndex: 2}}>
          {[card1, card2, card3].map((c, i) => (
            <div key={i} style={{position:'relative', height: 288}}>
              <DocCard {...c} x={'50%'} y={0} rotate={0}
                style={{position:'relative', transform:'translateX(-50%)'}}/>
            </div>
          ))}
        </div>
        <PayoffBadge/>
      </div>
    );
  }

  return (
    <div
      ref={wrapRef}
      style={{
        width:'100%',
        maxWidth: STAGE_W + 'px',
        margin: '0 auto',
        position:'relative',
      }}
    >
      {/* Responsive wrapper */}
      <div style={{
        position:'relative',
        width:'100%',
        height: STAGE_H * scale,
      }}>
        <div style={{
          position:'absolute',
          left: 0, top: 0,
          width: STAGE_W,
          height: STAGE_H,
          transform: `scale(${scale})`,
          transformOrigin: 'top left',
        }}>
          {/* Canvas */}
          <div style={{
            width: STAGE_W,
            height: STAGE_H,
            background: T.bg,
            borderRadius: 24,
            overflow:'hidden',
            position:'relative',
            padding: '24px',
          }}>
            <DotPattern/>
            <BrandChip/>
            <Connectors/>

            {/* Cards */}
            <DocCard {...card1}/>
            <DocCard {...card2}/>
            <DocCard {...card3}/>

            {/* Alert pills */}
            {/* A — amber, near Card 2 problem row */}
            <AlertPill kind="amber" x={430} y={470} delay={1.3}>
              <PackageIcon/>
              <span>Faltan <span style={{fontFamily: FONT_MONO, fontWeight: 600}}>5 uds</span></span>
            </AlertPill>

            {/* B — coral, near Card 3 problem row */}
            <AlertPill kind="coral" x={770} y={500} delay={1.5}>
              <PulseDot color={T.coral}/>
              <span>Precio subido <span style={{fontFamily: FONT_MONO, fontWeight: 600, color: T.coralInk}}>+0,20&nbsp;€/u</span></span>
            </AlertPill>

            {/* C — dark, lower left */}
            <AlertPill kind="dark" x={90} y={510} delay={1.7}>
              <EuroIcon/>
              <span style={{color: T.inkOnDark}}>Sobrepago <span style={{fontFamily: FONT_MONO, fontWeight: 600, color: T.coralLite}}>+45&nbsp;€</span></span>
            </AlertPill>

            {/* Final badge */}
            <PayoffBadge/>
          </div>
        </div>
      </div>
    </div>
  );
}

// ═════════ wrapper / render ═════════
function App() {
  return (
    <div style={{
      minHeight:'100vh',
      padding: '40px 24px',
      background: '#FAFAF7',
      fontFamily: FONT_SANS,
      display:'flex', alignItems:'center', justifyContent:'center',
    }}>
      <div style={{width:'100%', maxWidth: 1120}}>
        <HeroReconciliation/>
      </div>
    </div>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(
  window.__HERO_RECON_EMBED
    ? <HeroReconciliation/>
    : <App/>
);
