{"id":92,"date":"2025-11-03T05:47:43","date_gmt":"2025-11-03T05:47:43","guid":{"rendered":"https:\/\/brartool.com\/?page_id=92"},"modified":"2025-11-04T19:42:55","modified_gmt":"2025-11-04T19:42:55","slug":"products","status":"publish","type":"page","link":"https:\/\/brartool.com\/index.php\/products\/","title":{"rendered":"Products"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"92\" class=\"elementor elementor-92\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7c6eae1 e-flex e-con-boxed e-con e-parent\" data-id=\"7c6eae1\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-c233750 e-con-full e-flex e-con e-child\" data-id=\"c233750\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-71400d9 elementor-widget elementor-widget-image\" data-id=\"71400d9\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"741\" height=\"119\" src=\"https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/BRAR-TOOL-copy.png\" class=\"attachment-large size-large wp-image-210\" alt=\"\" srcset=\"https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/BRAR-TOOL-copy.png 741w, https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/BRAR-TOOL-copy-300x48.png 300w\" sizes=\"(max-width: 741px) 100vw, 741px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0073756 e-con-full e-flex e-con e-child\" data-id=\"0073756\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c3bd6b6 elementor-icon-list--layout-inline elementor-align-right elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"c3bd6b6\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-inline-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-phone-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">List Item #1<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-envelope\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">brartool@gmail.com<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9202277 e-flex e-con-boxed e-con e-parent\" data-id=\"9202277\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-725c71f hfe-nav-menu__align-center hfe-submenu-icon-arrow hfe-submenu-animation-none hfe-link-redirect-child hfe-nav-menu__breakpoint-tablet elementor-widget elementor-widget-navigation-menu\" data-id=\"725c71f\" data-element_type=\"widget\" data-settings=\"{&quot;padding_horizontal_menu_item&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:15,&quot;sizes&quot;:[]},&quot;padding_horizontal_menu_item_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_horizontal_menu_item_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_vertical_menu_item&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:15,&quot;sizes&quot;:[]},&quot;padding_vertical_menu_item_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_vertical_menu_item_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;menu_space_between&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;menu_space_between_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;menu_space_between_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;menu_row_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;menu_row_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;menu_row_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;dropdown_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;dropdown_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;dropdown_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;width_dropdown_item&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;220&quot;,&quot;sizes&quot;:[]},&quot;width_dropdown_item_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;width_dropdown_item_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_horizontal_dropdown_item&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_horizontal_dropdown_item_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_horizontal_dropdown_item_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_vertical_dropdown_item&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:15,&quot;sizes&quot;:[]},&quot;padding_vertical_dropdown_item_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;padding_vertical_dropdown_item_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;distance_from_menu&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;distance_from_menu_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;distance_from_menu_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_size&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_size_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_size_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_border_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_border_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_border_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;toggle_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"navigation-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"hfe-nav-menu hfe-layout-horizontal hfe-nav-menu-layout horizontal hfe-pointer__none\" data-layout=\"horizontal\">\n\t\t\t\t<div role=\"button\" class=\"hfe-nav-menu__toggle elementor-clickable\" tabindex=\"0\" aria-label=\"Menu Toggle\">\n\t\t\t\t\t<span class=\"screen-reader-text\">Menu<\/span>\n\t\t\t\t\t<div class=\"hfe-nav-menu-icon\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\"  class=\"e-font-icon-svg e-fas-align-justify\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<nav class=\"hfe-nav-menu__layout-horizontal hfe-nav-menu__submenu-arrow\" data-toggle-icon=\"&lt;svg aria-hidden=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;e-font-icon-svg e-fas-align-justify&quot; viewBox=&quot;0 0 448 512&quot; xmlns=&quot;http:\/\/www.w3.org\/2000\/svg&quot;&gt;&lt;path d=&quot;M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z&quot;&gt;&lt;\/path&gt;&lt;\/svg&gt;\" data-close-icon=\"&lt;svg aria-hidden=&quot;true&quot; tabindex=&quot;0&quot; class=&quot;e-font-icon-svg e-far-window-close&quot; viewBox=&quot;0 0 512 512&quot; xmlns=&quot;http:\/\/www.w3.org\/2000\/svg&quot;&gt;&lt;path d=&quot;M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z&quot;&gt;&lt;\/path&gt;&lt;\/svg&gt;\" data-full-width=\"yes\">\n\t\t\t\t\t<ul id=\"menu-1-725c71f\" class=\"hfe-nav-menu\"><li id=\"menu-item-209\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-home parent hfe-creative-menu\"><a href=\"https:\/\/brartool.com\/\" class = \"hfe-menu-item\">Home<\/a><\/li>\n<li id=\"menu-item-230\" class=\"menu-item menu-item-type-post_type menu-item-object-page parent hfe-creative-menu\"><a href=\"https:\/\/brartool.com\/index.php\/about-us\/\" class = \"hfe-menu-item\">About Us<\/a><\/li>\n<li id=\"menu-item-208\" class=\"menu-item menu-item-type-post_type menu-item-object-page parent hfe-creative-menu\"><a href=\"https:\/\/brartool.com\/index.php\/products\/\" class = \"hfe-menu-item\">Products<\/a><\/li>\n<li id=\"menu-item-334\" class=\"menu-item menu-item-type-post_type menu-item-object-page parent hfe-creative-menu\"><a href=\"https:\/\/brartool.com\/index.php\/certifications\/\" class = \"hfe-menu-item\">Certifications<\/a><\/li>\n<li id=\"menu-item-236\" class=\"menu-item menu-item-type-post_type menu-item-object-page parent hfe-creative-menu\"><a href=\"https:\/\/brartool.com\/index.php\/contact-us\/\" class = \"hfe-menu-item\">Contact Us<\/a><\/li>\n<\/ul> \n\t\t\t\t<\/nav>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-061cfa5 e-flex e-con-boxed e-con e-parent\" data-id=\"061cfa5\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d801dad elementor-widget elementor-widget-html\" data-id=\"d801dad\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"en\">\r\n<head>\r\n\r\n<style>\r\n  :root{\r\n    --bg:#f6f8fa;\r\n    --card:#ffffff;\r\n    --muted:#6b7280;\r\n    --accent:#0f766e;\r\n    --border:#dedede;\r\n  \r\n  }\r\n  html,body{margin:0;padding:0;background:var(--bg);font-family:Inter, system-ui, Arial, sans-serif;color:#111;}\r\n  .wrap{max-width:var(--maxw);margin:32px auto;padding:24px;}\r\n  header{display:flex;align-items:center;gap:16px;margin-bottom:18px;}\r\n  header img{height:54px;}\r\n  header h1{margin:0;font-size:20px;color:var(--accent);}\r\n  .controls{margin:18px 0;display:flex;gap:12px;align-items:center;flex-wrap:wrap;}\r\n  .controls input[type=\"search\"]{padding:10px 12px;border:1px solid var(--border);border-radius:6px;min-width:260px;}\r\n  .controls select, .controls button{padding:10px 12px;border-radius:6px;border:1px solid var(--border);background:#fff;}\r\n  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;margin-top:18px;}\r\n  .card{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:10px;min-height:270px;box-shadow:0 6px 18px rgba(10,10,10,0.04);}\r\n  .thumb{height:140px;border-radius:6px;background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid #eee;}\r\n  .thumb img{max-width:100%;max-height:100%;object-fit:contain;display:block;}\r\n  .meta{font-size:14px;}\r\n  .code{font-weight:700;color:#111;margin-bottom:6px;}\r\n  .item{font-weight:600;margin-bottom:4px;}\r\n  .oe{color:var(--muted);font-size:13px;}\r\n  .placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#999;font-size:13px;}\r\n  \/* small admin textarea for quick remap *\/\r\n  .editor{margin-top:22px;background:#fff;border:1px dashed var(--border);padding:12px;border-radius:8px;}\r\n  .editor textarea{width:100%;height:220px;border:0;padding:12px;font-family:monospace;font-size:13px;resize:vertical;}\r\n  .editor .hint{font-size:13px;color:var(--muted);margin-bottom:8px;}\r\n  footer{margin-top:18px;font-size:13px;color:var(--muted);}\r\n  @media (max-width:700px){\r\n    .thumb{height:120px;}\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n  <div class=\"wrap\">\r\n    <header>\r\n      <img decoding=\"async\" src=\"https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/anchor-hood-latch.png\" alt=\"logo\">\r\n      <div>\r\n        <h1>Brar Tool \u2014 Product Catalog<\/h1>\r\n        <div style=\"color:var(--muted);font-size:13px\">Automatically generated product page \u2014 edit CSV below to fix mappings<\/div>\r\n      <\/div>\r\n    <\/header>\r\n\r\n    <div class=\"controls\">\r\n      <input id=\"search\" type=\"search\" placeholder=\"Search code \/ item name (try 'BT00123' or 'wheel')\" \/>\r\n      <select id=\"filterCategory\">\r\n        <option value=\"\">All<\/option>\r\n      <\/select>\r\n      <button id=\"applySearch\">Search<\/button>\r\n      <button id=\"reset\">Reset<\/button>\r\n    <\/div>\r\n\r\n    <div id=\"grid\" class=\"grid\" aria-live=\"polite\"><\/div>\r\n\r\n    \r\n\r\n    \r\n  <\/div>\r\n\r\n<script>\r\n\/* ---------- default CSV extracted from your doc (you can edit) ---------- *\/\r\n\/* Format per line:\r\n   CODE | ITEM | OE\/REF | optional: image_filename\r\n*\/\r\nconst defaultCSV = `BT00001 | EXHAUST MOUNT | O.E. NO : M13-1009 | exhaustmount.png\r\nBT00067 | FREIGHT LINER BUSH | O.E. NO : 16-18035-000, 681325-0150\r\nBT00002 | FILL CAP | O.E. NO : T3188 | fillcap.png\r\nBT00068 | BRASS BUSH 1-5\/8\\\"X1-1\/4\\\"X4\\\" | O.E. NO. : 16-01005-002, A1601005002 | brass-bush.png\r\nBT00069 | TORQUE ARM BOLT | O. E. NO. : UXA-000016\r\nBT00070 | EQUALIZER BOLT | O. E. NO. : UXA0015-001\r\nBT00003 | BUSH SMALL | O. E. NO. : UXA000011 | bushsmall.png\r\nBT00071 | ALIGNMENT CONCENTRIC WASHER | REF NO. : C209024, MHS97\r\nBT00072 | ALIGNMENT ECCENTRIC WASHER | REF NO. : C20925, MHS99\r\nBT00004 | TURNER AIRSPRING SPACER (SMALL) | O.E. NO : B225101, S225101 | turner-airspring.png\r\nBT00006 | TURNER AIRSPRING SPACER (BIG) | O.E. NO. : B225103 | turner-airspring-big.png\r\nBT00007 | PLASTIC AIR SPRING SPACER | O.E. NO : B-22510-2 | plastic-air-spring-spinner.png\r\nBT00008 | PLASTIC AIR SPRING SPACER | REF NO. : HE10BG | plastic-air-spring-spinner.png\r\nBT00009 | EQUALIZER BUSHING | O. E. NO. : 16146-01, 18723-01 | plastic-air-spring-spinner.png\r\nBT00010 | RUBBER EQUALIZER BUSHING | O. E. NO. : 7010-00\r\nBT00103 | WEAR PAD | O. E. NO. : 571960C1, ABP\/N3271501\r\nBT00104 | MOUNTING | O.E. NO. : K179-450, 25QM-31\r\nBT00105 | SPACER BLOCK | O.E. NO. : 13QK246\r\nBT00011 | HOOK \u2013 HOOD | OE NO. : 29-00322\r\nBT00012 | ANCHOR HOOD LATCH | O.E. NO : L03-6005\r\nBT00013 | LATCH ASSY. HOOD 567 | OE NO. : L56-6044B\r\nBT00005 | TORQUE BUSH | \r\nBT00106 | RUBBER BUSHING | O.E. NO. : 1609501, 010606\r\nBT00107 | CLAMP | O. E. NO. : 32-29-1\r\nBT00108 | PLATE | O. E. NO. : 32-SP20 | palte.png\r\nBT00109 | CLAMP | \r\nBT00110 | BUSH | O. E. NO. : 31ECB | bush2.png\r\n\r\n\r\nBT00014 | DUST CAP | REF. NO. : 55-85-1\r\nBT00111 | SHACKLE BOLT 7\/8 | REF NO. : RT-3158 |shackle-bolt.png\r\nBT00112 | HANGER | REF NO. : RT-3064\r\nBT00113 | EQUALIZER HANGER | REF NO. : RT-3084, EQ-E1\r\nBT00015 | HUB CAP | REF NO. : 7139\r\nBT00114 | U. BOLT F\/R 1\/2\u201dX62X140 | REF NO. : UBR220 | U-bolt.png\r\nBT00016 | 9-10K OIL CAP | REF NO. : 7174 | oil-cap.png\r\nBT00017 | OIL CAP PLUG | REF NO. : 4632PTP | oil-cap-plu.png\r\nBT00095 | ENGINE MOUNT | REF NO. : TM99-63506\r\nBT00115 | ROLLER PIN 34.9X57.5X19.3 | REF NO.: R015, E-781, 101.2073, 01-201 | roller-pin.png\r\nBT00116 | BRACKET LEFT & RIGHT | REF. NO. : E-6107\r\nBT00117 | BOTTOM PLATE | REF. NO. : E-6444\r\nBT00118 | NUT L & R GOLDEN | REF NO. : E5977, 201.2003, M-126, WA07-5022\r\nBT00119 | SLEEVE | REF NO. : E7896, 201.1002 , M-130 , M-131\r\nBT00120 | REVOLVING NUT | REF NO. : E6000, 201.3014 | revolving-unit.png\r\nBT00121 | C. BOLT (1\/2x6) | REF NO. : MCB640, E-3181, M-2980 | c.bolt_.png\r\nBT00122 | C. BOLT (1\/2x8) | REF NO. : MCB675, E-3193, M-2981 | c.bolt_.png\r\nBT00123 | WHEEL CLAMP | REF NO. : R123, 203.2013, E-5571A, M-3\r\nBT00124 | TIE ROD END | REF NO. : ES431L , 310-229\r\nBT00125 | SLEEVE BIG | O.E. NO. : 898376R1\r\nBT00126 | NUT (M22XM33) | O.E. NO. : NCM2233C | nut.png\r\nBT00018 | ISOLATOR NUT |\r\nBT00019 | ISOLATOR NUT |\r\nBT00127 | HUB BOLT (22X1.5X95) | REF NO. : 13-1579, M-3665, E-8988 | hub-bolt.png\r\nBT00020 | 5th WHEEL 39\u201d CHROME PIN PULLER | REF NO. : M-4525 | 5thwheel39.png\r\nBT00021 | 5th WHEEL 33\u201d CHROME PIN PULLER | REF NO. : M-4524 | 5thwheel33.png\r\nBT00024 | FILL CAP |REF NO. :| fillcap.png\r\nBT00025 | RETAINER |\r\nBT00023 | LEVELLING VALVE ROD | REF NO. : S-22748,MSRK9692 | levellingvalve.png\r\nBT00128 | HOOD SPRING |REF NO. :| hoodspring.png\r\nBT00129 | LANDING GEAR SHOE AXLE ASSY. | REF NO. : M-4127 | landinggearshoe.png\r\nBT00130 | LANDING GEAR CRANK HANDLE 11\" VERTICAL | REF NO. : M-4127 | landingearcrankhandle.png\r\nBT00131 | PIN, BUSHING & COLLAR KIT FIFTH WHEEL | REF NO. : 096942 | pin-bushingandcollarkit.png\r\nBT00022 | CONTROL ROD - LEVELING VALVE | Ref.No.: | control-rod-leveling-valce.png\r\nBT00026 | TUBE PLATE WITH CAP | O.E. NO : T3152T3153A\r\nBT00027 | FILL CAP | REF NO : Q347367 | fillcap2.png\r\nBT00028 | FLANGE | REF NO. : 29582\r\nBT00029 | BUSHING | REF NO. : 52504\r\nBT00030 | BUSHING | REF NO. : 62255\r\nBT00031 | PVC GRIP | O. E. NO. : 6702621 | pvcgrip.png\r\nBT00032 | RUBBER GRIP OLD STYLE | O. E. NO. : 6513963 | rubbergripoldstyle.png\r\nBT00033 | PVC DIP MOULDING GRIP | O. E. NO. : 6564452\r\nBT00132 | DRIVE BELT | REF NO. : 6736775\r\nBT00133 | DRIVE BELT | REF NO. : 6660994\r\nBT00134 | PIN | REF NO. : 7252989\r\nBT00135 | ALLEN BOLT | REF NO. : 7255136 | allenbolt.png\r\n`;\r\n\r\n\/* ---------- utility helpers ---------- *\/\r\nfunction slugify(s){\r\n  return s.toString().toLowerCase()\r\n    .replace(\/[^a-z0-9]+\/g,'-')\r\n    .replace(\/(^-|-$)\/g,'');\r\n}\r\n\r\n\/* attempt to find image path:\r\n   1) if product line specified image_filename -> use it\r\n   2) try common slugs derived from item name (several variants)\r\n   3) fallback placeholder\r\n*\/\r\nconst IMAGE_BASE = 'https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/';\r\n\r\nfunction possibleNames(itemName){\r\n  const base = slugify(itemName);\r\n  const variations = [\r\n    base + '.png',\r\n    base + '.jpg',\r\n    base + '.jpeg',\r\n    base.replace(\/-\/g,'_') + '.png',\r\n    base.replace(\/-\/g,'_') + '.jpg',\r\n    base.replace(\/-\/g,'_') + '.jpeg',\r\n    base.replace(\/[^a-z0-9]\/g,'') + '.png',\r\n    base.replace(\/[^a-z0-9]\/g,'') + '.jpg'\r\n  ];\r\n  \/\/ Some common manual mappings (based on filenames you uploaded). Add more here if needed.\r\n  const manual = {\r\n      'Exhaust Mount':'exhaustmount.png',\r\n    'wheel-clamp':'wheel-clamp.png',\r\n    'turner-airspring-big':'turner-airspring-big.png',\r\n    'wear-pad':'wear-pad.png',\r\n    'u-bolt':'U-bolt.png',\r\n    'tube-plate-with-cap':'tube-plate-with-cap.png',\r\n    'turner-airspring':'turner-airspring.png',\r\n    'torque-arm-bolt':'torque-arm-bolt.png',\r\n    'torque-bush':'torque-bush.png',\r\n    'tie-rod-end':'tie-rod-end.png',\r\n    'spacer-block':'spacer-block.png',\r\n    'sleeve-big':'sleeve-big.png',\r\n    'sleeve':'sleeve.png',\r\n    'shackle-bolt':'shackle-bolt.png',\r\n    'rubbergripoldstyle':'rubbergripoldstyle.png',\r\n    'roller-pin':'roller-pin.png',\r\n    'rubber-equalizer-bushing':'rubber-equalizer-bushing.png',\r\n    'rubber-bushing':'rubber-bushing.png',\r\n    'retainer':'retainer.png',\r\n    'revolving-unit':'revolving-unit.png',\r\n    'pvcgrip':'pvcgrip.png',\r\n    'pvc-dip-moulding-grip':'pvc-dip-moulding-grip.png',\r\n    'plastic-air-spring-spinner':'plastic-air-spring-spinner.png',\r\n    'pin-bushingandcollarkit':'pin-bushingandcollarkit.png',\r\n    'pin':'pin.png',\r\n    'palte':'palte.png',\r\n    'oil-cap-plu':'oil-cap-plu.png',\r\n    'oil-cap':'oil-cap.png',\r\n    'nut-l-r-golden':'nut-l-r-golden.png',\r\n    'mounting':'mounting.png',\r\n    'nut':'nut.png',\r\n    'landinggearshoe':'landinggearshoe.png',\r\n    'latch-assy-hood-567':'latch-assy-hood-567.png',\r\n    'levellingvalve':'levellingvalve.png',\r\n    'isolator-nut':'isolator-nut.png',\r\n    'isolatornut2':'isolatornut2.png',\r\n    'landingearcrankhandle':'landingearcrankhandle.png',\r\n    'hub-cap':'hub-cap.png',\r\n    'hub-bolt':'hub-bolt.png',\r\n    'hook-hood':'hook-hood.png',\r\n    'hoodspring':'hoodspring.png',\r\n    'hanger':'hanger.png',\r\n    'freight-liner-bush':'freight-liner-bush.png',\r\n    'flange':'flange.png',\r\n    'fillcup':'fillcup.png',\r\n    'fillcap2':'fillcap2.png',\r\n    'exhaustmount':'exhaustmount.png',\r\n    'fillcap':'fillcap.png',\r\n    'equalizer-hanger':'equalizer-hanger.png',\r\n    'equalizer-bolt':'equalizer-bolt.png',\r\n    'engine-mount':'engine-mount.png',\r\n    'drive-belt':'drive-belt.png',\r\n    'dust-cap':'dust-cap.png',\r\n    'control-rod-leveling-valce':'control-rod-leveling-valce.png',\r\n    'clamp2':'clamp2.png',\r\n    'clamp':'clamp.png',\r\n    'bushing':'bushing.png',\r\n    'bushsmall':'bushsmall.png',\r\n    'c-bolt_':'c.bolt_.png',\r\n    'brass-bush':'brass-bush.png',\r\n    'bottom-plate':'bottom-plate.png',\r\n    'anchor-hood-latch':'anchor-hood-latch.png',\r\n    'allenbolt':'allenbolt.png',\r\n    'alignment-eccentric-washer':'alignment-eccentric-washer.png',\r\n    'alignment-concentric-washer':'alignment-concentric-washer.png',\r\n    '5thwheel39':'5thwheel39.png',\r\n    '5thwheel33':'5thwheel33.png'\r\n  };\r\n  const key = base;\r\n  if(manual[key]) return [manual[key], ...variations];\r\n  return variations;\r\n}\r\n\r\n\/* parse CSV textarea -> product array *\/\r\nfunction parseCSV(text){\r\n  const lines = text.split(\/\\r?\\n\/).map(l=>l.trim()).filter(Boolean);\r\n  const products = lines.map(line=>{\r\n    \/\/ allow optional 4th field \"image_filename\"\r\n    const parts = line.split('|').map(p=>p.trim());\r\n    const code = parts[0] || '';\r\n    const name = parts[1] || '';\r\n    const oe = parts[2] || '';\r\n    let image_filename = '';\r\n    if(parts.length >=4){\r\n      image_filename = parts.slice(3).join('|').trim(); \/\/ allow pipes in filename or extra notes\r\n    } else {\r\n      \/\/ sometimes user included \"image_filename: xyz\" style in CSV (from default list) \u2014 handle that\r\n      const m = oe.match(\/image_filename\\s*:\\s*(\\S+)\/i);\r\n      if(m) { image_filename = m[1]; }\r\n    }\r\n    return { code, name, oe, image_filename };\r\n  });\r\n  return products;\r\n}\r\n\r\n\/* attempt to resolve an image URL for a product *\/\r\nfunction resolveImageURL(product){\r\n  if(product.image_filename && product.image_filename.length){\r\n    \/\/ if user provided full URL, use it; else attach base\r\n    if(\/^https?:\\\/\\\/\/i.test(product.image_filename)) return product.image_filename;\r\n    return IMAGE_BASE + product.image_filename;\r\n  }\r\n  const tries = possibleNames(product.name);\r\n  for(const fn of tries){\r\n    \/\/ we won't check server existence (CORS), just assume filename exists.\r\n    \/\/ but we will set first candidate to let user spot missing items via \"Show missing\"\r\n    return IMAGE_BASE + fn;\r\n  }\r\n  \/\/ fallback placeholder\r\n  return '';\r\n}\r\n\r\n\/* render grid *\/\r\nfunction renderGrid(products, filterText=''){\r\n  const grid = document.getElementById('grid');\r\n  grid.innerHTML = '';\r\n  const q = filterText.trim().toLowerCase();\r\n  let visible = 0;\r\n  for(const p of products){\r\n    if(q){\r\n      const hay = (p.code + ' ' + p.name + ' ' + p.oe).toLowerCase();\r\n      if(!hay.includes(q)) continue;\r\n    }\r\n    visible++;\r\n    const div = document.createElement('div');\r\n    div.className = 'card';\r\n    const imgWrap = document.createElement('div');\r\n    imgWrap.className = 'thumb';\r\n    const img = document.createElement('img');\r\n    const url = resolveImageURL(p);\r\n    if(url){\r\n      img.src = url;\r\n      img.alt = p.name;\r\n      img.onerror = function(){ this.style.display='none'; imgWrap.innerHTML = '<div class=\"placeholder\">No image<\/div>'; };\r\n      imgWrap.appendChild(img);\r\n    } else {\r\n      imgWrap.innerHTML = '<div class=\"placeholder\">No image<\/div>';\r\n    }\r\n    div.appendChild(imgWrap);\r\n    const meta = document.createElement('div');\r\n    meta.className = 'meta';\r\n    const code = document.createElement('div'); code.className='code'; code.textContent = 'CODE  :  ' + p.code;\r\n    const item = document.createElement('div'); item.className='item'; item.textContent = 'ITEM  :  ' + p.name;\r\n    const oe = document.createElement('div'); oe.className='oe'; oe.textContent = p.oe;\r\n    meta.appendChild(code); meta.appendChild(item); meta.appendChild(oe);\r\n    div.appendChild(meta);\r\n    grid.appendChild(div);\r\n  }\r\n  if(visible === 0){\r\n    grid.innerHTML = '<div style=\"grid-column:1\/-1;padding:20px;background:#fff;border:1px solid var(--border);border-radius:8px;color:var(--muted)\">No products match your search.<\/div>';\r\n  }\r\n}\r\n\r\n\/* initial bootstrap *\/\r\nconst textarea = document.getElementById('rawdata');\r\ntextarea.value = defaultCSV.trim();\r\n\r\nlet products = parseCSV(textarea.value);\r\nrenderGrid(products);\r\n\r\n\/* events *\/\r\ndocument.getElementById('render').addEventListener('click', ()=>{\r\n  products = parseCSV(textarea.value);\r\n  renderGrid(products, document.getElementById('search').value);\r\n});\r\ndocument.getElementById('applySearch').addEventListener('click', ()=>{\r\n  renderGrid(products, document.getElementById('search').value);\r\n});\r\ndocument.getElementById('reset').addEventListener('click', ()=>{\r\n  document.getElementById('search').value = '';\r\n  products = parseCSV(textarea.value);\r\n  renderGrid(products);\r\n});\r\ndocument.getElementById('downloadCSV').addEventListener('click', ()=>{\r\n  const blob = new Blob([textarea.value], {type:'text\/plain'});\r\n  const a = document.createElement('a');\r\n  a.href = URL.createObjectURL(blob);\r\n  a.download = 'brar_products.csv';\r\n  a.click();\r\n  URL.revokeObjectURL(a.href);\r\n});\r\ndocument.getElementById('showMissing').addEventListener('click', ()=>{\r\n  const missing = products.filter(p=>{\r\n    const url = resolveImageURL(p);\r\n    \/\/ heuristic: if returned filename contains 'noimage' or blank, treat missing.\r\n    return !url || url.endsWith('undefined') || url.endsWith('null') || url.indexOf('.png')===-1 && url.indexOf('.jpg')===-1 && url.indexOf('.jpeg')===-1;\r\n  });\r\n  if(missing.length === 0) alert('All products have an image filename candidate.');\r\n  else {\r\n    alert('Missing image candidates for ' + missing.length + ' products. Edit CSV to add image filename per line.');\r\n    console.log('missing candidates:', missing);\r\n  }\r\n});\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d0406a8 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"d0406a8\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-78137d5 elementor-widget elementor-widget-html\" data-id=\"78137d5\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  :root{\r\n    --bg:#f6f8fa;\r\n    --card:#ffffff;\r\n    --muted:#6b7280;\r\n    --accent:#0f766e;\r\n    --border:#dedede;\r\n    --maxw:1100px;\r\n  }\r\n  .brar-wrap{max-width:var(--maxw);margin:32px auto;padding:24px;background:var(--bg);font-family:Inter, system-ui, Arial, sans-serif;color:#111;}\r\n  .brar-header{display:flex;align-items:center;gap:16px;margin-bottom:18px;}\r\n  .brar-header img{height:54px;}\r\n  .brar-header h1{margin:0;font-size:20px;color:var(--accent);}\r\n  .controls{margin:18px 0;display:flex;gap:12px;align-items:center;flex-wrap:wrap;}\r\n  .controls input[type=\"search\"]{padding:10px 12px;border:1px solid var(--border);border-radius:6px;min-width:260px;}\r\n  .controls select, .controls button{padding:10px 12px;border-radius:6px;border:1px solid var(--border);background:#fff;}\r\n  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;margin-top:18px;}\r\n  .card{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:10px;min-height:270px;box-shadow:0 6px 18px rgba(10,10,10,0.04);}\r\n  .thumb{height:140px;border-radius:6px;background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid #eee;}\r\n  .thumb img{max-width:100%;max-height:100%;object-fit:contain;display:block;}\r\n  .meta{font-size:14px;}\r\n  .code{font-weight:700;color:#111;margin-bottom:6px;}\r\n  .item{font-weight:600;margin-bottom:4px;}\r\n  .oe{color:var(--muted);font-size:13px;}\r\n  .placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#999;font-size:13px;}\r\n  .editor{margin-top:22px;background:#fff;border:1px dashed var(--border);padding:12px;border-radius:8px;}\r\n  .editor textarea{width:100%;height:220px;border:0;padding:12px;font-family:monospace;font-size:13px;resize:vertical;}\r\n  .editor .hint{font-size:13px;color:var(--muted);margin-bottom:8px;}\r\n  footer{margin-top:18px;font-size:13px;color:var(--muted);}\r\n  @media (max-width:700px){ .thumb{height:120px;} }\r\n<\/style>\r\n\r\n<div class=\"brar-wrap\">\r\n  <header class=\"brar-header\">\r\n    <img decoding=\"async\" src=\"https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/anchor-hood-latch.png\" alt=\"logo\">\r\n    <div>\r\n      <h1>Brar Tool \u2014 Product Catalog<\/h1>\r\n      <div style=\"color:var(--muted);font-size:13px\">Automatically generated product page \u2014 edit CSV below to fix mappings<\/div>\r\n    <\/div>\r\n  <\/header>\r\n\r\n  <div class=\"controls\">\r\n    <input id=\"search\" type=\"search\" placeholder=\"Search code \/ item name (try 'BT00123' or 'wheel')\" \/>\r\n    <select id=\"filterCategory\">\r\n      <option value=\"\">All<\/option>\r\n    <\/select>\r\n    <button id=\"applySearch\">Search<\/button>\r\n    <button id=\"reset\">Reset<\/button>\r\n  <\/div>\r\n\r\n  <div id=\"grid\" class=\"grid\" aria-live=\"polite\"><\/div>\r\n\r\n  <div class=\"editor\">\r\n    <div class=\"hint\">\r\n      <strong>CSV product data<\/strong> \u2014 format per line: <code>CODE | ITEM | OE\/REF | image_filename<\/code> \u2014 edit here to add\/update products. When you edit, press <em>Render<\/em>.\r\n    <\/div>\r\n\r\n    <!-- CSV placed directly in textarea to avoid WP stripping JS strings -->\r\n    <textarea id=\"rawdata\" spellcheck=\"false\">BT00001 | EXHAUST MOUNT | O.E. NO : M13-1009 | exhaustmount.png\r\nBT00067 | FREIGHT LINER BUSH | O.E. NO : 16-18035-000, 681325-0150 | freight-liner-bush.png\r\nBT00002 | FILL CAP | O.E. NO : T3188 | fillcap.png\r\nBT00068 | BRASS BUSH 1-5\/8\"X1-1\/4\"X4\" | O.E. NO. : 16-01005-002, A1601005002 | brass-bush.png\r\nBT00069 | TORQUE ARM BOLT | O. E. NO. : UXA-000016 | torque-arm-bolt.png\r\nBT00070 | EQUALIZER BOLT | O. E. NO. : UXA0015-001 | equalizer-bolt.png\r\nBT00003 | BUSH SMALL | O. E. NO. : UXA000011 | bushsmall.png\r\nBT00071 | ALIGNMENT CONCENTRIC WASHER | REF NO. : C209024, MHS97 | alignment-concentric-washer.png\r\nBT00072 | ALIGNMENT ECCENTRIC WASHER | REF NO. : C20925, MHS99 | alignment-eccentric-washer.png\r\nBT00004 | TURNER AIRSPRING SPACER (SMALL) | O.E. NO : B225101, S225101 | turner-airspring.png\r\nBT00006 | TURNER AIRSPRING SPACER (BIG) | O.E. NO : B225103 | turner-airspring-big.png\r\nBT00007 | PLASTIC AIR SPRING SPACER | O.E. NO : B-22510-2 | plastic-air-spring-spinner.png\r\nBT00008 | PLASTIC AIR SPRING SPACER | REF NO. : HE10BG | plastic-air-spring-spinner.png\r\nBT00009 | EQUALIZER BUSHING | O. E. NO. : 16146-01, 18723-01 | equalizer-bushing.png\r\nBT00010 | RUBBER EQUALIZER BUSHING | O. E. NO. : 7010-00 | rubber-equalizer-bushing.png\r\nBT00103 | WEAR PAD | O. E. NO. : 571960C1, ABP\/N3271501 | wear-pad.png\r\nBT00104 | MOUNTING | O.E. NO. : K179-450, 25QM-31 | mounting.png\r\nBT00105 | SPACER BLOCK | O.E. NO. : 13QK246 | spacer-block.png\r\nBT00011 | HOOK \u2013 HOOD | OE NO. : 29-00322 | hook-hood.png\r\nBT00012 | ANCHOR HOOD LATCH | O.E. NO : L03-6005 | anchor-hood-latch.png\r\nBT00013 | LATCH ASSY. HOOD 567 | OE NO. : L56-6044B | latch-assy-hood-567.png\r\nBT00005 | TORQUE BUSH |  | torque-bush.png\r\nBT00106 | RUBBER BUSHING | O.E. NO. : 1609501, 010606 | rubber-bushing.png\r\nBT00107 | CLAMP | O. E. NO. : 32-29-1 | clamp.png\r\nBT00108 | PLATE | O. E. NO. : 32-SP20 | palte.png\r\nBT00109 | CLAMP |  | clamp2.png\r\nBT00110 | BUSH | O. E. NO. : 31ECB | bushing.png\r\nBT00014 | DUST CAP | REF. NO. : 55-85-1 | dust-cap.png\r\nBT00111 | SHACKLE BOLT 7\/8 | REF NO. : RT-3158 | shackle-bolt.png\r\nBT00112 | HANGER | REF NO. : RT-3064 | hanger.png\r\nBT00113 | EQUALIZER HANGER | REF NO. : RT-3084, EQ-E1 | equalizer-hanger.png\r\nBT00015 | HUB CAP | REF NO. : 7139 | hub-cap.png\r\nBT00114 | U. BOLT F\/R 1\/2\u201dX62X140 | REF NO. : UBR220 | U-bolt.png\r\nBT00016 | 9-10K OIL CAP | REF NO. : 7174 | oil-cap.png\r\nBT00017 | OIL CAP PLUG | REF NO. : 4632PTP | oil-cap-plu.png\r\nBT00095 | ENGINE MOUNT | REF NO. : TM99-63506 | engine-mount.png\r\nBT00115 | ROLLER PIN 34.9X57.5X19.3 | REF NO.: R015, E-781, 101.2073, 01-201 | roller-pin.png\r\nBT00116 | BRACKET LEFT & RIGHT | REF. NO. : E-6107 | bracket-left-right.png\r\nBT00117 | BOTTOM PLATE | REF. NO. : E-6444 | bottom-plate.png\r\nBT00118 | NUT L & R GOLDEN | REF NO. : E5977, 201.2003, M-126, WA07-5022 | nut-l-r-golden.png\r\nBT00119 | SLEEVE | REF NO. : E7896, 201.1002 , M-130 , M-131 | sleeve.png\r\nBT00120 | REVOLVING NUT | REF NO. : E6000, 201.3014 | revolving-unit.png\r\nBT00121 | C. BOLT (1\/2x6) | REF NO. : MCB640, E-3181, M-2980 | c.bolt_.png\r\nBT00122 | C. BOLT (1\/2x8) | REF NO. : MCB675, E-3193, M-2981 | c.bolt_.png\r\nBT00123 | WHEEL CLAMP | REF NO. : R123, 203.2013, E-5571A, M-3 | wheel-clamp.png\r\nBT00124 | TIE ROD END | REF NO. : ES431L , 310-229 | tie-rod-end.png\r\nBT00125 | SLEEVE BIG | O.E. NO. : 898376R1 | sleeve-big.png\r\nBT00126 | NUT (M22XM33) | O.E. NO. : NCM2233C | nut.png\r\nBT00018 | ISOLATOR NUT | | isolator-nut.png\r\nBT00019 | ISOLATOR NUT | | isolatornut2.png\r\nBT00127 | HUB BOLT (22X1.5X95) | REF NO. : 13-1579, M-3665, E-8988 | hub-bolt.png\r\nBT00020 | 5th WHEEL 39\u201d CHROME PIN PULLER | REF NO. : M-4525 | 5thwheel39.png\r\nBT00021 | 5th WHEEL 33\u201d CHROME PIN PULLER | REF NO. : M-4524 | 5thwheel33.png\r\nBT00024 | FILL CAP | | fillcap.png\r\nBT00025 | RETAINER | | retainer.png\r\nBT00023 | LEVELLING VALVE ROD | REF NO. : S-22748,MSRK9692 | levellingvalve.png\r\nBT00128 | HOOD SPRING | | hoodspring.png\r\nBT00129 | LANDING GEAR SHOE AXLE ASSY. | REF NO. : M-4127 | landinggearshoe.png\r\nBT00130 | LANDING GEAR CRANK HANDLE 11\" VERTICAL | REF NO. : M-4127 | landingearcrankhandle.png\r\nBT00131 | PIN, BUSHING & COLLAR KIT FIFTH WHEEL | REF NO. : 096942 | pin-bushingandcollarkit.png\r\nBT00022 | CONTROL ROD - LEVELING VALVE | | control-rod-leveling-valce.png\r\nBT00026 | TUBE PLATE WITH CAP | O.E. NO : T3152T3153A | tube-plate-with-cap.png\r\nBT00027 | FILL CAP | REF NO : Q347367 | fillcap2.png\r\nBT00028 | FLANGE | REF NO. : 29582 | flange.png\r\nBT00029 | BUSHING | REF NO. : 52504 | bushing.png\r\nBT00030 | BUSHING | REF NO. : 62255 | bushing.png\r\nBT00031 | PVC GRIP | O. E. NO. : 6702621 | pvcgrip.png\r\nBT00032 | RUBBER GRIP OLD STYLE | O. E. NO. : 6513963 | rubbergripoldstyle.png\r\nBT00033 | PVC DIP MOULDING GRIP | O. E. NO. : 6564452 | pvc-dip-moulding-grip.png\r\nBT00132 | DRIVE BELT | REF NO. : 6736775 | drive-belt.png\r\nBT00133 | DRIVE BELT | REF NO. : 6660994 | drive-belt-6660994.png\r\nBT00134 | PIN | REF NO. : 7252989 | pin.png\r\nBT00135 | ALLEN BOLT | REF NO. : 7255136 | allenbolt.png<\/textarea>\r\n\r\n    <div style=\"margin-top:8px;display:flex;gap:8px;\">\r\n      <button id=\"render\">Render<\/button>\r\n      <button id=\"downloadCSV\">Download CSV<\/button>\r\n      <button id=\"showMissing\">Show products missing images<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <footer>\r\n    Images are loaded from <code>https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/<\/code>. Filenames are explicitly provided in the CSV.\r\n  <\/footer>\r\n<\/div>\r\n\r\n<script>\r\n\/* Lightweight parsing + render logic (no long JS string assignments) *\/\r\n(function(){\r\n  const IMAGE_BASE = 'https:\/\/brartool.com\/wp-content\/uploads\/2025\/11\/';\r\n  function slugify(s){ return s.toString().toLowerCase().replace(\/[^a-z0-9]+\/g,'-').replace(\/(^-|-$)\/g,''); }\r\n\r\n  function parseCSV(text){\r\n    return text.split(\/\\r?\\n\/).map(l=>l.trim()).filter(Boolean).map(line=>{\r\n      const parts = line.split('|').map(p=>p.trim());\r\n      const code = parts[0]||'';\r\n      const name = parts[1]||'';\r\n      const oe = parts[2]||'';\r\n      let image_filename = '';\r\n      if(parts.length >= 4) image_filename = parts.slice(3).join('|').trim();\r\n      return {code,name,oe,image_filename};\r\n    });\r\n  }\r\n\r\n  function resolveImageURL(product){\r\n    if(product.image_filename){\r\n      if(\/^https?:\\\/\\\/\/i.test(product.image_filename)) return product.image_filename;\r\n      return IMAGE_BASE + product.image_filename;\r\n    }\r\n    \/\/ fallback to slugified png\r\n    return IMAGE_BASE + slugify(product.name) + '.png';\r\n  }\r\n\r\n  function renderGrid(products, filterText){\r\n    const grid = document.getElementById('grid');\r\n    grid.innerHTML = '';\r\n    const q = (filterText||'').trim().toLowerCase();\r\n    let visible = 0;\r\n    for(const p of products){\r\n      if(q){\r\n        const hay = (p.code + ' ' + p.name + ' ' + p.oe).toLowerCase();\r\n        if(!hay.includes(q)) continue;\r\n      }\r\n      visible++;\r\n      const div = document.createElement('div'); div.className='card';\r\n      const imgWrap = document.createElement('div'); imgWrap.className='thumb';\r\n      const img = document.createElement('img');\r\n      const url = resolveImageURL(p);\r\n      img.src = url; img.alt = p.name;\r\n      img.onerror = function(){ this.style.display='none'; imgWrap.innerHTML = '<div class=\"placeholder\">No image<\/div>'; };\r\n      imgWrap.appendChild(img);\r\n      div.appendChild(imgWrap);\r\n\r\n      const meta = document.createElement('div'); meta.className='meta';\r\n      const code = document.createElement('div'); code.className='code'; code.textContent = 'CODE  :  ' + p.code;\r\n      const item = document.createElement('div'); item.className='item'; item.textContent = 'ITEM  :  ' + p.name;\r\n      const oe = document.createElement('div'); oe.className='oe'; oe.textContent = p.oe;\r\n      meta.appendChild(code); meta.appendChild(item); meta.appendChild(oe);\r\n      div.appendChild(meta);\r\n      grid.appendChild(div);\r\n    }\r\n    if(visible===0){\r\n      grid.innerHTML = '<div style=\"grid-column:1\/-1;padding:20px;background:#fff;border:1px solid var(--border);border-radius:8px;color:var(--muted)\">No products match your search.<\/div>';\r\n    }\r\n  }\r\n\r\n  const textarea = document.getElementById('rawdata');\r\n  let products = parseCSV(textarea.value);\r\n  renderGrid(products);\r\n\r\n  document.getElementById('render').addEventListener('click', ()=>{\r\n    products = parseCSV(textarea.value);\r\n    renderGrid(products, document.getElementById('search').value);\r\n  });\r\n  document.getElementById('applySearch').addEventListener('click', ()=>{\r\n    renderGrid(products, document.getElementById('search').value);\r\n  });\r\n  document.getElementById('reset').addEventListener('click', ()=>{\r\n    document.getElementById('search').value = '';\r\n    products = parseCSV(textarea.value);\r\n    renderGrid(products);\r\n  });\r\n  document.getElementById('downloadCSV').addEventListener('click', ()=>{\r\n    const blob = new Blob([textarea.value], {type:'text\/plain'});\r\n    const a = document.createElement('a');\r\n    a.href = URL.createObjectURL(blob);\r\n    a.download = 'brar_products.csv';\r\n    a.click();\r\n    URL.revokeObjectURL(a.href);\r\n  });\r\n  document.getElementById('showMissing').addEventListener('click', ()=>{\r\n    const missing = products.filter(p=>{\r\n      const url = resolveImageURL(p);\r\n      return !url || (url.indexOf('.png')===-1 && url.indexOf('.jpg')===-1 && url.indexOf('.jpeg')===-1);\r\n    });\r\n    if(missing.length === 0) alert('All products have an image filename candidate.');\r\n    else { alert('Missing image candidates for ' + missing.length + ' products. Edit CSV to add image filename per line.'); console.log('missing candidates:', missing); }\r\n  });\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>List Item #1 brartool@gmail.com Menu Home About Us Products Contact Us Brar Tool \u2014 Product Catalog Automatically generated product page \u2014 edit CSV below to fix mappings All Search Reset Brar Tool \u2014 Product Catalog Automatically generated product page \u2014 edit CSV below to fix mappings All Search Reset CSV product data \u2014 format per [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-92","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/pages\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":76,"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/pages\/92\/revisions"}],"predecessor-version":[{"id":287,"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/pages\/92\/revisions\/287"}],"wp:attachment":[{"href":"https:\/\/brartool.com\/index.php\/wp-json\/wp\/v2\/media?parent=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}