=== MevvBridge ===
Contributors: mevvsoft
Tags: elementor, beaver builder, page builder, migration, compatibility
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.3.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Keep your pages working after you remove Elementor or Beaver Builder. MevvBridge does not convert them — it takes them over.

== Description ==

You want to drop the page builder subscription, but you are afraid the site
will break. You are right to be: the existing "import" tools only translate
simple layouts. Widgets from third-party plugins, dynamic content and custom
CSS get lost on the way.

MevvBridge takes a different route. It splits your page into **two lanes**:

* **The live lane** — elements it recognises are rebuilt from your own data.
  They stay editable and no longer need Elementor.
* **The frozen lane** — everything it does not recognise is captured exactly
  as it renders while the source plugin is still installed, and printed that
  way. Not editable, but **not broken either**.

When it meets something it does not recognise, it does not guess. It freezes.
That is why it works instead of "mostly working".

= Supported page builders =

* **Elementor** — since 1.0; the mature path, measurement below.
* **Beaver Builder** — since 1.3.0 (Lite and Pro). Rows, column groups,
  columns, headings, rich text, images and buttons are rebuilt from the data;
  every module it does not recognise is frozen. Measurement in the FAQ.

= You see what you will lose before you cross =

MevvBridge does not make promises, it shows measurements. Before the takeover
it reports page by page: which elements will stay live, which will freeze,
which contain dynamic content such as a product list. You decide afterwards.

= It is reversible =

Your source data is never deleted. If you reinstall Elementor, MevvBridge
steps aside and hands the original rendering back. One click returns you.

= Pricing =

MevvBridge is free in full, migration included. Nothing is locked.

== Installation ==

1. Install and activate the plugin. **Do not remove Elementor yet.**
2. Open the report from the MevvBridge menu.
3. Press "Take over" — the appearance of the frozen elements is captured.
4. Deactivate Elementor. Check your pages.
5. If everything is in place, you can remove Elementor.
6. If you like, use "Convert to blocks" to turn your pages into editable
   WordPress blocks. After that step MevvBridge itself can be removed too.

If you see a problem after step 4, reactivate Elementor; MevvBridge withdraws
automatically.

== External services ==

MevvBridge does not send your content, your site address or any other data to
a third-party service. It has no telemetry, no licence check and no remote
call of its own.

**Your own site** — while capturing the frozen lane, MevvBridge fetches the
page it is capturing from your own site so it can read the markup a visitor
would receive. It is used only as a fallback, when the source page builder
exposes no internal rendering API.
Data sent: the public URL of the page being captured. No cookies, no user
data, no site identifier. The request never leaves your own server.
When: only while you run "Take over" or "Convert to blocks" from the
MevvBridge admin screen. Never on a visitor request.

== Frequently Asked Questions ==

= Will my site really look the same? =

The report tells you page by page what will happen. We have two reference
measurements, and they are not the same — which builder you come from matters.

**From Elementor.** In our first reference measurement, the home page of a
real WooCommerce store printed at 99.3% visual similarity on desktop and
99.8% on mobile with Elementor switched off, and the page height stayed
identical to the pixel.

**From Beaver Builder (new).** Measured on a real 78-element page built from
Beaver Builder Lite's own "Home" template: the converted page is 5,104 pixels
tall instead of 5,276 — a **3.3% difference**. The layout holds: rows, column
widths and module order are in place. **The frozen lane is not affected at
all** — its markup and CSS are taken verbatim from the source's own output.

Put the two paths side by side in the same rig on the same day and visual
similarity comes out at 71.5% desktop / 47.6% mobile for Beaver and 57.1% /
51.9% for Elementor. So the new path is not behind the old one. Both numbers
sit below the first reference measurement because the rig pulls the
comparison page from a live site and that site's assets have changed since —
the absolute value is not the point, the two paths relative to each other are.

The decision is still yours: read the report first, look at your pages after
the takeover, and if you do not like it, reinstall the source plugin —
MevvBridge switches itself off.

= Can I edit my pages afterwards? =

Yes. The "Convert to blocks" step turns your pages into standard WordPress
block markup; the content sits in `post_content`, not in a private table.
Editing needs [MevvBlocks](https://mevvsoft.com/mevvblocks) — WordPress core
has no concept of breakpoints in block styles, so you need blocks that can
keep tablet and mobile values.

= Can I edit the frozen elements? =

No. Frozen elements stay as they were captured. If you need to edit one, you
can reinstall the source plugin, or delete that element and put a new one in
its place.

= What happens to dynamic content such as a product list? =

It freezes, meaning it shows the products that existed at capture time. The
report marks these with ⚠ before you migrate.

= Will my pages disappear when I remove the page builder? =

No. Your source data (`_elementor_data` or `_fl_builder_data`) stays where it
is; MevvBridge reads it but never deletes it.

= Is Beaver Builder supported? =

Yes, since 1.3.0. `_fl_builder_data` is read, recognised modules become
editable blocks, unrecognised ones are frozen. The fidelity measurement is
above.

= When are WPBakery and Divi coming? =

In order: **WPBakery**, then **Divi**. We measured all three while choosing
the second source and put Beaver first for this reason: freezing depends on
finding an element in the rendered page by its identity, and Beaver gives
that identity in its data (`node`), in its HTML (`data-node`) and in its CSS
(`.fl-node-<id>`). WPBakery shortcodes carry no element id at all, and Divi's
is a positional class derived from ordering — in both cases a frozen element
cannot be found again reliably. We will not promise it before that is solved.

The source reader contract (`MevvBridge_Kaynak`) was split out in 1.3.0;
adding a third source is now a matter of writing one class without touching
the rest of the engine.

== Screenshots ==

1. The pre-migration report: for each piece of content, how many elements
   stay live, how many freeze, and what freezes. Elements that would stop
   working if frozen (a checkout form, for example) are flagged separately
   and that content is not converted.

== Changelog ==

= 1.3.1 =
* Snapshot reads now go through the object cache. A page with a frozen lane
  read the same LONGTEXT rows three times per request (`var_mi`, `donmus`,
  `ikonlar`); it is one query now, dropped on write.
* `unlink()` replaced with `wp_delete_file()` in the style store.
* readme.txt rewritten in English; source language of the project is English
  and the Turkish text lives in `languages/` like every other locale.
* Added an "External services" section: the plugin contacts no third party,
  and the one request it does make goes to your own site.

= 1.3.0 =
* **Second source builder: Beaver Builder.** `_fl_builder_data` is read; rows,
  column groups, columns, headings, rich text, images and buttons are
  translated into the shared vocabulary, and every unrecognised module is
  frozen. The fixture is real: Beaver Builder Lite 2.10.3.2's own "Home"
  template, 78 nodes.
* The source reader contract was split out (`MevvBridge_Kaynak` +
  `MevvBridge_Kaynaklar`). The meta key, the plugin list, the style folders to
  keep, the DOM attribute used when freezing and the CSS scope pattern all
  come from the reader now — no builder name appears anywhere in the engine.
* The pre-migration report now counts each piece of content with ITS OWN
  builder's reader and shows which builder it came from. The previous
  behaviour showed Beaver pages as "0 elements".
* Three sentences in the interface that were pinned to Elementor became
  builder-independent; all eighteen locales were updated.
* Fixed a nesting bug in the block markup parser: the comment boundary of a
  self-closing block could be overrun, and sibling containers ended up inside
  one another.

= 1.2.1 =
* An update mechanism was added to the free version for the mevvsoft.com
  distribution. The plugin was not in any store and could not learn that a
  new version existed; the response is signed with Ed25519 and pinned to
  mevvsoft.com. This mechanism is not part of the WordPress.org package —
  there WordPress performs the update itself.

= 1.0.0 =
* First release.
* Elementor source reader, container and widget CSS generation.
* Two-lane rendering: live rebuild + frozen takeover.
* Pre-migration fidelity report and dynamic content warning.
* Automatic withdrawal when the source plugin is reinstalled.
