diff --git a/front-end/components/MapFragmentPage.jsx b/front-end/components/MapFragmentPage.jsx
new file mode 100644
index 0000000..a91dedd
--- /dev/null
+++ b/front-end/components/MapFragmentPage.jsx
@@ -0,0 +1,285 @@
+import React from "react";
+
+const MapFragmentPage = ({
+ region = "Runeterra",
+ variant = "default",
+ showCompass = true,
+ markerCount = 3,
+ fragmentCount = 3,
+ theme = "warm"
+}) => {
+ // Different color themes
+ const themes = {
+ warm: {
+ primary: "rgba(139, 115, 85, 0.6)",
+ secondary: "rgba(185, 151, 88, 0.5)",
+ accent: "rgba(120, 188, 176, 0.4)",
+ fill: "rgba(139, 115, 85, 0.15)",
+ },
+ cool: {
+ primary: "rgba(83, 140, 176, 0.6)",
+ secondary: "rgba(120, 188, 176, 0.5)",
+ accent: "rgba(78, 188, 120, 0.4)",
+ fill: "rgba(83, 140, 176, 0.15)",
+ },
+ dark: {
+ primary: "rgba(86, 55, 78, 0.6)",
+ secondary: "rgba(119, 66, 95, 0.5)",
+ accent: "rgba(86, 55, 78, 0.4)",
+ fill: "rgba(86, 55, 78, 0.15)",
+ },
+ mystical: {
+ primary: "rgba(139, 92, 176, 0.6)",
+ secondary: "rgba(185, 88, 151, 0.5)",
+ accent: "rgba(197, 107, 197, 0.4)",
+ fill: "rgba(139, 92, 176, 0.15)",
+ },
+ };
+
+ const colors = themes[theme] || themes.warm;
+
+ const markers = React.useMemo(() => {
+ const markers = [];
+ for (let i = 0; i < markerCount; i++) {
+ markers.push({
+ top: `${20 + Math.random() * 60}%`,
+ left: `${20 + Math.random() * 60}%`,
+ });
+ }
+ return markers;
+ }, [markerCount]);
+
+ // Different map patterns based on variant
+ const mapPatterns = {
+ default: [
+ { path: "M 20 50 Q 40 30, 80 40 T 150 60 L 180 100 Q 160 120, 120 110 T 50 90 Z", type: "path" },
+ { path: "M 30 80 L 60 50 L 100 60 L 130 40 L 160 70 L 140 120 L 90 110 L 50 130 Z", type: "region" },
+ { cx: 100, cy: 100, rx: 60, ry: 40, type: "water" },
+ ],
+ mountains: [
+ { path: "M 20 120 L 40 80 L 60 100 L 80 60 L 100 90 L 120 50 L 140 80 L 160 100 L 180 120", type: "path" },
+ { path: "M 50 140 L 70 110 L 90 125 L 110 95 L 130 120 L 150 140", type: "path" },
+ { path: "M 80 110 L 100 80 L 120 110", type: "region" },
+ ],
+ rivers: [
+ { path: "M 30 20 Q 50 60, 70 100 T 110 160", type: "water" },
+ { path: "M 150 30 Q 130 70, 110 110 T 70 170", type: "water" },
+ { path: "M 90 80 Q 100 100, 110 120", type: "water" },
+ ],
+ forest: [
+ { path: "M 40 60 L 50 40 L 60 60 Z", type: "region" },
+ { path: "M 100 80 L 110 60 L 120 80 Z", type: "region" },
+ { path: "M 140 100 L 150 80 L 160 100 Z", type: "region" },
+ { path: "M 70 120 L 80 100 L 90 120 Z", type: "region" },
+ ],
+ };
+
+ const patterns = mapPatterns[variant] || mapPatterns.default;
+
+ return (
+
+
+
+
+ {/* Torn edges effect */}
+
+
+
+ {/* Decorative corners */}
+
+
+
+ {/* Map fragments */}
+ {Array.from({ length: Math.min(fragmentCount, 3) }).map((_, idx) => {
+ const pattern = patterns[idx] || patterns[0];
+
+ return (
+
+
+
+ );
+ })}
+
+ {/* Location markers */}
+ {markers.map((marker, idx) => (
+
+ ))}
+
+ {/* Compass rose */}
+ {showCompass && (
+
+ )}
+
+ {/* Central legend text */}
+
+ {region.toUpperCase()}
+
+
+
+ );
+};
+
+export default MapFragmentPage;
\ No newline at end of file