{"id":1456,"date":"2026-03-20T01:13:03","date_gmt":"2026-03-20T01:13:03","guid":{"rendered":"https:\/\/gqlamp.com\/?page_id=1456"},"modified":"2026-03-20T01:23:12","modified_gmt":"2026-03-20T01:23:12","slug":"outdoor-spotlight-selection-calculator","status":"publish","type":"page","link":"https:\/\/gqlamp.com\/ar\/facade-architectural-lighting\/outdoor-spot-light\/outdoor-spotlight-selection-calculator\/","title":{"rendered":"\u062d\u0627\u0633\u0628\u0629 \u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0623\u0636\u0648\u0627\u0621 \u0627\u0644\u062e\u0627\u0631\u062c\u064a\u0629"},"content":{"rendered":"\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-60dbce3\" data-block-id=\"60dbce3\"><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-60dbce3-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-8c5576d\" data-v=\"4\" data-block-id=\"8c5576d\"><style>.stk-8c5576d-container{margin-top:50px !important;margin-right:50px !important;margin-bottom:50px !important;margin-left:50px !important;}<\/style><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-8c5576d-container stk--no-background stk--no-padding\"><div class=\"has-text-align-center stk-block-content stk-inner-blocks stk-8c5576d-inner-blocks\">\n<h1>Outdoor Spotlight Calculator<\/h1>\n<\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-a20068d\" data-block-id=\"a20068d\"><div class=\"stk-row stk-inner-blocks has-text-align-center stk-block-content stk-content-align stk-a20068d-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-8fc9a2b\" data-v=\"4\" data-block-id=\"8fc9a2b\"><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-8fc9a2b-container stk--no-background stk--no-padding\"><div class=\"stk-block-content stk-inner-blocks stk-8fc9a2b-inner-blocks\"><div class=\"ct-breadcrumbs\" data-source=\"rankmath\" ><nav aria-label=\"breadcrumbs\" class=\"rank-math-breadcrumb\"><p><span class=\"last\">Home<\/span><\/p><\/nav><\/div><\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-90193a1\" data-block-id=\"90193a1\"><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-90193a1-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-811324d\" data-v=\"4\" data-block-id=\"811324d\"><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-811324d-container stk--no-background stk--no-padding\"><div class=\"stk-block-content stk-inner-blocks stk-811324d-inner-blocks\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Mono:wght@500;600&#038;display=swap\" rel=\"stylesheet\">\n\n<section id=\"bx-spot-selector-v1\">\n  <div class=\"bx-wrap\">\n\n    <div class=\"bx-header\">\n      <h2>Outdoor Spotlight Selection Calculator<\/h2>\n      <p class=\"bx-subtitle\">Answer four quick questions and we&#8217;ll match you with the ideal Guangqi Lighting spotlight series for your project.<\/p>\n    <\/div>\n\n    <div class=\"bx-form-grid\">\n\n      <div class=\"bx-field\">\n        <h3>1. Application Type<\/h3>\n        <p class=\"bx-hint\">What will the spotlight illuminate?<\/p>\n        <div class=\"bx-select-wrap\">\n          <select id=\"bx-app-type\">\n            <option value=\"\" disabled selected>Select application&#8230;<\/option>\n            <option value=\"garden\">Garden \/ Shrub Accent<\/option>\n            <option value=\"tree\">Tree Uplighting<\/option>\n            <option value=\"facade\">Building Facade<\/option>\n            <option value=\"pathway\">Pathway \/ Walkway<\/option>\n            <option value=\"plaza\">Commercial Plaza<\/option>\n            <option value=\"bridge\">Bridge \/ Municipal<\/option>\n            <option value=\"water\">Water Feature<\/option>\n            <option value=\"signage\">Signage<\/option>\n          <\/select>\n          <span class=\"bx-select-arrow\" aria-hidden=\"true\"><\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"bx-field\">\n        <h3>2. Throw Distance<\/h3>\n        <p class=\"bx-hint\">How far should the light reach?<\/p>\n        <div class=\"bx-select-wrap\">\n          <select id=\"bx-throw\">\n            <option value=\"\" disabled selected>Select distance&#8230;<\/option>\n            <option value=\"under3\">Under 3 m<\/option>\n            <option value=\"3to8\">3 &ndash; 8 m<\/option>\n            <option value=\"8to15\">8 &ndash; 15 m<\/option>\n            <option value=\"15to30\">15 &ndash; 30 m<\/option>\n            <option value=\"over30\">Over 30 m<\/option>\n          <\/select>\n          <span class=\"bx-select-arrow\" aria-hidden=\"true\"><\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"bx-field\">\n        <h3>3. Control Requirement<\/h3>\n        <p class=\"bx-hint\">How will you control the fixtures?<\/p>\n        <div class=\"bx-radio-group\" role=\"radiogroup\" aria-label=\"Control requirement\">\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-control\" value=\"onoff\">\n            <span class=\"bx-radio-btn\">Simple ON \/ OFF<\/span>\n          <\/label>\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-control\" value=\"dimmable\">\n            <span class=\"bx-radio-btn\">Dimmable (0-10V)<\/span>\n          <\/label>\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-control\" value=\"dmx\">\n            <span class=\"bx-radio-btn\">DMX512 \/ RGBW Smart<\/span>\n          <\/label>\n        <\/div>\n      <\/div>\n\n      <div class=\"bx-field\">\n        <h3>4. Installation Method<\/h3>\n        <p class=\"bx-hint\">How will the spotlight be mounted?<\/p>\n        <div class=\"bx-radio-group\" role=\"radiogroup\" aria-label=\"Installation method\">\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-install\" value=\"ground\">\n            <span class=\"bx-radio-btn\">Ground Mount<\/span>\n          <\/label>\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-install\" value=\"wall\">\n            <span class=\"bx-radio-btn\">Wall Mount<\/span>\n          <\/label>\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-install\" value=\"pole\">\n            <span class=\"bx-radio-btn\">Pole Mount<\/span>\n          <\/label>\n          <label class=\"bx-radio-label\">\n            <input type=\"radio\" name=\"bx-install\" value=\"recessed\">\n            <span class=\"bx-radio-btn\">Recessed<\/span>\n          <\/label>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <div class=\"bx-submit-row\">\n      <button type=\"button\" id=\"bx-calc-btn\" class=\"bx-btn-primary\">Find My Spotlight<\/button>\n      <p class=\"bx-validation-msg\" id=\"bx-validation\" aria-live=\"polite\"><\/p>\n    <\/div>\n\n    <div class=\"bx-results\" id=\"bx-results\" style=\"display:none;\">\n      <h2 class=\"bx-results-title\">Recommended Spotlight Series<\/h2>\n      <div class=\"bx-cards\" id=\"bx-cards\"><\/div>\n      <p class=\"bx-disclaimer\">Recommendations are based on typical project parameters. For exact specifications, request a custom quote from our engineering team.<\/p>\n    <\/div>\n    \n    <a href=\"#ct-popup-801\" id=\"bx-hidden-popup-trigger\" style=\"display:none;\" aria-hidden=\"true\"><\/a>\n\n  <\/div>\n<\/section>\n\n<style>\n\/* ===== SCOPED STYLES ===== *\/\n#bx-spot-selector-v1 {\n  --bx-primary: #183090;\n  --bx-accent: #009048;\n  --bx-red: #D81818;\n  --bx-dark: #303030;\n  --bx-bg: #F4F6FB;\n  --bx-card-bg: #FFFFFF;\n  --bx-border: #D0D5E2;\n  --bx-radius: 10px;\n}\n\n#bx-spot-selector-v1 *,\n#bx-spot-selector-v1 *::before,\n#bx-spot-selector-v1 *::after {\n  box-sizing: border-box;\n}\n\n#bx-spot-selector-v1 .bx-wrap {\n  max-width: 1000px;\n  margin: 0 auto;\n  padding: 40px 24px 48px;\n}\n\n\/* ---------- HEADER ---------- *\/\n#bx-spot-selector-v1 .bx-header {\n  text-align: center;\n  margin-bottom: 36px;\n}\n\n#bx-spot-selector-v1 .bx-header h2 {\n  font-family: inherit !important;\n  font-weight: 700 !important;\n  color: var(--bx-primary);\n  margin: 0 0 10px;\n  line-height: 1.25;\n}\n\n#bx-spot-selector-v1 .bx-subtitle {\n  font-size: 16px;\n  color: #555;\n  max-width: 640px;\n  margin: 0 auto;\n  line-height: 1.55;\n}\n\n\/* ---------- FORM GRID ---------- *\/\n#bx-spot-selector-v1 .bx-form-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 28px 36px;\n}\n\n#bx-spot-selector-v1 .bx-field {\n  background: var(--bx-card-bg);\n  border: 1px solid var(--bx-border);\n  border-radius: var(--bx-radius);\n  padding: 22px 24px 24px;\n  transition: box-shadow .2s;\n}\n\n#bx-spot-selector-v1 .bx-field:hover {\n  box-shadow: 0 2px 12px rgba(24,48,144,.10);\n}\n\n#bx-spot-selector-v1 .bx-field h3 {\n  font-family: inherit !important;\n  font-weight: 700 !important;\n  font-size: 16px;\n  color: var(--bx-primary);\n  margin: 0 0 4px;\n  line-height: 1.3;\n}\n\n#bx-spot-selector-v1 .bx-hint {\n  font-size: 13px;\n  color: #777;\n  margin: 0 0 14px;\n}\n\n\/* ---------- SELECT ---------- *\/\n#bx-spot-selector-v1 .bx-select-wrap {\n  position: relative;\n}\n\n#bx-spot-selector-v1 select {\n  width: 100%;\n  height: 44px !important;\n  appearance: none !important;\n  -webkit-appearance: none !important;\n  -moz-appearance: none !important;\n  background: #FAFBFD;\n  border: 1.5px solid var(--bx-border);\n  border-radius: 6px;\n  padding: 0 40px 0 14px;\n  font-size: 14px;\n  color: var(--bx-dark);\n  cursor: pointer;\n  transition: border-color .2s;\n}\n\n#bx-spot-selector-v1 select:focus {\n  outline: none;\n  border-color: var(--bx-primary);\n  box-shadow: 0 0 0 3px rgba(24,48,144,.12);\n}\n\n#bx-spot-selector-v1 select option {\n  color: #000018 !important;\n  background: #FFFFFF !important;\n}\n\n#bx-spot-selector-v1 .bx-select-arrow {\n  position: absolute;\n  right: 14px;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 6px solid var(--bx-primary);\n  pointer-events: none;\n}\n\n\/* ---------- RADIO BUTTONS ---------- *\/\n#bx-spot-selector-v1 .bx-radio-group {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n#bx-spot-selector-v1 .bx-radio-label {\n  position: relative;\n  cursor: pointer;\n  flex: 1 1 auto;\n  min-width: 0;\n}\n\n#bx-spot-selector-v1 .bx-radio-label input[type=\"radio\"] {\n  position: absolute !important;\n  opacity: 0 !important;\n  width: 0;\n  height: 0;\n}\n\n#bx-spot-selector-v1 .bx-radio-btn {\n  display: block;\n  text-align: center;\n  font-size: 13px;\n  font-weight: 500;\n  padding: 9px 12px;\n  border: 1.5px solid var(--bx-border);\n  border-radius: 6px;\n  background: #FAFBFD;\n  color: var(--bx-dark);\n  transition: all .2s;\n  white-space: nowrap;\n}\n\n#bx-spot-selector-v1 .bx-radio-label input[type=\"radio\"]:checked + .bx-radio-btn {\n  border-color: var(--bx-primary);\n  background: var(--bx-primary);\n  color: #fff;\n  box-shadow: 0 2px 8px rgba(24,48,144,.22);\n}\n\n#bx-spot-selector-v1 .bx-radio-label input[type=\"radio\"]:focus-visible + .bx-radio-btn {\n  outline: 2px solid var(--bx-accent);\n  outline-offset: 2px;\n}\n\n#bx-spot-selector-v1 .bx-radio-btn:hover {\n  border-color: var(--bx-primary);\n  background: rgba(24,48,144,.06);\n}\n\n\/* ---------- SUBMIT ---------- *\/\n#bx-spot-selector-v1 .bx-submit-row {\n  text-align: center;\n  margin-top: 32px;\n}\n\n#bx-spot-selector-v1 .bx-btn-primary {\n  display: inline-block;\n  background: var(--bx-accent);\n  color: #fff;\n  font-size: 16px;\n  font-weight: 700;\n  border: none;\n  border-radius: 8px;\n  padding: 14px 48px;\n  cursor: pointer;\n  transition: background .2s, transform .15s;\n  letter-spacing: .02em;\n}\n\n#bx-spot-selector-v1 .bx-btn-primary:hover {\n  background: #007a3b;\n  transform: translateY(-1px);\n}\n\n#bx-spot-selector-v1 .bx-btn-primary:active {\n  transform: translateY(0);\n}\n\n#bx-spot-selector-v1 .bx-validation-msg {\n  font-size: 13px;\n  color: var(--bx-red);\n  margin: 10px 0 0;\n  min-height: 18px;\n}\n\n\/* ---------- RESULTS ---------- *\/\n#bx-spot-selector-v1 .bx-results {\n  margin-top: 40px;\n  animation: bxFadeIn .4s ease;\n}\n\n@keyframes bxFadeIn {\n  from { opacity: 0; transform: translateY(12px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n\n\/* \u5339\u914d H2 \u7684\u6837\u5f0f\u4fee\u6539 *\/\n#bx-spot-selector-v1 .bx-results-title {\n  font-family: inherit !important;\n  font-weight: 700 !important;\n  font-size: 20px;\n  color: var(--bx-primary);\n  text-align: center;\n  margin: 0 0 24px;\n}\n\n#bx-spot-selector-v1 .bx-cards {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n}\n\n\/* Single card *\/\n#bx-spot-selector-v1 .bx-card {\n  background: var(--bx-card-bg);\n  border: 1.5px solid var(--bx-border);\n  border-radius: var(--bx-radius);\n  padding: 28px 28px 24px;\n  position: relative;\n  overflow: hidden;\n}\n\n#bx-spot-selector-v1 .bx-card::before {\n  content: '';\n  position: absolute;\n  top: 0; left: 0;\n  width: 5px;\n  height: 100%;\n}\n\n#bx-spot-selector-v1 .bx-card.bx-fit-excellent::before { background: var(--bx-accent); }\n#bx-spot-selector-v1 .bx-card.bx-fit-good::before     { background: var(--bx-primary); }\n#bx-spot-selector-v1 .bx-card.bx-fit-acceptable::before { background: #B8860B; }\n\n\/* Card header *\/\n#bx-spot-selector-v1 .bx-card-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 14px;\n}\n\n\/* \u6539\u4e3a H3 \u4ee5\u7b26\u5408\u8bed\u4e49\u5c42\u7ea7 (\u4ece H4 \u53d8\u6765) *\/\n#bx-spot-selector-v1 .bx-card h3 {\n  font-family: inherit !important;\n  font-weight: 700 !important;\n  font-size: 17px;\n  color: var(--bx-dark);\n  margin: 0;\n  line-height: 1.3;\n}\n\n#bx-spot-selector-v1 .bx-card h3 .bx-model {\n  font-family: 'IBM Plex Mono', monospace;\n  font-weight: 600;\n  color: var(--bx-primary);\n  margin-right: 6px;\n}\n\n#bx-spot-selector-v1 .bx-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 12px;\n  font-weight: 600;\n  padding: 4px 12px;\n  border-radius: 20px;\n  white-space: nowrap;\n}\n\n#bx-spot-selector-v1 .bx-badge-excellent {\n  background: rgba(0,144,72,.10);\n  color: #007a3b;\n}\n#bx-spot-selector-v1 .bx-badge-good {\n  background: rgba(24,48,144,.10);\n  color: var(--bx-primary);\n}\n#bx-spot-selector-v1 .bx-badge-acceptable {\n  background: rgba(184,134,11,.10);\n  color: #8B6914;\n}\n\n#bx-spot-selector-v1 .bx-badge-dot {\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  display: inline-block;\n}\n#bx-spot-selector-v1 .bx-badge-excellent .bx-badge-dot { background: var(--bx-accent); }\n#bx-spot-selector-v1 .bx-badge-good .bx-badge-dot      { background: var(--bx-primary); }\n#bx-spot-selector-v1 .bx-badge-acceptable .bx-badge-dot { background: #B8860B; }\n\n\/* Specs grid *\/\n#bx-spot-selector-v1 .bx-specs {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));\n  gap: 10px 16px;\n  margin-bottom: 18px;\n}\n\n#bx-spot-selector-v1 .bx-spec-item {\n  font-size: 13px;\n  color: #555;\n  line-height: 1.5;\n}\n\n#bx-spot-selector-v1 .bx-spec-label {\n  font-weight: 600;\n  color: var(--bx-dark);\n  margin-right: 4px;\n}\n\n#bx-spot-selector-v1 .bx-spec-val {\n  font-family: 'IBM Plex Mono', monospace;\n  font-weight: 500;\n  color: var(--bx-primary);\n}\n\n#bx-spot-selector-v1 .bx-card-reason {\n  font-size: 13px;\n  color: #666;\n  margin: 0 0 18px;\n  line-height: 1.55;\n  padding: 10px 14px;\n  background: #F6F8FD;\n  border-radius: 6px;\n  border-left: 3px solid var(--bx-primary);\n}\n\n\/* CTA *\/\n#bx-spot-selector-v1 .bx-cta {\n  display: inline-block;\n  background: var(--bx-primary);\n  color: #fff;\n  font-size: 14px;\n  font-weight: 700;\n  border: none;\n  border-radius: 6px;\n  padding: 11px 28px;\n  cursor: pointer;\n  transition: background .2s, transform .15s;\n  text-decoration: none;\n}\n\n#bx-spot-selector-v1 .bx-cta:hover {\n  background: #12236e;\n  transform: translateY(-1px);\n}\n\n#bx-spot-selector-v1 .bx-disclaimer {\n  font-size: 12px;\n  color: #999;\n  text-align: center;\n  margin: 24px 0 0;\n  line-height: 1.5;\n}\n\n\/* ---------- RESPONSIVE ---------- *\/\n@media (max-width: 860px) {\n  #bx-spot-selector-v1 .bx-form-grid {\n    grid-template-columns: 1fr;\n    gap: 20px;\n  }\n  #bx-spot-selector-v1 .bx-wrap {\n    padding: 28px 16px 36px;\n  }\n  #bx-spot-selector-v1 .bx-card {\n    padding: 22px 18px 20px;\n  }\n  #bx-spot-selector-v1 .bx-radio-group {\n    flex-direction: column;\n  }\n  #bx-spot-selector-v1 .bx-specs {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n\n@media (max-width: 480px) {\n  #bx-spot-selector-v1 .bx-specs {\n    grid-template-columns: 1fr;\n  }\n}\n<\/style>\n\n<script>\n(function(){\n  \/* ===== PRODUCT DATABASE ===== *\/\n  var products = {\n    SP007: {\n      model: 'GQ-SP007',\n      name: 'Mini',\n      wattage: '3\\u20134W',\n      beam: '38\\u00b0',\n      ip: 'IP65',\n      features: ['Compact form factor', 'Low-voltage option'],\n      best: 'Small garden accents, shrubs',\n      control: ['onoff','dimmable'],\n      install: ['ground','wall','recessed'],\n      appScore: { garden:10, tree:3, facade:1, pathway:4, plaza:1, bridge:0, water:5, signage:4 },\n      throwScore: { under3:10, '3to8':6, '8to15':1, '15to30':0, over30:0 }\n    },\n    SP027: {\n      model: 'GQ-SP027',\n      name: 'Linear',\n      wattage: '32\\u2013250W',\n      beam: '3\\u00b0\\u201360\\u00b0',\n      ip: 'IP65',\n      features: ['High-power linear form', 'Wide wattage range'],\n      best: 'Building facades, large landscapes',\n      control: ['onoff','dimmable','dmx'],\n      install: ['ground','wall'],\n      appScore: { garden:2, tree:6, facade:10, pathway:2, plaza:6, bridge:7, water:3, signage:7 },\n      throwScore: { under3:2, '3to8':5, '8to15':8, '15to30':10, over30:9 }\n    },\n    SP028: {\n      model: 'GQ-SP028',\n      name: 'Round High-Power',\n      wattage: '12\\u2013216W',\n      beam: '6\\u00b0\\u201360\\u00b0',\n      ip: 'IP65',\n      features: ['DMX512 built-in', 'Round die-cast housing', 'RGBW available'],\n      best: 'Commercial plazas, bridges, municipal projects',\n      control: ['onoff','dimmable','dmx'],\n      install: ['ground','wall'],\n      appScore: { garden:2, tree:5, facade:8, pathway:2, plaza:10, bridge:10, water:6, signage:5 },\n      throwScore: { under3:1, '3to8':4, '8to15':8, '15to30':10, over30:8 }\n    },\n    SP029: {\n      model: 'GQ-SP029',\n      name: 'Versatile',\n      wattage: '6\\u2013100W',\n      beam: '15\\u00b0\\u2013120\\u00b0',\n      ip: 'IP65',\n      features: ['CREE\/OSRAM\/PHILIPS LEDs', '110 lm\/W', 'CRI\\u226570', 'DMX512 option'],\n      best: 'All-purpose use',\n      control: ['onoff','dimmable','dmx'],\n      install: ['ground','wall','recessed'],\n      appScore: { garden:7, tree:8, facade:7, pathway:5, plaza:7, bridge:5, water:7, signage:8 },\n      throwScore: { under3:6, '3to8':9, '8to15':9, '15to30':7, over30:4 }\n    },\n    SP030: {\n      model: 'GQ-SP030',\n      name: 'Pole-Mount',\n      wattage: '24\\u201336W',\n      beam: 'Wide flood',\n      ip: 'IP65',\n      features: ['Integrated pole bracket', 'Anti-glare optics'],\n      best: 'Pathways, parking lots',\n      control: ['onoff','dimmable'],\n      install: ['pole'],\n      appScore: { garden:3, tree:2, facade:1, pathway:10, plaza:4, bridge:1, water:1, signage:2 },\n      throwScore: { under3:3, '3to8':8, '8to15':7, '15to30':3, over30:0 }\n    }\n  };\n\n  \/* ===== DOM REFS ===== *\/\n  var root      = document.getElementById('bx-spot-selector-v1');\n  var selApp    = root.querySelector('#bx-app-type');\n  var selThrow  = root.querySelector('#bx-throw');\n  var btnCalc   = root.querySelector('#bx-calc-btn');\n  var divResult = root.querySelector('#bx-results');\n  var divCards  = root.querySelector('#bx-cards');\n  var msgEl     = root.querySelector('#bx-validation');\n\n  function getRadio(name) {\n    var checked = root.querySelector('input[name=\"'+name+'\"]:checked');\n    return checked ? checked.value : '';\n  }\n\n  \/* ===== SCORING ===== *\/\n  function score(product, app, thr, ctrl, inst) {\n    var s = 0;\n    s += (product.appScore[app] || 0) * 3.5;\n    s += (product.throwScore[thr] || 0) * 2.5;\n\n    if (product.control.indexOf(ctrl) !== -1) {\n      s += 20;\n    } else {\n      s -= 15;\n    }\n\n    if (product.install.indexOf(inst) !== -1) {\n      s += 20;\n    } else {\n      s -= 20;\n    }\n    return s;\n  }\n\n  function fitLabel(s) {\n    if (s >= 55) return 'excellent';\n    if (s >= 35) return 'good';\n    return 'acceptable';\n  }\n\n  function fitText(f) {\n    return f.charAt(0).toUpperCase() + f.slice(1) + ' Fit';\n  }\n\n  \/* ===== RENDER ===== *\/\n  function renderCard(prod, fit, reason) {\n    var badgeClass = 'bx-badge-' + fit;\n    var cardClass  = 'bx-fit-' + fit;\n    var featHtml = prod.features.map(function(f){ return f; }).join(' &middot; ');\n\n    \/\/ \u5361\u7247\u4e3b\u6807\u9898\u4ece H4 \u53d8\u66f4\u4e3a H3\uff0c\u66f4\u7b26\u5408\u5916\u5c42 H2 \u7684\u9012\u8fdb\u903b\u8f91\n    return '<div class=\"bx-card '+cardClass+'\">' +\n      '<div class=\"bx-card-head\">' +\n        '<h3><span class=\"bx-model\">'+prod.model+'<\/span> '+prod.name+'<\/h3>' +\n        '<span class=\"bx-badge '+badgeClass+'\"><span class=\"bx-badge-dot\"><\/span>'+fitText(fit)+'<\/span>' +\n      '<\/div>' +\n      '<div class=\"bx-specs\">' +\n        '<div class=\"bx-spec-item\"><span class=\"bx-spec-label\">Wattage:<\/span> <span class=\"bx-spec-val\">'+prod.wattage+'<\/span><\/div>' +\n        '<div class=\"bx-spec-item\"><span class=\"bx-spec-label\">Beam:<\/span> <span class=\"bx-spec-val\">'+prod.beam+'<\/span><\/div>' +\n        '<div class=\"bx-spec-item\"><span class=\"bx-spec-label\">IP Rating:<\/span> <span class=\"bx-spec-val\">'+prod.ip+'<\/span><\/div>' +\n        '<div class=\"bx-spec-item\"><span class=\"bx-spec-label\">Best for:<\/span> '+prod.best+'<\/div>' +\n      '<\/div>' +\n      '<p class=\"bx-card-reason\">'+reason+'<\/p>' +\n      '<div class=\"bx-spec-item\" style=\"margin-bottom:14px\"><span class=\"bx-spec-label\">Key features:<\/span> '+featHtml+'<\/div>' +\n      '<a href=\"#ct-popup-801\" class=\"bx-cta\" role=\"button\" data-product=\"'+prod.model+'\">Get a Custom Quote for '+prod.model+'<\/a>' +\n    '<\/div>';\n  }\n\n  \/* ===== REASON BUILDER ===== *\/\n  function buildReason(prod, app, thr, ctrl, inst) {\n    var parts = [];\n    var appNames = { garden:'garden accents', tree:'tree uplighting', facade:'facade washing', pathway:'pathway lighting', plaza:'commercial plazas', bridge:'bridge\/municipal projects', water:'water features', signage:'signage illumination' };\n    var throwNames = { under3:'short-range (< 3 m)', '3to8':'medium (3\\u20138 m)', '8to15':'mid-long (8\\u201315 m)', '15to30':'long-range (15\\u201330 m)', over30:'extreme-distance (30 m+)' };\n\n    if (prod.appScore[app] >= 8) { parts.push('Purpose-built for ' + appNames[app]); } \n    else if (prod.appScore[app] >= 5) { parts.push('Well-suited for ' + appNames[app]); } \n    else { parts.push('Can be adapted for ' + appNames[app]); }\n\n    if (prod.throwScore[thr] >= 7) { parts.push('excels at ' + throwNames[thr] + ' throw distances'); } \n    else if (prod.throwScore[thr] >= 4) { parts.push('adequate for ' + throwNames[thr] + ' throw'); }\n\n    if (prod.control.indexOf(ctrl) !== -1 && ctrl === 'dmx') { parts.push('with full DMX512 smart control support'); }\n    return parts.join('; ') + '.';\n  }\n\n  \/* ===== MAIN HANDLER ===== *\/\n  btnCalc.addEventListener('click', function() {\n    var app   = selApp.value;\n    var thr   = selThrow.value;\n    var ctrl  = getRadio('bx-control');\n    var inst  = getRadio('bx-install');\n\n    if (!app || !thr || !ctrl || !inst) {\n      msgEl.textContent = 'Please answer all four questions above.';\n      divResult.style.display = 'none';\n      return;\n    }\n    msgEl.textContent = '';\n\n    var ranked = [];\n    for (var key in products) {\n      if (products.hasOwnProperty(key)) {\n        var p = products[key];\n        ranked.push({ key:key, prod:p, score: score(p, app, thr, ctrl, inst) });\n      }\n    }\n    ranked.sort(function(a,b){ return b.score - a.score; });\n\n    var results = [ranked[0]];\n    if (ranked.length > 1 && ranked[1].score > 20) { results.push(ranked[1]); }\n\n    var html = '';\n    for (var i = 0; i < results.length; i++) {\n      var r = results[i];\n      var fit = fitLabel(r.score);\n      var reason = buildReason(r.prod, app, thr, ctrl, inst);\n      html += renderCard(r.prod, fit, reason);\n    }\n\n    divCards.innerHTML = html;\n    divResult.style.display = 'block';\n    divResult.scrollIntoView({ behavior:'smooth', block:'start' });\n\n    \/* \ud83d\udfe2 \u4fee\u590d\u5f39\u7a97\u903b\u8f91\uff1a\u8ba9\u52a8\u6001\u6309\u94ae\u70b9\u51fb\u65f6\uff0c\u53bb\u89e6\u53d1\u90a3\u4e2a\u65e9\u5df2\u7ed1\u5b9a\u597d\u4e8b\u4ef6\u7684\u9759\u6001\u5e7d\u7075\u5143\u7d20 *\/\n    var ctas = divCards.querySelectorAll('.bx-cta');\n    var hiddenTrigger = document.getElementById('bx-hidden-popup-trigger');\n    \n    for (var j = 0; j < ctas.length; j++) {\n      ctas[j].addEventListener('click', function(e) {\n        e.preventDefault(); \/\/ \u963b\u6b62\u9ed8\u8ba4\u7684\u951a\u70b9\u8df3\u8f6c\u884c\u4e3a\uff0c\u9632\u6b62\u9875\u9762\u8df3\u8dc3\n        \n        \/\/ \u53ef\u9009\uff1a\u5982\u679c\u4f60\u9700\u8981\u77e5\u9053\u7528\u6237\u70b9\u4e86\u54ea\u4e2a\u4ea7\u54c1\uff0c\u53ef\u4ee5\u628a\u503c\u5b58\u5165\u5168\u5c40\u53d8\u91cf\u6216\u67d0\u4e2a input \u4e2d\u4f9b\u8868\u5355\u4f7f\u7528\n        \/\/ window.selectedModelForQuote = this.getAttribute('data-product');\n\n        if (hiddenTrigger) {\n          hiddenTrigger.click(); \/\/ \u89e6\u53d1\u9875\u9762\u7f16\u8f91\u5668\u5bf9\u9759\u6001\u5143\u7d20\u76d1\u542c\u7684 click \u4e8b\u4ef6\n        } else {\n          window.location.hash = this.getAttribute('href'); \/\/ \u515c\u5e95\u65b9\u6848\n        }\n      });\n    }\n  });\n\n})();\n<\/script>\n<\/div><\/div><\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Outdoor Spotlight Selection Calculator Answer four quick questions and we&#8217;ll match you with the ideal Guangqi Lighting spotlight series for your project. 1. Application Type What will the spotlight illuminate? Select application&#8230;Garden \/ Shrub AccentTree UplightingBuilding FacadePathway \/ WalkwayCommercial PlazaBridge \/ MunicipalWater FeatureSignage 2. Throw Distance How far should the light reach? Select distance&#8230;Under 3 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":1454,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_gspb_post_css":"","footnotes":""},"class_list":["post-1456","page","type-page","status-publish","hentry"],"blocksy_meta":{"has_hero_section":"disabled","styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/pages\/1456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/comments?post=1456"}],"version-history":[{"count":0,"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/pages\/1456\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/pages\/1454"}],"wp:attachment":[{"href":"https:\/\/gqlamp.com\/ar\/wp-json\/wp\/v2\/media?parent=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}