{"title":"Sensors","description":null,"products":[{"product_id":"single-hand-sensor-switch","title":"Single Hand Sensor Switch","description":"\u003csection class=\"spec-page\"\u003e\u003c!-- FULL-WIDTH CAROUSEL (Top) --\u003e\n\u003csection class=\"spec-carousel\"\u003e\n\u003cdiv id=\"cobCarousel\" class=\"spec-carousel-track\"\u003e\n\u003cdiv class=\"spec-carousel-slide\"\u003e\u003cimg loading=\"eager\" alt=\"C\u0026amp;C Lighting under cabinet LED strip light off versus on comparison kitchen counter\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/9f250a93-ed6b-44c3-b95c-80be163ed458.png?v=1785682924\"\u003e\u003c\/div\u003e\n\u003c!-- Add more images like this when you have them --\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"spec-carousel-btn prev\"\u003e‹\u003c\/button\u003e \u003cbutton type=\"button\" class=\"spec-carousel-btn next\"\u003e›\u003c\/button\u003e\n\u003cdiv class=\"spec-carousel-dots\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  const carousel = document.querySelector(\".spec-carousel\");\n  if (!carousel) return;\n  const track = carousel.querySelector(\".spec-carousel-track\");\n  const slides = Array.from(carousel.querySelectorAll(\".spec-carousel-slide\"));\n  const prevBtn = carousel.querySelector(\"[data-carousel-prev]\");\n  const nextBtn = carousel.querySelector(\"[data-carousel-next]\");\n  const dotsWrap = carousel.querySelector(\"[data-carousel-dots]\");\n  if (!track || slides.length === 0) return;\n  let currentIndex = 0;\n  let autoplayTimer = null;\n  const AUTOPLAY_MS = 5000;\n  function slideWidth() {\n    return track.getBoundingClientRect().width;\n  }\n  function clampIndex(i) {\n    if (i \u003c 0) return 0;\n    if (i \u003e slides.length - 1) return slides.length - 1;\n    return i;\n  }\n  function scrollToIndex(i, opts) {\n    currentIndex = clampIndex(i);\n    track.scrollTo({\n      left: currentIndex * slideWidth(),\n      behavior: (opts \u0026\u0026 opts.instant) ? \"auto\" : \"smooth\"\n    });\n    updateDots();\n    updateButtons();\n  }\n  function updateButtons() {\n    if (!prevBtn || !nextBtn) return;\n    prevBtn.disabled = currentIndex === 0;\n    nextBtn.disabled = currentIndex === slides.length - 1;\n    prevBtn.style.opacity = prevBtn.disabled ? \"0.45\" : \"1\";\n    nextBtn.style.opacity = nextBtn.disabled ? \"0.45\" : \"1\";\n    prevBtn.style.pointerEvents = prevBtn.disabled ? \"none\" : \"auto\";\n    nextBtn.style.pointerEvents = nextBtn.disabled ? \"none\" : \"auto\";\n  }\n  function buildDots() {\n    if (!dotsWrap) return;\n    dotsWrap.innerHTML = \"\";\n    slides.forEach((_, i) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"spec-carousel-dot\";\n      btn.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n      btn.addEventListener(\"click\", () =\u003e scrollToIndex(i));\n      dotsWrap.appendChild(btn);\n    });\n    updateDots();\n  }\n  function updateDots() {\n    if (!dotsWrap) return;\n    const dots = Array.from(dotsWrap.querySelectorAll(\".spec-carousel-dot\"));\n    dots.forEach((d, i) =\u003e {\n      const active = i === currentIndex;\n      d.setAttribute(\"aria-current\", active ? \"true\" : \"false\");\n    });\n  }\n  function syncIndexFromScroll() {\n    const w = slideWidth();\n    const i = Math.round(track.scrollLeft \/ w);\n    const next = clampIndex(i);\n    if (next !== currentIndex) {\n      currentIndex = next;\n      updateDots();\n      updateButtons();\n    }\n  }\n  function startAutoplay() {\n    stopAutoplay();\n    autoplayTimer = window.setInterval(() =\u003e {\n      const next = (currentIndex + 1) % slides.length;\n      scrollToIndex(next);\n    }, AUTOPLAY_MS);\n  }\n  function stopAutoplay() {\n    if (autoplayTimer) window.clearInterval(autoplayTimer);\n    autoplayTimer = null;\n  }\n  if (prevBtn) prevBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex - 1));\n  if (nextBtn) nextBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex + 1));\n  track.addEventListener(\"scroll\", () =\u003e {\n    window.requestAnimationFrame(syncIndexFromScroll);\n  });\n  carousel.addEventListener(\"mouseenter\", stopAutoplay);\n  carousel.addEventListener(\"mouseleave\", startAutoplay);\n  carousel.addEventListener(\"focusin\", stopAutoplay);\n  carousel.addEventListener(\"focusout\", startAutoplay);\n  track.addEventListener(\"keydown\", (e) =\u003e {\n    if (e.key === \"ArrowLeft\") scrollToIndex(currentIndex - 1);\n    if (e.key === \"ArrowRight\") scrollToIndex(currentIndex + 1);\n  });\n  window.addEventListener(\"resize\", () =\u003e {\n    scrollToIndex(currentIndex, { instant: true });\n  });\n  buildDots();\n  scrollToIndex(0, { instant: true });\n  startAutoplay();\n})();\n\u003c\/script\u003e \u003c!-- HERO --\u003e\n\u003csection class=\"spec-hero\"\u003e\n\u003cdiv style=\"text-align: start;\" class=\"spec-hero-media\"\u003e\n\u003cbr\u003e\u003cimg alt=\"C\u0026amp;C Lighting single hand sensor switch with connector cable for LED strip lighting\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_6_af2e8be9-c540-4492-8665-4b7e0ccfdab8.png?v=1785682924\"\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-hero-content\"\u003e\n\u003ch4 class=\"spec-title\"\u003eSingle Hand Sensor Switch\u003c\/h4\u003e\n\u003cp class=\"spec-tagline\"\u003eThe Single Hand Sensor Switch is an infrared hand-wave sensor built to turn LED strip lighting on and off without physical contact. Placing a hand within 0-8cm of the sensor triggers an instant, fast-start response, wiring inline between a constant voltage driver and the connected LED strip.\u003c\/p\u003e\n\u003cdiv class=\"spec-stats\"\u003e\n\u003cspan\u003eDC 5V-24V\u003c\/span\u003e \u003cspan\u003e0-8cm Sensing Range\u003c\/span\u003e \u003cspan\u003eFast Start Response\u003c\/span\u003e \u003cspan\u003e5A, 12V 60W \/ 24V 120W\u003c\/span\u003e \u003cspan\u003eETL\/cETL Listed\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Single_Hand_Sensor_Switch.pdf?v=1785682924\" class=\"spec-btn\" rel=\"noopener\" title=\"Single Hand Sensor Switch Spec Sheet\" target=\"_blank\"\u003e Download Spec Sheet \u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- SUPPORT VISUAL --\u003e\u003c!-- FEATURES --\u003e\n\u003csection class=\"spec-features\"\u003e\n\u003ch2 class=\"spec-section-title\"\u003eHighlighted Features\u003c\/h2\u003e\n\u003cdiv class=\"spec-feature-grid\"\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eFunction\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eInfrared hand-wave sensor switch for LED strip on\/off control.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eSensing Method\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eEO-IR sensor detects hand presence at a range of 0-8cm.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eStart Mode\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eFast start response on activation.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003ePower Type\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eConstant voltage (CV) input.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eWiring\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eInstalls inline between a constant voltage LED driver and the LED strip, with IN and OUT terminals.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eCertification\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eETL\/cETL Listed (Intertek).\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\n  .spec-page{\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 40px 16px 24px;\n  }\n  \/* HERO *\/\n  .spec-hero{\n    display: grid;\n    grid-template-columns: 1.05fr 0.95fr;\n    gap: 56px;\n    align-items: center;\n  }\n  .spec-hero-media img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  .spec-title{\n    margin: 0 0 10px;\n    font-size: clamp(28px, 3vw, 40px);\n    line-height: 1.15;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n  }\n  .spec-tagline{\n    margin: 0 0 18px;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 400;\n    color: rgba(0,0,0,0.70);\n    max-width: 46ch;\n  }\n  \/* Stat row: minimal pipe-separated *\/\n  .spec-stats{\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px 14px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    letter-spacing: 0.3px;\n    color: rgba(0,0,0,0.62);\n  }\n  .spec-stats span{\n    position: relative;\n    padding-right: 14px;\n    white-space: nowrap;\n  }\n  .spec-stats span:not(:last-child)::after{\n    content: \"|\";\n    position: absolute;\n    right: 4px;\n    color: rgba(0,0,0,0.28);\n  }\n  \/* CTA button: subtle *\/\n  .spec-btn{\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 12px 16px;\n    border-radius: 10px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 14px;\n    border: 1px solid rgba(0,0,0,0.14);\n    color: rgba(0,0,0,0.86);\n    background: #fff;\n    transition: transform 120ms ease, box-shadow 120ms ease;\n  }\n  .spec-btn:hover{\n    transform: translateY(-1px);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n  }\n  \/* SUPPORT *\/\n  .spec-support{\n    margin-top: 32px;\n  }\n  .spec-support img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  \/* FEATURES *\/\n  .spec-features{\n    margin-top: 40px;\n    padding-top: 26px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n  .spec-section-title{\n    margin: 0 0 18px;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n    color: rgba(0,0,0,0.88);\n  }\n  .spec-feature-grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px 40px;\n    align-items: start;\n  }\n  .spec-feature{\n    display: grid;\n    grid-template-columns: 210px 1fr;\n    gap: 14px;\n  }\n  .spec-feature-label{\n    font-size: 13px;\n    font-weight: 600;\n    color: rgba(0,0,0,0.90);\n    letter-spacing: 0.2px;\n  }\n  .spec-feature-text{\n    font-size: 14px;\n    line-height: 1.6;\n    color: rgba(0,0,0,0.68);\n  }\n  \/* Mobile *\/\n  @media (max-width: 900px){\n    .spec-hero{\n      grid-template-columns: 1fr;\n      gap: 24px;\n      align-items: start;\n    }\n    .spec-stats span{\n      padding-right: 0;\n      white-space: normal;\n    }\n    .spec-stats span:not(:last-child)::after{\n      content: \"\";\n    }\n    .spec-feature-grid{\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n    .spec-feature{\n      grid-template-columns: 1fr;\n      gap: 6px;\n    }\n  }\n\n\/* FULL-WIDTH CAROUSEL *\/\n.spec-carousel{\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  margin-top: -40px;\n  margin-bottom: 26px;\n  overflow: hidden;\n  background: #0b0b0b;\n}\n.spec-carousel-track{\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.spec-carousel-track::-webkit-scrollbar{\n  display: none;\n}\n.spec-carousel-slide{\n  flex: 0 0 100%;\n  scroll-snap-align: center;\n  position: relative;\n  background: #0b0b0b;\n}\n.spec-carousel-slide img{\n  width: 100%;\n  height: auto;\n  display: block;\n}\n.spec-carousel-btn{\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,0.22);\n  background: rgba(0,0,0,0.38);\n  color: #fff;\n  font-size: 22px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition: transform 120ms ease, background 120ms ease;\n}\n.spec-carousel-btn:hover{\n  background: rgba(0,0,0,0.55);\n  transform: translateY(-50%) scale(1.03);\n}\n.spec-carousel-btn.prev{\n  left: 14px;\n}\n.spec-carousel-btn.next{\n  right: 14px;\n}\n.spec-carousel-dots{\n  position: absolute;\n  left: 50%;\n  bottom: 14px;\n  transform: translateX(-50%);\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px;\n  border-radius: 999px;\n  background: rgba(0,0,0,0.28);\n  border: 1px solid rgba(255,255,255,0.12);\n}\n.spec-carousel-dot{\n  width: 8px;\n  height: 8px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.35);\n  border: 0;\n  cursor: pointer;\n}\n.spec-carousel-dot[aria-current=\"true\"]{\n  background: rgba(255,255,255,0.92);\n}\n@media (max-width: 900px){\n  .spec-carousel{\n    margin-top: -24px;\n    margin-bottom: 18px;\n  }\n  .spec-carousel-btn{\n    width: 36px;\n    height: 36px;\n    font-size: 18px;\n  }\n  .spec-carousel-btn.prev{\n    left: 10px;\n  }\n  .spec-carousel-btn.next{\n    right: 10px;\n  }\n  .spec-carousel-dots{\n    bottom: 10px;\n  }\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"C\u0026C Lighting","offers":[{"title":"Default Title","offer_id":42816811860053,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/ProductPhotoDimensionGuide_6.png?v=1785683164"},{"product_id":"smart-single-sensor-switch","title":"Smart Single Sensor Switch","description":"\u003csection class=\"spec-page\"\u003e\u003c!-- FULL-WIDTH CAROUSEL (Top) --\u003e\n\u003csection class=\"spec-carousel\"\u003e\n\u003cdiv id=\"cobCarousel\" class=\"spec-carousel-track\"\u003e\n\u003cdiv class=\"spec-carousel-slide\"\u003e\u003cimg loading=\"eager\" alt=\"C\u0026amp;C Lighting closet LED strip lighting off versus door open triggered comparison\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/0ffe8dc0-8773-43c6-804e-ee0048a3ae87.png?v=1785683752\"\u003e\u003c\/div\u003e\n\u003c!-- Add more images like this when you have them --\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"spec-carousel-btn prev\"\u003e‹\u003c\/button\u003e \u003cbutton type=\"button\" class=\"spec-carousel-btn next\"\u003e›\u003c\/button\u003e\n\u003cdiv class=\"spec-carousel-dots\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  const carousel = document.querySelector(\".spec-carousel\");\n  if (!carousel) return;\n  const track = carousel.querySelector(\".spec-carousel-track\");\n  const slides = Array.from(carousel.querySelectorAll(\".spec-carousel-slide\"));\n  const prevBtn = carousel.querySelector(\"[data-carousel-prev]\");\n  const nextBtn = carousel.querySelector(\"[data-carousel-next]\");\n  const dotsWrap = carousel.querySelector(\"[data-carousel-dots]\");\n  if (!track || slides.length === 0) return;\n  let currentIndex = 0;\n  let autoplayTimer = null;\n  const AUTOPLAY_MS = 5000;\n  function slideWidth() {\n    return track.getBoundingClientRect().width;\n  }\n  function clampIndex(i) {\n    if (i \u003c 0) return 0;\n    if (i \u003e slides.length - 1) return slides.length - 1;\n    return i;\n  }\n  function scrollToIndex(i, opts) {\n    currentIndex = clampIndex(i);\n    track.scrollTo({\n      left: currentIndex * slideWidth(),\n      behavior: (opts \u0026\u0026 opts.instant) ? \"auto\" : \"smooth\"\n    });\n    updateDots();\n    updateButtons();\n  }\n  function updateButtons() {\n    if (!prevBtn || !nextBtn) return;\n    prevBtn.disabled = currentIndex === 0;\n    nextBtn.disabled = currentIndex === slides.length - 1;\n    prevBtn.style.opacity = prevBtn.disabled ? \"0.45\" : \"1\";\n    nextBtn.style.opacity = nextBtn.disabled ? \"0.45\" : \"1\";\n    prevBtn.style.pointerEvents = prevBtn.disabled ? \"none\" : \"auto\";\n    nextBtn.style.pointerEvents = nextBtn.disabled ? \"none\" : \"auto\";\n  }\n  function buildDots() {\n    if (!dotsWrap) return;\n    dotsWrap.innerHTML = \"\";\n    slides.forEach((_, i) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"spec-carousel-dot\";\n      btn.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n      btn.addEventListener(\"click\", () =\u003e scrollToIndex(i));\n      dotsWrap.appendChild(btn);\n    });\n    updateDots();\n  }\n  function updateDots() {\n    if (!dotsWrap) return;\n    const dots = Array.from(dotsWrap.querySelectorAll(\".spec-carousel-dot\"));\n    dots.forEach((d, i) =\u003e {\n      const active = i === currentIndex;\n      d.setAttribute(\"aria-current\", active ? \"true\" : \"false\");\n    });\n  }\n  function syncIndexFromScroll() {\n    const w = slideWidth();\n    const i = Math.round(track.scrollLeft \/ w);\n    const next = clampIndex(i);\n    if (next !== currentIndex) {\n      currentIndex = next;\n      updateDots();\n      updateButtons();\n    }\n  }\n  function startAutoplay() {\n    stopAutoplay();\n    autoplayTimer = window.setInterval(() =\u003e {\n      const next = (currentIndex + 1) % slides.length;\n      scrollToIndex(next);\n    }, AUTOPLAY_MS);\n  }\n  function stopAutoplay() {\n    if (autoplayTimer) window.clearInterval(autoplayTimer);\n    autoplayTimer = null;\n  }\n  if (prevBtn) prevBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex - 1));\n  if (nextBtn) nextBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex + 1));\n  track.addEventListener(\"scroll\", () =\u003e {\n    window.requestAnimationFrame(syncIndexFromScroll);\n  });\n  carousel.addEventListener(\"mouseenter\", stopAutoplay);\n  carousel.addEventListener(\"mouseleave\", startAutoplay);\n  carousel.addEventListener(\"focusin\", stopAutoplay);\n  carousel.addEventListener(\"focusout\", startAutoplay);\n  track.addEventListener(\"keydown\", (e) =\u003e {\n    if (e.key === \"ArrowLeft\") scrollToIndex(currentIndex - 1);\n    if (e.key === \"ArrowRight\") scrollToIndex(currentIndex + 1);\n  });\n  window.addEventListener(\"resize\", () =\u003e {\n    scrollToIndex(currentIndex, { instant: true });\n  });\n  buildDots();\n  scrollToIndex(0, { instant: true });\n  startAutoplay();\n})();\n\u003c\/script\u003e \u003c!-- HERO --\u003e\n\u003csection class=\"spec-hero\"\u003e\n\u003cdiv style=\"text-align: start;\" class=\"spec-hero-media\"\u003e\n\u003cbr\u003e\u003cimg alt=\"C\u0026amp;C Lighting smart single sensor switch hand and door 2-in-1 with connector cable\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_6_e2237470-4946-4bed-9d06-f3094538a3ef.png?v=1785683752\"\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-hero-content\"\u003e\n\u003ch4 class=\"spec-title\"\u003eSmart Single Sensor Switch\u003c\/h4\u003e\n\u003cp class=\"spec-tagline\"\u003eThe Smart Single Sensor Switch is a dual-function infrared sensor built to turn LED strip lighting on and off through either a hand wave or a door opening trigger. Its adaptive sensor detects hand presence within 0-8cm or responds to door movement, wiring inline between a constant voltage driver and the connected LED strip with a fast-start response.\u003c\/p\u003e\n\u003cdiv class=\"spec-stats\"\u003e\n\u003cspan\u003eDC 5V-24V\u003c\/span\u003e \u003cspan\u003eHand + Door 2-in-1\u003c\/span\u003e \u003cspan\u003e0-8cm Sensing Range\u003c\/span\u003e \u003cspan\u003eFast Start Response\u003c\/span\u003e \u003cspan\u003eETL\/cETL Listed\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Smart_Single_Sensor_Switch.pdf?v=1785683752\" class=\"spec-btn\" rel=\"noopener\" title=\"Smart Single Sensor Switch Spec Sheet\" target=\"_blank\"\u003e Download Spec Sheet \u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- SUPPORT VISUAL --\u003e\u003c!-- FEATURES --\u003e\n\u003csection class=\"spec-features\"\u003e\n\u003ch2 class=\"spec-section-title\"\u003eHighlighted Features\u003c\/h2\u003e\n\u003cdiv class=\"spec-feature-grid\"\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eFunction\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eCombined hand-wave and door-trigger infrared sensor switch for LED strip on\/off control.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eSensing Method\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eEO-IR adaptive sensor detects hand presence at 0-8cm or responds to door opening.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eStart Mode\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eFast start response on activation.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003ePower Type\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eConstant voltage (CV) input.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eWiring\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eInstalls inline between a constant voltage LED driver and the LED strip, with IN and OUT terminals.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eCertification\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eETL\/cETL Listed (Intertek).\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\n  .spec-page{\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 40px 16px 24px;\n  }\n  \/* HERO *\/\n  .spec-hero{\n    display: grid;\n    grid-template-columns: 1.05fr 0.95fr;\n    gap: 56px;\n    align-items: center;\n  }\n  .spec-hero-media img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  .spec-title{\n    margin: 0 0 10px;\n    font-size: clamp(28px, 3vw, 40px);\n    line-height: 1.15;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n  }\n  .spec-tagline{\n    margin: 0 0 18px;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 400;\n    color: rgba(0,0,0,0.70);\n    max-width: 46ch;\n  }\n  \/* Stat row: minimal pipe-separated *\/\n  .spec-stats{\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px 14px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    letter-spacing: 0.3px;\n    color: rgba(0,0,0,0.62);\n  }\n  .spec-stats span{\n    position: relative;\n    padding-right: 14px;\n    white-space: nowrap;\n  }\n  .spec-stats span:not(:last-child)::after{\n    content: \"|\";\n    position: absolute;\n    right: 4px;\n    color: rgba(0,0,0,0.28);\n  }\n  \/* CTA button: subtle *\/\n  .spec-btn{\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 12px 16px;\n    border-radius: 10px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 14px;\n    border: 1px solid rgba(0,0,0,0.14);\n    color: rgba(0,0,0,0.86);\n    background: #fff;\n    transition: transform 120ms ease, box-shadow 120ms ease;\n  }\n  .spec-btn:hover{\n    transform: translateY(-1px);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n  }\n  \/* SUPPORT *\/\n  .spec-support{\n    margin-top: 32px;\n  }\n  .spec-support img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  \/* FEATURES *\/\n  .spec-features{\n    margin-top: 40px;\n    padding-top: 26px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n  .spec-section-title{\n    margin: 0 0 18px;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n    color: rgba(0,0,0,0.88);\n  }\n  .spec-feature-grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px 40px;\n    align-items: start;\n  }\n  .spec-feature{\n    display: grid;\n    grid-template-columns: 210px 1fr;\n    gap: 14px;\n  }\n  .spec-feature-label{\n    font-size: 13px;\n    font-weight: 600;\n    color: rgba(0,0,0,0.90);\n    letter-spacing: 0.2px;\n  }\n  .spec-feature-text{\n    font-size: 14px;\n    line-height: 1.6;\n    color: rgba(0,0,0,0.68);\n  }\n  \/* Mobile *\/\n  @media (max-width: 900px){\n    .spec-hero{\n      grid-template-columns: 1fr;\n      gap: 24px;\n      align-items: start;\n    }\n    .spec-stats span{\n      padding-right: 0;\n      white-space: normal;\n    }\n    .spec-stats span:not(:last-child)::after{\n      content: \"\";\n    }\n    .spec-feature-grid{\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n    .spec-feature{\n      grid-template-columns: 1fr;\n      gap: 6px;\n    }\n  }\n\n\/* FULL-WIDTH CAROUSEL *\/\n.spec-carousel{\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  margin-top: -40px;\n  margin-bottom: 26px;\n  overflow: hidden;\n  background: #0b0b0b;\n}\n.spec-carousel-track{\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.spec-carousel-track::-webkit-scrollbar{\n  display: none;\n}\n.spec-carousel-slide{\n  flex: 0 0 100%;\n  scroll-snap-align: center;\n  position: relative;\n  background: #0b0b0b;\n}\n.spec-carousel-slide img{\n  width: 100%;\n  height: auto;\n  display: block;\n}\n.spec-carousel-btn{\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,0.22);\n  background: rgba(0,0,0,0.38);\n  color: #fff;\n  font-size: 22px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition: transform 120ms ease, background 120ms ease;\n}\n.spec-carousel-btn:hover{\n  background: rgba(0,0,0,0.55);\n  transform: translateY(-50%) scale(1.03);\n}\n.spec-carousel-btn.prev{\n  left: 14px;\n}\n.spec-carousel-btn.next{\n  right: 14px;\n}\n.spec-carousel-dots{\n  position: absolute;\n  left: 50%;\n  bottom: 14px;\n  transform: translateX(-50%);\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px;\n  border-radius: 999px;\n  background: rgba(0,0,0,0.28);\n  border: 1px solid rgba(255,255,255,0.12);\n}\n.spec-carousel-dot{\n  width: 8px;\n  height: 8px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.35);\n  border: 0;\n  cursor: pointer;\n}\n.spec-carousel-dot[aria-current=\"true\"]{\n  background: rgba(255,255,255,0.92);\n}\n@media (max-width: 900px){\n  .spec-carousel{\n    margin-top: -24px;\n    margin-bottom: 18px;\n  }\n  .spec-carousel-btn{\n    width: 36px;\n    height: 36px;\n    font-size: 18px;\n  }\n  .spec-carousel-btn.prev{\n    left: 10px;\n  }\n  .spec-carousel-btn.next{\n    right: 10px;\n  }\n  .spec-carousel-dots{\n    bottom: 10px;\n  }\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"C\u0026C Lighting","offers":[{"title":"Default Title","offer_id":42816815693909,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_6_e2237470-4946-4bed-9d06-f3094538a3ef.png?v=1785683752"},{"product_id":"motion-infrared-sensor-switch","title":"Motion Infrared Sensor Switch","description":"\u003csection class=\"spec-page\"\u003e\u003c!-- FULL-WIDTH CAROUSEL (Top) --\u003e\n\u003csection class=\"spec-carousel\"\u003e\n\u003cdiv id=\"cobCarousel\" class=\"spec-carousel-track\"\u003e\n\u003cdiv class=\"spec-carousel-slide\"\u003e\u003cimg loading=\"eager\" alt=\"C\u0026amp;C Lighting pantry toe kick LED strip lighting off versus motion activated comparison\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/39ab3fba-1389-40e7-8179-5abc2cf006fd.png?v=1785685576\"\u003e\u003c\/div\u003e\n\u003c!-- Add more images like this when you have them --\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"spec-carousel-btn prev\"\u003e‹\u003c\/button\u003e \u003cbutton type=\"button\" class=\"spec-carousel-btn next\"\u003e›\u003c\/button\u003e\n\u003cdiv class=\"spec-carousel-dots\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  const carousel = document.querySelector(\".spec-carousel\");\n  if (!carousel) return;\n  const track = carousel.querySelector(\".spec-carousel-track\");\n  const slides = Array.from(carousel.querySelectorAll(\".spec-carousel-slide\"));\n  const prevBtn = carousel.querySelector(\"[data-carousel-prev]\");\n  const nextBtn = carousel.querySelector(\"[data-carousel-next]\");\n  const dotsWrap = carousel.querySelector(\"[data-carousel-dots]\");\n  if (!track || slides.length === 0) return;\n  let currentIndex = 0;\n  let autoplayTimer = null;\n  const AUTOPLAY_MS = 5000;\n  function slideWidth() {\n    return track.getBoundingClientRect().width;\n  }\n  function clampIndex(i) {\n    if (i \u003c 0) return 0;\n    if (i \u003e slides.length - 1) return slides.length - 1;\n    return i;\n  }\n  function scrollToIndex(i, opts) {\n    currentIndex = clampIndex(i);\n    track.scrollTo({\n      left: currentIndex * slideWidth(),\n      behavior: (opts \u0026\u0026 opts.instant) ? \"auto\" : \"smooth\"\n    });\n    updateDots();\n    updateButtons();\n  }\n  function updateButtons() {\n    if (!prevBtn || !nextBtn) return;\n    prevBtn.disabled = currentIndex === 0;\n    nextBtn.disabled = currentIndex === slides.length - 1;\n    prevBtn.style.opacity = prevBtn.disabled ? \"0.45\" : \"1\";\n    nextBtn.style.opacity = nextBtn.disabled ? \"0.45\" : \"1\";\n    prevBtn.style.pointerEvents = prevBtn.disabled ? \"none\" : \"auto\";\n    nextBtn.style.pointerEvents = nextBtn.disabled ? \"none\" : \"auto\";\n  }\n  function buildDots() {\n    if (!dotsWrap) return;\n    dotsWrap.innerHTML = \"\";\n    slides.forEach((_, i) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"spec-carousel-dot\";\n      btn.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n      btn.addEventListener(\"click\", () =\u003e scrollToIndex(i));\n      dotsWrap.appendChild(btn);\n    });\n    updateDots();\n  }\n  function updateDots() {\n    if (!dotsWrap) return;\n    const dots = Array.from(dotsWrap.querySelectorAll(\".spec-carousel-dot\"));\n    dots.forEach((d, i) =\u003e {\n      const active = i === currentIndex;\n      d.setAttribute(\"aria-current\", active ? \"true\" : \"false\");\n    });\n  }\n  function syncIndexFromScroll() {\n    const w = slideWidth();\n    const i = Math.round(track.scrollLeft \/ w);\n    const next = clampIndex(i);\n    if (next !== currentIndex) {\n      currentIndex = next;\n      updateDots();\n      updateButtons();\n    }\n  }\n  function startAutoplay() {\n    stopAutoplay();\n    autoplayTimer = window.setInterval(() =\u003e {\n      const next = (currentIndex + 1) % slides.length;\n      scrollToIndex(next);\n    }, AUTOPLAY_MS);\n  }\n  function stopAutoplay() {\n    if (autoplayTimer) window.clearInterval(autoplayTimer);\n    autoplayTimer = null;\n  }\n  if (prevBtn) prevBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex - 1));\n  if (nextBtn) nextBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex + 1));\n  track.addEventListener(\"scroll\", () =\u003e {\n    window.requestAnimationFrame(syncIndexFromScroll);\n  });\n  carousel.addEventListener(\"mouseenter\", stopAutoplay);\n  carousel.addEventListener(\"mouseleave\", startAutoplay);\n  carousel.addEventListener(\"focusin\", stopAutoplay);\n  carousel.addEventListener(\"focusout\", startAutoplay);\n  track.addEventListener(\"keydown\", (e) =\u003e {\n    if (e.key === \"ArrowLeft\") scrollToIndex(currentIndex - 1);\n    if (e.key === \"ArrowRight\") scrollToIndex(currentIndex + 1);\n  });\n  window.addEventListener(\"resize\", () =\u003e {\n    scrollToIndex(currentIndex, { instant: true });\n  });\n  buildDots();\n  scrollToIndex(0, { instant: true });\n  startAutoplay();\n})();\n\u003c\/script\u003e \u003c!-- HERO --\u003e\n\u003csection class=\"spec-hero\"\u003e\n\u003cdiv style=\"text-align: start;\" class=\"spec-hero-media\"\u003e\n\u003cbr\u003e\u003cimg alt=\"C\u0026amp;C Lighting motion infrared PIR sensor switch with connector cable for LED strip\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_5_0898b54a-d3b0-4d49-8d47-dbbd2eede41b.png?v=1785685576\"\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-hero-content\"\u003e\n\u003ch4 class=\"spec-title\"\u003eMotion Infrared Sensor Switch\u003c\/h4\u003e\n\u003cp class=\"spec-tagline\"\u003eThe Motion Infrared Sensor Switch is a PIR motion sensor built to automatically turn LED strip lighting on when movement is detected within a 0-3 meter range, then switch off after a 30 second delay once motion stops. It wires inline between a constant voltage LED driver and the connected LED strip, with a fast-start response the moment motion is sensed.\u003c\/p\u003e\n\u003cdiv class=\"spec-stats\"\u003e\n\u003cspan\u003eDC 5V-24V\u003c\/span\u003e \u003cspan\u003e0-3m Sensing Range\u003c\/span\u003e \u003cspan\u003e30 Second Auto Off\u003c\/span\u003e \u003cspan\u003eFast Start Response\u003c\/span\u003e \u003cspan\u003eETL\/cETL Listed\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Motion_Infrared_Sensor_Switch.pdf?v=1785685576\" class=\"spec-btn\" rel=\"noopener\" title=\"Motion Infrared Sensor Switch Spec Sheet\" target=\"_blank\"\u003e Download Spec Sheet \u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- SUPPORT VISUAL --\u003e\u003c!-- FEATURES --\u003e\n\u003csection class=\"spec-features\"\u003e\n\u003ch2 class=\"spec-section-title\"\u003eHighlighted Features\u003c\/h2\u003e\n\u003cdiv class=\"spec-feature-grid\"\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eFunction\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003ePIR motion sensor switch for automatic LED strip on\/off control.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eSensing Method\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003ePassive infrared (PIR) detects motion within a 0-3 meter range.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eTime Delay\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eAutomatically turns off 30 seconds after motion stops.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eStart Mode\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eFast start response on motion detection.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003ePower Type\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eConstant voltage (CV) input.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eWiring\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eInstalls inline between a constant voltage LED driver and the LED strip, with IN and OUT terminals.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eCertification\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eETL\/cETL Listed (Intertek).\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\n  .spec-page{\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 40px 16px 24px;\n  }\n  \/* HERO *\/\n  .spec-hero{\n    display: grid;\n    grid-template-columns: 1.05fr 0.95fr;\n    gap: 56px;\n    align-items: center;\n  }\n  .spec-hero-media img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  .spec-title{\n    margin: 0 0 10px;\n    font-size: clamp(28px, 3vw, 40px);\n    line-height: 1.15;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n  }\n  .spec-tagline{\n    margin: 0 0 18px;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 400;\n    color: rgba(0,0,0,0.70);\n    max-width: 46ch;\n  }\n  \/* Stat row: minimal pipe-separated *\/\n  .spec-stats{\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px 14px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    letter-spacing: 0.3px;\n    color: rgba(0,0,0,0.62);\n  }\n  .spec-stats span{\n    position: relative;\n    padding-right: 14px;\n    white-space: nowrap;\n  }\n  .spec-stats span:not(:last-child)::after{\n    content: \"|\";\n    position: absolute;\n    right: 4px;\n    color: rgba(0,0,0,0.28);\n  }\n  \/* CTA button: subtle *\/\n  .spec-btn{\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 12px 16px;\n    border-radius: 10px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 14px;\n    border: 1px solid rgba(0,0,0,0.14);\n    color: rgba(0,0,0,0.86);\n    background: #fff;\n    transition: transform 120ms ease, box-shadow 120ms ease;\n  }\n  .spec-btn:hover{\n    transform: translateY(-1px);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n  }\n  \/* SUPPORT *\/\n  .spec-support{\n    margin-top: 32px;\n  }\n  .spec-support img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  \/* FEATURES *\/\n  .spec-features{\n    margin-top: 40px;\n    padding-top: 26px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n  .spec-section-title{\n    margin: 0 0 18px;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n    color: rgba(0,0,0,0.88);\n  }\n  .spec-feature-grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px 40px;\n    align-items: start;\n  }\n  .spec-feature{\n    display: grid;\n    grid-template-columns: 210px 1fr;\n    gap: 14px;\n  }\n  .spec-feature-label{\n    font-size: 13px;\n    font-weight: 600;\n    color: rgba(0,0,0,0.90);\n    letter-spacing: 0.2px;\n  }\n  .spec-feature-text{\n    font-size: 14px;\n    line-height: 1.6;\n    color: rgba(0,0,0,0.68);\n  }\n  \/* Mobile *\/\n  @media (max-width: 900px){\n    .spec-hero{\n      grid-template-columns: 1fr;\n      gap: 24px;\n      align-items: start;\n    }\n    .spec-stats span{\n      padding-right: 0;\n      white-space: normal;\n    }\n    .spec-stats span:not(:last-child)::after{\n      content: \"\";\n    }\n    .spec-feature-grid{\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n    .spec-feature{\n      grid-template-columns: 1fr;\n      gap: 6px;\n    }\n  }\n\n\/* FULL-WIDTH CAROUSEL *\/\n.spec-carousel{\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  margin-top: -40px;\n  margin-bottom: 26px;\n  overflow: hidden;\n  background: #0b0b0b;\n}\n.spec-carousel-track{\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.spec-carousel-track::-webkit-scrollbar{\n  display: none;\n}\n.spec-carousel-slide{\n  flex: 0 0 100%;\n  scroll-snap-align: center;\n  position: relative;\n  background: #0b0b0b;\n}\n.spec-carousel-slide img{\n  width: 100%;\n  height: auto;\n  display: block;\n}\n.spec-carousel-btn{\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,0.22);\n  background: rgba(0,0,0,0.38);\n  color: #fff;\n  font-size: 22px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition: transform 120ms ease, background 120ms ease;\n}\n.spec-carousel-btn:hover{\n  background: rgba(0,0,0,0.55);\n  transform: translateY(-50%) scale(1.03);\n}\n.spec-carousel-btn.prev{\n  left: 14px;\n}\n.spec-carousel-btn.next{\n  right: 14px;\n}\n.spec-carousel-dots{\n  position: absolute;\n  left: 50%;\n  bottom: 14px;\n  transform: translateX(-50%);\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px;\n  border-radius: 999px;\n  background: rgba(0,0,0,0.28);\n  border: 1px solid rgba(255,255,255,0.12);\n}\n.spec-carousel-dot{\n  width: 8px;\n  height: 8px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.35);\n  border: 0;\n  cursor: pointer;\n}\n.spec-carousel-dot[aria-current=\"true\"]{\n  background: rgba(255,255,255,0.92);\n}\n@media (max-width: 900px){\n  .spec-carousel{\n    margin-top: -24px;\n    margin-bottom: 18px;\n  }\n  .spec-carousel-btn{\n    width: 36px;\n    height: 36px;\n    font-size: 18px;\n  }\n  .spec-carousel-btn.prev{\n    left: 10px;\n  }\n  .spec-carousel-btn.next{\n    right: 10px;\n  }\n  .spec-carousel-dots{\n    bottom: 10px;\n  }\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"C\u0026C Lighting","offers":[{"title":"Default Title","offer_id":42816871170133,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/ProductPhotoDimensionGuide_5_c7bcf696-c240-45e4-b3c2-b7d11cba9a30.png?v=1785685823"},{"product_id":"double-door-sensor-switch","title":"Double Door Sensor Switch","description":"\u003csection class=\"spec-page\"\u003e\u003c!-- FULL-WIDTH CAROUSEL (Top) --\u003e\n\u003csection class=\"spec-carousel\"\u003e\n\u003cdiv id=\"cobCarousel\" class=\"spec-carousel-track\"\u003e\n\u003cdiv class=\"spec-carousel-slide\"\u003e\u003cimg loading=\"eager\" alt=\"C\u0026amp;C Lighting double door cabinet LED strip lighting off versus open triggered comparison\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/3b2d5807-b9a8-4d2a-9a8f-c4c08a55bc78.png?v=1785686505\"\u003e\u003c\/div\u003e\n\u003c!-- Add more images like this when you have them --\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"spec-carousel-btn prev\"\u003e‹\u003c\/button\u003e \u003cbutton type=\"button\" class=\"spec-carousel-btn next\"\u003e›\u003c\/button\u003e\n\u003cdiv class=\"spec-carousel-dots\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  const carousel = document.querySelector(\".spec-carousel\");\n  if (!carousel) return;\n  const track = carousel.querySelector(\".spec-carousel-track\");\n  const slides = Array.from(carousel.querySelectorAll(\".spec-carousel-slide\"));\n  const prevBtn = carousel.querySelector(\"[data-carousel-prev]\");\n  const nextBtn = carousel.querySelector(\"[data-carousel-next]\");\n  const dotsWrap = carousel.querySelector(\"[data-carousel-dots]\");\n  if (!track || slides.length === 0) return;\n  let currentIndex = 0;\n  let autoplayTimer = null;\n  const AUTOPLAY_MS = 5000;\n  function slideWidth() {\n    return track.getBoundingClientRect().width;\n  }\n  function clampIndex(i) {\n    if (i \u003c 0) return 0;\n    if (i \u003e slides.length - 1) return slides.length - 1;\n    return i;\n  }\n  function scrollToIndex(i, opts) {\n    currentIndex = clampIndex(i);\n    track.scrollTo({\n      left: currentIndex * slideWidth(),\n      behavior: (opts \u0026\u0026 opts.instant) ? \"auto\" : \"smooth\"\n    });\n    updateDots();\n    updateButtons();\n  }\n  function updateButtons() {\n    if (!prevBtn || !nextBtn) return;\n    prevBtn.disabled = currentIndex === 0;\n    nextBtn.disabled = currentIndex === slides.length - 1;\n    prevBtn.style.opacity = prevBtn.disabled ? \"0.45\" : \"1\";\n    nextBtn.style.opacity = nextBtn.disabled ? \"0.45\" : \"1\";\n    prevBtn.style.pointerEvents = prevBtn.disabled ? \"none\" : \"auto\";\n    nextBtn.style.pointerEvents = nextBtn.disabled ? \"none\" : \"auto\";\n  }\n  function buildDots() {\n    if (!dotsWrap) return;\n    dotsWrap.innerHTML = \"\";\n    slides.forEach((_, i) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"spec-carousel-dot\";\n      btn.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n      btn.addEventListener(\"click\", () =\u003e scrollToIndex(i));\n      dotsWrap.appendChild(btn);\n    });\n    updateDots();\n  }\n  function updateDots() {\n    if (!dotsWrap) return;\n    const dots = Array.from(dotsWrap.querySelectorAll(\".spec-carousel-dot\"));\n    dots.forEach((d, i) =\u003e {\n      const active = i === currentIndex;\n      d.setAttribute(\"aria-current\", active ? \"true\" : \"false\");\n    });\n  }\n  function syncIndexFromScroll() {\n    const w = slideWidth();\n    const i = Math.round(track.scrollLeft \/ w);\n    const next = clampIndex(i);\n    if (next !== currentIndex) {\n      currentIndex = next;\n      updateDots();\n      updateButtons();\n    }\n  }\n  function startAutoplay() {\n    stopAutoplay();\n    autoplayTimer = window.setInterval(() =\u003e {\n      const next = (currentIndex + 1) % slides.length;\n      scrollToIndex(next);\n    }, AUTOPLAY_MS);\n  }\n  function stopAutoplay() {\n    if (autoplayTimer) window.clearInterval(autoplayTimer);\n    autoplayTimer = null;\n  }\n  if (prevBtn) prevBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex - 1));\n  if (nextBtn) nextBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex + 1));\n  track.addEventListener(\"scroll\", () =\u003e {\n    window.requestAnimationFrame(syncIndexFromScroll);\n  });\n  carousel.addEventListener(\"mouseenter\", stopAutoplay);\n  carousel.addEventListener(\"mouseleave\", startAutoplay);\n  carousel.addEventListener(\"focusin\", stopAutoplay);\n  carousel.addEventListener(\"focusout\", startAutoplay);\n  track.addEventListener(\"keydown\", (e) =\u003e {\n    if (e.key === \"ArrowLeft\") scrollToIndex(currentIndex - 1);\n    if (e.key === \"ArrowRight\") scrollToIndex(currentIndex + 1);\n  });\n  window.addEventListener(\"resize\", () =\u003e {\n    scrollToIndex(currentIndex, { instant: true });\n  });\n  buildDots();\n  scrollToIndex(0, { instant: true });\n  startAutoplay();\n})();\n\u003c\/script\u003e \u003c!-- HERO --\u003e\n\u003csection class=\"spec-hero\"\u003e\n\u003cdiv style=\"text-align: start;\" class=\"spec-hero-media\"\u003e\n\u003cbr\u003e\u003cimg alt=\"C\u0026amp;C Lighting double door sensor switch with connector cable for cabinet LED strip\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_5_6e7ec8cc-744a-41fa-8105-c3debe5b991b.png?v=1785686505\"\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-hero-content\"\u003e\n\u003ch4 class=\"spec-title\"\u003eDouble Door Sensor Switch\u003c\/h4\u003e\n\u003cp class=\"spec-tagline\"\u003eThe Double Door Sensor Switch is a double door sensor switch built to control LED strip lighting inside cabinets with two doors, using a dual-pin sensing input to detect either door opening independently. It wires directly to the LED strip circuit, turning the light on when either door is opened and off when both are closed.\u003c\/p\u003e\n\u003cdiv class=\"spec-stats\"\u003e\n\u003cspan\u003eDC 12-24V\u003c\/span\u003e \u003cspan\u003eDual-Pin Door Sensing\u003c\/span\u003e \u003cspan\u003eSELV Input\u003c\/span\u003e \u003cspan\u003e12V 60W \/ 24V 120W Max\u003c\/span\u003e \u003cspan\u003eETL \/ RoHS Certified\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Double_door_sensor_switch.pdf?v=1785686505\" class=\"spec-btn\" rel=\"noopener\" title=\"Double Door Sensor Switch Spec Sheet\" target=\"_blank\"\u003e Download Spec Sheet \u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- SUPPORT VISUAL --\u003e\u003c!-- FEATURES --\u003e\n\u003csection class=\"spec-features\"\u003e\n\u003ch2 class=\"spec-section-title\"\u003eHighlighted Features\u003c\/h2\u003e\n\u003cdiv class=\"spec-feature-grid\"\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eFunction\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eDouble door sensor switch for cabinet LED strip lighting.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eSensing Method\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eDual-pin design (PIN1, PIN2) detects either of two cabinet doors independently.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003ePower Type\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eSELV (Safety Extra-Low Voltage) input.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eCertification\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eETL and RoHS certified.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eInstallation\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eCompact enclosure designed for direct mounting within cabinet or furniture construction.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\n  .spec-page{\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 40px 16px 24px;\n  }\n  \/* HERO *\/\n  .spec-hero{\n    display: grid;\n    grid-template-columns: 1.05fr 0.95fr;\n    gap: 56px;\n    align-items: center;\n  }\n  .spec-hero-media img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  .spec-title{\n    margin: 0 0 10px;\n    font-size: clamp(28px, 3vw, 40px);\n    line-height: 1.15;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n  }\n  .spec-tagline{\n    margin: 0 0 18px;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 400;\n    color: rgba(0,0,0,0.70);\n    max-width: 46ch;\n  }\n  \/* Stat row: minimal pipe-separated *\/\n  .spec-stats{\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px 14px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    letter-spacing: 0.3px;\n    color: rgba(0,0,0,0.62);\n  }\n  .spec-stats span{\n    position: relative;\n    padding-right: 14px;\n    white-space: nowrap;\n  }\n  .spec-stats span:not(:last-child)::after{\n    content: \"|\";\n    position: absolute;\n    right: 4px;\n    color: rgba(0,0,0,0.28);\n  }\n  \/* CTA button: subtle *\/\n  .spec-btn{\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 12px 16px;\n    border-radius: 10px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 14px;\n    border: 1px solid rgba(0,0,0,0.14);\n    color: rgba(0,0,0,0.86);\n    background: #fff;\n    transition: transform 120ms ease, box-shadow 120ms ease;\n  }\n  .spec-btn:hover{\n    transform: translateY(-1px);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n  }\n  \/* SUPPORT *\/\n  .spec-support{\n    margin-top: 32px;\n  }\n  .spec-support img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  \/* FEATURES *\/\n  .spec-features{\n    margin-top: 40px;\n    padding-top: 26px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n  .spec-section-title{\n    margin: 0 0 18px;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n    color: rgba(0,0,0,0.88);\n  }\n  .spec-feature-grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px 40px;\n    align-items: start;\n  }\n  .spec-feature{\n    display: grid;\n    grid-template-columns: 210px 1fr;\n    gap: 14px;\n  }\n  .spec-feature-label{\n    font-size: 13px;\n    font-weight: 600;\n    color: rgba(0,0,0,0.90);\n    letter-spacing: 0.2px;\n  }\n  .spec-feature-text{\n    font-size: 14px;\n    line-height: 1.6;\n    color: rgba(0,0,0,0.68);\n  }\n  \/* Mobile *\/\n  @media (max-width: 900px){\n    .spec-hero{\n      grid-template-columns: 1fr;\n      gap: 24px;\n      align-items: start;\n    }\n    .spec-stats span{\n      padding-right: 0;\n      white-space: normal;\n    }\n    .spec-stats span:not(:last-child)::after{\n      content: \"\";\n    }\n    .spec-feature-grid{\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n    .spec-feature{\n      grid-template-columns: 1fr;\n      gap: 6px;\n    }\n  }\n\n\/* FULL-WIDTH CAROUSEL *\/\n.spec-carousel{\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  margin-top: -40px;\n  margin-bottom: 26px;\n  overflow: hidden;\n  background: #0b0b0b;\n}\n.spec-carousel-track{\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.spec-carousel-track::-webkit-scrollbar{\n  display: none;\n}\n.spec-carousel-slide{\n  flex: 0 0 100%;\n  scroll-snap-align: center;\n  position: relative;\n  background: #0b0b0b;\n}\n.spec-carousel-slide img{\n  width: 100%;\n  height: auto;\n  display: block;\n}\n.spec-carousel-btn{\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,0.22);\n  background: rgba(0,0,0,0.38);\n  color: #fff;\n  font-size: 22px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition: transform 120ms ease, background 120ms ease;\n}\n.spec-carousel-btn:hover{\n  background: rgba(0,0,0,0.55);\n  transform: translateY(-50%) scale(1.03);\n}\n.spec-carousel-btn.prev{\n  left: 14px;\n}\n.spec-carousel-btn.next{\n  right: 14px;\n}\n.spec-carousel-dots{\n  position: absolute;\n  left: 50%;\n  bottom: 14px;\n  transform: translateX(-50%);\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px;\n  border-radius: 999px;\n  background: rgba(0,0,0,0.28);\n  border: 1px solid rgba(255,255,255,0.12);\n}\n.spec-carousel-dot{\n  width: 8px;\n  height: 8px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.35);\n  border: 0;\n  cursor: pointer;\n}\n.spec-carousel-dot[aria-current=\"true\"]{\n  background: rgba(255,255,255,0.92);\n}\n@media (max-width: 900px){\n  .spec-carousel{\n    margin-top: -24px;\n    margin-bottom: 18px;\n  }\n  .spec-carousel-btn{\n    width: 36px;\n    height: 36px;\n    font-size: 18px;\n  }\n  .spec-carousel-btn.prev{\n    left: 10px;\n  }\n  .spec-carousel-btn.next{\n    right: 10px;\n  }\n  .spec-carousel-dots{\n    bottom: 10px;\n  }\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"C\u0026C Lighting","offers":[{"title":"Default Title","offer_id":42816878280789,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_5_6e7ec8cc-744a-41fa-8105-c3debe5b991b.png?v=1785686505"},{"product_id":"led-touch-sensor-switch","title":"LED Touch Sensor Switch","description":"\u003csection class=\"spec-page\"\u003e\u003c!-- FULL-WIDTH CAROUSEL (Top) --\u003e\n\u003csection class=\"spec-carousel\"\u003e\n\u003cdiv id=\"cobCarousel\" class=\"spec-carousel-track\"\u003e\n\u003cdiv class=\"spec-carousel-slide\"\u003e\u003cimg loading=\"eager\" alt=\"C\u0026amp;C Lighting open shelving LED strip lighting off versus touch activated comparison\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/91bbf7b1-4b08-4639-8021-c6e4e8f63b20.png?v=1785688227\"\u003e\u003c\/div\u003e\n\u003c!-- Add more images like this when you have them --\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"spec-carousel-btn prev\"\u003e‹\u003c\/button\u003e \u003cbutton type=\"button\" class=\"spec-carousel-btn next\"\u003e›\u003c\/button\u003e\n\u003cdiv class=\"spec-carousel-dots\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  const carousel = document.querySelector(\".spec-carousel\");\n  if (!carousel) return;\n  const track = carousel.querySelector(\".spec-carousel-track\");\n  const slides = Array.from(carousel.querySelectorAll(\".spec-carousel-slide\"));\n  const prevBtn = carousel.querySelector(\"[data-carousel-prev]\");\n  const nextBtn = carousel.querySelector(\"[data-carousel-next]\");\n  const dotsWrap = carousel.querySelector(\"[data-carousel-dots]\");\n  if (!track || slides.length === 0) return;\n  let currentIndex = 0;\n  let autoplayTimer = null;\n  const AUTOPLAY_MS = 5000;\n  function slideWidth() {\n    return track.getBoundingClientRect().width;\n  }\n  function clampIndex(i) {\n    if (i \u003c 0) return 0;\n    if (i \u003e slides.length - 1) return slides.length - 1;\n    return i;\n  }\n  function scrollToIndex(i, opts) {\n    currentIndex = clampIndex(i);\n    track.scrollTo({\n      left: currentIndex * slideWidth(),\n      behavior: (opts \u0026\u0026 opts.instant) ? \"auto\" : \"smooth\"\n    });\n    updateDots();\n    updateButtons();\n  }\n  function updateButtons() {\n    if (!prevBtn || !nextBtn) return;\n    prevBtn.disabled = currentIndex === 0;\n    nextBtn.disabled = currentIndex === slides.length - 1;\n    prevBtn.style.opacity = prevBtn.disabled ? \"0.45\" : \"1\";\n    nextBtn.style.opacity = nextBtn.disabled ? \"0.45\" : \"1\";\n    prevBtn.style.pointerEvents = prevBtn.disabled ? \"none\" : \"auto\";\n    nextBtn.style.pointerEvents = nextBtn.disabled ? \"none\" : \"auto\";\n  }\n  function buildDots() {\n    if (!dotsWrap) return;\n    dotsWrap.innerHTML = \"\";\n    slides.forEach((_, i) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"spec-carousel-dot\";\n      btn.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n      btn.addEventListener(\"click\", () =\u003e scrollToIndex(i));\n      dotsWrap.appendChild(btn);\n    });\n    updateDots();\n  }\n  function updateDots() {\n    if (!dotsWrap) return;\n    const dots = Array.from(dotsWrap.querySelectorAll(\".spec-carousel-dot\"));\n    dots.forEach((d, i) =\u003e {\n      const active = i === currentIndex;\n      d.setAttribute(\"aria-current\", active ? \"true\" : \"false\");\n    });\n  }\n  function syncIndexFromScroll() {\n    const w = slideWidth();\n    const i = Math.round(track.scrollLeft \/ w);\n    const next = clampIndex(i);\n    if (next !== currentIndex) {\n      currentIndex = next;\n      updateDots();\n      updateButtons();\n    }\n  }\n  function startAutoplay() {\n    stopAutoplay();\n    autoplayTimer = window.setInterval(() =\u003e {\n      const next = (currentIndex + 1) % slides.length;\n      scrollToIndex(next);\n    }, AUTOPLAY_MS);\n  }\n  function stopAutoplay() {\n    if (autoplayTimer) window.clearInterval(autoplayTimer);\n    autoplayTimer = null;\n  }\n  if (prevBtn) prevBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex - 1));\n  if (nextBtn) nextBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex + 1));\n  track.addEventListener(\"scroll\", () =\u003e {\n    window.requestAnimationFrame(syncIndexFromScroll);\n  });\n  carousel.addEventListener(\"mouseenter\", stopAutoplay);\n  carousel.addEventListener(\"mouseleave\", startAutoplay);\n  carousel.addEventListener(\"focusin\", stopAutoplay);\n  carousel.addEventListener(\"focusout\", startAutoplay);\n  track.addEventListener(\"keydown\", (e) =\u003e {\n    if (e.key === \"ArrowLeft\") scrollToIndex(currentIndex - 1);\n    if (e.key === \"ArrowRight\") scrollToIndex(currentIndex + 1);\n  });\n  window.addEventListener(\"resize\", () =\u003e {\n    scrollToIndex(currentIndex, { instant: true });\n  });\n  buildDots();\n  scrollToIndex(0, { instant: true });\n  startAutoplay();\n})();\n\u003c\/script\u003e \u003c!-- HERO --\u003e\n\u003csection class=\"spec-hero\"\u003e\n\u003cdiv style=\"text-align: start;\" class=\"spec-hero-media\"\u003e\n\u003cbr\u003e\u003cimg alt=\"C\u0026amp;C Lighting LED touch sensor switch with DC connector cable for strip lighting\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_6_da59c518-acb8-4019-99aa-b2b91b06358c.png?v=1785688227\"\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-hero-content\"\u003e\n\u003ch4 class=\"spec-title\"\u003eLED Touch Sensor Switch\u003c\/h4\u003e\n\u003cp class=\"spec-tagline\"\u003eThe LED Touch Sensor Switch is a compact touch-activated controller built to turn LED strip lighting on and off with a simple touch. Wiring inline between a power source and the LED strip, it provides a straightforward touch interface for controlling light without a physical toggle switch.\u003c\/p\u003e\n\u003cdiv class=\"spec-stats\"\u003e\n\u003cspan\u003eDC 12V-24V\u003c\/span\u003e \u003cspan\u003e60W-120W Power\u003c\/span\u003e \u003cspan\u003eSimple Touch Control\u003c\/span\u003e \u003cspan\u003eNo Remote or App Needed\u003c\/span\u003e \u003cspan\u003eCE Certified\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/LED_Touch_Sensor_Switch.pdf?v=1785688227\" class=\"spec-btn\" rel=\"noopener\" title=\"LED Touch Sensor Switch Spec Sheet\" target=\"_blank\"\u003e Download Spec Sheet \u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- SUPPORT VISUAL --\u003e\u003c!-- FEATURES --\u003e\n\u003csection class=\"spec-features\"\u003e\n\u003ch2 class=\"spec-section-title\"\u003eHighlighted Features\u003c\/h2\u003e\n\u003cdiv class=\"spec-feature-grid\"\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eFunction\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eTouch-activated switch for LED strip on\/off control.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eControl Method\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eSimple touch interface, no remote or app required.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eWiring\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eWires inline between power source and LED strip.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eCertification\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eCE certified.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\n  .spec-page{\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 40px 16px 24px;\n  }\n  \/* HERO *\/\n  .spec-hero{\n    display: grid;\n    grid-template-columns: 1.05fr 0.95fr;\n    gap: 56px;\n    align-items: center;\n  }\n  .spec-hero-media img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  .spec-title{\n    margin: 0 0 10px;\n    font-size: clamp(28px, 3vw, 40px);\n    line-height: 1.15;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n  }\n  .spec-tagline{\n    margin: 0 0 18px;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 400;\n    color: rgba(0,0,0,0.70);\n    max-width: 46ch;\n  }\n  \/* Stat row: minimal pipe-separated *\/\n  .spec-stats{\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px 14px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    letter-spacing: 0.3px;\n    color: rgba(0,0,0,0.62);\n  }\n  .spec-stats span{\n    position: relative;\n    padding-right: 14px;\n    white-space: nowrap;\n  }\n  .spec-stats span:not(:last-child)::after{\n    content: \"|\";\n    position: absolute;\n    right: 4px;\n    color: rgba(0,0,0,0.28);\n  }\n  \/* CTA button: subtle *\/\n  .spec-btn{\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 12px 16px;\n    border-radius: 10px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 14px;\n    border: 1px solid rgba(0,0,0,0.14);\n    color: rgba(0,0,0,0.86);\n    background: #fff;\n    transition: transform 120ms ease, box-shadow 120ms ease;\n  }\n  .spec-btn:hover{\n    transform: translateY(-1px);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n  }\n  \/* SUPPORT *\/\n  .spec-support{\n    margin-top: 32px;\n  }\n  .spec-support img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  \/* FEATURES *\/\n  .spec-features{\n    margin-top: 40px;\n    padding-top: 26px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n  .spec-section-title{\n    margin: 0 0 18px;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n    color: rgba(0,0,0,0.88);\n  }\n  .spec-feature-grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px 40px;\n    align-items: start;\n  }\n  .spec-feature{\n    display: grid;\n    grid-template-columns: 210px 1fr;\n    gap: 14px;\n  }\n  .spec-feature-label{\n    font-size: 13px;\n    font-weight: 600;\n    color: rgba(0,0,0,0.90);\n    letter-spacing: 0.2px;\n  }\n  .spec-feature-text{\n    font-size: 14px;\n    line-height: 1.6;\n    color: rgba(0,0,0,0.68);\n  }\n  \/* Mobile *\/\n  @media (max-width: 900px){\n    .spec-hero{\n      grid-template-columns: 1fr;\n      gap: 24px;\n      align-items: start;\n    }\n    .spec-stats span{\n      padding-right: 0;\n      white-space: normal;\n    }\n    .spec-stats span:not(:last-child)::after{\n      content: \"\";\n    }\n    .spec-feature-grid{\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n    .spec-feature{\n      grid-template-columns: 1fr;\n      gap: 6px;\n    }\n  }\n\n\/* FULL-WIDTH CAROUSEL *\/\n.spec-carousel{\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  margin-top: -40px;\n  margin-bottom: 26px;\n  overflow: hidden;\n  background: #0b0b0b;\n}\n.spec-carousel-track{\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.spec-carousel-track::-webkit-scrollbar{\n  display: none;\n}\n.spec-carousel-slide{\n  flex: 0 0 100%;\n  scroll-snap-align: center;\n  position: relative;\n  background: #0b0b0b;\n}\n.spec-carousel-slide img{\n  width: 100%;\n  height: auto;\n  display: block;\n}\n.spec-carousel-btn{\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,0.22);\n  background: rgba(0,0,0,0.38);\n  color: #fff;\n  font-size: 22px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition: transform 120ms ease, background 120ms ease;\n}\n.spec-carousel-btn:hover{\n  background: rgba(0,0,0,0.55);\n  transform: translateY(-50%) scale(1.03);\n}\n.spec-carousel-btn.prev{\n  left: 14px;\n}\n.spec-carousel-btn.next{\n  right: 14px;\n}\n.spec-carousel-dots{\n  position: absolute;\n  left: 50%;\n  bottom: 14px;\n  transform: translateX(-50%);\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px;\n  border-radius: 999px;\n  background: rgba(0,0,0,0.28);\n  border: 1px solid rgba(255,255,255,0.12);\n}\n.spec-carousel-dot{\n  width: 8px;\n  height: 8px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.35);\n  border: 0;\n  cursor: pointer;\n}\n.spec-carousel-dot[aria-current=\"true\"]{\n  background: rgba(255,255,255,0.92);\n}\n@media (max-width: 900px){\n  .spec-carousel{\n    margin-top: -24px;\n    margin-bottom: 18px;\n  }\n  .spec-carousel-btn{\n    width: 36px;\n    height: 36px;\n    font-size: 18px;\n  }\n  .spec-carousel-btn.prev{\n    left: 10px;\n  }\n  .spec-carousel-btn.next{\n    right: 10px;\n  }\n  .spec-carousel-dots{\n    bottom: 10px;\n  }\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"C\u0026C Lighting","offers":[{"title":"Default Title","offer_id":42816881360981,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_6_da59c518-acb8-4019-99aa-b2b91b06358c.png?v=1785688227"},{"product_id":"stair-light-control-system","title":"Stair Light Control System","description":"\u003csection class=\"spec-page\"\u003e\u003c!-- FULL-WIDTH CAROUSEL (Top) --\u003e\n\u003csection class=\"spec-carousel\"\u003e\n\u003cdiv id=\"cobCarousel\" class=\"spec-carousel-track\"\u003e\n\u003cdiv class=\"spec-carousel-slide\"\u003e\u003cimg loading=\"eager\" alt=\"C\u0026amp;C Lighting stair step LED strip lighting installed on each stair tread warm white\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/6279b440-39e6-4d03-8e24-f8520073d6c9.png?v=1785691498\"\u003e\u003c\/div\u003e\n\u003c!-- Add more images like this when you have them --\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"spec-carousel-btn prev\"\u003e‹\u003c\/button\u003e \u003cbutton type=\"button\" class=\"spec-carousel-btn next\"\u003e›\u003c\/button\u003e\n\u003cdiv class=\"spec-carousel-dots\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n(function () {\n  const carousel = document.querySelector(\".spec-carousel\");\n  if (!carousel) return;\n  const track = carousel.querySelector(\".spec-carousel-track\");\n  const slides = Array.from(carousel.querySelectorAll(\".spec-carousel-slide\"));\n  const prevBtn = carousel.querySelector(\"[data-carousel-prev]\");\n  const nextBtn = carousel.querySelector(\"[data-carousel-next]\");\n  const dotsWrap = carousel.querySelector(\"[data-carousel-dots]\");\n  if (!track || slides.length === 0) return;\n  let currentIndex = 0;\n  let autoplayTimer = null;\n  const AUTOPLAY_MS = 5000;\n  function slideWidth() {\n    return track.getBoundingClientRect().width;\n  }\n  function clampIndex(i) {\n    if (i \u003c 0) return 0;\n    if (i \u003e slides.length - 1) return slides.length - 1;\n    return i;\n  }\n  function scrollToIndex(i, opts) {\n    currentIndex = clampIndex(i);\n    track.scrollTo({\n      left: currentIndex * slideWidth(),\n      behavior: (opts \u0026\u0026 opts.instant) ? \"auto\" : \"smooth\"\n    });\n    updateDots();\n    updateButtons();\n  }\n  function updateButtons() {\n    if (!prevBtn || !nextBtn) return;\n    prevBtn.disabled = currentIndex === 0;\n    nextBtn.disabled = currentIndex === slides.length - 1;\n    prevBtn.style.opacity = prevBtn.disabled ? \"0.45\" : \"1\";\n    nextBtn.style.opacity = nextBtn.disabled ? \"0.45\" : \"1\";\n    prevBtn.style.pointerEvents = prevBtn.disabled ? \"none\" : \"auto\";\n    nextBtn.style.pointerEvents = nextBtn.disabled ? \"none\" : \"auto\";\n  }\n  function buildDots() {\n    if (!dotsWrap) return;\n    dotsWrap.innerHTML = \"\";\n    slides.forEach((_, i) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"spec-carousel-dot\";\n      btn.setAttribute(\"aria-label\", \"Go to slide \" + (i + 1));\n      btn.addEventListener(\"click\", () =\u003e scrollToIndex(i));\n      dotsWrap.appendChild(btn);\n    });\n    updateDots();\n  }\n  function updateDots() {\n    if (!dotsWrap) return;\n    const dots = Array.from(dotsWrap.querySelectorAll(\".spec-carousel-dot\"));\n    dots.forEach((d, i) =\u003e {\n      const active = i === currentIndex;\n      d.setAttribute(\"aria-current\", active ? \"true\" : \"false\");\n    });\n  }\n  function syncIndexFromScroll() {\n    const w = slideWidth();\n    const i = Math.round(track.scrollLeft \/ w);\n    const next = clampIndex(i);\n    if (next !== currentIndex) {\n      currentIndex = next;\n      updateDots();\n      updateButtons();\n    }\n  }\n  function startAutoplay() {\n    stopAutoplay();\n    autoplayTimer = window.setInterval(() =\u003e {\n      const next = (currentIndex + 1) % slides.length;\n      scrollToIndex(next);\n    }, AUTOPLAY_MS);\n  }\n  function stopAutoplay() {\n    if (autoplayTimer) window.clearInterval(autoplayTimer);\n    autoplayTimer = null;\n  }\n  if (prevBtn) prevBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex - 1));\n  if (nextBtn) nextBtn.addEventListener(\"click\", () =\u003e scrollToIndex(currentIndex + 1));\n  track.addEventListener(\"scroll\", () =\u003e {\n    window.requestAnimationFrame(syncIndexFromScroll);\n  });\n  carousel.addEventListener(\"mouseenter\", stopAutoplay);\n  carousel.addEventListener(\"mouseleave\", startAutoplay);\n  carousel.addEventListener(\"focusin\", stopAutoplay);\n  carousel.addEventListener(\"focusout\", startAutoplay);\n  track.addEventListener(\"keydown\", (e) =\u003e {\n    if (e.key === \"ArrowLeft\") scrollToIndex(currentIndex - 1);\n    if (e.key === \"ArrowRight\") scrollToIndex(currentIndex + 1);\n  });\n  window.addEventListener(\"resize\", () =\u003e {\n    scrollToIndex(currentIndex, { instant: true });\n  });\n  buildDots();\n  scrollToIndex(0, { instant: true });\n  startAutoplay();\n})();\n\u003c\/script\u003e \u003c!-- HERO --\u003e\n\u003csection class=\"spec-hero\"\u003e\n\u003cdiv style=\"text-align: start;\" class=\"spec-hero-media\"\u003e\n\u003cbr\u003e\u003cimg alt=\"C\u0026amp;C Lighting V3-STEP-3003 Bluetooth stair light controller with 30 step ports\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_5_4ca9716d-5730-4f13-ba55-f3458d5921f5.png?v=1785691498\"\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-hero-content\"\u003e\n\u003ch4 class=\"spec-title\"\u003eStair Light Control System\u003c\/h4\u003e\n\u003cp class=\"spec-tagline\"\u003eThe Stair Light Control System is a Bluetooth-enabled step lighting controller built to drive up to 30 individual stair step LED runs plus 2 flash LED strip zones from a single unit. Using dual motion sensors placed at the top and bottom of a staircase, it automatically triggers step-by-step illumination as someone approaches from either direction, with 18 built-in induction lighting modes.\u003c\/p\u003e\n\u003cdiv class=\"spec-stats\"\u003e\n\u003cspan\u003eDC24V Input\/Output\u003c\/span\u003e \u003cspan\u003e30 Step Ports\u003c\/span\u003e \u003cspan\u003e2 Flash LED Ports\u003c\/span\u003e \u003cspan\u003e18 Lighting Modes\u003c\/span\u003e \u003cspan\u003eBluetooth + App Control\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Stair_Light_Control_System.pdf?v=1785691498\" class=\"spec-btn\" rel=\"noopener\" title=\"Stair Light Control System Spec Sheet\" target=\"_blank\"\u003e Download Spec Sheet \u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- SUPPORT VISUAL --\u003e\u003c!-- FEATURES --\u003e\n\u003csection class=\"spec-features\"\u003e\n\u003ch2 class=\"spec-section-title\"\u003eHighlighted Features\u003c\/h2\u003e\n\u003cdiv class=\"spec-feature-grid\"\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eControl Type\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eBluetooth controller with onboard A\/B\/C\/D buttons and companion mobile app.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eSensor Input\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eDual DC5V sensor ports; Sensor A detects downstairs approach, Sensor B detects upstairs approach.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eStep Outputs\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003e30 individually wired step LED strip ports for sequential per-step control.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eFlash LED Support\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003e2 dedicated ports for flash LED strip zones, compatible with 2811\/1903\/16703P IC types.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eLighting Modes\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003e18 built-in induction lighting modes including all-bright, meteor trail, chasing, and running water effects; over 200 additional modes available via the app.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eButton Functions\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eA button sets flash LED strip pixel count, B button sets step quantity and strip sequence, C button adjusts brightness and speed, D button selects lighting mode.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-feature\"\u003e\n\u003cdiv class=\"spec-feature-label\"\u003eSafety\u003c\/div\u003e\n\u003cdiv class=\"spec-feature-text\"\u003eShort circuit protection built in; not waterproof, rated for indoor dry environments only.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e\n  .spec-page{\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 40px 16px 24px;\n  }\n  \/* HERO *\/\n  .spec-hero{\n    display: grid;\n    grid-template-columns: 1.05fr 0.95fr;\n    gap: 56px;\n    align-items: center;\n  }\n  .spec-hero-media img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  .spec-title{\n    margin: 0 0 10px;\n    font-size: clamp(28px, 3vw, 40px);\n    line-height: 1.15;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n  }\n  .spec-tagline{\n    margin: 0 0 18px;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 400;\n    color: rgba(0,0,0,0.70);\n    max-width: 46ch;\n  }\n  \/* Stat row: minimal pipe-separated *\/\n  .spec-stats{\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px 14px;\n    margin: 0 0 22px;\n    font-size: 13px;\n    letter-spacing: 0.3px;\n    color: rgba(0,0,0,0.62);\n  }\n  .spec-stats span{\n    position: relative;\n    padding-right: 14px;\n    white-space: nowrap;\n  }\n  .spec-stats span:not(:last-child)::after{\n    content: \"|\";\n    position: absolute;\n    right: 4px;\n    color: rgba(0,0,0,0.28);\n  }\n  \/* CTA button: subtle *\/\n  .spec-btn{\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 12px 16px;\n    border-radius: 10px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 14px;\n    border: 1px solid rgba(0,0,0,0.14);\n    color: rgba(0,0,0,0.86);\n    background: #fff;\n    transition: transform 120ms ease, box-shadow 120ms ease;\n  }\n  .spec-btn:hover{\n    transform: translateY(-1px);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n  }\n  \/* SUPPORT *\/\n  .spec-support{\n    margin-top: 32px;\n  }\n  .spec-support img{\n    width: 100%;\n    height: auto;\n    display: block;\n    border-radius: 14px;\n  }\n  \/* FEATURES *\/\n  .spec-features{\n    margin-top: 40px;\n    padding-top: 26px;\n    border-top: 1px solid rgba(0,0,0,0.08);\n  }\n  .spec-section-title{\n    margin: 0 0 18px;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: 0.2px;\n    color: rgba(0,0,0,0.88);\n  }\n  .spec-feature-grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px 40px;\n    align-items: start;\n  }\n  .spec-feature{\n    display: grid;\n    grid-template-columns: 210px 1fr;\n    gap: 14px;\n  }\n  .spec-feature-label{\n    font-size: 13px;\n    font-weight: 600;\n    color: rgba(0,0,0,0.90);\n    letter-spacing: 0.2px;\n  }\n  .spec-feature-text{\n    font-size: 14px;\n    line-height: 1.6;\n    color: rgba(0,0,0,0.68);\n  }\n  \/* Mobile *\/\n  @media (max-width: 900px){\n    .spec-hero{\n      grid-template-columns: 1fr;\n      gap: 24px;\n      align-items: start;\n    }\n    .spec-stats span{\n      padding-right: 0;\n      white-space: normal;\n    }\n    .spec-stats span:not(:last-child)::after{\n      content: \"\";\n    }\n    .spec-feature-grid{\n      grid-template-columns: 1fr;\n      gap: 14px;\n    }\n    .spec-feature{\n      grid-template-columns: 1fr;\n      gap: 6px;\n    }\n  }\n\n\/* FULL-WIDTH CAROUSEL *\/\n.spec-carousel{\n  position: relative;\n  width: 100vw;\n  left: 50%;\n  right: 50%;\n  margin-left: -50vw;\n  margin-right: -50vw;\n  margin-top: -40px;\n  margin-bottom: 26px;\n  overflow: hidden;\n  background: #0b0b0b;\n}\n.spec-carousel-track{\n  display: flex;\n  overflow-x: auto;\n  scroll-snap-type: x mandatory;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch;\n  scrollbar-width: none;\n}\n.spec-carousel-track::-webkit-scrollbar{\n  display: none;\n}\n.spec-carousel-slide{\n  flex: 0 0 100%;\n  scroll-snap-align: center;\n  position: relative;\n  background: #0b0b0b;\n}\n.spec-carousel-slide img{\n  width: 100%;\n  height: auto;\n  display: block;\n}\n.spec-carousel-btn{\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 42px;\n  height: 42px;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,0.22);\n  background: rgba(0,0,0,0.38);\n  color: #fff;\n  font-size: 22px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition: transform 120ms ease, background 120ms ease;\n}\n.spec-carousel-btn:hover{\n  background: rgba(0,0,0,0.55);\n  transform: translateY(-50%) scale(1.03);\n}\n.spec-carousel-btn.prev{\n  left: 14px;\n}\n.spec-carousel-btn.next{\n  right: 14px;\n}\n.spec-carousel-dots{\n  position: absolute;\n  left: 50%;\n  bottom: 14px;\n  transform: translateX(-50%);\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px;\n  border-radius: 999px;\n  background: rgba(0,0,0,0.28);\n  border: 1px solid rgba(255,255,255,0.12);\n}\n.spec-carousel-dot{\n  width: 8px;\n  height: 8px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.35);\n  border: 0;\n  cursor: pointer;\n}\n.spec-carousel-dot[aria-current=\"true\"]{\n  background: rgba(255,255,255,0.92);\n}\n@media (max-width: 900px){\n  .spec-carousel{\n    margin-top: -24px;\n    margin-bottom: 18px;\n  }\n  .spec-carousel-btn{\n    width: 36px;\n    height: 36px;\n    font-size: 18px;\n  }\n  .spec-carousel-btn.prev{\n    left: 10px;\n  }\n  .spec-carousel-btn.next{\n    right: 10px;\n  }\n  .spec-carousel-dots{\n    bottom: 10px;\n  }\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e","brand":"C\u0026C Lighting","offers":[{"title":"Default Title","offer_id":42816982876245,"sku":null,"price":0.0,"currency_code":"CAD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/files\/Product_Photo_Dimension_Guide_5_4ca9716d-5730-4f13-ba55-f3458d5921f5.png?v=1785691498"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/0548\/collections\/ProductPhotoDimensionGuide_5_c7bcf696-c240-45e4-b3c2-b7d11cba9a30.png?v=1785692894","url":"https:\/\/candclight.com\/collections\/sensors.oembed","provider":"C\u0026C Lighting","version":"1.0","type":"link"}