/* global React */
/* ============================================================
   The Matrix: 4 fronts × 4 stages, one domain.
   Three diagrammatic directions: A heatmap grid · B staircase
   · C progress tracks. Exported to window.
   ============================================================ */

/* ---- Shared data ------------------------------------------ */
const STAGES = [
  { n: "01", name: "Manual", gloss: "Runs on memory" },
  { n: "02", name: "Digital but scattered", gloss: "Tools, no standard" },
  { n: "03", name: "Standardized", gloss: "One way to work" },
  { n: "04", name: "AI-augmented", gloss: "The standard runs itself" },
];

const ICONS = {
  doc: "M14 3v5h5M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zM8 13h8M8 17h6",
  grid: "M3 3h7v7H3zM14 3h7v7h-7zM14 14h7v7h-7zM3 14h7v7H3z",
  layers: "M12 2l9 5-9 5-9-5 9-5zM3 12l9 5 9-5M3 17l9 5 9-5",
  users: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8M22 21v-2a4 4 0 0 0-3-3.87M16 3.13A4 4 0 0 1 16 11",
};

const FRONTS = [
  {
    name: "Information & documentation", icon: "doc",
    cells: [
      "In people’s heads, WhatsApp, paper on-site",
      "Digital but scattered; no naming, versions unclear",
      "One folder standard, one source of truth, found in minutes",
      "Ask in plain language, get the answer and its source",
    ],
  },
  {
    name: "Process standardization", icon: "grid",
    cells: [
      "However each engineer prefers; nothing written down",
      "Templates float around, mutated per project; each starts from scratch",
      "Same skeleton, formats & review cadence on every project",
      "Partly runs itself: AI drafts recurring reports, flags gaps",
    ],
  },
  {
    name: "Tools & technology", icon: "layers",
    cells: [
      "Paper, calls, WhatsApp; maybe Excel for the budget",
      "Drive, Excel, email, WhatsApp as disconnected islands",
      "One shared stack, used the same way; first AI assists",
      "AI on top of the stack, integrated into daily work",
    ],
  },
  {
    name: "People & culture", icon: "users",
    cells: [
      "Owner is the only one who understands the site; knowledge walks out",
      "A few digital-comfortable people, but personal not shared",
      "Internal champion; team trained; new hires onboard into a system",
      "AI is a normal teammate; the owner is off the critical path",
    ],
  },
];

/* ---- Spanish parallels (used by MatrixHybrid, the embedded one) ---- */
const STAGES_ES = [
  { n: "01", name: "Manual", gloss: "Depende de la memoria" },
  { n: "02", name: "Digital pero disperso", gloss: "Herramientas, sin estándar" },
  { n: "03", name: "Estandarizado", gloss: "Una sola forma de trabajar" },
  { n: "04", name: "Asistida por IA", gloss: "El estándar se lleva solo" },
];
const FRONTS_ES = [
  { name: "Información y documentación", icon: "doc",
    cells: [
      "En la cabeza de la gente, WhatsApp, papel en obra",
      "Digital pero disperso; sin nombramiento, versiones confusas",
      "Un estándar de carpetas, una fuente de verdad, se encuentra en minutos",
      "Pregunte en lenguaje natural, reciba la respuesta y su fuente",
    ] },
  { name: "Estandarización de procesos", icon: "grid",
    cells: [
      "Como cada residente prefiere; nada escrito",
      "Plantillas sueltas, mutadas por obra; cada una arranca de cero",
      "Mismo esqueleto, formatos y cadencia de revisión en cada obra",
      "En parte se lleva solo: la IA redacta informes recurrentes, marca vacíos",
    ] },
  { name: "Herramientas y tecnología", icon: "layers",
    cells: [
      "Papel, llamadas, WhatsApp; quizá Excel para el presupuesto",
      "Drive, Excel, correo, WhatsApp como islas desconectadas",
      "Un solo conjunto compartido, usado igual; primeros apoyos de IA",
      "IA sobre el conjunto, integrada al trabajo diario",
    ] },
  { name: "Personas y cultura", icon: "users",
    cells: [
      "El dueño es el único que entiende la obra; el conocimiento se va con la gente",
      "Unas pocas personas cómodas con lo digital, pero personal, no compartido",
      "Referente interno; equipo formado; los nuevos entran a un sistema",
      "La IA es un compañero más; el dueño sale de la ruta crítica",
    ] },
];
const tr1 = (en, es) => (window.cecLang === "es" ? es : en);

function Ico({ d, size = 22, sw = 1.85, color = "currentColor", style }) {
  return (
    <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color}
      strokeWidth={sw} strokeLinecap="round" strokeLinejoin="round" style={style}>
      {d.split("M").filter(Boolean).map((s, i) => <path key={i} d={"M" + s} />)}
    </svg>
  );
}

/* Logo + wordmark lockup */
function Lockup({ dark }) {
  return (
    <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
      <img src="assets/logo-mark.png" alt="" style={{ height: 22 }} />
      <span style={{ font: "300 16px/1 var(--font-sans)", letterSpacing: "-.01em", color: dark ? "#fff" : "var(--grey-900)" }}>
        Cecrop<b style={{ fontWeight: 700 }}>AI</b>
      </span>
    </div>
  );
}

/* ============================================================
   HYBRID: Warm heatmap (A's grid clarity, C's paper + serif)
   ============================================================ */
function MatrixHybrid({ embed }) {
  const headBg = ["#E1D7C4", "#C3D9BE", "#73B795", "#00603C"];
  const headFg = ["var(--ink-soft)", "#1f4a36", "#0a3322", "#F4EEE2"];
  const cellBg = ["#EADFCC", "#DCE7D5", "#A9CDB5", "#00603C"];
  const cellFg = ["var(--ink-soft)", "#3a4d3e", "#123829", "rgba(244,238,226,.95)"];
  const cellBd = ["rgba(120,100,60,.16)", "rgba(60,100,70,.14)", "rgba(20,80,50,.16)", "transparent"];
  const LS = window.cecLang === "es" ? STAGES_ES : STAGES;
  const LF = window.cecLang === "es" ? FRONTS_ES : FRONTS;

  return (
    <div style={{ width: "100%", height: embed ? "auto" : "100%", background: "var(--paper)", padding: embed ? "15px 0 0" : "52px 58px 44px", display: "flex", flexDirection: "column", fontFamily: "var(--font-sans)" }}>
      {/* header */}
      {!embed && (
      <div style={{ marginBottom: 24 }}>
        <p style={{ font: "700 13px var(--font-sans)", letterSpacing: ".15em", textTransform: "uppercase", color: "var(--green-deep)", margin: 0 }}>The maturity matrix</p>
        <h2 style={{ font: "500 36px/1.04 var(--font-serif)", letterSpacing: "-.01em", color: "var(--ink)", margin: "9px 0 0" }}>From running on memory to running on a system</h2>
        <p style={{ font: "400 14px/1.4 var(--font-sans)", color: "var(--ink-mute)", margin: "8px 0 0" }}>Project information &amp; day-to-day management: the four fronts a firm climbs on, stage by stage.</p>
      </div>
      )}

      {/* grid */}
      <div style={{ flex: embed ? "none" : 1, display: "grid", gridTemplateColumns: "236px repeat(4,1fr)", gridTemplateRows: embed ? "auto repeat(4,auto)" : "auto repeat(4,1fr)", gap: 5 }}>
        {/* corner */}
        <div style={{ display: "flex", alignItems: "flex-end", paddingBottom: 12 }}>
          <span style={{ font: "700 12px var(--font-sans)", letterSpacing: ".1em", textTransform: "uppercase", color: "var(--ink-mute)" }}>{tr1("Four fronts ↓", "Cuatro frentes ↓")}</span>
        </div>
        {/* stage headers */}
        {LS.map((s, i) => (
          <div key={s.n} style={{ position: "relative", background: headBg[i], borderRadius: 7, padding: "14px 16px 13px", display: "flex", flexDirection: "column", justifyContent: "center" }}>
            {i === 1 && (
              <span style={{ position: "absolute", top: -11, left: 14, background: "var(--accent-ochre)", color: "#fff", font: "700 10px var(--font-sans)", letterSpacing: ".08em", textTransform: "uppercase", padding: "3px 9px", borderRadius: 999 }}>{tr1("Most firms are here", "Aquí está la mayoría")}</span>
            )}
            <div style={{ display: "flex", alignItems: "baseline", gap: 8 }}>
              <span style={{ font: "300 26px var(--font-sans)", color: headFg[i], opacity: .9 }}>{s.n}</span>
              <span style={{ font: "700 17px var(--font-sans)", color: headFg[i], letterSpacing: "-.01em" }}>{s.name}</span>
            </div>
            <span style={{ font: "500 12px var(--font-sans)", color: headFg[i], opacity: .74, marginTop: 3 }}>{s.gloss}</span>
          </div>
        ))}
        {/* rows */}
        {LF.map((f) => (
          <React.Fragment key={f.name}>
            <div style={{ display: "flex", alignItems: "center", gap: 13, paddingRight: 14 }}>
              <span style={{ flexShrink: 0, width: 38, height: 38, borderRadius: 8, background: "var(--paper-card)", border: "1px solid var(--stone)", display: "grid", placeItems: "center", color: "var(--green-deep)" }}>
                <Ico d={ICONS[f.icon]} size={20} />
              </span>
              <span style={{ font: "600 16px/1.2 var(--font-sans)", color: "var(--ink)" }}>{f.name}</span>
            </div>
            {f.cells.map((c, i) => (
              <div key={i} style={{ background: cellBg[i], border: "1px solid " + cellBd[i], borderRadius: 7, padding: "13px 15px", display: "flex", alignItems: "center" }}>
                <span style={{ font: "400 13.5px/1.42 var(--font-sans)", color: cellFg[i] }}>{c}</span>
              </div>
            ))}
          </React.Fragment>
        ))}
      </div>

      {/* footnote */}
      {!embed && (
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: 20, borderTop: "1.5px solid var(--stone)", paddingTop: 15 }}>
        <p style={{ font: "400 13px/1.4 var(--font-sans)", color: "var(--ink-soft)", margin: 0, maxWidth: 760 }}>
          Few firms sit cleanly in one column, most straddle two, further along on some fronts than others. The greener the column, the more the work runs on a <em style={{ fontStyle: "italic", color: "var(--green-deep)" }}>system</em> rather than a person.
        </p>
        <Lockup />
      </div>
      )}
    </div>
  );
}

/* ============================================================
   DIRECTION A: Saturation heatmap grid
   ============================================================ */
function MatrixA() {
  const headBg = ["#E7E9EB", "#DCEEE4", "#9FD2B9", "#00603C"];
  const headFg = ["var(--grey-700)", "var(--green-deep)", "#0c3826", "#fff"];
  const cellBg = ["#EFF0F1", "#F1F8F4", "#DCEEE4", "#00603C"];
  const cellFg = ["var(--grey-700)", "#2a4d3e", "#133b2b", "rgba(255,255,255,.94)"];

  return (
    <div style={{ width: "100%", height: "100%", background: "var(--grey-50)", padding: "52px 56px 46px", display: "flex", flexDirection: "column", fontFamily: "var(--font-sans)" }}>
      {/* header */}
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "flex-end", marginBottom: 26 }}>
        <div>
          <p style={{ font: "700 13px var(--font-sans)", letterSpacing: ".15em", textTransform: "uppercase", color: "var(--green-700)", margin: 0 }}>The maturity matrix</p>
          <h2 style={{ font: "600 33px/1.08 var(--font-sans)", letterSpacing: "-.01em", color: "var(--grey-900)", margin: "10px 0 0" }}>Project information &amp; day-to-day management</h2>
        </div>
        <p style={{ font: "400 13.5px/1.5 var(--font-sans)", color: "var(--grey-500)", margin: 0, maxWidth: 250, textAlign: "right" }}>Find the column that sounds most like your firm. Each row is a front; each column, a stage.</p>
      </div>

      {/* grid */}
      <div style={{ flex: 1, display: "grid", gridTemplateColumns: "232px repeat(4,1fr)", gridTemplateRows: "auto repeat(4,1fr)", gap: 4 }}>
        {/* corner */}
        <div style={{ display: "flex", alignItems: "flex-end", paddingBottom: 12 }}>
          <span style={{ font: "700 12px var(--font-sans)", letterSpacing: ".1em", textTransform: "uppercase", color: "var(--grey-400)" }}>Four fronts ↓</span>
        </div>
        {/* stage headers */}
        {STAGES.map((s, i) => (
          <div key={s.n} style={{ position: "relative", background: headBg[i], borderRadius: 7, padding: "14px 16px 13px", display: "flex", flexDirection: "column", justifyContent: "center" }}>
            {i === 1 && (
              <span style={{ position: "absolute", top: -11, left: 14, background: "var(--accent-ochre)", color: "#fff", font: "700 10px var(--font-sans)", letterSpacing: ".08em", textTransform: "uppercase", padding: "3px 9px", borderRadius: 999 }}>Most firms are here</span>
            )}
            <div style={{ display: "flex", alignItems: "baseline", gap: 8 }}>
              <span style={{ font: "300 26px var(--font-sans)", color: headFg[i], opacity: .85 }}>{s.n}</span>
              <span style={{ font: "700 17px var(--font-sans)", color: headFg[i], letterSpacing: "-.01em" }}>{s.name}</span>
            </div>
            <span style={{ font: "500 12px var(--font-sans)", color: headFg[i], opacity: .72, marginTop: 3 }}>{s.gloss}</span>
          </div>
        ))}
        {/* rows */}
        {FRONTS.map((f) => (
          <React.Fragment key={f.name}>
            <div style={{ display: "flex", alignItems: "center", gap: 13, paddingRight: 14 }}>
              <span style={{ flexShrink: 0, width: 38, height: 38, borderRadius: 8, background: "var(--green-50)", border: "1px solid var(--green-100)", display: "grid", placeItems: "center", color: "var(--green-700)" }}>
                <Ico d={ICONS[f.icon]} size={20} />
              </span>
              <span style={{ font: "600 16px/1.2 var(--font-sans)", color: "var(--grey-900)" }}>{f.name}</span>
            </div>
            {f.cells.map((c, i) => (
              <div key={i} style={{ background: cellBg[i], borderRadius: 7, padding: "13px 15px", display: "flex", alignItems: "center" }}>
                <span style={{ font: "400 13.5px/1.42 var(--font-sans)", color: cellFg[i] }}>{c}</span>
              </div>
            ))}
          </React.Fragment>
        ))}
      </div>

      {/* footnote */}
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: 22, borderTop: "1px solid var(--grey-200)", paddingTop: 16 }}>
        <p style={{ font: "400 13px/1.4 var(--font-sans)", color: "var(--grey-500)", margin: 0, maxWidth: 720 }}>
          A firm can sit between columns, place it where most of its answers cluster, then name the nearest gap. The greener the column, the more the work runs on a <em style={{ fontStyle: "italic", color: "var(--green-700)" }}>system</em> instead of a person.
        </p>
        <Lockup />
      </div>
    </div>
  );
}

/* ============================================================
   DIRECTION B: Staircase: the matrix that climbs
   ============================================================ */
function MatrixB() {
  const riserH = [58, 92, 128, 168];
  const riserBg = ["#C7CDD2", "#9FD2B9", "#2F9E72", "#00603C"];
  const riserFg = ["var(--grey-800)", "#0c3826", "#fff", "#fff"];
  const topRule = ["#C7CDD2", "#9FD2B9", "#2F9E72", "#00603C"];

  return (
    <div style={{ width: "100%", height: "100%", background: "var(--white)", padding: "52px 56px 46px", display: "flex", flexDirection: "column", fontFamily: "var(--font-sans)" }}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "flex-end", marginBottom: 22 }}>
        <div>
          <p style={{ font: "700 13px var(--font-sans)", letterSpacing: ".15em", textTransform: "uppercase", color: "var(--green-700)", margin: 0 }}>The maturity matrix · a climb</p>
          <h2 style={{ font: "600 33px/1.08 var(--font-sans)", letterSpacing: "-.01em", color: "var(--grey-900)", margin: "10px 0 0" }}>Project information &amp; day-to-day management</h2>
        </div>
        <div style={{ display: "flex", alignItems: "center", gap: 9, marginBottom: 4 }}>
          <span style={{ font: "500 12.5px var(--font-sans)", color: "var(--grey-400)" }}>Beyond · Scaled</span>
          <span style={{ width: 46, height: 30, border: "1.5px dashed var(--grey-300)", borderRadius: 5, display: "block" }}></span>
        </div>
      </div>

      <div style={{ flex: 1, display: "grid", gridTemplateColumns: "212px repeat(4,1fr)", gridTemplateRows: "186px repeat(4,1fr)", columnGap: 14, rowGap: 0 }}>
        {/* corner */}
        <div style={{ display: "flex", flexDirection: "column", justifyContent: "flex-end", paddingBottom: 16 }}>
          <span style={{ font: "700 12px var(--font-sans)", letterSpacing: ".1em", textTransform: "uppercase", color: "var(--grey-400)", lineHeight: 1.4 }}>The four fronts<br />a firm climbs on</span>
        </div>
        {/* risers */}
        {STAGES.map((s, i) => (
          <div key={s.n} style={{ display: "flex", flexDirection: "column", justifyContent: "flex-end", alignItems: "stretch", paddingBottom: 0 }}>
            <div style={{ display: "flex", alignItems: "baseline", gap: 7, marginBottom: 9 }}>
              <span style={{ font: "300 22px var(--font-sans)", color: "var(--green-700)" }}>{s.n}</span>
              <span style={{ font: "700 15.5px/1.1 var(--font-sans)", color: "var(--grey-900)" }}>{s.name}</span>
            </div>
            <div style={{ height: riserH[i], background: riserBg[i], borderRadius: "6px 6px 0 0", display: "flex", alignItems: "flex-start", padding: "11px 14px" }}>
              <span style={{ font: "500 12px/1.3 var(--font-sans)", color: riserFg[i] }}>{s.gloss}</span>
            </div>
          </div>
        ))}
        {/* rows */}
        {FRONTS.map((f, ri) => (
          <React.Fragment key={f.name}>
            <div style={{ display: "flex", alignItems: "center", gap: 12, paddingRight: 12, borderTop: "1px solid var(--grey-200)" }}>
              <span style={{ flexShrink: 0, width: 34, height: 34, borderRadius: 8, background: "var(--green-50)", display: "grid", placeItems: "center", color: "var(--green-700)" }}>
                <Ico d={ICONS[f.icon]} size={18} />
              </span>
              <span style={{ font: "600 15px/1.2 var(--font-sans)", color: "var(--grey-900)" }}>{f.name}</span>
            </div>
            {f.cells.map((c, i) => (
              <div key={i} style={{ borderTop: "1px solid var(--grey-200)", padding: "13px 14px 13px 0", display: "flex", gap: 11 }}>
                <span style={{ flexShrink: 0, width: 3, alignSelf: "stretch", background: topRule[i], borderRadius: 3 }}></span>
                <span style={{ font: "400 13.5px/1.42 var(--font-sans)", color: "var(--grey-700)" }}>{c}</span>
              </div>
            ))}
          </React.Fragment>
        ))}
      </div>

      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: 18, borderTop: "2px solid var(--grey-900)", paddingTop: 15 }}>
        <p style={{ font: "400 13px/1.4 var(--font-sans)", color: "var(--grey-500)", margin: 0, maxWidth: 720 }}>
          Each step is higher than the last, and you can’t skip one to reach the next. Most of the relief arrives at <em style={{ fontStyle: "italic", color: "var(--green-700)" }}>Standardized</em>, before any heavy AI.
        </p>
        <Lockup />
      </div>
    </div>
  );
}

/* ============================================================
   DIRECTION C: Progress tracks (editorial / paper)
   ============================================================ */
function NodeC({ level }) {
  // level 0..3 → ring → solid
  const fillScale = [0, 0.5, 0.78, 1][level];
  const solid = level === 3;
  return (
    <span style={{ position: "relative", width: 26, height: 26, borderRadius: "50%", border: "2px solid var(--green-deep)", background: "var(--paper)", display: "grid", placeItems: "center", flexShrink: 0, zIndex: 1 }}>
      {fillScale > 0 && (
        <span style={{ width: 26 * fillScale, height: 26 * fillScale, borderRadius: "50%", background: "var(--green-deep)", display: "block" }}></span>
      )}
      {solid && (
        <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#F4EEE2" strokeWidth="3.4" strokeLinecap="round" strokeLinejoin="round" style={{ position: "absolute" }}>
          <path d="M20 6L9 17l-5-5" />
        </svg>
      )}
    </span>
  );
}

function MatrixC() {
  return (
    <div style={{ width: "100%", height: "100%", background: "var(--paper)", padding: "52px 60px 44px", display: "flex", flexDirection: "column", fontFamily: "var(--font-sans)" }}>
      <div style={{ marginBottom: 24 }}>
        <p style={{ font: "700 13px var(--font-sans)", letterSpacing: ".15em", textTransform: "uppercase", color: "var(--green-deep)", margin: 0 }}>The maturity matrix</p>
        <h2 style={{ font: "500 38px/1.06 var(--font-serif)", letterSpacing: "-.01em", color: "var(--ink)", margin: "9px 0 0" }}>Project information &amp; day-to-day management</h2>
      </div>

      {/* stage column headers */}
      <div style={{ display: "grid", gridTemplateColumns: "210px repeat(4,1fr)", alignItems: "end", paddingBottom: 14, borderBottom: "1.5px solid var(--stone)" }}>
        <span style={{ font: "700 11.5px var(--font-sans)", letterSpacing: ".1em", textTransform: "uppercase", color: "var(--ink-mute)" }}>Front ↓ · Stage →</span>
        {STAGES.map((s, i) => (
          <div key={s.n} style={{ textAlign: "center", padding: "0 10px" }}>
            <div style={{ font: "300 20px var(--font-sans)", color: "var(--green-deep)" }}>{s.n}</div>
            <div style={{ font: "700 14px/1.15 var(--font-sans)", color: "var(--ink)", marginTop: 2 }}>{s.name}</div>
          </div>
        ))}
      </div>

      {/* tracks */}
      <div style={{ flex: 1, display: "flex", flexDirection: "column" }}>
        {FRONTS.map((f, fi) => (
          <div key={f.name} style={{ flex: 1, display: "grid", gridTemplateColumns: "210px repeat(4,1fr)", alignItems: "center", borderBottom: fi < 3 ? "1px solid var(--stone-soft)" : "none" }}>
            {/* label */}
            <div style={{ display: "flex", alignItems: "center", gap: 12, paddingRight: 16 }}>
              <span style={{ flexShrink: 0, width: 36, height: 36, borderRadius: 8, border: "1px solid var(--stone)", background: "var(--paper-card)", display: "grid", placeItems: "center", color: "var(--green-deep)" }}>
                <Ico d={ICONS[f.icon]} size={19} />
              </span>
              <span style={{ font: "600 15.5px/1.2 var(--font-sans)", color: "var(--ink)" }}>{f.name}</span>
            </div>
            {/* nodes with connecting line */}
            {f.cells.map((c, i) => (
              <div key={i} style={{ position: "relative", display: "flex", flexDirection: "column", alignItems: "center", padding: "18px 12px", height: "100%", justifyContent: "center" }}>
                {/* connecting line segments */}
                {i < 3 && <span style={{ position: "absolute", top: 31, left: "50%", width: "100%", height: 2, background: "var(--stone)", zIndex: 0 }}></span>}
                <NodeC level={i} />
                <span style={{ font: "400 12px/1.38 var(--font-sans)", color: "var(--ink-soft)", textAlign: "center", marginTop: 11 }}>{c}</span>
              </div>
            ))}
          </div>
        ))}
      </div>

      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: 14, paddingTop: 14, borderTop: "1.5px solid var(--stone)" }}>
        <p style={{ font: "400 13px/1.4 var(--font-sans)", color: "var(--ink-soft)", margin: 0, maxWidth: 720 }}>
          Read one front at a time: a firm fills in nodes left to right as it matures, and rarely sits at the same stage on every front.
        </p>
        <Lockup />
      </div>
    </div>
  );
}

Object.assign(window, { MatrixHybrid, MatrixA, MatrixB, MatrixC });
