{"title":"Security Vehicle Lights","description":"\u003cp\u003eA security vehicle has to do something a patrol car never does: be seen and recognized as security without being mistaken for police. The color rules are what make that work, and they are the first thing to get right. Amber is legal on working vehicles in all 50 states and is the standard private patrol color. Amber and white adds a scene and intersection element. Amber and blue is permitted on security and campus vehicles in a handful of states and is a citation in most. Red and blue is reserved for authorized emergency vehicles everywhere, and a security company that runs it is impersonating one. Black Oak builds security lighting on the same Low Pro and XDR platform as its police and fire lines, so a contract fleet gets Class 1 hardware in the color it is allowed to run. The \u003ca href=\"\/products\/new-30-low-pro-emergency-light-bar\"\u003e30 inch Low Pro\u003c\/a\u003e is the standard patrol SUV and sedan bar, the \u003ca href=\"\/products\/new-43-low-pro-emergency-light-bar\"\u003e43 inch\u003c\/a\u003e covers a full-size SUV, and the \u003ca href=\"\/products\/new-17-low-pro-emergency-light-bar\"\u003e17 inch\u003c\/a\u003e and \u003ca href=\"\/products\/11-mini-low-pro-emergency-light-bar\"\u003e11 inch\u003c\/a\u003e mini bars on magnetic feet cover a contract vehicle that goes back to stock at the end of the shift. The Low Pro is certified to SAE J845 and SAE J595 Class 1 and sealed to IP69K. Designed and engineered in Sarasota, Florida.\u003c\/p\u003e\n\u003cdiv data-lowpro-player hidden\u003e\u003c\/div\u003e\n\u003ch2\u003eWhat a security light actually has to do\u003c\/h2\u003e\n\u003cp\u003eThree things, and they are not the same as a police light's job. On a campus or a parking structure at night, the light is a deterrent: it has to be visible from the far end of a lot so the vehicle reads as present before anyone can tell what is written on the door. At a gate or a traffic post, the light is a directional signal: the 3-mode traffic advisor on the rear of a Low Pro (left, right, center-out) moves a queue of cars without a flashlight. On a foot patrol stop or an escort, the light is a scene light: the 360 degree white Halo on the bar, switchable front, back, left or right, lights the area around the vehicle for the guard and the camera. A cheap amber beacon does the first job and none of the others, which is why a contract patrol vehicle runs a bar.\u003c\/p\u003e\n\u003ch2\u003eStandard security patrol package\u003c\/h2\u003e\n\u003cp\u003eOne 30 or 43 inch Low Pro in amber or amber and white on door jamb or magnetic mount, two \u003ca href=\"\/products\/xdr5-emergency-strobe-light\"\u003eXDR-5\u003c\/a\u003e heads in the grille and two on the rear deck for the car pulling out of a space in front of or behind the patrol unit, and an \u003ca href=\"\/products\/xdr-4-beacon\"\u003eXDR-4 beacon\u003c\/a\u003e on the roof of a parking enforcement cart or gate vehicle that does not need a bar. The 30 inch draws 20 amps at full output on 12 volts and the 43 inch 27, and each head adds 1.5 amps on its own 5 amp fuse. Every 30 inch and larger bar ships with its controller, a 9 foot power lead, a 12 foot controller lead and the feet for the mount selected at checkout; a favorite pattern programmed into the controller comes back every shift, so a vehicle that changes drivers runs the same pattern every night.\u003c\/p\u003e\n\u003ch2\u003eMagnetic or permanent\u003c\/h2\u003e\n\u003cp\u003eMost security fleets are leased or move between contracts, which makes the mount decision easy. Magnetic feet on the 11 to 43 inch bars hold at road speed on a clean steel roof and leave nothing behind when the vehicle goes back to the leasing company. Door jamb brackets anchor in the door channel with no roof drilling for a company-owned patrol unit that will keep its bar. Headache rack brackets cover a pickup. Pick the mount on the product page.\u003c\/p\u003e\n\u003ch2\u003eWho may run amber and blue\u003c\/h2\u003e\n\u003cp\u003eBlue is a law enforcement color in most states, and a security vehicle running it is a citation in most of them. A few states permit amber and blue on private security and campus vehicles with a permit, and some site contracts and campuses specify it. Confirm the state code and the client's site rules before ordering; the \u003ca href=\"\/blogs\/black-oak-led-blog\/amber-warning-light-laws-by-state\"\u003eamber warning light laws by state\u003c\/a\u003e guide lists every state. When in doubt, the answer is amber and white, which is legal everywhere and reads as security everywhere.\u003c\/p\u003e\n\u003ch2\u003eComplete the vehicle\u003c\/h2\u003e\n\u003cp\u003eSecurity lighting is one part of \u003ca href=\"\/collections\/warning-lights\"\u003eBlack Oak warning lights\u003c\/a\u003e under \u003ca href=\"\/collections\/led-emergency-lights\"\u003eemergency lighting\u003c\/a\u003e, alongside \u003ca href=\"\/collections\/led-beacon-lights\"\u003ebeacon lights\u003c\/a\u003e, \u003ca href=\"\/collections\/led-mini-light-bars\"\u003emini light bars\u003c\/a\u003e and \u003ca href=\"\/collections\/led-emergency-strobe-lights\"\u003eemergency strobe lights\u003c\/a\u003e. Security companies and campus fleets get volume pricing, mixed configurations on one order and installer referrals: call 1-800-348-1287 or \u003ca href=\"\/pages\/fleet-pricing\"\u003erequest fleet pricing\u003c\/a\u003e. Backed by a limited lifetime warranty, see each product page for details.\u003c\/p\u003e\n\u003ch3\u003eCan a security guard vehicle have a light bar?\u003c\/h3\u003e\n\u003cp\u003eYes, in amber, in every state. The restrictions are on blue and on red and blue, which are reserved for law enforcement and authorized emergency vehicles.\u003c\/p\u003e\n\u003ch3\u003eMagnetic or permanent mount for a contract patrol vehicle?\u003c\/h3\u003e\n\u003cp\u003eMagnetic for a vehicle that changes contracts or returns to a leasing company; door jamb brackets for a company-owned patrol unit.\u003c\/p\u003e\n\u003ch3\u003eDoes the bar need to be SAE certified for security use?\u003c\/h3\u003e\n\u003cp\u003eNo state requires it for security vehicles, but Class 1 certification is what a client's risk manager asks for on a site contract, and it is the difference between a bar that reads across a lot at noon and one that does not.\u003c\/p\u003e","products":[{"product_id":"xdr5-emergency-strobe-light","title":"XDR-5 Emergency Strobe Light, LED Warning Light","description":"\u003cstyle\u003e\n#MainContent .xd-h1 { font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important; font-size: 34px !important; font-weight: 800 !important; line-height: 1.12 !important; letter-spacing: -0.5px !important; color: #1C2026 !important; text-transform: none !important; margin: 0 0 10px !important; }\n#MainContent .xd-h2 { font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important; font-size: 26px !important; font-weight: 800 !important; line-height: 1.2 !important; color: #1C2026 !important; text-transform: none !important; letter-spacing: -0.2px !important; margin: 0 0 8px !important; }\n#MainContent .xd-h2-light { color: #ffffff !important; }\n#MainContent .xd-h3 { font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important; font-size: 16px !important; font-weight: 800 !important; color: #1C2026 !important; text-transform: none !important; letter-spacing: 0 !important; margin: 0 0 6px !important; }\n#MainContent .xd-eyebrow { display: block !important; font-size: 11px; font-weight: 700; letter-spacing: 1.6px; text-transform: uppercase; color: #C27C00; margin: 0 0 4px; }\n#MainContent .xd-eyebrow-dark { color: #FFB300; }\n#MainContent .xd-sub { font-size: 15.5px; line-height: 1.55; color: #5F6670; margin: 0 0 14px; }\n#MainContent .xd-flex { display: flex !important; flex-wrap: wrap; }\n#MainContent .xd-col, #MainContent .xd-card, #MainContent .xd-tile, #MainContent .xd-band { display: block !important; box-sizing: border-box; }\n#MainContent .xd-sw { display: flex !important; flex-wrap: nowrap !important; align-items: center; gap: 10px; box-sizing: border-box; }\n#MainContent .xd-card, #MainContent .xd-tile, #MainContent .xd-sw { transition: all .2s ease; }\n#MainContent .xd-card:hover, #MainContent .xd-tile:hover, #MainContent .xd-sw:hover { border-color: #FFB300 !important; box-shadow: 0 6px 18px rgba(28,32,38,.10); }\n#MainContent .xd-chip { display: inline-block !important; background: #FFF6E0; color: #1C2026; border: 1px solid #FFE1A0; border-radius: 12px; padding: 5px 11px; font-size: 12.5px; font-weight: 700; margin: 0 5px 6px 0; }\n#MainContent .xd-btn { display: inline-block !important; background: transparent; color: #fff !important; border: 2px solid #FFB300; border-radius: 10px; padding: 10px 18px; font-size: 14px; font-weight: 700; text-decoration: none !important; transition: all .18s ease; margin: 0 6px 6px 0; }\n#MainContent .xd-btn:hover { background: #FFB300; color: #111 !important; transform: translateY(-2px); }\n#MainContent .xd-dot { display: inline-block !important; width: 28px; height: 28px; border-radius: 50%; flex: 0 0 28px; box-shadow: inset 0 0 0 1px rgba(0,0,0,.10); }\n#MainContent .xd-hero-img { text-align: center; }\n#MainContent .xd-hero-img img { max-width: 100% !important; max-height: 260px; width: auto; height: auto !important; border-radius: 14px; display: inline-block !important; }\n#MainContent .xd-tiw { display: flex !important; align-items: center; flex-wrap: wrap; gap: 18px; margin: 0 0 8px; background: #fff; border: 2px solid #E5E7EB; border-radius: 16px; padding: 10px; box-sizing: border-box; transition: all .2s ease; }\n#MainContent .xd-tiw:hover { border-color: #FFB300; box-shadow: 0 6px 18px rgba(28,32,38,.10); }\n#MainContent .xd-tiw.xd-rev { flex-direction: row-reverse; }\n#MainContent .xd-tiw-img { flex: 0 1 340px; max-width: 340px; display: block !important; border-radius: 12px; overflow: hidden; }\n#MainContent .description .xd-tiw-img img, #MainContent .xd-tiw .xd-tiw-img img { width: 100% !important; height: 170px !important; max-height: 170px !important; object-fit: cover; border-radius: 12px; display: block !important; }\n@media (max-width: 749px) { #MainContent .xd-tiw-img { flex: 1 1 100%; max-width: 100%; } }\n#MainContent .xd-tiw-txt { flex: 1 1 280px; min-width: 260px; display: block !important; }\n#MainContent .xd-tiw-txt a, #MainContent details .content a { color: #C27C00; font-weight: 700; }\n#MainContent .xd-fig img { max-width: 100% !important; max-height: 280px; width: auto; height: auto !important; border-radius: 12px; display: inline-block !important; }\n#MainContent details { border: 2px solid #E5E7EB; border-radius: 12px; margin-bottom: 8px; overflow: hidden; background: #fff; display: block; }\n#MainContent details summary { display: flex; justify-content: space-between; align-items: center; cursor: pointer; padding: 12px 18px; font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif; font-weight: 700; font-size: 16px; color: #1C2026; list-style: none; background: #fff; border-bottom: 0; }\n#MainContent details summary:hover, #MainContent details[open] summary { background: #FFF6E0; }\n#MainContent details[open] summary { border-bottom: 1px solid #FFE1A0; }\n#MainContent details summary::-webkit-details-marker { display: none; }\n#MainContent details summary::after { content: '+'; font-size: 22px; font-weight: 400; color: #C27C00; }\n#MainContent details[open] summary::after { content: '\\2212'; }\n#MainContent details .content { padding: 6px 18px 12px; font-size: 15px; line-height: 1.55; display: block; }\n#MainContent table.xd-spec { width: 100%; border-collapse: collapse; margin: 0; font-size: 14.5px; }\n#MainContent table.xd-spec th, #MainContent table.xd-spec td { border: 1px solid #E5E7EB; padding: 8px 10px; text-align: left; }\n#MainContent table.xd-spec th { background: #F6F6F4; font-weight: 600; color: #1C2026; width: 42%; }\n#MainContent table.xd-spec tr:hover td, #MainContent table.xd-spec tr:hover th { background: #FFF6E0; }\n#MainContent .description img { max-width: 100% !important; height: auto !important; }\n@media (max-width: 749px) {\n  #MainContent .xd-h1 { font-size: 27px !important; }\n  #MainContent .xd-h2 { font-size: 22px !important; }\n  #MainContent .xd-pad { padding: 20px 16px !important; }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"xd-pad xd-flex\" style=\"display: flex; flex-wrap: wrap; align-items: center; gap: 22px; background: linear-gradient(165deg,#FFF6E0 0%,#ffffff 72%); border: 2px solid #E5E7EB; border-radius: 18px; padding: 26px; margin: 0 0 12px;\"\u003e\n\u003cdiv class=\"xd-col\" style=\"flex: 1 1 340px; min-width: 260px;\"\u003e\n\u003cp style=\"display: inline-block; background: #1C2026; color: #FFB300; font-size: 11px; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase; padding: 5px 11px; border-radius: 6px; margin: 0 0 10px;\"\u003eSAE J595 · IP69K · 13 Flash Patterns\u003c\/p\u003e\n\u003ch2 class=\"xd-h1\"\u003eXDR-5 Emergency Strobe Light\u003c\/h2\u003e\n\u003cp class=\"xd-sub\"\u003eA slim 5\" LED warning light for tow trucks, utility, construction, and emergency response vehicles. Six high-intensity LEDs throw a 120° wide warning pattern, the low-profile housing mounts almost anywhere, and it's sealed to IP69K for pressure washing and all-weather use.\u003c\/p\u003e\n\u003cp style=\"margin: 0; line-height: 2;\"\u003e\u003cspan class=\"xd-chip\"\u003eSAE J595\u003c\/span\u003e\u003cspan class=\"xd-chip\"\u003eIP69K Waterproof\u003c\/span\u003e\u003cspan class=\"xd-chip\"\u003e10–30V DC\u003c\/span\u003e\u003cspan class=\"xd-chip\"\u003eSync Capable\u003c\/span\u003e\u003cspan class=\"xd-chip\"\u003eLimited Lifetime Warranty\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-col xd-hero-img\" style=\"flex: 1 1 260px;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-5_-_Amber_Blue.png?v=1785501647\" alt=\"XDR-5 LED emergency strobe light in amber and blue\" width=\"500\" height=\"500\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-flex\" style=\"display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 22px;\"\u003e\n\u003cdiv class=\"xd-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003e13\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eFlash Patterns\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003e120°\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eWide Angle\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003eIP69K\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eWaterproof\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003e1.5A\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eAmp Draw\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cspan class=\"xd-eyebrow\"\u003ePick Your Colors\u003c\/span\u003e\n\u003ch2 class=\"xd-h2\"\u003e9 single and dual-color options\u003c\/h2\u003e\n\u003cp class=\"xd-sub\"\u003eRun one color or split two in the same head. Dual-color models alternate between both colors for maximum attention.\u003c\/p\u003e\n\u003cdiv class=\"xd-flex\" style=\"display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 22px;\"\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: #FFB300;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eAmber\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: #1C6FE0;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eBlue\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: #E23B3B;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eRed\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: linear-gradient(135deg,#FFB300 0 50%,#1C6FE0 50% 100%);\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eAmber \u0026amp; Blue\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: linear-gradient(135deg,#FFB300 0 50%,#2FBF5B 50% 100%);\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eAmber \u0026amp; Green\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: linear-gradient(135deg,#FFB300 0 50%,#F4F6F8 50% 100%); box-shadow: inset 0 0 0 2px #E5E7EB;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eAmber \u0026amp; White\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: linear-gradient(135deg,#1C6FE0 0 50%,#F4F6F8 50% 100%); box-shadow: inset 0 0 0 2px #E5E7EB;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eBlue \u0026amp; White\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: linear-gradient(135deg,#E23B3B 0 50%,#1C6FE0 50% 100%);\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eRed \u0026amp; Blue\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"xd-dot\" style=\"background: linear-gradient(135deg,#E23B3B 0 50%,#F4F6F8 50% 100%); box-shadow: inset 0 0 0 2px #E5E7EB;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eRed \u0026amp; White\u003c\/b\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cspan class=\"xd-eyebrow\"\u003eBuilt For The Job\u003c\/span\u003e\n\u003ch2 class=\"xd-h2\"\u003eSmall strobe, serious warning power\u003c\/h2\u003e\n\u003cdiv class=\"xd-flex\" style=\"display: flex; flex-wrap: wrap; gap: 10px; margin: 8px 0 22px;\"\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 220px; background: #fff; border: 2px solid #E5E7EB; border-radius: 14px; padding: 14px 16px;\"\u003e\n\u003ch3 class=\"xd-h3\"\u003eSAE J595 Approved\u003c\/h3\u003e\n\u003cp style=\"font-size: 14.5px; line-height: 1.5; color: #5F6670; margin: 0;\"\u003eMeets the SAE standard for directional flashing warning lamps on emergency and service vehicles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 220px; background: #fff; border: 2px solid #E5E7EB; border-radius: 14px; padding: 14px 16px;\"\u003e\n\u003ch3 class=\"xd-h3\"\u003e13 Patterns + Sync\u003c\/h3\u003e\n\u003cp style=\"font-size: 14.5px; line-height: 1.5; color: #5F6670; margin: 0;\"\u003eSteady-on plus 13 strobe patterns. Sync multiple units to flash together or alternate side to side.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 220px; background: #fff; border: 2px solid #E5E7EB; border-radius: 14px; padding: 14px 16px;\"\u003e\n\u003ch3 class=\"xd-h3\"\u003e12V or 24V\u003c\/h3\u003e\n\u003cp style=\"font-size: 14.5px; line-height: 1.5; color: #5F6670; margin: 0;\"\u003eRuns on 10–30V DC, so it works on pickups, service bodies, and heavy trucks with no changes.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-tiw\"\u003e\n\u003cdiv class=\"xd-tiw-img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Amber_-_White_stacked_on_top_of_each_other.jpg?v=1755002429\" alt=\"XDR-5 amber and white emergency strobe lights\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"xd-tiw-txt\"\u003e\n\u003ch3 class=\"xd-h3\" style=\"font-size: 20px !important;\"\u003eUltra Slim, Stealthy Design\u003c\/h3\u003e\n\u003cp style=\"font-size: 15.5px; line-height: 1.55; margin: 0;\"\u003eThe 5-1\/8\" low-profile housing fits tight spots in grilles, bumpers, deck lids, and headache racks, and gives you a clean, modern look. It surface mounts with two M4 bolts and a vibration foam pad. Need to mount it sideways? Add our \u003ca href=\"\/products\/xdr-4-5-90-degree-bracket\"\u003e90° mounting bracket\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-tiw xd-rev\"\u003e\n\u003cdiv class=\"xd-tiw-img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Red_-_Blue_stacked_on_top_of_each_other.jpg?v=1755002448\" alt=\"XDR-5 red and blue emergency strobe lights\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"xd-tiw-txt\"\u003e\n\u003ch3 class=\"xd-h3\" style=\"font-size: 20px !important;\"\u003ePowerful Warning Output\u003c\/h3\u003e\n\u003cp style=\"font-size: 15.5px; line-height: 1.55; margin: 0;\"\u003eSix high-intensity LEDs push an ultra-wide 120° pattern that stays visible day and night. Choose from 13 flash patterns or steady-on, and sync multiple heads for a coordinated, professional warning setup on any vehicle.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-tiw\"\u003e\n\u003cdiv class=\"xd-tiw-img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Amber-RedBlue-White_stackedontopofeachother.jpg?v=1755002411\" alt=\"XDR-5 strobe lights in amber, red, blue and white\" style=\"object-fit: contain; background: #fff;\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"xd-tiw-txt\"\u003e\n\u003ch3 class=\"xd-h3\" style=\"font-size: 20px !important;\"\u003eRugged \u0026amp; Waterproof\u003c\/h3\u003e\n\u003cp style=\"font-size: 15.5px; line-height: 1.55; margin: 0;\"\u003eSealed to IP69K and rated from -40° to 145° F, the XDR-5 shrugs off rain, road salt, dust, and the pressure washer. It's built to run shift after shift in the conditions work trucks actually see, and it's backed by our limited lifetime warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch5\u003eSpecs\u003c\/h5\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePower \u0026amp; Performance\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"xd-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWattage\u003c\/th\u003e\n\u003ctd\u003e18W\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eAmp Draw\u003c\/th\u003e\n\u003ctd\u003e1.5A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Voltage\u003c\/th\u003e\n\u003ctd\u003e10–30V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCertification\u003c\/th\u003e\n\u003ctd\u003eSAE J595\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLEDs\u003c\/th\u003e\n\u003ctd\u003e6 high-intensity\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBeam\u003c\/th\u003e\n\u003ctd\u003eUltra wide, 120°\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eModes\u003c\/th\u003e\n\u003ctd\u003eSteady on + 13 strobe patterns, sync capable\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDurability \u0026amp; Warranty\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"xd-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWaterproof Rating\u003c\/th\u003e\n\u003ctd\u003eIP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Temp\u003c\/th\u003e\n\u003ctd\u003e-40° to 145° F (-40° to 62° C)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLife Expectancy\u003c\/th\u003e\n\u003ctd\u003e50,000 hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003eLimited lifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGuarantee\u003c\/th\u003e\n\u003ctd\u003e30-day money back\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWiring \u0026amp; Installation\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"xd-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLead Length\u003c\/th\u003e\n\u003ctd\u003e12\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Gauge\u003c\/th\u003e\n\u003ctd\u003e24 AWG\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eConnector\u003c\/th\u003e\n\u003ctd\u003eOpen-end pigtail\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHarness Included?\u003c\/th\u003e\n\u003ctd\u003eNo\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRecommended Fuse\u003c\/th\u003e\n\u003ctd\u003e5A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMounting\u003c\/th\u003e\n\u003ctd\u003eSurface mount, 2× M4 bolts + foam pad (included)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eGeneral \u0026amp; SKUs\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"xd-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLength\u003c\/th\u003e\n\u003ctd\u003e5-1\/8\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003e0.1 lb\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSingle Color\u003c\/th\u003e\n\u003ctd\u003eXDR-5S-A · XDR-5S-B · XDR-5S-R\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDual Color\u003c\/th\u003e\n\u003ctd\u003eXDR-5S-AB · XDR-5S-AG · XDR-5S-AW · XDR-5S-BW · XDR-5S-RB · XDR-5S-RW\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdiv class=\"xd-flex\" style=\"display: flex; flex-wrap: wrap; gap: 14px; margin: 18px 0 0; align-items: flex-start;\"\u003e\n\u003cdiv class=\"xd-col\" style=\"flex: 1 1 300px;\"\u003e\n\u003ch5 style=\"margin-top: 0;\"\u003eIn The Box\u003c\/h5\u003e\n\u003cdiv class=\"xd-flex\" style=\"display: flex; flex-wrap: wrap; gap: 8px;\"\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003e1 × XDR-5 Emergency Strobe\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eWith 12\" 24 AWG pigtail\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003eVibration Foam Insert\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eCushions the light against the mount\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003e2 × 1-1\/2\" M4 Bolts\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eWith washers and nuts\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003eInstructions\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eWiring and setup steps\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xd-col xd-fig\" style=\"flex: 1 1 300px;\"\u003e\n\u003ch5 style=\"margin-top: 0;\"\u003eDimensions\u003c\/h5\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-5_Strobe_Dimensions.png?v=1762181313\" alt=\"XDR-5 emergency strobe light dimensions\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch5\u003eFAQ\u003c\/h5\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIs the XDR-5 SAE approved?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eYes. The XDR-5 is SAE J595 approved for directional flashing warning lamps. Rules on which colors you can run vary by state and vehicle type, so check your local regulations, especially for red and blue.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWill it work on a 24V truck?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eYes. It runs on anything from 10V to 30V DC, so 12V and 24V systems both work with no changes.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCan I sync multiple XDR-5 lights?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eYes. Wire multiple heads together to flash in unison or alternate.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDoes it come with a harness or switch?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eNo. Each light has a 12\" open-end pigtail that you wire to your own switch and a 5A fuse.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow do I mount it?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eIt surface mounts on any flat spot with the included M4 bolts and vibration foam pad. To mount it at a right angle, add the \u003ca href=\"\/products\/xdr-4-5-90-degree-bracket\"\u003eXDR-4 \u0026amp; XDR-5 90° mounting bracket\u003c\/a\u003e.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat does the warranty cover?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eOur limited lifetime warranty covers workmanship and material failures. Send the light back and once we verify the issue, we'll repair or replace it free of charge. Every order also comes with a 30-day money-back guarantee.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e","brand":"Black Oak LED","offers":[{"title":"Amber","offer_id":42512529752125,"sku":"XDR-5S-A","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Blue","offer_id":42563696623677,"sku":"XDR-5S-B","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Red","offer_id":42563696656445,"sku":"XDR-5S-R","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue","offer_id":43408883482685,"sku":"XDR-5S-AB","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green","offer_id":43408883515453,"sku":"XDR-5S-AG","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White","offer_id":42512529784893,"sku":"XDR-5S-AW","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White","offer_id":42512529817661,"sku":"XDR-5S-BW","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue","offer_id":42512529850429,"sku":"XDR-5S-RB","price":49.94,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White","offer_id":42512529883197,"sku":"XDR-5S-RW","price":49.94,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Amber-RedBlue-White_stackedontopofeachother.jpg?v=1755002411"},{"product_id":"new-17-low-pro-emergency-light-bar","title":"17\" Low Pro Emergency Light Bar","description":"\u003c!-- LOWPRO MINI INTERACTIVE PLAYER --\u003e\n\u003cdiv id=\"lowpro-player-block\" style=\"margin:0 0 26px;\"\u003e\n\u003cdiv class=\"lowpro-cta\"\u003e\n\u003ch2 style=\"margin:0 0 4px;font-size:24px;line-height:1.25;\"\u003eTake the Controls: Try This Light Bar Live\u003c\/h2\u003e\n\u003cp style=\"margin:0 0 12px;font-size:15px;line-height:1.5;\"\u003eFlip the rocker, press the pattern button, and switch on the 360° Halo scene light, exactly like the socket controller that ships in the box. Only the colors this bar is offered in can be selected.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ciframe id=\"lowpro-player-frame\" class=\"lowpro-frame\" title=\"Mini Low Pro Emergency Bar interactive demo\" style=\"width:100%;border:0;display:block;border-radius:16px;background:#0a0c0f;\" srcdoc=\"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\u0026quot;en\u0026quot;\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\u0026quot;UTF-8\u0026quot;\u0026gt;\n\u0026lt;meta name=\u0026quot;viewport\u0026quot; content=\u0026quot;width=device-width, initial-scale=1.0\u0026quot;\u0026gt;\n\u0026lt;title\u0026gt;Mini Low Pro Simulator\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n  :root{\n    --bg:#0a0c0f; --panel:#111418; --panel2:#161a20; --edge:#242a33;\n    --txt:#e8ecf2; --dim:#8a94a3;\n  }\n  *{box-sizing:border-box; -webkit-tap-highlight-color:transparent}\n  html,body{margin:0;padding:0;background:var(--bg);color:var(--txt);\n    font-family:\u0026quot;Segoe UI\u0026quot;,system-ui,-apple-system,Roboto,Arial,sans-serif;}\n  .wrap{max-width:1100px;margin:0 auto;padding:14px 16px 20px;}\n  header{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:6px}\n  .brand{font-weight:800;letter-spacing:.18em;font-size:19px;white-space:nowrap}\n  .brand span{color:var(--dim);font-weight:600}\n  .sub{color:var(--dim);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}\n  .sizeBtns{margin-left:auto;display:flex;gap:6px}\n  .sizeBtns button{background:var(--panel2);border:1px solid #2c333d;color:var(--txt);\n    border-radius:7px;font-size:12px;padding:4px 10px;cursor:pointer}\n  .sizeBtns button.on{border-color:#ffb43a;color:#ffcf7d}\n  .stage{background:radial-gradient(ellipse at 50% 30%, #14181e 0%, #0b0d11 70%);\n    border:1px solid var(--edge);border-radius:14px;padding:6px 10px 2px;position:relative;overflow:hidden}\n  .stage svg{display:block;width:100%;height:auto}\n  .stageLabel{position:absolute;top:10px;left:14px;font-size:11px;letter-spacing:.14em;\n    color:#5b6470;text-transform:uppercase}\n  .haloBadge{position:absolute;top:10px;right:14px;display:none;align-items:center;gap:8px;\n    font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#dfe9f7;\n    background:rgba(70,90,120,.22);border:1px solid rgba(190,215,255,.35);\n    border-radius:999px;padding:5px 12px 5px 9px;backdrop-filter:blur(2px)}\n  .haloBadge .dot{width:8px;height:8px;border-radius:50%;background:#F4F8FF;\n    box-shadow:0 0 8px 2px rgba(220,235,255,.9);flex:none}\n  .haloBadge b{font-weight:700;color:#fff}\n  .haloBadge span{color:#9fb0c6;text-transform:none;letter-spacing:.02em}\n  @media(max-width:700px){.haloBadge span{display:none}}\n  .lower{display:grid;grid-template-columns:270px 1fr;gap:14px;margin-top:14px;align-items:stretch}\n  .compactSel{display:none}\n  @media(max-width:840px){\n    .stage{padding:8px 8px 4px}\n    .stageLabel{position:static;font-size:10px;margin:0 0 6px}\n    .haloBadge{position:static;font-size:10px;padding:4px 9px;margin:0 0 6px;width:max-content}\n    .wrap{padding:6px 6px 10px !important}\n    .lower{grid-template-columns:1fr;gap:10px}\n    .cardCtl{order:1}\n    .cardColors{order:2}\n    .cardColors .cRow,.cardColors .hint{display:none}\n    .cardColors.expanded .cRow{display:block}\n    .compactSel{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n    .compactSel .sw{cursor:default}\n    .compactSel .sw:hover{transform:none}\n  }\n  .card{background:var(--panel);border:1px solid var(--edge);border-radius:14px;padding:14px}\n  .card h3{margin:0 0 10px;font-size:11.5px;letter-spacing:.16em;color:var(--dim);\n    text-transform:uppercase;font-weight:700}\n  .cRow{margin-bottom:12px}\n  .cRow .lbl{font-size:12px;color:var(--dim);margin-bottom:6px;display:flex;justify-content:space-between;align-items:center}\n  .swatches{display:flex;gap:8px;flex-wrap:wrap}\n  .sw{width:38px;height:30px;border-radius:7px;border:2px solid #2c333d;cursor:pointer;\n    position:relative;transition:transform .08s}\n  .sw:hover{transform:translateY(-1px)}\n  .sw.sel{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.25),0 0 14px rgba(255,255,255,.15)}\n  .sw.dis{opacity:.22;cursor:not-allowed}\n  .sw.none{background:repeating-linear-gradient(45deg,#1a1f26 0 6px,#12161b 6px 12px)}\n  .sw.none::after{content:\u0026quot;OFF\u0026quot;;position:absolute;inset:0;display:flex;align-items:center;\n    justify-content:center;font-size:9px;color:#6b7480;font-weight:700;letter-spacing:.05em}\n  .hint{font-size:11.5px;line-height:1.5;color:#6d7684;border-top:1px solid var(--edge);\n    padding-top:10px;margin-top:2px}\n  .hint b{color:#9aa4b2;font-weight:600}\n  .swapBtn{background:var(--panel2);border:1px solid #2c333d;color:var(--txt);border-radius:7px;\n    font-size:11px;padding:4px 9px;cursor:pointer;letter-spacing:.06em}\n  .swapBtn:hover{border-color:#4a5462}\n  .ctlWrap{display:flex;justify-content:center}\n  .ctlWrap svg{width:100%;max-width:300px;height:auto}\n  .legend{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 16px;\n    margin:12px auto 0;max-width:420px;border-top:1px solid var(--edge);padding-top:12px}\n  .legend div{display:flex;align-items:baseline;gap:8px;font-size:11.5px;line-height:1.4}\n  .legend b{color:#ffcf7d;font-weight:700;min-width:20px;flex:none}\n  .legend span{color:#7f8b9c}\n  @media(max-width:520px){.legend{grid-template-columns:1fr}}\n  .kb{cursor:pointer}\n  @keyframes ringPulse{0%,100%{stroke-opacity:.9}50%{stroke-opacity:.12}}\n  .pulseRing{fill:none;stroke:#ffb43a;stroke-width:2.5;animation:ringPulse 1.8s ease-in-out infinite;pointer-events:none}\n  @keyframes hintPulse{0%,100%{opacity:.6}50%{opacity:1}}\n  .tryHint{display:flex;justify-content:center;margin:10px 0 0}\n  .tryHint span{display:inline-flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.08em;\n    text-transform:uppercase;color:#ffcf7d;border:1px solid rgba(255,180,58,.45);border-radius:999px;\n    padding:6px 14px;animation:hintPulse 2.4s ease-in-out infinite;background:rgba(255,180,58,.07)}\n  .tryHint .dotLive{width:7px;height:7px;border-radius:50%;background:#ffb43a;\n    box-shadow:0 0 7px 2px rgba(255,180,58,.7);flex:none}\n  footer{margin-top:12px;color:#59626e;font-size:11px;letter-spacing:.04em;\n    display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\u0026quot;wrap\u0026quot;\u0026gt;\n  \u0026lt;header\u0026gt;\n    \u0026lt;div class=\u0026quot;brand\u0026quot;\u0026gt;BLACK OAK \u0026lt;span\u0026gt;LED\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;sub\u0026quot;\u0026gt;Mini Low Pro\u0026amp;trade; Emergency Bar · Interactive Demo \u0026amp;bull; \u0026lt;span id=\u0026quot;sizeLabel\u0026quot;\u0026gt;17\u0026amp;Prime;\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;sizeBtns\u0026quot; id=\u0026quot;sizeBtns\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n  \u0026lt;\/header\u0026gt;\n\n  \u0026lt;div class=\u0026quot;stage\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;stageLabel\u0026quot; id=\u0026quot;patternLabel\u0026quot;\u0026gt;Pattern 1 · Split Steady Burn\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;haloBadge\u0026quot; id=\u0026quot;haloBadge\u0026quot;\u0026gt;\u0026lt;i class=\u0026quot;dot\u0026quot;\u0026gt;\u0026lt;\/i\u0026gt;\n      \u0026lt;b\u0026gt;360\u0026amp;deg; Halo\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;\u0026amp;nbsp;scene light \u0026amp;middot; rocker down\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;svg id=\u0026quot;barSvg\u0026quot; viewBox=\u0026quot;0 0 1000 240\u0026quot; aria-label=\u0026quot;Light bar simulation\u0026quot;\u0026gt;\u0026lt;\/svg\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;tryHint\u0026quot; id=\u0026quot;tryHint\u0026quot;\u0026gt;\u0026lt;span\u0026gt;\u0026lt;i class=\u0026quot;dotLive\u0026quot;\u0026gt;\u0026lt;\/i\u0026gt;Live demo \u0026amp;middot; flip the rocker, press the button\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;lower\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;card cardColors\u0026quot; id=\u0026quot;colorCard\u0026quot;\u0026gt;\n      \u0026lt;h3\u0026gt;Select Colors\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\u0026quot;compactSel\u0026quot; id=\u0026quot;compactSel\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;cRow\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;\u0026lt;span\u0026gt;Color 1\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\u0026quot;swatches\u0026quot; id=\u0026quot;sw1\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;cRow\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;\u0026lt;span\u0026gt;Color 2 (dual color)\u0026lt;\/span\u0026gt;\n          \u0026lt;button class=\u0026quot;swapBtn\u0026quot; id=\u0026quot;swapBtn\u0026quot; title=\u0026quot;Swap Color 1 and Color 2\u0026quot;\u0026gt;\u0026amp;#8646; Swap\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\u0026quot;swatches\u0026quot; id=\u0026quot;sw2\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hint\u0026quot; id=\u0026quot;colorHint\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;card cardCtl\u0026quot;\u0026gt;\n      \u0026lt;h3\u0026gt;Socket Controller · flip the rocker \u0026amp;middot; press the button\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\u0026quot;ctlWrap\u0026quot;\u0026gt;\n        \u0026lt;svg id=\u0026quot;ctl\u0026quot; viewBox=\u0026quot;0 0 300 300\u0026quot; aria-label=\u0026quot;Socket plug controller\u0026quot;\u0026gt;\u0026lt;\/svg\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;legend\u0026quot;\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;Button\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;Next flash pattern\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;I\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;Warning flash patterns\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;O\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;Off\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;II\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;360\u0026amp;deg; Halo scene light\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;footer\u0026gt;\n    \u0026lt;div\u0026gt;BLACK OAK LED · Navigate the Night.\u0026lt;\/div\u0026gt;\n    \u0026lt;div\u0026gt;Designed and engineered in Sarasota, Florida\u0026lt;\/div\u0026gt;\n  \u0026lt;\/footer\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\u0026quot;use strict\u0026quot;;\nconst LEDCOLORS = {\n  amber:{main:\u0026quot;#ffb43a\u0026quot;, core:\u0026quot;#ffe9b0\u0026quot;, glow:\u0026quot;#ff9d00\u0026quot;, label:\u0026quot;Amber\u0026quot;},\n  white:{main:\u0026quot;#F4F8FF\u0026quot;, core:\u0026quot;#ffffff\u0026quot;, glow:\u0026quot;#cfe4ff\u0026quot;, label:\u0026quot;White\u0026quot;},\n  red:  {main:\u0026quot;#ff2d23\u0026quot;, core:\u0026quot;#ffb0a8\u0026quot;, glow:\u0026quot;#ff1400\u0026quot;, label:\u0026quot;Red\u0026quot;},\n  blue: {main:\u0026quot;#2a62ff\u0026quot;, core:\u0026quot;#b8ccff\u0026quot;, glow:\u0026quot;#0040ff\u0026quot;, label:\u0026quot;Blue\u0026quot;},\n  green:{main:\u0026quot;#19d949\u0026quot;, core:\u0026quot;#c2ffcf\u0026quot;, glow:\u0026quot;#00c832\u0026quot;, label:\u0026quot;Green\u0026quot;}\n};\n\n\/* Catalog per size, straight from the product pages.\n   singles: colors sold alone. duals: exact combos sold. *\/\nconst SIZES = {\n  \u0026quot;11\u0026quot;: {\n    label:\u0026quot;11\u0026amp;Prime;\u0026quot;, front:3, span:290, x0:355,\n    singles:[], duals:[[\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;]],\n    note:\u0026quot;The 11\u0026amp;Prime; Mini ships in Amber \u0026amp;amp; White.\u0026quot;\n  },\n  \u0026quot;17\u0026quot;: {\n    label:\u0026quot;17\u0026amp;Prime;\u0026quot;, front:4, span:390, x0:305,\n    singles:[\u0026quot;amber\u0026quot;,\u0026quot;blue\u0026quot;,\u0026quot;green\u0026quot;,\u0026quot;red\u0026quot;,\u0026quot;white\u0026quot;],\n    duals:[[\u0026quot;amber\u0026quot;,\u0026quot;blue\u0026quot;],[\u0026quot;amber\u0026quot;,\u0026quot;green\u0026quot;],[\u0026quot;amber\u0026quot;,\u0026quot;red\u0026quot;],[\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;],[\u0026quot;red\u0026quot;,\u0026quot;blue\u0026quot;],[\u0026quot;red\u0026quot;,\u0026quot;white\u0026quot;]],\n    note:\u0026quot;Every combo shown here is orderable on the 17\u0026amp;Prime; bar.\u0026quot;\n  }\n};\nlet SIZE = \u0026quot;17\u0026quot;;\n\nconst S = {\n  color1:\u0026quot;amber\u0026quot;, color2:\u0026quot;white\u0026quot;,\n  rocker:\u0026quot;up\u0026quot;,            \/\/ up = warning LEDs, mid = off, down = white halo\n  pattern:1\n};\n\nconst NS=\u0026quot;http:\/\/www.w3.org\/2000\/svg\u0026quot;;\nconst bar = document.getElementById(\u0026quot;barSvg\u0026quot;);\nlet modules = [];\nfunction el(name, attrs, parent){\n  const e=document.createElementNS(NS,name);\n  for(const k in attrs) e.setAttribute(k,attrs[k]);\n  if(parent) parent.appendChild(e);\n  return e;\n}\n\nfunction buildBar(){\n  bar.innerHTML=\u0026quot;\u0026quot;; modules=[];\n  const cfg=SIZES[SIZE];\n  const defs = el(\u0026quot;defs\u0026quot;,{},bar);\n  (()=\u0026gt;{ const f=el(\u0026quot;filter\u0026quot;,{id:\u0026quot;ledGlow\u0026quot;, x:\u0026quot;-80%\u0026quot;,y:\u0026quot;-80%\u0026quot;,width:\u0026quot;260%\u0026quot;,height:\u0026quot;260%\u0026quot;},defs);\n    el(\u0026quot;feGaussianBlur\u0026quot;,{stdDeviation:4, result:\u0026quot;b\u0026quot;},f);\n    const m=el(\u0026quot;feMerge\u0026quot;,{},f);\n    el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;b\u0026quot;},m); el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;SourceGraphic\u0026quot;},m); })();\n  (()=\u0026gt;{ const f=el(\u0026quot;filter\u0026quot;,{id:\u0026quot;haloGlow\u0026quot;, filterUnits:\u0026quot;userSpaceOnUse\u0026quot;,\n      x:\u0026quot;-120\u0026quot;,y:\u0026quot;-160\u0026quot;,width:\u0026quot;1240\u0026quot;,height:\u0026quot;560\u0026quot;},defs);\n    el(\u0026quot;feGaussianBlur\u0026quot;,{stdDeviation:11, result:\u0026quot;b\u0026quot;},f);\n    const m=el(\u0026quot;feMerge\u0026quot;,{},f);\n    el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;b\u0026quot;},m); el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;SourceGraphic\u0026quot;},m); })();\n\n  const L=cfg.x0, R=cfg.x0+cfg.span, cL=L-75, cR=R+75;\n  const G = el(\u0026quot;g\u0026quot;,{},bar);\n  const haloLayer = el(\u0026quot;g\u0026quot;,{},G);\n  const sidePaths = {\n    front:`M ${L},62 L ${R},62`,\n    back: `M ${L},178 L ${R},178`,\n    left: `M ${L},62 L ${cL},95 L ${cL},145 L ${L},178`,\n    right:`M ${R},62 L ${cR},95 L ${cR},145 L ${R},178`\n  };\n  const haloEls={};\n  for(const z in sidePaths){\n    const g=el(\u0026quot;g\u0026quot;,{filter:\u0026quot;url(#haloGlow)\u0026quot;},haloLayer);\n    [[10,.9],[26,.4],[52,.16],[88,.07]].forEach(([wd,op])=\u0026gt;{\n      el(\u0026quot;path\u0026quot;,{d:sidePaths[z], stroke:\u0026quot;#eef4ff\u0026quot;,\u0026quot;stroke-width\u0026quot;:wd,\u0026quot;stroke-opacity\u0026quot;:op,\n        fill:\u0026quot;none\u0026quot;,\u0026quot;stroke-linecap\u0026quot;:\u0026quot;round\u0026quot;,\u0026quot;stroke-linejoin\u0026quot;:\u0026quot;round\u0026quot;},g);\n    });\n    g.setAttribute(\u0026quot;visibility\u0026quot;,\u0026quot;hidden\u0026quot;);\n    haloEls[z]=g;\n  }\n  S._haloEls=haloEls;\n\n  el(\u0026quot;polygon\u0026quot;,{points:`${L},62 ${R},62 ${cR},95 ${cR},145 ${R},178 ${L},178 ${cL},145 ${cL},95`,\n    fill:\u0026quot;#15181d\u0026quot;, stroke:\u0026quot;#3a4149\u0026quot;,\u0026quot;stroke-width\u0026quot;:3},G);\n  el(\u0026quot;polygon\u0026quot;,{points:`${L+8},70 ${R-8},70 ${cR-12},99 ${cR-12},141 ${R-8},170 ${L+8},170 ${cL+12},141 ${cL+12},99`,\n    fill:\u0026quot;#0e1114\u0026quot;, stroke:\u0026quot;#22272e\u0026quot;,\u0026quot;stroke-width\u0026quot;:1},G);\n  el(\u0026quot;text\u0026quot;,{x:500,y:114,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#c9d0d9\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;17\u0026quot;,\n    \u0026quot;font-weight\u0026quot;:\u0026quot;800\u0026quot;,\u0026quot;letter-spacing\u0026quot;:\u0026quot;4\u0026quot;,\u0026quot;font-family\u0026quot;:\u0026quot;inherit\u0026quot;},G).textContent=\u0026quot;BLACK OAK\u0026quot;;\n  el(\u0026quot;text\u0026quot;,{x:500,y:130,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#4c545e\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;8\u0026quot;,\n    \u0026quot;letter-spacing\u0026quot;:\u0026quot;2\u0026quot;},G).textContent=\u0026quot;SAE W3-1 22\u0026quot;;\n\n  const ledLayer = el(\u0026quot;g\u0026quot;,{},G);\n  const N=cfg.front, h=12, gap=6;\n  const w = cfg.span\/N - gap;\n  const addMod=(zone,x,y)=\u0026gt;{\n    const g=el(\u0026quot;g\u0026quot;,{},ledLayer);\n    const lens=el(\u0026quot;rect\u0026quot;,{x,y,width:w,height:h,rx:4, fill:\u0026quot;#23282f\u0026quot;, stroke:\u0026quot;#10131a\u0026quot;,\u0026quot;stroke-width\u0026quot;:1},g);\n    const halo=el(\u0026quot;rect\u0026quot;,{x:x-6,y:y-6,width:w+12,height:h+12,rx:9, fill:\u0026quot;none\u0026quot;,opacity:0, filter:\u0026quot;url(#ledGlow)\u0026quot;},g);\n    modules.push({zone, lens, halo, px:x+w\/2});\n  };\n  const addRot=(zone,cx,cy,len,rot)=\u0026gt;{\n    const g=el(\u0026quot;g\u0026quot;,{transform:`rotate(${rot} ${cx} ${cy})`},ledLayer);\n    const lens=el(\u0026quot;rect\u0026quot;,{x:cx-len\/2,y:cy-h\/2,width:len,height:h,rx:4,\n      fill:\u0026quot;#23282f\u0026quot;,stroke:\u0026quot;#10131a\u0026quot;,\u0026quot;stroke-width\u0026quot;:1},g);\n    const halo=el(\u0026quot;rect\u0026quot;,{x:cx-len\/2-6,y:cy-h\/2-6,width:len+12,height:h+12,rx:9,\n      fill:\u0026quot;none\u0026quot;,opacity:0,filter:\u0026quot;url(#ledGlow)\u0026quot;},g);\n    modules.push({zone,lens,halo,px:cx});\n  };\n  for(let i=0;i\u0026lt;N;i++){ addMod(\u0026quot;front\u0026quot;, L+5+i*(cfg.span\/N), 52); }\n  addRot(\u0026quot;right\u0026quot;,R+34,73,64,23.7);\n  addRot(\u0026quot;right\u0026quot;,cR-4,120,44,90);\n  addRot(\u0026quot;right\u0026quot;,R+34,167,64,-23.7);\n  for(let i=N-1;i\u0026gt;=0;i--){ addMod(\u0026quot;back\u0026quot;, L+5+i*(cfg.span\/N), 176); }\n  addRot(\u0026quot;left\u0026quot;,L-34,167,64,23.7);\n  addRot(\u0026quot;left\u0026quot;,cL+4,120,44,90);\n  addRot(\u0026quot;left\u0026quot;,L-34,73,64,-23.7);\n\n  const pxs=modules.map(m=\u0026gt;m.px);\n  S._pxmin=Math.min(...pxs); S._pxmax=Math.max(...pxs);\n  const mid=(S._pxmin+S._pxmax)\/2;\n  modules.forEach(m=\u0026gt;{ m.side = m.px\u0026lt;=mid ? \u0026quot;L\u0026quot;:\u0026quot;R\u0026quot;; m.p=(m.px-S._pxmin)\/(S._pxmax-S._pxmin); });\n}\n\n\/* ---- Pattern engine. Timings measured frame-by-frame from the 17\u0026quot; socket-controller video. ---- *\/\nfunction ph(t,cyc){ return t % cyc; }\nconst PATTERNS = [\n  {name:\u0026quot;Split Steady Burn\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{           \/\/ video 11.5-16s \/ 26-37s \/ 95s-end\n    return {color: m.side===\u0026quot;L\u0026quot;?c1:c2, k:.85};\n  }},\n  {name:\u0026quot;Alternating Single Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{     \/\/ video 37-42s: A 170ms, off 230, W 200, off 240\n    const p=ph(t,840);\n    if(p\u0026lt;170) return {color:c1,k:1};\n    if(p\u0026gt;=400\u0026amp;\u0026amp;p\u0026lt;600) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Split Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{                  \/\/ video 42.5-45.8s: halves flash together, 200 on \/ 270 off\n    const p=ph(t,470);\n    if(p\u0026lt;200) return {color: m.side===\u0026quot;L\u0026quot;?c2:c1, k:1};\n    return null;\n  }},\n  {name:\u0026quot;Alternating Double Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{     \/\/ video 45.9-49s\n    const p=ph(t,1470);\n    if(p\u0026lt;130||(p\u0026gt;=200\u0026amp;\u0026amp;p\u0026lt;330)) return {color:c1,k:1};\n    if((p\u0026gt;=730\u0026amp;\u0026amp;p\u0026lt;860)||(p\u0026gt;=930\u0026amp;\u0026amp;p\u0026lt;1060)) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Slow Alternating Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{       \/\/ video 49-52s: 430 on \/ 370 off each color\n    const p=ph(t,1600);\n    if(p\u0026lt;430) return {color:c1,k:1};\n    if(p\u0026gt;=800\u0026amp;\u0026amp;p\u0026lt;1230) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Double Flash + Steady\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{        \/\/ video 52.2-55.9s: C1 double pulse, C2 400ms burn\n    const p=ph(t,1300);\n    if(p\u0026lt;200||(p\u0026gt;=270\u0026amp;\u0026amp;p\u0026lt;470)) return {color:c1,k:1};\n    if(p\u0026gt;=600\u0026amp;\u0026amp;p\u0026lt;1000) return {color:c2,k:.85};\n    return null;\n  }},\n  {name:\u0026quot;Half Ping-Pong\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{               \/\/ video 56-63s: L C1, R C1, L C2, R C2\n    const p=ph(t,1600), seg=Math.floor(p\/400), local=p%400;\n    if(local\u0026gt;=270) return null;\n    const col = seg\u0026lt;2?c1:c2, side = (seg%2===0)?\u0026quot;L\u0026quot;:\u0026quot;R\u0026quot;;\n    return m.side===side ? {color:col,k:1} : null;\n  }},\n  {name:\u0026quot;Dual Rotation\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{                \/\/ video 63-70.4s: opposite ends counter-chasing\n    const p=ph(t,1400)\/1400;\n    const d1=Math.abs(m.p-p), d2=Math.abs(m.p-((p+.5)%1));\n    if(Math.min(d1,1-d1)\u0026lt;.18) return {color:c1,k:1};\n    if(Math.min(d2,1-d2)\u0026lt;.18) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Steady + Flash Combo\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{         \/\/ video 70.4-77.5s: one half steady, other flashes; swaps\n    const swap=Math.floor(t\/3500)%2===1;\n    const steadySide = swap?\u0026quot;R\u0026quot;:\u0026quot;L\u0026quot;;\n    if(m.side===steadySide) return {color: swap?c2:c1, k:.8};\n    const p=ph(t,730);\n    if(p\u0026lt;330) return {color: swap?c1:c2, k:1};\n    return null;\n  }},\n  {name:\u0026quot;End-to-End Sweep\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{             \/\/ video 77.6-85.9s: C1 builds across, then C2\n    const cyc=1700, p=ph(t,cyc), half=cyc\/2;\n    const dirFlip=Math.floor(t\/cyc)%2===1;\n    const local=p%half, col=p\u0026lt;half?c1:c2;\n    let b;\n    if(local\u0026lt;500) b=local\/500; else if(local\u0026lt;700) b=1; else return null;\n    const pos=dirFlip?1-m.p:m.p;\n    return pos\u0026lt;=b+.002 ? {color:col,k:1} : null;\n  }}\n];\n\nfunction activeColors(){\n  const c1=S.color1, c2=S.color2||S.color1;\n  return [c1,c2];\n}\n\nlet lastLabel=\u0026quot;\u0026quot;;\nfunction render(t){\n  const halo = S.rocker===\u0026quot;down\u0026quot;;\n  const on = S.rocker===\u0026quot;up\u0026quot;;\n  const [c1,c2]=activeColors();\n  const P=PATTERNS[S.pattern-1];\n  for(const m of modules){\n    let st=null;\n    if(on) st=P.f(m,t,c1,c2);\n    else if(halo) st={color:\u0026quot;white\u0026quot;,k:.9};\n    m.cur=st;\n    if(st){ m.lastT=t; m.lastC=st.color; m.lastK=st.k; }\n    let drawC=null, drawK=0;\n    if(st){ drawC=st.color; drawK=st.k; }\n    else if(m.lastC \u0026amp;\u0026amp; (t-m.lastT)\u0026lt;70){ drawC=m.lastC; drawK=m.lastK*(1-(t-m.lastT)\/70)*.7; }\n    if(drawC){\n      const c=LEDCOLORS[drawC];\n      m.lens.setAttribute(\u0026quot;fill\u0026quot;, drawK\u0026gt;.55? c.core : c.main);\n      m.lens.setAttribute(\u0026quot;stroke\u0026quot;, c.main);\n      m.halo.setAttribute(\u0026quot;fill\u0026quot;, c.glow);\n      m.halo.setAttribute(\u0026quot;opacity\u0026quot;, (0.85*drawK).toFixed(2));\n    }else{\n      m.lens.setAttribute(\u0026quot;fill\u0026quot;,\u0026quot;#23282f\u0026quot;);\n      m.lens.setAttribute(\u0026quot;stroke\u0026quot;,\u0026quot;#10131a\u0026quot;);\n      m.halo.setAttribute(\u0026quot;opacity\u0026quot;,\u0026quot;0\u0026quot;);\n    }\n  }\n  for(const z in S._haloEls) S._haloEls[z].setAttribute(\u0026quot;visibility\u0026quot;, halo?\u0026quot;visible\u0026quot;:\u0026quot;hidden\u0026quot;);\n  const lbl = S.rocker===\u0026quot;mid\u0026quot; ? \u0026quot;Rocker centered · Off\u0026quot;\n    : S.rocker===\u0026quot;down\u0026quot; ? \u0026quot;360° Halo Scene Light · steady white\u0026quot;\n    : tourActive ? \u0026quot;Live demo · try the controller\u0026quot;\n    : `Pattern ${S.pattern} · ${P.name}`;\n  if(lbl!==lastLabel){ lastLabel=lbl; document.getElementById(\u0026quot;patternLabel\u0026quot;).textContent=lbl; }\n  document.getElementById(\u0026quot;haloBadge\u0026quot;).style.display = halo ? \u0026quot;flex\u0026quot;:\u0026quot;none\u0026quot;;\n  requestAnimationFrame(render);\n}\n\n\/* ---------------- Socket controller (replica of the plug in the video) ---------------- *\/\nconst ctl=document.getElementById(\u0026quot;ctl\u0026quot;);\nlet rockerParts={}, patternBtnG=null;\nfunction buildController(){\n  ctl.innerHTML=\u0026quot;\u0026quot;;\n  const defs=el(\u0026quot;defs\u0026quot;,{},ctl);\n  (()=\u0026gt;{ const f=el(\u0026quot;filter\u0026quot;,{id:\u0026quot;btnGlow\u0026quot;,x:\u0026quot;-40%\u0026quot;,y:\u0026quot;-40%\u0026quot;,width:\u0026quot;180%\u0026quot;,height:\u0026quot;180%\u0026quot;},defs);\n    el(\u0026quot;feGaussianBlur\u0026quot;,{stdDeviation:\u0026quot;2.2\u0026quot;,result:\u0026quot;b\u0026quot;},f);\n    const m=el(\u0026quot;feMerge\u0026quot;,{},f);\n    el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;b\u0026quot;},m); el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;SourceGraphic\u0026quot;},m); })();\n  const lg=el(\u0026quot;linearGradient\u0026quot;,{id:\u0026quot;plugBody\u0026quot;,x1:\u0026quot;0\u0026quot;,y1:\u0026quot;0\u0026quot;,x2:\u0026quot;0\u0026quot;,y2:\u0026quot;1\u0026quot;},defs);\n  el(\u0026quot;stop\u0026quot;,{offset:\u0026quot;0\u0026quot;,\u0026quot;stop-color\u0026quot;:\u0026quot;#2a2f37\u0026quot;},lg);\n  el(\u0026quot;stop\u0026quot;,{offset:\u0026quot;.5\u0026quot;,\u0026quot;stop-color\u0026quot;:\u0026quot;#171a1f\u0026quot;},lg);\n  el(\u0026quot;stop\u0026quot;,{offset:\u0026quot;1\u0026quot;,\u0026quot;stop-color\u0026quot;:\u0026quot;#0d0f12\u0026quot;},lg);\n\n  \/* socket base (the 12V outlet it plugs into) *\/\n  el(\u0026quot;ellipse\u0026quot;,{cx:150,cy:262,rx:118,ry:26,fill:\u0026quot;#0b0d10\u0026quot;,stroke:\u0026quot;#242a33\u0026quot;},ctl);\n  el(\u0026quot;ellipse\u0026quot;,{cx:150,cy:256,rx:100,ry:20,fill:\u0026quot;#10131a\u0026quot;,stroke:\u0026quot;#2b333d\u0026quot;},ctl);\n  el(\u0026quot;ellipse\u0026quot;,{cx:150,cy:254,rx:74,ry:14,fill:\u0026quot;none\u0026quot;,stroke:\u0026quot;#2a62ff\u0026quot;,\u0026quot;stroke-opacity\u0026quot;:\u0026quot;.55\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;3\u0026quot;,filter:\u0026quot;url(#btnGlow)\u0026quot;},ctl);\n\n  \/* plug barrel *\/\n  el(\u0026quot;rect\u0026quot;,{x:116,y:196,width:68,height:62,rx:14,fill:\u0026quot;url(#plugBody)\u0026quot;,stroke:\u0026quot;#000\u0026quot;},ctl);\n\n  \/* controller head *\/\n  el(\u0026quot;rect\u0026quot;,{x:70,y:26,width:160,height:184,rx:26,fill:\u0026quot;url(#plugBody)\u0026quot;,stroke:\u0026quot;#000\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;2\u0026quot;},ctl);\n  el(\u0026quot;rect\u0026quot;,{x:78,y:34,width:144,height:168,rx:20,fill:\u0026quot;none\u0026quot;,stroke:\u0026quot;#2c333d\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;1.2\u0026quot;},ctl);\n\n  \/* pattern button on top *\/\n  const pb=el(\u0026quot;g\u0026quot;,{class:\u0026quot;kb\u0026quot;,role:\u0026quot;button\u0026quot;,tabindex:\u0026quot;0\u0026quot;,\u0026quot;aria-label\u0026quot;:\u0026quot;Cycle flash pattern\u0026quot;},ctl);\n  el(\u0026quot;circle\u0026quot;,{cx:150,cy:58,r:20,fill:\u0026quot;#101318\u0026quot;,stroke:\u0026quot;#000\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;2\u0026quot;},pb);\n  const pbFace=el(\u0026quot;circle\u0026quot;,{cx:150,cy:58,r:14,fill:\u0026quot;#22262d\u0026quot;,stroke:\u0026quot;#3a414b\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;1.5\u0026quot;},pb);\n  el(\u0026quot;text\u0026quot;,{x:150,y:92,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#8a94a3\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;10\u0026quot;,\u0026quot;letter-spacing\u0026quot;:\u0026quot;1.5\u0026quot;,\u0026quot;font-weight\u0026quot;:\u0026quot;700\u0026quot;},pb).textContent=\u0026quot;PATTERN\u0026quot;;\n  pb.addEventListener(\u0026quot;click\u0026quot;,()=\u0026gt;press(\u0026quot;pattern\u0026quot;));\n  pb.addEventListener(\u0026quot;keydown\u0026quot;,e=\u0026gt;{if(e.key===\u0026quot;Enter\u0026quot;||e.key===\u0026quot; \u0026quot;){e.preventDefault();press(\u0026quot;pattern\u0026quot;);}});\n  patternBtnG={g:pb,face:pbFace};\n  S._ring=el(\u0026quot;circle\u0026quot;,{cx:150,cy:58,r:24,class:\u0026quot;pulseRing\u0026quot;},ctl);\n\n  \/* 3-position rocker *\/\n  const rx=150, ry=150, rw=56, rh=92;\n  el(\u0026quot;rect\u0026quot;,{x:rx-rw\/2-7,y:ry-rh\/2-7,width:rw+14,height:rh+14,rx:12,fill:\u0026quot;#0c0e12\u0026quot;,stroke:\u0026quot;#000\u0026quot;},ctl);\n  const zones=[\n    {pos:\u0026quot;up\u0026quot;,   y:ry-rh\/2,      lab:\u0026quot;I\u0026quot;},\n    {pos:\u0026quot;mid\u0026quot;,  y:ry-rh\/6,      lab:\u0026quot;O\u0026quot;},\n    {pos:\u0026quot;down\u0026quot;, y:ry+rh\/6,      lab:\u0026quot;II\u0026quot;}\n  ];\n  rockerParts={};\n  zones.forEach(z=\u0026gt;{\n    const g=el(\u0026quot;g\u0026quot;,{class:\u0026quot;kb\u0026quot;,role:\u0026quot;button\u0026quot;,tabindex:\u0026quot;0\u0026quot;,\u0026quot;aria-label\u0026quot;:\u0026quot;Rocker \u0026quot;+z.pos},ctl);\n    const r=el(\u0026quot;rect\u0026quot;,{x:rx-rw\/2,y:z.y,width:rw,height:rh\/3,fill:\u0026quot;#1b1f26\u0026quot;,stroke:\u0026quot;#31383f\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;1\u0026quot;},g);\n    const tx=el(\u0026quot;text\u0026quot;,{x:rx,y:z.y+rh\/6+4,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#9aa4b2\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;13\u0026quot;,\u0026quot;font-weight\u0026quot;:\u0026quot;700\u0026quot;},g);\n    tx.textContent=z.lab;\n    g.addEventListener(\u0026quot;click\u0026quot;,()=\u0026gt;press(\u0026quot;rocker_\u0026quot;+z.pos));\n    g.addEventListener(\u0026quot;keydown\u0026quot;,e=\u0026gt;{if(e.key===\u0026quot;Enter\u0026quot;||e.key===\u0026quot; \u0026quot;){e.preventDefault();press(\u0026quot;rocker_\u0026quot;+z.pos);}});\n    rockerParts[z.pos]={rect:r,text:tx};\n  });\n\n  el(\u0026quot;text\u0026quot;,{x:150,y:288,fill:\u0026quot;#59636f\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;10\u0026quot;,\u0026quot;letter-spacing\u0026quot;:\u0026quot;1.5\u0026quot;,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;},ctl).textContent=\u0026quot;12V SOCKET\u0026quot;;\n  syncRocker();\n}\nfunction syncRocker(){\n  for(const pos in rockerParts){\n    const on = S.rocker===pos;\n    rockerParts[pos].rect.setAttribute(\u0026quot;fill\u0026quot;, on? (pos===\u0026quot;mid\u0026quot;?\u0026quot;#3a414b\u0026quot;:\u0026quot;#dfe7f5\u0026quot;) : \u0026quot;#1b1f26\u0026quot;);\n    rockerParts[pos].text.setAttribute(\u0026quot;fill\u0026quot;, on? \u0026quot;#12151a\u0026quot; : \u0026quot;#9aa4b2\u0026quot;);\n    if(on) rockerParts[pos].rect.setAttribute(\u0026quot;filter\u0026quot;,\u0026quot;url(#btnGlow)\u0026quot;);\n    else rockerParts[pos].rect.removeAttribute(\u0026quot;filter\u0026quot;);\n  }\n}\nfunction press(key){\n  markInteract();\n  if(key===\u0026quot;pattern\u0026quot;){\n    if(S.rocker!==\u0026quot;up\u0026quot;){ S.rocker=\u0026quot;up\u0026quot;; }   \/\/ like the hardware: button only matters with rocker up\n    else S.pattern = S.pattern % PATTERNS.length + 1;\n    patternBtnG.face.setAttribute(\u0026quot;fill\u0026quot;,\u0026quot;#aab6c9\u0026quot;);\n    setTimeout(()=\u0026gt;patternBtnG.face.setAttribute(\u0026quot;fill\u0026quot;,\u0026quot;#22262d\u0026quot;),140);\n  }\n  if(key===\u0026quot;rocker_up\u0026quot;) S.rocker=\u0026quot;up\u0026quot;;\n  if(key===\u0026quot;rocker_mid\u0026quot;) S.rocker=\u0026quot;mid\u0026quot;;\n  if(key===\u0026quot;rocker_down\u0026quot;) S.rocker=\u0026quot;down\u0026quot;;\n  syncRocker();\n}\n\n\/* ---------------- Color selection, constrained to the catalog ---------------- *\/\nfunction catalog(){ return SIZES[SIZE]; }\nfunction validC2(c1){\n  const c=catalog(); const out=[];\n  c.duals.forEach(([a,b])=\u0026gt;{ if(a===c1) out.push(b); else if(b===c1) out.push(a); });\n  return out;\n}\nfunction allC1(){\n  const c=catalog(); const set=new Set(c.singles);\n  c.duals.forEach(([a,b])=\u0026gt;{set.add(a);set.add(b);});\n  return [\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;,\u0026quot;red\u0026quot;,\u0026quot;blue\u0026quot;,\u0026quot;green\u0026quot;].filter(x=\u0026gt;set.has(x));\n}\nfunction buildCompact(){\n  const c=document.getElementById(\u0026quot;compactSel\u0026quot;);\n  c.innerHTML=\u0026quot;\u0026quot;;\n  const mk=(col)=\u0026gt;{ const d=document.createElement(\u0026quot;div\u0026quot;); d.className=\u0026quot;sw\u0026quot;;\n    d.style.background=LEDCOLORS[col].main; d.title=LEDCOLORS[col].label; return d; };\n  const lab=document.createElement(\u0026quot;span\u0026quot;);\n  lab.style.cssText=\u0026quot;font-size:12px;color:#8a94a3\u0026quot;;\n  lab.textContent=\u0026quot;Your colors:\u0026quot;;\n  c.appendChild(lab);\n  c.appendChild(mk(S.color1));\n  if(S.color2) c.appendChild(mk(S.color2));\n  const btn=document.createElement(\u0026quot;button\u0026quot;);\n  btn.className=\u0026quot;swapBtn\u0026quot;;\n  const card=document.getElementById(\u0026quot;colorCard\u0026quot;);\n  btn.textContent = card.classList.contains(\u0026quot;expanded\u0026quot;) ? \u0026quot;Done\u0026quot; : \u0026quot;Change colors\u0026quot;;\n  btn.onclick=()=\u0026gt;{ card.classList.toggle(\u0026quot;expanded\u0026quot;); buildCompact(); };\n  c.appendChild(btn);\n}\nfunction buildSwatches(){\n  buildCompact();\n  const s1=document.getElementById(\u0026quot;sw1\u0026quot;), s2=document.getElementById(\u0026quot;sw2\u0026quot;);\n  s1.innerHTML=\u0026quot;\u0026quot;; s2.innerHTML=\u0026quot;\u0026quot;;\n  const c=catalog();\n  for(const col of allC1()){\n    const d=document.createElement(\u0026quot;div\u0026quot;);\n    d.className=\u0026quot;sw\u0026quot;+(S.color1===col?\u0026quot; sel\u0026quot;:\u0026quot;\u0026quot;);\n    d.style.background=LEDCOLORS[col].main; d.title=LEDCOLORS[col].label;\n    d.onclick=()=\u0026gt;{\n      S.color1=col;\n      const v=validC2(col);\n      if(S.color2 \u0026amp;\u0026amp; !v.includes(S.color2)) S.color2 = v.length? v[0] : null;\n      if(!S.color2 \u0026amp;\u0026amp; !c.singles.includes(col) \u0026amp;\u0026amp; v.length) S.color2=v[0];\n      buildSwatches();\n    };\n    s1.appendChild(d);\n  }\n  const v=validC2(S.color1);\n  if(c.singles.includes(S.color1)){\n    const none=document.createElement(\u0026quot;div\u0026quot;);\n    none.className=\u0026quot;sw none\u0026quot;+(S.color2===null?\u0026quot; sel\u0026quot;:\u0026quot;\u0026quot;);\n    none.title=\u0026quot;Single color\u0026quot;; none.onclick=()=\u0026gt;{S.color2=null; buildSwatches();};\n    s2.appendChild(none);\n  }\n  for(const col of [\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;,\u0026quot;red\u0026quot;,\u0026quot;blue\u0026quot;,\u0026quot;green\u0026quot;]){\n    if(col===S.color1) continue;\n    const ok=v.includes(col);\n    const d=document.createElement(\u0026quot;div\u0026quot;);\n    d.className=\u0026quot;sw\u0026quot;+(S.color2===col?\u0026quot; sel\u0026quot;:\u0026quot;\u0026quot;)+(ok?\u0026quot;\u0026quot;:\u0026quot; dis\u0026quot;);\n    d.style.background=LEDCOLORS[col].main;\n    d.title=ok? LEDCOLORS[col].label : \u0026quot;Not offered with \u0026quot;+LEDCOLORS[S.color1].label+\u0026quot; on this size\u0026quot;;\n    if(ok) d.onclick=()=\u0026gt;{ S.color2=col; buildSwatches(); };\n    s2.appendChild(d);\n  }\n  document.getElementById(\u0026quot;colorHint\u0026quot;).innerHTML =\n    catalog().note + \u0026quot; Rocker \u0026lt;b\u0026gt;up\u0026lt;\/b\u0026gt; runs the warning patterns and the button steps through them, \u0026quot; +\n    \u0026quot;exactly like the switch built into the socket plug. Rocker \u0026lt;b\u0026gt;down\u0026lt;\/b\u0026gt; is the \u0026lt;b\u0026gt;360\u0026amp;deg; Halo scene light\u0026lt;\/b\u0026gt;: \u0026quot; +\n    \u0026quot;steady white work light, a Low Pro exclusive.\u0026quot;;\n}\ndocument.getElementById(\u0026quot;swapBtn\u0026quot;).onclick=()=\u0026gt;{\n  if(!S.color2) return;\n  const a=S.color1,b=S.color2;\n  const c=catalog();\n  const ok=c.duals.some(([x,y])=\u0026gt;(x===b\u0026amp;\u0026amp;y===a)||(x===a\u0026amp;\u0026amp;y===b));\n  if(ok){ S.color1=b; S.color2=a; buildSwatches(); }\n};\n\n\/* ---------------- Size selector (prototype only; each product page pins its size) ---------------- *\/\nfunction buildSizeBtns(){\n  const holder=document.getElementById(\u0026quot;sizeBtns\u0026quot;);\n  holder.innerHTML=\u0026quot;\u0026quot;;\n  for(const s in SIZES){\n    const b=document.createElement(\u0026quot;button\u0026quot;);\n    b.textContent=s+'\u0026quot;'; b.className=SIZE===s?\u0026quot;on\u0026quot;:\u0026quot;\u0026quot;;\n    b.onclick=()=\u0026gt;{ SIZE=s; applySize(); };\n    holder.appendChild(b);\n  }\n}\nfunction applySize(){\n  document.getElementById(\u0026quot;sizeLabel\u0026quot;).innerHTML=SIZES[SIZE].label;\n  const c=catalog();\n  \/* prefer amber\/white, the house default, when the size offers it *\/\n  const pref=c.duals.find(([a,b])=\u0026gt;(a===\u0026quot;amber\u0026quot;\u0026amp;\u0026amp;b===\u0026quot;white\u0026quot;)||(a===\u0026quot;white\u0026quot;\u0026amp;\u0026amp;b===\u0026quot;amber\u0026quot;));\n  const firstDual=pref||c.duals[0];\n  S.color1=firstDual?\u0026quot;amber\u0026quot;:(c.singles[0]||\u0026quot;amber\u0026quot;);\n  if(firstDual\u0026amp;\u0026amp;!firstDual.includes(\u0026quot;amber\u0026quot;)) S.color1=firstDual[0];\n  S.color2=firstDual?(firstDual.find(x=\u0026gt;x!==S.color1)||null):null;\n  S.pattern=1;\n  buildBar(); buildSwatches(); buildSizeBtns();\n}\n\n\/* ---------------- Attract mode ---------------- *\/\nlet interacted=false, idleTimer=null, tourTimer=null, tourActive=false;\nfunction markInteract(){\n  if(interacted) return;\n  interacted=true;\n  if(tourActive){ tourActive=false; S.pattern=1; }\n  clearTimeout(tourTimer); clearTimeout(idleTimer);\n  const h=document.getElementById(\u0026quot;tryHint\u0026quot;);\n  if(h){ h.style.transition=\u0026quot;opacity .5s\u0026quot;; h.style.opacity=\u0026quot;0\u0026quot;; setTimeout(()=\u0026gt;h.remove(),600); }\n  if(S._ring) S._ring.remove();\n}\nfunction attractSweep(){\n  if(interacted||tourActive) return;\n  tourActive=true;\n  const prev=S.pattern; S.pattern=10;      \/\/ End-to-End Sweep as the attract animation\n  tourTimer=setTimeout(()=\u0026gt;{ if(tourActive){ tourActive=false; S.pattern=prev; } scheduleIdle(); }, 3600);\n}\nfunction scheduleIdle(){\n  if(interacted) return;\n  clearTimeout(idleTimer);\n  idleTimer=setTimeout(attractSweep, 18000);\n}\n(function(){\n  let fired=false;\n  const start=()=\u0026gt;{ if(!fired){ fired=true; setTimeout(attractSweep, 700); } };\n  if(window.IntersectionObserver){\n    new IntersectionObserver((es,obs)=\u0026gt;{\n      if(es.some(e=\u0026gt;e.isIntersecting)){ start(); obs.disconnect(); }\n    },{threshold:.5}).observe(document.querySelector(\u0026quot;.stage\u0026quot;));\n  } else start();\n})();\n\n\/* ---------------- Boot + embed plumbing ---------------- *\/\nbuildController();\napplySize();\nrequestAnimationFrame(render);\n\n(function(){\n  const embedded = (window!==parent);\n  if(embedded){\n    document.querySelector(\u0026quot;header\u0026quot;).style.display=\u0026quot;none\u0026quot;;\n    document.querySelector(\u0026quot;footer\u0026quot;).style.display=\u0026quot;none\u0026quot;;\n    document.getElementById(\u0026quot;sizeBtns\u0026quot;).style.display=\u0026quot;none\u0026quot;;\n    if(window.innerWidth\u0026gt;840) document.querySelector(\u0026quot;.wrap\u0026quot;).style.padding=\u0026quot;10px 12px 14px\u0026quot;;\n  }\n  const report=()=\u0026gt;{ try{\n    parent.postMessage({type:\u0026quot;lowpro-player-height\u0026quot;,\n      height: document.querySelector(\u0026quot;.wrap\u0026quot;).scrollHeight+8}, \u0026quot;*\u0026quot;);\n  }catch(e){} };\n  if(window.ResizeObserver) new ResizeObserver(report).observe(document.querySelector(\u0026quot;.wrap\u0026quot;));\n  window.addEventListener(\u0026quot;load\u0026quot;,report); window.addEventListener(\u0026quot;pageshow\u0026quot;,report);\n  setTimeout(report,400); setTimeout(report,1500);\n  let n=0; const iv=setInterval(()=\u0026gt;{ report(); if(++n\u0026gt;10) clearInterval(iv); },1200);\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;\n\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.lowpro-frame{height:775px}\n@media(max-width:840px){\n  .lowpro-cta{display:none}\n  .lowpro-frame{height:790px}\n}\n\u003c\/style\u003e\n\u003cscript\u003e\nwindow.addEventListener(\"message\",function(e){\n  if(e.data \u0026\u0026 e.data.type===\"lowpro-player-height\"){\n    var f=document.getElementById(\"lowpro-player-frame\");\n    if(f \u0026\u0026 e.data.height\u003e200) f.style.height=(e.data.height+4)+\"px\";\n  }\n});\n\u003c\/script\u003e\n\u003cdiv style=\"height:28px;\"\u003e \u003c\/div\u003e\n\u003c!-- Intro Section --\u003e\n\u003cp\u003e\u003cstrong\u003eBuilt for emergency response teams and public safety professionals, this high-intensity LED warning light bar delivers uncompromising performance in a sleek, durable design.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003eThe Black Oak Low Pro Emergency Series Light Bar is engineered for maximum visibility, reliability, and user control. With ultra-bright LEDs, multiple flash patterns, and a rugged housing, this bar ensures your presence is known in any emergency situation—day or night, rain or shine.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003eBuilt to withstand the demands of high-speed response, off-road utility, or work site visibility, this low-profile bar features a streamlined, aerodynamic frame and a universal mounting system to ensure easy installation on any vehicle. Whether you're outfitting a patrol car, fire unit, or utility truck, this bar delivers dependable performance where it matters most.\u003c\/p\u003e\n\u003cbr\u003e\n\u003c!-- TRUST STRIP --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Screenshot_2026-07-21_at_9.31.14_AM.png?v=1784641940\" alt=\"SAE J845 Certified, SAE J595 Class 1, IP69K Waterproof, Lifetime Warranty, -40F to +145F Rated, 50,000 Hour LEDs\" style=\"width:100%;display:block;border-radius:10px;\"\u003e\u003c\/p\u003e\n\u003c!-- SIZE SELECTOR --\u003e\n\u003cdiv style=\"margin:4px 0 2px;\"\u003e\n\u003cp style=\"margin:0 0 8px;font-weight:600;font-size:15px;\"\u003eAvailable sizes:\u003c\/p\u003e\n\u003ca href=\"\/products\/11-mini-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e11\"\u003c\/a\u003e\n\u003cspan style=\"display:inline-block;background:#FFB300;color:#111;font-weight:700;padding:8px 14px;border-radius:8px;margin:0 6px 8px 0;font-size:15px;\"\u003e17\"\u003c\/span\u003e\n\u003ca href=\"\/products\/new-30-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e30\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-43-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e43\"\u003c\/a\u003e\n\u003ca href=\"\/products\/low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e49\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-55-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e55\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-61-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e61\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-68-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e68\"\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\n\u003c!-- Collapsable Sections --\u003e\n\u003cstyle\u003e\n#MainContent details {\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  margin-bottom: 16px;\n  overflow: hidden;\n  background: #fff;\n  font-family: Arial, sans-serif;\n}\n#MainContent details summary {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  cursor: pointer;\n  padding: 14px 18px;\n  font-weight: 600;\n  font-size: 18px;\n  list-style: none;\n  background-color: #f9f9f9;\n  border-bottom: 1px solid #e0e0e0;\n  position: relative;\n}\n#MainContent details[open] summary {\n  background-color: #f1f1f1;\n}\n#MainContent details summary::after {\n  content: '+';\n  font-size: 20px;\n  font-weight: bold;\n  transition: transform 0.3s ease;\n}\n#MainContent details[open] summary::after {\n  content: '−';\n}\n#MainContent details .content {\n  padding: 16px 20px;\n  font-size: 16px;\n  line-height: 1.6;\n}\n\u003c\/style\u003e\n\u003cdetails\u003e\n\u003csummary\u003eFeatures\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003eLifetime Warranty\u003c\/li\u003e\n\u003cli\u003eSAE J845 Class 1 Certified\u003c\/li\u003e\n\u003cli\u003e360° visibility with dual-color ultra-bright LEDs\u003c\/li\u003e\n\u003cli\u003eSlim Low Profile design\u003c\/li\u003e\n\u003cli\u003eUp to 45 flash patterns with memory recall\u003c\/li\u003e\n\u003cli\u003eRugged, waterproof housing (IP69K rated)\u003c\/li\u003e\n\u003cli\u003eIntegrated controller with pattern cycling, cruise mode, and cut-off\n\u003cul\u003e\n\u003cli\u003eNote - this is built into the back of the \u003cspan style=\"text-decoration: underline;\"\u003esocket plug\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003eThis bar \u003cspan style=\"text-decoration: underline;\"\u003edoes not\u003c\/span\u003e come with a standard controller!\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIn the Box\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cb\u003eLow Pro Light Bar\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eWiring\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eStandard Feet\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eJamb Brackets\u003c\/b\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- COMPLIANCE SECTION --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCompliance \u0026amp; Certifications\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cp\u003e\u003cstrong\u003eMeets the standards your department requires.\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003eCertification \u0026amp; Compliance\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J845\u003c\/th\u003e\n\u003ctd\u003e360° warning lamp photometric standard for light bars and beacons\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J595 Class 1\u003c\/th\u003e\n\u003ctd\u003eHighest intensity class — approved for primary emergency vehicles (police, fire, EMS)\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eIP69K\u003c\/th\u003e\n\u003ctd\u003eSealed against high-pressure washdown, salt, dust, and submersion\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRated\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Range\u003c\/th\u003e\n\u003ctd\u003eExtreme-climate duty\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e-40°F to +145°F\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDuty Life\u003c\/th\u003e\n\u003ctd\u003eContinuous-duty LED modules\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50,000 hours\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"font-size:13px;color:#666;\"\u003e\u003cem\u003eWarning-equipment regulations vary by state and jurisdiction. Verify color and mounting requirements with your local authority. Spec sheet PDF and certification documentation available on request for procurement offices.\u003c\/em\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- Image + Text Alternating Section --\u003e\n\u003cstyle\u003e\n.text-image-wrap {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n.text-image-wrap.text-image-right {\n  flex-direction: row-reverse;\n}\n.text-image-wrap .image-wrap {\n  flex: 1;\n  max-width: 500px;\n}\n.text-image-wrap .image-wrap img {\n  width: 100%;\n  height: auto;\n  max-height: 300px; \n  display: block;\n  object-fit: contain; \n}\n.text-image-wrap .text-wrap {\n  flex: 1;\n  min-width: 300px;\n}\n\u003c\/style\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/255283_7703341170749_330031d5_da20_475f_887e_f1269d2ad248_1.jpg?v=1763495670\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eEmergency Bar + Work Light\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eGet full 360° white-light illumination at the touch of a button. Perfect for reverse lighting, scene lighting, or any situation where you need powerful all-around visibility. It's a true dual-purpose feature you won't find on most emergency bars — and it comes standard on every one of ours.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Low_Pro_Emergency_Bar_SAE_graphics.jpg?v=1758041472\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eBuilt Tough for Any Environment\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eIP69K-rated waterproof housing and reinforced aluminum construction stand up to rain, snow, mud, and dust—ideal for police, fire, tow, or off-road response vehicles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/DSC00223.jpg?v=1754512314\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eFull 360° Warning Visibility\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003ePacked with high-output dual-color LEDs and side modules, this bar delivers all-angle visibility—ensuring you're seen from every direction, even in chaotic scenes or inclement weather.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE_-_Driver_Side_Angle.jpg?v=1761226316\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eSlim, Low-Profile Design\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eEngineered to minimize wind resistance and visual bulk, this light bar features a sleek, aerodynamic frame that hugs your vehicle's roofline. The low-profile housing not only enhances fuel efficiency but also delivers a clean, professional look without compromising brightness or performance.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\n\u003cp\u003e\u003cvideo width=\"100%\" height=\"auto\" muted=\"\" autoplay=\"autoplay\" loop=\"loop\" playsinline=\"\" controls=\"controls\"\u003e\u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/4ec9ce848f5e4d2d8083da9daf4dbe78.mp4\" type=\"video\/mp4\"\u003eYour browser does not support the video tag.\u003c\/source\u003e\u003c\/video\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eUp to 45 Flash Patterns with Smart Memory\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eChoose from up to 45 user-selectable flash patterns to fit any scenario. Built-in memory recall stores your last used setting for consistent deployment every time.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HERO BANNER --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/d8j0ntlcm91z4.cloudfront.net\/user_3G9nKxyaQsdrPdDsxWr4EcSl5FL\/hf_20260715_201038_0803a0cd-07a6-4508-9c7a-50d0230a94e3.png\" alt=\"Built to Code. Backed for Life. SAE J845 and J595 Class 1 compliant, IP69K sealed, lifetime warranty\" style=\"width:100%;display:block;border-radius:10px;\"\u003e\u003c\/p\u003e\n\u003cbr\u003e\n\u003c!-- FLEET BLOCK --\u003e\n\u003cdiv style=\"padding:8px 0;margin:0 0 8px;\"\u003e\n\u003ch3 style=\"margin:0 0 8px;\"\u003eOutfitting a Fleet?\u003c\/h3\u003e\n\u003cp style=\"margin:0 0 14px;font-size:16px;line-height:1.6;\"\u003eVolume pricing on 5+ units, department POs accepted, W-9 on file, and spec sheets ready for your procurement office. From single patrol vehicles to full county fleets.\u003c\/p\u003e\n\u003ca href=\"\/pages\/fleet-pricing\" style=\"display:inline-block;background:#FFB300;color:#111;font-weight:700;padding:12px 22px;border-radius:8px;text-decoration:none;\"\u003eRequest Fleet Pricing\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Dimension --\u003e\u003c!-- Specs --\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Black_Oak_-_Low_Pro_Emergency_Bar_-_All_Dimensions.jpg?v=1762971573\"\u003e\u003c\/p\u003e\n\u003ch5\u003eSpecs\u003c\/h5\u003e\n\u003cstyle\u003e\n  table.spec-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 20px 0;\n    font-size: 15px;\n  }\n  table.spec-table th, table.spec-table td {\n    border: 1px solid #ccc;\n    padding: 10px;\n    text-align: left;\n  }\n  table.spec-table th {\n    background-color: #f7f7f7;\n    font-weight: 600;\n    width: 30%;\n  }\n  table.spec-table tr:hover {\n    background-color: #f2f2f2;\n  }\n  table.spec-table thead th {\n    background-color: #222;\n    color: #fff;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    text-align: center;\n  }\n\u003c\/style\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"2\"\u003ePower \u0026amp; Performance\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Wattage\u003c\/th\u003e\n\u003ctd\u003e168\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Amp Draw\u003c\/th\u003e\n\u003ctd\u003e13\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Voltage\u003c\/th\u003e\n\u003ctd\u003e10-30V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRaw Lumens\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Diode Quantity\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Chip\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBeam Pattern\u003c\/th\u003e\n\u003ctd\u003eWide Angle\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCertificate\u003c\/th\u003e\n\u003ctd\u003eSAE J845 \u0026amp; SAE J595 Class 1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Single Color\u003c\/th\u003e\n\u003ctd\u003e15\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Dual Color\u003c\/th\u003e\n\u003ctd\u003e45 (15 Color 1 \/ 15 Color 2 \/ 15 Combo)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"2\"\u003eDurability \u0026amp; Lifespan\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLife Expectancy\u003c\/th\u003e\n\u003ctd\u003e50,000 Hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Temp\u003c\/th\u003e\n\u003ctd\u003e-40° to 145° F\u003cbr\u003e-40° to 62° C\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWaterproof Rating\u003c\/th\u003e\n\u003ctd\u003eIP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003eLimited Lifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGuarantee\u003c\/th\u003e\n\u003ctd\u003e30 Day Money Back\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"2\"\u003eWiring \u0026amp; Installation\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eCord Length From Light\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Included?\u003c\/th\u003e\n\u003ctd\u003eYes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Length\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Gauge\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFuse Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eConnector Type\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHole Size for Controller\u003c\/th\u003e\n\u003ctd\u003e\u003cbr\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMounting Bolt Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"2\"\u003eGeneral\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSKU\u003c\/th\u003e\n\u003ctd\u003eLP-E17\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch5\u003eDimensions\u003c\/h5\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Black_Oak_-_Low_Pro_Emergency_Bar_-_17_Inch_Dimensions_cd599dcc-36bf-40dd-8ca3-e3c397f939e8.jpg?v=1762971479\"\u003e\u003c\/p\u003e\n\u003ch5\u003eFAQ\u003c\/h5\u003e\n\u003cp\u003e\u003cstrong\u003eWhat voltage and control systems does this light bar support?\u003c\/strong\u003e\u003cbr\u003eThis light bar operates on a 12 V–24 V DC power system and can be used with either push-button or wireless controllers. It's compatible with standard vehicle electrical systems, making installation straightforward for both fleet and individual applications.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow durable is this light bar in harsh environments?\u003c\/strong\u003e\u003cbr\u003eThe Low Pro Emergency Light Bar is built with a rugged aluminum housing, sealed to an IP69K rating and tested to resist corrosion, vibration, and high-pressure water ingress. It's designed for demanding conditions—whether roadside, rescue, or commercial use—so you can rely on consistent performance when it counts.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat beam patterns and flash modes are included?\u003c\/strong\u003e\u003cbr\u003eUp to 45 flash patterns are built into the unit—including warning, hazard, and full-output flasher modes—with memory recall so your last setting is retained even after power loss. You'll also find low-profile steady-burn mode useful for scene lighting and standby operations.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIs the light bar legal for use on public roads and emergency vehicles?\u003c\/strong\u003e\u003cbr\u003eYes. The unit meets SAE J595 Class 1 and other relevant emergency lighting standards for warning applications. However, regulations vary by jurisdiction, so we recommend checking your local laws before installation to ensure compliance with mounting height, color, and flash pattern requirements.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat's covered by the warranty?\u003c\/strong\u003e\u003cbr\u003eOur industry-leading lifetime warranty covers manufacturing defects, driver failures, and LED module performance. It does not cover damage caused by improper installation, extreme overuse beyond defined duty cycles, or wiring issues. For full warranty terms, please refer to our Warranty \u0026amp; Returns page.\u003c\/p\u003e","brand":"Black Oak LED","offers":[{"title":"Amber \/ Magnet","offer_id":42583918968893,"sku":"LP-E17-AW","price":349.37,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack (X2)","offer_id":42583919001661,"sku":"LP-E17-AW","price":374.37,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet","offer_id":42590511628349,"sku":"LP-E17-AB","price":368.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack (X2)","offer_id":42590511661117,"sku":"LP-E17-AB","price":393.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet","offer_id":42590511693885,"sku":"LP-E17-AG","price":368.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack (X2)","offer_id":42590511726653,"sku":"LP-E17-AG","price":393.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet","offer_id":43482672496701,"sku":"LP-E17-AR","price":368.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack (X2)","offer_id":43482672529469,"sku":"LP-E17-AR","price":393.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet","offer_id":42583919067197,"sku":"LP-E17-AW","price":368.12,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack (X2)","offer_id":42583919099965,"sku":"LP-E17-AW","price":393.12,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet","offer_id":42583919165501,"sku":"LP-E17-AB","price":349.37,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack (X2)","offer_id":42583919198269,"sku":"LP-E17-AB","price":374.37,"currency_code":"USD","in_stock":true},{"title":"Green \/ Magnet","offer_id":42590511759421,"sku":"LP-E17-AG","price":349.37,"currency_code":"USD","in_stock":true},{"title":"Green \/ Headache Rack (X2)","offer_id":42590511792189,"sku":"LP-E17-AG","price":374.37,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet","offer_id":42583919263805,"sku":"LP-E17-RB","price":368.12,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack (X2)","offer_id":42583919296573,"sku":"LP-E17-RB","price":393.12,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet","offer_id":42583919362109,"sku":"LP-E17-RW","price":349.37,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack (X2)","offer_id":42583919394877,"sku":"LP-E17-RW","price":374.37,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet","offer_id":42583919460413,"sku":"LP-E17-RW","price":368.12,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack (X2)","offer_id":42583919493181,"sku":"LP-E17-RW","price":393.12,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet","offer_id":42583919558717,"sku":"LP-E17-AW","price":349.37,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack (X2)","offer_id":42583919591485,"sku":"LP-E17-AW","price":374.37,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE-17-inch-emergency-light-bar.png?v=1788466003"},{"product_id":"new-30-low-pro-emergency-light-bar","title":"30\" Low Pro Emergency Light Bar","description":"\u003c!-- LOWPRO INTERACTIVE PLAYER (test embed) --\u003e\n\u003cdiv id=\"lowpro-player-block\" style=\"margin:0 0 26px;\"\u003e\n\u003cdiv class=\"lowpro-cta\"\u003e\n\u003ch2 style=\"margin:0 0 4px;font-size:24px;line-height:1.25;\"\u003eTake the Controls: Try This Light Bar Live\u003c\/h2\u003e\n\u003cp style=\"margin:0 0 12px;font-size:15px;line-height:1.5;\"\u003ePick your colors, run the flash patterns, sweep the traffic advisor, and switch on the 360° Halo scene light, exactly like the controller in the box. Every module on a dual-color bar can show either color.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ciframe id=\"lowpro-player-frame\" class=\"lowpro-frame\" title=\"Low Pro Emergency Bar interactive demo\" style=\"width:100%;border:0;display:block;border-radius:16px;background:#0a0c0f;\" srcdoc='\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Black Oak LED · Low Pro Emergency Bar Interactive Demo\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n  :root{\n    --bg:#0a0c0f; --panel:#111418; --panel2:#161a20; --edge:#242a33;\n    --txt:#e8ecf2; --dim:#8a94a3; --white-led:#F4F8FF; --navy:#0B1B2B; --accent:#C8892A;\n  }\n  *{box-sizing:border-box; -webkit-tap-highlight-color:transparent}\n  html,body{margin:0;padding:0;background:var(--bg);color:var(--txt);\n    font-family:\"Segoe UI\",system-ui,-apple-system,Roboto,Arial,sans-serif;}\n  .wrap{max-width:1100px;margin:0 auto;padding:14px 16px 20px;}\n  header{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:6px}\n  .brand{font-weight:800;letter-spacing:.18em;font-size:19px;white-space:nowrap}\n  .brand span{color:var(--dim);font-weight:600}\n  .sub{color:var(--dim);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}\n  .stage{background:radial-gradient(ellipse at 50% 30%, #14181e 0%, #0b0d11 70%);\n    border:1px solid var(--edge);border-radius:14px;padding:6px 10px 2px;position:relative;overflow:hidden}\n  .stage svg{display:block;width:100%;height:auto}\n  .stageLabel{position:absolute;top:10px;left:14px;font-size:11px;letter-spacing:.14em;\n    color:#5b6470;text-transform:uppercase}\n  .haloBadge{position:absolute;top:10px;right:14px;display:none;align-items:center;gap:8px;\n    font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#dfe9f7;\n    background:rgba(70,90,120,.22);border:1px solid rgba(190,215,255,.35);\n    border-radius:999px;padding:5px 12px 5px 9px;backdrop-filter:blur(2px)}\n  .haloBadge .dot{width:8px;height:8px;border-radius:50%;background:#F4F8FF;\n    box-shadow:0 0 8px 2px rgba(220,235,255,.9);flex:none}\n  .haloBadge b{font-weight:700;color:#fff}\n  .haloBadge span{color:#9fb0c6;text-transform:none;letter-spacing:.02em}\n  @media(max-width:700px){.haloBadge span{display:none}}\n  .lower{display:grid;grid-template-columns:270px 1fr;gap:14px;margin-top:14px;align-items:stretch}\n  .compactSel{display:none}\n  @media(max-width:840px){\n    .stage{padding:8px 8px 4px}\n    .stageLabel{position:static;font-size:10px;margin:0 0 6px}\n    .haloBadge{position:static;font-size:10px;padding:4px 9px;margin:0 0 6px;width:max-content}\n    .wrap{padding:6px 6px 10px !important}\n    .lower{grid-template-columns:1fr;gap:10px}\n    .cardCtl{order:1}\n    .cardColors{order:2}\n    .cardColors .cRow,.cardColors .hint{display:none}\n    .cardColors.expanded .cRow{display:block}\n    .compactSel{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n    .compactSel .sw{cursor:default}\n    .compactSel .sw:hover{transform:none}\n  }\n  .card{background:var(--panel);border:1px solid var(--edge);border-radius:14px;padding:14px}\n  .card h3{margin:0 0 10px;font-size:11.5px;letter-spacing:.16em;color:var(--dim);\n    text-transform:uppercase;font-weight:700}\n  .cRow{margin-bottom:12px}\n  .cRow .lbl{font-size:12px;color:var(--dim);margin-bottom:6px;display:flex;justify-content:space-between;align-items:center}\n  .swatches{display:flex;gap:8px;flex-wrap:wrap}\n  .sw{width:38px;height:30px;border-radius:7px;border:2px solid #2c333d;cursor:pointer;\n    position:relative;transition:transform .08s}\n  .sw:hover{transform:translateY(-1px)}\n  .sw.sel{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.25),0 0 14px rgba(255,255,255,.15)}\n  .sw.none{background:repeating-linear-gradient(45deg,#1a1f26 0 6px,#12161b 6px 12px)}\n  .sw.none::after{content:\"OFF\";position:absolute;inset:0;display:flex;align-items:center;\n    justify-content:center;font-size:9px;color:#6b7480;font-weight:700;letter-spacing:.05em}\n  .swapBtn{background:var(--panel2);border:1px solid #2c333d;color:var(--txt);border-radius:7px;\n    font-size:11px;padding:4px 9px;cursor:pointer;letter-spacing:.06em}\n  .swapBtn:hover{border-color:#4a5462}\n  .hint{font-size:11.5px;line-height:1.5;color:#6d7684;border-top:1px solid var(--edge);\n    padding-top:10px;margin-top:2px}\n  .hint b{color:#9aa4b2;font-weight:600}\n  .ctlWrap{display:flex;justify-content:center}\n  .ctlWrap svg{width:100%;max-width:560px;height:auto}\n  .kb{cursor:pointer}\n  .kb rect.face,.kb circle.face,.kb path.face{fill:#20242b;stroke:#0c0e11;stroke-width:1.5;transition:fill .1s}\n  .kb:hover rect.face,.kb:hover circle.face,.kb:hover path.face{fill:#2e3641}\n  @keyframes ringPulse{0%,100%{stroke-opacity:.9}50%{stroke-opacity:.12}}\n  .pulseRing{fill:none;stroke:#ffb43a;stroke-width:2.5;animation:ringPulse 1.8s ease-in-out infinite;pointer-events:none}\n  @keyframes hintPulse{0%,100%{opacity:.6}50%{opacity:1}}\n  .tryHint{display:flex;justify-content:center;margin:10px 0 0}\n  .tryHint span{display:inline-flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.08em;\n    text-transform:uppercase;color:#ffcf7d;border:1px solid rgba(255,180,58,.45);border-radius:999px;\n    padding:6px 14px;animation:hintPulse 2.4s ease-in-out infinite;background:rgba(255,180,58,.07)}\n  .tryHint .dotLive{width:7px;height:7px;border-radius:50%;background:#ffb43a;\n    box-shadow:0 0 7px 2px rgba(255,180,58,.7);flex:none}\n  .kb.lit rect.face,.kb.lit circle.face,.kb.lit path.face{fill:#dfe7f5}\n  .kb.lit text{fill:#20242b;font-weight:600}\n  .kb:active rect.face,.kb:active circle.face,.kb:active path.face{fill:#aab6c9}\n  .kb.lit{filter:url(#btnGlow)}\n  .kb text{fill:#c7cdd6;font-size:11px;text-anchor:middle;pointer-events:none;user-select:none}\n  footer{margin-top:12px;color:#59626e;font-size:11px;letter-spacing:.04em;\n    display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}\n  footer a{color:#7d8794;text-decoration:none}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\"wrap\"\u0026gt;\n  \u0026lt;header\u0026gt;\n    \u0026lt;div class=\"brand\"\u0026gt;BLACK OAK \u0026lt;span\u0026gt;LED\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\"sub\"\u0026gt;Low Pro\u0026amp;trade; Emergency Bar · Interactive Demo \u0026amp;bull; 30\u0026amp;Prime;\u0026lt;\/div\u0026gt;\n  \u0026lt;\/header\u0026gt;\n\n  \u0026lt;div class=\"stage\"\u0026gt;\n    \u0026lt;div class=\"stageLabel\" id=\"patternLabel\"\u0026gt;Pattern 1 · Single Flash\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\"haloBadge\" id=\"haloBadge\"\u0026gt;\u0026lt;i class=\"dot\"\u0026gt;\u0026lt;\/i\u0026gt;\n      \u0026lt;b\u0026gt;360\u0026amp;deg; Halo\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;\u0026amp;nbsp;scene light \u0026amp;middot; runs with or without the flashers\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;svg id=\"barSvg\" viewBox=\"0 0 1000 240\" aria-label=\"Light bar simulation\"\u0026gt;\u0026lt;\/svg\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\"tryHint\" id=\"tryHint\"\u0026gt;\u0026lt;span\u0026gt;\u0026lt;i class=\"dotLive\"\u0026gt;\u0026lt;\/i\u0026gt;Live demo \u0026amp;middot; try the controller buttons\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\"lower\"\u0026gt;\n    \u0026lt;div class=\"card cardColors\" id=\"colorCard\"\u0026gt;\n      \u0026lt;h3\u0026gt;Select Colors\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\"compactSel\" id=\"compactSel\"\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\"cRow\"\u0026gt;\n        \u0026lt;div class=\"lbl\"\u0026gt;\u0026lt;span\u0026gt;Color 1\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\"swatches\" id=\"sw1\"\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\"cRow\"\u0026gt;\n        \u0026lt;div class=\"lbl\"\u0026gt;\u0026lt;span\u0026gt;Color 2 (dual color)\u0026lt;\/span\u0026gt;\n          \u0026lt;button class=\"swapBtn\" id=\"swapBtn\" title=\"Swap Color 1 and Color 2\"\u0026gt;\u0026amp;#8646; Swap\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\"swatches\" id=\"sw2\"\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\"hint\"\u0026gt;\n        Every LED module on the Low Pro can display \u0026lt;b\u0026gt;either\u0026lt;\/b\u0026gt; selected color:\n        pick two colors and each module switches between them.\n        The right-hand cluster runs the \u0026lt;b\u0026gt;360\u0026amp;deg; Halo scene light\u0026lt;\/b\u0026gt;, a Low Pro\n        exclusive: it floods the area around the vehicle with steady work light,\n        with or without the warning flashers running. Try the \u0026lt;b\u0026gt;White\u0026lt;\/b\u0026gt; button.\n      \u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\"card cardCtl\"\u0026gt;\n      \u0026lt;h3\u0026gt;Controller · press the buttons\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\"ctlWrap\"\u0026gt;\n        \u0026lt;svg id=\"ctl\" viewBox=\"0 0 560 300\" aria-label=\"Controller keypad\"\u0026gt;\u0026lt;\/svg\u0026gt;\n      \u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;footer\u0026gt;\n    \u0026lt;div\u0026gt;BLACK OAK LED · Navigate the Night.\u0026lt;\/div\u0026gt;\n    \u0026lt;div\u0026gt;Designed and engineered in Sarasota, Florida\u0026lt;\/div\u0026gt;\n  \u0026lt;\/footer\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\"use strict\";\nconst LEDCOLORS = {\n  amber:{main:\"#ffb43a\", core:\"#ffe9b0\", glow:\"#ff9d00\", label:\"Amber\"},\n  white:{main:\"#F4F8FF\", core:\"#ffffff\", glow:\"#cfe4ff\", label:\"White\"},\n  red:  {main:\"#ff2d23\", core:\"#ffb0a8\", glow:\"#ff1400\", label:\"Red\"},\n  blue: {main:\"#2a62ff\", core:\"#b8ccff\", glow:\"#0040ff\", label:\"Blue\"},\n  green:{main:\"#19d949\", core:\"#c2ffcf\", glow:\"#00c832\", label:\"Green\"}\n};\nconst HALO = {main:\"#F4F8FF\", core:\"#ffffff\", glow:\"#dcebff\"};\n\nconst S = {\n  color1:\"amber\", color2:\"white\",\n  c1on:true, c2on:false,\n  zones:{front:true, back:true, left:true, right:true},\n  halo:{front:false, back:false, left:false, right:false},\n  pattern:1,\n  ta:null,\n  cruise:false, random:false, dim50:false, autoSensor:false,\n  indicatorOff:false, favorite:1,\n  randTimer:0, randPat:1\n};\n\nconst NS=\"http:\/\/www.w3.org\/2000\/svg\";\nconst bar = document.getElementById(\"barSvg\");\nconst modules = [];\n\nfunction el(name, attrs, parent){\n  const e=document.createElementNS(NS,name);\n  for(const k in attrs) e.setAttribute(k,attrs[k]);\n  if(parent) parent.appendChild(e);\n  return e;\n}\n\nfunction buildBar(){\n  const defs = el(\"defs\",{},bar);\n  const mkGlow=(id,dev)=\u0026gt;{\n    const f=el(\"filter\",{id, x:\"-80%\",y:\"-80%\",width:\"260%\",height:\"260%\"},defs);\n    el(\"feGaussianBlur\",{stdDeviation:dev, result:\"b\"},f);\n    const m=el(\"feMerge\",{},f);\n    el(\"feMergeNode\",{in:\"b\"},m); el(\"feMergeNode\",{in:\"SourceGraphic\"},m);\n  };\n  mkGlow(\"ledGlow\",4);\n  (()=\u0026gt;{\n    const f=el(\"filter\",{id:\"haloGlow\", filterUnits:\"userSpaceOnUse\",\n      x:\"-120\",y:\"-160\",width:\"1240\",height:\"560\"},defs);\n    el(\"feGaussianBlur\",{stdDeviation:11, result:\"b\"},f);\n    const m=el(\"feMerge\",{},f);\n    el(\"feMergeNode\",{in:\"b\"},m); el(\"feMergeNode\",{in:\"SourceGraphic\"},m);\n  })();\n\n  const G = el(\"g\",{},bar);\n  const haloLayer = el(\"g\",{opacity:\"0\"},G);\n  const sidePaths = {\n    front:\"M 150,62 L 850,62\",\n    back: \"M 150,178 L 850,178\",\n    left: \"M 150,62 L 75,95 L 75,145 L 150,178\",\n    right:\"M 850,62 L 925,95 L 925,145 L 850,178\"\n  };\n  const haloEls = {};\n  for(const z in sidePaths){\n    const g=el(\"g\",{filter:\"url(#haloGlow)\"},haloLayer);\n    [[10,.9],[26,.4],[52,.16],[88,.07]].forEach(([wd,op])=\u0026gt;{\n      el(\"path\",{d:sidePaths[z], stroke:\"#eef4ff\", \"stroke-width\":wd, \"stroke-opacity\":op,\n        fill:\"none\", \"stroke-linecap\":\"round\", \"stroke-linejoin\":\"round\"},g);\n    });\n    haloEls[z]=g;\n  }\n  for(const k in haloEls){ haloEls[k].setAttribute(\"visibility\",\"hidden\"); }\n  S._haloEls = haloEls; haloLayer.setAttribute(\"opacity\",\"1\");\n\n  const bodyPts = \"150,62 850,62 925,95 925,145 850,178 150,178 75,145 75,95\";\n  el(\"polygon\",{points:bodyPts, fill:\"#15181d\", stroke:\"#3a4149\", \"stroke-width\":3},G);\n  el(\"polygon\",{points:\"158,70 842,70 913,99 913,141 842,170 158,170 87,141 87,99\",\n    fill:\"#0e1114\", stroke:\"#22272e\",\"stroke-width\":1},G);\n  el(\"text\",{x:500,y:112,\"text-anchor\":\"middle\",fill:\"#c9d0d9\",\"font-size\":\"21\",\n    \"font-weight\":\"800\",\"letter-spacing\":\"6\",\"font-family\":\"inherit\"},G).textContent=\"BLACK OAK\";\n  el(\"text\",{x:500,y:130,\"text-anchor\":\"middle\",fill:\"#4c545e\",\"font-size\":\"9\",\n    \"letter-spacing\":\"2\"},G).textContent=\"SAE W3-1 22\";\n  el(\"circle\",{cx:500,cy:148,r:5,fill:\"#20252b\",stroke:\"#3a4149\"},G);\n\n  const ledLayer = el(\"g\",{},G);\n  const N=12;\n  const w=53, h=12, gap=4.6;\n  const startX=155, span=690;\n  let order=0;\n  const addMod=(zone,x,y,rot,cx,cy)=\u0026gt;{\n    const g=el(\"g\",{transform:`rotate(${rot} ${cx} ${cy})`},ledLayer);\n    const lens=el(\"rect\",{x,y,width:w,height:h,rx:4, fill:\"#23282f\", stroke:\"#10131a\",\"stroke-width\":1},g);\n    const halo=el(\"rect\",{x:x-6,y:y-6,width:w+12,height:h+12,rx:9, fill:\"none\",opacity:0, filter:\"url(#ledGlow)\"},g);\n    modules.push({zone, lens, halo, idx:order++, px:x+w\/2});\n  };\n  const addRot=(zone,cx,cy,len,rot)=\u0026gt;{\n    const g=el(\"g\",{transform:`rotate(${rot} ${cx} ${cy})`},ledLayer);\n    const lens=el(\"rect\",{x:cx-len\/2,y:cy-h\/2,width:len,height:h,rx:4,\n      fill:\"#23282f\",stroke:\"#10131a\",\"stroke-width\":1},g);\n    const halo=el(\"rect\",{x:cx-len\/2-6,y:cy-h\/2-6,width:len+12,height:h+12,rx:9,\n      fill:\"none\",opacity:0,filter:\"url(#ledGlow)\"},g);\n    modules.push({zone,lens,halo,idx:modules.length,px:cx});\n  };\n  for(let i=0;i\u0026lt;N;i++){ const x=startX+i*(span\/N)+gap\/2; addMod(\"front\",x,52,0,0,0); }\n  addRot(\"right\",884,73,68,23.7);\n  addRot(\"right\",921,120,46,90);\n  addRot(\"right\",884,167,68,-23.7);\n  for(let i=N-1;i\u0026gt;=0;i--){ const x=startX+i*(span\/N)+gap\/2; addMod(\"back\",x,176,0,0,0); }\n  addRot(\"left\",116,167,68,23.7);\n  addRot(\"left\",79,120,46,90);\n  addRot(\"left\",116,73,68,-23.7);\n}\nbuildBar();\nconst NMOD = modules.length;\nconst frontMods = modules.filter(m=\u0026gt;m.zone===\"front\");\nconst backMods  = modules.filter(m=\u0026gt;m.zone===\"back\");\nconst halfSplit = m=\u0026gt;{\n  if(m.zone===\"left\") return \"L\";\n  if(m.zone===\"right\") return \"R\";\n  const list = m.zone===\"front\"?frontMods:backMods;\n  const pos = list.indexOf(m);\n  const leftSide = m.zone===\"front\" ? pos \u0026lt; list.length\/2 : pos \u0026gt;= list.length\/2;\n  return leftSide ? \"L\" : \"R\";\n};\nmodules.forEach(m=\u0026gt;m.side=halfSplit(m));\nconst PXMIN=Math.min(...modules.map(m=\u0026gt;m.px)), PXMAX=Math.max(...modules.map(m=\u0026gt;m.px));\n\nfunction pulse(t, cycle, n){\n  const ph = t % cycle;\n  if(n===1) return ph \u0026lt; 168;\n  const sub = cycle\u0026gt;=800 ? 84 : (n===2 ? 83 : 67);\n  const onw = cycle\u0026gt;=800 ? 67 : 50;\n  if(ph \u0026gt;= n*sub) return false;\n  return (ph % sub) \u0026lt; onw;\n}\nfunction burst(local, half, n){\n  const sub = Math.min(half\u0026gt;=400 ? 84 : 67, half\/n);\n  if(local \u0026gt;= n*sub) return false;\n  return (local % sub) \u0026lt; sub*.75;\n}\nconst PATTERNS = {\n  1:{name:\"Single Flash\",    cyc:400, f:(t,c)=\u0026gt;pulse(t,c,1)},\n  2:{name:\"Double Flash\",    cyc:400, f:(t,c)=\u0026gt;pulse(t,c,2)},\n  3:{name:\"Triple Flash\",    cyc:400, f:(t,c)=\u0026gt;pulse(t,c,3)},\n  4:{name:\"Quintuple Flash\", cyc:800, f:(t,c)=\u0026gt;pulse(t,c,5)},\n  5:{name:\"Slow Single Flash\",cyc:800,f:(t,c)=\u0026gt;(t%c) \u0026lt; 434},\n  6:{name:\"Two Adjacent Groups Alternate\", cyc:400, group:true},\n  7:{name:\"Left \/ Right 3-Flash Alternate\", cyc:400, lr:3},\n  8:{name:\"Left \/ Right 5-Flash Alternate\", cyc:800, lr:5},\n  9:{name:\"Counterclockwise Rotation\", cyc:1400, rot:-1},\n  10:{name:\"Clockwise Rotation\",       cyc:1400, rot:1},\n  11:{name:\"Left Steady + Right Quintuple\", cyc:800, steady:\"L\"},\n  12:{name:\"Right Steady + Left Quintuple\", cyc:800, steady:\"R\"}\n};\n\nfunction moduleState(m, t){\n  const dual = S.c1on \u0026amp;\u0026amp; S.c2on \u0026amp;\u0026amp; S.color2;\n  const single = (S.c1on?1:0)+(S.c2on\u0026amp;\u0026amp;S.color2?1:0)===1;\n  if(!dual \u0026amp;\u0026amp; !single) return null;\n  const cA = S.c1on ? S.color1 : S.color2;\n  const P = PATTERNS[S.pattern];\n  const cyc = P.cyc;\n\n  if(S.cruise){\n    const col = dual ? (m.side===\"L\"?S.color1:S.color2) : cA;\n    return {color:col, intensity:.7};\n  }\n\n  let phaseColor = cA;\n  let tt = t;\n  if(dual){\n    const period = cyc*2;\n    const first = (t % period) \u0026lt; cyc;\n    phaseColor = first ? S.color1 : S.color2;\n    tt = t % cyc;\n  }\n\n  if(P.rot){\n    const pos = (t % cyc)\/cyc;\n    const head = P.rot===1 ? pos : 1-pos;\n    const center = head*NMOD;\n    let d = Math.abs(m.idx - center);\n    d = Math.min(d, NMOD-d);\n    if(d \u0026gt; 3.2) return null;\n    const col = dual ? (Math.floor(t\/cyc)%2? S.color2 : S.color1) : cA;\n    return {color:col, intensity: 1 - d\/3.6};\n  }\n  if(P.lr){\n    const firstHalf = (tt % cyc) \u0026lt; cyc\/2;\n    const mineFirst = m.side===\"L\";\n    if(firstHalf!==mineFirst) return null;\n    const local = tt % (cyc\/2);\n    if(!burst(local, cyc\/2, P.lr)) return null;\n    const col = dual ? (m.side===\"L\"?S.color1:S.color2) : cA;\n    return {color:col, intensity:1};\n  }\n  if(P.group){\n    const g = Math.floor(m.idx\/2)%2;\n    const firstHalf = (tt % cyc) \u0026lt; cyc\/2;\n    if((g===0)!==firstHalf) return null;\n    const local = tt % (cyc\/2);\n    if(!burst(local, cyc\/2, 3)) return null;\n    const col = dual ? (g===0?S.color1:S.color2) : phaseColor;\n    return {color:col, intensity:1};\n  }\n  if(P.steady){\n    const steadySide = P.steady;\n    if(m.side===steadySide){\n      const col = dual ? S.color1 : cA;\n      return {color:col, intensity:.4};\n    }\n    if(!pulse(tt,cyc,5)) return null;\n    const col = dual ? S.color2 : cA;\n    return {color:col, intensity:1};\n  }\n  if(!P.f(tt,cyc)) return null;\n  if(dual){\n    if(S.pattern===2||S.pattern===3){\n      const flip = S.pattern===3;\n      const c1side = flip? \"R\":\"L\";\n      return {color: m.side===c1side? S.color1:S.color2, intensity:1};\n    }\n    return {color:phaseColor, intensity:1};\n  }\n  return {color:cA, intensity:1};\n}\n\nfunction taSweep(m, t){\n  const dual = S.c1on \u0026amp;\u0026amp; S.c2on \u0026amp;\u0026amp; S.color2;\n  const T = 1600;\n  const pass = Math.floor(t\/T) % (dual?2:1);\n  const col = dual ? (pass===0 ? S.color1 : S.color2)\n                   : (S.c1on ? S.color1 : (S.color2||S.color1));\n  const ph=(t%T)\/T;\n  let build;\n  if(ph\u0026lt;.65) build = ph\/.65;\n  else if(ph\u0026lt;.8) build = 1;\n  else return null;\n  const p = (m.px-PXMIN)\/(PXMAX-PXMIN);\n  const e = .002;\n  let on=false;\n  if(S.ta===\"right\")      on = p \u0026lt;= build+e;\n  else if(S.ta===\"left\")  on = (1-p) \u0026lt;= build+e;\n  else                    on = Math.abs(p-0.5) \u0026lt;= build*0.5+e;\n  return on? {color:col,intensity:1} : null;\n}\n\nlet lastPatternShown=-1;\nfunction render(t){\n  const dimMul = S.dim50? .45 : 1;\n  if(S.random \u0026amp;\u0026amp; t-S.randTimer\u0026gt;4000){\n    S.randTimer=t; S.pattern = 1+Math.floor(Math.random()*12); syncUI();\n  }\n  const warnOn = (S.c1on || (S.c2on\u0026amp;\u0026amp;S.color2));\n  for(const m of modules){\n    let st;\n    if(S.ta) st = taSweep(m,t);\n    else if(warnOn \u0026amp;\u0026amp; S.zones[m.zone]) st = moduleState(m,t);\n    else st = null;\n    m.cur = st;\n    if(st){ m.lastT=t; m.lastC=st.color; m.lastK=st.intensity; }\n    let drawC=null, drawK=0;\n    if(st){ drawC=st.color; drawK=st.intensity; }\n    else if(m.lastC \u0026amp;\u0026amp; (t-m.lastT)\u0026lt;70){ drawC=m.lastC; drawK=m.lastK*(1-(t-m.lastT)\/70)*.7; }\n    if(drawC){\n      const c=LEDCOLORS[drawC];\n      const k=drawK*dimMul;\n      m.lens.setAttribute(\"fill\", k\u0026gt;.55? c.core : c.main);\n      m.lens.setAttribute(\"stroke\", c.main);\n      m.halo.setAttribute(\"fill\", c.glow);\n      m.halo.setAttribute(\"opacity\", (0.85*k).toFixed(2));\n    }else{\n      m.lens.setAttribute(\"fill\",\"#23282f\");\n      m.lens.setAttribute(\"stroke\",\"#10131a\");\n      m.halo.setAttribute(\"opacity\",\"0\");\n    }\n  }\n  for(const z in S._haloEls){\n    S._haloEls[z].setAttribute(\"visibility\", S.halo[z]? \"visible\":\"hidden\");\n    S._haloEls[z].setAttribute(\"opacity\", (.85*dimMul).toFixed(2));\n  }\n  if(S._dots){\n    const RED=\"#ff2622\", OFF=\"#1c2026\";\n    for(const row of [\"front\",\"back\"]){\n      const src = row===\"front\"? frontMods : backMods.slice().reverse();\n      S._dots[row].forEach((dot,i)=\u0026gt;{\n        if(S.indicatorOff){ dot.setAttribute(\"fill\",OFF); return; }\n        const m = src[Math.round(i*(src.length-1)\/(S._dots[row].length-1))];\n        dot.setAttribute(\"fill\", m.cur? RED : OFF);\n      });\n    }\n    const zoneLit = z =\u0026gt; modules.some(m=\u0026gt;m.zone===z \u0026amp;\u0026amp; m.cur);\n    S._dotL.setAttribute(\"fill\", (!S.indicatorOff \u0026amp;\u0026amp; zoneLit(\"left\"))?  RED : OFF);\n    S._dotR.setAttribute(\"fill\", (!S.indicatorOff \u0026amp;\u0026amp; zoneLit(\"right\"))? RED : OFF);\n  }\n  if(S.pattern!==lastPatternShown){ lastPatternShown=S.pattern; updateLabel(); }\n  requestAnimationFrame(render);\n}\n\nfunction updateLabel(){\n  const P=PATTERNS[S.pattern];\n  document.getElementById(\"patternLabel\").textContent =\n    `Pattern ${S.pattern} · ${P.name}` + (S.cruise? \"  •  Cruise\":\"\") + (S.ta\u0026amp;\u0026amp;!tourActive? `  •  Traffic Advisor ${S.ta}`:\"\");\n  drawDisplay();\n}\n\nconst ORDER=[\"amber\",\"white\",\"red\",\"blue\",\"green\"];\nfunction buildCompact(){\n  const c=document.getElementById(\"compactSel\");\n  c.innerHTML=\"\";\n  const mk=(col)=\u0026gt;{ const d=document.createElement(\"div\"); d.className=\"sw\";\n    d.style.background=LEDCOLORS[col].main; d.title=LEDCOLORS[col].label; return d; };\n  const lab=document.createElement(\"span\");\n  lab.style.cssText=\"font-size:12px;color:#8a94a3\";\n  lab.textContent=\"Your colors:\";\n  c.appendChild(lab);\n  c.appendChild(mk(S.color1));\n  if(S.color2){ c.appendChild(mk(S.color2)); }\n  const btn=document.createElement(\"button\");\n  btn.className=\"swapBtn\";\n  const card=document.getElementById(\"colorCard\");\n  btn.textContent = card.classList.contains(\"expanded\") ? \"Done\" : \"Change colors\";\n  btn.onclick=()=\u0026gt;{ card.classList.toggle(\"expanded\"); buildCompact(); };\n  c.appendChild(btn);\n}\nfunction buildSwatches(){\n  buildCompact();\n  const s1=document.getElementById(\"sw1\"), s2=document.getElementById(\"sw2\");\n  s1.innerHTML=\"\"; s2.innerHTML=\"\";\n  for(const c of ORDER){\n    const d=document.createElement(\"div\");\n    d.className=\"sw\"+(S.color1===c?\" sel\":\"\");\n    d.style.background=LEDCOLORS[c].main; d.title=LEDCOLORS[c].label;\n    d.onclick=()=\u0026gt;{ S.color1=c; if(S.color2===c) S.color2=null; buildSwatches(); };\n    s1.appendChild(d);\n  }\n  const none=document.createElement(\"div\");\n  none.className=\"sw none\"+(S.color2===null?\" sel\":\"\");\n  none.title=\"Single color\"; none.onclick=()=\u0026gt;{S.color2=null; buildSwatches();};\n  s2.appendChild(none);\n  for(const c of ORDER){\n    if(c===S.color1) continue;\n    const d=document.createElement(\"div\");\n    d.className=\"sw\"+(S.color2===c?\" sel\":\"\");\n    d.style.background=LEDCOLORS[c].main; d.title=LEDCOLORS[c].label;\n    d.onclick=()=\u0026gt;{ S.color2=c; S.c2on=true; buildSwatches(); syncUI(); };\n    s2.appendChild(d);\n  }\n}\ndocument.getElementById(\"swapBtn\").onclick=()=\u0026gt;{\n  if(!S.color2) return;\n  [S.color1,S.color2]=[S.color2,S.color1]; buildSwatches();\n};\n\nconst ctl=document.getElementById(\"ctl\");\nconst buttons={};\nfunction buildController(){\n  const defs=el(\"defs\",{},ctl);\n  const f=el(\"filter\",{id:\"btnGlow\",x:\"-40%\",y:\"-40%\",width:\"180%\",height:\"180%\"},defs);\n  el(\"feGaussianBlur\",{stdDeviation:\"2.2\",result:\"b\"},f);\n  const mg=el(\"feMerge\",{},f);\n  el(\"feMergeNode\",{in:\"b\"},mg); el(\"feMergeNode\",{in:\"SourceGraphic\"},mg);\n\n  el(\"rect\",{x:2,y:2,width:556,height:296,rx:26,fill:\"#17191d\",stroke:\"#000\",\"stroke-width\":2},ctl);\n  el(\"rect\",{x:12,y:12,width:536,height:276,rx:20,fill:\"none\",stroke:\"#262a31\",\"stroke-width\":1.5},ctl);\n\n  const btn=(key,label,x,y,shape,w,h,fs)=\u0026gt;{\n    const g=el(\"g\",{class:\"kb\",tabindex:\"0\",role:\"button\",\"aria-label\":label.replace(\"\\n\",\" \")},ctl);\n    if(shape===\"circle\") el(\"circle\",{class:\"face\",cx:x,cy:y,r:w},g);\n    else if(shape===\"rect\") el(\"rect\",{class:\"face\",x:x-w\/2,y:y-h\/2,width:w,height:h,rx:8},g);\n    else el(\"path\",{class:\"face\",d:shape},g);\n    const lines=label.split(\"\\n\");\n    lines.forEach((ln,i)=\u0026gt;{\n      const tv = el(\"text\",{x:x, y:y+(i-(lines.length-1)\/2)*11+4, \"font-size\":fs||10.5},g);\n      tv.textContent=ln;\n    });\n    g.addEventListener(\"click\",()=\u0026gt;press(key));\n    g.addEventListener(\"keydown\",e=\u0026gt;{if(e.key===\"Enter\"||e.key===\" \"){e.preventDefault();press(key);}});\n    buttons[key]={g};\n    return g;\n  };\n\n  const lx=88, ly=88;\n  btn(\"z_front\",\"Front\", lx,   ly-38,\"circle\",19);\n  btn(\"z_left\",\"Left\",   lx-52,ly,   \"circle\",19);\n  btn(\"z_all\",\"ALL\",     lx,   ly,   \"circle\",19);\n  btn(\"z_right\",\"Right\", lx+52,ly,   \"circle\",19);\n  btn(\"z_back\",\"Back\",   lx,   ly+38,\"circle\",19);\n\n  el(\"rect\",{x:170,y:34,width:220,height:64,rx:12,fill:\"#0a0c0e\",stroke:\"#26292f\"},ctl);\n  el(\"text\",{x:280,y:71,\"text-anchor\":\"middle\",fill:\"#b9c1cc\",\"font-size\":\"15\",\n    \"font-weight\":\"800\",\"letter-spacing\":\"4\"},ctl).textContent=\"BLACK OAK\";\n  S._dots={front:[],back:[]};\n  for(let i=0;i\u0026lt;8;i++){\n    S._dots.front.push(el(\"circle\",{cx:198+i*24,cy:46,r:3.4,fill:\"#1c2026\"},ctl));\n    S._dots.back.push( el(\"circle\",{cx:198+i*24,cy:86,r:3.4,fill:\"#1c2026\"},ctl));\n  }\n  S._dotL = el(\"circle\",{cx:182,cy:66,r:3.4,fill:\"#1c2026\"},ctl);\n  S._dotR = el(\"circle\",{cx:382,cy:66,r:3.4,fill:\"#1c2026\"},ctl);\n\n  btn(\"ta_left\",\"Left\", 210,126,\"M186 126 L214 108 L226 108 L226 144 L214 144 Z\",0,0,9.5);\n  btn(\"ta_both\",\"Traffic\\nAdvisor\",272,126,\"M232 108 L308 108 L318 126 L308 144 L232 144 L242 126 Z\",0,0,9.5);\n  btn(\"ta_right\",\"Right\",330,126,\"M314 108 L326 108 L354 126 L326 144 L314 144 Z\",0,0,9.5);\n\n  const rx=470, ry=88;\n  btn(\"h_front\",\"Front\", rx,   ry-38,\"circle\",19);\n  btn(\"h_left\",\"Left\",   rx-52,ry,   \"circle\",19);\n  btn(\"h_white\",\"White\", rx,   ry,   \"circle\",19);\n  btn(\"h_right\",\"Right\", rx+52,ry,   \"circle\",19);\n  btn(\"h_back\",\"Back\",   rx,   ry+38,\"circle\",19);\n  el(\"text\",{x:rx,y:ry+68,\"text-anchor\":\"middle\",fill:\"#7f8b9c\",\"font-size\":\"9.5\",\n    \"font-weight\":\"700\",\"letter-spacing\":\"1.5\"},ctl).textContent=\"360° HALO\";\n  el(\"text\",{x:rx,y:ry+79,\"text-anchor\":\"middle\",fill:\"#59636f\",\"font-size\":\"8\",\n    \"letter-spacing\":\"1\"},ctl).textContent=\"SCENE LIGHT\";\n\n  btn(\"c1\",\"Color 1\\nON\/OFF\",   62,190,\"rect\",66,40,9.5);\n  btn(\"c2\",\"Color 2\\nON\/OFF\",  136,190,\"rect\",66,40,9.5);\n  btn(\"dim\",\"50%\",              62,244,\"rect\",66,34);\n  btn(\"auto\",\"Auto\\nSensor\",   136,244,\"rect\",66,40,9.5);\n\n  btn(\"last\",\"Last\\nPattern\",  228,218,\"rect\",62,44,9.5);\n  btn(\"next\",\"Next\\nPattern\",  298,218,\"rect\",62,44,9.5);\n  S._ring = el(\"rect\",{x:262,y:190,width:72,height:56,rx:12,class:\"pulseRing\"},ctl);\n\n  btn(\"ind\",\"Indicator\",       412,190,\"rect\",74,36,9.5);\n  btn(\"cruise\",\"Cruise\\nLight\",496,190,\"rect\",70,40,9.5);\n  btn(\"rand\",\"Random\",         412,244,\"rect\",74,36,9.5);\n  btn(\"fav\",\"Favorite\\nPattern\",496,244,\"rect\",70,40,9.5);\n}\nbuildController();\n\nfunction drawDisplay(){}\n\nlet favHold=null;\nfunction press(key){\n  markInteract();\n  switch(key){\n    case \"z_all\":{\n      const allOn=S.zones.front\u0026amp;\u0026amp;S.zones.back\u0026amp;\u0026amp;S.zones.left\u0026amp;\u0026amp;S.zones.right;\n      const v=!allOn; S.zones={front:v,back:v,left:v,right:v}; break;}\n    case \"z_front\": S.zones.front=!S.zones.front; break;\n    case \"z_back\":  S.zones.back=!S.zones.back; break;\n    case \"z_left\":  S.zones.left=!S.zones.left; break;\n    case \"z_right\": S.zones.right=!S.zones.right; break;\n    case \"h_white\":{\n      const allOn=S.halo.front\u0026amp;\u0026amp;S.halo.back\u0026amp;\u0026amp;S.halo.left\u0026amp;\u0026amp;S.halo.right;\n      const v=!allOn; S.halo={front:v,back:v,left:v,right:v}; break;}\n    case \"h_front\": S.halo.front=!S.halo.front; break;\n    case \"h_back\":  S.halo.back=!S.halo.back; break;\n    case \"h_left\":  S.halo.left=!S.halo.left; break;\n    case \"h_right\": S.halo.right=!S.halo.right; break;\n    case \"c1\": S.c1on=!S.c1on; break;\n    case \"c2\": if(S.color2) S.c2on=!S.c2on; break;\n    case \"next\": S.pattern=S.pattern%12+1; S.cruise=false; S.random=false; break;\n    case \"last\": S.pattern=(S.pattern+10)%12+1; S.cruise=false; S.random=false; break;\n    case \"cruise\": S.cruise=!S.cruise; if(S.cruise){S.random=false;} break;\n    case \"rand\": S.random=!S.random; if(S.random){S.cruise=false; S.randTimer=0;} break;\n    case \"dim\": S.dim50=!S.dim50; break;\n    case \"auto\": S.autoSensor=!S.autoSensor; break;\n    case \"ind\": S.indicatorOff=!S.indicatorOff; break;\n    case \"ta_left\":  S.ta = S.ta===\"left\"? null:\"left\"; break;\n    case \"ta_right\": S.ta = S.ta===\"right\"? null:\"right\"; break;\n    case \"ta_both\":  S.ta = S.ta===\"both\"? null:\"both\"; break;\n    case \"fav\": S.pattern=S.favorite; S.cruise=false; S.random=false; break;\n  }\n  updateLabel(); syncUI();\n}\n(function(){\n  const g=buttons[\"fav\"].g;\n  let t0=0;\n  g.addEventListener(\"pointerdown\",()=\u0026gt;{ t0=Date.now();\n    favHold=setTimeout(()=\u0026gt;{ S.favorite=S.pattern; flash(g); },1200); });\n  const clear=()=\u0026gt;{ if(favHold){clearTimeout(favHold); favHold=null;} };\n  g.addEventListener(\"pointerup\",clear); g.addEventListener(\"pointerleave\",clear);\n  function flash(el){ el.classList.add(\"lit\"); setTimeout(()=\u0026gt;syncUI(),400); }\n})();\n\nfunction syncUI(){\n  const setLit=(k,v)=\u0026gt;buttons[k].g.classList.toggle(\"lit\",!!v);\n  setLit(\"z_front\",S.zones.front); setLit(\"z_back\",S.zones.back);\n  setLit(\"z_left\",S.zones.left);   setLit(\"z_right\",S.zones.right);\n  setLit(\"z_all\",S.zones.front\u0026amp;\u0026amp;S.zones.back\u0026amp;\u0026amp;S.zones.left\u0026amp;\u0026amp;S.zones.right);\n  setLit(\"h_front\",S.halo.front); setLit(\"h_back\",S.halo.back);\n  setLit(\"h_left\",S.halo.left);   setLit(\"h_right\",S.halo.right);\n  setLit(\"h_white\",S.halo.front\u0026amp;\u0026amp;S.halo.back\u0026amp;\u0026amp;S.halo.left\u0026amp;\u0026amp;S.halo.right);\n  setLit(\"c1\",S.c1on); setLit(\"c2\",S.c2on\u0026amp;\u0026amp;!!S.color2);\n  setLit(\"cruise\",S.cruise); setLit(\"rand\",S.random);\n  setLit(\"dim\",S.dim50); setLit(\"auto\",S.autoSensor); setLit(\"ind\",S.indicatorOff);\n  setLit(\"ta_left\",S.ta===\"left\"\u0026amp;\u0026amp;!tourActive); setLit(\"ta_right\",S.ta===\"right\"\u0026amp;\u0026amp;!tourActive); setLit(\"ta_both\",S.ta===\"both\"\u0026amp;\u0026amp;!tourActive);\n  const haloOn = S.halo.front||S.halo.back||S.halo.left||S.halo.right;\n  document.getElementById(\"haloBadge\").style.display = haloOn? \"flex\":\"none\";\n  drawDisplay();\n}\n\n\/* default everywhere: dual-color amber\/white, steady burn; the attract sweep provides motion *\/\nS.c2on=true; S.cruise=true;\nS.interacted=false;\nlet tourActive=false, tourTimer=null, idleTimer=null;\nbuildSwatches(); syncUI(); updateLabel();\nrequestAnimationFrame(render);\n\n\/* ATTRACT MODE *\/\nfunction markInteract(){\n  if(S.interacted) return;\n  S.interacted=true;\n  if(tourActive){ tourActive=false; S.ta=null; }\n  clearTimeout(tourTimer); clearTimeout(idleTimer);\n  const h=document.getElementById(\"tryHint\");\n  if(h){ h.style.transition=\"opacity .5s\"; h.style.opacity=\"0\"; setTimeout(()=\u0026gt;h.remove(),600); }\n  if(S._ring) S._ring.remove();\n}\nfunction attractSweep(passes){\n  if(S.interacted || tourActive) return;\n  tourActive=true; S.ta=\"both\";\n  tourTimer=setTimeout(()=\u0026gt;{\n    if(tourActive){ tourActive=false; S.ta=null; }\n    scheduleIdle();\n  }, 1600*passes+400);\n}\nfunction scheduleIdle(){\n  if(S.interacted) return;\n  clearTimeout(idleTimer);\n  idleTimer=setTimeout(()=\u0026gt;attractSweep(1), 18000);\n}\ndocument.addEventListener(\"pointerdown\",e=\u0026gt;{\n  if(e.target.closest \u0026amp;\u0026amp; e.target.closest(\".sw,.swapBtn,.kb\")) markInteract();\n},true);\n(function(){\n  let fired=false;\n  const start=()=\u0026gt;{ if(!fired){ fired=true; setTimeout(()=\u0026gt;attractSweep(2), 600); } };\n  if(window.IntersectionObserver){\n    new IntersectionObserver((es,obs)=\u0026gt;{\n      if(es.some(e=\u0026gt;e.isIntersecting)){ start(); obs.disconnect(); }\n    },{threshold:.5}).observe(document.querySelector(\".stage\"));\n  } else start();\n})();\n\n(function(){\n  const embedded = (window!==parent);\n  if(embedded){\n    document.querySelector(\"header\").style.display=\"none\";\n    document.querySelector(\"footer\").style.display=\"none\";\n    if(window.innerWidth\u0026gt;840) document.querySelector(\".wrap\").style.padding=\"10px 12px 14px\";\n  }\n  const report=()=\u0026gt;{ try{\n    parent.postMessage({type:\"lowpro-player-height\",\n      height: document.querySelector(\".wrap\").scrollHeight+8}, \"*\");\n  }catch(e){} };\n  if(window.ResizeObserver) new ResizeObserver(report).observe(document.querySelector(\".wrap\"));\n  window.addEventListener(\"load\",report); window.addEventListener(\"pageshow\",report);\n  setTimeout(report,400); setTimeout(report,1500);\n  let n=0; const iv=setInterval(()=\u0026gt;{ report(); if(++n\u0026gt;10) clearInterval(iv); },1200);\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;\n'\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.lowpro-frame{height:700px}\n@media(max-width:840px){\n  .lowpro-cta{display:none}\n  .lowpro-frame{height:760px}\n}\n\u003c\/style\u003e\n\u003cscript\u003e\nwindow.addEventListener(\"message\",function(e){\n  if(e.data \u0026\u0026 e.data.type===\"lowpro-player-height\"){\n    var f=document.getElementById(\"lowpro-player-frame\");\n    if(f \u0026\u0026 e.data.height\u003e200) f.style.height=(e.data.height+4)+\"px\";\n  }\n});\n\u003c\/script\u003e\n\u003cdiv style=\"height:28px;\"\u003e \u003c\/div\u003e\n\u003c!-- Intro Section --\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cstrong\u003eBuilt for emergency response teams and public safety professionals, this high-intensity LED warning light bar delivers uncompromising performance in a sleek, durable design.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp data-end=\"806\" data-start=\"530\"\u003eThe Black Oak Low Pro Emergency Series Light Bar is engineered for maximum visibility, reliability, and user control. With ultra-bright LEDs, multiple flash patterns, and a rugged housing, this bar ensures your presence is known in any emergency situation—day or night, rain or shine.\u003c\/p\u003e\n\u003cp data-end=\"806\" data-start=\"530\"\u003e \u003c\/p\u003e\n\u003cp data-end=\"1177\" data-start=\"808\"\u003eBuilt to withstand the demands of high-speed response, off-road utility, or work site visibility, this low-profile bar features a streamlined, aerodynamic frame and a universal mounting system to ensure easy installation on any vehicle. Whether you're outfitting a patrol car, fire unit, or utility truck, this bar delivers dependable performance where it matters most.\u003c\/p\u003e\n\u003cbr\u003e\n\u003c!-- TRUST STRIP --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Screenshot_2026-07-21_at_9.31.14_AM.png?v=1784641940\" alt=\"SAE J845 Certified, SAE J595 Class 1, IP69K Waterproof, Lifetime Warranty, -40F to +145F Rated, 50,000 Hour LEDs\" style=\"width:100%;display:block;border-radius:10px;\"\u003e\u003c\/p\u003e\n\u003c!-- SIZE SELECTOR --\u003e\n\u003cdiv style=\"margin:4px 0 2px;\"\u003e\n\u003cp style=\"margin:0 0 8px;font-weight:600;font-size:15px;\"\u003eAvailable sizes:\u003c\/p\u003e\n\u003ca href=\"\/products\/11-mini-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e11\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-17-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e17\"\u003c\/a\u003e\n\u003cspan style=\"display:inline-block;background:#FFB300;color:#111;font-weight:700;padding:8px 14px;border-radius:8px;margin:0 6px 8px 0;font-size:15px;\"\u003e30\"\u003c\/span\u003e\n\u003ca href=\"\/products\/new-43-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e43\"\u003c\/a\u003e\n\u003ca href=\"\/products\/low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e49\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-55-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e55\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-61-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e61\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-68-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e68\"\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\n\u003c!-- Collapsable Sections --\u003e\n\u003cstyle\u003e\n#MainContent details {\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  margin-bottom: 16px;\n  overflow: hidden;\n  background: #fff;\n  font-family: Arial, sans-serif;\n}\n\n#MainContent details summary {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  cursor: pointer;\n  padding: 14px 18px;\n  font-weight: 600;\n  font-size: 18px;\n  list-style: none;\n  background-color: #f9f9f9;\n  border-bottom: 1px solid #e0e0e0;\n  position: relative;\n}\n\n#MainContent details[open] summary {\n  background-color: #f1f1f1;\n}\n\n#MainContent details summary::after {\n  content: '+';\n  font-size: 20px;\n  font-weight: bold;\n  transition: transform 0.3s ease;\n}\n\n#MainContent details[open] summary::after {\n  content: '−';\n}\n\n#MainContent details .content {\n  padding: 16px 20px;\n  font-size: 16px;\n  line-height: 1.6;\n}\n\u003c\/style\u003e\n\u003cdetails\u003e\n\u003csummary\u003eFeatures\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003eLifetime Warranty\u003c\/li\u003e\n\u003cli\u003eSAE J845 Class 1 Certified\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003e360° visibility with dual-color ultra-bright LEDs\u003c\/li\u003e\n\u003cli\u003eSlim Low Profile design\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003eUp to 45 flash patterns with memory recall\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003eRugged, waterproof housing (IP69K rated)\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003eIntegrated controller with pattern cycling, cruise mode, and cut-off\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIn the Box\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cb\u003eLow Pro Light Bar\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eController\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eWiring\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eStandard Feet\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eJamb Brackets\u003c\/b\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- COMPLIANCE SECTION --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCompliance \u0026amp; Certifications\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cp\u003e\u003cstrong\u003eMeets the standards your department requires.\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003eCertification \u0026amp; Compliance\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J845\u003c\/th\u003e\n\u003ctd\u003e360° warning lamp photometric standard for light bars and beacons\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J595 Class 1\u003c\/th\u003e\n\u003ctd\u003eHighest intensity class — approved for primary emergency vehicles (police, fire, EMS)\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eIP69K\u003c\/th\u003e\n\u003ctd\u003eSealed against high-pressure washdown, salt, dust, and submersion\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRated\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Range\u003c\/th\u003e\n\u003ctd\u003eExtreme-climate duty\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e-40°F to +145°F\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDuty Life\u003c\/th\u003e\n\u003ctd\u003eContinuous-duty LED modules\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50,000 hours\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"font-size:13px;color:#666;\"\u003e\u003cem\u003eWarning-equipment regulations vary by state and jurisdiction. Verify color and mounting requirements with your local authority. Spec sheet PDF and certification documentation available on request for procurement offices.\u003c\/em\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- Image + Text Alternating Section --\u003e\n\u003cstyle\u003e\n.text-image-wrap {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n.text-image-wrap.text-image-right {\n  flex-direction: row-reverse;\n}\n.text-image-wrap .image-wrap {\n  flex: 1;\n  max-width: 500px;\n}\n.text-image-wrap .image-wrap img {\n  width: 100%;\n  height: auto;\n  max-height: 300px; \n  display: block;\n  object-fit: contain; \n}\n.text-image-wrap .text-wrap {\n  flex: 1;\n  min-width: 300px;\n}\n\u003c\/style\u003e\n\u003c!-- Image Right - Text Left Section --\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/255283_7703341170749_330031d5_da20_475f_887e_f1269d2ad248_1.jpg?v=1763495670\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eEmergency Bar + Work Light\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eGet full 360° white-light illumination at the touch of a button. Perfect for reverse lighting, scene lighting, or any situation where you need powerful all-around visibility. It’s a true dual-purpose feature you won’t find on most emergency bars — and it comes standard on every one of ours.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Low_Pro_Emergency_Bar_SAE_graphics.jpg?v=1758041472\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eBuilt Tough for Any Environment\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003eIP69K-rated waterproof housing and reinforced aluminum construction stand up to rain, snow, mud, and dust—ideal for police, fire, tow, or off-road response vehicles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/DSC00223.jpg?v=1754512314\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e Full 360° Warning Visibility\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003ePacked with high-output dual-color LEDs and side modules, this bar delivers all-angle visibility—ensuring you're seen from every direction, even in chaotic scenes or inclement weather.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE_-_Driver_Side_Angle.jpg?v=1761226316\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eSlim, Low-Profile Design\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eEngineered to minimize wind resistance and visual bulk, this light bar features a sleek, aerodynamic frame that hugs your vehicle’s roofline. The low-profile housing not only enhances fuel efficiency but also delivers a clean, professional look without compromising brightness or performance.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\n\u003cp\u003e\u003cvideo width=\"100%\" height=\"auto\" muted=\"\" autoplay=\"autoplay\" loop=\"loop\" playsinline=\"\" controls=\"controls\"\u003e\n    \u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/4ec9ce848f5e4d2d8083da9daf4dbe78.mp4\" type=\"video\/mp4\"\u003e\n    Your browser does not support the video tag.\n  \u003c\/source\u003e\u003c\/video\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eUp to 45 Flash Patterns with Smart Memory\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eChoose from up to 45 user-selectable flash patterns to fit any scenario. Built-in memory recall stores your last used setting for consistent deployment every time.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Low_Pro_Emergency_Bar_-_Sliding_Feet.gif?v=1758730578\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eSliding Feet\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003eOur sliding feet mounts are designed to give you maximum flexibility during installation. By allowing the brackets to slide along the base of the light bar, you can easily adjust spacing to match a wide variety of mounting points. This ensures a precise fit whether you’re working with factory holes, custom setups, or uneven surfaces.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HERO BANNER --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/d8j0ntlcm91z4.cloudfront.net\/user_3G9nKxyaQsdrPdDsxWr4EcSl5FL\/hf_20260715_201038_0803a0cd-07a6-4508-9c7a-50d0230a94e3.png\" alt=\"Built to Code. Backed for Life. SAE J845 and J595 Class 1 compliant, IP69K sealed, lifetime warranty\" style=\"width:100%;display:block;border-radius:10px;\"\u003e\u003c\/p\u003e\n\u003cbr\u003e\n\u003c!-- FLEET BLOCK --\u003e\n\u003cdiv style=\"padding:8px 0;margin:0 0 8px;\"\u003e\n\u003ch3 style=\"margin:0 0 8px;\"\u003eOutfitting a Fleet?\u003c\/h3\u003e\n\u003cp style=\"margin:0 0 14px;font-size:16px;line-height:1.6;\"\u003eVolume pricing on 5+ units, department POs accepted, W-9 on file, and spec sheets ready for your procurement office. From single patrol vehicles to full county fleets.\u003c\/p\u003e\n\u003ca href=\"\/pages\/fleet-pricing\" style=\"display:inline-block;background:#FFB300;color:#111;font-weight:700;padding:12px 22px;border-radius:8px;text-decoration:none;\"\u003eRequest Fleet Pricing\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Dimension --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Black_Oak_-_Low_Pro_Emergency_Bar_-_All_Dimensions.jpg?v=1762971573\" alt=\"\"\u003e\u003c\/p\u003e\n\u003c!-- Specs --\u003e\n\u003ch5\u003eSpecs\u003c\/h5\u003e\n\u003c!-- Specs Chart --\u003e\n\u003cstyle\u003e\n  table.spec-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 20px 0;\n    font-size: 15px;\n  }\n  table.spec-table th, table.spec-table td {\n    border: 1px solid #ccc;\n    padding: 10px;\n    text-align: left;\n  }\n  table.spec-table th {\n    background-color: #f7f7f7;\n    font-weight: 600;\n    width: 30%;\n  }\n  table.spec-table tr:hover {\n    background-color: #f2f2f2;\n  }\n  table.spec-table thead th {\n    background-color: #222;\n    color: #fff;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    text-align: center;\n  }\n\u003c\/style\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003ePower \u0026amp; Performance\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Wattage\u003c\/th\u003e\n\u003ctd\u003e264\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Amp Draw\u003c\/th\u003e\n\u003ctd\u003e20\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Voltage\u003c\/th\u003e\n\u003ctd\u003e10-30V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRaw Lumens\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Diode Quantity\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Chip\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBeam Pattern\u003c\/th\u003e\n\u003ctd\u003eWide Angle\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCertificate\u003c\/th\u003e\n\u003ctd\u003eSAE J845 \u0026amp; SAE J595 Class 1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Single Color\u003c\/th\u003e\n\u003ctd\u003e15\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Dual Color\u003c\/th\u003e\n\u003ctd\u003e45 (15 Color 1 \/ 15 Color 2 \/ 15 Combo)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eDurability \u0026amp; Lifespan\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLife Expectancy\u003c\/th\u003e\n\u003ctd\u003e50,000 Hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Temp\u003c\/th\u003e\n\u003ctd\u003e-40° to 145° F\u003cbr\u003e-40° to 62° C\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWaterproof Rating\u003c\/th\u003e\n\u003ctd\u003eIP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003eLimited Lifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGuarantee\u003c\/th\u003e\n\u003ctd\u003e30 Day Money Back\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eWiring \u0026amp; Installation\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eCord Length From Light\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Included?\u003c\/th\u003e\n\u003ctd\u003eYes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Length\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Gauge\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFuse Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eConnector Type\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHole Size for Controller\u003c\/th\u003e\n\u003ctd\u003e\u003cbr\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMounting Bolt Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eGeneral\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003e9.4 Lbs\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSKU\u003c\/th\u003e\n\u003ctd\u003eLP-E30-\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c!-- FAQ --\u003e\n\u003ch5\u003eDimensions\u003c\/h5\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Black_Oak_-_Low_Pro_Emergency_Bar_-_30_Inch_Dimensions.jpg?v=1762972188\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ch5\u003eVideo\u003c\/h5\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cvideo style=\"max-width: 100%; height: auto;\" controls=\"controls\" playsinline=\"\" loop=\"loop\" muted=\"\" autoplay=\"autoplay\"\u003e\n  \u003csource type=\"video\/mp4\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/f7ecf4030812467bbb46b165c21da48e.mov\"\u003e\n  Your browser does not support the video tag.\n\u003c\/source\u003e\u003c\/video\u003e\u003c\/p\u003e\n\u003ch5\u003eFAQ\u003c\/h5\u003e\n\u003cp\u003e\u003cstrong\u003eWhat voltage and control systems does this light bar support?\u003c\/strong\u003e\u003cbr\u003eThis light bar operates on a 12 V–24 V DC power system and can be used with either push-button or wireless controllers. It’s compatible with standard vehicle electrical systems, making installation straightforward for both fleet and individual applications.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow durable is this light bar in harsh environments?\u003c\/strong\u003e\u003cbr\u003eThe Low Pro Emergency Light Bar is built with a rugged aluminum housing, sealed to an IP69K rating and tested to resist corrosion, vibration, and high-pressure water ingress. It’s designed for demanding conditions—whether roadside, rescue, or commercial use—so you can rely on consistent performance when it counts.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat beam patterns and flash modes are included?\u003c\/strong\u003e\u003cbr\u003eUp to 45 flash patterns are built into the unit—including warning, hazard, and full-output flasher modes—with memory recall so your last setting is retained even after power loss. You’ll also find low-profile steady-burn mode useful for scene lighting and standby operations.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIs the light bar legal for use on public roads and emergency vehicles?\u003c\/strong\u003e\u003cbr\u003eYes. The unit meets SAE J595 Class 1 and other relevant emergency lighting standards for warning applications. However, regulations vary by jurisdiction, so we recommend checking your local laws before installation to ensure compliance with mounting height, color, and flash pattern requirements.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat’s covered by the warranty?\u003c\/strong\u003e\u003cbr\u003eOur industry-leading lifetime warranty covers manufacturing defects, driver failures, and LED module performance. It does not cover damage caused by improper installation, extreme overuse beyond defined duty cycles, or wiring issues. For full warranty terms, please refer to our Warranty \u0026amp; Returns page.\u003c\/p\u003e","brand":"Black Oak LED","offers":[{"title":"Amber \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975067709,"sku":"LP-E30-AW","price":615.62,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732312002621,"sku":"LP-E30-AW","price":641.57,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732312035389,"sku":"LP-E30-AW","price":645.57,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Magnet \/ Standard 12' Lead","offer_id":42583975100477,"sku":"LP-E30-AW","price":655.62,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732312068157,"sku":"LP-E30-AW","price":681.57,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732312100925,"sku":"LP-E30-AW","price":685.57,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975133245,"sku":"LP-E30-AW","price":640.62,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732312133693,"sku":"LP-E30-AW","price":666.57,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732312166461,"sku":"LP-E30-AW","price":670.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Door Jamb \/ Standard 12' Lead","offer_id":42590516871229,"sku":"LP-E30-AB","price":645.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732312199229,"sku":"LP-E30-AB","price":671.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732312231997,"sku":"LP-E30-AB","price":675.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet \/ Standard 12' Lead","offer_id":42590516903997,"sku":"LP-E30-AB","price":685.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732312264765,"sku":"LP-E30-AB","price":711.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732312297533,"sku":"LP-E30-AB","price":715.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack \/ Standard 12' Lead","offer_id":42590516936765,"sku":"LP-E30-AB","price":670.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732312330301,"sku":"LP-E30-AB","price":696.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732312363069,"sku":"LP-E30-AB","price":700.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Door Jamb \/ Standard 12' Lead","offer_id":42996860321853,"sku":"LP-E30-AG","price":645.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42996860354621,"sku":"LP-E30-AG","price":671.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42996860387389,"sku":"LP-E30-AG","price":675.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet \/ Standard 12' Lead","offer_id":42996860420157,"sku":"LP-E30-AG","price":685.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42996860452925,"sku":"LP-E30-AG","price":711.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42996860485693,"sku":"LP-E30-AG","price":715.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack \/ Standard 12' Lead","offer_id":42996860518461,"sku":"LP-E30-AG","price":670.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42996860551229,"sku":"LP-E30-AG","price":696.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42996860583997,"sku":"LP-E30-AG","price":700.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Door Jamb \/ Standard 12' Lead","offer_id":43482683211837,"sku":"LP-E30-AR","price":645.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":43482683244605,"sku":"LP-E30-AR","price":671.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":43482683277373,"sku":"LP-E30-AR","price":675.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet \/ Standard 12' Lead","offer_id":43482683310141,"sku":"LP-E30-AR","price":685.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":43482683342909,"sku":"LP-E30-AR","price":711.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":43482683375677,"sku":"LP-E30-AR","price":715.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack \/ Standard 12' Lead","offer_id":43482683408445,"sku":"LP-E30-AR","price":670.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":43482683441213,"sku":"LP-E30-AR","price":696.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":43482683473981,"sku":"LP-E30-AR","price":700.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975166013,"sku":"LP-E30-AW","price":645.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732312395837,"sku":"LP-E30-AW","price":671.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732312428605,"sku":"LP-E30-AW","price":675.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet \/ Standard 12' Lead","offer_id":42583975198781,"sku":"LP-E30-AW","price":685.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732312461373,"sku":"LP-E30-AW","price":711.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732312494141,"sku":"LP-E30-AW","price":715.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975231549,"sku":"LP-E30-AW","price":670.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732312526909,"sku":"LP-E30-AW","price":696.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732312559677,"sku":"LP-E30-AW","price":700.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975264317,"sku":"LP-E30-AB","price":615.62,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732312592445,"sku":"LP-E30-AB","price":641.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732312625213,"sku":"LP-E30-AB","price":645.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet \/ Standard 12' Lead","offer_id":42583975297085,"sku":"LP-E30-AB","price":655.62,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732312657981,"sku":"LP-E30-AB","price":681.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732312690749,"sku":"LP-E30-AB","price":685.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975329853,"sku":"LP-E30-AB","price":640.62,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732312723517,"sku":"LP-E30-AB","price":666.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732312756285,"sku":"LP-E30-AB","price":670.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975460925,"sku":"LP-E30-RW","price":615.62,"currency_code":"USD","in_stock":true},{"title":"Red \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732312789053,"sku":"LP-E30-RW","price":641.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732312821821,"sku":"LP-E30-RW","price":645.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet \/ Standard 12' Lead","offer_id":42583975493693,"sku":"LP-E30-RW","price":655.62,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732312854589,"sku":"LP-E30-RW","price":681.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732312887357,"sku":"LP-E30-RW","price":685.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975526461,"sku":"LP-E30-RW","price":640.62,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732312920125,"sku":"LP-E30-RW","price":666.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732312952893,"sku":"LP-E30-RW","price":670.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975362621,"sku":"LP-E30-RB","price":645.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732312985661,"sku":"LP-E30-RB","price":671.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732313018429,"sku":"LP-E30-RB","price":675.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet \/ Standard 12' Lead","offer_id":42583975395389,"sku":"LP-E30-RB","price":685.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732313051197,"sku":"LP-E30-RB","price":711.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732313083965,"sku":"LP-E30-RB","price":715.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975428157,"sku":"LP-E30-RB","price":670.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732313116733,"sku":"LP-E30-RB","price":696.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732313149501,"sku":"LP-E30-RB","price":700.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975559229,"sku":"LP-E30-RW","price":645.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732313182269,"sku":"LP-E30-RW","price":671.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732313215037,"sku":"LP-E30-RW","price":675.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet \/ Standard 12' Lead","offer_id":42583975591997,"sku":"LP-E30-RW","price":685.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732313247805,"sku":"LP-E30-RW","price":711.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732313280573,"sku":"LP-E30-RW","price":715.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975624765,"sku":"LP-E30-RW","price":670.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732313313341,"sku":"LP-E30-RW","price":696.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732313346109,"sku":"LP-E30-RW","price":700.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Door Jamb \/ Standard 12' Lead","offer_id":42583975657533,"sku":"LP-E30-AW","price":615.62,"currency_code":"USD","in_stock":true},{"title":"White \/ Door Jamb \/ 22' Total (12’ + 10' Extension)","offer_id":42732313378877,"sku":"LP-E30-AW","price":641.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Door Jamb \/ 27' Total (12’ + 15' Extension)","offer_id":42732313411645,"sku":"LP-E30-AW","price":645.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet \/ Standard 12' Lead","offer_id":42583975690301,"sku":"LP-E30-AW","price":655.62,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet \/ 22' Total (12’ + 10' Extension)","offer_id":42732313444413,"sku":"LP-E30-AW","price":681.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet \/ 27' Total (12’ + 15' Extension)","offer_id":42732313477181,"sku":"LP-E30-AW","price":685.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack \/ Standard 12' Lead","offer_id":42583975723069,"sku":"LP-E30-AW","price":640.62,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack \/ 22' Total (12’ + 10' Extension)","offer_id":42732313509949,"sku":"LP-E30-AW","price":666.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack \/ 27' Total (12’ + 15' Extension)","offer_id":42732313542717,"sku":"LP-E30-AW","price":670.57,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE30_Angled.png?v=1759159738"},{"product_id":"new-43-low-pro-emergency-light-bar","title":"43\" Low Pro Emergency Light Bar","description":"\u003c!-- LOWPRO INTERACTIVE PLAYER (test embed) --\u003e\n\u003cdiv id=\"lowpro-player-block\" style=\"margin:0 0 26px;\"\u003e\n\u003cdiv class=\"lowpro-cta\"\u003e\n\u003ch2 style=\"margin:0 0 4px;font-size:24px;line-height:1.25;\"\u003eTake the Controls: Try This Light Bar Live\u003c\/h2\u003e\n\u003cp style=\"margin:0 0 12px;font-size:15px;line-height:1.5;\"\u003ePick your colors, run the flash patterns, sweep the traffic advisor, and switch on the 360° Halo scene light, exactly like the controller in the box. Every module on a dual-color bar can show either color.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ciframe id=\"lowpro-player-frame\" class=\"lowpro-frame\" title=\"Low Pro Emergency Bar interactive demo\" style=\"width:100%;border:0;display:block;border-radius:16px;background:#0a0c0f;\" srcdoc='\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Black Oak LED · Low Pro Emergency Bar Interactive Demo\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n  :root{\n    --bg:#0a0c0f; --panel:#111418; --panel2:#161a20; --edge:#242a33;\n    --txt:#e8ecf2; --dim:#8a94a3; --white-led:#F4F8FF; --navy:#0B1B2B; --accent:#C8892A;\n  }\n  *{box-sizing:border-box; -webkit-tap-highlight-color:transparent}\n  html,body{margin:0;padding:0;background:var(--bg);color:var(--txt);\n    font-family:\"Segoe UI\",system-ui,-apple-system,Roboto,Arial,sans-serif;}\n  .wrap{max-width:1100px;margin:0 auto;padding:14px 16px 20px;}\n  header{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:6px}\n  .brand{font-weight:800;letter-spacing:.18em;font-size:19px;white-space:nowrap}\n  .brand span{color:var(--dim);font-weight:600}\n  .sub{color:var(--dim);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}\n  .stage{background:radial-gradient(ellipse at 50% 30%, #14181e 0%, #0b0d11 70%);\n    border:1px solid var(--edge);border-radius:14px;padding:6px 10px 2px;position:relative;overflow:hidden}\n  .stage svg{display:block;width:100%;height:auto}\n  .stageLabel{position:absolute;top:10px;left:14px;font-size:11px;letter-spacing:.14em;\n    color:#5b6470;text-transform:uppercase}\n  .haloBadge{position:absolute;top:10px;right:14px;display:none;align-items:center;gap:8px;\n    font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#dfe9f7;\n    background:rgba(70,90,120,.22);border:1px solid rgba(190,215,255,.35);\n    border-radius:999px;padding:5px 12px 5px 9px;backdrop-filter:blur(2px)}\n  .haloBadge .dot{width:8px;height:8px;border-radius:50%;background:#F4F8FF;\n    box-shadow:0 0 8px 2px rgba(220,235,255,.9);flex:none}\n  .haloBadge b{font-weight:700;color:#fff}\n  .haloBadge span{color:#9fb0c6;text-transform:none;letter-spacing:.02em}\n  @media(max-width:700px){.haloBadge span{display:none}}\n  .lower{display:grid;grid-template-columns:270px 1fr;gap:14px;margin-top:14px;align-items:stretch}\n  .compactSel{display:none}\n  @media(max-width:840px){\n    .stage{padding:8px 8px 4px}\n    .stageLabel{position:static;font-size:10px;margin:0 0 6px}\n    .haloBadge{position:static;font-size:10px;padding:4px 9px;margin:0 0 6px;width:max-content}\n    .wrap{padding:6px 6px 10px !important}\n    .lower{grid-template-columns:1fr;gap:10px}\n    .cardCtl{order:1}\n    .cardColors{order:2}\n    .cardColors .cRow,.cardColors .hint{display:none}\n    .cardColors.expanded .cRow{display:block}\n    .compactSel{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n    .compactSel .sw{cursor:default}\n    .compactSel .sw:hover{transform:none}\n  }\n  .card{background:var(--panel);border:1px solid var(--edge);border-radius:14px;padding:14px}\n  .card h3{margin:0 0 10px;font-size:11.5px;letter-spacing:.16em;color:var(--dim);\n    text-transform:uppercase;font-weight:700}\n  .cRow{margin-bottom:12px}\n  .cRow .lbl{font-size:12px;color:var(--dim);margin-bottom:6px;display:flex;justify-content:space-between;align-items:center}\n  .swatches{display:flex;gap:8px;flex-wrap:wrap}\n  .sw{width:38px;height:30px;border-radius:7px;border:2px solid #2c333d;cursor:pointer;\n    position:relative;transition:transform .08s}\n  .sw:hover{transform:translateY(-1px)}\n  .sw.sel{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.25),0 0 14px rgba(255,255,255,.15)}\n  .sw.none{background:repeating-linear-gradient(45deg,#1a1f26 0 6px,#12161b 6px 12px)}\n  .sw.none::after{content:\"OFF\";position:absolute;inset:0;display:flex;align-items:center;\n    justify-content:center;font-size:9px;color:#6b7480;font-weight:700;letter-spacing:.05em}\n  .swapBtn{background:var(--panel2);border:1px solid #2c333d;color:var(--txt);border-radius:7px;\n    font-size:11px;padding:4px 9px;cursor:pointer;letter-spacing:.06em}\n  .swapBtn:hover{border-color:#4a5462}\n  .hint{font-size:11.5px;line-height:1.5;color:#6d7684;border-top:1px solid var(--edge);\n    padding-top:10px;margin-top:2px}\n  .hint b{color:#9aa4b2;font-weight:600}\n  .ctlWrap{display:flex;justify-content:center}\n  .ctlWrap svg{width:100%;max-width:560px;height:auto}\n  .kb{cursor:pointer}\n  .kb rect.face,.kb circle.face,.kb path.face{fill:#20242b;stroke:#0c0e11;stroke-width:1.5;transition:fill .1s}\n  .kb:hover rect.face,.kb:hover circle.face,.kb:hover path.face{fill:#2e3641}\n  @keyframes ringPulse{0%,100%{stroke-opacity:.9}50%{stroke-opacity:.12}}\n  .pulseRing{fill:none;stroke:#ffb43a;stroke-width:2.5;animation:ringPulse 1.8s ease-in-out infinite;pointer-events:none}\n  @keyframes hintPulse{0%,100%{opacity:.6}50%{opacity:1}}\n  .tryHint{display:flex;justify-content:center;margin:10px 0 0}\n  .tryHint span{display:inline-flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.08em;\n    text-transform:uppercase;color:#ffcf7d;border:1px solid rgba(255,180,58,.45);border-radius:999px;\n    padding:6px 14px;animation:hintPulse 2.4s ease-in-out infinite;background:rgba(255,180,58,.07)}\n  .tryHint .dotLive{width:7px;height:7px;border-radius:50%;background:#ffb43a;\n    box-shadow:0 0 7px 2px rgba(255,180,58,.7);flex:none}\n  .kb.lit rect.face,.kb.lit circle.face,.kb.lit path.face{fill:#dfe7f5}\n  .kb.lit text{fill:#20242b;font-weight:600}\n  .kb:active rect.face,.kb:active circle.face,.kb:active path.face{fill:#aab6c9}\n  .kb.lit{filter:url(#btnGlow)}\n  .kb text{fill:#c7cdd6;font-size:11px;text-anchor:middle;pointer-events:none;user-select:none}\n  footer{margin-top:12px;color:#59626e;font-size:11px;letter-spacing:.04em;\n    display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}\n  footer a{color:#7d8794;text-decoration:none}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\"wrap\"\u0026gt;\n  \u0026lt;header\u0026gt;\n    \u0026lt;div class=\"brand\"\u0026gt;BLACK OAK \u0026lt;span\u0026gt;LED\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\"sub\"\u0026gt;Low Pro\u0026amp;trade; Emergency Bar · Interactive Demo \u0026amp;bull; 43\u0026amp;Prime;\u0026lt;\/div\u0026gt;\n  \u0026lt;\/header\u0026gt;\n\n  \u0026lt;div class=\"stage\"\u0026gt;\n    \u0026lt;div class=\"stageLabel\" id=\"patternLabel\"\u0026gt;Pattern 1 · Single Flash\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\"haloBadge\" id=\"haloBadge\"\u0026gt;\u0026lt;i class=\"dot\"\u0026gt;\u0026lt;\/i\u0026gt;\n      \u0026lt;b\u0026gt;360\u0026amp;deg; Halo\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;\u0026amp;nbsp;scene light \u0026amp;middot; runs with or without the flashers\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;svg id=\"barSvg\" viewBox=\"0 0 1000 240\" aria-label=\"Light bar simulation\"\u0026gt;\u0026lt;\/svg\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\"tryHint\" id=\"tryHint\"\u0026gt;\u0026lt;span\u0026gt;\u0026lt;i class=\"dotLive\"\u0026gt;\u0026lt;\/i\u0026gt;Live demo \u0026amp;middot; try the controller buttons\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\"lower\"\u0026gt;\n    \u0026lt;div class=\"card cardColors\" id=\"colorCard\"\u0026gt;\n      \u0026lt;h3\u0026gt;Select Colors\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\"compactSel\" id=\"compactSel\"\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\"cRow\"\u0026gt;\n        \u0026lt;div class=\"lbl\"\u0026gt;\u0026lt;span\u0026gt;Color 1\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\"swatches\" id=\"sw1\"\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\"cRow\"\u0026gt;\n        \u0026lt;div class=\"lbl\"\u0026gt;\u0026lt;span\u0026gt;Color 2 (dual color)\u0026lt;\/span\u0026gt;\n          \u0026lt;button class=\"swapBtn\" id=\"swapBtn\" title=\"Swap Color 1 and Color 2\"\u0026gt;\u0026amp;#8646; Swap\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\"swatches\" id=\"sw2\"\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\"hint\"\u0026gt;\n        Every LED module on the Low Pro can display \u0026lt;b\u0026gt;either\u0026lt;\/b\u0026gt; selected color:\n        pick two colors and each module switches between them.\n        The right-hand cluster runs the \u0026lt;b\u0026gt;360\u0026amp;deg; Halo scene light\u0026lt;\/b\u0026gt;, a Low Pro\n        exclusive: it floods the area around the vehicle with steady work light,\n        with or without the warning flashers running. Try the \u0026lt;b\u0026gt;White\u0026lt;\/b\u0026gt; button.\n      \u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\"card cardCtl\"\u0026gt;\n      \u0026lt;h3\u0026gt;Controller · press the buttons\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\"ctlWrap\"\u0026gt;\n        \u0026lt;svg id=\"ctl\" viewBox=\"0 0 560 300\" aria-label=\"Controller keypad\"\u0026gt;\u0026lt;\/svg\u0026gt;\n      \u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;footer\u0026gt;\n    \u0026lt;div\u0026gt;BLACK OAK LED · Navigate the Night.\u0026lt;\/div\u0026gt;\n    \u0026lt;div\u0026gt;Designed and engineered in Sarasota, Florida\u0026lt;\/div\u0026gt;\n  \u0026lt;\/footer\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\"use strict\";\nconst LEDCOLORS = {\n  amber:{main:\"#ffb43a\", core:\"#ffe9b0\", glow:\"#ff9d00\", label:\"Amber\"},\n  white:{main:\"#F4F8FF\", core:\"#ffffff\", glow:\"#cfe4ff\", label:\"White\"},\n  red:  {main:\"#ff2d23\", core:\"#ffb0a8\", glow:\"#ff1400\", label:\"Red\"},\n  blue: {main:\"#2a62ff\", core:\"#b8ccff\", glow:\"#0040ff\", label:\"Blue\"},\n  green:{main:\"#19d949\", core:\"#c2ffcf\", glow:\"#00c832\", label:\"Green\"}\n};\nconst HALO = {main:\"#F4F8FF\", core:\"#ffffff\", glow:\"#dcebff\"};\n\nconst S = {\n  color1:\"amber\", color2:\"white\",\n  c1on:true, c2on:false,\n  zones:{front:true, back:true, left:true, right:true},\n  halo:{front:false, back:false, left:false, right:false},\n  pattern:1,\n  ta:null,\n  cruise:false, random:false, dim50:false, autoSensor:false,\n  indicatorOff:false, favorite:1,\n  randTimer:0, randPat:1\n};\n\nconst NS=\"http:\/\/www.w3.org\/2000\/svg\";\nconst bar = document.getElementById(\"barSvg\");\nconst modules = [];\n\nfunction el(name, attrs, parent){\n  const e=document.createElementNS(NS,name);\n  for(const k in attrs) e.setAttribute(k,attrs[k]);\n  if(parent) parent.appendChild(e);\n  return e;\n}\n\nfunction buildBar(){\n  const defs = el(\"defs\",{},bar);\n  const mkGlow=(id,dev)=\u0026gt;{\n    const f=el(\"filter\",{id, x:\"-80%\",y:\"-80%\",width:\"260%\",height:\"260%\"},defs);\n    el(\"feGaussianBlur\",{stdDeviation:dev, result:\"b\"},f);\n    const m=el(\"feMerge\",{},f);\n    el(\"feMergeNode\",{in:\"b\"},m); el(\"feMergeNode\",{in:\"SourceGraphic\"},m);\n  };\n  mkGlow(\"ledGlow\",4);\n  (()=\u0026gt;{\n    const f=el(\"filter\",{id:\"haloGlow\", filterUnits:\"userSpaceOnUse\",\n      x:\"-120\",y:\"-160\",width:\"1240\",height:\"560\"},defs);\n    el(\"feGaussianBlur\",{stdDeviation:11, result:\"b\"},f);\n    const m=el(\"feMerge\",{},f);\n    el(\"feMergeNode\",{in:\"b\"},m); el(\"feMergeNode\",{in:\"SourceGraphic\"},m);\n  })();\n\n  const G = el(\"g\",{},bar);\n  const haloLayer = el(\"g\",{opacity:\"0\"},G);\n  const sidePaths = {\n    front:\"M 150,62 L 850,62\",\n    back: \"M 150,178 L 850,178\",\n    left: \"M 150,62 L 75,95 L 75,145 L 150,178\",\n    right:\"M 850,62 L 925,95 L 925,145 L 850,178\"\n  };\n  const haloEls = {};\n  for(const z in sidePaths){\n    const g=el(\"g\",{filter:\"url(#haloGlow)\"},haloLayer);\n    [[10,.9],[26,.4],[52,.16],[88,.07]].forEach(([wd,op])=\u0026gt;{\n      el(\"path\",{d:sidePaths[z], stroke:\"#eef4ff\", \"stroke-width\":wd, \"stroke-opacity\":op,\n        fill:\"none\", \"stroke-linecap\":\"round\", \"stroke-linejoin\":\"round\"},g);\n    });\n    haloEls[z]=g;\n  }\n  for(const k in haloEls){ haloEls[k].setAttribute(\"visibility\",\"hidden\"); }\n  S._haloEls = haloEls; haloLayer.setAttribute(\"opacity\",\"1\");\n\n  const bodyPts = \"150,62 850,62 925,95 925,145 850,178 150,178 75,145 75,95\";\n  el(\"polygon\",{points:bodyPts, fill:\"#15181d\", stroke:\"#3a4149\", \"stroke-width\":3},G);\n  el(\"polygon\",{points:\"158,70 842,70 913,99 913,141 842,170 158,170 87,141 87,99\",\n    fill:\"#0e1114\", stroke:\"#22272e\",\"stroke-width\":1},G);\n  el(\"text\",{x:500,y:112,\"text-anchor\":\"middle\",fill:\"#c9d0d9\",\"font-size\":\"21\",\n    \"font-weight\":\"800\",\"letter-spacing\":\"6\",\"font-family\":\"inherit\"},G).textContent=\"BLACK OAK\";\n  el(\"text\",{x:500,y:130,\"text-anchor\":\"middle\",fill:\"#4c545e\",\"font-size\":\"9\",\n    \"letter-spacing\":\"2\"},G).textContent=\"SAE W3-1 22\";\n  el(\"circle\",{cx:500,cy:148,r:5,fill:\"#20252b\",stroke:\"#3a4149\"},G);\n\n  const ledLayer = el(\"g\",{},G);\n  const N=12;\n  const w=53, h=12, gap=4.6;\n  const startX=155, span=690;\n  let order=0;\n  const addMod=(zone,x,y,rot,cx,cy)=\u0026gt;{\n    const g=el(\"g\",{transform:`rotate(${rot} ${cx} ${cy})`},ledLayer);\n    const lens=el(\"rect\",{x,y,width:w,height:h,rx:4, fill:\"#23282f\", stroke:\"#10131a\",\"stroke-width\":1},g);\n    const halo=el(\"rect\",{x:x-6,y:y-6,width:w+12,height:h+12,rx:9, fill:\"none\",opacity:0, filter:\"url(#ledGlow)\"},g);\n    modules.push({zone, lens, halo, idx:order++, px:x+w\/2});\n  };\n  const addRot=(zone,cx,cy,len,rot)=\u0026gt;{\n    const g=el(\"g\",{transform:`rotate(${rot} ${cx} ${cy})`},ledLayer);\n    const lens=el(\"rect\",{x:cx-len\/2,y:cy-h\/2,width:len,height:h,rx:4,\n      fill:\"#23282f\",stroke:\"#10131a\",\"stroke-width\":1},g);\n    const halo=el(\"rect\",{x:cx-len\/2-6,y:cy-h\/2-6,width:len+12,height:h+12,rx:9,\n      fill:\"none\",opacity:0,filter:\"url(#ledGlow)\"},g);\n    modules.push({zone,lens,halo,idx:modules.length,px:cx});\n  };\n  for(let i=0;i\u0026lt;N;i++){ const x=startX+i*(span\/N)+gap\/2; addMod(\"front\",x,52,0,0,0); }\n  addRot(\"right\",884,73,68,23.7);\n  addRot(\"right\",921,120,46,90);\n  addRot(\"right\",884,167,68,-23.7);\n  for(let i=N-1;i\u0026gt;=0;i--){ const x=startX+i*(span\/N)+gap\/2; addMod(\"back\",x,176,0,0,0); }\n  addRot(\"left\",116,167,68,23.7);\n  addRot(\"left\",79,120,46,90);\n  addRot(\"left\",116,73,68,-23.7);\n}\nbuildBar();\nconst NMOD = modules.length;\nconst frontMods = modules.filter(m=\u0026gt;m.zone===\"front\");\nconst backMods  = modules.filter(m=\u0026gt;m.zone===\"back\");\nconst halfSplit = m=\u0026gt;{\n  if(m.zone===\"left\") return \"L\";\n  if(m.zone===\"right\") return \"R\";\n  const list = m.zone===\"front\"?frontMods:backMods;\n  const pos = list.indexOf(m);\n  const leftSide = m.zone===\"front\" ? pos \u0026lt; list.length\/2 : pos \u0026gt;= list.length\/2;\n  return leftSide ? \"L\" : \"R\";\n};\nmodules.forEach(m=\u0026gt;m.side=halfSplit(m));\nconst PXMIN=Math.min(...modules.map(m=\u0026gt;m.px)), PXMAX=Math.max(...modules.map(m=\u0026gt;m.px));\n\nfunction pulse(t, cycle, n){\n  const ph = t % cycle;\n  if(n===1) return ph \u0026lt; 168;\n  const sub = cycle\u0026gt;=800 ? 84 : (n===2 ? 83 : 67);\n  const onw = cycle\u0026gt;=800 ? 67 : 50;\n  if(ph \u0026gt;= n*sub) return false;\n  return (ph % sub) \u0026lt; onw;\n}\nfunction burst(local, half, n){\n  const sub = Math.min(half\u0026gt;=400 ? 84 : 67, half\/n);\n  if(local \u0026gt;= n*sub) return false;\n  return (local % sub) \u0026lt; sub*.75;\n}\nconst PATTERNS = {\n  1:{name:\"Single Flash\",    cyc:400, f:(t,c)=\u0026gt;pulse(t,c,1)},\n  2:{name:\"Double Flash\",    cyc:400, f:(t,c)=\u0026gt;pulse(t,c,2)},\n  3:{name:\"Triple Flash\",    cyc:400, f:(t,c)=\u0026gt;pulse(t,c,3)},\n  4:{name:\"Quintuple Flash\", cyc:800, f:(t,c)=\u0026gt;pulse(t,c,5)},\n  5:{name:\"Slow Single Flash\",cyc:800,f:(t,c)=\u0026gt;(t%c) \u0026lt; 434},\n  6:{name:\"Two Adjacent Groups Alternate\", cyc:400, group:true},\n  7:{name:\"Left \/ Right 3-Flash Alternate\", cyc:400, lr:3},\n  8:{name:\"Left \/ Right 5-Flash Alternate\", cyc:800, lr:5},\n  9:{name:\"Counterclockwise Rotation\", cyc:1400, rot:-1},\n  10:{name:\"Clockwise Rotation\",       cyc:1400, rot:1},\n  11:{name:\"Left Steady + Right Quintuple\", cyc:800, steady:\"L\"},\n  12:{name:\"Right Steady + Left Quintuple\", cyc:800, steady:\"R\"}\n};\n\nfunction moduleState(m, t){\n  const dual = S.c1on \u0026amp;\u0026amp; S.c2on \u0026amp;\u0026amp; S.color2;\n  const single = (S.c1on?1:0)+(S.c2on\u0026amp;\u0026amp;S.color2?1:0)===1;\n  if(!dual \u0026amp;\u0026amp; !single) return null;\n  const cA = S.c1on ? S.color1 : S.color2;\n  const P = PATTERNS[S.pattern];\n  const cyc = P.cyc;\n\n  if(S.cruise){\n    const col = dual ? (m.side===\"L\"?S.color1:S.color2) : cA;\n    return {color:col, intensity:.7};\n  }\n\n  let phaseColor = cA;\n  let tt = t;\n  if(dual){\n    const period = cyc*2;\n    const first = (t % period) \u0026lt; cyc;\n    phaseColor = first ? S.color1 : S.color2;\n    tt = t % cyc;\n  }\n\n  if(P.rot){\n    const pos = (t % cyc)\/cyc;\n    const head = P.rot===1 ? pos : 1-pos;\n    const center = head*NMOD;\n    let d = Math.abs(m.idx - center);\n    d = Math.min(d, NMOD-d);\n    if(d \u0026gt; 3.2) return null;\n    const col = dual ? (Math.floor(t\/cyc)%2? S.color2 : S.color1) : cA;\n    return {color:col, intensity: 1 - d\/3.6};\n  }\n  if(P.lr){\n    const firstHalf = (tt % cyc) \u0026lt; cyc\/2;\n    const mineFirst = m.side===\"L\";\n    if(firstHalf!==mineFirst) return null;\n    const local = tt % (cyc\/2);\n    if(!burst(local, cyc\/2, P.lr)) return null;\n    const col = dual ? (m.side===\"L\"?S.color1:S.color2) : cA;\n    return {color:col, intensity:1};\n  }\n  if(P.group){\n    const g = Math.floor(m.idx\/2)%2;\n    const firstHalf = (tt % cyc) \u0026lt; cyc\/2;\n    if((g===0)!==firstHalf) return null;\n    const local = tt % (cyc\/2);\n    if(!burst(local, cyc\/2, 3)) return null;\n    const col = dual ? (g===0?S.color1:S.color2) : phaseColor;\n    return {color:col, intensity:1};\n  }\n  if(P.steady){\n    const steadySide = P.steady;\n    if(m.side===steadySide){\n      const col = dual ? S.color1 : cA;\n      return {color:col, intensity:.4};\n    }\n    if(!pulse(tt,cyc,5)) return null;\n    const col = dual ? S.color2 : cA;\n    return {color:col, intensity:1};\n  }\n  if(!P.f(tt,cyc)) return null;\n  if(dual){\n    if(S.pattern===2||S.pattern===3){\n      const flip = S.pattern===3;\n      const c1side = flip? \"R\":\"L\";\n      return {color: m.side===c1side? S.color1:S.color2, intensity:1};\n    }\n    return {color:phaseColor, intensity:1};\n  }\n  return {color:cA, intensity:1};\n}\n\nfunction taSweep(m, t){\n  const dual = S.c1on \u0026amp;\u0026amp; S.c2on \u0026amp;\u0026amp; S.color2;\n  const T = 1600;\n  const pass = Math.floor(t\/T) % (dual?2:1);\n  const col = dual ? (pass===0 ? S.color1 : S.color2)\n                   : (S.c1on ? S.color1 : (S.color2||S.color1));\n  const ph=(t%T)\/T;\n  let build;\n  if(ph\u0026lt;.65) build = ph\/.65;\n  else if(ph\u0026lt;.8) build = 1;\n  else return null;\n  const p = (m.px-PXMIN)\/(PXMAX-PXMIN);\n  const e = .002;\n  let on=false;\n  if(S.ta===\"right\")      on = p \u0026lt;= build+e;\n  else if(S.ta===\"left\")  on = (1-p) \u0026lt;= build+e;\n  else                    on = Math.abs(p-0.5) \u0026lt;= build*0.5+e;\n  return on? {color:col,intensity:1} : null;\n}\n\nlet lastPatternShown=-1;\nfunction render(t){\n  const dimMul = S.dim50? .45 : 1;\n  if(S.random \u0026amp;\u0026amp; t-S.randTimer\u0026gt;4000){\n    S.randTimer=t; S.pattern = 1+Math.floor(Math.random()*12); syncUI();\n  }\n  const warnOn = (S.c1on || (S.c2on\u0026amp;\u0026amp;S.color2));\n  for(const m of modules){\n    let st;\n    if(S.ta) st = taSweep(m,t);\n    else if(warnOn \u0026amp;\u0026amp; S.zones[m.zone]) st = moduleState(m,t);\n    else st = null;\n    m.cur = st;\n    if(st){ m.lastT=t; m.lastC=st.color; m.lastK=st.intensity; }\n    let drawC=null, drawK=0;\n    if(st){ drawC=st.color; drawK=st.intensity; }\n    else if(m.lastC \u0026amp;\u0026amp; (t-m.lastT)\u0026lt;70){ drawC=m.lastC; drawK=m.lastK*(1-(t-m.lastT)\/70)*.7; }\n    if(drawC){\n      const c=LEDCOLORS[drawC];\n      const k=drawK*dimMul;\n      m.lens.setAttribute(\"fill\", k\u0026gt;.55? c.core : c.main);\n      m.lens.setAttribute(\"stroke\", c.main);\n      m.halo.setAttribute(\"fill\", c.glow);\n      m.halo.setAttribute(\"opacity\", (0.85*k).toFixed(2));\n    }else{\n      m.lens.setAttribute(\"fill\",\"#23282f\");\n      m.lens.setAttribute(\"stroke\",\"#10131a\");\n      m.halo.setAttribute(\"opacity\",\"0\");\n    }\n  }\n  for(const z in S._haloEls){\n    S._haloEls[z].setAttribute(\"visibility\", S.halo[z]? \"visible\":\"hidden\");\n    S._haloEls[z].setAttribute(\"opacity\", (.85*dimMul).toFixed(2));\n  }\n  if(S._dots){\n    const RED=\"#ff2622\", OFF=\"#1c2026\";\n    for(const row of [\"front\",\"back\"]){\n      const src = row===\"front\"? frontMods : backMods.slice().reverse();\n      S._dots[row].forEach((dot,i)=\u0026gt;{\n        if(S.indicatorOff){ dot.setAttribute(\"fill\",OFF); return; }\n        const m = src[Math.round(i*(src.length-1)\/(S._dots[row].length-1))];\n        dot.setAttribute(\"fill\", m.cur? RED : OFF);\n      });\n    }\n    const zoneLit = z =\u0026gt; modules.some(m=\u0026gt;m.zone===z \u0026amp;\u0026amp; m.cur);\n    S._dotL.setAttribute(\"fill\", (!S.indicatorOff \u0026amp;\u0026amp; zoneLit(\"left\"))?  RED : OFF);\n    S._dotR.setAttribute(\"fill\", (!S.indicatorOff \u0026amp;\u0026amp; zoneLit(\"right\"))? RED : OFF);\n  }\n  if(S.pattern!==lastPatternShown){ lastPatternShown=S.pattern; updateLabel(); }\n  requestAnimationFrame(render);\n}\n\nfunction updateLabel(){\n  const P=PATTERNS[S.pattern];\n  document.getElementById(\"patternLabel\").textContent =\n    `Pattern ${S.pattern} · ${P.name}` + (S.cruise? \"  •  Cruise\":\"\") + (S.ta\u0026amp;\u0026amp;!tourActive? `  •  Traffic Advisor ${S.ta}`:\"\");\n  drawDisplay();\n}\n\nconst ORDER=[\"amber\",\"white\",\"red\",\"blue\",\"green\"];\nfunction buildCompact(){\n  const c=document.getElementById(\"compactSel\");\n  c.innerHTML=\"\";\n  const mk=(col)=\u0026gt;{ const d=document.createElement(\"div\"); d.className=\"sw\";\n    d.style.background=LEDCOLORS[col].main; d.title=LEDCOLORS[col].label; return d; };\n  const lab=document.createElement(\"span\");\n  lab.style.cssText=\"font-size:12px;color:#8a94a3\";\n  lab.textContent=\"Your colors:\";\n  c.appendChild(lab);\n  c.appendChild(mk(S.color1));\n  if(S.color2){ c.appendChild(mk(S.color2)); }\n  const btn=document.createElement(\"button\");\n  btn.className=\"swapBtn\";\n  const card=document.getElementById(\"colorCard\");\n  btn.textContent = card.classList.contains(\"expanded\") ? \"Done\" : \"Change colors\";\n  btn.onclick=()=\u0026gt;{ card.classList.toggle(\"expanded\"); buildCompact(); };\n  c.appendChild(btn);\n}\nfunction buildSwatches(){\n  buildCompact();\n  const s1=document.getElementById(\"sw1\"), s2=document.getElementById(\"sw2\");\n  s1.innerHTML=\"\"; s2.innerHTML=\"\";\n  for(const c of ORDER){\n    const d=document.createElement(\"div\");\n    d.className=\"sw\"+(S.color1===c?\" sel\":\"\");\n    d.style.background=LEDCOLORS[c].main; d.title=LEDCOLORS[c].label;\n    d.onclick=()=\u0026gt;{ S.color1=c; if(S.color2===c) S.color2=null; buildSwatches(); };\n    s1.appendChild(d);\n  }\n  const none=document.createElement(\"div\");\n  none.className=\"sw none\"+(S.color2===null?\" sel\":\"\");\n  none.title=\"Single color\"; none.onclick=()=\u0026gt;{S.color2=null; buildSwatches();};\n  s2.appendChild(none);\n  for(const c of ORDER){\n    if(c===S.color1) continue;\n    const d=document.createElement(\"div\");\n    d.className=\"sw\"+(S.color2===c?\" sel\":\"\");\n    d.style.background=LEDCOLORS[c].main; d.title=LEDCOLORS[c].label;\n    d.onclick=()=\u0026gt;{ S.color2=c; S.c2on=true; buildSwatches(); syncUI(); };\n    s2.appendChild(d);\n  }\n}\ndocument.getElementById(\"swapBtn\").onclick=()=\u0026gt;{\n  if(!S.color2) return;\n  [S.color1,S.color2]=[S.color2,S.color1]; buildSwatches();\n};\n\nconst ctl=document.getElementById(\"ctl\");\nconst buttons={};\nfunction buildController(){\n  const defs=el(\"defs\",{},ctl);\n  const f=el(\"filter\",{id:\"btnGlow\",x:\"-40%\",y:\"-40%\",width:\"180%\",height:\"180%\"},defs);\n  el(\"feGaussianBlur\",{stdDeviation:\"2.2\",result:\"b\"},f);\n  const mg=el(\"feMerge\",{},f);\n  el(\"feMergeNode\",{in:\"b\"},mg); el(\"feMergeNode\",{in:\"SourceGraphic\"},mg);\n\n  el(\"rect\",{x:2,y:2,width:556,height:296,rx:26,fill:\"#17191d\",stroke:\"#000\",\"stroke-width\":2},ctl);\n  el(\"rect\",{x:12,y:12,width:536,height:276,rx:20,fill:\"none\",stroke:\"#262a31\",\"stroke-width\":1.5},ctl);\n\n  const btn=(key,label,x,y,shape,w,h,fs)=\u0026gt;{\n    const g=el(\"g\",{class:\"kb\",tabindex:\"0\",role:\"button\",\"aria-label\":label.replace(\"\\n\",\" \")},ctl);\n    if(shape===\"circle\") el(\"circle\",{class:\"face\",cx:x,cy:y,r:w},g);\n    else if(shape===\"rect\") el(\"rect\",{class:\"face\",x:x-w\/2,y:y-h\/2,width:w,height:h,rx:8},g);\n    else el(\"path\",{class:\"face\",d:shape},g);\n    const lines=label.split(\"\\n\");\n    lines.forEach((ln,i)=\u0026gt;{\n      const tv = el(\"text\",{x:x, y:y+(i-(lines.length-1)\/2)*11+4, \"font-size\":fs||10.5},g);\n      tv.textContent=ln;\n    });\n    g.addEventListener(\"click\",()=\u0026gt;press(key));\n    g.addEventListener(\"keydown\",e=\u0026gt;{if(e.key===\"Enter\"||e.key===\" \"){e.preventDefault();press(key);}});\n    buttons[key]={g};\n    return g;\n  };\n\n  const lx=88, ly=88;\n  btn(\"z_front\",\"Front\", lx,   ly-38,\"circle\",19);\n  btn(\"z_left\",\"Left\",   lx-52,ly,   \"circle\",19);\n  btn(\"z_all\",\"ALL\",     lx,   ly,   \"circle\",19);\n  btn(\"z_right\",\"Right\", lx+52,ly,   \"circle\",19);\n  btn(\"z_back\",\"Back\",   lx,   ly+38,\"circle\",19);\n\n  el(\"rect\",{x:170,y:34,width:220,height:64,rx:12,fill:\"#0a0c0e\",stroke:\"#26292f\"},ctl);\n  el(\"text\",{x:280,y:71,\"text-anchor\":\"middle\",fill:\"#b9c1cc\",\"font-size\":\"15\",\n    \"font-weight\":\"800\",\"letter-spacing\":\"4\"},ctl).textContent=\"BLACK OAK\";\n  S._dots={front:[],back:[]};\n  for(let i=0;i\u0026lt;8;i++){\n    S._dots.front.push(el(\"circle\",{cx:198+i*24,cy:46,r:3.4,fill:\"#1c2026\"},ctl));\n    S._dots.back.push( el(\"circle\",{cx:198+i*24,cy:86,r:3.4,fill:\"#1c2026\"},ctl));\n  }\n  S._dotL = el(\"circle\",{cx:182,cy:66,r:3.4,fill:\"#1c2026\"},ctl);\n  S._dotR = el(\"circle\",{cx:382,cy:66,r:3.4,fill:\"#1c2026\"},ctl);\n\n  btn(\"ta_left\",\"Left\", 210,126,\"M186 126 L214 108 L226 108 L226 144 L214 144 Z\",0,0,9.5);\n  btn(\"ta_both\",\"Traffic\\nAdvisor\",272,126,\"M232 108 L308 108 L318 126 L308 144 L232 144 L242 126 Z\",0,0,9.5);\n  btn(\"ta_right\",\"Right\",330,126,\"M314 108 L326 108 L354 126 L326 144 L314 144 Z\",0,0,9.5);\n\n  const rx=470, ry=88;\n  btn(\"h_front\",\"Front\", rx,   ry-38,\"circle\",19);\n  btn(\"h_left\",\"Left\",   rx-52,ry,   \"circle\",19);\n  btn(\"h_white\",\"White\", rx,   ry,   \"circle\",19);\n  btn(\"h_right\",\"Right\", rx+52,ry,   \"circle\",19);\n  btn(\"h_back\",\"Back\",   rx,   ry+38,\"circle\",19);\n  el(\"text\",{x:rx,y:ry+68,\"text-anchor\":\"middle\",fill:\"#7f8b9c\",\"font-size\":\"9.5\",\n    \"font-weight\":\"700\",\"letter-spacing\":\"1.5\"},ctl).textContent=\"360° HALO\";\n  el(\"text\",{x:rx,y:ry+79,\"text-anchor\":\"middle\",fill:\"#59636f\",\"font-size\":\"8\",\n    \"letter-spacing\":\"1\"},ctl).textContent=\"SCENE LIGHT\";\n\n  btn(\"c1\",\"Color 1\\nON\/OFF\",   62,190,\"rect\",66,40,9.5);\n  btn(\"c2\",\"Color 2\\nON\/OFF\",  136,190,\"rect\",66,40,9.5);\n  btn(\"dim\",\"50%\",              62,244,\"rect\",66,34);\n  btn(\"auto\",\"Auto\\nSensor\",   136,244,\"rect\",66,40,9.5);\n\n  btn(\"last\",\"Last\\nPattern\",  228,218,\"rect\",62,44,9.5);\n  btn(\"next\",\"Next\\nPattern\",  298,218,\"rect\",62,44,9.5);\n  S._ring = el(\"rect\",{x:262,y:190,width:72,height:56,rx:12,class:\"pulseRing\"},ctl);\n\n  btn(\"ind\",\"Indicator\",       412,190,\"rect\",74,36,9.5);\n  btn(\"cruise\",\"Cruise\\nLight\",496,190,\"rect\",70,40,9.5);\n  btn(\"rand\",\"Random\",         412,244,\"rect\",74,36,9.5);\n  btn(\"fav\",\"Favorite\\nPattern\",496,244,\"rect\",70,40,9.5);\n}\nbuildController();\n\nfunction drawDisplay(){}\n\nlet favHold=null;\nfunction press(key){\n  markInteract();\n  switch(key){\n    case \"z_all\":{\n      const allOn=S.zones.front\u0026amp;\u0026amp;S.zones.back\u0026amp;\u0026amp;S.zones.left\u0026amp;\u0026amp;S.zones.right;\n      const v=!allOn; S.zones={front:v,back:v,left:v,right:v}; break;}\n    case \"z_front\": S.zones.front=!S.zones.front; break;\n    case \"z_back\":  S.zones.back=!S.zones.back; break;\n    case \"z_left\":  S.zones.left=!S.zones.left; break;\n    case \"z_right\": S.zones.right=!S.zones.right; break;\n    case \"h_white\":{\n      const allOn=S.halo.front\u0026amp;\u0026amp;S.halo.back\u0026amp;\u0026amp;S.halo.left\u0026amp;\u0026amp;S.halo.right;\n      const v=!allOn; S.halo={front:v,back:v,left:v,right:v}; break;}\n    case \"h_front\": S.halo.front=!S.halo.front; break;\n    case \"h_back\":  S.halo.back=!S.halo.back; break;\n    case \"h_left\":  S.halo.left=!S.halo.left; break;\n    case \"h_right\": S.halo.right=!S.halo.right; break;\n    case \"c1\": S.c1on=!S.c1on; break;\n    case \"c2\": if(S.color2) S.c2on=!S.c2on; break;\n    case \"next\": S.pattern=S.pattern%12+1; S.cruise=false; S.random=false; break;\n    case \"last\": S.pattern=(S.pattern+10)%12+1; S.cruise=false; S.random=false; break;\n    case \"cruise\": S.cruise=!S.cruise; if(S.cruise){S.random=false;} break;\n    case \"rand\": S.random=!S.random; if(S.random){S.cruise=false; S.randTimer=0;} break;\n    case \"dim\": S.dim50=!S.dim50; break;\n    case \"auto\": S.autoSensor=!S.autoSensor; break;\n    case \"ind\": S.indicatorOff=!S.indicatorOff; break;\n    case \"ta_left\":  S.ta = S.ta===\"left\"? null:\"left\"; break;\n    case \"ta_right\": S.ta = S.ta===\"right\"? null:\"right\"; break;\n    case \"ta_both\":  S.ta = S.ta===\"both\"? null:\"both\"; break;\n    case \"fav\": S.pattern=S.favorite; S.cruise=false; S.random=false; break;\n  }\n  updateLabel(); syncUI();\n}\n(function(){\n  const g=buttons[\"fav\"].g;\n  let t0=0;\n  g.addEventListener(\"pointerdown\",()=\u0026gt;{ t0=Date.now();\n    favHold=setTimeout(()=\u0026gt;{ S.favorite=S.pattern; flash(g); },1200); });\n  const clear=()=\u0026gt;{ if(favHold){clearTimeout(favHold); favHold=null;} };\n  g.addEventListener(\"pointerup\",clear); g.addEventListener(\"pointerleave\",clear);\n  function flash(el){ el.classList.add(\"lit\"); setTimeout(()=\u0026gt;syncUI(),400); }\n})();\n\nfunction syncUI(){\n  const setLit=(k,v)=\u0026gt;buttons[k].g.classList.toggle(\"lit\",!!v);\n  setLit(\"z_front\",S.zones.front); setLit(\"z_back\",S.zones.back);\n  setLit(\"z_left\",S.zones.left);   setLit(\"z_right\",S.zones.right);\n  setLit(\"z_all\",S.zones.front\u0026amp;\u0026amp;S.zones.back\u0026amp;\u0026amp;S.zones.left\u0026amp;\u0026amp;S.zones.right);\n  setLit(\"h_front\",S.halo.front); setLit(\"h_back\",S.halo.back);\n  setLit(\"h_left\",S.halo.left);   setLit(\"h_right\",S.halo.right);\n  setLit(\"h_white\",S.halo.front\u0026amp;\u0026amp;S.halo.back\u0026amp;\u0026amp;S.halo.left\u0026amp;\u0026amp;S.halo.right);\n  setLit(\"c1\",S.c1on); setLit(\"c2\",S.c2on\u0026amp;\u0026amp;!!S.color2);\n  setLit(\"cruise\",S.cruise); setLit(\"rand\",S.random);\n  setLit(\"dim\",S.dim50); setLit(\"auto\",S.autoSensor); setLit(\"ind\",S.indicatorOff);\n  setLit(\"ta_left\",S.ta===\"left\"\u0026amp;\u0026amp;!tourActive); setLit(\"ta_right\",S.ta===\"right\"\u0026amp;\u0026amp;!tourActive); setLit(\"ta_both\",S.ta===\"both\"\u0026amp;\u0026amp;!tourActive);\n  const haloOn = S.halo.front||S.halo.back||S.halo.left||S.halo.right;\n  document.getElementById(\"haloBadge\").style.display = haloOn? \"flex\":\"none\";\n  drawDisplay();\n}\n\n\/* default everywhere: dual-color amber\/white, steady burn; the attract sweep provides motion *\/\nS.c2on=true; S.cruise=true;\nS.interacted=false;\nlet tourActive=false, tourTimer=null, idleTimer=null;\nbuildSwatches(); syncUI(); updateLabel();\nrequestAnimationFrame(render);\n\n\/* ATTRACT MODE *\/\nfunction markInteract(){\n  if(S.interacted) return;\n  S.interacted=true;\n  if(tourActive){ tourActive=false; S.ta=null; }\n  clearTimeout(tourTimer); clearTimeout(idleTimer);\n  const h=document.getElementById(\"tryHint\");\n  if(h){ h.style.transition=\"opacity .5s\"; h.style.opacity=\"0\"; setTimeout(()=\u0026gt;h.remove(),600); }\n  if(S._ring) S._ring.remove();\n}\nfunction attractSweep(passes){\n  if(S.interacted || tourActive) return;\n  tourActive=true; S.ta=\"both\";\n  tourTimer=setTimeout(()=\u0026gt;{\n    if(tourActive){ tourActive=false; S.ta=null; }\n    scheduleIdle();\n  }, 1600*passes+400);\n}\nfunction scheduleIdle(){\n  if(S.interacted) return;\n  clearTimeout(idleTimer);\n  idleTimer=setTimeout(()=\u0026gt;attractSweep(1), 18000);\n}\ndocument.addEventListener(\"pointerdown\",e=\u0026gt;{\n  if(e.target.closest \u0026amp;\u0026amp; e.target.closest(\".sw,.swapBtn,.kb\")) markInteract();\n},true);\n(function(){\n  let fired=false;\n  const start=()=\u0026gt;{ if(!fired){ fired=true; setTimeout(()=\u0026gt;attractSweep(2), 600); } };\n  if(window.IntersectionObserver){\n    new IntersectionObserver((es,obs)=\u0026gt;{\n      if(es.some(e=\u0026gt;e.isIntersecting)){ start(); obs.disconnect(); }\n    },{threshold:.5}).observe(document.querySelector(\".stage\"));\n  } else start();\n})();\n\n(function(){\n  const embedded = (window!==parent);\n  if(embedded){\n    document.querySelector(\"header\").style.display=\"none\";\n    document.querySelector(\"footer\").style.display=\"none\";\n    if(window.innerWidth\u0026gt;840) document.querySelector(\".wrap\").style.padding=\"10px 12px 14px\";\n  }\n  const report=()=\u0026gt;{ try{\n    parent.postMessage({type:\"lowpro-player-height\",\n      height: document.querySelector(\".wrap\").scrollHeight+8}, \"*\");\n  }catch(e){} };\n  if(window.ResizeObserver) new ResizeObserver(report).observe(document.querySelector(\".wrap\"));\n  window.addEventListener(\"load\",report); window.addEventListener(\"pageshow\",report);\n  setTimeout(report,400); setTimeout(report,1500);\n  let n=0; const iv=setInterval(()=\u0026gt;{ report(); if(++n\u0026gt;10) clearInterval(iv); },1200);\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;\n'\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.lowpro-frame{height:700px}\n@media(max-width:840px){\n  .lowpro-cta{display:none}\n  .lowpro-frame{height:760px}\n}\n\u003c\/style\u003e\n\u003cscript\u003e\nwindow.addEventListener(\"message\",function(e){\n  if(e.data \u0026\u0026 e.data.type===\"lowpro-player-height\"){\n    var f=document.getElementById(\"lowpro-player-frame\");\n    if(f \u0026\u0026 e.data.height\u003e200) f.style.height=(e.data.height+4)+\"px\";\n  }\n});\n\u003c\/script\u003e\n\u003cdiv style=\"height:28px;\"\u003e \u003c\/div\u003e\n\u003cp\u003e\u003c!-- Intro Section --\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cstrong\u003eBuilt for emergency response teams and public safety professionals, this high-intensity LED warning light bar delivers uncompromising performance in a sleek, durable design.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp data-end=\"806\" data-start=\"530\"\u003eThe Black Oak Low Pro Emergency Series Light Bar is engineered for maximum visibility, reliability, and user control. With ultra-bright LEDs, multiple flash patterns, and a rugged housing, this bar ensures your presence is known in any emergency situation, day or night, rain or shine.\u003c\/p\u003e\n\u003cp data-end=\"806\" data-start=\"530\"\u003e \u003c\/p\u003e\n\u003cp data-end=\"1177\" data-start=\"808\"\u003eBuilt to withstand the demands of high-speed response, off-road utility, or work site visibility, this low-profile bar features a streamlined, aerodynamic frame and a universal mounting system to ensure easy installation on any vehicle. Whether you're outfitting a patrol car, fire unit, or utility truck, this bar delivers dependable performance where it matters most.\u003c\/p\u003e\n\u003cbr\u003e\n\u003c!-- TRUST STRIP --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Screenshot_2026-07-21_at_9.31.14_AM.png?v=1784641940\" alt=\"SAE J845 Certified, SAE J595 Class 1, IP69K Waterproof, Lifetime Warranty, -40F to +145F Rated, 50,000 Hour LEDs\" style=\"width:100%;display:block;border-radius:10px;\"\u003e\u003c\/p\u003e\n\u003c!-- SIZE SELECTOR --\u003e\n\u003cdiv style=\"margin:4px 0 2px;\"\u003e\n\u003cp style=\"margin:0 0 8px;font-weight:600;font-size:15px;\"\u003eAvailable sizes:\u003c\/p\u003e\n\u003ca href=\"\/products\/11-mini-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e11\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-17-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e17\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-30-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e30\"\u003c\/a\u003e\n\u003cspan style=\"display:inline-block;background:#FFB300;color:#111;font-weight:700;padding:8px 14px;border-radius:8px;margin:0 6px 8px 0;font-size:15px;\"\u003e43\"\u003c\/span\u003e\n\u003ca href=\"\/products\/low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e49\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-55-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e55\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-61-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e61\"\u003c\/a\u003e\n\u003ca href=\"\/products\/new-68-low-pro-emergency-light-bar\" style=\"display:inline-block;border:2px solid #FFB300;color:#111;font-weight:700;padding:6px 12px;border-radius:8px;margin:0 6px 8px 0;text-decoration:none;font-size:15px;\"\u003e68\"\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\n\u003c!-- Collapsable Sections --\u003e\n\u003cstyle\u003e\n#MainContent details {\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  margin-bottom: 16px;\n  overflow: hidden;\n  background: #fff;\n  font-family: Arial, sans-serif;\n}\n\n#MainContent details summary {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  cursor: pointer;\n  padding: 14px 18px;\n  font-weight: 600;\n  font-size: 18px;\n  list-style: none;\n  background-color: #f9f9f9;\n  border-bottom: 1px solid #e0e0e0;\n  position: relative;\n}\n\n#MainContent details[open] summary {\n  background-color: #f1f1f1;\n}\n\n#MainContent details summary::after {\n  content: '+';\n  font-size: 20px;\n  font-weight: bold;\n  transition: transform 0.3s ease;\n}\n\n#MainContent details[open] summary::after {\n  content: '−';\n}\n\n#MainContent details .content {\n  padding: 16px 20px;\n  font-size: 16px;\n  line-height: 1.6;\n}\n\u003c\/style\u003e\n\u003cdetails\u003e\n\u003csummary\u003eFeatures\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003eLifetime Warranty\u003c\/li\u003e\n\u003cli\u003eSAE J845 Class 1 Certified\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003e360° visibility with dual-color ultra-bright LEDs\u003c\/li\u003e\n\u003cli\u003eSlim Low Profile design\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003eUp to 45 flash patterns with memory recall\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003eRugged, waterproof housing (IP69K rated)\u003c\/li\u003e\n\u003cli\u003e\n\u003cmeta charset=\"utf-8\"\u003eIntegrated controller with pattern cycling, cruise mode, and cut-off\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIn the Box\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cb\u003eLow Pro Light Bar\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eController\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eWiring\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eStandard Feet\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eJamb Brackets\u003c\/b\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- COMPLIANCE SECTION --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCompliance \u0026amp; Certifications\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cp\u003e\u003cstrong\u003eMeets the standards your department requires.\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth colspan=\"3\"\u003eCertification \u0026amp; Compliance\u003c\/th\u003e\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J845\u003c\/th\u003e\n\u003ctd\u003e360° warning lamp photometric standard for light bars and beacons\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J595 Class 1\u003c\/th\u003e\n\u003ctd\u003eHighest intensity class — approved for primary emergency vehicles (police, fire, EMS)\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eIP69K\u003c\/th\u003e\n\u003ctd\u003eSealed against high-pressure washdown, salt, dust, and submersion\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRated\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Range\u003c\/th\u003e\n\u003ctd\u003eExtreme-climate duty\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e-40°F to +145°F\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDuty Life\u003c\/th\u003e\n\u003ctd\u003eContinuous-duty LED modules\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50,000 hours\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"font-size:13px;color:#666;\"\u003e\u003cem\u003eWarning-equipment regulations vary by state and jurisdiction. Verify color and mounting requirements with your local authority. Spec sheet PDF and certification documentation available on request for procurement offices.\u003c\/em\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- Image + Text Alternating Section --\u003e\n\u003cstyle\u003e\n.text-image-wrap {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n.text-image-wrap.text-image-right {\n  flex-direction: row-reverse;\n}\n.text-image-wrap .image-wrap {\n  flex: 1;\n  max-width: 500px;\n}\n.text-image-wrap .image-wrap img {\n  width: 100%;\n  height: auto;\n  max-height: 300px; \n  display: block;\n  object-fit: contain; \n}\n.text-image-wrap .text-wrap {\n  flex: 1;\n  min-width: 300px;\n}\n\u003c\/style\u003e\n\u003c!-- Image Right - Text Left Section --\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/255283_7703341170749_330031d5_da20_475f_887e_f1269d2ad248_1.jpg?v=1763495670\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eEmergency Bar + Work Light\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eGet full 360° white-light illumination at the touch of a button. Perfect for reverse lighting, scene lighting, or any situation where you need powerful all-around visibility. It’s a true dual-purpose feature you won’t find on most emergency bars — and it comes standard on every one of ours.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Low_Pro_Emergency_Bar_SAE_graphics.jpg?v=1758041472\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eBuilt Tough for Any Environment\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003eIP69K-rated waterproof housing and reinforced aluminum construction stand up to rain, snow, mud, and dust—ideal for police, fire, tow, or off-road response vehicles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/DSC00223.jpg?v=1754512314\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e Full 360° Warning Visibility\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003ePacked with high-output dual-color LEDs and side modules, this bar delivers all-angle visibility—ensuring you're seen from every direction, even in chaotic scenes or inclement weather.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE_-_Driver_Side_Angle.jpg?v=1761226316\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eSlim, Low-Profile Design\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eEngineered to minimize wind resistance and visual bulk, this light bar features a sleek, aerodynamic frame that hugs your vehicle’s roofline. The low-profile housing not only enhances fuel efficiency but also delivers a clean, professional look without compromising brightness or performance.\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\n\u003cp\u003e\u003cvideo width=\"100%\" height=\"auto\" muted=\"\" autoplay=\"autoplay\" loop=\"loop\" playsinline=\"\" controls=\"controls\"\u003e\n    \u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/4ec9ce848f5e4d2d8083da9daf4dbe78.mp4\" type=\"video\/mp4\"\u003e\n    Your browser does not support the video tag.\n  \u003c\/source\u003e\u003c\/video\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eUp to 45 Flash Patterns with Smart Memory\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eChoose from up to 45 user-selectable flash patterns to fit any scenario. Built-in memory recall stores your last used setting for consistent deployment every time.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Low_Pro_Emergency_Bar_-_Sliding_Feet.gif?v=1758730578\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eSliding Feet\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003e\u003cmeta charset=\"utf-8\"\u003eOur sliding feet mounts are designed to give you maximum flexibility during installation. By allowing the brackets to slide along the base of the light bar, you can easily adjust spacing to match a wide variety of mounting points. This ensures a precise fit whether you’re working with factory holes, custom setups, or uneven surfaces.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HERO BANNER --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/d8j0ntlcm91z4.cloudfront.net\/user_3G9nKxyaQsdrPdDsxWr4EcSl5FL\/hf_20260715_201038_0803a0cd-07a6-4508-9c7a-50d0230a94e3.png\" alt=\"Built to Code. Backed for Life. SAE J845 and J595 Class 1 compliant, IP69K sealed, lifetime warranty\" style=\"width:100%;display:block;border-radius:10px;\"\u003e\u003c\/p\u003e\n\u003cbr\u003e\n\u003c!-- FLEET BLOCK --\u003e\n\u003cdiv style=\"padding:8px 0;margin:0 0 8px;\"\u003e\n\u003ch3 style=\"margin:0 0 8px;\"\u003eOutfitting a Fleet?\u003c\/h3\u003e\n\u003cp style=\"margin:0 0 14px;font-size:16px;line-height:1.6;\"\u003eVolume pricing on 5+ units, department POs accepted, W-9 on file, and spec sheets ready for your procurement office. From single patrol vehicles to full county fleets.\u003c\/p\u003e\n\u003ca href=\"\/pages\/fleet-pricing\" style=\"display:inline-block;background:#FFB300;color:#111;font-weight:700;padding:12px 22px;border-radius:8px;text-decoration:none;\"\u003eRequest Fleet Pricing\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Dimension --\u003e\u003c!-- Specs --\u003e\n\u003ch5\u003eSpecs\u003c\/h5\u003e\n\u003c!-- Specs Chart --\u003e\n\u003cstyle\u003e\n  table.spec-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 20px 0;\n    font-size: 15px;\n  }\n  table.spec-table th, table.spec-table td {\n    border: 1px solid #ccc;\n    padding: 10px;\n    text-align: left;\n  }\n  table.spec-table th {\n    background-color: #f7f7f7;\n    font-weight: 600;\n    width: 30%;\n  }\n  table.spec-table tr:hover {\n    background-color: #f2f2f2;\n  }\n  table.spec-table thead th {\n    background-color: #222;\n    color: #fff;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    text-align: center;\n  }\n\u003c\/style\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003ePower \u0026amp; Performance\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Wattage\u003c\/th\u003e\n\u003ctd\u003e360\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Amp Draw\u003c\/th\u003e\n\u003ctd\u003e27\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Voltage\u003c\/th\u003e\n\u003ctd\u003e10-30V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRaw Lumens\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Diode Quantity\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Chip\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBeam Pattern\u003c\/th\u003e\n\u003ctd\u003eWide Angle\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCertificate\u003c\/th\u003e\n\u003ctd\u003eSAE J845 \u0026amp; SAE J595 Class 1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Single Color\u003c\/th\u003e\n\u003ctd\u003e15\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Dual Color\u003c\/th\u003e\n\u003ctd\u003e45 (15 Color 1 \/ 15 Color 2 \/ 15 Combo)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eDurability \u0026amp; Lifespan\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLife Expectancy\u003c\/th\u003e\n\u003ctd\u003e50,000 Hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Temp\u003c\/th\u003e\n\u003ctd\u003e-40° to 145° F\u003cbr\u003e-40° to 62° C\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWaterproof Rating\u003c\/th\u003e\n\u003ctd\u003eIP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003eLimited Lifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGuarantee\u003c\/th\u003e\n\u003ctd\u003e30 Day Money Back\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eWiring \u0026amp; Installation\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eCord Length From Light\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Included?\u003c\/th\u003e\n\u003ctd\u003eYes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Length\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Gauge\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFuse Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eConnector Type\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHole Size for Controller\u003c\/th\u003e\n\u003ctd\u003e\u003cbr\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMounting Bolt Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eGeneral\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003e13 Lbs\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSKU\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c!-- FAQ --\u003e\n\u003ch5\u003eDimensions\u003c\/h5\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/43_Inch_Low_Pro_Dimensions.png?v=1779800831\"\u003e\u003c\/p\u003e\n\u003ch5\u003eVideo\u003c\/h5\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cvideo style=\"max-width: 100%; height: auto;\" controls=\"controls\" playsinline=\"\" loop=\"loop\" muted=\"\" autoplay=\"autoplay\"\u003e\n  \u003csource type=\"video\/mp4\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/f7ecf4030812467bbb46b165c21da48e.mov\"\u003e\n  Your browser does not support the video tag.\n\u003c\/source\u003e\u003c\/video\u003e\u003c\/p\u003e\n\u003ch5\u003eFAQ\u003c\/h5\u003e\n\u003cp\u003e\u003cstrong\u003eWhat voltage and control systems does this light bar support?\u003c\/strong\u003e\u003cbr\u003eThis light bar operates on a 12 V–24 V DC power system and can be used with either push-button or wireless controllers. It’s compatible with standard vehicle electrical systems, making installation straightforward for both fleet and individual applications.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow durable is this light bar in harsh environments?\u003c\/strong\u003e\u003cbr\u003eThe Low Pro Emergency Light Bar is built with a rugged aluminum housing, sealed to an IP69K rating and tested to resist corrosion, vibration, and high-pressure water ingress. It’s designed for demanding conditions—whether roadside, rescue, or commercial use—so you can rely on consistent performance when it counts.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat beam patterns and flash modes are included?\u003c\/strong\u003e\u003cbr\u003eUp to 45 flash patterns are built into the unit—including warning, hazard, and full-output flasher modes—with memory recall so your last setting is retained even after power loss. You’ll also find low-profile steady-burn mode useful for scene lighting and standby operations.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIs the light bar legal for use on public roads and emergency vehicles?\u003c\/strong\u003e\u003cbr\u003eYes. The unit meets SAE J595 Class 1 and other relevant emergency lighting standards for warning applications. However, regulations vary by jurisdiction, so we recommend checking your local laws before installation to ensure compliance with mounting height, color, and flash pattern requirements.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat’s covered by the warranty?\u003c\/strong\u003e\u003cbr\u003eOur industry-leading lifetime warranty covers manufacturing defects, driver failures, and LED module performance. It does not cover damage caused by improper installation, extreme overuse beyond defined duty cycles, or wiring issues. For full warranty terms, please refer to our Warranty \u0026amp; Returns page.\u003c\/p\u003e","brand":"Black Oak LED","offers":[{"title":"Amber \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981031485,"sku":"LP-E43-AW","price":767.5,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789181947965,"sku":"LP-E43-AW","price":793.45,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789181980733,"sku":"LP-E43-AW","price":797.45,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981097021,"sku":"LP-E43-AW","price":792.5,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789182079037,"sku":"LP-E43-AW","price":818.45,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789182111805,"sku":"LP-E43-AW","price":822.45,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Magnet \/ Standard - 12' Lead","offer_id":43423999393853,"sku":"LP-E43-AW","price":805.62,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43423999426621,"sku":"LP-E43-AW","price":831.57,"currency_code":"USD","in_stock":true},{"title":"Amber \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43423999459389,"sku":"LP-E43-AW","price":835.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Door Jamb \/ Standard - 12' Lead","offer_id":42590506254397,"sku":"LP-E43-AB","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789182144573,"sku":"LP-E43-AB","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789182177341,"sku":"LP-E43-AB","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack \/ Standard - 12' Lead","offer_id":42590506319933,"sku":"LP-E43-AB","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789182275645,"sku":"LP-E43-AB","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789182308413,"sku":"LP-E43-AB","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet \/ Standard - 12' Lead","offer_id":43423999492157,"sku":"LP-E43-AB","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43423999524925,"sku":"LP-E43-AB","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Blue \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43423999557693,"sku":"LP-E43-AB","price":880.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Door Jamb \/ Standard - 12' Lead","offer_id":42996859469885,"sku":"LP-E43-AG","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42996859502653,"sku":"LP-E43-AG","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42996859535421,"sku":"LP-E43-AG","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack \/ Standard - 12' Lead","offer_id":42996859666493,"sku":"LP-E43-AG","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42996859699261,"sku":"LP-E43-AG","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42996859732029,"sku":"LP-E43-AG","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet \/ Standard - 12' Lead","offer_id":43423999590461,"sku":"LP-E43-AG","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43423999623229,"sku":"LP-E43-AG","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Green \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43423999655997,"sku":"LP-E43-AG","price":880.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Door Jamb \/ Standard - 12' Lead","offer_id":43482685046845,"sku":"LP-E43-AR","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":43482685079613,"sku":"LP-E43-AR","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":43482685112381,"sku":"LP-E43-AR","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack \/ Standard - 12' Lead","offer_id":43482685145149,"sku":"LP-E43-AR","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":43482685177917,"sku":"LP-E43-AR","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":43482685210685,"sku":"LP-E43-AR","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet \/ Standard - 12' Lead","offer_id":43482685243453,"sku":"LP-E43-AR","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43482685276221,"sku":"LP-E43-AR","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 Red \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43482685308989,"sku":"LP-E43-AR","price":880.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981129789,"sku":"LP-E43-AW","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789182341181,"sku":"LP-E43-AW","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789182373949,"sku":"LP-E43-AW","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981195325,"sku":"LP-E43-AW","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789182472253,"sku":"LP-E43-AW","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789182505021,"sku":"LP-E43-AW","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet \/ Standard - 12' Lead","offer_id":43423999688765,"sku":"LP-E43-AW","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43423999721533,"sku":"LP-E43-AW","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43423999754301,"sku":"LP-E43-AW","price":880.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981228093,"sku":"LP-E43-BW","price":767.5,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789182537789,"sku":"LP-E43-BW","price":793.45,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789182570557,"sku":"LP-E43-BW","price":797.45,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981293629,"sku":"LP-E43-BW","price":792.5,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789182668861,"sku":"LP-E43-BW","price":818.45,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789182701629,"sku":"LP-E43-BW","price":822.45,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet \/ Standard - 12' Lead","offer_id":43423999787069,"sku":"LP-E43-BW","price":805.62,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43423999819837,"sku":"LP-E43-BW","price":831.57,"currency_code":"USD","in_stock":true},{"title":"Blue \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43423999852605,"sku":"LP-E43-BW","price":835.57,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Door Jamb \/ Standard - 12' Lead","offer_id":43118360100925,"sku":"LP-E43-BW","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":43118360133693,"sku":"LP-E43-BW","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":43118360166461,"sku":"LP-E43-BW","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Headache Rack \/ Standard - 12' Lead","offer_id":43118360199229,"sku":"LP-E43-BW","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":43118360231997,"sku":"LP-E43-BW","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":43118360264765,"sku":"LP-E43-BW","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Magnet \/ Standard - 12' Lead","offer_id":43423999885373,"sku":"LP-E43-BW","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43423999918141,"sku":"LP-E43-BW","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43423999950909,"sku":"LP-E43-BW","price":880.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981424701,"sku":"LP-E43-RW","price":767.5,"currency_code":"USD","in_stock":true},{"title":"Red \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789182734397,"sku":"LP-E43-RW","price":793.45,"currency_code":"USD","in_stock":true},{"title":"Red \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789182767165,"sku":"LP-E43-RW","price":797.45,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981490237,"sku":"LP-E43-RW","price":792.5,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789182865469,"sku":"LP-E43-RW","price":818.45,"currency_code":"USD","in_stock":true},{"title":"Red \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789182898237,"sku":"LP-E43-RW","price":822.45,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet \/ Standard - 12' Lead","offer_id":43423999983677,"sku":"LP-E43-RW","price":805.62,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43424000016445,"sku":"LP-E43-RW","price":831.57,"currency_code":"USD","in_stock":true},{"title":"Red \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43424000049213,"sku":"LP-E43-RW","price":835.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981326397,"sku":"LP-E43-RB","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789182931005,"sku":"LP-E43-RB","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789182963773,"sku":"LP-E43-RB","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981391933,"sku":"LP-E43-RB","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789183062077,"sku":"LP-E43-RB","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789183094845,"sku":"LP-E43-RB","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet \/ Standard - 12' Lead","offer_id":43424000081981,"sku":"LP-E43-RB","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43424000114749,"sku":"LP-E43-RB","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43424000147517,"sku":"LP-E43-RB","price":880.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981523005,"sku":"LP-E43-RW","price":812.5,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789183127613,"sku":"LP-E43-RW","price":838.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789183160381,"sku":"LP-E43-RW","price":842.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981588541,"sku":"LP-E43-RW","price":837.5,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789183258685,"sku":"LP-E43-RW","price":863.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789183291453,"sku":"LP-E43-RW","price":867.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet \/ Standard - 12' Lead","offer_id":43424000180285,"sku":"LP-E43-RW","price":850.62,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43424000213053,"sku":"LP-E43-RW","price":876.57,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43424000245821,"sku":"LP-E43-RW","price":880.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Door Jamb \/ Standard - 12' Lead","offer_id":42583981621309,"sku":"LP-E43-AW","price":767.5,"currency_code":"USD","in_stock":true},{"title":"White \/ Door Jamb \/ 22' Total - (12' + 10' Extension)","offer_id":42789183324221,"sku":"LP-E43-AW","price":793.45,"currency_code":"USD","in_stock":true},{"title":"White \/ Door Jamb \/ 27' Total - (12' + 15' Extension)","offer_id":42789183356989,"sku":"LP-E43-AW","price":797.45,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack \/ Standard - 12' Lead","offer_id":42583981686845,"sku":"LP-E43-AW","price":792.5,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack \/ 22' Total - (12' + 10' Extension)","offer_id":42789183455293,"sku":"LP-E43-AW","price":818.45,"currency_code":"USD","in_stock":true},{"title":"White \/ Headache Rack \/ 27' Total - (12' + 15' Extension)","offer_id":42789183488061,"sku":"LP-E43-AW","price":822.45,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet \/ Standard - 12' Lead","offer_id":43424000278589,"sku":"LP-E43-AW","price":805.62,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet \/ 22' Total - (12' + 10' Extension)","offer_id":43424000311357,"sku":"LP-E43-AW","price":831.57,"currency_code":"USD","in_stock":true},{"title":"White \/ Magnet \/ 27' Total - (12' + 15' Extension)","offer_id":43424000344125,"sku":"LP-E43-AW","price":835.57,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE43_Angled.png?v=1759162162"},{"product_id":"new-xdr-4-emergency-strobe-light-led-warning-light","title":"XDR-4 Emergency Strobe Light, LED Warning Light","description":"\u003cstyle\u003e\n#MainContent .x4-h1 { font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important; font-size: 34px !important; font-weight: 800 !important; line-height: 1.12 !important; letter-spacing: -0.5px !important; color: #1C2026 !important; text-transform: none !important; margin: 0 0 10px !important; }\n#MainContent .x4-h2 { font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important; font-size: 26px !important; font-weight: 800 !important; line-height: 1.2 !important; color: #1C2026 !important; text-transform: none !important; letter-spacing: -0.2px !important; margin: 0 0 8px !important; }\n#MainContent .x4-h3 { font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important; font-size: 16px !important; font-weight: 800 !important; color: #1C2026 !important; text-transform: none !important; letter-spacing: 0 !important; margin: 0 0 6px !important; }\n#MainContent .x4-eyebrow { display: block !important; font-size: 11px; font-weight: 700; letter-spacing: 1.6px; text-transform: uppercase; color: #C27C00; margin: 0 0 4px; }\n#MainContent .x4-sub { font-size: 15.5px; line-height: 1.55; color: #5F6670; margin: 0 0 14px; }\n#MainContent .x4-flex { display: flex !important; flex-wrap: wrap; }\n#MainContent .x4-col, #MainContent .x4-card, #MainContent .x4-tile { display: block !important; box-sizing: border-box; }\n#MainContent .x4-sw { display: flex !important; flex-wrap: nowrap !important; align-items: center; gap: 10px; box-sizing: border-box; }\n#MainContent .x4-card, #MainContent .x4-tile, #MainContent .x4-sw { transition: all .2s ease; }\n#MainContent .x4-card:hover, #MainContent .x4-tile:hover, #MainContent .x4-sw:hover { border-color: #FFB300 !important; box-shadow: 0 6px 18px rgba(28,32,38,.10); }\n#MainContent .x4-chip { display: inline-block !important; background: #FFF6E0; color: #1C2026; border: 1px solid #FFE1A0; border-radius: 12px; padding: 5px 11px; font-size: 12.5px; font-weight: 700; margin: 0 5px 6px 0; }\n#MainContent .x4-dot { display: inline-block !important; width: 28px; height: 28px; border-radius: 50%; flex: 0 0 28px; box-shadow: inset 0 0 0 1px rgba(0,0,0,.10); }\n#MainContent .x4-hero-img { text-align: center; }\n#MainContent .x4-hero-img img { max-width: 100% !important; max-height: 260px; width: auto; height: auto !important; border-radius: 14px; display: inline-block !important; }\n#MainContent .x4-tiw { display: flex !important; align-items: center; flex-wrap: wrap; gap: 18px; margin: 0 0 8px; background: #fff; border: 2px solid #E5E7EB; border-radius: 16px; padding: 10px; box-sizing: border-box; transition: all .2s ease; }\n#MainContent .x4-tiw:hover { border-color: #FFB300; box-shadow: 0 6px 18px rgba(28,32,38,.10); }\n#MainContent .x4-tiw.x4-rev { flex-direction: row-reverse; }\n#MainContent .x4-tiw-img { flex: 0 1 340px; max-width: 340px; display: block !important; border-radius: 12px; overflow: hidden; }\n#MainContent .description .x4-tiw-img img, #MainContent .x4-tiw .x4-tiw-img img { width: 100% !important; height: 170px !important; max-height: 170px !important; object-fit: contain; background: #fff; border-radius: 12px; display: block !important; }\n@media (max-width: 749px) { #MainContent .x4-tiw-img { flex: 1 1 100%; max-width: 100%; } }\n#MainContent .x4-tiw-txt { flex: 1 1 280px; min-width: 260px; display: block !important; }\n#MainContent .x4-tiw-txt a, #MainContent details .content a { color: #C27C00; font-weight: 700; }\n#MainContent .x4-fig img { max-width: 100% !important; max-height: 280px; width: auto; height: auto !important; border-radius: 12px; display: inline-block !important; }\n#MainContent details { border: 2px solid #E5E7EB; border-radius: 12px; margin-bottom: 8px; overflow: hidden; background: #fff; display: block; }\n#MainContent details summary { display: flex; justify-content: space-between; align-items: center; cursor: pointer; padding: 12px 18px; font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif; font-weight: 700; font-size: 16px; color: #1C2026; list-style: none; background: #fff; border-bottom: 0; }\n#MainContent details summary:hover, #MainContent details[open] summary { background: #FFF6E0; }\n#MainContent details[open] summary { border-bottom: 1px solid #FFE1A0; }\n#MainContent details summary::-webkit-details-marker { display: none; }\n#MainContent details summary::after { content: '+'; font-size: 22px; font-weight: 400; color: #C27C00; }\n#MainContent details[open] summary::after { content: '\\2212'; }\n#MainContent details .content { padding: 6px 18px 12px; font-size: 15px; line-height: 1.55; display: block; }\n#MainContent table.x4-spec { width: 100%; border-collapse: collapse; margin: 0; font-size: 14.5px; }\n#MainContent table.x4-spec th, #MainContent table.x4-spec td { border: 1px solid #E5E7EB; padding: 8px 10px; text-align: left; }\n#MainContent table.x4-spec th { background: #F6F6F4; font-weight: 600; color: #1C2026; width: 42%; }\n#MainContent table.x4-spec tr:hover td, #MainContent table.x4-spec tr:hover th { background: #FFF6E0; }\n#MainContent .description img { max-width: 100% !important; height: auto !important; }\n@media (max-width: 749px) {\n  #MainContent .x4-h1 { font-size: 27px !important; }\n  #MainContent .x4-h2 { font-size: 22px !important; }\n  #MainContent .x4-pad { padding: 20px 16px !important; }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"x4-pad x4-flex\" style=\"display: flex; flex-wrap: wrap; align-items: center; gap: 22px; background: linear-gradient(165deg,#FFF6E0 0%,#ffffff 72%); border: 2px solid #E5E7EB; border-radius: 18px; padding: 26px; margin: 0 0 12px;\"\u003e\n\u003cdiv class=\"x4-col\" style=\"flex: 1 1 340px; min-width: 260px;\"\u003e\n\u003cp style=\"display: inline-block; background: #1C2026; color: #FFB300; font-size: 11px; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase; padding: 5px 11px; border-radius: 6px; margin: 0 0 10px;\"\u003eSAE J595 · IP69K · 13 Flash Patterns\u003c\/p\u003e\n\u003ch2 class=\"x4-h1\"\u003eXDR-4 Emergency Strobe Light\u003c\/h2\u003e\n\u003cp class=\"x4-sub\"\u003eA compact 4\" LED warning light for tow trucks, utility, construction, and emergency response vehicles. Four high-intensity LEDs throw a 120° wide warning pattern, the ultra-low-profile housing fits where bigger strobes won't, and it's sealed to IP69K for pressure washing and all-weather use.\u003c\/p\u003e\n\u003cp style=\"margin: 0; line-height: 2;\"\u003e\u003cspan class=\"x4-chip\"\u003eSAE J595\u003c\/span\u003e\u003cspan class=\"x4-chip\"\u003eIP69K Waterproof\u003c\/span\u003e\u003cspan class=\"x4-chip\"\u003e10–30V DC\u003c\/span\u003e\u003cspan class=\"x4-chip\"\u003eSync Capable\u003c\/span\u003e\u003cspan class=\"x4-chip\"\u003eLimited Lifetime Warranty\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-col x4-hero-img\" style=\"flex: 1 1 260px;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-4Red_White_Blue_Amber.png?v=1768577056\" alt=\"XDR-4 LED emergency strobe lights in red, white, blue and amber\" width=\"500\" height=\"500\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-flex\" style=\"display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 22px;\"\u003e\n\u003cdiv class=\"x4-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003e13\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eFlash Patterns\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003e120°\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eWide Angle\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003eIP69K\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eWaterproof\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-tile\" style=\"flex: 1 1 120px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 12px 10px; text-align: center;\"\u003e\n\u003cspan style=\"display: block; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: 800; color: #1C2026; line-height: 1.1;\"\u003e3-7\/8\"\u003c\/span\u003e\u003cspan style=\"display: block; font-size: 11px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase; color: #5F6670;\"\u003eLong\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cspan class=\"x4-eyebrow\"\u003ePick Your Colors\u003c\/span\u003e\n\u003ch2 class=\"x4-h2\"\u003e7 single and dual-color options\u003c\/h2\u003e\n\u003cp class=\"x4-sub\"\u003eRun one color or split two in the same head. Dual-color models alternate between both colors for maximum attention.\u003c\/p\u003e\n\u003cdiv class=\"x4-flex\" style=\"display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 22px;\"\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: #FFB300;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eAmber\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: #1C6FE0;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eBlue\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: #E23B3B;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eRed\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: linear-gradient(135deg,#FFB300 0 50%,#F4F6F8 50% 100%); box-shadow: inset 0 0 0 2px #E5E7EB;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eAmber \u0026amp; White\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: linear-gradient(135deg,#1C6FE0 0 50%,#F4F6F8 50% 100%); box-shadow: inset 0 0 0 2px #E5E7EB;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eBlue \u0026amp; White\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: linear-gradient(135deg,#E23B3B 0 50%,#1C6FE0 50% 100%);\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eRed \u0026amp; Blue\u003c\/b\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-sw\" style=\"flex: 1 1 170px; background: #fff; border: 2px solid #E5E7EB; border-radius: 12px; padding: 8px 12px;\"\u003e\n\u003cspan class=\"x4-dot\" style=\"background: linear-gradient(135deg,#E23B3B 0 50%,#F4F6F8 50% 100%); box-shadow: inset 0 0 0 2px #E5E7EB;\"\u003e\u003c\/span\u003e\u003cb style=\"color: #1C2026;\"\u003eRed \u0026amp; White\u003c\/b\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cspan class=\"x4-eyebrow\"\u003eBuilt For The Job\u003c\/span\u003e\n\u003ch2 class=\"x4-h2\"\u003eCompact strobe, full warning power\u003c\/h2\u003e\n\u003cdiv class=\"x4-flex\" style=\"display: flex; flex-wrap: wrap; gap: 10px; margin: 8px 0 22px;\"\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 220px; background: #fff; border: 2px solid #E5E7EB; border-radius: 14px; padding: 14px 16px;\"\u003e\n\u003ch3 class=\"x4-h3\"\u003eSAE J595 Approved\u003c\/h3\u003e\n\u003cp style=\"font-size: 14.5px; line-height: 1.5; color: #5F6670; margin: 0;\"\u003eMeets the SAE standard for directional flashing warning lamps on emergency and service vehicles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 220px; background: #fff; border: 2px solid #E5E7EB; border-radius: 14px; padding: 14px 16px;\"\u003e\n\u003ch3 class=\"x4-h3\"\u003e13 Patterns + Sync\u003c\/h3\u003e\n\u003cp style=\"font-size: 14.5px; line-height: 1.5; color: #5F6670; margin: 0;\"\u003eSteady-on plus 13 strobe patterns. Sync multiple units to flash together or alternate side to side.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 220px; background: #fff; border: 2px solid #E5E7EB; border-radius: 14px; padding: 14px 16px;\"\u003e\n\u003ch3 class=\"x4-h3\"\u003e12V or 24V\u003c\/h3\u003e\n\u003cp style=\"font-size: 14.5px; line-height: 1.5; color: #5F6670; margin: 0;\"\u003eRuns on 10–30V DC, so it works on pickups, service bodies, and heavy trucks with no changes.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-tiw\"\u003e\n\u003cdiv class=\"x4-tiw-img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-4Amber_White.png?v=1768577056\" alt=\"XDR-4 amber and white emergency strobe lights\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"x4-tiw-txt\"\u003e\n\u003ch3 class=\"x4-h3\" style=\"font-size: 20px !important;\"\u003eUltra Slim, Stealthy Design\u003c\/h3\u003e\n\u003cp style=\"font-size: 15.5px; line-height: 1.55; margin: 0;\"\u003eAt just 3-7\/8\" long, the XDR-4 fits the tightest spots in grilles, bumpers, deck lids, and headache racks, and gives you a clean, modern look. It surface mounts with two M4 bolts and a vibration foam pad. Need to mount it sideways? Add our \u003ca href=\"\/products\/xdr-4-5-90-degree-bracket\"\u003e90° mounting bracket\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-tiw x4-rev\"\u003e\n\u003cdiv class=\"x4-tiw-img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-4Red_Blue.png?v=1768577056\" alt=\"XDR-4 red and blue emergency strobe lights\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"x4-tiw-txt\"\u003e\n\u003ch3 class=\"x4-h3\" style=\"font-size: 20px !important;\"\u003ePowerful Warning Output\u003c\/h3\u003e\n\u003cp style=\"font-size: 15.5px; line-height: 1.55; margin: 0;\"\u003eFour high-intensity LEDs push 20W through an ultra-wide 120° pattern that stays visible day and night. Choose from 13 flash patterns or steady-on, and sync multiple heads for a coordinated, professional warning setup on any vehicle.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-tiw\"\u003e\n\u003cdiv class=\"x4-tiw-img\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/IMG_5955_WithouutBracket.jpg?v=1768577056\" alt=\"XDR-4 emergency strobe light\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"x4-tiw-txt\"\u003e\n\u003ch3 class=\"x4-h3\" style=\"font-size: 20px !important;\"\u003eRugged \u0026amp; Waterproof\u003c\/h3\u003e\n\u003cp style=\"font-size: 15.5px; line-height: 1.55; margin: 0;\"\u003eSealed to IP69K and rated from -40° to 145° F, the XDR-4 shrugs off rain, road salt, dust, and the pressure washer. It's built to run shift after shift in the conditions work trucks actually see, and it's backed by our limited lifetime warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch5\u003eSpecs\u003c\/h5\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePower \u0026amp; Performance\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"x4-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWattage\u003c\/th\u003e\n\u003ctd\u003e20W\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eAmp Draw\u003c\/th\u003e\n\u003ctd\u003e1.6A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Voltage\u003c\/th\u003e\n\u003ctd\u003e10–30V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCertification\u003c\/th\u003e\n\u003ctd\u003eSAE J595\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLEDs\u003c\/th\u003e\n\u003ctd\u003e4 high-intensity\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBeam\u003c\/th\u003e\n\u003ctd\u003eUltra wide, 120°\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eModes\u003c\/th\u003e\n\u003ctd\u003eSteady on + 13 strobe patterns, sync capable\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDurability \u0026amp; Warranty\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"x4-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWaterproof Rating\u003c\/th\u003e\n\u003ctd\u003eIP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Temp\u003c\/th\u003e\n\u003ctd\u003e-40° to 145° F (-40° to 62° C)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLife Expectancy\u003c\/th\u003e\n\u003ctd\u003e50,000 hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003eLimited lifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGuarantee\u003c\/th\u003e\n\u003ctd\u003e30-day money back\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWiring \u0026amp; Installation\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"x4-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLead Length\u003c\/th\u003e\n\u003ctd\u003e12\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Gauge\u003c\/th\u003e\n\u003ctd\u003e24 AWG\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eConnector\u003c\/th\u003e\n\u003ctd\u003eOpen-end pigtail\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHarness Included?\u003c\/th\u003e\n\u003ctd\u003eNo\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRecommended Fuse\u003c\/th\u003e\n\u003ctd\u003e5A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMounting\u003c\/th\u003e\n\u003ctd\u003eSurface mount, 2× M4 bolts + foam pad (included)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eGeneral \u0026amp; SKUs\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003ctable class=\"x4-spec\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLength\u003c\/th\u003e\n\u003ctd\u003e3-7\/8\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003e0.1 lb\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSingle Color\u003c\/th\u003e\n\u003ctd\u003eXDR-4S-A · XDR-4S-B · XDR-4S-R\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDual Color\u003c\/th\u003e\n\u003ctd\u003eXDR-4S-AW · XDR-4S-BW · XDR-4S-RB · XDR-4S-RW\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdiv class=\"x4-flex\" style=\"display: flex; flex-wrap: wrap; gap: 14px; margin: 18px 0 0; align-items: flex-start;\"\u003e\n\u003cdiv class=\"x4-col\" style=\"flex: 1 1 300px;\"\u003e\n\u003ch5 style=\"margin-top: 0;\"\u003eIn The Box\u003c\/h5\u003e\n\u003cdiv class=\"x4-flex\" style=\"display: flex; flex-wrap: wrap; gap: 8px;\"\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003e1 × XDR-4 Emergency Strobe\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eWith 12\" 24 AWG pigtail\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003eVibration Foam Insert\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eCushions the light against the mount\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003e2 × 1-1\/2\" M4 Bolts\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eWith washers and nuts\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-card\" style=\"flex: 1 1 100%; background: #F6F6F4; border: 2px solid #E5E7EB; border-radius: 12px; padding: 10px 14px;\"\u003e\n\u003cb style=\"color: #1C2026;\"\u003eInstructions\u003c\/b\u003e\u003cbr\u003e\u003cspan style=\"font-size: 13.5px; color: #5F6670;\"\u003eWiring and setup steps\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"x4-col x4-fig\" style=\"flex: 1 1 300px;\"\u003e\n\u003ch5 style=\"margin-top: 0;\"\u003eDimensions\u003c\/h5\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-4_Strobe_Dimensions.png?v=1768577056\" alt=\"XDR-4 emergency strobe light dimensions\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch5\u003eFAQ\u003c\/h5\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIs the XDR-4 SAE approved?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eYes. The XDR-4 is SAE J595 approved for directional flashing warning lamps. Rules on which colors you can run vary by state and vehicle type, so check your local regulations, especially for red and blue.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWill it work on a 24V truck?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eYes. It runs on anything from 10V to 30V DC, so 12V and 24V systems both work with no changes.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCan I sync multiple XDR-4 lights?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eYes. Wire multiple heads together to flash in unison or alternate.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDoes it come with a harness or switch?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eNo. Each light has a 12\" open-end pigtail that you wire to your own switch and a 5A fuse.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow do I mount it?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eIt surface mounts on any flat spot with the included M4 bolts and vibration foam pad. To mount it at a right angle, add the \u003ca href=\"\/products\/xdr-4-5-90-degree-bracket\"\u003eXDR-4 \u0026amp; XDR-5 90° mounting bracket\u003c\/a\u003e.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat does the warranty cover?\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\u003cp style=\"margin: 0;\"\u003eOur limited lifetime warranty covers workmanship and material failures. Send the light back and once we verify the issue, we'll repair or replace it free of charge. Every order also comes with a 30-day money-back guarantee.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/details\u003e","brand":"Black Oak LED","offers":[{"title":"Amber","offer_id":42918400262205,"sku":"XDR-4S-A","price":37.45,"currency_code":"USD","in_stock":true},{"title":"Blue","offer_id":42918400294973,"sku":"XDR-4S-B","price":37.45,"currency_code":"USD","in_stock":true},{"title":"Red","offer_id":42918400327741,"sku":"XDR-4S-R","price":37.45,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White","offer_id":42918400360509,"sku":"XDR-4S-AW","price":37.45,"currency_code":"USD","in_stock":true},{"title":"Blue \u0026 White","offer_id":43408882860093,"sku":"XDR-4S-BW","price":37.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 Blue","offer_id":42918400426045,"sku":"XDR-4S-RB","price":37.45,"currency_code":"USD","in_stock":true},{"title":"Red \u0026 White","offer_id":42918400458813,"sku":"XDR-4S-RW","price":37.45,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-4Red_White_Blue_Amber.png?v=1768577056"},{"product_id":"xdr-4-5-90-degree-bracket","title":"XDR-4 \u0026 XDR-5 90 Degree Mounting Bracket","description":"\u003cstyle\u003e\n#MainContent .xb-eyebrow { display: block; font-family: Helvetica, Arial, sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: #1A3D5E; margin: 0 0 8px; }\n#MainContent .xb-h { display: block; font-family: Helvetica, Arial, sans-serif; font-size: 22px; font-weight: 700; line-height: 1.25; color: #111111; margin: 0 0 14px; }\n#MainContent .xb-p { display: block; font-size: 16px; line-height: 1.65; color: #333333; max-width: 70ch; margin: 0 0 16px; }\n#MainContent .xb-row { display: flex; flex-wrap: wrap; gap: 10px; margin: 22px 0 4px; }\n#MainContent .xb-card { display: block; box-sizing: border-box; flex: 1 1 190px; border: 1px solid #E0E0E0; border-top: 3px solid #1A3D5E; border-radius: 8px; background: #F9F9F9; padding: 14px 16px; }\n#MainContent .xb-k { display: block; font-size: 10.5px; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase; color: #1A3D5E; margin: 0 0 4px; }\n#MainContent .xb-v { display: block; font-family: Helvetica, Arial, sans-serif; font-size: 15.5px; font-weight: 700; color: #111111; }\n@media (max-width: 749px) {\n  #MainContent .xb-h { font-size: 19px; }\n  #MainContent .xb-row { gap: 8px; }\n}\n@media (max-width: 599px) {\n  #MainContent .xb-card { flex: 1 1 100%; }\n}\n\u003c\/style\u003e\n\u003cp class=\"xb-eyebrow\"\u003eAccessory\u003c\/p\u003e\n\u003ch3 class=\"xb-h\"\u003eFor the spots a flat mount can't reach\u003c\/h3\u003e\n\u003cp class=\"xb-p\"\u003eNot every good mounting spot is flat and facing forward. This 90 degree bracket lets you mount an XDR-4 or XDR-5 strobe on a perpendicular surface — a headache rack upright, the inside of a bumper, a push bar, the wall of a tool box — and still aim the light where it needs to point.\u003c\/p\u003e\n\u003cp class=\"xb-p\"\u003eIt bolts to the XDR-4 and XDR-5 at their standard M4 mounting points, so the light keeps its low-profile footprint and nothing changes about the wiring or the flash patterns.\u003c\/p\u003e\n\u003cdiv class=\"xb-row\"\u003e\n\u003cdiv class=\"xb-card\"\u003e\n\u003cspan class=\"xb-k\"\u003eFits\u003c\/span\u003e\u003cspan class=\"xb-v\"\u003eXDR-4 \u0026amp; XDR-5\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xb-card\"\u003e\n\u003cspan class=\"xb-k\"\u003eMounting\u003c\/span\u003e\u003cspan class=\"xb-v\"\u003e90° offset\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"xb-card\"\u003e\n\u003cspan class=\"xb-k\"\u003eQuantity\u003c\/span\u003e\u003cspan class=\"xb-v\"\u003eOne per light\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Black Oak LED","offers":[{"title":"Default Title","offer_id":43066744668221,"sku":"XDR-B90","price":15.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR90-DegreeBracket.png?v=1790794036"},{"product_id":"xdr2_beacon","title":"XDR-2 Mini Amber Warning LED Beacon","description":"\u003cdiv class=\"bol-beacon\"\u003e\n\u003cstyle\u003e\n\/* Scoped to .bol-beacon — matches Black Oak LED site styling, won't collide with theme *\/\n.bol-beacon{--ink:#111;--ink2:#3a424e;--muted:#6a7482;--line:#e4e7ec;--bg:#f5f5f5;--soft:#f8f8f6;--yellow:#FEB902;--yellow2:#F5B31B;--navy:#1A3D5E;font-family:Roboto,\"Helvetica Neue\",Arial,sans-serif;color:var(--ink);line-height:1.6;font-size:16px;max-width:1000px;margin:0 auto;}\n.bol-beacon *{box-sizing:border-box;}\n.bol-beacon h2,.bol-beacon h3{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;line-height:1.2;margin:0;}\n.bol-beacon p{margin:0 0 14px;color:var(--ink2);}\n\n\/* Hero *\/\n.bol-beacon .bf-hero{background:linear-gradient(155deg,#0c0c0c 0%,#14171c 55%,#1A3D5E 130%);color:#fff;border-radius:12px;padding:34px 32px;position:relative;overflow:hidden;}\n.bol-beacon .bf-hero:after{content:\"\";position:absolute;right:-70px;top:-70px;width:280px;height:280px;background:radial-gradient(circle,rgba(254,185,2,.28),transparent 62%);}\n.bol-beacon .bf-kicker{display:inline-block;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--yellow);font-weight:800;margin-bottom:10px;}\n.bol-beacon .bf-hero h2{font-size:30px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;}\n.bol-beacon .bf-hero .bf-sub{margin-top:12px;font-size:16px;color:#c7d0dc;max-width:640px;position:relative;}\n.bol-beacon .bf-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px;position:relative;}\n.bol-beacon .bf-chip{background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.16);color:#eaf0f7;font-size:13px;font-weight:600;padding:7px 13px;border-radius:999px;}\n.bol-beacon .bf-chip.is-y{background:var(--yellow);border-color:var(--yellow);color:var(--navy);font-weight:700;}\n\n\/* Spec strip *\/\n.bol-beacon .bf-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0;}\n.bol-beacon .bf-stat{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:16px 14px;text-align:center;}\n.bol-beacon .bf-stat .bf-ic{width:30px;height:30px;margin:0 auto 8px;display:block;color:var(--yellow2);}\n.bol-beacon .bf-stat b{display:block;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:20px;font-weight:800;color:var(--ink);}\n.bol-beacon .bf-stat span{font-size:12.5px;color:var(--muted);}\n\n\/* Section *\/\n.bol-beacon .bf-sec{margin:26px 0;}\n.bol-beacon .bf-sec h3{font-size:20px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px;display:flex;align-items:center;gap:9px;}\n.bol-beacon .bf-sec h3:before{content:\"\";width:5px;height:20px;border-radius:3px;background:var(--yellow);display:inline-block;}\n\n\/* Accordion *\/\n.bol-beacon details{border:1px solid var(--line);border-radius:12px;margin-bottom:12px;background:#fff;overflow:hidden;}\n.bol-beacon details[open]{border-color:#cdd4dd;}\n.bol-beacon summary{list-style:none;cursor:pointer;padding:17px 20px;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:16.5px;font-weight:700;color:var(--ink);display:flex;align-items:center;justify-content:space-between;gap:12px;}\n.bol-beacon summary::-webkit-details-marker{display:none;}\n.bol-beacon summary .bf-lbl{display:flex;align-items:center;gap:11px;}\n.bol-beacon summary .bf-lbl svg{width:20px;height:20px;color:var(--yellow2);flex:none;}\n.bol-beacon .bf-plus{width:22px;height:22px;position:relative;flex:none;transition:transform .2s;}\n.bol-beacon .bf-plus:before,.bol-beacon .bf-plus:after{content:\"\";position:absolute;background:var(--muted);border-radius:2px;}\n.bol-beacon .bf-plus:before{left:4px;right:4px;top:10px;height:2px;}\n.bol-beacon .bf-plus:after{top:4px;bottom:4px;left:10px;width:2px;}\n.bol-beacon details[open] .bf-plus{transform:rotate(135deg);}\n.bol-beacon .bf-body{padding:2px 20px 20px;border-top:1px solid var(--line);}\n\n\/* Feature list *\/\n.bol-beacon .bf-list{list-style:none;margin:14px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:12px 22px;}\n.bol-beacon .bf-list li{position:relative;padding-left:28px;font-size:14.5px;color:var(--ink2);}\n.bol-beacon .bf-list li b{color:var(--ink);}\n.bol-beacon .bf-list li:before{content:\"\";position:absolute;left:0;top:3px;width:17px;height:17px;border-radius:50%;background:var(--yellow);\n  -webkit-mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/12px no-repeat;\n  mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/12px no-repeat;}\n\n\/* In the box *\/\n.bol-beacon .bf-box{list-style:none;margin:14px 0 0;padding:0;}\n.bol-beacon .bf-box li{display:flex;align-items:center;gap:13px;padding:13px 0;border-bottom:1px dashed var(--line);font-size:15px;}\n.bol-beacon .bf-box li:last-child{border-bottom:none;}\n.bol-beacon .bf-qty{flex:none;min-width:40px;height:40px;border-radius:9px;background:var(--navy);border:1px solid var(--navy);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--yellow);font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;}\n.bol-beacon .bf-box b{color:var(--ink);}\n.bol-beacon .bf-box small{display:block;color:var(--muted);font-size:12.5px;}\n.bol-beacon .bf-note{margin-top:14px;font-size:13.5px;color:var(--muted);background:#fffaf0;border:1px solid #f6e2b8;border-radius:9px;padding:11px 14px;}\n\n\/* Specs table *\/\n.bol-beacon .bf-specs{width:100%;border-collapse:collapse;margin-top:14px;font-size:14.5px;}\n.bol-beacon .bf-specs tr{border-bottom:1px solid var(--line);}\n.bol-beacon .bf-specs td{padding:11px 6px;}\n.bol-beacon .bf-specs td:first-child{color:var(--muted);}\n.bol-beacon .bf-specs td:last-child{text-align:right;font-weight:700;color:var(--ink);}\n\n\/* Cert badges *\/\n.bol-beacon .bf-certs{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px;}\n.bol-beacon .bf-cert{background:var(--navy);color:#fff;border-radius:8px;padding:9px 14px;font-size:13px;font-weight:700;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;letter-spacing:.3px;}\n\n\/* Applications *\/\n.bol-beacon .bf-apps{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px;}\n.bol-beacon .bf-app{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:8px 13px;font-size:13.5px;font-weight:600;color:var(--ink2);}\n\n\/* Also available note *\/\n.bol-beacon .bf-avail{margin:0 0 4px;padding:12px 16px;background:var(--soft);border:1px solid var(--line);border-left:4px solid var(--yellow);border-radius:10px;font-size:14.5px;color:var(--ink2);}\n.bol-beacon .bf-avail a{color:var(--navy);font-weight:800;text-decoration:none;}\n.bol-beacon .bf-avail a:hover{text-decoration:underline;}\n\n\/* Setup options *\/\n.bol-beacon .bf-opts{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px;}\n.bol-beacon .bf-opt{border:1px solid var(--line);border-radius:12px;padding:20px;background:#fff;}\n.bol-beacon .bf-opt.is-feature{border-color:var(--yellow);box-shadow:0 0 0 1px var(--yellow);}\n.bol-beacon .bf-opt-tag{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--navy);background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:4px 11px;margin-bottom:10px;}\n.bol-beacon .bf-opt.is-feature .bf-opt-tag{background:var(--yellow);border-color:var(--yellow);}\n.bol-beacon .bf-opt-name{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:18px;font-weight:800;color:var(--ink);margin-bottom:4px;}\n.bol-beacon .bf-opt-sub{font-size:13.5px;color:var(--muted);margin:0 0 12px;}\n.bol-beacon .bf-oplist{list-style:none;margin:0;padding:0;}\n.bol-beacon .bf-oplist li{position:relative;padding:7px 0 7px 26px;font-size:14px;color:var(--ink2);border-top:1px solid var(--line);}\n.bol-beacon .bf-oplist li:first-child{border-top:none;}\n.bol-beacon .bf-oplist li b{color:var(--ink);}\n.bol-beacon .bf-oplist li:before{content:\"\";position:absolute;left:0;top:10px;width:16px;height:16px;border-radius:50%;background:var(--yellow);\n  -webkit-mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/11px no-repeat;\n  mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/11px no-repeat;}\n\n\/* Trust *\/\n.bol-beacon .bf-trust{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:6px;}\n.bol-beacon .bf-tcard{border:1px solid var(--line);border-radius:12px;padding:18px;display:flex;gap:14px;align-items:flex-start;background:#fff;}\n.bol-beacon .bf-tcard svg{width:30px;height:30px;color:var(--navy);flex:none;}\n.bol-beacon .bf-tcard b{display:block;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:15.5px;margin-bottom:3px;}\n.bol-beacon .bf-tcard span{font-size:13.5px;color:var(--muted);}\n\n@media(max-width:720px){\n  .bol-beacon .bf-hero{padding:26px 22px;}\n  .bol-beacon .bf-hero h2{font-size:23px;}\n  .bol-beacon .bf-strip{grid-template-columns:1fr 1fr;}\n  .bol-beacon .bf-list{grid-template-columns:1fr;}\n  .bol-beacon .bf-trust{grid-template-columns:1fr;}\n  .bol-beacon .bf-opts{grid-template-columns:1fr;}\n}\n\/* --- Shopify rich-text safety: the description editor converts \u003cdiv\u003e to inline \u003cspan\u003e; re-assert layout so nothing collapses --- *\/\n.bol-beacon,.bol-beacon .bf-hero,.bol-beacon .bf-sec,.bol-beacon .bf-body,.bol-beacon .bf-note,.bol-beacon .bf-stat,.bol-beacon .bf-avail,.bol-beacon .bf-opt,.bol-beacon .bf-opt-name,.bol-beacon .bf-opt-sub{display:block !important;}\n.bol-beacon .bf-strip,.bol-beacon .bf-list,.bol-beacon .bf-trust,.bol-beacon .bf-opts{display:grid !important;}\n.bol-beacon .bf-chips,.bol-beacon .bf-certs,.bol-beacon .bf-apps,.bol-beacon .bf-variant,.bol-beacon .bf-tcard,.bol-beacon .bf-box li,.bol-beacon summary,.bol-beacon summary .bf-lbl{display:flex !important;}\n.bol-beacon .bf-hero h2{color:#fff !important;font-size:30px !important;font-weight:800 !important;letter-spacing:.5px !important;text-transform:uppercase !important;line-height:1.2 !important;margin:0 !important;}\n.bol-beacon .bf-kicker{color:#FEB902 !important;}\n.bol-beacon .bf-hero .bf-sub{color:#c7d0dc !important;}\n\u003c\/style\u003e\n\n\u003c!-- HERO --\u003e\n\u003cdiv class=\"bf-hero\"\u003e\n  \u003cspan class=\"bf-kicker\"\u003eWarning \u0026amp; Safety Lighting\u003c\/span\u003e\n  \u003ch2\u003eXDR-2 Beacon\u003c\/h2\u003e\n  \u003cp class=\"bf-sub\"\u003eA low-profile 36W LED beacon built for the harshest work environments. 24 high-output LEDs, 12 selectable flash patterns, and full ECE + SAE certification — sealed to IP69K and backed by a lifetime warranty.\u003c\/p\u003e\n  \u003cdiv class=\"bf-chips\"\u003e\n    \u003cspan class=\"bf-chip is-y\"\u003eLifetime Warranty\u003c\/span\u003e\n    \u003cspan class=\"bf-chip\"\u003eIP67 \/ IP69K\u003c\/span\u003e\n    \u003cspan class=\"bf-chip\"\u003eECE R65 · SAE J845\u003c\/span\u003e\n    \u003cspan class=\"bf-chip\"\u003e12 Flash Patterns\u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- SPEC STRIP --\u003e\n\u003cdiv class=\"bf-strip\"\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M13 2 3 14h7l-1 8 10-12h-7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003e36W\u003c\/b\u003e\u003cspan\u003eLED Output\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003eIP69K\u003c\/b\u003e\u003cspan\u003eSealed \u0026amp; Rated\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 7v5l3 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003e12\u003c\/b\u003e\u003cspan\u003eFlash Patterns\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M4 12h16M12 4l8 8-8 8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003e10–30V\u003c\/b\u003e\u003cspan\u003eMulti-Voltage\u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- ALSO AVAILABLE --\u003e\n\u003cdiv class=\"bf-avail\"\u003eAlso available in a heavy-duty \u003ca href=\"https:\/\/www.blackoakled.com\/products\/xdr-4-beacon\"\u003eXDR-4 version →\u003c\/a\u003e\n\u003c\/div\u003e\n\n\u003c!-- OVERVIEW --\u003e\n\u003cdiv class=\"bf-sec\"\u003e\n  \u003ch3\u003eOverview\u003c\/h3\u003e\n  \u003cp\u003eBuilt for emergency, utility, and off-road work vehicles, the XDR-2 Beacon packs 24 individual 1.5W LEDs — 36W total — into a rugged, low-profile housing that stands just 2.15 in tall. Twelve selectable flash patterns and both synchronized and asynchronized modes let you run a single beacon or a coordinated array across a whole fleet.\u003c\/p\u003e\n  \u003cp\u003eA \u003cb\u003erobust aluminium housing\u003c\/b\u003e and \u003cb\u003eUV-resistant polycarbonate lens\u003c\/b\u003e shrug off impact, weather, and years of sun. Sealed to \u003cb\u003eIP67 and IP69K\u003c\/b\u003e, rated to withstand \u003cb\u003e60G of shock\u003c\/b\u003e, and operating from \u003cb\u003e-45°C to +65°C\u003c\/b\u003e, it's certified to \u003cb\u003eECE R65, ECE R10, SAE J845, CE and CISPR 25\u003c\/b\u003e. Runs on any \u003cb\u003e10–30V\u003c\/b\u003e system and mounts with a simple bolt-down fixing.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003c!-- CHOOSE SETUP --\u003e\n\u003cdiv class=\"bf-sec\"\u003e\n  \u003ch3\u003eChoose Your Setup\u003c\/h3\u003e\n  \u003cdiv class=\"bf-opts\"\u003e\n    \u003cdiv class=\"bf-opt\"\u003e\n      \u003cspan class=\"bf-opt-tag\"\u003eOption 1 · Base\u003c\/span\u003e\n      \u003cdiv class=\"bf-opt-name\"\u003ePermanent\u003c\/div\u003e\n      \u003cp class=\"bf-opt-sub\"\u003eHard-wired for a clean, permanent installation.\u003c\/p\u003e\n      \u003cul class=\"bf-oplist\"\u003e\n        \u003cli\u003e\u003cb\u003eOpen \/ bare-wire lead\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eBolt-on mounting\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003eWires into your own \u003cb\u003eswitch \u0026amp; power source\u003c\/b\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bf-opt is-feature\"\u003e\n      \u003cspan class=\"bf-opt-tag\"\u003eOption 2 · Plug \u0026amp; Play\u003c\/span\u003e\n      \u003cdiv class=\"bf-opt-name\"\u003ePlug \u0026amp; Play\u003c\/div\u003e\n      \u003cp class=\"bf-opt-sub\"\u003eReady to run out of the box — no hard-wiring needed.\u003c\/p\u003e\n      \u003cul class=\"bf-oplist\"\u003e\n        \u003cli\u003e\n\u003cb\u003e9.5 ft of wiring\u003c\/b\u003e with a 12V cigarette-socket plug\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eControls built into the back of the plug\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eRocker 1\u003c\/b\u003e — power on \/ off\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eRocker 2\u003c\/b\u003e — cycle through the 12 flash patterns\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- ACCORDIONS --\u003e\n\u003cdiv class=\"bf-sec\"\u003e\n  \u003ch3\u003eDetails\u003c\/h3\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 2 2 7l10 5 10-5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M2 17l10 5 10-5M2 12l10 5 10-5\"\u003e\u003c\/path\u003e\u003c\/svg\u003eKey Features\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cul class=\"bf-list\"\u003e\n        \u003cli\u003e\n\u003cb\u003e36W total output\u003c\/b\u003e from 24× 1.5W LEDs\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003e12 selectable flash patterns\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eSync \u0026amp; async\u003c\/b\u003e multi-beacon operation\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eLow-profile\u003c\/b\u003e — only 2.15 in tall\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eIP67 \u0026amp; IP69K\u003c\/b\u003e waterproof sealing\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003e60G anti-shock\u003c\/b\u003e rating\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eRobust aluminium\u003c\/b\u003e housing\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eUV-resistant PC lens\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eAmber or Clear\u003c\/b\u003e lens options\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003e10–30V\u003c\/b\u003e multi-voltage input\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003e-45°C to +65°C\u003c\/b\u003e operating range\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eBolt-mount\u003c\/b\u003e installation\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M21 16V8a2 2 0 0 0-1-1.7l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.7l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"\u003e\u003c\/path\u003e\u003cpath d=\"m3.3 7 8.7 5 8.7-5M12 22V12\"\u003e\u003c\/path\u003e\u003c\/svg\u003eWhat's in the Box\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cp style=\"margin-top:14px;\"\u003e\u003cb\u003ePermanent (Base)\u003c\/b\u003e\u003c\/p\u003e\n      \u003cul class=\"bf-box\"\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eXDR-2 Low-Profile LED Beacon\u003c\/b\u003e\u003csmall\u003eAmber or Clear lens\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eBolt-Mount Hardware Kit\u003c\/b\u003e\u003csmall\u003eFixed bolt-down mounting\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eOpen-Wire Lead (~16 in)\u003c\/b\u003e\u003csmall\u003eHard-wire into your own switch \u0026amp; power\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cp style=\"margin-top:10px;\"\u003e\u003cb\u003ePlug \u0026amp; Play\u003c\/b\u003e\u003c\/p\u003e\n      \u003cul class=\"bf-box\"\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eXDR-2 Low-Profile LED Beacon\u003c\/b\u003e\u003csmall\u003eAmber or Clear lens\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eBolt-Mount Hardware Kit\u003c\/b\u003e\u003csmall\u003eFixed bolt-down mounting\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003e9.5 ft Plug Harness\u003c\/b\u003e\u003csmall\u003e12V cigarette-socket plug with built-in on\/off + pattern-cycle rocker controls\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cdiv class=\"bf-note\"\u003e\n\u003cb\u003eNote:\u003c\/b\u003e on the Permanent version, flash-pattern selection is set through the wiring; on the Plug \u0026amp; Play version it's handled by the rocker switches on the plug.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M4 4h16v4H4zM4 10h16v4H4zM4 16h16v4H4z\"\u003e\u003c\/path\u003e\u003c\/svg\u003eFull Specifications\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003ctable class=\"bf-specs\"\u003e\n        \u003ctr\u003e\n\u003ctd\u003ePower\u003c\/td\u003e\n\u003ctd\u003e36W LED Chip\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eLight Source\u003c\/td\u003e\n\u003ctd\u003e24 × 1.5W LED\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eVoltage\u003c\/td\u003e\n\u003ctd\u003e10–30V\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eFlash Patterns\u003c\/td\u003e\n\u003ctd\u003e12\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eSynchronization\u003c\/td\u003e\n\u003ctd\u003eSync \u0026amp; Async available\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eWaterproof Rating\u003c\/td\u003e\n\u003ctd\u003eIP67 \/ IP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eAnti-Shock Rating\u003c\/td\u003e\n\u003ctd\u003e60G\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eHousing Material\u003c\/td\u003e\n\u003ctd\u003eRobust Aluminium\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eLens Material\u003c\/td\u003e\n\u003ctd\u003eUV-Resistant PC\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eLens Color\u003c\/td\u003e\n\u003ctd\u003eAmber or Clear\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eSize\u003c\/td\u003e\n\u003ctd\u003e4.4 × 4.4 × 2.15 in\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eMounting\u003c\/td\u003e\n\u003ctd\u003eBolt Mount\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eCable\u003c\/td\u003e\n\u003ctd\u003e~16 in lead wire\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eWorking Temperature\u003c\/td\u003e\n\u003ctd\u003e-45°C ~ +65°C (-49°F ~ +149°F)\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eWarranty\u003c\/td\u003e\n\u003ctd\u003eLifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003cpath d=\"m9 12 2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003eCertifications \u0026amp; Approvals\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cp style=\"margin-top:14px;\"\u003eIndependently tested and approved to the standards that matter for on-road and fleet use:\u003c\/p\u003e\n      \u003cdiv class=\"bf-certs\"\u003e\n        \u003cspan class=\"bf-cert\"\u003eECE R65\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eECE R10\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eSAE J845\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eCE\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eCISPR 25\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"11\" cy=\"11\" r=\"8\"\u003e\u003c\/circle\u003e\u003cpath d=\"m21 21-4.3-4.3\"\u003e\u003c\/path\u003e\u003c\/svg\u003eApplications\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cdiv class=\"bf-apps\"\u003e\n        \u003cspan class=\"bf-app\"\u003eEmergency Vehicles\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eTow \u0026amp; Recovery\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eConstruction\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eAgriculture \u0026amp; Tractors\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eUtility Fleets\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eSnow Plows\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eForklifts\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eSecurity Patrol\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003cpath d=\"m9 12 2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003eWarranty\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cdiv class=\"bf-trust\"\u003e\n        \u003cdiv class=\"bf-tcard\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003cpath d=\"m9 12 2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          \u003cdiv\u003e\n\u003cb\u003eLifetime Warranty\u003c\/b\u003e\u003cspan\u003eCovers defects in workmanship and materials.\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"bf-tcard\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M20 6 9 17l-5-5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          \u003cdiv\u003e\n\u003cb\u003eBuilt to Endure\u003c\/b\u003e\u003cspan\u003e60G shock rated, IP69K sealed, -45°C to +65°C.\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e","brand":"Black Oak LED","offers":[{"title":"Permanent","offer_id":43434015916093,"sku":"XDR-2B","price":85.94,"currency_code":"USD","in_stock":true},{"title":"Magnetic","offer_id":43434015948861,"sku":"XDR-2B-M","price":98.44,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/2Beacon.png?v=1785877565"},{"product_id":"xdr-4-beacon","title":"XDR-4 Amber Warning LED Beacon Light","description":"\u003cdiv class=\"bol-beacon\"\u003e\n\u003cstyle\u003e\n\/* Scoped to .bol-beacon — matches Black Oak LED site styling, won't collide with theme *\/\n.bol-beacon{--ink:#111;--ink2:#3a424e;--muted:#6a7482;--line:#e4e7ec;--bg:#f5f5f5;--soft:#f8f8f6;--yellow:#FEB902;--yellow2:#F5B31B;--navy:#1A3D5E;font-family:Roboto,\"Helvetica Neue\",Arial,sans-serif;color:var(--ink);line-height:1.6;font-size:16px;max-width:1000px;margin:0 auto;}\n.bol-beacon *{box-sizing:border-box;}\n.bol-beacon h2,.bol-beacon h3{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;line-height:1.2;margin:0;}\n.bol-beacon p{margin:0 0 14px;color:var(--ink2);}\n\n\/* Hero *\/\n.bol-beacon .bf-hero{background:linear-gradient(155deg,#0c0c0c 0%,#14171c 55%,#1A3D5E 130%);color:#fff;border-radius:12px;padding:34px 32px;position:relative;overflow:hidden;}\n.bol-beacon .bf-hero:after{content:\"\";position:absolute;right:-70px;top:-70px;width:280px;height:280px;background:radial-gradient(circle,rgba(254,185,2,.28),transparent 62%);}\n.bol-beacon .bf-kicker{display:inline-block;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--yellow);font-weight:800;margin-bottom:10px;}\n.bol-beacon .bf-hero h2{font-size:30px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;}\n.bol-beacon .bf-hero .bf-sub{margin-top:12px;font-size:16px;color:#c7d0dc;max-width:640px;position:relative;}\n.bol-beacon .bf-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px;position:relative;}\n.bol-beacon .bf-chip{background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.16);color:#eaf0f7;font-size:13px;font-weight:600;padding:7px 13px;border-radius:999px;}\n.bol-beacon .bf-chip.is-y{background:var(--yellow);border-color:var(--yellow);color:var(--navy);font-weight:700;}\n\n\/* Spec strip *\/\n.bol-beacon .bf-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0;}\n.bol-beacon .bf-stat{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:16px 14px;text-align:center;}\n.bol-beacon .bf-stat .bf-ic{width:30px;height:30px;margin:0 auto 8px;display:block;color:var(--yellow2);}\n.bol-beacon .bf-stat b{display:block;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:20px;font-weight:800;color:var(--ink);}\n.bol-beacon .bf-stat span{font-size:12.5px;color:var(--muted);}\n\n\/* Section *\/\n.bol-beacon .bf-sec{margin:26px 0;}\n.bol-beacon .bf-sec h3{font-size:20px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px;display:flex;align-items:center;gap:9px;}\n.bol-beacon .bf-sec h3:before{content:\"\";width:5px;height:20px;border-radius:3px;background:var(--yellow);display:inline-block;}\n\n\/* Accordion *\/\n.bol-beacon details{border:1px solid var(--line);border-radius:12px;margin-bottom:12px;background:#fff;overflow:hidden;}\n.bol-beacon details[open]{border-color:#cdd4dd;}\n.bol-beacon summary{list-style:none;cursor:pointer;padding:17px 20px;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:16.5px;font-weight:700;color:var(--ink);display:flex;align-items:center;justify-content:space-between;gap:12px;}\n.bol-beacon summary::-webkit-details-marker{display:none;}\n.bol-beacon summary .bf-lbl{display:flex;align-items:center;gap:11px;}\n.bol-beacon summary .bf-lbl svg{width:20px;height:20px;color:var(--yellow2);flex:none;}\n.bol-beacon .bf-plus{width:22px;height:22px;position:relative;flex:none;transition:transform .2s;}\n.bol-beacon .bf-plus:before,.bol-beacon .bf-plus:after{content:\"\";position:absolute;background:var(--muted);border-radius:2px;}\n.bol-beacon .bf-plus:before{left:4px;right:4px;top:10px;height:2px;}\n.bol-beacon .bf-plus:after{top:4px;bottom:4px;left:10px;width:2px;}\n.bol-beacon details[open] .bf-plus{transform:rotate(135deg);}\n.bol-beacon .bf-body{padding:2px 20px 20px;border-top:1px solid var(--line);}\n\n\/* Feature list *\/\n.bol-beacon .bf-list{list-style:none;margin:14px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:12px 22px;}\n.bol-beacon .bf-list li{position:relative;padding-left:28px;font-size:14.5px;color:var(--ink2);}\n.bol-beacon .bf-list li b{color:var(--ink);}\n.bol-beacon .bf-list li:before{content:\"\";position:absolute;left:0;top:3px;width:17px;height:17px;border-radius:50%;background:var(--yellow);\n  -webkit-mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/12px no-repeat;\n  mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/12px no-repeat;}\n\n\/* In the box *\/\n.bol-beacon .bf-box{list-style:none;margin:14px 0 0;padding:0;}\n.bol-beacon .bf-box li{display:flex;align-items:center;gap:13px;padding:13px 0;border-bottom:1px dashed var(--line);font-size:15px;}\n.bol-beacon .bf-box li:last-child{border-bottom:none;}\n.bol-beacon .bf-qty{flex:none;min-width:40px;height:40px;border-radius:9px;background:var(--navy);border:1px solid var(--navy);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--yellow);font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;}\n.bol-beacon .bf-box b{color:var(--ink);}\n.bol-beacon .bf-box small{display:block;color:var(--muted);font-size:12.5px;}\n.bol-beacon .bf-note{margin-top:14px;font-size:13.5px;color:var(--muted);background:#fffaf0;border:1px solid #f6e2b8;border-radius:9px;padding:11px 14px;}\n\n\/* Specs table *\/\n.bol-beacon .bf-specs{width:100%;border-collapse:collapse;margin-top:14px;font-size:14.5px;}\n.bol-beacon .bf-specs tr{border-bottom:1px solid var(--line);}\n.bol-beacon .bf-specs td{padding:11px 6px;}\n.bol-beacon .bf-specs td:first-child{color:var(--muted);}\n.bol-beacon .bf-specs td:last-child{text-align:right;font-weight:700;color:var(--ink);}\n\n\/* Cert badges *\/\n.bol-beacon .bf-certs{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px;}\n.bol-beacon .bf-cert{background:var(--navy);color:#fff;border-radius:8px;padding:9px 14px;font-size:13px;font-weight:700;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;letter-spacing:.3px;}\n\n\/* Applications *\/\n.bol-beacon .bf-apps{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px;}\n.bol-beacon .bf-app{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:8px 13px;font-size:13.5px;font-weight:600;color:var(--ink2);}\n\n\/* Also available note *\/\n.bol-beacon .bf-avail{margin:0 0 4px;padding:12px 16px;background:var(--soft);border:1px solid var(--line);border-left:4px solid var(--yellow);border-radius:10px;font-size:14.5px;color:var(--ink2);}\n.bol-beacon .bf-avail a{color:var(--navy);font-weight:800;text-decoration:none;}\n.bol-beacon .bf-avail a:hover{text-decoration:underline;}\n\n\/* Setup options *\/\n.bol-beacon .bf-opts{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px;}\n.bol-beacon .bf-opt{border:1px solid var(--line);border-radius:12px;padding:20px;background:#fff;}\n.bol-beacon .bf-opt.is-feature{border-color:var(--yellow);box-shadow:0 0 0 1px var(--yellow);}\n.bol-beacon .bf-opt-tag{display:inline-block;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--navy);background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:4px 11px;margin-bottom:10px;}\n.bol-beacon .bf-opt.is-feature .bf-opt-tag{background:var(--yellow);border-color:var(--yellow);}\n.bol-beacon .bf-opt-name{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:18px;font-weight:800;color:var(--ink);margin-bottom:4px;}\n.bol-beacon .bf-opt-sub{font-size:13.5px;color:var(--muted);margin:0 0 12px;}\n.bol-beacon .bf-oplist{list-style:none;margin:0;padding:0;}\n.bol-beacon .bf-oplist li{position:relative;padding:7px 0 7px 26px;font-size:14px;color:var(--ink2);border-top:1px solid var(--line);}\n.bol-beacon .bf-oplist li:first-child{border-top:none;}\n.bol-beacon .bf-oplist li b{color:var(--ink);}\n.bol-beacon .bf-oplist li:before{content:\"\";position:absolute;left:0;top:10px;width:16px;height:16px;border-radius:50%;background:var(--yellow);\n  -webkit-mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/11px no-repeat;\n  mask:url(\"data:image\/svg+xml;utf8,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'\u003e\u003cpath fill='white' d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'\/\u003e\u003c\/svg\u003e\") center\/11px no-repeat;}\n\n\/* Trust *\/\n.bol-beacon .bf-trust{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:6px;}\n.bol-beacon .bf-tcard{border:1px solid var(--line);border-radius:12px;padding:18px;display:flex;gap:14px;align-items:flex-start;background:#fff;}\n.bol-beacon .bf-tcard svg{width:30px;height:30px;color:var(--navy);flex:none;}\n.bol-beacon .bf-tcard b{display:block;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:15.5px;margin-bottom:3px;}\n.bol-beacon .bf-tcard span{font-size:13.5px;color:var(--muted);}\n\n@media(max-width:720px){\n  .bol-beacon .bf-hero{padding:26px 22px;}\n  .bol-beacon .bf-hero h2{font-size:23px;}\n  .bol-beacon .bf-strip{grid-template-columns:1fr 1fr;}\n  .bol-beacon .bf-list{grid-template-columns:1fr;}\n  .bol-beacon .bf-trust{grid-template-columns:1fr;}\n  .bol-beacon .bf-opts{grid-template-columns:1fr;}\n}\n\/* --- Shopify rich-text safety: the description editor converts \u003cdiv\u003e to inline \u003cspan\u003e; re-assert layout so nothing collapses --- *\/\n.bol-beacon,.bol-beacon .bf-hero,.bol-beacon .bf-sec,.bol-beacon .bf-body,.bol-beacon .bf-note,.bol-beacon .bf-stat,.bol-beacon .bf-avail,.bol-beacon .bf-opt,.bol-beacon .bf-opt-name,.bol-beacon .bf-opt-sub{display:block !important;}\n.bol-beacon .bf-strip,.bol-beacon .bf-list,.bol-beacon .bf-trust,.bol-beacon .bf-opts{display:grid !important;}\n.bol-beacon .bf-chips,.bol-beacon .bf-certs,.bol-beacon .bf-apps,.bol-beacon .bf-tcard,.bol-beacon .bf-box li,.bol-beacon summary,.bol-beacon summary .bf-lbl{display:flex !important;}\n.bol-beacon .bf-hero h2{color:#fff !important;font-size:30px !important;font-weight:800 !important;letter-spacing:.5px !important;text-transform:uppercase !important;line-height:1.2 !important;margin:0 !important;}\n.bol-beacon .bf-kicker{color:#FEB902 !important;}\n.bol-beacon .bf-hero .bf-sub{color:#c7d0dc !important;}\n\u003c\/style\u003e\n\n\u003c!-- HERO --\u003e\n\u003cdiv class=\"bf-hero\"\u003e\n  \u003cspan class=\"bf-kicker\"\u003eWarning \u0026amp; Safety Lighting\u003c\/span\u003e\n  \u003ch2\u003eXDR-4 Beacon\u003c\/h2\u003e\n  \u003cp class=\"bf-sub\"\u003eA heavy-duty 72W LED beacon built to dominate the harshest work environments. 48 high-output LEDs, 12 selectable flash patterns, and full ECE R65 Class 2 + SAE J845 certification — sealed to IP69K and backed by a lifetime warranty.\u003c\/p\u003e\n  \u003cdiv class=\"bf-chips\"\u003e\n    \u003cspan class=\"bf-chip is-y\"\u003eLifetime Warranty\u003c\/span\u003e\n    \u003cspan class=\"bf-chip\"\u003eIP67 \/ IP69K\u003c\/span\u003e\n    \u003cspan class=\"bf-chip\"\u003eECE R65 Class 2 · SAE J845\u003c\/span\u003e\n    \u003cspan class=\"bf-chip\"\u003e12 Flash Patterns\u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- SPEC STRIP --\u003e\n\u003cdiv class=\"bf-strip\"\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M13 2 3 14h7l-1 8 10-12h-7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003e72W\u003c\/b\u003e\u003cspan\u003eLED Output\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003eIP69K\u003c\/b\u003e\u003cspan\u003eSealed \u0026amp; Rated\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 7v5l3 2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003e12\u003c\/b\u003e\u003cspan\u003eFlash Patterns\u003c\/span\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"bf-stat\"\u003e\n    \u003csvg class=\"bf-ic\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M4 12h16M12 4l8 8-8 8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n    \u003cb\u003e10–30V\u003c\/b\u003e\u003cspan\u003eMulti-Voltage\u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- ALSO AVAILABLE --\u003e\n\u003cdiv class=\"bf-avail\"\u003eAlso available in a compact, low-profile \u003ca href=\"https:\/\/www.blackoakled.com\/products\/xdr2-beacon\"\u003eXDR-2 version →\u003c\/a\u003e\n\u003c\/div\u003e\n\n\u003c!-- OVERVIEW --\u003e\n\u003cdiv class=\"bf-sec\"\u003e\n  \u003ch3\u003eOverview\u003c\/h3\u003e\n  \u003cp\u003eWhen you need maximum output and maximum presence, the XDR-4 Beacon delivers. Forty-eight high-output 1.5W LEDs — 72W total — pack into a rugged heavy-duty housing measuring 4.9 in across and 3.5 in tall, throwing a wall of amber warning light that cuts through daylight, dust, and weather. Twelve selectable flash patterns plus synchronized and asynchronized modes let you run a single beacon or a coordinated array across an entire fleet.\u003c\/p\u003e\n  \u003cp\u003eA \u003cb\u003erobust aluminium housing\u003c\/b\u003e and \u003cb\u003eUV-resistant polycarbonate lens\u003c\/b\u003e shrug off impact, weather, and years of sun. Sealed to \u003cb\u003eIP67 and IP69K\u003c\/b\u003e, rated to withstand \u003cb\u003e60G of shock\u003c\/b\u003e, and operating from \u003cb\u003e-45°C to +65°C\u003c\/b\u003e, it's certified to \u003cb\u003eECE R65 Amber Class 2, ECE R10, SAE J845, CE and CISPR 25 Class 5\u003c\/b\u003e. Runs on any \u003cb\u003e10–30V\u003c\/b\u003e system and mounts with a simple bolt-down fixing.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003c!-- CHOOSE SETUP --\u003e\n\u003cdiv class=\"bf-sec\"\u003e\n  \u003ch3\u003eChoose Your Setup\u003c\/h3\u003e\n  \u003cdiv class=\"bf-opts\"\u003e\n    \u003cdiv class=\"bf-opt\"\u003e\n      \u003cspan class=\"bf-opt-tag\"\u003eOption 1 · Base\u003c\/span\u003e\n      \u003cdiv class=\"bf-opt-name\"\u003ePermanent\u003c\/div\u003e\n      \u003cp class=\"bf-opt-sub\"\u003eHard-wired for a clean, permanent installation.\u003c\/p\u003e\n      \u003cul class=\"bf-oplist\"\u003e\n        \u003cli\u003e\u003cb\u003eOpen \/ bare-wire lead\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eBolt-on mounting\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003eWires into your own \u003cb\u003eswitch \u0026amp; power source\u003c\/b\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bf-opt is-feature\"\u003e\n      \u003cspan class=\"bf-opt-tag\"\u003eOption 2 · Magnetic Mount\u003c\/span\u003e\n      \u003cdiv class=\"bf-opt-name\"\u003eMagnetic Mount\u003c\/div\u003e\n      \u003cp class=\"bf-opt-sub\"\u003eTool-free — drop it on and move it between vehicles in seconds.\u003c\/p\u003e\n      \u003cul class=\"bf-oplist\"\u003e\n        \u003cli\u003e\n\u003cb\u003eStrong magnetic base\u003c\/b\u003e — no drilling\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eCigarette-socket power lead\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eControls built into the plug\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eRocker 1\u003c\/b\u003e — power on \/ off\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eRocker 2\u003c\/b\u003e — cycle through the 12 flash patterns\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- ACCORDIONS --\u003e\n\u003cdiv class=\"bf-sec\"\u003e\n  \u003ch3\u003eDetails\u003c\/h3\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 2 2 7l10 5 10-5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M2 17l10 5 10-5M2 12l10 5 10-5\"\u003e\u003c\/path\u003e\u003c\/svg\u003eKey Features\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cul class=\"bf-list\"\u003e\n        \u003cli\u003e\n\u003cb\u003e72W total output\u003c\/b\u003e from 48× 1.5W LEDs\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003e12 selectable flash patterns\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eSync \u0026amp; async\u003c\/b\u003e multi-beacon operation\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eHeavy-duty\u003c\/b\u003e aluminium build\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eIP67 \u0026amp; IP69K\u003c\/b\u003e waterproof sealing\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003e60G anti-shock\u003c\/b\u003e rating\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eECE R65 Amber Class 2\u003c\/b\u003e certified\u003c\/li\u003e\n        \u003cli\u003e\u003cb\u003eUV-resistant PC lens\u003c\/b\u003e\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eAmber or Clear\u003c\/b\u003e lens options\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003e10–30V\u003c\/b\u003e multi-voltage input\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003e-45°C to +65°C\u003c\/b\u003e operating range\u003c\/li\u003e\n        \u003cli\u003e\n\u003cb\u003eBolt-mount\u003c\/b\u003e installation\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M21 16V8a2 2 0 0 0-1-1.7l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.7l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"\u003e\u003c\/path\u003e\u003cpath d=\"m3.3 7 8.7 5 8.7-5M12 22V12\"\u003e\u003c\/path\u003e\u003c\/svg\u003eWhat's in the Box\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cp style=\"margin-top:14px;\"\u003e\u003cb\u003ePermanent (Base)\u003c\/b\u003e\u003c\/p\u003e\n      \u003cul class=\"bf-box\"\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eXDR-4 Heavy-Duty LED Beacon\u003c\/b\u003e\u003csmall\u003eAmber or Clear lens\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eBolt-Mount Hardware Kit\u003c\/b\u003e\u003csmall\u003eFixed bolt-down mounting\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eOpen-Wire Lead (~16 in)\u003c\/b\u003e\u003csmall\u003eHard-wire into your own switch \u0026amp; power\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cp style=\"margin-top:10px;\"\u003e\u003cb\u003eMagnetic Mount\u003c\/b\u003e\u003c\/p\u003e\n      \u003cul class=\"bf-box\"\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eXDR-4 Heavy-Duty LED Beacon\u003c\/b\u003e\u003csmall\u003eAmber or Clear lens\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eMagnetic Mount Base\u003c\/b\u003e\u003csmall\u003eStrong, tool-free hold — no drilling\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bf-qty\"\u003e1×\u003c\/span\u003e\u003cspan\u003e\u003cb\u003eCigarette-Socket Power Lead\u003c\/b\u003e\u003csmall\u003eBuilt-in on\/off + pattern-cycle rocker controls\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cdiv class=\"bf-note\"\u003e\n\u003cb\u003eNote:\u003c\/b\u003e on the Permanent version, flash-pattern selection is set through the wiring; on the Magnetic Mount version it's handled by the rocker switches on the plug.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M4 4h16v4H4zM4 10h16v4H4zM4 16h16v4H4z\"\u003e\u003c\/path\u003e\u003c\/svg\u003eFull Specifications\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003ctable class=\"bf-specs\"\u003e\n        \u003ctr\u003e\n\u003ctd\u003ePower\u003c\/td\u003e\n\u003ctd\u003e72W (48 × 1.5W LED)\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eLight Source\u003c\/td\u003e\n\u003ctd\u003e48 × 1.5W LED\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eVoltage\u003c\/td\u003e\n\u003ctd\u003e10–30V\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eFlash Patterns\u003c\/td\u003e\n\u003ctd\u003e12\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eSynchronization\u003c\/td\u003e\n\u003ctd\u003eSync \u0026amp; Async available\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eWaterproof Rating\u003c\/td\u003e\n\u003ctd\u003eIP67 \/ IP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eAnti-Shock Rating\u003c\/td\u003e\n\u003ctd\u003e60G\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eHousing Material\u003c\/td\u003e\n\u003ctd\u003eRobust Aluminium\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eLens Material\u003c\/td\u003e\n\u003ctd\u003eUV-Resistant PC\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eLens Color\u003c\/td\u003e\n\u003ctd\u003eAmber or Clear\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eSize\u003c\/td\u003e\n\u003ctd\u003e4.9 × 4.9 × 3.5 in\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eMounting\u003c\/td\u003e\n\u003ctd\u003eBolt Mount \/ Magnetic\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eCable\u003c\/td\u003e\n\u003ctd\u003e~16 in lead wire\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eWorking Temperature\u003c\/td\u003e\n\u003ctd\u003e-45°C ~ +65°C (-49°F ~ +149°F)\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003ctr\u003e\n\u003ctd\u003eWarranty\u003c\/td\u003e\n\u003ctd\u003eLifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003cpath d=\"m9 12 2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003eCertifications \u0026amp; Approvals\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cp style=\"margin-top:14px;\"\u003eIndependently tested and approved to the standards that matter for on-road and fleet use:\u003c\/p\u003e\n      \u003cdiv class=\"bf-certs\"\u003e\n        \u003cspan class=\"bf-cert\"\u003eECE R65 Amber Class 2\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eECE R10\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eSAE J845\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eCE\u003c\/span\u003e\n        \u003cspan class=\"bf-cert\"\u003eCISPR 25 Class 5\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"11\" cy=\"11\" r=\"8\"\u003e\u003c\/circle\u003e\u003cpath d=\"m21 21-4.3-4.3\"\u003e\u003c\/path\u003e\u003c\/svg\u003eApplications\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cdiv class=\"bf-apps\"\u003e\n        \u003cspan class=\"bf-app\"\u003eEmergency Vehicles\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eTow \u0026amp; Recovery\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eConstruction\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eAgriculture \u0026amp; Tractors\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eUtility Fleets\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eSnow Plows\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eMining \u0026amp; Heavy Equipment\u003c\/span\u003e\n        \u003cspan class=\"bf-app\"\u003eSecurity Patrol\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u003cspan class=\"bf-lbl\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003cpath d=\"m9 12 2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003eWarranty\u003c\/span\u003e\n      \u003cspan class=\"bf-plus\"\u003e\u003c\/span\u003e\n    \u003c\/summary\u003e\n    \u003cdiv class=\"bf-body\"\u003e\n      \u003cdiv class=\"bf-trust\"\u003e\n        \u003cdiv class=\"bf-tcard\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\u003e\u003c\/path\u003e\u003cpath d=\"m9 12 2 2 4-4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          \u003cdiv\u003e\n\u003cb\u003eLifetime Warranty\u003c\/b\u003e\u003cspan\u003eCovers defects in workmanship and materials.\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"bf-tcard\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M20 6 9 17l-5-5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          \u003cdiv\u003e\n\u003cb\u003eBuilt to Endure\u003c\/b\u003e\u003cspan\u003e60G shock rated, IP69K sealed, -45°C to +65°C.\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e","brand":"Black Oak LED","offers":[{"title":"Permanent","offer_id":43434015752253,"sku":"XDR-4B","price":106.24,"currency_code":"USD","in_stock":true},{"title":"Magnetic","offer_id":43434015785021,"sku":"XDR-4B-M","price":119.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/XDR-4.png?v=1786041954"},{"product_id":"11-mini-low-pro-emergency-light-bar","title":"11\" Mini Low Pro Emergency Light Bar","description":"\u003c!-- LOWPRO MINI INTERACTIVE PLAYER --\u003e\n\u003cdiv id=\"lowpro-player-block\" style=\"margin:0 0 26px;\"\u003e\n\u003cdiv class=\"lowpro-cta\"\u003e\n\u003ch2 style=\"margin:0 0 4px;font-size:24px;line-height:1.25;\"\u003eTake the Controls: Try This Light Bar Live\u003c\/h2\u003e\n\u003cp style=\"margin:0 0 12px;font-size:15px;line-height:1.5;\"\u003eFlip the rocker, press the pattern button, and switch on the 360° Halo scene light, exactly like the socket controller that ships in the box. Only the colors this bar is offered in can be selected.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ciframe id=\"lowpro-player-frame\" class=\"lowpro-frame\" title=\"Mini Low Pro Emergency Bar interactive demo\" style=\"width:100%;border:0;display:block;border-radius:16px;background:#0a0c0f;\" srcdoc=\"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\u0026quot;en\u0026quot;\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\u0026quot;UTF-8\u0026quot;\u0026gt;\n\u0026lt;meta name=\u0026quot;viewport\u0026quot; content=\u0026quot;width=device-width, initial-scale=1.0\u0026quot;\u0026gt;\n\u0026lt;title\u0026gt;Mini Low Pro Simulator\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n  :root{\n    --bg:#0a0c0f; --panel:#111418; --panel2:#161a20; --edge:#242a33;\n    --txt:#e8ecf2; --dim:#8a94a3;\n  }\n  *{box-sizing:border-box; -webkit-tap-highlight-color:transparent}\n  html,body{margin:0;padding:0;background:var(--bg);color:var(--txt);\n    font-family:\u0026quot;Segoe UI\u0026quot;,system-ui,-apple-system,Roboto,Arial,sans-serif;}\n  .wrap{max-width:1100px;margin:0 auto;padding:14px 16px 20px;}\n  header{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:6px}\n  .brand{font-weight:800;letter-spacing:.18em;font-size:19px;white-space:nowrap}\n  .brand span{color:var(--dim);font-weight:600}\n  .sub{color:var(--dim);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}\n  .sizeBtns{margin-left:auto;display:flex;gap:6px}\n  .sizeBtns button{background:var(--panel2);border:1px solid #2c333d;color:var(--txt);\n    border-radius:7px;font-size:12px;padding:4px 10px;cursor:pointer}\n  .sizeBtns button.on{border-color:#ffb43a;color:#ffcf7d}\n  .stage{background:radial-gradient(ellipse at 50% 30%, #14181e 0%, #0b0d11 70%);\n    border:1px solid var(--edge);border-radius:14px;padding:6px 10px 2px;position:relative;overflow:hidden}\n  .stage svg{display:block;width:100%;height:auto}\n  .stageLabel{position:absolute;top:10px;left:14px;font-size:11px;letter-spacing:.14em;\n    color:#5b6470;text-transform:uppercase}\n  .haloBadge{position:absolute;top:10px;right:14px;display:none;align-items:center;gap:8px;\n    font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#dfe9f7;\n    background:rgba(70,90,120,.22);border:1px solid rgba(190,215,255,.35);\n    border-radius:999px;padding:5px 12px 5px 9px;backdrop-filter:blur(2px)}\n  .haloBadge .dot{width:8px;height:8px;border-radius:50%;background:#F4F8FF;\n    box-shadow:0 0 8px 2px rgba(220,235,255,.9);flex:none}\n  .haloBadge b{font-weight:700;color:#fff}\n  .haloBadge span{color:#9fb0c6;text-transform:none;letter-spacing:.02em}\n  @media(max-width:700px){.haloBadge span{display:none}}\n  .lower{display:grid;grid-template-columns:270px 1fr;gap:14px;margin-top:14px;align-items:stretch}\n  .compactSel{display:none}\n  @media(max-width:840px){\n    .stage{padding:8px 8px 4px}\n    .stageLabel{position:static;font-size:10px;margin:0 0 6px}\n    .haloBadge{position:static;font-size:10px;padding:4px 9px;margin:0 0 6px;width:max-content}\n    .wrap{padding:6px 6px 10px !important}\n    .lower{grid-template-columns:1fr;gap:10px}\n    .cardCtl{order:1}\n    .cardColors{order:2}\n    .cardColors .cRow,.cardColors .hint{display:none}\n    .cardColors.expanded .cRow{display:block}\n    .compactSel{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n    .compactSel .sw{cursor:default}\n    .compactSel .sw:hover{transform:none}\n  }\n  .card{background:var(--panel);border:1px solid var(--edge);border-radius:14px;padding:14px}\n  .card h3{margin:0 0 10px;font-size:11.5px;letter-spacing:.16em;color:var(--dim);\n    text-transform:uppercase;font-weight:700}\n  .cRow{margin-bottom:12px}\n  .cRow .lbl{font-size:12px;color:var(--dim);margin-bottom:6px;display:flex;justify-content:space-between;align-items:center}\n  .swatches{display:flex;gap:8px;flex-wrap:wrap}\n  .sw{width:38px;height:30px;border-radius:7px;border:2px solid #2c333d;cursor:pointer;\n    position:relative;transition:transform .08s}\n  .sw:hover{transform:translateY(-1px)}\n  .sw.sel{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.25),0 0 14px rgba(255,255,255,.15)}\n  .sw.dis{opacity:.22;cursor:not-allowed}\n  .sw.none{background:repeating-linear-gradient(45deg,#1a1f26 0 6px,#12161b 6px 12px)}\n  .sw.none::after{content:\u0026quot;OFF\u0026quot;;position:absolute;inset:0;display:flex;align-items:center;\n    justify-content:center;font-size:9px;color:#6b7480;font-weight:700;letter-spacing:.05em}\n  .hint{font-size:11.5px;line-height:1.5;color:#6d7684;border-top:1px solid var(--edge);\n    padding-top:10px;margin-top:2px}\n  .hint b{color:#9aa4b2;font-weight:600}\n  .swapBtn{background:var(--panel2);border:1px solid #2c333d;color:var(--txt);border-radius:7px;\n    font-size:11px;padding:4px 9px;cursor:pointer;letter-spacing:.06em}\n  .swapBtn:hover{border-color:#4a5462}\n  .ctlWrap{display:flex;justify-content:center}\n  .ctlWrap svg{width:100%;max-width:300px;height:auto}\n  .legend{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 16px;\n    margin:12px auto 0;max-width:420px;border-top:1px solid var(--edge);padding-top:12px}\n  .legend div{display:flex;align-items:baseline;gap:8px;font-size:11.5px;line-height:1.4}\n  .legend b{color:#ffcf7d;font-weight:700;min-width:20px;flex:none}\n  .legend span{color:#7f8b9c}\n  @media(max-width:520px){.legend{grid-template-columns:1fr}}\n  .kb{cursor:pointer}\n  @keyframes ringPulse{0%,100%{stroke-opacity:.9}50%{stroke-opacity:.12}}\n  .pulseRing{fill:none;stroke:#ffb43a;stroke-width:2.5;animation:ringPulse 1.8s ease-in-out infinite;pointer-events:none}\n  @keyframes hintPulse{0%,100%{opacity:.6}50%{opacity:1}}\n  .tryHint{display:flex;justify-content:center;margin:10px 0 0}\n  .tryHint span{display:inline-flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.08em;\n    text-transform:uppercase;color:#ffcf7d;border:1px solid rgba(255,180,58,.45);border-radius:999px;\n    padding:6px 14px;animation:hintPulse 2.4s ease-in-out infinite;background:rgba(255,180,58,.07)}\n  .tryHint .dotLive{width:7px;height:7px;border-radius:50%;background:#ffb43a;\n    box-shadow:0 0 7px 2px rgba(255,180,58,.7);flex:none}\n  footer{margin-top:12px;color:#59626e;font-size:11px;letter-spacing:.04em;\n    display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\u0026quot;wrap\u0026quot;\u0026gt;\n  \u0026lt;header\u0026gt;\n    \u0026lt;div class=\u0026quot;brand\u0026quot;\u0026gt;BLACK OAK \u0026lt;span\u0026gt;LED\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;sub\u0026quot;\u0026gt;Mini Low Pro\u0026amp;trade; Emergency Bar · Interactive Demo \u0026amp;bull; \u0026lt;span id=\u0026quot;sizeLabel\u0026quot;\u0026gt;17\u0026amp;Prime;\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;sizeBtns\u0026quot; id=\u0026quot;sizeBtns\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n  \u0026lt;\/header\u0026gt;\n\n  \u0026lt;div class=\u0026quot;stage\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;stageLabel\u0026quot; id=\u0026quot;patternLabel\u0026quot;\u0026gt;Pattern 1 · Split Steady Burn\u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;haloBadge\u0026quot; id=\u0026quot;haloBadge\u0026quot;\u0026gt;\u0026lt;i class=\u0026quot;dot\u0026quot;\u0026gt;\u0026lt;\/i\u0026gt;\n      \u0026lt;b\u0026gt;360\u0026amp;deg; Halo\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;\u0026amp;nbsp;scene light \u0026amp;middot; rocker down\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;svg id=\u0026quot;barSvg\u0026quot; viewBox=\u0026quot;0 0 1000 240\u0026quot; aria-label=\u0026quot;Light bar simulation\u0026quot;\u0026gt;\u0026lt;\/svg\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;tryHint\u0026quot; id=\u0026quot;tryHint\u0026quot;\u0026gt;\u0026lt;span\u0026gt;\u0026lt;i class=\u0026quot;dotLive\u0026quot;\u0026gt;\u0026lt;\/i\u0026gt;Live demo \u0026amp;middot; flip the rocker, press the button\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;lower\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;card cardColors\u0026quot; id=\u0026quot;colorCard\u0026quot;\u0026gt;\n      \u0026lt;h3\u0026gt;Select Colors\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\u0026quot;compactSel\u0026quot; id=\u0026quot;compactSel\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;cRow\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;\u0026lt;span\u0026gt;Color 1\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\u0026quot;swatches\u0026quot; id=\u0026quot;sw1\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;cRow\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;\u0026lt;span\u0026gt;Color 2 (dual color)\u0026lt;\/span\u0026gt;\n          \u0026lt;button class=\u0026quot;swapBtn\u0026quot; id=\u0026quot;swapBtn\u0026quot; title=\u0026quot;Swap Color 1 and Color 2\u0026quot;\u0026gt;\u0026amp;#8646; Swap\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div class=\u0026quot;swatches\u0026quot; id=\u0026quot;sw2\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hint\u0026quot; id=\u0026quot;colorHint\u0026quot;\u0026gt;\u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n    \u0026lt;div class=\u0026quot;card cardCtl\u0026quot;\u0026gt;\n      \u0026lt;h3\u0026gt;Socket Controller · flip the rocker \u0026amp;middot; press the button\u0026lt;\/h3\u0026gt;\n      \u0026lt;div class=\u0026quot;ctlWrap\u0026quot;\u0026gt;\n        \u0026lt;svg id=\u0026quot;ctl\u0026quot; viewBox=\u0026quot;0 0 300 300\u0026quot; aria-label=\u0026quot;Socket plug controller\u0026quot;\u0026gt;\u0026lt;\/svg\u0026gt;\n      \u0026lt;\/div\u0026gt;\n      \u0026lt;div class=\u0026quot;legend\u0026quot;\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;Button\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;Next flash pattern\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;I\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;Warning flash patterns\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;O\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;Off\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n        \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;II\u0026lt;\/b\u0026gt;\u0026lt;span\u0026gt;360\u0026amp;deg; Halo scene light\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n      \u0026lt;\/div\u0026gt;\n    \u0026lt;\/div\u0026gt;\n  \u0026lt;\/div\u0026gt;\n\n  \u0026lt;footer\u0026gt;\n    \u0026lt;div\u0026gt;BLACK OAK LED · Navigate the Night.\u0026lt;\/div\u0026gt;\n    \u0026lt;div\u0026gt;Designed and engineered in Sarasota, Florida\u0026lt;\/div\u0026gt;\n  \u0026lt;\/footer\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\u0026quot;use strict\u0026quot;;\nconst LEDCOLORS = {\n  amber:{main:\u0026quot;#ffb43a\u0026quot;, core:\u0026quot;#ffe9b0\u0026quot;, glow:\u0026quot;#ff9d00\u0026quot;, label:\u0026quot;Amber\u0026quot;},\n  white:{main:\u0026quot;#F4F8FF\u0026quot;, core:\u0026quot;#ffffff\u0026quot;, glow:\u0026quot;#cfe4ff\u0026quot;, label:\u0026quot;White\u0026quot;},\n  red:  {main:\u0026quot;#ff2d23\u0026quot;, core:\u0026quot;#ffb0a8\u0026quot;, glow:\u0026quot;#ff1400\u0026quot;, label:\u0026quot;Red\u0026quot;},\n  blue: {main:\u0026quot;#2a62ff\u0026quot;, core:\u0026quot;#b8ccff\u0026quot;, glow:\u0026quot;#0040ff\u0026quot;, label:\u0026quot;Blue\u0026quot;},\n  green:{main:\u0026quot;#19d949\u0026quot;, core:\u0026quot;#c2ffcf\u0026quot;, glow:\u0026quot;#00c832\u0026quot;, label:\u0026quot;Green\u0026quot;}\n};\n\n\/* Catalog per size, straight from the product pages.\n   singles: colors sold alone. duals: exact combos sold. *\/\nconst SIZES = {\n  \u0026quot;11\u0026quot;: {\n    label:\u0026quot;11\u0026amp;Prime;\u0026quot;, front:4, span:290, x0:355,\n    singles:[], duals:[[\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;]],\n    note:\u0026quot;The 11\u0026amp;Prime; Mini ships in Amber \u0026amp;amp; White.\u0026quot;\n  },\n  \u0026quot;17\u0026quot;: {\n    label:\u0026quot;17\u0026amp;Prime;\u0026quot;, front:4, span:390, x0:305,\n    singles:[\u0026quot;amber\u0026quot;,\u0026quot;blue\u0026quot;,\u0026quot;green\u0026quot;,\u0026quot;red\u0026quot;,\u0026quot;white\u0026quot;],\n    duals:[[\u0026quot;amber\u0026quot;,\u0026quot;blue\u0026quot;],[\u0026quot;amber\u0026quot;,\u0026quot;green\u0026quot;],[\u0026quot;amber\u0026quot;,\u0026quot;red\u0026quot;],[\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;],[\u0026quot;red\u0026quot;,\u0026quot;blue\u0026quot;],[\u0026quot;red\u0026quot;,\u0026quot;white\u0026quot;]],\n    note:\u0026quot;Every combo shown here is orderable on the 17\u0026amp;Prime; bar.\u0026quot;\n  }\n};\nlet SIZE = \u0026quot;11\u0026quot;;\n\nconst S = {\n  color1:\u0026quot;amber\u0026quot;, color2:\u0026quot;white\u0026quot;,\n  rocker:\u0026quot;up\u0026quot;,            \/\/ up = warning LEDs, mid = off, down = white halo\n  pattern:1\n};\n\nconst NS=\u0026quot;http:\/\/www.w3.org\/2000\/svg\u0026quot;;\nconst bar = document.getElementById(\u0026quot;barSvg\u0026quot;);\nlet modules = [];\nfunction el(name, attrs, parent){\n  const e=document.createElementNS(NS,name);\n  for(const k in attrs) e.setAttribute(k,attrs[k]);\n  if(parent) parent.appendChild(e);\n  return e;\n}\n\nfunction buildBar(){\n  bar.innerHTML=\u0026quot;\u0026quot;; modules=[];\n  const cfg=SIZES[SIZE];\n  const defs = el(\u0026quot;defs\u0026quot;,{},bar);\n  (()=\u0026gt;{ const f=el(\u0026quot;filter\u0026quot;,{id:\u0026quot;ledGlow\u0026quot;, x:\u0026quot;-80%\u0026quot;,y:\u0026quot;-80%\u0026quot;,width:\u0026quot;260%\u0026quot;,height:\u0026quot;260%\u0026quot;},defs);\n    el(\u0026quot;feGaussianBlur\u0026quot;,{stdDeviation:4, result:\u0026quot;b\u0026quot;},f);\n    const m=el(\u0026quot;feMerge\u0026quot;,{},f);\n    el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;b\u0026quot;},m); el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;SourceGraphic\u0026quot;},m); })();\n  (()=\u0026gt;{ const f=el(\u0026quot;filter\u0026quot;,{id:\u0026quot;haloGlow\u0026quot;, filterUnits:\u0026quot;userSpaceOnUse\u0026quot;,\n      x:\u0026quot;-120\u0026quot;,y:\u0026quot;-160\u0026quot;,width:\u0026quot;1240\u0026quot;,height:\u0026quot;560\u0026quot;},defs);\n    el(\u0026quot;feGaussianBlur\u0026quot;,{stdDeviation:11, result:\u0026quot;b\u0026quot;},f);\n    const m=el(\u0026quot;feMerge\u0026quot;,{},f);\n    el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;b\u0026quot;},m); el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;SourceGraphic\u0026quot;},m); })();\n\n  const L=cfg.x0, R=cfg.x0+cfg.span, cL=L-75, cR=R+75;\n  const G = el(\u0026quot;g\u0026quot;,{},bar);\n  const haloLayer = el(\u0026quot;g\u0026quot;,{},G);\n  const sidePaths = {\n    front:`M ${L},62 L ${R},62`,\n    back: `M ${L},178 L ${R},178`,\n    left: `M ${L},62 L ${cL},95 L ${cL},145 L ${L},178`,\n    right:`M ${R},62 L ${cR},95 L ${cR},145 L ${R},178`\n  };\n  const haloEls={};\n  for(const z in sidePaths){\n    const g=el(\u0026quot;g\u0026quot;,{filter:\u0026quot;url(#haloGlow)\u0026quot;},haloLayer);\n    [[10,.9],[26,.4],[52,.16],[88,.07]].forEach(([wd,op])=\u0026gt;{\n      el(\u0026quot;path\u0026quot;,{d:sidePaths[z], stroke:\u0026quot;#eef4ff\u0026quot;,\u0026quot;stroke-width\u0026quot;:wd,\u0026quot;stroke-opacity\u0026quot;:op,\n        fill:\u0026quot;none\u0026quot;,\u0026quot;stroke-linecap\u0026quot;:\u0026quot;round\u0026quot;,\u0026quot;stroke-linejoin\u0026quot;:\u0026quot;round\u0026quot;},g);\n    });\n    g.setAttribute(\u0026quot;visibility\u0026quot;,\u0026quot;hidden\u0026quot;);\n    haloEls[z]=g;\n  }\n  S._haloEls=haloEls;\n\n  el(\u0026quot;polygon\u0026quot;,{points:`${L},62 ${R},62 ${cR},95 ${cR},145 ${R},178 ${L},178 ${cL},145 ${cL},95`,\n    fill:\u0026quot;#15181d\u0026quot;, stroke:\u0026quot;#3a4149\u0026quot;,\u0026quot;stroke-width\u0026quot;:3},G);\n  el(\u0026quot;polygon\u0026quot;,{points:`${L+8},70 ${R-8},70 ${cR-12},99 ${cR-12},141 ${R-8},170 ${L+8},170 ${cL+12},141 ${cL+12},99`,\n    fill:\u0026quot;#0e1114\u0026quot;, stroke:\u0026quot;#22272e\u0026quot;,\u0026quot;stroke-width\u0026quot;:1},G);\n  el(\u0026quot;text\u0026quot;,{x:500,y:114,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#c9d0d9\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;17\u0026quot;,\n    \u0026quot;font-weight\u0026quot;:\u0026quot;800\u0026quot;,\u0026quot;letter-spacing\u0026quot;:\u0026quot;4\u0026quot;,\u0026quot;font-family\u0026quot;:\u0026quot;inherit\u0026quot;},G).textContent=\u0026quot;BLACK OAK\u0026quot;;\n  el(\u0026quot;text\u0026quot;,{x:500,y:130,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#4c545e\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;8\u0026quot;,\n    \u0026quot;letter-spacing\u0026quot;:\u0026quot;2\u0026quot;},G).textContent=\u0026quot;SAE W3-1 22\u0026quot;;\n\n  const ledLayer = el(\u0026quot;g\u0026quot;,{},G);\n  const N=cfg.front, h=12, gap=6;\n  const w = cfg.span\/N - gap;\n  const addMod=(zone,x,y)=\u0026gt;{\n    const g=el(\u0026quot;g\u0026quot;,{},ledLayer);\n    const lens=el(\u0026quot;rect\u0026quot;,{x,y,width:w,height:h,rx:4, fill:\u0026quot;#23282f\u0026quot;, stroke:\u0026quot;#10131a\u0026quot;,\u0026quot;stroke-width\u0026quot;:1},g);\n    const halo=el(\u0026quot;rect\u0026quot;,{x:x-6,y:y-6,width:w+12,height:h+12,rx:9, fill:\u0026quot;none\u0026quot;,opacity:0, filter:\u0026quot;url(#ledGlow)\u0026quot;},g);\n    modules.push({zone, lens, halo, px:x+w\/2});\n  };\n  const addRot=(zone,cx,cy,len,rot)=\u0026gt;{\n    const g=el(\u0026quot;g\u0026quot;,{transform:`rotate(${rot} ${cx} ${cy})`},ledLayer);\n    const lens=el(\u0026quot;rect\u0026quot;,{x:cx-len\/2,y:cy-h\/2,width:len,height:h,rx:4,\n      fill:\u0026quot;#23282f\u0026quot;,stroke:\u0026quot;#10131a\u0026quot;,\u0026quot;stroke-width\u0026quot;:1},g);\n    const halo=el(\u0026quot;rect\u0026quot;,{x:cx-len\/2-6,y:cy-h\/2-6,width:len+12,height:h+12,rx:9,\n      fill:\u0026quot;none\u0026quot;,opacity:0,filter:\u0026quot;url(#ledGlow)\u0026quot;},g);\n    modules.push({zone,lens,halo,px:cx});\n  };\n  for(let i=0;i\u0026lt;N;i++){ addMod(\u0026quot;front\u0026quot;, L+5+i*(cfg.span\/N), 52); }\n  addRot(\u0026quot;right\u0026quot;,R+34,73,64,23.7);\n  addRot(\u0026quot;right\u0026quot;,cR-4,120,44,90);\n  addRot(\u0026quot;right\u0026quot;,R+34,167,64,-23.7);\n  for(let i=N-1;i\u0026gt;=0;i--){ addMod(\u0026quot;back\u0026quot;, L+5+i*(cfg.span\/N), 176); }\n  addRot(\u0026quot;left\u0026quot;,L-34,167,64,23.7);\n  addRot(\u0026quot;left\u0026quot;,cL+4,120,44,90);\n  addRot(\u0026quot;left\u0026quot;,L-34,73,64,-23.7);\n\n  const pxs=modules.map(m=\u0026gt;m.px);\n  S._pxmin=Math.min(...pxs); S._pxmax=Math.max(...pxs);\n  const mid=(S._pxmin+S._pxmax)\/2;\n  modules.forEach(m=\u0026gt;{ m.side = m.px\u0026lt;=mid ? \u0026quot;L\u0026quot;:\u0026quot;R\u0026quot;; m.p=(m.px-S._pxmin)\/(S._pxmax-S._pxmin); });\n}\n\n\/* ---- Pattern engine. Timings measured frame-by-frame from the 17\u0026quot; socket-controller video. ---- *\/\nfunction ph(t,cyc){ return t % cyc; }\nconst PATTERNS = [\n  {name:\u0026quot;Split Steady Burn\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{           \/\/ video 11.5-16s \/ 26-37s \/ 95s-end\n    return {color: m.side===\u0026quot;L\u0026quot;?c1:c2, k:.85};\n  }},\n  {name:\u0026quot;Alternating Single Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{     \/\/ video 37-42s: A 170ms, off 230, W 200, off 240\n    const p=ph(t,840);\n    if(p\u0026lt;170) return {color:c1,k:1};\n    if(p\u0026gt;=400\u0026amp;\u0026amp;p\u0026lt;600) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Split Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{                  \/\/ video 42.5-45.8s: halves flash together, 200 on \/ 270 off\n    const p=ph(t,470);\n    if(p\u0026lt;200) return {color: m.side===\u0026quot;L\u0026quot;?c2:c1, k:1};\n    return null;\n  }},\n  {name:\u0026quot;Alternating Double Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{     \/\/ video 45.9-49s\n    const p=ph(t,1470);\n    if(p\u0026lt;130||(p\u0026gt;=200\u0026amp;\u0026amp;p\u0026lt;330)) return {color:c1,k:1};\n    if((p\u0026gt;=730\u0026amp;\u0026amp;p\u0026lt;860)||(p\u0026gt;=930\u0026amp;\u0026amp;p\u0026lt;1060)) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Slow Alternating Flash\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{       \/\/ video 49-52s: 430 on \/ 370 off each color\n    const p=ph(t,1600);\n    if(p\u0026lt;430) return {color:c1,k:1};\n    if(p\u0026gt;=800\u0026amp;\u0026amp;p\u0026lt;1230) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Double Flash + Steady\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{        \/\/ video 52.2-55.9s: C1 double pulse, C2 400ms burn\n    const p=ph(t,1300);\n    if(p\u0026lt;200||(p\u0026gt;=270\u0026amp;\u0026amp;p\u0026lt;470)) return {color:c1,k:1};\n    if(p\u0026gt;=600\u0026amp;\u0026amp;p\u0026lt;1000) return {color:c2,k:.85};\n    return null;\n  }},\n  {name:\u0026quot;Half Ping-Pong\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{               \/\/ video 56-63s: L C1, R C1, L C2, R C2\n    const p=ph(t,1600), seg=Math.floor(p\/400), local=p%400;\n    if(local\u0026gt;=270) return null;\n    const col = seg\u0026lt;2?c1:c2, side = (seg%2===0)?\u0026quot;L\u0026quot;:\u0026quot;R\u0026quot;;\n    return m.side===side ? {color:col,k:1} : null;\n  }},\n  {name:\u0026quot;Dual Rotation\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{                \/\/ video 63-70.4s: opposite ends counter-chasing\n    const p=ph(t,1400)\/1400;\n    const d1=Math.abs(m.p-p), d2=Math.abs(m.p-((p+.5)%1));\n    if(Math.min(d1,1-d1)\u0026lt;.18) return {color:c1,k:1};\n    if(Math.min(d2,1-d2)\u0026lt;.18) return {color:c2,k:1};\n    return null;\n  }},\n  {name:\u0026quot;Steady + Flash Combo\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{         \/\/ video 70.4-77.5s: one half steady, other flashes; swaps\n    const swap=Math.floor(t\/3500)%2===1;\n    const steadySide = swap?\u0026quot;R\u0026quot;:\u0026quot;L\u0026quot;;\n    if(m.side===steadySide) return {color: swap?c2:c1, k:.8};\n    const p=ph(t,730);\n    if(p\u0026lt;330) return {color: swap?c1:c2, k:1};\n    return null;\n  }},\n  {name:\u0026quot;End-to-End Sweep\u0026quot;, f:(m,t,c1,c2)=\u0026gt;{             \/\/ video 77.6-85.9s: C1 builds across, then C2\n    const cyc=1700, p=ph(t,cyc), half=cyc\/2;\n    const dirFlip=Math.floor(t\/cyc)%2===1;\n    const local=p%half, col=p\u0026lt;half?c1:c2;\n    let b;\n    if(local\u0026lt;500) b=local\/500; else if(local\u0026lt;700) b=1; else return null;\n    const pos=dirFlip?1-m.p:m.p;\n    return pos\u0026lt;=b+.002 ? {color:col,k:1} : null;\n  }}\n];\n\nfunction activeColors(){\n  const c1=S.color1, c2=S.color2||S.color1;\n  return [c1,c2];\n}\n\nlet lastLabel=\u0026quot;\u0026quot;;\nfunction render(t){\n  const halo = S.rocker===\u0026quot;down\u0026quot;;\n  const on = S.rocker===\u0026quot;up\u0026quot;;\n  const [c1,c2]=activeColors();\n  const P=PATTERNS[S.pattern-1];\n  for(const m of modules){\n    let st=null;\n    if(on) st=P.f(m,t,c1,c2);\n    else if(halo) st={color:\u0026quot;white\u0026quot;,k:.9};\n    m.cur=st;\n    if(st){ m.lastT=t; m.lastC=st.color; m.lastK=st.k; }\n    let drawC=null, drawK=0;\n    if(st){ drawC=st.color; drawK=st.k; }\n    else if(m.lastC \u0026amp;\u0026amp; (t-m.lastT)\u0026lt;70){ drawC=m.lastC; drawK=m.lastK*(1-(t-m.lastT)\/70)*.7; }\n    if(drawC){\n      const c=LEDCOLORS[drawC];\n      m.lens.setAttribute(\u0026quot;fill\u0026quot;, drawK\u0026gt;.55? c.core : c.main);\n      m.lens.setAttribute(\u0026quot;stroke\u0026quot;, c.main);\n      m.halo.setAttribute(\u0026quot;fill\u0026quot;, c.glow);\n      m.halo.setAttribute(\u0026quot;opacity\u0026quot;, (0.85*drawK).toFixed(2));\n    }else{\n      m.lens.setAttribute(\u0026quot;fill\u0026quot;,\u0026quot;#23282f\u0026quot;);\n      m.lens.setAttribute(\u0026quot;stroke\u0026quot;,\u0026quot;#10131a\u0026quot;);\n      m.halo.setAttribute(\u0026quot;opacity\u0026quot;,\u0026quot;0\u0026quot;);\n    }\n  }\n  for(const z in S._haloEls) S._haloEls[z].setAttribute(\u0026quot;visibility\u0026quot;, halo?\u0026quot;visible\u0026quot;:\u0026quot;hidden\u0026quot;);\n  const lbl = S.rocker===\u0026quot;mid\u0026quot; ? \u0026quot;Rocker centered · Off\u0026quot;\n    : S.rocker===\u0026quot;down\u0026quot; ? \u0026quot;360° Halo Scene Light · steady white\u0026quot;\n    : tourActive ? \u0026quot;Live demo · try the controller\u0026quot;\n    : `Pattern ${S.pattern} · ${P.name}`;\n  if(lbl!==lastLabel){ lastLabel=lbl; document.getElementById(\u0026quot;patternLabel\u0026quot;).textContent=lbl; }\n  document.getElementById(\u0026quot;haloBadge\u0026quot;).style.display = halo ? \u0026quot;flex\u0026quot;:\u0026quot;none\u0026quot;;\n  requestAnimationFrame(render);\n}\n\n\/* ---------------- Socket controller (replica of the plug in the video) ---------------- *\/\nconst ctl=document.getElementById(\u0026quot;ctl\u0026quot;);\nlet rockerParts={}, patternBtnG=null;\nfunction buildController(){\n  ctl.innerHTML=\u0026quot;\u0026quot;;\n  const defs=el(\u0026quot;defs\u0026quot;,{},ctl);\n  (()=\u0026gt;{ const f=el(\u0026quot;filter\u0026quot;,{id:\u0026quot;btnGlow\u0026quot;,x:\u0026quot;-40%\u0026quot;,y:\u0026quot;-40%\u0026quot;,width:\u0026quot;180%\u0026quot;,height:\u0026quot;180%\u0026quot;},defs);\n    el(\u0026quot;feGaussianBlur\u0026quot;,{stdDeviation:\u0026quot;2.2\u0026quot;,result:\u0026quot;b\u0026quot;},f);\n    const m=el(\u0026quot;feMerge\u0026quot;,{},f);\n    el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;b\u0026quot;},m); el(\u0026quot;feMergeNode\u0026quot;,{in:\u0026quot;SourceGraphic\u0026quot;},m); })();\n  const lg=el(\u0026quot;linearGradient\u0026quot;,{id:\u0026quot;plugBody\u0026quot;,x1:\u0026quot;0\u0026quot;,y1:\u0026quot;0\u0026quot;,x2:\u0026quot;0\u0026quot;,y2:\u0026quot;1\u0026quot;},defs);\n  el(\u0026quot;stop\u0026quot;,{offset:\u0026quot;0\u0026quot;,\u0026quot;stop-color\u0026quot;:\u0026quot;#2a2f37\u0026quot;},lg);\n  el(\u0026quot;stop\u0026quot;,{offset:\u0026quot;.5\u0026quot;,\u0026quot;stop-color\u0026quot;:\u0026quot;#171a1f\u0026quot;},lg);\n  el(\u0026quot;stop\u0026quot;,{offset:\u0026quot;1\u0026quot;,\u0026quot;stop-color\u0026quot;:\u0026quot;#0d0f12\u0026quot;},lg);\n\n  \/* socket base (the 12V outlet it plugs into) *\/\n  el(\u0026quot;ellipse\u0026quot;,{cx:150,cy:262,rx:118,ry:26,fill:\u0026quot;#0b0d10\u0026quot;,stroke:\u0026quot;#242a33\u0026quot;},ctl);\n  el(\u0026quot;ellipse\u0026quot;,{cx:150,cy:256,rx:100,ry:20,fill:\u0026quot;#10131a\u0026quot;,stroke:\u0026quot;#2b333d\u0026quot;},ctl);\n  el(\u0026quot;ellipse\u0026quot;,{cx:150,cy:254,rx:74,ry:14,fill:\u0026quot;none\u0026quot;,stroke:\u0026quot;#2a62ff\u0026quot;,\u0026quot;stroke-opacity\u0026quot;:\u0026quot;.55\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;3\u0026quot;,filter:\u0026quot;url(#btnGlow)\u0026quot;},ctl);\n\n  \/* plug barrel *\/\n  el(\u0026quot;rect\u0026quot;,{x:116,y:196,width:68,height:62,rx:14,fill:\u0026quot;url(#plugBody)\u0026quot;,stroke:\u0026quot;#000\u0026quot;},ctl);\n\n  \/* controller head *\/\n  el(\u0026quot;rect\u0026quot;,{x:70,y:26,width:160,height:184,rx:26,fill:\u0026quot;url(#plugBody)\u0026quot;,stroke:\u0026quot;#000\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;2\u0026quot;},ctl);\n  el(\u0026quot;rect\u0026quot;,{x:78,y:34,width:144,height:168,rx:20,fill:\u0026quot;none\u0026quot;,stroke:\u0026quot;#2c333d\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;1.2\u0026quot;},ctl);\n\n  \/* pattern button on top *\/\n  const pb=el(\u0026quot;g\u0026quot;,{class:\u0026quot;kb\u0026quot;,role:\u0026quot;button\u0026quot;,tabindex:\u0026quot;0\u0026quot;,\u0026quot;aria-label\u0026quot;:\u0026quot;Cycle flash pattern\u0026quot;},ctl);\n  el(\u0026quot;circle\u0026quot;,{cx:150,cy:58,r:20,fill:\u0026quot;#101318\u0026quot;,stroke:\u0026quot;#000\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;2\u0026quot;},pb);\n  const pbFace=el(\u0026quot;circle\u0026quot;,{cx:150,cy:58,r:14,fill:\u0026quot;#22262d\u0026quot;,stroke:\u0026quot;#3a414b\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;1.5\u0026quot;},pb);\n  el(\u0026quot;text\u0026quot;,{x:150,y:92,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#8a94a3\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;10\u0026quot;,\u0026quot;letter-spacing\u0026quot;:\u0026quot;1.5\u0026quot;,\u0026quot;font-weight\u0026quot;:\u0026quot;700\u0026quot;},pb).textContent=\u0026quot;PATTERN\u0026quot;;\n  pb.addEventListener(\u0026quot;click\u0026quot;,()=\u0026gt;press(\u0026quot;pattern\u0026quot;));\n  pb.addEventListener(\u0026quot;keydown\u0026quot;,e=\u0026gt;{if(e.key===\u0026quot;Enter\u0026quot;||e.key===\u0026quot; \u0026quot;){e.preventDefault();press(\u0026quot;pattern\u0026quot;);}});\n  patternBtnG={g:pb,face:pbFace};\n  S._ring=el(\u0026quot;circle\u0026quot;,{cx:150,cy:58,r:24,class:\u0026quot;pulseRing\u0026quot;},ctl);\n\n  \/* 3-position rocker *\/\n  const rx=150, ry=150, rw=56, rh=92;\n  el(\u0026quot;rect\u0026quot;,{x:rx-rw\/2-7,y:ry-rh\/2-7,width:rw+14,height:rh+14,rx:12,fill:\u0026quot;#0c0e12\u0026quot;,stroke:\u0026quot;#000\u0026quot;},ctl);\n  const zones=[\n    {pos:\u0026quot;up\u0026quot;,   y:ry-rh\/2,      lab:\u0026quot;I\u0026quot;},\n    {pos:\u0026quot;mid\u0026quot;,  y:ry-rh\/6,      lab:\u0026quot;O\u0026quot;},\n    {pos:\u0026quot;down\u0026quot;, y:ry+rh\/6,      lab:\u0026quot;II\u0026quot;}\n  ];\n  rockerParts={};\n  zones.forEach(z=\u0026gt;{\n    const g=el(\u0026quot;g\u0026quot;,{class:\u0026quot;kb\u0026quot;,role:\u0026quot;button\u0026quot;,tabindex:\u0026quot;0\u0026quot;,\u0026quot;aria-label\u0026quot;:\u0026quot;Rocker \u0026quot;+z.pos},ctl);\n    const r=el(\u0026quot;rect\u0026quot;,{x:rx-rw\/2,y:z.y,width:rw,height:rh\/3,fill:\u0026quot;#1b1f26\u0026quot;,stroke:\u0026quot;#31383f\u0026quot;,\u0026quot;stroke-width\u0026quot;:\u0026quot;1\u0026quot;},g);\n    const tx=el(\u0026quot;text\u0026quot;,{x:rx,y:z.y+rh\/6+4,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;,fill:\u0026quot;#9aa4b2\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;13\u0026quot;,\u0026quot;font-weight\u0026quot;:\u0026quot;700\u0026quot;},g);\n    tx.textContent=z.lab;\n    g.addEventListener(\u0026quot;click\u0026quot;,()=\u0026gt;press(\u0026quot;rocker_\u0026quot;+z.pos));\n    g.addEventListener(\u0026quot;keydown\u0026quot;,e=\u0026gt;{if(e.key===\u0026quot;Enter\u0026quot;||e.key===\u0026quot; \u0026quot;){e.preventDefault();press(\u0026quot;rocker_\u0026quot;+z.pos);}});\n    rockerParts[z.pos]={rect:r,text:tx};\n  });\n\n  el(\u0026quot;text\u0026quot;,{x:150,y:288,fill:\u0026quot;#59636f\u0026quot;,\u0026quot;font-size\u0026quot;:\u0026quot;10\u0026quot;,\u0026quot;letter-spacing\u0026quot;:\u0026quot;1.5\u0026quot;,\u0026quot;text-anchor\u0026quot;:\u0026quot;middle\u0026quot;},ctl).textContent=\u0026quot;12V SOCKET\u0026quot;;\n  syncRocker();\n}\nfunction syncRocker(){\n  for(const pos in rockerParts){\n    const on = S.rocker===pos;\n    rockerParts[pos].rect.setAttribute(\u0026quot;fill\u0026quot;, on? (pos===\u0026quot;mid\u0026quot;?\u0026quot;#3a414b\u0026quot;:\u0026quot;#dfe7f5\u0026quot;) : \u0026quot;#1b1f26\u0026quot;);\n    rockerParts[pos].text.setAttribute(\u0026quot;fill\u0026quot;, on? \u0026quot;#12151a\u0026quot; : \u0026quot;#9aa4b2\u0026quot;);\n    if(on) rockerParts[pos].rect.setAttribute(\u0026quot;filter\u0026quot;,\u0026quot;url(#btnGlow)\u0026quot;);\n    else rockerParts[pos].rect.removeAttribute(\u0026quot;filter\u0026quot;);\n  }\n}\nfunction press(key){\n  markInteract();\n  if(key===\u0026quot;pattern\u0026quot;){\n    if(S.rocker!==\u0026quot;up\u0026quot;){ S.rocker=\u0026quot;up\u0026quot;; }   \/\/ like the hardware: button only matters with rocker up\n    else S.pattern = S.pattern % PATTERNS.length + 1;\n    patternBtnG.face.setAttribute(\u0026quot;fill\u0026quot;,\u0026quot;#aab6c9\u0026quot;);\n    setTimeout(()=\u0026gt;patternBtnG.face.setAttribute(\u0026quot;fill\u0026quot;,\u0026quot;#22262d\u0026quot;),140);\n  }\n  if(key===\u0026quot;rocker_up\u0026quot;) S.rocker=\u0026quot;up\u0026quot;;\n  if(key===\u0026quot;rocker_mid\u0026quot;) S.rocker=\u0026quot;mid\u0026quot;;\n  if(key===\u0026quot;rocker_down\u0026quot;) S.rocker=\u0026quot;down\u0026quot;;\n  syncRocker();\n}\n\n\/* ---------------- Color selection, constrained to the catalog ---------------- *\/\nfunction catalog(){ return SIZES[SIZE]; }\nfunction validC2(c1){\n  const c=catalog(); const out=[];\n  c.duals.forEach(([a,b])=\u0026gt;{ if(a===c1) out.push(b); else if(b===c1) out.push(a); });\n  return out;\n}\nfunction allC1(){\n  const c=catalog(); const set=new Set(c.singles);\n  c.duals.forEach(([a,b])=\u0026gt;{set.add(a);set.add(b);});\n  return [\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;,\u0026quot;red\u0026quot;,\u0026quot;blue\u0026quot;,\u0026quot;green\u0026quot;].filter(x=\u0026gt;set.has(x));\n}\nfunction buildCompact(){\n  const c=document.getElementById(\u0026quot;compactSel\u0026quot;);\n  c.innerHTML=\u0026quot;\u0026quot;;\n  const mk=(col)=\u0026gt;{ const d=document.createElement(\u0026quot;div\u0026quot;); d.className=\u0026quot;sw\u0026quot;;\n    d.style.background=LEDCOLORS[col].main; d.title=LEDCOLORS[col].label; return d; };\n  const lab=document.createElement(\u0026quot;span\u0026quot;);\n  lab.style.cssText=\u0026quot;font-size:12px;color:#8a94a3\u0026quot;;\n  lab.textContent=\u0026quot;Your colors:\u0026quot;;\n  c.appendChild(lab);\n  c.appendChild(mk(S.color1));\n  if(S.color2) c.appendChild(mk(S.color2));\n  const btn=document.createElement(\u0026quot;button\u0026quot;);\n  btn.className=\u0026quot;swapBtn\u0026quot;;\n  const card=document.getElementById(\u0026quot;colorCard\u0026quot;);\n  btn.textContent = card.classList.contains(\u0026quot;expanded\u0026quot;) ? \u0026quot;Done\u0026quot; : \u0026quot;Change colors\u0026quot;;\n  btn.onclick=()=\u0026gt;{ card.classList.toggle(\u0026quot;expanded\u0026quot;); buildCompact(); };\n  c.appendChild(btn);\n}\nfunction buildSwatches(){\n  buildCompact();\n  const s1=document.getElementById(\u0026quot;sw1\u0026quot;), s2=document.getElementById(\u0026quot;sw2\u0026quot;);\n  s1.innerHTML=\u0026quot;\u0026quot;; s2.innerHTML=\u0026quot;\u0026quot;;\n  const c=catalog();\n  for(const col of allC1()){\n    const d=document.createElement(\u0026quot;div\u0026quot;);\n    d.className=\u0026quot;sw\u0026quot;+(S.color1===col?\u0026quot; sel\u0026quot;:\u0026quot;\u0026quot;);\n    d.style.background=LEDCOLORS[col].main; d.title=LEDCOLORS[col].label;\n    d.onclick=()=\u0026gt;{\n      S.color1=col;\n      const v=validC2(col);\n      if(S.color2 \u0026amp;\u0026amp; !v.includes(S.color2)) S.color2 = v.length? v[0] : null;\n      if(!S.color2 \u0026amp;\u0026amp; !c.singles.includes(col) \u0026amp;\u0026amp; v.length) S.color2=v[0];\n      buildSwatches();\n    };\n    s1.appendChild(d);\n  }\n  const v=validC2(S.color1);\n  if(c.singles.includes(S.color1)){\n    const none=document.createElement(\u0026quot;div\u0026quot;);\n    none.className=\u0026quot;sw none\u0026quot;+(S.color2===null?\u0026quot; sel\u0026quot;:\u0026quot;\u0026quot;);\n    none.title=\u0026quot;Single color\u0026quot;; none.onclick=()=\u0026gt;{S.color2=null; buildSwatches();};\n    s2.appendChild(none);\n  }\n  for(const col of [\u0026quot;amber\u0026quot;,\u0026quot;white\u0026quot;,\u0026quot;red\u0026quot;,\u0026quot;blue\u0026quot;,\u0026quot;green\u0026quot;]){\n    if(col===S.color1) continue;\n    const ok=v.includes(col);\n    const d=document.createElement(\u0026quot;div\u0026quot;);\n    d.className=\u0026quot;sw\u0026quot;+(S.color2===col?\u0026quot; sel\u0026quot;:\u0026quot;\u0026quot;)+(ok?\u0026quot;\u0026quot;:\u0026quot; dis\u0026quot;);\n    d.style.background=LEDCOLORS[col].main;\n    d.title=ok? LEDCOLORS[col].label : \u0026quot;Not offered with \u0026quot;+LEDCOLORS[S.color1].label+\u0026quot; on this size\u0026quot;;\n    if(ok) d.onclick=()=\u0026gt;{ S.color2=col; buildSwatches(); };\n    s2.appendChild(d);\n  }\n  document.getElementById(\u0026quot;colorHint\u0026quot;).innerHTML =\n    catalog().note + \u0026quot; Rocker \u0026lt;b\u0026gt;up\u0026lt;\/b\u0026gt; runs the warning patterns and the button steps through them, \u0026quot; +\n    \u0026quot;exactly like the switch built into the socket plug. Rocker \u0026lt;b\u0026gt;down\u0026lt;\/b\u0026gt; is the \u0026lt;b\u0026gt;360\u0026amp;deg; Halo scene light\u0026lt;\/b\u0026gt;: \u0026quot; +\n    \u0026quot;steady white work light, a Low Pro exclusive.\u0026quot;;\n}\ndocument.getElementById(\u0026quot;swapBtn\u0026quot;).onclick=()=\u0026gt;{\n  if(!S.color2) return;\n  const a=S.color1,b=S.color2;\n  const c=catalog();\n  const ok=c.duals.some(([x,y])=\u0026gt;(x===b\u0026amp;\u0026amp;y===a)||(x===a\u0026amp;\u0026amp;y===b));\n  if(ok){ S.color1=b; S.color2=a; buildSwatches(); }\n};\n\n\/* ---------------- Size selector (prototype only; each product page pins its size) ---------------- *\/\nfunction buildSizeBtns(){\n  const holder=document.getElementById(\u0026quot;sizeBtns\u0026quot;);\n  holder.innerHTML=\u0026quot;\u0026quot;;\n  for(const s in SIZES){\n    const b=document.createElement(\u0026quot;button\u0026quot;);\n    b.textContent=s+'\u0026quot;'; b.className=SIZE===s?\u0026quot;on\u0026quot;:\u0026quot;\u0026quot;;\n    b.onclick=()=\u0026gt;{ SIZE=s; applySize(); };\n    holder.appendChild(b);\n  }\n}\nfunction applySize(){\n  document.getElementById(\u0026quot;sizeLabel\u0026quot;).innerHTML=SIZES[SIZE].label;\n  const c=catalog();\n  \/* prefer amber\/white, the house default, when the size offers it *\/\n  const pref=c.duals.find(([a,b])=\u0026gt;(a===\u0026quot;amber\u0026quot;\u0026amp;\u0026amp;b===\u0026quot;white\u0026quot;)||(a===\u0026quot;white\u0026quot;\u0026amp;\u0026amp;b===\u0026quot;amber\u0026quot;));\n  const firstDual=pref||c.duals[0];\n  S.color1=firstDual?\u0026quot;amber\u0026quot;:(c.singles[0]||\u0026quot;amber\u0026quot;);\n  if(firstDual\u0026amp;\u0026amp;!firstDual.includes(\u0026quot;amber\u0026quot;)) S.color1=firstDual[0];\n  S.color2=firstDual?(firstDual.find(x=\u0026gt;x!==S.color1)||null):null;\n  S.pattern=1;\n  buildBar(); buildSwatches(); buildSizeBtns();\n}\n\n\/* ---------------- Attract mode ---------------- *\/\nlet interacted=false, idleTimer=null, tourTimer=null, tourActive=false;\nfunction markInteract(){\n  if(interacted) return;\n  interacted=true;\n  if(tourActive){ tourActive=false; S.pattern=1; }\n  clearTimeout(tourTimer); clearTimeout(idleTimer);\n  const h=document.getElementById(\u0026quot;tryHint\u0026quot;);\n  if(h){ h.style.transition=\u0026quot;opacity .5s\u0026quot;; h.style.opacity=\u0026quot;0\u0026quot;; setTimeout(()=\u0026gt;h.remove(),600); }\n  if(S._ring) S._ring.remove();\n}\nfunction attractSweep(){\n  if(interacted||tourActive) return;\n  tourActive=true;\n  const prev=S.pattern; S.pattern=10;      \/\/ End-to-End Sweep as the attract animation\n  tourTimer=setTimeout(()=\u0026gt;{ if(tourActive){ tourActive=false; S.pattern=prev; } scheduleIdle(); }, 3600);\n}\nfunction scheduleIdle(){\n  if(interacted) return;\n  clearTimeout(idleTimer);\n  idleTimer=setTimeout(attractSweep, 18000);\n}\n(function(){\n  let fired=false;\n  const start=()=\u0026gt;{ if(!fired){ fired=true; setTimeout(attractSweep, 700); } };\n  if(window.IntersectionObserver){\n    new IntersectionObserver((es,obs)=\u0026gt;{\n      if(es.some(e=\u0026gt;e.isIntersecting)){ start(); obs.disconnect(); }\n    },{threshold:.5}).observe(document.querySelector(\u0026quot;.stage\u0026quot;));\n  } else start();\n})();\n\n\/* ---------------- Boot + embed plumbing ---------------- *\/\nbuildController();\napplySize();\nrequestAnimationFrame(render);\n\n(function(){\n  const embedded = (window!==parent);\n  if(embedded){\n    document.querySelector(\u0026quot;header\u0026quot;).style.display=\u0026quot;none\u0026quot;;\n    document.querySelector(\u0026quot;footer\u0026quot;).style.display=\u0026quot;none\u0026quot;;\n    document.getElementById(\u0026quot;sizeBtns\u0026quot;).style.display=\u0026quot;none\u0026quot;;\n    if(window.innerWidth\u0026gt;840) document.querySelector(\u0026quot;.wrap\u0026quot;).style.padding=\u0026quot;10px 12px 14px\u0026quot;;\n  }\n  const report=()=\u0026gt;{ try{\n    parent.postMessage({type:\u0026quot;lowpro-player-height\u0026quot;,\n      height: document.querySelector(\u0026quot;.wrap\u0026quot;).scrollHeight+8}, \u0026quot;*\u0026quot;);\n  }catch(e){} };\n  if(window.ResizeObserver) new ResizeObserver(report).observe(document.querySelector(\u0026quot;.wrap\u0026quot;));\n  window.addEventListener(\u0026quot;load\u0026quot;,report); window.addEventListener(\u0026quot;pageshow\u0026quot;,report);\n  setTimeout(report,400); setTimeout(report,1500);\n  let n=0; const iv=setInterval(()=\u0026gt;{ report(); if(++n\u0026gt;10) clearInterval(iv); },1200);\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;\n\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.lowpro-frame{height:775px}\n@media(max-width:840px){\n  .lowpro-cta{display:none}\n  .lowpro-frame{height:790px}\n}\n\u003c\/style\u003e\n\u003cscript\u003e\nwindow.addEventListener(\"message\",function(e){\n  if(e.data \u0026\u0026 e.data.type===\"lowpro-player-height\"){\n    var f=document.getElementById(\"lowpro-player-frame\");\n    if(f \u0026\u0026 e.data.height\u003e200) f.style.height=(e.data.height+4)+\"px\";\n  }\n});\n\u003c\/script\u003e\n\u003cdiv style=\"height:28px;\"\u003e \u003c\/div\u003e\n\u003c!-- Intro Section --\u003e\n\u003cp\u003e\u003cstrong\u003eBuilt for emergency response teams and public safety professionals, this high-intensity LED warning light bar delivers uncompromising performance in a sleek, durable design.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003eThe \u003cstrong\u003eBlack Oak 11\" Mini Low Pro Emergency LED Light Bar\u003c\/strong\u003e is engineered for maximum visibility, reliability, and user control in a compact, low-profile footprint. With ultra-bright LEDs, multiple selectable flash and strobe patterns, and a rugged, weather-sealed housing, this mini light bar makes sure your presence is known in any emergency or warning situation—day or night, rain or shine.\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003eBuilt to withstand the demands of high-speed response, off-road utility, and work-site visibility, this 11-inch low-profile bar features a streamlined, aerodynamic frame and a universal mounting system for quick, easy installation on virtually any vehicle. Whether you're outfitting a patrol car, fire or EMS unit, tow truck, or utility vehicle, this mini emergency light bar delivers dependable warning performance where it matters most.\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003e \u003c\/p\u003e\n\u003c!-- TRUST STRIP --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Screenshot_2026-07-21_at_9.31.14_AM.png?v=1784641940\" alt=\"SAE J845 Certified, SAE J595 Class 1, IP69K Waterproof, Lifetime Warranty, -40F to +145F Rated, 50,000 Hour LEDs\" style=\"width: 100%; display: block; border-radius: 10px;\"\u003e\u003c\/p\u003e\n\u003c!-- SIZE SELECTOR --\u003e\n\u003cdiv style=\"margin: 4px 0 2px;\"\u003e\n\u003cp style=\"margin: 0 0 8px; font-weight: 600; font-size: 15px;\"\u003eAvailable sizes:\u003c\/p\u003e\n\u003cspan style=\"display: inline-block; background: #FFB300; color: #111; font-weight: bold; padding: 8px 14px; border-radius: 8px; margin: 0 6px 8px 0; font-size: 15px;\"\u003e11\"\u003c\/span\u003e \u003ca href=\"\/products\/new-17-low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e17\"\u003c\/a\u003e \u003ca href=\"\/products\/new-30-low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e30\"\u003c\/a\u003e \u003ca href=\"\/products\/new-43-low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e43\"\u003c\/a\u003e \u003ca href=\"\/products\/low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e49\"\u003c\/a\u003e \u003ca href=\"\/products\/new-55-low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e55\"\u003c\/a\u003e \u003ca href=\"\/products\/new-61-low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e61\"\u003c\/a\u003e \u003ca href=\"\/products\/new-68-low-pro-emergency-light-bar\" style=\"display: inline-block; border: 2px solid #FFB300; color: #111; font-weight: bold; padding: 6px 12px; border-radius: 8px; margin: 0 6px 8px 0; text-decoration: none; font-size: 15px;\"\u003e68\"\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c!-- Collapsable Sections --\u003e\n\u003cstyle\u003e\n#MainContent details {\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  margin-bottom: 16px;\n  overflow: hidden;\n  background: #fff;\n  font-family: Arial, sans-serif;\n}\n#MainContent details summary {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  cursor: pointer;\n  padding: 14px 18px;\n  font-weight: 600;\n  font-size: 18px;\n  list-style: none;\n  background-color: #f9f9f9;\n  border-bottom: 1px solid #e0e0e0;\n  position: relative;\n}\n#MainContent details[open] summary {\n  background-color: #f1f1f1;\n}\n#MainContent details summary::after {\n  content: '+';\n  font-size: 20px;\n  font-weight: bold;\n  transition: transform 0.3s ease;\n}\n#MainContent details[open] summary::after {\n  content: '−';\n}\n#MainContent details .content {\n  padding: 16px 20px;\n  font-size: 16px;\n  line-height: 1.6;\n}\n\u003c\/style\u003e\n\u003cdetails\u003e\n\u003csummary\u003eFeatures\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003eLifetime Warranty\u003c\/li\u003e\n\u003cli\u003eSAE J845 Class 1 Certified\u003c\/li\u003e\n\u003cli\u003e360° visibility with dual-color ultra-bright LEDs\u003c\/li\u003e\n\u003cli\u003eSlim Low Profile design\u003c\/li\u003e\n\u003cli\u003eUp to 45 flash patterns with memory recall\u003c\/li\u003e\n\u003cli\u003eRugged, waterproof housing (IP69K rated)\u003c\/li\u003e\n\u003cli\u003eIntegrated controller with pattern cycling, cruise mode, and cut-off\n\u003cul\u003e\n\u003cli\u003eNote - this is built into the back of the \u003cspan style=\"text-decoration: underline;\"\u003esocket plug\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003eThis bar \u003cspan style=\"text-decoration: underline;\"\u003edoes not\u003c\/span\u003e come with a standard controller!\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIn the Box\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cb\u003eLow Pro Light Bar\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eWiring\u003c\/b\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cb\u003eMagnetic Feet\u003c\/b\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- COMPLIANCE SECTION --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCompliance \u0026amp; Certifications\u003c\/summary\u003e\n\u003cdiv class=\"content\"\u003e\n\u003cp\u003e\u003cstrong\u003eMeets the standards your department requires.\u003c\/strong\u003e\u003c\/p\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"3\"\u003eCertification \u0026amp; Compliance\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J845\u003c\/th\u003e\n\u003ctd\u003e360° warning lamp photometric standard for light bars and beacons\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSAE J595 Class 1\u003c\/th\u003e\n\u003ctd\u003eHighest intensity class — approved for primary emergency vehicles (police, fire, EMS)\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eCertified\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eIP69K\u003c\/th\u003e\n\u003ctd\u003eSealed against high-pressure washdown, salt, dust, and submersion\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRated\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Range\u003c\/th\u003e\n\u003ctd\u003eExtreme-climate duty\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e-40°F to +145°F\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDuty Life\u003c\/th\u003e\n\u003ctd\u003eContinuous-duty LED modules\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50,000 hours\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"font-size: 13px; color: #666;\"\u003e\u003cem\u003eWarning-equipment regulations vary by state and jurisdiction. Verify color and mounting requirements with your local authority. Spec sheet PDF and certification documentation available on request for procurement offices.\u003c\/em\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c!-- Image + Text Alternating Section --\u003e\n\u003cstyle\u003e\n.text-image-wrap {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n.text-image-wrap.text-image-right {\n  flex-direction: row-reverse;\n}\n.text-image-wrap .image-wrap {\n  flex: 1;\n  max-width: 500px;\n}\n.text-image-wrap .image-wrap img {\n  width: 100%;\n  height: auto;\n  max-height: 300px; \n  display: block;\n  object-fit: contain; \n}\n.text-image-wrap .text-wrap {\n  flex: 1;\n  min-width: 300px;\n}\n\u003c\/style\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/255283_7703341170749_330031d5_da20_475f_887e_f1269d2ad248_1.jpg?v=1763495670\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eEmergency Bar + Work Light\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eGet full 360° white-light illumination at the touch of a button. Perfect for reverse lighting, scene lighting, or any situation where you need powerful all-around visibility. It's a true dual-purpose feature you won't find on most emergency bars — and it comes standard on every one of ours.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Low_Pro_Emergency_Bar_SAE_graphics.jpg?v=1758041472\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eBuilt Tough for Any Environment\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eIP69K-rated waterproof housing and reinforced aluminum construction stand up to rain, snow, mud, and dust—ideal for police, fire, tow, or off-road response vehicles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/DSC00223.jpg?v=1754512314\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eFull 360° Warning Visibility\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003ePacked with high-output dual-color LEDs and side modules, this bar delivers all-angle visibility—ensuring you're seen from every direction, even in chaotic scenes or inclement weather.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LPE_-_Driver_Side_Angle.jpg?v=1761226316\" alt=\"\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eSlim, Low-Profile Design\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eEngineered to minimize wind resistance and visual bulk, this light bar features a sleek, aerodynamic frame that hugs your vehicle's roofline. The low-profile housing not only enhances fuel efficiency but also delivers a clean, professional look without compromising brightness or performance.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-image-wrap text-image-right\"\u003e\n\u003cdiv class=\"image-wrap\"\u003e\n\u003cp\u003e\u003cvideo width=\"100%\" height=\"auto\" muted=\"\" autoplay=\"autoplay\" loop=\"loop\" playsinline=\"\" controls=\"controls\"\u003e\u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/4ec9ce848f5e4d2d8083da9daf4dbe78.mp4\" type=\"video\/mp4\"\u003eYour browser does not support the video tag.\u003c\/source\u003e\u003c\/video\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"text-wrap\"\u003e\n\u003ch3 class=\"text-title\"\u003eUp to 45 Flash Patterns with Smart Memory\u003c\/h3\u003e\n\u003cp class=\"text-content\"\u003eChoose from up to 45 user-selectable flash patterns to fit any scenario. Built-in memory recall stores your last used setting for consistent deployment every time.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HERO BANNER --\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/d8j0ntlcm91z4.cloudfront.net\/user_3G9nKxyaQsdrPdDsxWr4EcSl5FL\/hf_20260715_201038_0803a0cd-07a6-4508-9c7a-50d0230a94e3.png\" alt=\"Built to Code. Backed for Life. SAE J845 and J595 Class 1 compliant, IP69K sealed, lifetime warranty\" style=\"width: 100%; display: block; border-radius: 10px;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c!-- FLEET BLOCK --\u003e\n\u003cdiv style=\"padding: 8px 0; margin: 0 0 8px;\"\u003e\n\u003ch3 style=\"margin: 0 0 8px;\"\u003eOutfitting a Fleet?\u003c\/h3\u003e\n\u003cp style=\"margin: 0 0 14px; font-size: 16px; line-height: 1.6;\"\u003eVolume pricing on 5+ units, department POs accepted, W-9 on file, and spec sheets ready for your procurement office. From single patrol vehicles to full county fleets.\u003c\/p\u003e\n\u003ca href=\"\/pages\/fleet-pricing\" style=\"display: inline-block; background: #FFB300; color: #111; font-weight: bold; padding: 12px 22px; border-radius: 8px; text-decoration: none;\"\u003eRequest Fleet Pricing\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Dimension --\u003e\u003c!-- Specs --\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/Black_Oak_-_Low_Pro_Emergency_Bar_-_All_Dimensions.jpg?v=1762971573\"\u003e\u003c\/p\u003e\n\u003ch5\u003eSpecs\u003c\/h5\u003e\n\u003cstyle\u003e\n  table.spec-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 20px 0;\n    font-size: 15px;\n  }\n  table.spec-table th, table.spec-table td {\n    border: 1px solid #ccc;\n    padding: 10px;\n    text-align: left;\n  }\n  table.spec-table th {\n    background-color: #f7f7f7;\n    font-weight: 600;\n    width: 30%;\n  }\n  table.spec-table tr:hover {\n    background-color: #f2f2f2;\n  }\n  table.spec-table thead th {\n    background-color: #222;\n    color: #fff;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    text-align: center;\n  }\n\u003c\/style\u003e\n\u003ctable class=\"spec-table\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003ePower \u0026amp; Performance\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Wattage\u003c\/th\u003e\n\u003ctd\u003e168\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eTotal Amp Draw\u003c\/th\u003e\n\u003ctd\u003e13\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Voltage\u003c\/th\u003e\n\u003ctd\u003e10-30V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRaw Lumens\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Diode Quantity\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eLED Chip\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBeam Pattern\u003c\/th\u003e\n\u003ctd\u003eWide Angle\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCertificate\u003c\/th\u003e\n\u003ctd\u003eSAE J845 \u0026amp; SAE J595 Class 1\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Single Color\u003c\/th\u003e\n\u003ctd\u003e15\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFlash Patterns – Dual Color\u003c\/th\u003e\n\u003ctd\u003e45 (15 Color 1 \/ 15 Color 2 \/ 15 Combo)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eDurability \u0026amp; Lifespan\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eLife Expectancy\u003c\/th\u003e\n\u003ctd\u003e50,000 Hours\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eOperating Temp\u003c\/th\u003e\n\u003ctd\u003e-40° to 145° F\u003cbr\u003e-40° to 62° C\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWaterproof Rating\u003c\/th\u003e\n\u003ctd\u003eIP69K\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003eLimited Lifetime\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGuarantee\u003c\/th\u003e\n\u003ctd\u003e30 Day Money Back\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eWiring \u0026amp; Installation\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eCord Length From Light\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Included?\u003c\/th\u003e\n\u003ctd\u003eYes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Harness Length\u003c\/th\u003e\n\u003ctd\u003e9'\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWire Gauge\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFuse Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eConnector Type\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHole Size for Controller\u003c\/th\u003e\n\u003ctd\u003e\u003cbr\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMounting Bolt Size\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth colspan=\"2\"\u003eGeneral\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSKU\u003c\/th\u003e\n\u003ctd\u003eLP-E11-AW\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch5\u003eFAQ\u003c\/h5\u003e\n\u003cp\u003e\u003cstrong\u003eWhat voltage and control systems does this light bar support?\u003c\/strong\u003e\u003cbr\u003eThis light bar operates on a 12 V–24 V DC power system and can be used with either push-button or wireless controllers. It's compatible with standard vehicle electrical systems, making installation straightforward for both fleet and individual applications.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow durable is this light bar in harsh environments?\u003c\/strong\u003e\u003cbr\u003eThe Low Pro Emergency Light Bar is built with a rugged aluminum housing, sealed to an IP69K rating and tested to resist corrosion, vibration, and high-pressure water ingress. It's designed for demanding conditions—whether roadside, rescue, or commercial use—so you can rely on consistent performance when it counts.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat beam patterns and flash modes are included?\u003c\/strong\u003e\u003cbr\u003eUp to 45 flash patterns are built into the unit—including warning, hazard, and full-output flasher modes—with memory recall so your last setting is retained even after power loss. You'll also find low-profile steady-burn mode useful for scene lighting and standby operations.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIs the light bar legal for use on public roads and emergency vehicles?\u003c\/strong\u003e\u003cbr\u003eYes. The unit meets SAE J595 Class 1 and other relevant emergency lighting standards for warning applications. However, regulations vary by jurisdiction, so we recommend checking your local laws before installation to ensure compliance with mounting height, color, and flash pattern requirements.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhat's covered by the warranty?\u003c\/strong\u003e\u003cbr\u003eOur industry-leading lifetime warranty covers manufacturing defects, driver failures, and LED module performance. It does not cover damage caused by improper installation, extreme overuse beyond defined duty cycles, or wiring issues. For full warranty terms, please refer to our Warranty \u0026amp; Returns page.\u003c\/p\u003e","brand":"Black Oak LED","offers":[{"title":"Amber \u0026 White \/ Magnetic","offer_id":43435872878653,"sku":"LP-E11-AW","price":299.37,"currency_code":"USD","in_stock":true},{"title":"Amber \u0026 White \/ Headache Rack (X2)","offer_id":43558460162109,"sku":"LP-E11-AW","price":324.37,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/files\/LowProEmergency-11-Side.png?v=1787078070"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3599\/collections\/lpe30w_aw.jpg?v=1794347119","url":"https:\/\/www.blackoakled.com\/collections\/security-vehicle-lights.oembed","provider":"Black Oak LED","version":"1.0","type":"link"}