/* ===================================================================
   ROVIA — Shared Graphics: technical icons, route primitives,
   blueprint vehicle schematics
   =================================================================== */

const C = {
  brand: "#264653",
  accent: "#D99041",
  line: "#D8DAD6",
  text2: "#667085",
  card: "#FCFBF8",
};

/* ---------- Custom engineering / navigation icons ----------
   Consistent 1.6 stroke, geometric, 48 viewBox                */
function Icon({ name, size = 44, stroke = C.brand, sw = 1.6 }) {
  const common = {
    fill: "none",
    stroke,
    strokeWidth: sw,
    strokeLinecap: "round",
    strokeLinejoin: "round",
  };
  const paths = {
    // Regular Routes — repeating waypoint path
    routes: (
      <g {...common}>
        <circle cx="9" cy="34" r="3.2" />
        <circle cx="35" cy="14" r="3.2" />
        <path d="M11.5 31.5 Q24 24 24 24 T32.5 16.5" strokeDasharray="2 3" />
        <path d="M9 30.8 V17 a3 3 0 0 1 3-3 h6" />
        <path d="M35 17.2 V31 a3 3 0 0 1-3 3 h-6" />
        <path d="M16 11 l3 3-3 3" />
        <path d="M28 37 l-3-3 3-3" />
      </g>
    ),
    // Own Fleet — vehicle node in a hub
    fleet: (
      <g {...common}>
        <rect x="7" y="20" width="20" height="11" rx="2" />
        <path d="M27 23 h6 l4 4 v4 h-10 z" />
        <circle cx="15" cy="33" r="2.6" />
        <circle cx="31" cy="33" r="2.6" />
        <path d="M7 20 v-3 a2 2 0 0 1 2-2 h12" strokeDasharray="2 3" />
        <circle cx="24" cy="11" r="2.4" />
      </g>
    ),
    // Cargo Monitoring — radar / GPS ping
    monitor: (
      <g {...common}>
        <circle cx="24" cy="24" r="4" />
        <path d="M24 20 V9" />
        <circle cx="24" cy="7" r="2.2" fill={stroke} />
        <path d="M15.5 32.5 a12 12 0 0 1 0-17" strokeDasharray="2 3" />
        <path d="M32.5 15.5 a12 12 0 0 1 0 17" strokeDasharray="2 3" />
        <path d="M19 28 a7 7 0 0 1 0-8" />
        <path d="M29 20 a7 7 0 0 1 0 8" />
      </g>
    ),
    // Fast Response — compass / direction
    response: (
      <g {...common}>
        <circle cx="24" cy="24" r="15" />
        <path d="M24 9 v3 M24 36 v3 M9 24 h3 M36 24 h3" />
        <path d="M29 19 l-3.5 8.5 -8.5 3.5 3.5-8.5 z" fill={stroke} stroke="none" />
        <circle cx="24" cy="24" r="1.6" fill={C.card} stroke="none" />
      </g>
    ),
    // misc UI
    pin: (
      <g {...common}>
        <path d="M24 41 C16 31 11 25 11 18 a13 13 0 0 1 26 0 c0 7-5 13-13 23 z" />
        <circle cx="24" cy="18" r="4.5" />
      </g>
    ),
    arrow: (
      <g {...common}>
        <path d="M10 24 h26" />
        <path d="M28 16 l8 8-8 8" />
      </g>
    ),
    check: (
      <g {...common}>
        <circle cx="24" cy="24" r="15" />
        <path d="M17 24.5 l5 5 9-11" />
      </g>
    ),
    weight: (
      <g {...common}>
        <path d="M14 18 h20 l3 19 a2 2 0 0 1-2 2 H13 a2 2 0 0 1-2-2 z" />
        <circle cx="24" cy="14" r="4" />
        <path d="M20 18 a4 4 0 0 1 8 0" />
      </g>
    ),
    box: (
      <g {...common}>
        <path d="M24 8 L38 16 V32 L24 40 L10 32 V16 Z" />
        <path d="M10 16 L24 24 L38 16" />
        <path d="M24 24 V40" />
      </g>
    ),
    clock: (
      <g {...common}>
        <circle cx="24" cy="24" r="15" />
        <path d="M24 15 v9 l6 4" />
      </g>
    ),

    /* ---- construction / stonework icons ---- */
    // Precision Workmanship — set square + ruler ticks
    precision: (
      <g {...common}>
        <path d="M10 12 V36 H34" />
        <path d="M10 12 L34 36" />
        <path d="M10 18 h4 M10 24 h4 M10 30 h4" />
        <path d="M16 36 v-4 M22 36 v-4 M28 36 v-4" />
        <circle cx="36" cy="14" r="2.4" fill={stroke} stroke="none" />
      </g>
    ),
    // Experienced Specialists — drafting compass / dividers
    specialists: (
      <g {...common}>
        <circle cx="24" cy="11" r="3" />
        <path d="M22.6 13.6 L14 37" />
        <path d="M25.4 13.6 L34 37" />
        <path d="M19 27 a 8 6 0 0 0 10 0" strokeDasharray="2 3" />
        <path d="M14 37 l-1.5 -3 M34 37 l1.5 -3" />
      </g>
    ),
    // Quality Materials — stacked stone courses
    materials: (
      <g {...common}>
        <rect x="9" y="14" width="30" height="8" rx="1" />
        <rect x="9" y="22" width="30" height="8" rx="1" />
        <rect x="9" y="30" width="30" height="8" rx="1" />
        <path d="M21 14 v8 M30 22 v8 M18 30 v8 M33 14 v8" opacity="0.7" />
      </g>
    ),
    // Reliable Project Delivery — milestone flag
    delivery: (
      <g {...common}>
        <path d="M14 38 V10" />
        <path d="M14 12 h20 l-5 6 5 6 h-20" />
        <circle cx="14" cy="38" r="2.2" fill={stroke} stroke="none" />
      </g>
    ),
    // Consultation — plan sheet + pencil
    consult: (
      <g {...common}>
        <path d="M12 9 h17 l7 7 v23 H12 z" />
        <path d="M29 9 v7 h7" />
        <path d="M17 24 h12 M17 30 h8" strokeDasharray="2 3" />
        <path d="M30 33 l5-5 2 2-5 5 z" />
      </g>
    ),
    // Site Assessment — survey target / level
    survey: (
      <g {...common}>
        <circle cx="24" cy="22" r="11" />
        <path d="M24 11 v22 M13 22 h22" />
        <path d="M24 38 v3 M18 41 h12" />
        <circle cx="24" cy="22" r="2.4" fill={stroke} stroke="none" />
      </g>
    ),
    // Planning — drafting triangle over sheet
    draft: (
      <g {...common}>
        <rect x="9" y="11" width="30" height="26" rx="2" />
        <path d="M15 31 L27 15 L33 31 Z" />
        <path d="M9 24 h6 M33 18 h6" strokeDasharray="2 3" opacity="0.7" />
      </g>
    ),
    // Installation — masonry trowel laying a course
    install: (
      <g {...common}>
        <path d="M10 14 h18 l-7 9 z" />
        <path d="M19 22 l4 6 a2 2 0 0 0 2 1 h2" />
        <rect x="12" y="33" width="26" height="6" rx="1" />
        <path d="M22 33 v6 M30 33 v6" opacity="0.7" />
      </g>
    ),
    // Stone solution glyphs
    granite: (
      <g {...common}>
        <path d="M24 8 L38 18 L33 38 H15 L10 18 Z" />
        <path d="M24 8 L24 22 M10 18 L24 22 L38 18 M24 22 L15 38 M24 22 L33 38" />
      </g>
    ),
    facade: (
      <g {...common}>
        <rect x="11" y="9" width="26" height="30" rx="1.5" />
        <path d="M11 19 h26 M11 29 h26 M21 9 v30 M31 9 v30" />
      </g>
    ),
    layers: (
      <g {...common}>
        <path d="M24 10 L39 18 L24 26 L9 18 Z" />
        <path d="M9 24 L24 32 L39 24" />
        <path d="M9 30 L24 38 L39 30" opacity="0.7" />
      </g>
    ),
  };
  return (
    <svg width={size} height={size} viewBox="0 0 48 48" aria-hidden="true">
      {paths[name] || null}
    </svg>
  );
}

/* ---------- A small reusable node marker (coordinate point) ---------- */
function NodeMarker({ x, y, label, accent, r = 5 }) {
  return (
    <g>
      <circle cx={x} cy={y} r={r} className={"node-dot" + (accent ? " node-dot--accent" : "")} />
      <circle cx={x} cy={y} r="1.6" fill={accent ? C.accent : C.brand} />
      {label && (
        <text
          x={x + 10}
          y={y + 4}
          fontFamily="'Space Mono', monospace"
          fontSize="10"
          letterSpacing="0.08em"
          fill={C.text2}
        >
          {label}
        </text>
      )}
    </g>
  );
}

/* ===================================================================
   BLUEPRINT VEHICLE SCHEMATICS
   Pure geometric line drawings, drafting style. `hover` fades in
   line-art cargo inside the cargo bay so the user understands what
   realistically fits — not a repeat of the spec dimensions.
   =================================================================== */
function BlueprintVehicle({ type = "van", hover = false }) {
  const stroke = C.brand;
  const dim = C.accent;
  const guide = C.line;

  // each variant returns a body <g>
  const bodies = {
    van: (
      <g fill="none" stroke={stroke} strokeWidth="1.6" strokeLinejoin="round" strokeLinecap="round">
        <path d="M40 120 V70 a8 8 0 0 1 8-8 h120 a8 8 0 0 1 8 8 V120" />
        <path d="M176 120 V78 l34 10 a10 10 0 0 1 7 9.5 V120" />
        <path d="M176 84 h28" strokeDasharray="3 3" />
        <rect x="182" y="92" width="22" height="16" rx="2" />
        <path d="M40 120 h177" />
        <line x1="62" y1="62" x2="62" y2="120" />
        <circle cx="78" cy="122" r="15" />
        <circle cx="78" cy="122" r="6" />
        <circle cx="180" cy="122" r="15" />
        <circle cx="180" cy="122" r="6" />
      </g>
    ),
    medium: (
      <g fill="none" stroke={stroke} strokeWidth="1.6" strokeLinejoin="round" strokeLinecap="round">
        <path d="M30 122 V60 a8 8 0 0 1 8-8 h150 a8 8 0 0 1 8 8 V122" />
        <path d="M196 122 V70 l24 8 a10 10 0 0 1 7 9.5 V122" />
        <rect x="200" y="82" width="20" height="16" rx="2" />
        <path d="M30 122 h197" />
        <line x1="52" y1="52" x2="52" y2="122" />
        <circle cx="74" cy="124" r="16" />
        <circle cx="74" cy="124" r="6" />
        <circle cx="190" cy="124" r="16" />
        <circle cx="190" cy="124" r="6" />
      </g>
    ),
    large: (
      <g fill="none" stroke={stroke} strokeWidth="1.6" strokeLinejoin="round" strokeLinecap="round">
        {/* cab */}
        <path d="M28 124 V92 a8 8 0 0 1 8-8 h26 l14 18 V124" />
        <path d="M44 90 h14 l8 11 h-22 z" strokeDasharray="3 3" stroke={guide} />
        {/* box body */}
        <path d="M84 124 V52 a6 6 0 0 1 6-6 h132 a6 6 0 0 1 6 6 V124" />
        <path d="M28 124 h200" />
        <line x1="84" y1="52" x2="84" y2="124" />
        <circle cx="66" cy="126" r="15" />
        <circle cx="66" cy="126" r="6" />
        <circle cx="176" cy="126" r="15" />
        <circle cx="176" cy="126" r="6" />
        <circle cx="206" cy="126" r="15" />
        <circle cx="206" cy="126" r="6" />
      </g>
    ),
  };

  // soft highlight zone over the cargo bay + line-art cargo per vehicle
  const zones = {
    van:    { x: 46, y: 66, w: 124, h: 54 },
    medium: { x: 36, y: 54, w: 154, h: 68 },
    large:  { x: 88, y: 50, w: 138, h: 74 },
  };
  const z = zones[type];

  const cargo = {
    // Van — parcels, a small appliance, express boxes
    van: (
      <g fill="none" stroke={dim} strokeWidth="1.4" strokeLinejoin="round" strokeLinecap="round">
        {/* taped box A */}
        <rect x="54" y="90" width="30" height="29" rx="1.5" />
        <line x1="69" y1="90" x2="69" y2="119" />
        <line x1="54" y1="99" x2="84" y2="99" />
        {/* parcel B */}
        <rect x="90" y="100" width="24" height="19" rx="1.5" />
        <line x1="102" y1="100" x2="102" y2="119" />
        {/* small appliance */}
        <rect x="120" y="83" width="34" height="36" rx="2" />
        <line x1="120" y1="91" x2="154" y2="91" />
        <circle cx="137" cy="104" r="10" />
        <circle cx="126" cy="87" r="1.2" fill={dim} stroke="none" />
      </g>
    ),
    // Medium Van — euro pallets with stacked retail boxes
    medium: (
      <g fill="none" stroke={dim} strokeWidth="1.4" strokeLinejoin="round" strokeLinecap="round">
        {/* pallet 1 */}
        <rect x="44" y="111" width="58" height="8" />
        <path d="M48 119 v3 M62 119 v3 M84 119 v3 M98 119 v3" />
        <rect x="48" y="79" width="50" height="32" rx="1.5" />
        <line x1="73" y1="79" x2="73" y2="111" />
        <line x1="48" y1="89" x2="98" y2="89" />
        {/* pallet 2 — split stack */}
        <rect x="112" y="111" width="58" height="8" />
        <path d="M116 119 v3 M130 119 v3 M152 119 v3 M166 119 v3" />
        <rect x="116" y="93" width="50" height="18" rx="1.5" />
        <rect x="123" y="76" width="36" height="17" rx="1.5" />
        <line x1="141" y1="76" x2="141" y2="93" />
      </g>
    ),
    // Large — bulk crate + multi-pallet
    large: (
      <g fill="none" stroke={dim} strokeWidth="1.4" strokeLinejoin="round" strokeLinecap="round">
        {/* braced crate */}
        <rect x="98" y="80" width="52" height="42" />
        <path d="M98 80 L150 122 M150 80 L98 122" strokeWidth="1" opacity="0.7" />
        <line x1="98" y1="90" x2="150" y2="90" />
        <line x1="98" y1="112" x2="150" y2="112" />
        {/* pallet with stacked boxes */}
        <rect x="160" y="114" width="56" height="8" />
        <path d="M164 122 v2 M178 122 v2 M198 122 v2 M212 122 v2" />
        <rect x="164" y="86" width="48" height="28" rx="1.5" />
        <line x1="188" y1="86" x2="188" y2="114" />
        <rect x="170" y="71" width="36" height="15" rx="1.5" />
      </g>
    ),
  };

  const annot = {
    van: "≤ 3 EUR PALLETS",
    medium: "≤ 6 EUR PALLETS",
    large: "≤ 12 EUR PALLETS",
  };

  return (
    <svg viewBox="0 0 260 175" width="100%" aria-hidden="true">
      {/* baseline grid dots */}
      <g opacity="0.5">
        {Array.from({ length: 13 }).map((_, i) =>
          Array.from({ length: 4 }).map((_, j) => (
            <circle key={i + "-" + j} cx={20 + i * 20} cy={30 + j * 30} r="0.8" fill={guide} />
          ))
        )}
      </g>

      {/* soft cargo-zone highlight (fades in on hover) */}
      <rect
        x={z.x} y={z.y} width={z.w} height={z.h} rx="3"
        fill="rgba(217,144,65,0.07)"
        stroke={dim}
        strokeWidth="1"
        strokeDasharray="3 4"
        style={{
          opacity: hover ? 1 : 0,
          transition: "opacity 360ms cubic-bezier(0.22,1,0.36,1)",
        }}
      />

      {bodies[type]}

      {/* line-art cargo — fades + rises in on hover */}
      <g
        style={{
          opacity: hover ? 1 : 0,
          transform: hover ? "translateY(0)" : "translateY(5px)",
          transformOrigin: "center",
          transition: "opacity 380ms cubic-bezier(0.22,1,0.36,1) 60ms, transform 380ms cubic-bezier(0.22,1,0.36,1) 60ms",
        }}
      >
        {cargo[type]}
      </g>

      {/* progressive technical annotation */}
      <g
        style={{
          opacity: hover ? 1 : 0,
          transition: "opacity 320ms ease 220ms",
        }}
      >
        <line x1={z.x} y1={z.y - 6} x2={z.x + 46} y2={z.y - 6} stroke={dim} strokeWidth="1" />
        <text x={z.x} y={z.y - 10} fontFamily="'Space Mono', monospace" fontSize="8.5" letterSpacing="0.06em" fill={dim}>
          {annot[type]}
        </text>
      </g>
    </svg>
  );
}

Object.assign(window, { Icon, NodeMarker, BlueprintVehicle, BlueprintStone, ROVIA_C: C });

/* ===================================================================
   BLUEPRINT STONE-SYSTEM DETAILS
   Architectural section drawings for stone solutions. `hover` fades
   in the construction layers / fixing details + a technical callout.
   =================================================================== */
function BlueprintStone({ type = "natural", hover = false }) {
  const stroke = C.brand;
  const dim = C.accent;
  const guide = C.line;

  const drawings = {
    // Natural stone — irregular ashlar wall elevation
    natural: {
      base: (
        <g fill="none" stroke={stroke} strokeWidth="1.5" strokeLinejoin="round" strokeLinecap="round">
          <rect x="34" y="30" width="192" height="116" />
          {/* irregular coursed stones */}
          <path d="M34 56 h192 M34 84 h192 M34 112 h192" />
          <path d="M70 30 v26 M120 30 v26 M168 30 v26" />
          <path d="M52 56 v28 M96 56 v28 M150 56 v28 M196 56 v28" />
          <path d="M80 84 v28 M132 84 v28 M180 84 v28" />
          <path d="M60 112 v34 M108 112 v34 M160 112 v34 M200 112 v34" />
        </g>
      ),
      // hover: mortar joints highlighted + substrate layers at right edge
      layers: (
        <g>
          <g stroke={dim} strokeWidth="1.4" fill="none" opacity="0.9">
            <path d="M34 56 h192 M34 84 h192 M34 112 h192" />
          </g>
          {/* section call: stone / mortar / backing */}
          <g stroke={dim} strokeWidth="1" fill="none">
            <line x1="226" y1="30" x2="246" y2="30" />
            <line x1="226" y1="40" x2="246" y2="40" />
            <line x1="246" y1="30" x2="246" y2="40" />
          </g>
        </g>
      ),
      callout: "NATURAL ASHLAR · COURSED BOND",
      tags: ["Stone", "Mortar bed", "Backing wall"],
    },
    // Granite — slab + thickness section + crystalline facets
    granite: {
      base: (
        <g fill="none" stroke={stroke} strokeWidth="1.5" strokeLinejoin="round" strokeLinecap="round">
          {/* slab face */}
          <rect x="40" y="34" width="150" height="92" />
          {/* facet lines */}
          <path d="M40 70 L96 34 M40 100 L150 34 M70 126 L190 50 M120 126 L190 84" opacity="0.55" />
          {/* thickness section at right */}
          <path d="M198 34 h22 v92 h-22 z" />
          <path d="M198 46 h22 M198 58 h22" strokeDasharray="2 3" opacity="0.6" />
        </g>
      ),
      layers: (
        <g stroke={dim} strokeWidth="1" fill="none">
          {/* polished-finish + thickness dimension */}
          <line x1="198" y1="130" x2="220" y2="130" />
          <path d="M198 126 v8 M220 126 v8" />
        </g>
      ),
      callout: "GRANITE SLAB · 30 MM POLISHED",
      tags: ["Polished face", "30 mm slab", "Mechanical fix"],
    },
    // Facade — ventilated cladding system in horizontal section
    facade: {
      base: (
        <g fill="none" stroke={stroke} strokeWidth="1.5" strokeLinejoin="round" strokeLinecap="round">
          {/* structural wall */}
          <rect x="36" y="30" width="22" height="116" />
          <path d="M40 38 L54 30 M40 54 L54 46 M40 70 L54 62 M40 86 L54 78 M40 102 L54 94 M40 118 L54 110 M40 134 L54 126" opacity="0.4" />
          {/* insulation */}
          <rect x="58" y="30" width="20" height="116" strokeDasharray="3 3" />
          {/* bracket + rail (air gap) */}
          <path d="M78 60 h26 M78 110 h26" />
          <rect x="104" y="30" width="8" height="116" />
          {/* cladding panels */}
          <rect x="118" y="30" width="100" height="34" />
          <rect x="118" y="68" width="100" height="34" />
          <rect x="118" y="106" width="100" height="40" />
        </g>
      ),
      layers: (
        <g stroke={dim} strokeWidth="1" fill="none">
          {/* air-gap arrows */}
          <path d="M112 88 h6 M115 85 l-3 3 3 3" />
          <line x1="118" y1="50" x2="218" y2="50" strokeDasharray="2 3" opacity="0.7" />
        </g>
      ),
      callout: "VENTILATED FACADE · AIR GAP 40 MM",
      tags: ["Substrate", "Insulation", "Stone panel"],
    },
  };

  const d = drawings[type] || drawings.natural;
  // draw-in + label helpers (hover-driven)
  const dr = (delay) => ({
    fill: "none", stroke: dim, strokeWidth: 1, strokeLinecap: "round", strokeLinejoin: "round",
    pathLength: 1, strokeDasharray: 1, strokeDashoffset: hover ? 0 : 1,
    style: { transition: `stroke-dashoffset 560ms cubic-bezier(0.22,1,0.36,1) ${delay}ms` },
  });
  const lb = (delay) => ({
    fontFamily: "'Space Mono', monospace", fontSize: 8, letterSpacing: "0.04em", fill: dim,
    style: { opacity: hover ? 1 : 0, transition: `opacity 300ms ease ${delay}ms` },
  });
  const labels = {
    natural: (
      <g>
        <g style={{ opacity: hover ? 1 : 0, transition: "opacity 360ms ease 60ms" }} fill="none" stroke={stroke} strokeWidth="1.2">
          <rect x="226" y="30" width="14" height="116" />
          <path d="M226 42 L240 36 M226 58 L240 52 M226 74 L240 68 M226 90 L240 84 M226 106 L240 100 M226 122 L240 116 M226 138 L240 132" strokeWidth="0.7" />
        </g>
        <text x="40" y="46" {...lb(180)}>STONE</text>
        <path {...dr(220)} d="M150 84 h40" />
        <text x="150" y="80" {...lb(300)}>MORTAR 10</text>
        <text x="240" y="26" {...lb(360)} textAnchor="end">BACKING</text>
      </g>
    ),
    granite: (
      <g>
        <g style={{ opacity: hover ? 1 : 0, transition: "opacity 340ms ease 60ms" }} fill="none" stroke={stroke} strokeWidth="1.2">
          <path d="M190 68 h16 v9 h-9" />
          <circle cx="206" cy="72" r="2" />
        </g>
        <text x="34" y="159" {...lb(200)}>POLISHED FACE</text>
        <text x="140" y="159" {...lb(300)}>FIXING CLIP</text>
        <text x="34" y="171" {...lb(400)}>30 MM SLAB</text>
      </g>
    ),
    facade: (
      <g>
        <text x="34" y="159" {...lb(200)}>SUBSTRATE</text>
        <text x="122" y="159" {...lb(280)}>INSULATION</text>
        <text x="34" y="171" {...lb(360)}>AIR GAP 40</text>
        <text x="122" y="171" {...lb(440)}>STONE PANEL</text>
      </g>
    ),
  };

  return (
    <svg viewBox="0 0 260 175" width="100%" aria-hidden="true">
      {/* baseline grid dots */}
      <g opacity="0.5">
        {Array.from({ length: 13 }).map((_, i) =>
          Array.from({ length: 4 }).map((_, j) => (
            <circle key={i + "-" + j} cx={20 + i * 20} cy={30 + j * 30} r="0.8" fill={guide} />
          ))
        )}
      </g>

      {d.base}

      {/* hover layers / fixing detail — unfolds (slides + fades) in */}
      <g
        style={{
          opacity: hover ? 1 : 0,
          transform: hover ? "translateX(0)" : "translateX(-6px)",
          transition: "opacity 380ms cubic-bezier(0.22,1,0.36,1) 40ms, transform 420ms cubic-bezier(0.22,1,0.36,1) 40ms",
        }}
      >
        {d.layers}
        {labels[type]}
      </g>

      {/* progressive technical callout */}
      <g
        style={{
          opacity: hover ? 1 : 0,
          transition: "opacity 320ms ease 200ms",
        }}
      >
        <line x1="34" y1="22" x2="80" y2="22" stroke={dim} strokeWidth="1" />
        <text x="34" y="18" fontFamily="'Space Mono', monospace" fontSize="8.5" letterSpacing="0.06em" fill={dim}>
          {d.callout}
        </text>
      </g>
    </svg>
  );
}

Object.assign(window, { BlueprintStone });
