{
  "version": 3,
  "sources": ["/cdn/shop/t/17/assets/fr-theme.js?codex_check=1783278487013"],
  "sourcesContent": ["(function () {\r\n  const state = { data: null };\r\n  const money = (value) => value || \"Not verified\";\r\n  const firstMatch = (value, pattern) => {\r\n    const match = String(value || \"\").match(pattern);\r\n    return match ? match[1] || match[0] : \"\";\r\n  };\r\n  const compactPrice = (value) => {\r\n    const text = String(value || \"\").trim();\r\n    const lower = text.toLowerCase();\r\n    if (!text) return \"Not verified\";\r\n    if (lower.includes(\"not publicly sold\")) return \"Not sold\";\r\n    if (lower.includes(\"enterprise quote\") || lower.includes(\"contact sales\")) return \"Quote\";\r\n    if (lower.includes(\"no public msrp\")) return \"No MSRP\";\r\n    if (lower.includes(\"pricing not listed\") || lower.includes(\"price not verified\")) return \"Not listed\";\r\n    const usdRange = text.match(/(?:USD\\s*)?\\$?\\s*(\\d[\\d,]*(?:\\.\\d+)?(?:\\s*-\\s*\\$?\\s*\\d[\\d,]*(?:\\.\\d+)?)?)/i);\r\n    if (usdRange) return `$${usdRange[1].replace(/\\s+/g, \"\")}`;\r\n    return text.split(/[;.]/)[0].trim() || \"Not verified\";\r\n  };\r\n  const compactMeasure = (value, unit) => {\r\n    const text = String(value || \"\").trim();\r\n    if (!text) return \"Unknown\";\r\n    const escapedUnit = unit.replace(\"/\", \"\\\\/\");\r\n    const match = firstMatch(text, new RegExp(`(?:about\\\\s*|approx\\\\.?\\\\s*|~\\\\s*)?(\\\\d+(?:\\\\.\\\\d+)?\\\\s*${escapedUnit})`, \"i\"));\r\n    return match ? match.replace(/\\s+/g, \" \") : text.split(/[;.]/)[0].trim();\r\n  };\r\n  const compactDof = (value) => {\r\n    const text = String(value || \"\").trim();\r\n    if (!text) return \"Unknown\";\r\n    return firstMatch(text, /(\\d+\\+?)/) || \"Unknown\";\r\n  };\r\n  const compactRuntime = (value) => {\r\n    const text = String(value || \"\").trim();\r\n    if (!text) return \"Unknown\";\r\n    const lower = text.toLowerCase();\r\n    if (lower.includes(\"not publicly disclosed\")) return \"Not disclosed\";\r\n    const match = firstMatch(text, /(?:about\\s*|approx\\.?\\s*|~\\s*)?(\\d+(?:\\.\\d+)?\\s*(?:hours?|hrs?|h)\\b)/i);\r\n    return match ? match.replace(/\\bh\\b/i, \"hr\").replace(/\\s+/g, \" \") : text.split(/[;.]/)[0].trim();\r\n  };\r\n  const compactStatus = (value) => {\r\n    const lower = String(value || \"\").toLowerCase();\r\n    if (!lower) return \"Review\";\r\n    if (lower.includes(\"discontinued\")) return \"Discontinued\";\r\n    if (lower.includes(\"available\")) return \"Available\";\r\n    if (lower.includes(\"pilot\")) return \"Piloting\";\r\n    if (lower.includes(\"prototype\")) return \"Prototype\";\r\n    if (lower.includes(\"announced\")) return \"Announced\";\r\n    if (lower.includes(\"development\")) return \"Development\";\r\n    return String(value || \"Review\").split(/[;.]/)[0].trim();\r\n  };\r\n  const compactComparisonValue = (robot, key) => {\r\n    if (key === \"price\") return compactPrice(robot.price);\r\n    if (key === \"height\") return compactMeasure(robot.height, \"mm\");\r\n    if (key === \"weight\") return compactMeasure(robot.weight, \"kg\");\r\n    if (key === \"dof\") return compactDof(robot.dof);\r\n    if (key === \"payload\") return compactMeasure(robot.payload, \"kg\");\r\n    if (key === \"runtime\") return compactRuntime(robot.runtime);\r\n    if (key === \"speed\") return compactMeasure(robot.speed, \"m/s\");\r\n    if (key === \"status\") return compactStatus(robot.status);\r\n    return String(robot[key] || \"Unknown\").split(/[;.]/)[0].trim();\r\n  };\r\n  const safe = (value, fallback = \"Not verified\") => {\r\n    const text = String(value || \"\").trim();\r\n    return text ? text : fallback;\r\n  };\r\n  const escapeHtml = (value) => String(value || \"\").replace(/[&<>\"']/g, (char) => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[char]));\r\n  const slugFromText = (value = \"\") => String(value || \"\")\r\n    .toLowerCase()\r\n    .replace(/&/g, \" and \")\r\n    .replace(/[^a-z0-9]+/g, \"-\")\r\n    .replace(/-+/g, \"-\")\r\n    .replace(/^-|-$/g, \"\") || \"unknown\";\r\n  const robotMatchesSlug = (robot = {}, slug = \"\") => {\r\n    const target = String(slug || \"\").trim();\r\n    if (!target) return false;\r\n    return robot.slug === target\r\n      || slugFromText(robot.name) === target\r\n      || slugFromText(`${robot.manufacturer || \"\"}-${robot.name || \"\"}`) === target\r\n      || slugFromText(`${robot.manufacturer || \"\"} ${robot.name || \"\"}`) === target;\r\n  };\r\n  const robotUrl = (robot) => `/pages/robot-profile?robot=${encodeURIComponent(robot.slug)}`;\r\n  const PAGE_META = {\r\n    \"robots\": [\"Robot Database\", \"Robots\", \"Search and filter source-backed robot profiles, prices, specifications, images, and videos.\"],\r\n    \"robot-profile\": [\"Robot Profile\", \"Robot Profile\", \"Robot reviews, specifications, pricing, images, videos, sources, and buying research from Firgelli Robots.\"],\r\n    \"manufacturers\": [\"Manufacturer Database\", \"Manufacturers\", \"Explore companies building humanoid, service, industrial, research, and mobile robots.\"],\r\n    \"manufacturer-profile\": [\"Manufacturer Profile\", \"Manufacturer Profile\", \"Source-backed manufacturer profiles connected to robot records.\"],\r\n    \"category\": [\"Robot Categories\", \"Robot Categories\", \"Browse robots by market, form factor, use case, and grade.\"],\r\n    \"compare\": [\"Comparison Engine\", \"Compare Robots\", \"Compare robots side by side using source-backed specification records.\"],\r\n    \"tools\": [\"Tools & Widgets\", \"Tools & Widgets\", \"Robot finder, matching tools, calculators, timelines, and future 3D viewer modules.\"],\r\n    \"research\": [\"Research Library\", \"Research, Patents & Sources\", \"Review papers, patents, manuals, videos, source URLs, and reference material.\"],\r\n    \"knowledge\": [\"Knowledge Hub\", \"Knowledge Hub\", \"Robot specifications, definitions, buying guidance, research links, and latest robotics updates.\"],\r\n    \"news\": [\"Robot News\", \"Robot News\", \"Latest robot additions, database changes, source-backed updates, and robotics research notes.\"],\r\n    \"marketplace\": [\"Marketplace\", \"Marketplace\", \"Future marketplace for robot accessories, skills, mods, and compatible parts.\"],\r\n    \"community\": [\"Community\", \"Community\", \"Future owner reviews, community posts, known issues, galleries, and mod discussions.\"],\r\n    \"developers\": [\"Developers\", \"Developers\", \"Developer resources, SDK support, APIs, ROS support, and integration tools.\"],\r\n    \"about\": [\"About\", \"About Firgelli Robots\", \"A research-first robotics intelligence platform for robot specifications, images, videos, and buyer guidance.\"],\r\n    \"editorial-policy\": [\"Editorial Policy\", \"Editorial Policy\", \"How Firgelli Robots reviews sources, image rights, robot specifications, and publication readiness.\"],\r\n    \"contact\": [\"Contact\", \"Contact Firgelli Robots\", \"Reach the Firgelli Robots team for research support, partnerships, and data corrections.\"]\r\n  };\r\n  const pathPageKind = () => {\r\n    const match = location.pathname.match(/^\\/pages\\/([^/?#]+)/);\r\n    return match && PAGE_META[match[1]] ? match[1] : \"\";\r\n  };\r\n  const resolvePageKind = (root) => {\r\n    const configured = root.dataset.frPageKind || \"auto\";\r\n    const fromPath = pathPageKind();\r\n    if (configured === \"auto\") {\r\n      return fromPath || \"robots\";\r\n    }\r\n    if (configured === \"robots\" && fromPath && fromPath !== \"robots\") {\r\n      return fromPath;\r\n    }\r\n    if (configured === \"robots\" && root.querySelector(\".fr-page-hero h1\")?.textContent?.toLowerCase().includes(\"page not found\")) {\r\n      return fromPath || configured;\r\n    }\r\n    return configured;\r\n  };\r\n  const applyPageMeta = (root, kind) => {\r\n    const meta = PAGE_META[kind];\r\n    if (!meta) return;\r\n    const [eyebrow, heading, subheading] = meta;\r\n    const eyebrowNode = root.querySelector(\".fr-page-hero .fr-eyebrow\");\r\n    const headingNode = root.querySelector(\".fr-page-hero h1\");\r\n    const subheadingNode = root.querySelector(\".fr-page-hero p:not(.fr-eyebrow)\");\r\n    const crumbNode = root.querySelector(\".fr-breadcrumb span:last-child\");\r\n    if (eyebrowNode) eyebrowNode.textContent = eyebrow;\r\n    if (headingNode) headingNode.textContent = heading;\r\n    if (subheadingNode) subheadingNode.textContent = subheading;\r\n    if (crumbNode) crumbNode.textContent = heading;\r\n    document.title = `${heading} - Firgelli Robots`;\r\n  };\r\n  const badgeClass = (status) => {\r\n    const s = String(status || \"\").toLowerCase();\r\n    if (s.includes(\"prototype\")) return \"fr-badge fr-badge--prototype\";\r\n    if (s.includes(\"discontinued\")) return \"fr-badge fr-badge--discontinued\";\r\n    if (s.includes(\"announced\") || s.includes(\"coming\")) return \"fr-badge fr-badge--announced\";\r\n    return \"fr-badge\";\r\n  };\n  const icon = () => `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3v4\"></path><path d=\"M6 8h12l-1 10H7L6 8Z\"></path><path d=\"M9 12h.01\"></path><path d=\"M15 12h.01\"></path><path d=\"M9 21h6\"></path><path d=\"M4 13H2\"></path><path d=\"M22 13h-2\"></path></svg>`;\n  const categoryIcon = (slug = \"\") => {\n    const icons = {\n      humanoid: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"4.5\" r=\"2.1\"></circle><path d=\"M12 7v6\"></path><path d=\"M8.5 9.5 12 8l3.5 1.5\"></path><path d=\"M10 13 8.5 20\"></path><path d=\"M14 13l1.5 7\"></path><path d=\"M9 20h2\"></path><path d=\"M13 20h2\"></path></svg>`,\n      consumer: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 11 12 4l8 7\"></path><path d=\"M6.5 10.5V20h11V10.5\"></path><path d=\"M9 20v-5h6v5\"></path><path d=\"M10 11.5h4\"></path></svg>`,\n      enterprise: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 20V5h9v15\"></path><path d=\"M14 10h5v10\"></path><path d=\"M8 8h2\"></path><path d=\"M8 12h2\"></path><path d=\"M8 16h2\"></path><path d=\"M16.5 14h.01\"></path><path d=\"M16.5 17h.01\"></path></svg>`,\n      industrial: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20V9l5 3V9l5 3V8h6v12H4Z\"></path><path d=\"M16 8V4h3v4\"></path><path d=\"M7 16h2\"></path><path d=\"M12 16h2\"></path><path d=\"M17 16h1\"></path></svg>`,\n      warehouse: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3.5 10 12 5l8.5 5\"></path><path d=\"M5 10v10h14V10\"></path><path d=\"M8 14h8\"></path><path d=\"M8 17h8\"></path><path d=\"M9 20v-6h6v6\"></path></svg>`,\n      service: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 14h12a4 4 0 0 1 4 4\"></path><path d=\"M4 18h16\"></path><path d=\"M7 14V9a3 3 0 0 1 6 0v5\"></path><path d=\"M10 6V4\"></path></svg>`,\n      research: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 3v5l-5 9a3 3 0 0 0 2.6 4.5h8.8A3 3 0 0 0 19 17l-5-9V3\"></path><path d=\"M9 3h6\"></path><path d=\"M7 16h10\"></path><path d=\"M9 19h6\"></path></svg>`,\n      military: `<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3 19 6v5c0 4.8-2.9 8.4-7 10-4.1-1.6-7-5.2-7-10V6l7-3Z\"></path><path d=\"M12 8v7\"></path><path d=\"M8.8 11.5h6.4\"></path></svg>`\n    };\n    return icons[slug] || icon();\n  };\n  let assetBase = \"\";\n  const homepageImageFallbacks = {\r\n    \"tesla-optimus\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-tesla-optimus-ad30d48fcf.png\",\r\n    \"figure-ai-figure-02\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-figure-ai-figure-02-a475ade5a5.png\",\r\n    \"unitree-robotics-unitree-g1\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-unitree-robotics-unitree-g1-726472fdcf.png\",\r\n    \"apptronik-apollo\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-apptronik-apollo-1809635ecd.png\",\r\n    \"agility-robotics-digit\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-agility-robotics-digit-ed6fa7c6f8.png\",\r\n    \"1x-technologies-neo\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-1x-technologies-neo-7a03dc0fa4.png\",\r\n    \"sanctuary-ai-phoenix\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-sanctuary-ai-phoenix-35d25960a8.png\",\r\n    \"ubtech-robotics-walker-s\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-ubtech-robotics-walker-s-af89630df5.png\",\r\n    \"fourier-intelligence-gr-2\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-fourier-intelligence-gr-2-f9187a0b9b.png\",\r\n    \"unitree-robotics-unitree-h2\": \"https://www.firgellirobots.com/cdn/shop/t/16/assets/fr-home-compare-unitree-robotics-unitree-h2-7fde71e458.png\"\r\n  };\r\n  const resolveImage = (src = \"\") => src.startsWith(\"asset://\") ? `${assetBase}${src.replace(\"asset://\", \"\")}` : src;\r\n  const robotFallbackImage = (robot) => robot?.imageFallback || homepageImageFallbacks[robot?.slug] || \"\";\r\n  const firstMediaImage = (items = []) => {\r\n    if (!Array.isArray(items)) return \"\";\r\n    const preferred = items.find((item) => item?.image && String(item.type || \"\").match(/hero|front|main|comparison|thumbnail|card|portrait/i));\r\n    return preferred?.image || items.find((item) => item?.image)?.image || \"\";\r\n  };\r\n  const foundImageCandidates = (robot) => Array.isArray(robot?.foundImages)\r\n    ? robot.foundImages.filter((item) => item?.image && (item.approved || item.officialImage || item.quality >= 80)).map((item) => item.image)\r\n    : [];\r\n  const imageCandidates = (robot) => {\r\n    const candidates = [\r\n      robot?.image,\r\n      firstMediaImage(robot?.approvedMedia),\r\n      firstMediaImage(robot?.imageViews),\r\n      ...(Array.isArray(robot?.approvedMedia) ? robot.approvedMedia.map((item) => item.image) : []),\r\n      ...(Array.isArray(robot?.imageViews) ? robot.imageViews.map((item) => item.image) : []),\r\n      ...foundImageCandidates(robot),\r\n      robotFallbackImage(robot),\r\n    ].filter(Boolean).map(resolveImage);\r\n    return [...new Set(candidates)];\r\n  };\r\n  const image = (robot, alt = \"\") => {\r\n    const candidates = imageCandidates(robot);\r\n    const src = candidates[0] || \"\";\r\n    const fallbacks = candidates.slice(1);\r\n    if (!src) return `<div class=\"fr-image-placeholder\">${icon()}</div>`;\r\n    return `<img loading=\"lazy\" src=\"${escapeHtml(src)}\" data-fr-fallbacks=\"${escapeHtml(JSON.stringify(fallbacks))}\" alt=\"${escapeHtml(alt || robot.name)}\">`;\r\n  };\r\n  document.addEventListener(\"error\", (event) => {\r\n    const img = event.target;\r\n    if (!(img instanceof HTMLImageElement) || !img.dataset.frFallbacks) return;\r\n    let fallbacks = [];\r\n    try { fallbacks = JSON.parse(img.dataset.frFallbacks || \"[]\"); } catch (error) { fallbacks = []; }\r\n    const next = fallbacks.shift();\r\n    if (next) {\r\n      img.dataset.frFallbacks = JSON.stringify(fallbacks);\r\n      img.src = next;\r\n    } else {\r\n      img.replaceWith(document.createRange().createContextualFragment(`<div class=\"fr-image-placeholder\">${icon()}</div>`));\r\n    }\r\n  }, true);\r\n  const rawField = (robot, key) => robot?.rawFields?.[key] || \"\";\r\n  const listFromText = (value = \"\", limit = 6) => String(value || \"\").split(/[;|]/).map((item) => item.trim()).filter(Boolean).slice(0, limit);\r\n  const publicStatusLabel = (status = \"\") => {\r\n    const text = String(status || \"\").toLowerCase();\r\n    if (text.includes(\"known\")) return \"Verified\";\r\n    if (text.includes(\"calculated\")) return \"Calculated\";\r\n    if (text.includes(\"estimated\")) return \"Estimated\";\r\n    if (text.includes(\"n/a\")) return \"Not applicable\";\r\n    if (text.includes(\"need\")) return \"Source needed\";\r\n    return status || \"Source needed\";\r\n  };\r\n  const upsertMeta = (name, content) => {\r\n    if (!content) return;\r\n    let meta = document.querySelector(`meta[name=\"${name}\"]`);\r\n    if (!meta) {\r\n      meta = document.createElement(\"meta\");\r\n      meta.setAttribute(\"name\", name);\r\n      document.head.appendChild(meta);\r\n    }\r\n    meta.setAttribute(\"content\", content);\r\n  };\r\n  const mediaViewKey = (item = {}) => {\r\n    const hay = `${item.displayLabel || \"\"} ${item.label || \"\"} ${item.type || \"\"} ${item.group || \"\"} ${item.sourcePath || \"\"}`.toLowerCase().replace(/[_-]+/g, \" \");\r\n    const checks = [\r\n      [\"contact_sheet\", [\"contact sheet\"]],\r\n      [\"head_torso\", [\"head torso\", \"head close\", \"torso\"]],\r\n      [\"arm_leg\", [\"arm leg\"]],\r\n      [\"front\", [\"front\", \"portrait\"]],\r\n      [\"side\", [\"side\", \"profile\"]],\r\n      [\"rear\", [\"rear\", \"back\"]],\r\n      [\"arm\", [\"arm\", \"hand\"]],\r\n      [\"leg\", [\"leg\", \"feet\", \"foot\"]],\r\n      [\"hero\", [\"hero\", \"main\"]],\r\n      [\"square\", [\"square\"]],\r\n      [\"landscape\", [\"landscape\"]],\r\n      [\"mobile\", [\"mobile\"]],\r\n      [\"social\", [\"social\", \"open graph\"]],\r\n      [\"thumbnail\", [\"thumbnail\", \"thumb\"]]\r\n    ];\r\n    for (const [key, tokens] of checks) {\r\n      if (tokens.some((token) => hay.includes(token))) return key;\r\n    }\r\n    return `image:${item.image || item.sourcePath || item.label || \"\"}`;\r\n  };\r\n  const uniqueMedia = (items = [], limit = 80) => {\r\n    const rows = Array.isArray(items) ? items.filter((item) => item && item.image) : [];\r\n    const seenImages = new Set();\r\n    const seenViews = new Set();\r\n    const unique = [];\r\n    rows.forEach((item) => {\r\n      const imageKey = item.image || \"\";\r\n      const viewKey = mediaViewKey(item);\r\n      if (seenImages.has(imageKey) || seenViews.has(viewKey)) return;\r\n      seenImages.add(imageKey);\r\n      seenViews.add(viewKey);\r\n      unique.push(item);\r\n    });\r\n    return unique.slice(0, limit);\r\n  };\r\n  function robotFaqs(robot) {\r\n    const maker = robot.manufacturer || \"the listed manufacturer\";\r\n    const price = safe(robot.price, \"not publicly verified\");\r\n    const availability = safe(robot.status, \"not publicly verified\");\r\n    const height = safe(robot.height, \"not publicly listed\");\r\n    const runtime = safe(robot.runtime, \"not publicly listed\");\r\n    const payload = safe(robot.payload, \"not publicly listed\");\r\n    const sourceCount = Number((robot.sources || []).length + (robot.manuals || []).length + (robot.papers || []).length);\r\n    return [\r\n      [`What is ${robot.name}?`, `${robot.name} is a ${robot.category || \"robot\"} associated with ${maker}. Firgelli Robots tracks its public specifications, media, source links, availability status, and comparison data in one profile.`],\r\n      [`Who makes ${robot.name}?`, `${robot.name} is listed with ${maker}. The manufacturer profile and source links on this page should be used to verify company-level details before making buying or research decisions.`],\r\n      [`Is ${robot.name} available to buy?`, `Current availability status: ${availability}. If the robot is marked as a prototype, pilot, announced, or not publicly sold, treat pricing and delivery claims as preliminary.`],\r\n      [`How much does ${robot.name} cost?`, `Pricing status: ${price}. Robot prices often vary by configuration, support contract, deployment type, and whether the buyer is a research, enterprise, or consumer customer.`],\r\n      [`What are the main ${robot.name} specifications?`, `Known headline specs include height ${height}, runtime ${runtime}, payload ${payload}, and degrees of freedom ${safe(robot.dof, \"not publicly listed\")}. The full specification table below separates verified, estimated, and source-needed fields.`],\r\n      [`What is ${robot.name} best used for?`, `${robot.name} is most useful to evaluate in the context of ${safe(robot.useCase || robot.targetMarket || robot.category, \"robot research and comparison\")}. Check the limitations section before assuming it is ready for home, factory, warehouse, or developer use.`],\r\n      [`How reliable is the ${robot.name} data?`, `This profile currently links ${sourceCount.toLocaleString()} source records and marks unknown fields as unknown rather than filling gaps with guesses.`]\r\n    ];\r\n  }\r\n  const setRobotSeo = (robot) => {\r\n    const maker = robot.manufacturer || \"Unknown manufacturer\";\r\n    const title = `${robot.name} Robot Review, Specs, Price & Images | Firgelli Robots`;\r\n    const description = `${robot.name} by ${maker}: specifications, pricing status, images, videos, use cases, and source-linked robot data.`;\r\n    document.title = title;\r\n    upsertMeta(\"description\", description.slice(0, 158));\r\n    const faqs = robotFaqs(robot).slice(0, 8);\r\n    const schema = {\r\n      \"@context\": \"https://schema.org\",\r\n      \"@graph\": [\r\n        {\r\n          \"@type\": \"Product\",\r\n          \"name\": robot.name,\r\n          \"brand\": maker,\r\n          \"manufacturer\": { \"@type\": \"Organization\", \"name\": maker },\r\n          \"description\": robot.summary || description,\r\n          \"image\": robot.image ? resolveImage(robot.image) : undefined,\r\n          \"url\": window.location.href,\r\n          \"additionalProperty\": [\r\n            [\"Availability\", robot.status],\r\n            [\"Price\", robot.price],\r\n            [\"Height\", robot.height],\r\n            [\"Weight\", robot.weight],\r\n            [\"Payload\", robot.payload],\r\n            [\"Runtime\", robot.runtime],\r\n            [\"Degrees of freedom\", robot.dof],\r\n            [\"Speed\", robot.speed]\r\n          ].filter(([, value]) => value).map(([name, value]) => ({ \"@type\": \"PropertyValue\", name, value }))\r\n        },\r\n        {\r\n          \"@type\": \"FAQPage\",\r\n          \"mainEntity\": faqs.map(([question, answer]) => ({\r\n            \"@type\": \"Question\",\r\n            \"name\": question,\r\n            \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": answer }\r\n          }))\r\n        },\r\n        {\r\n          \"@type\": \"BreadcrumbList\",\r\n          \"itemListElement\": [\r\n            { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": `${location.origin}/` },\r\n            { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Robots\", \"item\": `${location.origin}/pages/robots` },\r\n            { \"@type\": \"ListItem\", \"position\": 3, \"name\": robot.name, \"item\": window.location.href }\r\n          ]\r\n        }\r\n      ]\r\n    };\r\n    let script = document.querySelector(\"script[data-fr-robot-schema]\");\r\n    if (!script) {\r\n      script = document.createElement(\"script\");\r\n      script.type = \"application/ld+json\";\r\n      script.dataset.frRobotSchema = \"true\";\r\n      document.head.appendChild(script);\r\n    }\r\n    script.textContent = JSON.stringify(schema);\r\n  };\r\n  const publicMediaLabel = (view = {}) => {\r\n    const raw = String(view.displayLabel || view.label || view.type || \"Robot image\")\r\n      .replace(/[_-]+/g, \" \")\r\n      .replace(/\\s+/g, \" \")\r\n      .trim();\r\n    const lower = raw.toLowerCase();\r\n    if (lower.includes(\"hero\")) return \"Main photo\";\r\n    if (lower.includes(\"rear/back\")) return \"Rear view\";\r\n    if (lower.includes(\"head/torso\")) return \"Head and torso\";\r\n    if (lower.includes(\"arm + leg\")) return \"Arm and leg detail\";\r\n    return raw || \"Robot image\";\r\n  };\r\n  const publicMediaGroup = (view = {}) => {\r\n    const group = String(view.group || \"\").replace(/[_-]+/g, \" \").trim();\r\n    if (!group) return \"\";\r\n    const lower = group.toLowerCase();\r\n    if (lower.includes(\"approved\") || lower.includes(\"generated\")) return \"standard view\";\r\n    return group;\r\n  };\r\n  const mediaGallery = (items = [], robot = {}, limit = 80) => {\r\n    const media = uniqueMedia(items, limit);\r\n    if (!media.length) return \"\";\r\n    return `<div class=\"fr-view-gallery\">${media.map((view) => `\r\n      <article class=\"fr-view-card\">\r\n        <img loading=\"lazy\" src=\"${escapeHtml(resolveImage(view.image || \"\"))}\" alt=\"${escapeHtml(`${robot.name || \"Robot\"} ${publicMediaLabel(view)}`)}\">\r\n        <strong>${escapeHtml(publicMediaLabel(view))}</strong>\r\n        <span>${escapeHtml([publicMediaGroup(view), view.officialImage ? \"manufacturer source\" : \"\"].filter(Boolean).join(\" - \"))}</span>\r\n      </article>\r\n    `).join(\"\")}</div>`;\r\n  };\r\n  const viewGallery = (robot) => mediaGallery(Array.isArray(robot.imageViews) ? robot.imageViews : [], robot, 12);\r\n  const statusClass = (status = \"\") => `fr-status fr-status--${String(status || \"unknown\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\")}`;\r\n  const isDisplayableSpecRow = (row = {}) => {\r\n    const value = String(row.value || \"\").trim().toLowerCase();\r\n    const status = String(row.status || \"\").trim().toLowerCase();\r\n    if (!value || value === \"not found yet\" || value === \"not publicly listed\") return false;\r\n    if (status.includes(\"need\") || status.includes(\"research\")) return false;\r\n    return true;\r\n  };\r\n  const publicSpecValue = (value = \"\") => {\r\n    const raw = String(value || \"\").trim();\r\n    const lower = raw.toLowerCase();\r\n    if (lower === \"true\") return \"Yes\";\r\n    if (lower === \"false\") return \"No\";\r\n    if (lower === \"n/a\") return \"Not applicable\";\r\n    return raw;\r\n  };\r\n  const renderSpecSections = (robot) => {\r\n    const hiddenCategories = new Set([\"Internal Database Fields\", \"Website Assets\", \"SEO / Knowledge Graph\"]);\r\n    const sections = (Array.isArray(robot.specSections) ? robot.specSections : [])\r\n      .filter((section) => !hiddenCategories.has(section.category))\r\n      .map((section) => ({ ...section, rows: (section.rows || []).filter(isDisplayableSpecRow) }))\r\n      .filter((section) => section.rows.length);\r\n    if (!sections.length) return \"\";\r\n    return `<div class=\"fr-spec-chart\">${sections.map((section, index) => `\r\n      <details class=\"fr-spec-section\" ${index < 8 ? \"open\" : \"\"}>\r\n        <summary><span>${escapeHtml(section.category)}</span><em>${Number(section.rows.length || 0).toLocaleString()} documented fields</em></summary>\r\n        <div class=\"fr-spec-table\">\r\n          ${section.rows.map((row) => `\r\n            <div class=\"fr-spec-row\">\r\n              <span>${escapeHtml(row.label)}</span>\r\n              <strong>${escapeHtml(publicSpecValue(row.value))}</strong>\r\n              <em class=\"${statusClass(row.status)}\">${escapeHtml(publicStatusLabel(row.status))}</em>\r\n            </div>\r\n          `).join(\"\")}\r\n        </div>\r\n      </details>\r\n    `).join(\"\")}</div>`;\r\n  };\r\n  const linkCards = (items = [], emptyText = \"No linked records yet.\") => {\r\n    const rows = Array.isArray(items) ? items.filter((item) => item && (item.url || item.title)).slice(0, 24) : [];\r\n    if (!rows.length) return `<p class=\"fr-muted\">${escapeHtml(emptyText)}</p>`;\r\n    return `<div class=\"fr-source-grid\">${rows.map((item) => `\r\n      <article class=\"fr-source-card\">\r\n        <strong>${escapeHtml(item.title || item.url || \"Source\")}</strong>\r\n        <span>${escapeHtml([item.type, item.domain || item.publisher].filter(Boolean).join(\" - \") || \"Reference source\")}</span>\r\n        ${item.url ? `<a href=\"${escapeHtml(item.url)}\">Open source -></a>` : \"\"}\r\n      </article>\r\n    `).join(\"\")}</div>`;\r\n  };\r\n  const videoEmbedUrl = (url = \"\") => {\r\n    try {\r\n      const parsed = new URL(url, window.location.href);\r\n      const host = parsed.hostname.replace(/^www\\./, \"\").toLowerCase();\r\n      if (host === \"youtube.com\" || host === \"m.youtube.com\") {\r\n        const watchId = parsed.searchParams.get(\"v\");\r\n        const shortsId = parsed.pathname.match(/\\/shorts\\/([^/?#]+)/)?.[1];\r\n        const embedId = parsed.pathname.match(/\\/embed\\/([^/?#]+)/)?.[1];\r\n        const id = watchId || shortsId || embedId;\r\n        if (id) return `https://www.youtube.com/embed/${encodeURIComponent(id)}`;\r\n      }\r\n      if (host === \"youtu.be\") {\r\n        const id = parsed.pathname.split(\"/\").filter(Boolean)[0];\r\n        if (id) return `https://www.youtube.com/embed/${encodeURIComponent(id)}`;\r\n      }\r\n      if (host === \"vimeo.com\" || host === \"player.vimeo.com\") {\r\n        const id = parsed.pathname.split(\"/\").filter(Boolean).pop();\r\n        if (id && id !== \"video\") return `https://player.vimeo.com/video/${encodeURIComponent(id)}`;\r\n      }\r\n      return parsed.href;\r\n    } catch (error) {\r\n      return url;\r\n    }\r\n  };\r\n  const isDirectVideoUrl = (url = \"\") => /\\.(mp4|webm|ogg)(?:$|[?#])/i.test(String(url));\r\n  const videoFrame = (url, title, robotName) => {\r\n    const embedUrl = videoEmbedUrl(url);\r\n    const frameTitle = `${robotName || \"Robot\"} ${title || \"movement video\"}`;\r\n    if (isDirectVideoUrl(embedUrl)) {\r\n      const srcdoc = `<!doctype html><html><head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><style>html,body{margin:0;height:100%;background:#071525}video{display:block;width:100%;height:100%;object-fit:contain;background:#071525}</style></head><body><video controls preload=\"metadata\" src=\"${escapeHtml(embedUrl)}\"></video></body></html>`;\r\n      return `<iframe class=\"fr-video-frame\" srcdoc=\"${escapeHtml(srcdoc)}\" title=\"${escapeHtml(frameTitle)}\" loading=\"lazy\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen></iframe>`;\r\n    }\r\n    return `<iframe class=\"fr-video-frame\" src=\"${escapeHtml(embedUrl)}\" title=\"${escapeHtml(frameTitle)}\" loading=\"lazy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>`;\r\n  };\r\n  const videoIframes = (robot) => {\r\n    const videos = Array.isArray(robot.videos) ? robot.videos : [];\r\n    if (!videos.length) return `<p class=\"fr-muted\">No movement videos are linked yet.</p>`;\r\n    return `<div class=\"fr-video-grid\">${videos.map((item, index) => {\r\n      const record = typeof item === \"string\" ? { url: item } : item;\r\n      const url = record.url || \"\";\r\n      const title = record.title || record.type || `Robot movement video ${index + 1}`;\r\n      return `\r\n        <article class=\"fr-video-card\">\r\n          ${videoFrame(url, title, robot.name)}\r\n          <div>\r\n            <strong>${escapeHtml(title)}</strong>\r\n            <span>${escapeHtml([record.platform, record.type].filter(Boolean).join(\" - \") || \"Video evidence\")}</span>\r\n            ${record.source ? `<a href=\"${escapeHtml(record.source)}\">Source -></a>` : \"\"}\r\n          </div>\r\n        </article>`;\r\n    }).join(\"\")}</div>`;\r\n  };\r\n  const bindTabs = (root = document) => {\r\n    root.querySelectorAll(\"[data-fr-tabs]\").forEach((tabs) => {\r\n      const buttons = Array.from(tabs.querySelectorAll(\"[data-fr-tab-button]\"));\r\n      const panels = Array.from(tabs.querySelectorAll(\"[data-fr-tab-panel]\"));\r\n      buttons.forEach((button) => {\r\n        button.addEventListener(\"click\", () => {\r\n          const selected = button.dataset.frTabButton;\r\n          buttons.forEach((item) => item.classList.toggle(\"is-active\", item === button));\r\n          panels.forEach((panel) => {\r\n            const active = panel.dataset.frTabPanel === selected;\r\n            panel.classList.toggle(\"is-active\", active);\r\n            panel.hidden = !active;\r\n          });\r\n        });\r\n      });\r\n    });\r\n  };\r\n  const approvedMedia = (robot) => Array.isArray(robot.approvedMedia) && robot.approvedMedia.length ? robot.approvedMedia : (Array.isArray(robot.imageViews) ? robot.imageViews : []);\r\n  const mediaMatches = (item, tokens) => {\r\n    const hay = `${item.label || \"\"} ${item.type || \"\"} ${item.group || \"\"} ${item.sourcePath || \"\"}`.toLowerCase().replace(/[_-]+/g, \" \");\r\n    return tokens.some((token) => hay.includes(token));\r\n  };\r\n  const pickMediaSet = (robot, definitions, limit = 8) => {\r\n    const media = uniqueMedia(approvedMedia(robot), 64);\r\n    const used = new Set();\r\n    const selected = [];\r\n    definitions.forEach(([label, tokens]) => {\r\n      const match = media.find((item) => !used.has(item.image) && mediaMatches(item, tokens));\r\n      if (match) {\r\n        used.add(match.image);\r\n        selected.push({ ...match, displayLabel: label });\r\n      }\r\n    });\r\n    media.forEach((item) => {\r\n      if (selected.length < limit && !used.has(item.image)) {\r\n        used.add(item.image);\r\n        selected.push(item);\r\n      }\r\n    });\r\n    return selected.slice(0, limit);\r\n  };\r\n  const mediaTileGrid = (items, robot, modifier = \"\") => {\r\n    const media = Array.isArray(items) ? items : [];\r\n    if (!media.length) return `<p class=\"fr-muted\">No image gallery is available yet.</p>`;\r\n    return `<div class=\"fr-angle-grid ${modifier}\">${media.map((view) => `\r\n      <article class=\"fr-angle-tile\">\r\n        <img loading=\"lazy\" src=\"${escapeHtml(resolveImage(view.image || \"\"))}\" alt=\"${escapeHtml(`${robot.name || \"Robot\"} ${publicMediaLabel(view)}`)}\">\r\n        <strong>${escapeHtml(publicMediaLabel(view))}</strong>\r\n      </article>\r\n    `).join(\"\")}</div>`;\r\n  };\r\n  const specLookup = (robot, labels) => {\r\n    const wanted = labels.map((label) => label.toLowerCase());\r\n    for (const section of robot.specSections || []) {\r\n      for (const row of section.rows || []) {\r\n        if (wanted.includes(String(row.label || \"\").toLowerCase())) return row.value || \"\";\r\n      }\r\n    }\r\n    return \"\";\r\n  };\r\n  const shortValue = (value) => {\r\n    const text = safe(value, \"Not verified\");\r\n    return text.length > 84 ? `${text.slice(0, 82).trim()}...` : text;\r\n  };\r\n  const robotChecklist = (robot) => {\r\n    const mediaCount = approvedMedia(robot).length;\r\n    const checks = [\r\n      [\"Image gallery\", mediaCount ? `${mediaCount} images` : \"Not listed yet\"],\r\n      [\"Main robot photo\", robot.image ? \"Available\" : \"Not listed yet\"],\r\n      [\"Specification fields\", `${Number(robot.specSummary?.Total || 0).toLocaleString()} fields`],\r\n      [\"Source links\", `${Number((robot.sources || []).length).toLocaleString()} sources`],\r\n      [\"Media library\", `${mediaCount.toLocaleString()} images`],\r\n      [\"Profile depth\", robot.completeness >= 80 ? \"Strong\" : \"Still growing\"],\r\n    ];\r\n    return `<ul class=\"fr-dossier-checklist\">${checks.map(([label, value]) => `<li><span></span><strong>${escapeHtml(label)}</strong><em>${escapeHtml(value)}</em></li>`).join(\"\")}</ul>`;\r\n  };\r\n  const pipelineSteps = (robot) => {\r\n    const steps = [\r\n      [\"1\", \"Identity\", robot.id ? \"Listed\" : \"Not listed\"],\r\n      [\"2\", \"Images\", approvedMedia(robot).length ? \"Available\" : \"Needed\"],\r\n      [\"3\", \"Specs\", `${Number(robot.specSummary?.Known || 0).toLocaleString()} known`],\r\n      [\"4\", \"Sources\", `${Number((robot.sources || []).length).toLocaleString()} sources`],\r\n      [\"5\", \"Docs\", `${Number((robot.manuals || []).length + (robot.papers || []).length).toLocaleString()} linked`],\r\n      [\"6\", \"Profile\", \"Published\"],\r\n    ];\r\n    return `<div class=\"fr-dossier-pipeline\">${steps.map((step, index) => `\r\n      <div class=\"fr-pipeline-step\">\r\n        <span>${escapeHtml(step[0])}</span>\r\n        <strong>${escapeHtml(step[1])}</strong>\r\n        <em>${escapeHtml(step[2])}</em>\r\n      </div>\r\n      ${index < steps.length - 1 ? `<b>-></b>` : \"\"}\r\n    `).join(\"\")}</div>`;\r\n  };\r\n  const knownSpecRows = (robot, categories = [], limit = 8) => {\r\n    const wanted = categories.map((category) => category.toLowerCase());\r\n    const rows = [];\r\n    (robot.specSections || []).forEach((section) => {\r\n      if (wanted.length && !wanted.some((name) => String(section.category || \"\").toLowerCase().includes(name))) return;\r\n      (section.rows || []).forEach((row) => {\r\n        if (isDisplayableSpecRow(row)) rows.push(row);\r\n      });\r\n    });\r\n    return rows.slice(0, limit);\r\n  };\r\n  const specSentence = (robot, categories, fallback) => {\r\n    const rows = knownSpecRows(robot, categories, 4);\r\n    if (!rows.length) return fallback;\r\n    return rows.map((row) => `${row.label}: ${row.value}`).join(\"; \");\r\n  };\r\n  const internalLinkList = (items = []) => `<div class=\"fr-related-links\">${items.filter(Boolean).map((item) => `<a href=\"${escapeHtml(item.url)}\">${escapeHtml(item.label)}</a>`).join(\"\")}</div>`;\r\n  const relatedRobots = (robot, data, limit = 6) => {\r\n    const seen = new Set([robot.slug]);\r\n    const rows = [];\r\n    const add = (candidate) => {\r\n      if (!candidate || seen.has(candidate.slug)) return;\r\n      rows.push(candidate);\r\n      seen.add(candidate.slug);\r\n    };\r\n    data.robots.filter((item) => item.manufacturer && item.manufacturer === robot.manufacturer).forEach(add);\r\n    data.robots.filter((item) => item.category && item.category === robot.category).forEach(add);\r\n    (data.featuredRobots || []).forEach(add);\r\n    return rows.slice(0, limit);\r\n  };\r\n  const faqBlock = (faqs = []) => `<div class=\"fr-faq-list\">${faqs.map(([question, answer]) => `\r\n    <details class=\"fr-faq-item\">\r\n      <summary>${escapeHtml(question)}</summary>\r\n      <p>${escapeHtml(answer)}</p>\r\n    </details>\r\n  `).join(\"\")}</div>`;\r\n  const robotSeoArticle = (robot, data) => {\r\n    const maker = robot.manufacturer || \"Unknown manufacturer\";\r\n    const related = relatedRobots(robot, data, 6);\r\n    const mediaCount = approvedMedia(robot).length;\r\n    const sourceCount = Number((robot.sources || []).length + (robot.manuals || []).length + (robot.papers || []).length);\r\n    const targetMarket = safe(robot.targetMarket || robot.useCase || rawField(robot, \"target_market\"), \"robot buyers, researchers, engineers, and comparison shoppers\");\r\n    const hardware = specSentence(robot, [\"physical\", \"degrees\", \"hands\", \"payload\"], `Public hardware details are still incomplete for ${robot.name}; known dimensions and manipulation fields are listed in the specification table.`);\r\n    const mobility = specSentence(robot, [\"mobility\", \"performance\"], `${robot.name} should be evaluated from the public mobility fields below, especially walking method, speed, terrain limits, and stability notes where available.`);\r\n    const battery = specSentence(robot, [\"battery\"], `Battery chemistry, charging method, and runtime are not fully documented in the public data yet. Runtime should not be assumed beyond the fields shown in the specification table.`);\r\n    const aiSoftware = specSentence(robot, [\"software\", \"ai\", \"developer\"], `Software, SDK, ROS, local AI, and cloud AI details are tracked when publicly available. Unknown software fields stay marked as not listed until a stronger source is connected.`);\r\n    const hands = specSentence(robot, [\"hands\", \"payload\"], `End-effector and hand details are not fully documented yet. Use payload, hand DOF, finger count, and grip fields when comparing manipulation ability.`);\r\n    const strengths = [\r\n      sourceCount ? `${sourceCount.toLocaleString()} linked source records support verification.` : \"\",\r\n      mediaCount ? `${mediaCount.toLocaleString()} approved image assets help compare visible design and proportions.` : \"\",\r\n      robot.height ? `Height is listed as ${robot.height}.` : \"\",\r\n      robot.payload ? `Payload is listed as ${robot.payload}.` : \"\",\r\n      robot.dof ? `Degrees of freedom are listed as ${robot.dof}.` : \"\"\r\n    ].filter(Boolean);\r\n    const limitations = [\r\n      !robot.price || /not verified|not publicly|quote|listed/i.test(robot.price) ? \"Pricing should be treated as unconfirmed or configuration-dependent.\" : \"\",\r\n      /prototype|pilot|announced|development|not publicly/i.test(String(robot.status || \"\")) ? \"Availability may be limited to pilots, announcements, or non-public deployment.\" : \"\",\r\n      !robot.runtime ? \"Runtime is not fully documented in the public data.\" : \"\",\r\n      !robot.source ? \"A primary source URL is not yet attached to this profile.\" : \"\",\r\n      \"Robot specifications can change quickly as manufacturers revise hardware, software, and deployment programs.\"\r\n    ].filter(Boolean);\r\n    const relatedLinks = [\r\n      robot.manufacturer ? { label: `${maker} manufacturer profile`, url: `/pages/manufacturer-profile?manufacturer=${encodeURIComponent(slugifyLocal(maker))}` } : null,\r\n      { label: `${robot.category || \"Robot\"} category`, url: `/pages/category?filter=${encodeURIComponent(robot.category || \"humanoid\")}` },\r\n      { label: \"Robot comparison tool\", url: `/pages/compare?add=${encodeURIComponent(robot.slug)}` },\r\n      { label: \"Robot price guide\", url: \"/pages/knowledge?topic=Price\" },\r\n      { label: \"Robot DOF explained\", url: \"/pages/knowledge?topic=DOF\" },\r\n      { label: \"Robot battery runtime explained\", url: \"/pages/knowledge?topic=Runtime\" }\r\n    ];\r\n    return `\r\n      <section class=\"fr-seo-article fr-robot-panel\">\r\n        <p class=\"fr-eyebrow\">${escapeHtml(robot.name)} Review</p>\r\n        <h2>${escapeHtml(robot.name)} review, specs, price, availability and comparison</h2>\r\n        <p><strong>Quick answer:</strong> ${escapeHtml(robot.name)} is a ${escapeHtml(robot.category || \"robot\")} associated with ${escapeHtml(maker)}. Based on currently available public information, its availability is ${escapeHtml(safe(robot.status, \"not publicly confirmed\"))}, and its pricing status is ${escapeHtml(safe(robot.price, \"not publicly confirmed\"))}.</p>\r\n        <p>This profile is designed for people comparing humanoid robots, evaluating robot buying options, checking developer suitability, or researching the state of commercial robotics. Unknown fields stay unknown until a stronger source is attached.</p>\r\n\r\n        <div class=\"fr-seo-grid\">\r\n          <article><h3>What is ${escapeHtml(robot.name)}?</h3><p>${escapeHtml(robot.summary || `${robot.name} is tracked as a ${robot.category || \"robot\"} in the Firgelli Robots Knowledge Brain. The profile combines public specifications, manufacturer references, approved images, and source links.`)}</p></article>\r\n          <article><h3>Who makes it?</h3><p>${escapeHtml(maker)} is the manufacturer currently connected to this profile. Use the linked manufacturer page and source cards below to verify company-level details, model lineage, and official product information.</p></article>\r\n          <article><h3>What is it designed for?</h3><p>${escapeHtml(robot.name)} is most relevant for ${escapeHtml(targetMarket)}. Treat use-case claims carefully when the robot is still marked as prototype, piloting, announced, or unavailable to the public.</p></article>\r\n          <article><h3>Availability and price</h3><p>Availability: ${escapeHtml(safe(robot.status, \"not publicly listed\"))}. Price: ${escapeHtml(safe(robot.price, \"not publicly listed\"))}. Robot pricing often depends on configuration, support contract, accessories, and whether the customer is buying, leasing, or joining a pilot.</p></article>\r\n        </div>\r\n\r\n        <h3>Hardware and design</h3>\r\n        <p>${escapeHtml(hardware)}</p>\r\n        <h3>Mobility</h3>\r\n        <p>${escapeHtml(mobility)}</p>\r\n        <h3>Hands, manipulation and payload</h3>\r\n        <p>${escapeHtml(hands)}</p>\r\n        <h3>Battery and charging</h3>\r\n        <p>${escapeHtml(battery)}</p>\r\n        <h3>AI, software and developer support</h3>\r\n        <p>${escapeHtml(aiSoftware)}</p>\r\n\r\n        <div class=\"fr-seo-grid\">\r\n          <article><h3>Strengths</h3><ul>${(strengths.length ? strengths : [\"This profile is connected to the broader Firgelli Robots comparison database.\"]).map((item) => `<li>${escapeHtml(item)}</li>`).join(\"\")}</ul></article>\r\n          <article><h3>Limitations and uncertainties</h3><ul>${limitations.map((item) => `<li>${escapeHtml(item)}</li>`).join(\"\")}</ul></article>\r\n          <article><h3>Best use cases</h3><ul>${listFromText(robot.useCase || robot.targetMarket || \"Research; Comparison shopping; Robotics education; Enterprise evaluation\", 6).map((item) => `<li>${escapeHtml(item)}</li>`).join(\"\")}</ul></article>\r\n          <article><h3>Not ideal for</h3><ul><li>Buyers who need guaranteed availability without confirming directly with the manufacturer.</li><li>Procurement decisions that require independently verified pricing, warranty, and deployment support.</li><li>Applications where missing safety, runtime, payload, or autonomy data cannot be tolerated.</li></ul></article>\r\n        </div>\r\n\r\n        <h3>Similar robots and comparisons</h3>\r\n        <p>Compare ${escapeHtml(robot.name)} against nearby robots to understand maturity, cost, availability, hardware tradeoffs, and ecosystem differences.</p>\r\n        ${internalLinkList(related.map((item) => ({ label: item.name, url: robotUrl(item) })).concat(relatedLinks))}\r\n\r\n        <h3>FAQ</h3>\r\n        ${faqBlock(robotFaqs(robot))}\r\n      </section>`;\r\n  };\r\n  const slugifyLocal = (value = \"\") => String(value || \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\r\n  const categorySeoContent = (kind, data, robots) => {\r\n    const category = new URLSearchParams(location.search).get(\"filter\") || \"humanoid\";\r\n    const record = (data.categories || []).find((item) => item.slug === category) || { label: \"Robot Database\", description: \"Robots tracked in the Firgelli Robots Knowledge Brain.\" };\r\n    const top = robots.slice(0, 8);\r\n    return `\r\n      <section class=\"fr-seo-article fr-card fr-section\">\r\n        <p class=\"fr-eyebrow\">Category Guide</p>\r\n        <h2>${escapeHtml(record.label)} guide, best robots and buying considerations</h2>\r\n        <p>${escapeHtml(record.description || `${record.label} are tracked by use case, availability, specifications, images, and source quality.`)}</p>\r\n        <div class=\"fr-seo-grid\">\r\n          <article><h3>What belongs in this category?</h3><p>Robots are included when their public records match this category flag or their primary category. The filter uses Knowledge Brain fields, not advertising language alone.</p></article>\r\n          <article><h3>What does not belong?</h3><p>Robots without enough matching evidence, unrelated automation products, or records with uncertain category mapping should remain outside this landing page until reviewed.</p></article>\r\n          <article><h3>What to compare</h3><p>Start with availability, price, height, payload, runtime, mobility, DOF, developer support, source count, and whether the robot has approved images or public videos.</p></article>\r\n          <article><h3>Limitations</h3><p>Many robot manufacturers publish partial information. Missing price, runtime, SDK, safety, and deployment data should be treated as a research gap, not as a hidden positive.</p></article>\r\n        </div>\r\n        <h3>Best robots in this category</h3>\r\n        ${internalLinkList(top.map((robot) => ({ label: robot.name, url: robotUrl(robot) })))}\r\n        <h3>FAQ</h3>\r\n        ${faqBlock([\r\n          [`What is the best ${record.label.toLowerCase()}?`, `The best choice depends on whether you need consumer access, enterprise deployment, developer support, payload, runtime, or research flexibility. Use the comparison table and robot detail pages rather than relying on one headline spec.`],\r\n          [`Are ${record.label.toLowerCase()} for sale?`, `Some are sold, some are enterprise-only, and many are still prototypes or pilot programs. Always verify the current availability status on the robot profile and manufacturer source.`],\r\n          [`Which specs matter most?`, `Price, availability, payload, runtime, DOF, safety, SDK/ROS support, and source quality usually matter more than promotional videos alone.`]\r\n        ])}\r\n      </section>`;\r\n  };\r\n  const manufacturerSeoContent = (manufacturer, robots) => {\r\n    const lineup = robots.filter((robot) => robot.manufacturer === manufacturer.name).slice(0, 12);\r\n    return `\r\n      <section class=\"fr-seo-article fr-card fr-section\">\r\n        <p class=\"fr-eyebrow\">Manufacturer Profile</p>\r\n        <h2>${escapeHtml(manufacturer.name)} robots, company focus and public lineup</h2>\r\n        <p>${escapeHtml(manufacturer.name)} is listed in the Firgelli Robots manufacturer database with a focus on ${escapeHtml(safe(manufacturer.focus, \"robotics\"))}${manufacturer.country ? ` and country listed as ${escapeHtml(manufacturer.country)}` : \"\"}. This page connects the company profile to robot models, source-backed database records, and related comparison pages.</p>\r\n        <div class=\"fr-seo-grid\">\r\n          <article><h3>Robotics focus</h3><p>${escapeHtml(safe(manufacturer.focus, \"Robotics focus is not fully documented yet.\"))}</p></article>\r\n          <article><h3>Known models</h3><p>${escapeHtml(safe(manufacturer.models, lineup.map((robot) => robot.name).join(\", \") || \"No robot models are linked yet.\"))}</p></article>\r\n          <article><h3>Location</h3><p>${escapeHtml([manufacturer.country, manufacturer.headquarters].filter(Boolean).join(\" - \") || \"Country and headquarters are not fully documented yet.\")}</p></article>\r\n          <article><h3>Source confidence</h3><p>${Number(manufacturer.confidence || 0).toLocaleString()}% confidence with ${Number(manufacturer.sourceCount || 0).toLocaleString()} source records attached where available.</p></article>\r\n        </div>\r\n        <h3>Robot lineup</h3>\r\n        ${internalLinkList(lineup.map((robot) => ({ label: robot.name, url: robotUrl(robot) })))}\r\n        <h3>FAQ</h3>\r\n        ${faqBlock([\r\n          [`What robots does ${manufacturer.name} make?`, `${manufacturer.models || lineup.map((robot) => robot.name).join(\", \") || \"The linked robot lineup is still being expanded.\"}`],\r\n          [`Where is ${manufacturer.name} based?`, `${[manufacturer.country, manufacturer.headquarters].filter(Boolean).join(\" - \") || \"Location data is not fully documented yet.\"}`],\r\n          [`How should I verify ${manufacturer.name} data?`, `Use the linked robot profiles, manufacturer website, product pages, and source records. Unknown company details should stay unconfirmed until supported by a source.`]\r\n        ])}\r\n      </section>`;\r\n  };\r\n  const comparisonSeoContent = (robots) => {\r\n    if (!robots.length) return \"\";\r\n    const names = robots.map((robot) => robot.name).join(\" vs \");\r\n    return `\r\n      <section class=\"fr-seo-article fr-card fr-section\">\r\n        <p class=\"fr-eyebrow\">Comparison Analysis</p>\r\n        <h2>${escapeHtml(names)} comparison guide</h2>\r\n        <p>This comparison is designed to help buyers, researchers, engineers, and robotics enthusiasts evaluate differences in price, availability, dimensions, payload, runtime, DOF, and maturity. The table is a starting point; each robot profile contains deeper source notes and missing-data warnings.</p>\r\n        <div class=\"fr-seo-grid\">\r\n          <article><h3>Short verdict</h3><p>Choose the robot with the best match for your intended use case, not simply the most familiar brand. Availability and support matter as much as headline specifications.</p></article>\r\n          <article><h3>Key differences</h3><p>${escapeHtml(robots.map((robot) => `${robot.name}: ${compactStatus(robot.status)}, ${compactPrice(robot.price)}`).join(\"; \"))}</p></article>\r\n          <article><h3>Data limitations</h3><p>Several humanoid robot projects publish incomplete or changing data. Treat unknown fields as unknown and verify directly with the manufacturer before buying or citing.</p></article>\r\n          <article><h3>Best next step</h3><p>Open each robot profile to inspect source links, image galleries, videos, and full specification sections before making a decision.</p></article>\r\n        </div>\r\n        <h3>Related robot profiles</h3>\r\n        ${internalLinkList(robots.map((robot) => ({ label: robot.name, url: robotUrl(robot) })))}\r\n      </section>`;\r\n  };\r\n  const toolSeoContent = (data) => `\r\n    <section class=\"fr-seo-article fr-card fr-section\">\r\n      <p class=\"fr-eyebrow\">Robot Tools</p>\r\n      <h2>Robot finder, comparison tools and calculators</h2>\r\n      <p>Firgelli Robots tools are built on the Knowledge Brain, including robot specifications, manufacturer records, availability notes, approved imagery, source links, and research records. The tools are intended for early research, not final procurement without source verification.</p>\r\n      <div class=\"fr-seo-grid\">\r\n        <article><h3>Robot Compare</h3><p>Use the comparison tool to evaluate price, height, payload, runtime, DOF, mobility, and availability side by side.</p></article>\r\n        <article><h3>Robot Finder</h3><p>Use the finder workflow to narrow robots by intended use, environment, budget assumptions, and hardware priorities.</p></article>\r\n        <article><h3>Cost of ownership</h3><p>Future calculator modules can include robot purchase price, service, accessories, batteries, deployment support, and downtime assumptions.</p></article>\r\n        <article><h3>Limitations</h3><p>Unknown price, battery, safety, warranty, and support data should not be guessed. The tools should surface missing data clearly.</p></article>\r\n      </div>\r\n      <h3>Related guides</h3>\r\n      ${internalLinkList([{ label: \"Humanoid robot price guide\", url: \"/pages/knowledge?topic=Price\" }, { label: \"Robot payload explained\", url: \"/pages/knowledge?topic=Payload\" }, { label: \"Robot runtime explained\", url: \"/pages/knowledge?topic=Runtime\" }, { label: \"Compare robots\", url: \"/pages/compare\" }])}\r\n    </section>`;\r\n  const researchSeoContent = (data) => `\r\n    <section class=\"fr-seo-article fr-card fr-section\">\r\n      <p class=\"fr-eyebrow\">Research Hub</p>\r\n      <h2>Humanoid robot research, patents, manuals and source references</h2>\r\n      <p>The research hub organizes source material behind robot profiles: official product pages, manuals, papers, patents, videos, and supporting references. The goal is to separate manufacturer claims, third-party coverage, and technical documentation so users can verify what is known.</p>\r\n      <div class=\"fr-seo-grid\">\r\n        <article><h3>Plain-English summary</h3><p>Use this page to move from a robot card to the evidence behind it. Source records help explain where specifications, images, availability notes, and technical claims came from.</p></article>\r\n        <article><h3>Technical summary</h3><p>The database currently tracks ${Number(data.stats.sources || 0).toLocaleString()} source records, ${Number(data.stats.papersPatents || 0).toLocaleString()} papers/patents, and ${Number(data.stats.manualsDocs || 0).toLocaleString()} manuals/docs.</p></article>\r\n        <article><h3>Why it matters</h3><p>Humanoid robotics changes quickly. Source-backed pages are more trustworthy than static lists because they show which details are verified and which still need research.</p></article>\r\n        <article><h3>How to use sources</h3><p>Prioritize official product pages and technical documents for specifications, then use papers, patents, and reputable coverage for context.</p></article>\r\n      </div>\r\n    </section>`;\r\n\r\n  async function loadData(root) {\r\n    if (state.data) return state.data;\r\n    const rawUrl = root?.dataset?.dataUrl || document.querySelector(\"[data-data-url]\")?.dataset?.dataUrl;\r\n    const url = new URL(rawUrl, window.location.href);\r\n    if (url.pathname.includes(\"/fr-robot-data\")) {\r\n      url.pathname = url.pathname.replace(/fr-robot-data(?:-[^/]+)?\\.json$/, \"fr-robot-data-public-20260705.json\");\r\n      url.search = \"\";\r\n      url.searchParams.set(\"fr_cache\", Date.now());\r\n    }\r\n    const response = await fetch(url.toString(), { cache: \"no-store\" });\r\n    state.data = await response.json();\r\n    return state.data;\r\n  }\r\n\r\n  function renderHero(data) {\r\n    const target = document.querySelector(\"[data-fr-hero-robots]\");\r\n    if (!target) return;\r\n    target.innerHTML = data.featuredRobots.slice(0, 4).map((robot) => `\r\n      <a class=\"fr-hero-robot\" href=\"${robotUrl(robot)}\">\r\n        <span class=\"fr-hero-robot__image\">${image(robot)}</span>\r\n        <strong>${escapeHtml(robot.name.replace(\"Tesla \", \"\"))}</strong>\r\n      </a>\r\n    `).join(\"\");\r\n  }\r\n\r\n  function renderFeaturedTable(data) {\r\n    const table = document.querySelector(\"[data-fr-featured-table]\");\r\n    if (!table) return;\r\n    const robots = data.featuredRobots.slice(0, 10);\r\n    const rows = [\r\n      [\"Price (USD)\", \"price\"],\r\n      [\"Height\", \"height\"],\r\n      [\"Weight\", \"weight\"],\r\n      [\"DOF\", \"dof\"],\r\n      [\"Payload\", \"payload\"],\r\n      [\"Runtime\", \"runtime\"],\r\n      [\"Walking Speed\", \"speed\"],\r\n      [\"Release Status\", \"status\"]\r\n    ];\r\n    table.innerHTML = `\r\n      <colgroup><col class=\"fr-compare-label-col\">${robots.map(() => `<col class=\"fr-compare-robot-col\">`).join(\"\")}</colgroup>\r\n      <thead><tr><th scope=\"col\"></th>${robots.map((robot) => `<th scope=\"col\"><a class=\"fr-table-robot\" href=\"${robotUrl(robot)}\">${image(robot)}<span>${escapeHtml(robot.name)}</span></a></th>`).join(\"\")}</tr></thead>\r\n      <tbody>${rows.map(([label, key]) => `<tr><td><a href=\"/pages/knowledge?topic=${encodeURIComponent(label)}\">${label}</a></td>${robots.map((robot) => `<td>${escapeHtml(compactComparisonValue(robot, key))}</td>`).join(\"\")}</tr>`).join(\"\")}</tbody>`;\r\n  }\r\n\r\n  function bindFeaturedTableScroll() {\r\n    document.querySelectorAll(\"[data-fr-scroll-table]\").forEach((button) => {\r\n      button.addEventListener(\"click\", () => {\r\n        const section = button.closest(\".fr-section\");\r\n        const wrap = section ? section.querySelector(\".fr-table-wrap\") : document.querySelector(\".fr-table-wrap\");\r\n        if (!wrap) return;\r\n        const direction = Number(button.dataset.frScrollTable || 1);\r\n        wrap.scrollBy({ left: direction * Math.round(wrap.clientWidth * 0.82), behavior: \"smooth\" });\r\n      });\r\n    });\r\n  }\r\n\r\n  function renderCategories(data) {\r\n    const target = document.querySelector(\"[data-fr-categories]\");\r\n    if (!target) return;\r\n    target.innerHTML = data.categories.map((category) => `\r\n      <a class=\"fr-category-card\" href=\"/pages/category?filter=${encodeURIComponent(category.slug)}\">\n        <span class=\"fr-category-card__icon\">${categoryIcon(category.slug)}</span>\n        <strong>${escapeHtml(category.label)}</strong>\n        <span>${category.count}+ Robots</span>\r\n      </a>\r\n    `).join(\"\");\r\n  }\r\n\r\n  function renderStats(data) {\r\n    const target = document.querySelector(\"[data-fr-stats]\");\r\n    if (!target) return;\r\n    const stats = [\r\n      [\"Humanoid Robots\", data.stats.humanoidRobots],\r\n      [\"Manufacturers\", data.stats.manufacturers],\r\n      [\"Specifications\", data.stats.specifications],\r\n      [\"Images\", data.stats.images],\r\n      [\"Videos\", data.stats.videos],\r\n      [\"Patents & Papers\", data.stats.papersPatents]\r\n    ];\r\n    target.innerHTML = stats.map(([label, value]) => `<div class=\"fr-stat\"><span class=\"fr-stat__icon\">${icon()}</span><div><strong>${Number(value || 0).toLocaleString()}+</strong><span>${escapeHtml(label)}</span></div></div>`).join(\"\");\r\n  }\r\n\r\n  function renderLatest(data) {\r\n    const target = document.querySelector(\"[data-fr-latest]\");\r\n    if (!target) return;\r\n    target.innerHTML = data.latestRobots.slice(0, 5).map((robot) => `\r\n      <article class=\"fr-robot-card\">\r\n        <a href=\"${robotUrl(robot)}\">${image(robot)}</a>\r\n        <div>\r\n          <h3><a href=\"${robotUrl(robot)}\">${escapeHtml(robot.name)}</a></h3>\r\n          <dl>\r\n            <div><dt>Manufacturer</dt><dd>${escapeHtml(robot.manufacturer || \"Unknown\")}</dd></div>\r\n            <div><dt>Price Est.</dt><dd>${escapeHtml(robot.price)}</dd></div>\r\n            <div><dt>Height</dt><dd>${escapeHtml(robot.height || \"Unknown\")}</dd></div>\r\n          </dl>\r\n          <span class=\"${badgeClass(robot.status)}\">${escapeHtml(robot.status || \"Review\")}</span>\r\n        </div>\r\n      </article>\r\n    `).join(\"\");\r\n  }\r\n\r\n  function renderViewShowcase(data) {\r\n    const target = document.querySelector(\"[data-fr-view-showcase]\");\r\n    if (!target) return;\r\n    const robot = data.robots.find((item) => item.slug === \"tesla-optimus\" || item.id === \"robot_optimus_f2db54a655\");\r\n    if (!robot || !Array.isArray(robot.imageViews) || !robot.imageViews.length) {\r\n      target.remove();\r\n      return;\r\n    }\r\n    target.innerHTML = `\r\n      <div class=\"fr-section__header\">\r\n        <div>\r\n          <h2>${escapeHtml(robot.manufacturer)} ${escapeHtml(robot.name)}</h2>\r\n        </div>\r\n        <a href=\"${robotUrl(robot)}\">Open Robot Profile -></a>\r\n      </div>\r\n      ${viewGallery(robot)}\r\n    `;\r\n  }\r\n\r\n  function renderTools(data) {\r\n    const target = document.querySelector(\"[data-fr-tools]\");\r\n    if (!target) return;\r\n    target.innerHTML = data.tools.map((tool) => `\r\n      <article class=\"fr-tool-card\">\r\n        <span class=\"fr-tool-card__icon\">${icon()}</span>\r\n        <strong>${escapeHtml(tool.title)}</strong>\r\n        <p>${escapeHtml(tool.description)}</p>\r\n        <a href=\"${escapeHtml(tool.url)}\">${escapeHtml(tool.cta)} -></a>\r\n      </article>\r\n    `).join(\"\");\r\n  }\r\n\r\n  function renderManufacturerMarquee(data) {\r\n    const target = document.querySelector(\"[data-fr-manufacturer-marquee]\");\r\n    if (!target) return;\r\n    const manufacturers = [...(data.manufacturers || [])]\r\n      .filter((manufacturer) => manufacturer && manufacturer.name)\r\n      .sort((a, b) => String(a.name).localeCompare(String(b.name)));\r\n    if (!manufacturers.length) {\r\n      target.closest(\".fr-manufacturer-marquee\")?.remove();\r\n      return;\r\n    }\r\n    const row = [...manufacturers, ...manufacturers];\r\n    target.innerHTML = row.map((manufacturer) => {\r\n      const logo = manufacturer.logo || manufacturer.logoFallback || \"\";\r\n      return `\r\n        <a class=\"fr-manufacturer-logo\" href=\"/pages/manufacturer-profile?manufacturer=${encodeURIComponent(manufacturer.slug || \"\")}\" aria-label=\"${escapeHtml(`Open ${manufacturer.name} manufacturer profile`)}\">\r\n          <strong>${escapeHtml(manufacturer.name)}</strong>\r\n          ${logo ? `<img loading=\"lazy\" src=\"${escapeHtml(logo)}\" alt=\"${escapeHtml(`${manufacturer.name} logo`)}\">` : \"\"}\r\n        </a>`;\r\n    }).join(\"\");\r\n    target.querySelectorAll(\"img\").forEach((img) => {\r\n      img.addEventListener(\"error\", () => {\r\n        img.hidden = true;\r\n      }, { once: true });\r\n    });\r\n  }\r\n\r\n  function renderControls(kind, data) {\r\n    const controls = document.querySelector(\"[data-fr-page-controls]\");\r\n    if (!controls) return;\r\n    if ([\"robots\", \"compare\", \"category\", \"tools\", \"knowledge\", \"news\", \"developers\", \"marketplace\", \"community\"].includes(kind)) {\r\n      controls.innerHTML = `\r\n        <input type=\"search\" placeholder=\"Search robots, manufacturers, specs...\" data-fr-filter-search>\r\n        <select data-fr-filter-category><option value=\"\">All categories</option>${data.categories.map(c => `<option value=\"${escapeHtml(c.slug)}\">${escapeHtml(c.label)}</option>`).join(\"\")}</select>\r\n        <select data-fr-filter-status><option value=\"\">All availability</option>${[...new Set(data.robots.map(r => r.status).filter(Boolean))].sort().map(s => `<option value=\"${escapeHtml(s)}\">${escapeHtml(s)}</option>`).join(\"\")}</select>\r\n      `;\r\n      const category = new URLSearchParams(location.search).get(\"filter\");\r\n      const query = new URLSearchParams(location.search).get(\"q\") || \"\";\r\n      const searchInput = controls.querySelector(\"[data-fr-filter-search]\");\r\n      const categorySelect = controls.querySelector(\"[data-fr-filter-category]\");\r\n      if (query && searchInput) searchInput.value = query;\r\n      if (category && categorySelect) categorySelect.value = category;\r\n    }\r\n  }\r\n\r\n  const normalizeSearch = (value = \"\") => String(value || \"\").toLowerCase().replace(/[_-]+/g, \" \").replace(/\\s+/g, \" \").trim();\r\n\r\n  function filteredRobots(data) {\r\n    const q = normalizeSearch(document.querySelector(\"[data-fr-filter-search]\")?.value || new URLSearchParams(location.search).get(\"q\") || \"\");\r\n    const category = document.querySelector(\"[data-fr-filter-category]\")?.value || new URLSearchParams(location.search).get(\"filter\") || \"\";\r\n    const status = document.querySelector(\"[data-fr-filter-status]\")?.value || \"\";\r\n    return data.robots.filter((robot) => {\r\n      const rawFieldHay = Object.values(robot.rawFields || {}).join(\" \");\r\n      const specHay = (robot.specSections || []).flatMap((section) => (section.rows || []).map((row) => `${row.label} ${row.value}`)).join(\" \");\r\n      const hay = normalizeSearch(`${robot.id} ${robot.slug} ${robot.name} ${robot.manufacturer} ${robot.summary} ${robot.category} ${robot.useCase} ${rawFieldHay} ${specHay}`);\r\n      if (q && !q.split(\" \").every((token) => hay.includes(token))) return false;\r\n      if (status && robot.status !== status) return false;\r\n      if (category && !robot.flags[category] && robot.category !== category) return false;\r\n      return true;\r\n    });\r\n  }\r\n\r\n  function renderPageResults(kind, data) {\r\n    const target = document.querySelector(\"[data-fr-page-results]\");\r\n    if (!target) return;\r\n    if (kind === \"robot-profile\") {\r\n      const slug = new URLSearchParams(location.search).get(\"robot\") || \"\";\r\n      const robot = data.robots.find(r => robotMatchesSlug(r, slug)) || data.robots[0];\r\n      const specSummary = robot.specSummary || {};\r\n      target.closest(\".fr-page-shell\")?.classList.add(\"fr-page-shell--robot-profile\");\r\n      const pageEyebrow = document.querySelector(\".fr-page-hero .fr-eyebrow\");\r\n      const pageHeading = document.querySelector(\".fr-page-hero h1\");\r\n      const pageCopy = document.querySelector(\".fr-page-hero p:not(.fr-eyebrow)\");\r\n      const maker = robot.manufacturer || \"Unknown manufacturer\";\r\n      const publicSummary = robot.summary || `${robot.name} is a ${robot.category || \"robot\"} from ${maker}. This page brings together specifications, availability, images, videos, and source links in one public robot profile.`;\r\n      setRobotSeo(robot);\r\n      if (pageEyebrow) pageEyebrow.textContent = `${maker} robot profile`;\r\n      if (pageHeading) pageHeading.textContent = robot.name;\r\n      if (pageCopy) pageCopy.textContent = publicSummary;\r\n      const standardViews = pickMediaSet(robot, [\r\n        [\"Front view\", [\"front\", \"portrait\"]],\r\n        [\"Side view\", [\"side\"]],\r\n        [\"Rear view\", [\"rear\", \"back\"]],\r\n        [\"Head and torso\", [\"head\", \"torso\"]],\r\n        [\"Arm detail\", [\"arm\"]],\r\n        [\"Leg detail\", [\"leg\", \"feet\", \"foot\"]],\r\n        [\"Arm and leg detail\", [\"arm leg\"]]\r\n      ], 7).filter((item) => String(item.image || \"\") !== String(robot.image || \"\"));\r\n      const mediaItems = uniqueMedia(approvedMedia(robot), 18);\r\n      const standardImageKeys = new Set(standardViews.map((item) => String(item.image || \"\")));\r\n      if (robot.image) standardImageKeys.add(String(robot.image));\r\n      const supplementalMediaItems = mediaItems.filter((item) => !standardImageKeys.has(String(item.image || \"\")));\r\n      const quickSpecs = [\r\n        [\"Price\", robot.price],\r\n        [\"Availability\", robot.status],\r\n        [\"Height\", robot.height],\r\n        [\"Weight\", robot.weight],\r\n        [\"Payload\", robot.payload],\r\n        [\"Runtime\", robot.runtime],\r\n        [\"DOF\", robot.dof],\r\n        [\"Speed\", robot.speed],\r\n        [\"Battery\", specLookup(robot, [\"Battery Capacity\"])],\r\n        [\"Actuators\", specLookup(robot, [\"Actuator Count\"])],\r\n      ];\r\n      const videoCount = Array.isArray(robot.videos) ? robot.videos.length : 0;\r\n      const documentedSpecs = Number(specSummary.Known || 0) + Number(specSummary.Calculated || 0) + Number(specSummary.Estimated || 0);\r\n      const sourceTotal = Number((robot.sources || []).length + (robot.manuals || []).length + (robot.papers || []).length);\r\n      const bestFor = listFromText(rawField(robot, \"best_for\") || robot.useCase || robot.targetMarket).join(\", \") || `${robot.category || \"robotics\"} research, comparison, and buyer evaluation`;\r\n      const caveats = listFromText(rawField(robot, \"known_limitations\") || rawField(robot, \"known_issues\") || rawField(robot, \"not_best_for\")).join(\", \") || \"Public specifications can change as the manufacturer releases new details.\";\r\n      const competitors = listFromText(rawField(robot, \"competitors\") || rawField(robot, \"similar_robots\")).join(\", \") || data.featuredRobots.filter((item) => item.slug !== robot.slug).slice(0, 4).map((item) => item.name).join(\", \");\r\n      const productUrl = robot.productPage || robot.source || rawField(robot, \"product_page_url\") || rawField(robot, \"robot_url\");\r\n      const metrics = [\r\n        [\"Documented specs\", `${documentedSpecs.toLocaleString()} fields`],\r\n        [\"Reference links\", `${sourceTotal.toLocaleString()} sources`],\r\n        [\"Images\", `${mediaItems.length.toLocaleString()} views`],\r\n        [\"Videos\", `${videoCount.toLocaleString()} clips`],\r\n        [\"Data confidence\", `${Number(robot.confidence || 0).toLocaleString()}%`]\r\n      ];\r\n      const reviewNotes = [\r\n        [\"What it is\", publicSummary],\r\n        [\"Availability and pricing\", `${safe(robot.status, \"Availability not publicly listed\")}. Price: ${safe(robot.price, \"not publicly listed\")}.`],\r\n        [\"Best fit\", bestFor],\r\n        [\"What to watch\", caveats],\r\n        [\"Comparable robots\", competitors || \"Compare this robot against other leading humanoid and service robot platforms.\"]\r\n      ];\r\n      const mediaTabImages = mediaGallery(supplementalMediaItems, robot) || `<p class=\"fr-muted\">Additional robot images will appear here as more angles are added.</p>`;\r\n      target.innerHTML = `\r\n        <div class=\"fr-robot-profile\">\r\n          <section class=\"fr-robot-hero\">\r\n            <div class=\"fr-robot-hero__copy\">\r\n              <div class=\"fr-robot-pill-row\">\r\n                <span class=\"fr-robot-pill\">${escapeHtml(maker)}</span>\r\n                <span class=\"fr-robot-pill\">${escapeHtml(compactStatus(robot.status))}</span>\r\n                <span class=\"fr-robot-pill\">${escapeHtml(robot.category || \"Robot\")}</span>\r\n              </div>\r\n              <h2>${escapeHtml(robot.name)} robot review and specifications</h2>\r\n              <p>${escapeHtml(publicSummary)}</p>\r\n              <div class=\"fr-profile__actions\">\r\n                <a class=\"fr-button\" href=\"/pages/compare?add=${encodeURIComponent(robot.slug)}\">Compare ${escapeHtml(robot.name)}</a>\r\n                ${productUrl ? `<a class=\"fr-button fr-button--secondary\" href=\"${escapeHtml(productUrl)}\">Official page</a>` : \"\"}\r\n              </div>\r\n            </div>\r\n            <div class=\"fr-robot-hero__image\">${image(robot, `${robot.name} robot`)}</div>\r\n            <aside class=\"fr-robot-facts\" aria-label=\"${escapeHtml(robot.name)} key facts\">\r\n              <p class=\"fr-eyebrow\">Key facts</p>\r\n              <h2>At a glance</h2>\r\n              <div class=\"fr-robot-fact-grid\">\r\n                ${quickSpecs.map(([k, v]) => `<div class=\"fr-robot-fact\"><span>${escapeHtml(k)}</span><strong>${escapeHtml(shortValue(v))}</strong></div>`).join(\"\")}\r\n              </div>\r\n            </aside>\r\n          </section>\r\n\r\n          <section class=\"fr-robot-panel\">\r\n            <div class=\"fr-robot-section-header\">\r\n              <div>\r\n                <p class=\"fr-eyebrow\">Images and videos</p>\r\n                <h2>${escapeHtml(robot.name)} photo gallery and movement media</h2>\r\n                <p>Standardized views make it easier to compare body shape, proportions, end effectors, and visible hardware across robots.</p>\r\n              </div>\r\n              <span>${Number(mediaItems.length).toLocaleString()} images / ${Number(videoCount).toLocaleString()} videos</span>\r\n            </div>\r\n            ${mediaTileGrid(standardViews, robot, \"fr-angle-grid--standard\")}\r\n            <div class=\"fr-tabs fr-robot-media-tabs\" data-fr-tabs>\r\n              <div class=\"fr-tab-list\" role=\"tablist\" aria-label=\"${escapeHtml(robot.name)} media\">\r\n                <button type=\"button\" class=\"is-active\" data-fr-tab-button=\"gallery\">Additional images</button>\r\n                <button type=\"button\" data-fr-tab-button=\"videos\">Videos</button>\r\n              </div>\r\n              <div class=\"fr-tab-panel is-active\" data-fr-tab-panel=\"gallery\">${mediaTabImages}</div>\r\n              <div class=\"fr-tab-panel\" data-fr-tab-panel=\"videos\" hidden>${videoIframes(robot)}</div>\r\n            </div>\r\n          </section>\r\n\r\n          <section class=\"fr-robot-panel\">\r\n            <div class=\"fr-robot-section-header\">\r\n              <div>\r\n                <p class=\"fr-eyebrow\">Robot intelligence profile</p>\r\n                <h2>Overview, buying status, and research notes</h2>\r\n              </div>\r\n            </div>\r\n            <div class=\"fr-robot-review-grid\">\r\n              ${reviewNotes.map(([label, text]) => `<article class=\"fr-robot-note\"><strong>${escapeHtml(label)}</strong><span>${escapeHtml(text)}</span></article>`).join(\"\")}\r\n            </div>\r\n          </section>\r\n\r\n          <section class=\"fr-robot-panel\">\r\n            <div class=\"fr-robot-section-header\">\r\n              <div>\r\n                <p class=\"fr-eyebrow\">Profile coverage</p>\r\n                <h2>Documented facts and source coverage</h2>\r\n                <p>These counters summarize how much public robot information is currently connected to this profile.</p>\r\n              </div>\r\n            </div>\r\n            <div class=\"fr-robot-metrics\">\r\n              ${metrics.map(([label, value]) => `<div class=\"fr-robot-metric\"><span>${escapeHtml(label)}</span><strong>${escapeHtml(value)}</strong></div>`).join(\"\")}\r\n            </div>\r\n          </section>\r\n\r\n          ${robotSeoArticle(robot, data)}\r\n\r\n          <section class=\"fr-robot-panel\">\r\n            <div class=\"fr-robot-section-header\">\r\n              <div>\r\n                <p class=\"fr-eyebrow\">Specifications</p>\r\n                <h2>Full ${escapeHtml(robot.name)} specification sheet</h2>\r\n                <p>Technical fields are separated by category so buyers, researchers, and search engines can compare robots field by field.</p>\r\n              </div>\r\n              <span>${Number(specSummary.Total || 0).toLocaleString()} spec fields</span>\r\n            </div>\r\n            ${renderSpecSections(robot)}\r\n          </section>\r\n\r\n          <section class=\"fr-robot-panel\">\r\n            <div class=\"fr-robot-section-header\">\r\n              <div>\r\n                <p class=\"fr-eyebrow\">Sources</p>\r\n                <h2>Source links, manuals, papers, and further reading</h2>\r\n                <p>Use these links to verify claims, inspect manufacturer pages, or continue deeper technical research.</p>\r\n              </div>\r\n            </div>\r\n            <div class=\"fr-robot-source-layout\">\r\n              <div><h3>Primary and supporting sources</h3>${linkCards(robot.sources, \"No source links are published for this robot yet.\")}</div>\r\n              <div><h3>Manuals and technical docs</h3>${linkCards(robot.manuals, \"No manuals are linked yet.\")}</div>\r\n              <div><h3>Papers and patents</h3>${linkCards(robot.papers, \"No papers or patents are linked yet.\")}</div>\r\n              <div><h3>Community and owner notes</h3>${linkCards(robot.communityMentions, \"No community notes are linked yet.\")}</div>\r\n            </div>\r\n          </section>\r\n        </div>`;\r\n      bindTabs(target);\r\n      return;\r\n    }\r\n    if (kind === \"manufacturer-profile\" || kind === \"manufacturers\") {\r\n      const slug = new URLSearchParams(location.search).get(\"manufacturer\");\r\n      const manufacturers = slug ? data.manufacturers.filter(m => m.slug === slug) : data.manufacturers;\r\n      const overview = slug && manufacturers[0] ? manufacturerSeoContent(manufacturers[0], data.robots) : `\r\n        <section class=\"fr-seo-article fr-card fr-section\">\r\n          <p class=\"fr-eyebrow\">Manufacturer Guide</p>\r\n          <h2>Robot manufacturers tracked by Firgelli Robots</h2>\r\n          <p>This manufacturer database connects companies to robot lineups, countries, public websites, focus areas, and source-backed robot profiles. Use it to move from a robot model to the company behind it.</p>\r\n        </section>`;\r\n      target.innerHTML = `${overview}<div class=\"fr-results-grid\">${manufacturers.map(m => `<article class=\"fr-tool-card\"><span class=\"fr-tool-card__icon\">${icon()}</span><strong>${escapeHtml(m.name)}</strong><p>${escapeHtml([m.country, m.focus, m.models].filter(Boolean).join(\" - \") || \"Manufacturer profile queued for enrichment.\")}</p><a href=\"/pages/manufacturer-profile?manufacturer=${encodeURIComponent(m.slug)}\">View Manufacturer -></a></article>`).join(\"\")}</div>`;\r\n      return;\r\n    }\r\n    if (kind === \"research\") {\r\n      const docs = [...data.research.papersPatents, ...data.research.manualsDocs, ...data.research.sources].slice(0, 80);\r\n      target.innerHTML = `${researchSeoContent(data)}<div class=\"fr-results-grid\">${docs.map(doc => `<article class=\"fr-tool-card\"><span class=\"fr-tool-card__icon\">${icon()}</span><strong>${escapeHtml(doc.title || doc.source_title || doc.document_type || \"Research source\")}</strong><p>${escapeHtml(doc.document_type || doc.source_type || doc.publisher || \"Source-backed research item\")}</p><a href=\"${escapeHtml(doc.url || doc.source_url)}\">Open Source -></a></article>`).join(\"\")}</div>`;\r\n      return;\r\n    }\r\n    if (kind === \"knowledge\") {\r\n      const term = new URLSearchParams(location.search).get(\"topic\") || \"\";\r\n      const knowledgeCards = [\r\n        [\"Price\", \"Estimated or verified robot purchase price, lease status, or quote requirement.\"],\r\n        [\"Height\", \"Physical robot height from manufacturer data or trusted source review.\"],\r\n        [\"Weight\", \"Robot mass including body, battery, and standard configuration where known.\"],\r\n        [\"DOF\", \"Degrees of freedom: the number of independently controlled motion axes.\"],\r\n        [\"Payload\", \"Rated carry or manipulation capacity, separated from body weight.\"],\r\n        [\"Runtime\", \"Expected battery operating time under stated workload.\"],\r\n        [\"Release Status\", \"Commercial availability, pilot status, prototype status, or announcement state.\"]\r\n      ];\r\n      const docs = [...data.research.sources, ...data.research.papersPatents].slice(0, 24);\r\n      target.innerHTML = `\r\n        <section class=\"fr-seo-article fr-card fr-section\">\r\n          <p class=\"fr-eyebrow\">Specification Guide</p>\r\n          <h2>${escapeHtml(term || \"Robot specifications\")} explained</h2>\r\n          <p>Specification pages explain what each robot attribute means, why it matters, how it is measured, and how to compare robots without over-trusting incomplete manufacturer claims.</p>\r\n          <div class=\"fr-seo-grid\">\r\n            <article><h3>Why it matters</h3><p>Specs like DOF, payload, runtime, price, sensors, LiDAR, SDK support, ROS support, and walking speed help separate practical capability from promotional claims.</p></article>\r\n            <article><h3>How to compare</h3><p>Use the same field across multiple robot profiles, then inspect source status and missing-data warnings. A known lower value is often more useful than an unknown or unsupported claim.</p></article>\r\n            <article><h3>Common misunderstanding</h3><p>One number rarely describes a whole robot. Runtime depends on task, payload depends on pose and safety margin, and price depends on configuration and support.</p></article>\r\n            <article><h3>Related tool</h3><p>Use the robot comparison page to view the same specification across multiple robots side by side.</p></article>\r\n          </div>\r\n        </section>\r\n        <div class=\"fr-results-grid\">\r\n          ${knowledgeCards.filter(([label]) => !term || label.toLowerCase().includes(term.toLowerCase())).map(([label, text]) => `<article class=\"fr-tool-card\"><span class=\"fr-tool-card__icon\">${icon()}</span><strong>${escapeHtml(label)}</strong><p>${escapeHtml(text)}</p><a href=\"/pages/robots\">Browse records -></a></article>`).join(\"\")}\r\n        </div>\r\n        <div class=\"fr-card fr-section\">\r\n          <p class=\"fr-eyebrow\">Trusted Source Feed</p>\r\n          <h2>Latest knowledge-brain sources</h2>\r\n          <div class=\"fr-results-grid\">${docs.map(doc => `<article class=\"fr-tool-card\"><strong>${escapeHtml(doc.source_title || doc.title || \"Source record\")}</strong><p>${escapeHtml(doc.source_type || doc.document_type || doc.publisher || \"Knowledge source\")}</p>${doc.url || doc.source_url ? `<a href=\"${escapeHtml(doc.url || doc.source_url)}\">Open source -></a>` : \"\"}</article>`).join(\"\")}</div>\r\n        </div>`;\r\n      return;\r\n    }\r\n    if (kind === \"news\") {\r\n      const latest = data.latestRobots.slice(0, 10);\r\n      const sources = data.research.sources.slice(0, 18);\r\n      target.innerHTML = `\r\n        <div class=\"fr-results-grid\">${latest.map(robot => `<article class=\"fr-robot-card\"><a href=\"${robotUrl(robot)}\">${image(robot)}</a><div><h3><a href=\"${robotUrl(robot)}\">${escapeHtml(robot.name)}</a></h3><dl><div><dt>Maker</dt><dd>${escapeHtml(robot.manufacturer || \"Unknown\")}</dd></div><div><dt>Status</dt><dd>${escapeHtml(robot.status || \"Review\")}</dd></div></dl><span class=\"${badgeClass(robot.status)}\">${escapeHtml(robot.category)}</span></div></article>`).join(\"\")}</div>\r\n        <div class=\"fr-card fr-section\">\r\n          <p class=\"fr-eyebrow\">Source-backed updates</p>\r\n          <h2>Recent source records</h2>\r\n          <div class=\"fr-results-grid\">${sources.map(doc => `<article class=\"fr-tool-card\"><strong>${escapeHtml(doc.source_title || \"Source update\")}</strong><p>${escapeHtml(doc.source_domain || doc.source_type || \"Knowledge source\")}</p>${doc.url ? `<a href=\"${escapeHtml(doc.url)}\">Open source -></a>` : \"\"}</article>`).join(\"\")}</div>\r\n        </div>`;\r\n      return;\r\n    }\r\n    if (kind === \"tools\") {\r\n      target.innerHTML = `${toolSeoContent(data)}<div id=\"robot-finder\" class=\"fr-results-grid\">${data.tools.map(tool => `<article class=\"fr-tool-card\"><span class=\"fr-tool-card__icon\">${icon()}</span><strong>${escapeHtml(tool.title)}</strong><p>${escapeHtml(tool.description)}</p><a href=\"${escapeHtml(tool.url)}\">${escapeHtml(tool.cta)} -></a></article>`).join(\"\")}</div>`;\r\n      return;\r\n    }\r\n    if (kind === \"developers\") {\r\n      const developerRobots = data.robots.filter(robot => String(robot.summary || robot.useCase || robot.category).toLowerCase().includes(\"research\") || robot.flags.research).slice(0, 40);\r\n      target.innerHTML = `<div class=\"fr-results-grid\">${developerRobots.map(robot => `<article class=\"fr-robot-card\"><a href=\"${robotUrl(robot)}\">${image(robot)}</a><div><h3><a href=\"${robotUrl(robot)}\">${escapeHtml(robot.name)}</a></h3><dl><div><dt>Maker</dt><dd>${escapeHtml(robot.manufacturer || \"Unknown\")}</dd></div><div><dt>Use</dt><dd>${escapeHtml(robot.useCase || robot.category || \"Research platform\")}</dd></div></dl><span class=\"${badgeClass(robot.status)}\">${escapeHtml(robot.status || \"Review\")}</span></div></article>`).join(\"\")}</div>`;\r\n      return;\r\n    }\r\n    if (kind === \"marketplace\") {\r\n      const marketplaceRobots = data.robots.filter(robot => robot.flags.consumer || robot.flags.enterprise || robot.flags.industrial || robot.flags.humanoid).slice(0, 40);\r\n      target.innerHTML = `<div class=\"fr-card fr-section\"><p class=\"fr-eyebrow\">Marketplace Foundation</p><h2>Robots ready for future commerce mapping</h2><p>These public robot profiles can later connect to accessories, skills, compatible parts, service plans, and quote flows as the marketplace grows.</p></div><div class=\"fr-results-grid\">${marketplaceRobots.map(robot => `<article class=\"fr-robot-card\"><a href=\"${robotUrl(robot)}\">${image(robot)}</a><div><h3><a href=\"${robotUrl(robot)}\">${escapeHtml(robot.name)}</a></h3><dl><div><dt>Maker</dt><dd>${escapeHtml(robot.manufacturer || \"Unknown\")}</dd></div><div><dt>Price</dt><dd>${escapeHtml(robot.price || \"Quote\")}</dd></div></dl><span class=\"${badgeClass(robot.status)}\">${escapeHtml(robot.status || \"Review\")}</span></div></article>`).join(\"\")}</div>`;\r\n      return;\r\n    }\r\n    if (kind === \"community\") {\r\n      const mentions = (data.community || []).slice(0, 80);\r\n      target.innerHTML = `<div class=\"fr-results-grid\">${mentions.map(item => `<article class=\"fr-tool-card\"><span class=\"fr-tool-card__icon\">${icon()}</span><strong>${escapeHtml(item.title || \"Community review item\")}</strong><p>${escapeHtml(item.notes || item.claim_summary || item.mention_type || \"Queued for manual community review.\")}</p>${item.url ? `<a href=\"${escapeHtml(item.url)}\">Open mention -></a>` : `<a href=\"/pages/robots\">Open database -></a>`}</article>`).join(\"\")}</div>`;\r\n      return;\r\n    }\r\n    if (kind === \"about\" || kind === \"editorial-policy\" || kind === \"contact\") {\r\n      const body = {\r\n        \"about\": [\"A database-first robotics intelligence platform\", `Firgelli Robots is organized around ${data.stats.robots} robot records, ${data.stats.manufacturers} manufacturers, ${data.stats.sources} source records, and ${data.stats.papersPatents} papers/patents for robot buyers, researchers, and builders.`],\r\n        \"editorial-policy\": [\"Editorial and source policy\", \"Robot specifications, manufacturer claims, images, videos, patents, papers, and community notes are separated by source type. Unverified fields stay marked as unknown until reviewed.\"],\r\n        \"contact\": [\"Contact Firgelli Robots\", \"Use this development page as the future intake point for data corrections, manufacturer submissions, marketplace partnerships, and robotics research requests.\"]\r\n      }[kind];\r\n      target.innerHTML = `<div class=\"fr-card fr-section\"><p class=\"fr-eyebrow\">${escapeHtml(body[0])}</p><h2>${escapeHtml(body[0])}</h2><p>${escapeHtml(body[1])}</p><p><a class=\"fr-button\" href=\"/pages/robots\">Explore Database</a> <a class=\"fr-button fr-button--secondary\" href=\"/pages/research\">Review Sources</a></p></div>`;\r\n      return;\r\n    }\r\n    const robots = filteredRobots(data).slice(0, kind === \"compare\" ? 4 : 60);\r\n    if (kind === \"compare\") {\r\n      const rows = [[\"Price\", \"price\"], [\"Height\", \"height\"], [\"Weight\", \"weight\"], [\"DOF\", \"dof\"], [\"Payload\", \"payload\"], [\"Runtime\", \"runtime\"], [\"Movement\", \"movement\"], [\"Status\", \"status\"]];\r\n      const addSlug = new URLSearchParams(location.search).get(\"add\");\r\n      const compareRobots = addSlug ? [data.robots.find(r => r.slug === addSlug), ...robots.filter(r => r.slug !== addSlug)].filter(Boolean).slice(0, 4) : robots;\r\n      target.innerHTML = `<div class=\"fr-table-wrap\"><table class=\"fr-compare-table\"><thead><tr><th></th>${compareRobots.map(r => `<th>${image(r)}<br>${escapeHtml(r.name)}</th>`).join(\"\")}</tr></thead><tbody>${rows.map(([label, key]) => `<tr><td>${label}</td>${compareRobots.map(r => `<td>${escapeHtml(r[key] || \"Unknown\")}</td>`).join(\"\")}</tr>`).join(\"\")}</tbody></table></div>${comparisonSeoContent(compareRobots)}`;\r\n    } else {\r\n      const seoLead = kind === \"category\" ? categorySeoContent(kind, data, robots) : \"\";\r\n      target.innerHTML = `${seoLead}<div class=\"fr-results-grid\">${robots.map(robot => `<article class=\"fr-robot-card\"><a href=\"${robotUrl(robot)}\">${image(robot)}</a><div><h3><a href=\"${robotUrl(robot)}\">${escapeHtml(robot.name)}</a></h3><dl><div><dt>Maker</dt><dd>${escapeHtml(robot.manufacturer || \"Unknown\")}</dd></div><div><dt>Status</dt><dd>${escapeHtml(robot.status || \"Review\")}</dd></div><div><dt>Height</dt><dd>${escapeHtml(robot.height || \"Unknown\")}</dd></div></dl><span class=\"${badgeClass(robot.status)}\">${escapeHtml(robot.category)}</span></div></article>`).join(\"\")}</div>`;\r\n    }\r\n  }\r\n\r\n  function bindPageFilters(kind, data) {\r\n    document.querySelectorAll(\"[data-fr-filter-search], [data-fr-filter-category], [data-fr-filter-status]\").forEach((control) => {\r\n      control.addEventListener(\"input\", () => renderPageResults(kind, data));\r\n      control.addEventListener(\"change\", () => renderPageResults(kind, data));\r\n    });\r\n  }\r\n\r\n  async function initHome(root) {\r\n    assetBase = root.dataset.assetBase || assetBase;\r\n    const data = await loadData(root);\r\n    renderHero(data);\r\n    renderFeaturedTable(data);\r\n    bindFeaturedTableScroll();\r\n    renderCategories(data);\r\n    renderStats(data);\r\n    renderLatest(data);\r\n    renderViewShowcase(data);\r\n    renderTools(data);\r\n    renderManufacturerMarquee(data);\r\n  }\r\n\r\n  async function initPage(root) {\r\n    assetBase = root.dataset.assetBase || assetBase;\r\n    const data = await loadData(root);\r\n    const kind = resolvePageKind(root);\r\n    applyPageMeta(root, kind);\r\n    renderControls(kind, data);\r\n    renderPageResults(kind, data);\r\n    bindPageFilters(kind, data);\r\n  }\r\n\r\n  function bindNav() {\r\n    const button = document.querySelector(\"[data-fr-menu]\");\r\n    const nav = document.querySelector(\"[data-fr-mobile-nav]\");\r\n    if (!button || !nav) return;\r\n    button.addEventListener(\"click\", () => {\r\n      const open = nav.classList.toggle(\"is-open\");\r\n      button.setAttribute(\"aria-expanded\", String(open));\r\n    });\r\n  }\r\n\r\n  document.addEventListener(\"DOMContentLoaded\", () => {\r\n    bindNav();\r\n    document.querySelectorAll(\"[data-fr-home]\").forEach(initHome);\r\n    document.querySelectorAll(\"[data-fr-page-kind]\").forEach(initPage);\r\n  });\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
