{"id":104522,"date":"2026-10-28T09:42:18","date_gmt":"2026-10-28T09:42:18","guid":{"rendered":"https:\/\/luxmanlight.com\/?page_id=104522"},"modified":"2026-10-28T11:23:19","modified_gmt":"2026-10-28T11:23:19","slug":"luxman-project-selection-light","status":"publish","type":"page","link":"https:\/\/luxmanlight.com\/ja\/luxman-project-selection-light\/","title":{"rendered":"LUXMAN-Project-Selection-LIGHT"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"104522\" class=\"elementor elementor-104522\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a2748b3 e-con-full e-flex e-con e-parent\" data-id=\"3a2748b3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-116c828f elementor-widget elementor-widget-html\" data-id=\"116c828f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"luxman-project-selection\"><style>#luxman-project-selection{--ink:#202836;--blue:#294A70;--gold:#F3A712;--orange:#E96A29;--light:#F4F6F9;--line:#D9DEE6}\n#luxman-project-selection *{box-sizing:border-box}\n#luxman-project-selection{scroll-behavior:smooth;scroll-padding-top:90px}\n#luxman-project-selection{margin:0;background:var(--light);color:var(--ink);font-size:15px;line-height:1.6;font-family:inherit;font-weight:400}\n#luxman-project-selection .selection-main{max-width:1120px;margin:0 auto;background:#fff;padding:36px 48px 46px}\n#luxman-project-selection .selection-intro{border-top:5px solid var(--gold);padding-top:20px}\n#luxman-project-selection .brand{font-size:24px;font-weight:800;color:var(--blue)}\n#luxman-project-selection h1{font-size:38px;line-height:1.16;margin:15px 0;max-width:750px;letter-spacing:-.025em}\n#luxman-project-selection h2{font-size:25px;line-height:1.25;margin:0 0 12px}\n#luxman-project-selection h3{font-size:18px;line-height:1.35;margin:0 0 8px}\n#luxman-project-selection p{margin:0 0 12px;max-width:82ch}\n#luxman-project-selection a{color:var(--blue);text-underline-offset:3px}\n#luxman-project-selection .muted{color:#586579;font-size:13px}\n#luxman-project-selection .intro{max-width:760px;font-size:16px}\n#luxman-project-selection .tools{position:sticky;top:0;z-index:5;padding:14px 0;margin:22px 0 0;background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;flex-wrap:wrap}\n#luxman-project-selection .tools .status{flex-basis:100%;font-size:12px;margin:0}\n#luxman-project-selection .tools details{margin-left:auto;position:relative}\n#luxman-project-selection .tools details>summary{cursor:pointer;padding:10px;font-size:13px}\n#luxman-project-selection .more-actions{position:absolute;right:0;min-width:220px;background:#fff;border:1px solid var(--line);padding:12px;box-shadow:0 8px 22px #2028361a;display:flex;flex-direction:column;gap:8px}\n#luxman-project-selection button,#luxman-project-selection .button{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:12px 18px;border:1px solid var(--blue);border-radius:7px;background:var(--blue);color:#fff;font-size:13px;line-height:1.4;font-family:inherit;font-weight:700;text-decoration:none;cursor:pointer}\n#luxman-project-selection .primary{background:linear-gradient(135deg,#F3A712,#FFC145);color:#141C29;border-color:#E7A116}\n#luxman-project-selection .subtle{background:#EAF0F6;color:var(--blue);border-color:var(--line)}\n#luxman-project-selection button:disabled{opacity:.6;cursor:wait}\n#luxman-project-selection .text-link{font-size:13px;font-weight:700}\n#luxman-project-selection a:focus-visible,#luxman-project-selection button:focus-visible,#luxman-project-selection input:focus-visible,#luxman-project-selection select:focus-visible,#luxman-project-selection textarea:focus-visible,#luxman-project-selection summary:focus-visible{outline:3px solid var(--orange);outline-offset:3px}\n#luxman-project-selection form{margin:0}\n#luxman-project-selection section{padding-top:30px;margin-top:30px;border-top:1px solid var(--line)}\n#luxman-project-selection .start{border:0;margin-top:0}\n#luxman-project-selection .grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}\n#luxman-project-selection .field{display:block;font-size:13px;font-weight:700;min-width:0}\n#luxman-project-selection .field input,#luxman-project-selection .field textarea,#luxman-project-selection .field select{display:block;width:100%;border:1px solid #B6C2D1;border-radius:5px;padding:12px;font-size:14px;line-height:1.5;font-family:inherit;font-weight:400;color:var(--ink);background:#fff;margin-top:6px;min-height:46px}\n#luxman-project-selection .field textarea{min-height:94px;resize:vertical}\n#luxman-project-selection .field small{display:block;font-weight:400;color:#586579;margin-top:5px}\n#luxman-project-selection .full{grid-column:1\/-1}\n#luxman-project-selection .stage-choice{max-width:590px;margin-bottom:20px}\n#luxman-project-selection .stage-advice{border-left:3px solid var(--gold);padding:8px 0 8px 15px;color:var(--blue);margin:16px 0 24px}\n#luxman-project-selection .stage-panel{background:#F4F6F9;padding:20px;margin-top:20px}\n#luxman-project-selection .stage-panel h3{margin-bottom:16px}\n#luxman-project-selection .module-nav{display:flex;gap:10px;flex-wrap:wrap;padding:15px 0}\n#luxman-project-selection .module-nav a{font-size:13px;background:#EAF0F6;border:1px solid var(--line);padding:8px 12px;border-radius:5px;text-decoration:none}\n#luxman-project-selection .options{border:1px solid var(--line);border-radius:8px;margin-top:14px;scroll-margin-top:100px}\n#luxman-project-selection .options>summary{padding:18px 21px;cursor:pointer;font-weight:700;font-size:17px}\n#luxman-project-selection .options[open]>summary{border-bottom:1px solid var(--line)}\n#luxman-project-selection .options-content{padding:22px}\n#luxman-project-selection .question-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px}\n#luxman-project-selection .question{min-width:0;border:0;margin:0;padding:0}\n#luxman-project-selection .question legend{font-weight:700;font-size:15px;margin-bottom:13px;padding:0}\n#luxman-project-selection .option{display:flex;align-items:flex-start;gap:10px;min-height:44px;padding:6px 0;cursor:pointer;font-size:14px}\n#luxman-project-selection .option input{margin:5px 0 0;accent-color:var(--blue);flex:none}\n#luxman-project-selection .option small{display:block;color:#586579;font-size:12px;line-height:1.5;margin-top:2px}\n#luxman-project-selection .firmness{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:12px;color:#586579}\n#luxman-project-selection .firmness select{padding:7px;border:1px solid var(--line);border-radius:5px;background:#fff;color:var(--ink);max-width:150px;min-height:40px}\n#luxman-project-selection .module-note{font-size:12px;color:#586579;margin-top:22px;padding-top:15px;border-top:1px solid var(--line)}\n#luxman-project-selection .needs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 25px}\n#luxman-project-selection .needs .option{border-bottom:1px solid #EDF0F4;padding:9px 0}\n#luxman-project-selection .conditional{margin-top:22px}\n#luxman-project-selection .outputs .option{font-size:13px}\n#luxman-project-selection .notes-grid{margin-top:20px}\n#luxman-project-selection .print-value{display:none}\n#luxman-project-selection .review{background:#EAF0F6;padding:28px;margin-top:36px;border-top:3px solid var(--gold)}\n#luxman-project-selection .review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}\n#luxman-project-selection .review ul{padding-left:19px;margin:8px 0 0}\n#luxman-project-selection .review li{font-size:13px;line-height:1.7;margin-bottom:9px}\n#luxman-project-selection .routes{display:flex;flex-direction:column;gap:20px;margin:20px 0 25px}\n#luxman-project-selection .route{padding-left:18px;border-left:3px solid var(--gold)}\n#luxman-project-selection .route p{font-size:14px;margin:0}\n#luxman-project-selection .clarifications{background:#FFF6E5;padding:20px;margin-bottom:25px;border-left:3px solid var(--orange)}\n#luxman-project-selection .clarifications h3{color:#89400F}\n#luxman-project-selection .selected-review{margin-top:22px;padding-top:18px;border-top:1px solid #CBD6E2}\n#luxman-project-selection .selected-review>summary{cursor:pointer;font-weight:700;font-size:14px}\n#luxman-project-selection .selected-review dl{font-size:13px;margin:18px 0 0;display:grid;grid-template-columns:minmax(150px,1fr) 2fr;gap:10px 20px}\n#luxman-project-selection .selected-review dt{font-weight:700}\n#luxman-project-selection .selected-review dd{margin:0;overflow-wrap:anywhere}\n#luxman-project-selection .empty-note{font-size:13px;color:#586579}\n#luxman-project-selection .review-count{font-size:12px;color:#586579}\n#luxman-project-selection .finish{margin-top:24px;padding-top:22px;border-top:1px solid #CBD6E2}\n#luxman-project-selection .actions{display:flex;gap:12px;flex-wrap:wrap;margin:18px 0}\n#luxman-project-selection .finish p{font-size:14px}\n#luxman-project-selection .footer{font-size:12px;color:#586579;margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}\n#luxman-project-selection .footer p{max-width:90ch}\n#luxman-project-selection [hidden]{display:none!important}\n@media(max-width:760px){#luxman-project-selection .selection-main{padding:24px 20px}\n#luxman-project-selection h1{font-size:30px}\n#luxman-project-selection .grid,#luxman-project-selection .question-grid,#luxman-project-selection .needs,#luxman-project-selection .review-grid{grid-template-columns:1fr}\n#luxman-project-selection .tools{gap:10px}\n#luxman-project-selection .tools details{margin-left:0}\n#luxman-project-selection .more-actions{left:0;right:auto}\n#luxman-project-selection .tools .primary{flex:1}\n#luxman-project-selection .options-content{padding:20px}\n#luxman-project-selection .options>summary{padding:17px}\n#luxman-project-selection .review{padding:21px}\n#luxman-project-selection .selected-review dl{display:block}\n#luxman-project-selection .selected-review dt{margin-top:15px}\n#luxman-project-selection .selected-review dd{margin-top:3px}\n#luxman-project-selection .actions .button,#luxman-project-selection .actions button{flex:1 1 100%}\n#luxman-project-selection section{margin-top:25px;padding-top:25px}\n#luxman-project-selection .stage-panel{padding:17px}\n}\n@media(prefers-reduced-motion:reduce){#luxman-project-selection{scroll-behavior:auto}\n}\n#luxman-project-selection .date-link{display:inline-block;margin-top:12px;font-size:12px}\n#luxman-project-selection .milestone-priority{border-left:3px solid var(--gold);padding-left:12px}\n#luxman-project-selection .question>.field{margin-top:15px}\n#luxman-project-selection .selected-review{border:0;padding-top:0}\n#luxman-project-selection .brief-section{margin-bottom:24px}\n#luxman-project-selection .brief-section h3{font-size:16px;color:var(--blue)}\n#luxman-project-selection .brief-section dl{margin-top:10px}\n#luxman-project-selection .guidance-review{margin-top:25px;padding-top:18px;border-top:1px solid #CBD6E2}\n#luxman-project-selection .guidance-review>summary{font-weight:700;cursor:pointer;font-size:16px}\n#luxman-project-selection #requested-outputs{margin-bottom:24px}\n#luxman-project-selection #enquiry-text{min-height:180px;white-space:pre-wrap}\n#luxman-project-selection #copy-fallback{margin-top:16px}\n#luxman-project-selection #copy-fallback summary{cursor:pointer;font-size:13px;font-weight:700}\n@media print{@page{size:A4;margin:14mm}\n#luxman-project-selection{background:white;font-size:10pt}\n#luxman-project-selection .selection-main{max-width:none;margin:0;padding:0}\n#luxman-project-selection .tools,#luxman-project-selection .module-nav,#luxman-project-selection .actions,#luxman-project-selection .no-print,#luxman-project-selection .options,#luxman-project-selection form{display:none!important}\n#luxman-project-selection .review{margin-top:20px;padding:20px;background:white}\n#luxman-project-selection .review-grid{grid-template-columns:1fr}\n#luxman-project-selection .review li{font-size:10pt}\n#luxman-project-selection .route,#luxman-project-selection .review-grid>div{break-inside:avoid}\n#luxman-project-selection .selection-intro h1{font-size:24pt}\n#luxman-project-selection .selected-review>summary{display:none}\n#luxman-project-selection .selected-review dl{display:grid!important}\n#luxman-project-selection .footer{font-size:8pt}\n#luxman-project-selection .review .finish{display:none}\n#luxman-project-selection .selected-review{display:block}\n#luxman-project-selection a{color:inherit}\n}\n\n\n#luxman-project-selection{font-family:inherit;width:100%;min-width:0}\n#luxman-project-selection .selection-main{max-width:1240px;width:100%;margin:auto;padding:36px 20px 46px}\n@media(max-width:760px){#luxman-project-selection .selection-main{padding:24px 20px}}\nbody>#luxman-project-selection{font-family:system-ui,sans-serif}\n<\/style><div class=\"selection-main\"><div class=\"selection-intro\"><h1>Plan your solar street lighting project.<\/h1><p class=\"intro\">Choose the priorities you know. See which configuration routes to discuss, then save a project brief for your team or LUXMAN.<\/p><p class=\"muted\">All fields are optional. A location, site use and photograph are enough to start a discussion.<\/p><\/div>\n<div class=\"tools no-print\"><button type=\"button\" id=\"pdf\" class=\"primary\">Save selections as PDF<\/button><a class=\"text-link\" href=\"#review\">Review my brief<\/a><details><summary>More save options<\/summary><div class=\"more-actions\"><button type=\"button\" id=\"export\" class=\"subtle\">Export selections (.txt)<\/button><button type=\"button\" id=\"save\" class=\"subtle\">Save editable copy (.html)<\/button><button type=\"button\" id=\"print\" class=\"subtle\">Print<\/button><\/div><\/details><p class=\"status\" id=\"status\" role=\"status\" aria-live=\"polite\">Nothing is sent or stored automatically. Save your work before closing this page.<\/p><\/div>\n<form id=\"selection\" onsubmit=\"return false\"><section class=\"start\"><h2>Start with your project<\/h2><label class=\"field stage-choice\">Procurement stage<select id=\"procurement-stage\" name=\"stage\"><option value=\"planning\">Early planning \/ please advise<\/option><option value=\"tender\">Tender \/ technical evaluation<\/option><option value=\"approved\">Approved project \/ preparing an order<\/option><option value=\"repeat\">Replacement \/ repeat purchase<\/option><\/select><\/label><p id=\"stage-advice\" class=\"stage-advice\">Start with the location and site use. Add whichever preferences you already know.<\/p><div class=\"grid\"><label class=\"field\" >Country \/ city<input id=\"location\" name=\"location\" type=\"text\" maxlength=\"500\" placeholder=\"For example: Muscat, Oman\"><\/label><label class=\"field\" >Road or site use<input id=\"site-use\" name=\"site-use\" type=\"text\" maxlength=\"500\" placeholder=\"For example: access road, campus paths, industrial yard\"><\/label><label class=\"field\" >Approximate quantity<input id=\"quantity\" name=\"quantity\" type=\"text\" maxlength=\"500\" placeholder=\"If known\"><\/label><label class=\"field\" >Approximate road width \/ area dimensions<input id=\"site-size\" name=\"site-size\" type=\"text\" maxlength=\"500\" placeholder=\"For example: 7 m wide, 500 m long; leave blank if unknown\"><\/label><\/div><div class=\"stage-panel\" data-stage-panel=\"approved\" hidden><h3>Approved configuration<\/h3><div class=\"grid\"><label class=\"field\" data-state-key=\"approved-ref\">Approved model \/ configuration reference<input id=\"approved-approved-ref\" name=\"approved-approved-ref\" type=\"text\" maxlength=\"500\" placeholder=\"Model, drawing or specification revision\"><\/label><\/div><\/div><div class=\"stage-panel\" data-stage-panel=\"repeat\" hidden><h3>Previous equipment<\/h3><div class=\"grid\"><label class=\"field\" data-state-key=\"repeat-ref\">Previous model \/ order reference<input id=\"repeat-repeat-ref\" name=\"repeat-repeat-ref\" type=\"text\" maxlength=\"500\" placeholder=\"Model, order number or component identification\"><\/label><label class=\"field\" data-state-key=\"repeat-task\">What needs replacing or extending?<input id=\"repeat-repeat-task\" name=\"repeat-repeat-task\" type=\"text\" maxlength=\"500\" placeholder=\"Complete units, batteries, controllers or an extension\"><\/label><\/div><\/div><div class=\"stage-panel\" data-conditional=\"documents\" hidden><h3>Specification and BOQ references<\/h3><p class=\"muted\">Add the current references for the tender package or compliance response you requested.<\/p><div class=\"grid\"><label class=\"field\" >Current documents and revisions<input id=\"documents\" name=\"documents\" type=\"text\" maxlength=\"800\" placeholder=\"Specification, BOQ, drawings and amendments\"><\/label><\/div><\/div><details class=\"options dates\" id=\"project-dates\"><summary>Project dates, if known<\/summary><div class=\"options-content\"><p class=\"muted\">Add any relevant dates. Tender submission, technical approval, factory dispatch and arrival are separate milestones.<\/p><div class=\"grid\"><label class=\"field\" >Tender submission deadline<input id=\"bid-date\" name=\"bid-date\" type=\"text\" maxlength=\"500\" placeholder=\"Date, time and time zone, if relevant\"><\/label><label class=\"field\" >Required technical \/ sample approval<input id=\"approval-date\" name=\"approval-date\" type=\"text\" maxlength=\"500\" placeholder=\"Target date or approval window\"><\/label><label class=\"field\" >Required shipment from factory<input id=\"shipment-date\" name=\"shipment-date\" type=\"text\" maxlength=\"500\" placeholder=\"Dispatch date or target window\"><\/label><label class=\"field\" >Required arrival at destination \/ site<input id=\"arrival-date\" name=\"arrival-date\" type=\"text\" maxlength=\"500\" placeholder=\"Arrival date and port \/ site; allow for local clearance\"><\/label><\/div><\/div><\/details><\/section>\n<section><h2>Add preferences when useful<\/h2><p class=\"muted\">Open only the topics you want to specify. Leave other items for recommendation. A selected preference can be marked mandatory where your tender requires it.<\/p><nav class=\"module-nav\" aria-label=\"Project topics\"><a href=\"#operation\">Lighting<\/a><a href=\"#installation\">Installation<\/a><a href=\"#cost\">Budget<\/a><a href=\"#service\">Maintenance<\/a><\/nav><details class=\"options\" id=\"operation\"><summary>Lighting &amp; night operation<\/summary><div class=\"options-content\"><div class=\"question-grid\"><fieldset class=\"question\" data-question=\"brightness\"><legend>Lighting result<\/legend><label class=\"option\"><input type=\"radio\" name=\"brightness\" value=\"Please recommend\" checked><span>Please recommend<small>We propose the light output and layout for the road or site.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"brightness\" value=\"Prioritise higher light output\"><span>Prioritise higher light output<small>Compare whole-luminaire lumens, optics and the required lighting result.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"brightness\" value=\"Known lighting target \/ tender criterion\"><span>Known lighting target \/ tender criterion<small>Add the available lm, lux, road luminance or clause reference.<\/small><\/span><\/label><label class=\"field\" data-conditional=\"light-target\" hidden>Known lighting target<input id=\"light-target\" name=\"light-target\" type=\"text\" maxlength=\"500\" placeholder=\"Luminaire lm, site lux \/ road luminance or a tender clause, if available\"><\/label><label class=\"firmness\" data-firmness=\"brightness\" hidden>Requirement type <select name=\"firmness-brightness\" aria-label=\"Requirement type for Lighting result\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"night\"><legend>Night operation<\/legend><label class=\"option\"><input type=\"radio\" name=\"night\" value=\"Please recommend\" checked><span>Please recommend<small>Describe the site use; no technical specification is needed to start.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"night\" value=\"Dusk to dawn, same required output\"><span>Dusk to dawn, same required output<small>Use when the lighting requirement must be maintained throughout the night.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"night\" value=\"Higher output early, lower output later\"><span>Higher output early, lower output later<small>Consider where traffic or activity falls overnight; dimming must suit the applicable lighting requirements.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"night\" value=\"Scheduled hours or occupancy-based control\"><span>Scheduled hours or occupancy-based control<small>Consider for controlled-use sites where lighting can follow an agreed schedule.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"night\" hidden>Requirement type <select name=\"firmness-night\" aria-label=\"Requirement type for Night operation\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"reserve\"><legend>No-solar reserve target<\/legend><label class=\"option\"><input type=\"radio\" name=\"reserve\" value=\"Please recommend\" checked><span>Please recommend<small>LUXMAN proposes a reserve and recharge basis for the location.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"reserve\" value=\"3 nights\"><span>3 nights<small>A design target at the agreed nightly output and operating hours.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"reserve\" value=\"7 nights\"><span>7 nights<small>A longer-reserve design target; compare the storage, charging and cost implications.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"reserve\" value=\"Tender-defined \/ other\"><span>Tender-defined \/ other<small>Add the specified conditions in the notes.<\/small><\/span><\/label><label class=\"field\" data-conditional=\"reserve-other\" hidden>Other reserve target and operating basis<input id=\"reserve-other\" name=\"reserve-other\" type=\"text\" maxlength=\"500\" placeholder=\"Number of nights, operating hours or tender clause, if known\"><\/label><label class=\"firmness\" data-firmness=\"reserve\" hidden>Requirement type <select name=\"firmness-reserve\" aria-label=\"Requirement type for No-solar reserve target\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"cct\"><legend>Colour-temperature preference<\/legend><label class=\"option\"><input type=\"radio\" name=\"cct\" value=\"Please recommend\" checked><span>Please recommend<small>Match the location, authority requirements and visual task.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"cct\" value=\"3000K\"><span>3000K<small>Warm-white preference.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"cct\" value=\"4000K\"><span>4000K<small>Neutral-white preference.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"cct\" value=\"6000K\"><span>6000K<small>Cool-white preference.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"cct\" value=\"7000K\"><span>7000K<small>Cool-white OEM option; specify required lumens or site lighting separately.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"cct\" hidden>Requirement type <select name=\"firmness-cct\" aria-label=\"Requirement type for Colour-temperature preference\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><\/div><p class=\"module-note\">A 3- or 7-night reserve is assessed from a full battery, without solar input, at the agreed light output and hours. Seasonal charging and recovery are reviewed alongside storage.<\/p><\/div><\/details><details class=\"options\" id=\"installation\"><summary>Installation &amp; supply interfaces<\/summary><div class=\"options-content\"><div class=\"question-grid\"><fieldset class=\"question\" data-question=\"format\"><legend>Construction preference<\/legend><label class=\"option\"><input type=\"radio\" name=\"format\" value=\"Please recommend\" checked><span>Please recommend<small>We compare integrated and independently positioned energy packages.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"format\" value=\"Integrated preferred\"><span>Integrated preferred<small>Prioritise a compact installation where solar access and service needs allow.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"format\" value=\"Separate panel preferred\"><span>Separate panel preferred<small>Position the panel independently from the lamp.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"format\" value=\"Retain the approved arrangement\"><span>Retain the approved arrangement<small>Use the existing approved interface or configuration as the base.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"format\" hidden>Requirement type <select name=\"firmness-format\" aria-label=\"Requirement type for Construction preference\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"mount\"><legend>Mounting situation<\/legend><label class=\"option\"><input type=\"radio\" name=\"mount\" value=\"Please recommend\" checked><span>Please recommend<small>A site photograph or sketch can be enough for the first discussion.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"mount\" value=\"New poles and foundations\"><span>New poles and foundations<small>Review a complete lighting-and-pole supply package, with civil work assigned separately.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"mount\" value=\"Reuse existing poles\"><span>Reuse existing poles<small>Provide photos or dimensions if available; condition, loading and fixing compatibility need review.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"mount\" value=\"Wall, container or existing structure\"><span>Wall, container or existing structure<small>Review suitable brackets and structural interfaces before selecting the lamp package.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"mount\" hidden>Requirement type <select name=\"firmness-mount\" aria-label=\"Requirement type for Mounting situation\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"solar\"><legend>Solar access at the lamp position<\/legend><label class=\"option\"><input type=\"radio\" name=\"solar\" value=\"Not yet assessed\" checked><span>Not yet assessed<small>LUXMAN helps identify what needs checking.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"solar\" value=\"Open, largely unshaded position\"><span>Open, largely unshaded position<small>An integrated arrangement may simplify installation.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"solar\" value=\"Shading or a different preferred panel position\"><span>Shading or a different preferred panel position<small>Compare a separately positioned panel, brackets and cable routing.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"solar\" hidden>Requirement type <select name=\"firmness-solar\" aria-label=\"Requirement type for Solar access at the lamp position\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"supply\"><legend>Supply package<\/legend><label class=\"option\"><input type=\"radio\" name=\"supply\" value=\"Please recommend\" checked><span>Please recommend<small>Define a package around the site and responsibilities.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"supply\" value=\"Lighting system; poles supplied locally\"><span>Lighting system; poles supplied locally<small>Specify the lamp, panel, battery and controls together with the pole interface.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"supply\" value=\"Lighting system plus poles and mounting\"><span>Lighting system plus poles and mounting<small>Coordinate the equipment package and civil\/foundation interfaces.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"supply\" value=\"Tender \/ BOQ package\"><span>Tender \/ BOQ package<small>Supply and document scope follows the agreed BOQ and clarifications.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"supply\" hidden>Requirement type <select name=\"firmness-supply\" aria-label=\"Requirement type for Supply package\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><\/div><p class=\"module-note\">A site photograph or sketch helps resolve lamp, panel, pole and fixing positions.<\/p><\/div><\/details><details class=\"options\" id=\"cost\"><summary>Budget &amp; quotation comparison<\/summary><div class=\"options-content\"><div class=\"question-grid\"><fieldset class=\"question\" data-question=\"priority\"><legend>Main cost priority<\/legend><label class=\"option\"><input type=\"radio\" name=\"priority\" value=\"Please recommend\" checked><span>Please recommend<small>Compare suitable routes before fixing the specification.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"priority\" value=\"Lower equipment purchase cost\"><span>Lower equipment purchase cost<small>Compare options that still meet the required lighting and operating conditions.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"priority\" value=\"Lower total installed cost\"><span>Lower total installed cost<small>Include poles, foundations, freight, access equipment and installation work.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"priority\" value=\"Lower long-term ownership cost\"><span>Lower long-term ownership cost<small>Include maintenance access, replacement parts, labour and freight over an agreed period.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"priority\" hidden>Requirement type <select name=\"firmness-priority\" aria-label=\"Requirement type for Main cost priority\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"alternatives\"><legend>Alternative configurations<\/legend><label class=\"option\"><input type=\"radio\" name=\"alternatives\" value=\"Please discuss with us\" checked><span>Please discuss with us<small>Explain the trade-offs before changing the base proposal.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"alternatives\" value=\"Base requirement only\"><span>Base requirement only<small>Follow the specified configuration; identify clarifications or deviations explicitly.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"alternatives\" value=\"Base offer plus an alternative\"><span>Base offer plus an alternative<small>Show changed components, scope, performance implications and price differences.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"alternatives\" hidden>Requirement type <select name=\"firmness-alternatives\" aria-label=\"Requirement type for Alternative configurations\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"deadline\"><legend>Which milestone matters most?<\/legend><label class=\"option\"><input type=\"radio\" name=\"deadline\" value=\"Not fixed yet\" checked><span>Not fixed yet<small>An approximate project stage is enough to begin.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"deadline\" value=\"Tender submission\"><span>Tender submission<small>State the bid deadline and required submission documents.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"deadline\" value=\"Shipment\"><span>Shipment<small>State the requested dispatch date and shipment scope.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"deadline\" value=\"Arrival at destination \/ site\"><span>Arrival at destination \/ site<small>State the destination and required arrival date, not just a factory dispatch date.<\/small><\/span><\/label><a class=\"date-link\" href=\"#project-dates\">Add tender, approval, shipment or arrival dates<\/a><label class=\"firmness\" data-firmness=\"deadline\" hidden>Requirement type <select name=\"firmness-deadline\" aria-label=\"Requirement type for Which milestone matters most?\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><\/div><p class=\"module-note\">Compare alternatives on the same lighting duty, quantity and delivery scope.<\/p><\/div><\/details><details class=\"options\" id=\"service\"><summary>Maintenance &amp; handover<\/summary><div class=\"options-content\"><div class=\"question-grid\"><fieldset class=\"question\" data-question=\"team\"><legend>Who will handle routine maintenance?<\/legend><label class=\"option\"><input type=\"radio\" name=\"team\" value=\"Not decided\u2014please recommend\" checked><span>Not decided\u2014please recommend<small>Set out a practical service arrangement with the proposal.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"team\" value=\"Our own local team\"><span>Our own local team<small>Prioritise accessible components and clear replacement instructions.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"team\" value=\"Our installation \/ service contractor\"><span>Our installation \/ service contractor<small>Define handover information and the contractor\u2019s replacement responsibilities.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"team\" hidden>Requirement type <select name=\"firmness-team\" aria-label=\"Requirement type for Who will handle routine maintenance?\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"access\"><legend>Site access<\/legend><label class=\"option\"><input type=\"radio\" name=\"access\" value=\"Not yet assessed\" checked><span>Not yet assessed<small>Identify access constraints during the project review.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"access\" value=\"Routine vehicle and lifting access\"><span>Routine vehicle and lifting access<small>Plan safe maintenance and suitable access equipment.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"access\" value=\"Remote, restricted or difficult access\"><span>Remote, restricted or difficult access<small>Consider serviceable assemblies, spares and replacement logistics from the start.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"access\" hidden>Requirement type <select name=\"firmness-access\" aria-label=\"Requirement type for Site access\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><fieldset class=\"question\" data-question=\"spares\"><legend>Spare-parts preference<\/legend><label class=\"option\"><input type=\"radio\" name=\"spares\" value=\"Please recommend\" checked><span>Please recommend<small>Suggest relevant parts and quantities against the project and service plan.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"spares\" value=\"Include an initial spares package\"><span>Include an initial spares package<small>Quote the selected replacement assemblies separately.<\/small><\/span><\/label><label class=\"option\"><input type=\"radio\" name=\"spares\" value=\"Quote spares as an option\"><span>Quote spares as an option<small>Keep spares visible without assuming they are included in the base order.<\/small><\/span><\/label><label class=\"firmness\" data-firmness=\"spares\" hidden>Requirement type <select name=\"firmness-spares\" aria-label=\"Requirement type for Spare-parts preference\"><option>Preference<\/option><option>Mandatory<\/option><\/select><\/label><\/fieldset><\/div><p class=\"module-note\">Include replacement access, spares and local labour when comparing service costs.<\/p><\/div><\/details><\/section>\n<section id=\"special-needs\"><h2>Any special project needs?<\/h2><p class=\"muted\">Select all that apply. The discussion brief will include the relevant checks.<\/p><div class=\"needs\"><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"coastal\"><span>Coastal \/ corrosive exposure<small>Compare materials, coatings and exposed fixings.<\/small><\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"cold\"><span>Cold-weather operation<small>Review charging protection, usable storage and any heating load.<\/small><\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"heat\"><span>High ambient temperature<small>Review thermal conditions, storage and equipment placement.<\/small><\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"hazardous\"><span>Explosion-protected equipment<small>Identify the area classification and equipment approval scope.<\/small><\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"cctv\"><span>Lighting with CCTV<small>Include the camera, communications and night load.<\/small><\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"monitoring\"><span>Remote monitoring<small>Review connectivity, monitoring functions and auxiliary loads.<\/small><\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"special\" value=\"wind\"><span>Wind + solar assessment<small>Assess the local wind resource and turbine service requirements.<\/small><\/span><\/label><\/div><div class=\"grid conditional\"><label class=\"field\" data-conditional=\"hazardous-detail\" hidden>Area classification \/ approval requirement<input id=\"hazardous-detail\" name=\"hazardous-detail\" type=\"text\" maxlength=\"500\" placeholder=\"Zone \/ division, gas or dust, temperature class or document reference, if known\"><\/label><label class=\"field\" data-conditional=\"temperature\" hidden>Ambient temperature range<input id=\"temperature\" name=\"temperature\" type=\"text\" maxlength=\"500\" placeholder=\"Include the unit, if known\"><\/label><label class=\"field\" data-conditional=\"camera-load\" hidden>Camera \/ communications duty<input id=\"camera-load\" name=\"camera-load\" type=\"text\" maxlength=\"500\" placeholder=\"Continuous or scheduled operation; model or load if known\"><\/label><label class=\"field\" data-conditional=\"connectivity\" hidden>Available connectivity<input id=\"connectivity\" name=\"connectivity\" type=\"text\" maxlength=\"500\" placeholder=\"Mobile network, Wi-Fi, wired connection or unknown\"><\/label><label class=\"field\" data-conditional=\"wind-data\" hidden>Available wind information<input id=\"wind-data\" name=\"wind-data\" type=\"text\" maxlength=\"500\" placeholder=\"Location, measurements or an existing assessment, if available\"><\/label><\/div><\/section>\n<details class=\"options\" id=\"proposal-details\"><summary>Proposal, delivery and contact details<\/summary><div class=\"options-content\"><h3>What would you like us to include?<\/h3><div class=\"needs outputs\"><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Configuration recommendation\"><span>Configuration recommendation<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Itemised equipment and delivery quotation\"><span>Itemised equipment and delivery quotation<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Base proposal plus an allowed alternative\"><span>Base proposal plus an allowed alternative<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Tender compliance \/ deviation schedule\"><span>Tender compliance \/ deviation schedule<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Lighting and energy design scope\"><span>Lighting and energy design scope<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Pole, bracket and foundation interfaces\"><span>Pole, bracket and foundation interfaces<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Sample \/ inspection and delivery milestones\"><span>Sample \/ inspection and delivery milestones<\/span><\/label><label class=\"option\"><input type=\"checkbox\" name=\"requested-output\" value=\"Spares, warranty and service responsibilities\"><span>Spares, warranty and service responsibilities<\/span><\/label><\/div><div class=\"grid notes-grid\"><label class=\"field full\">Mandatory requirements \/ permitted preferences<textarea id=\"fixed\" name=\"fixed\" maxlength=\"6000\" placeholder=\"Identify any tender clauses or approved interfaces to retain, and where alternatives are allowed.\"><\/textarea><\/label><label class=\"field\" >Delivery destination and supply scope<input id=\"delivery\" name=\"delivery\" type=\"text\" maxlength=\"500\" placeholder=\"Country \/ port \/ site; equipment or complete package, if known\"><\/label><label class=\"field full\">Other requirements<textarea id=\"notes\" name=\"notes\" maxlength=\"6000\" placeholder=\"Budget and currency, dimensions, document references or other information you already have.\"><\/textarea><\/label><label class=\"field\" >Project \/ company<input id=\"project\" name=\"project\" type=\"text\" maxlength=\"500\" placeholder=\"Optional\"><\/label><label class=\"field\" >Contact name<input id=\"contact\" name=\"contact\" type=\"text\" maxlength=\"500\" placeholder=\"Optional\"><\/label><label class=\"field\" >Email<input id=\"email\" name=\"email\" type=\"email\" maxlength=\"500\" placeholder=\"Optional\" autocomplete=\"email\"><\/label><\/div><\/div><\/details><\/form>\n<section id=\"review\" class=\"review\"><h2 id=\"review-title\">Your procurement brief<\/h2><p id=\"review-count\" class=\"review-count\" aria-live=\"polite\"><\/p><div id=\"p1-selection-summary\" class=\"selected-review\"><\/div><div id=\"requested-outputs\" hidden><h3>Requested proposal outputs<\/h3><ul id=\"output-list\"><\/ul><\/div><div id=\"clarifications\" class=\"clarifications\" hidden><h3>Decisions to clarify<\/h3><ul id=\"conflict-list\"><\/ul><\/div><details class=\"guidance-review\" open><summary>Configuration recommendations and proposal scope<\/summary><div id=\"route-list\" class=\"routes\"><\/div><div class=\"review-grid\"><div><h3>What LUXMAN will review<\/h3><ul id=\"check-list\"><\/ul><\/div><div><h3>What the proposal should make clear<\/h3><ul id=\"quote-list\"><\/ul><\/div><div><h3>Useful information to add<\/h3><ul id=\"missing-list\"><\/ul><\/div><\/div><\/details><div class=\"finish\"><h3>Save the brief and start the discussion<\/h3><p>Save your PDF and email it to sales@luxmanlight.com with any available BOQ, drawings or site photographs. You can contact us before completing this sheet.<\/p><div class=\"actions\"><button type=\"button\" id=\"pdf-bottom\" class=\"primary\">Save selections as PDF<\/button><a class=\"button subtle\" id=\"email-enquiry\" href=\"mailto:sales@luxmanlight.com\">Prepare an enquiry email<\/a><button type=\"button\" id=\"copy-enquiry\" class=\"subtle\">Copy full enquiry brief<\/button><\/div><p class=\"muted\" id=\"email-summary-note\" aria-live=\"polite\">The email includes a project summary. Attach the saved PDF and any documents manually. The copy button preserves your complete entries.<\/p><details id=\"copy-fallback\" hidden><summary>Copy the enquiry text manually<\/summary><label class=\"field\">Complete enquiry brief<textarea id=\"enquiry-text\" readonly><\/textarea><\/label><\/details><p id=\"enquiry-status\" role=\"status\" aria-live=\"polite\" class=\"muted\"><\/p><p id=\"pdf-bottom-status\" role=\"status\" aria-live=\"polite\" class=\"muted\"><\/p><div class=\"actions\"><a href=\"https:\/\/luxmanlight.com\/led-solar-street-light-outdoor\/#inquiry\" data-local-return=\"inquiry\" target=\"_blank\" rel=\"noopener\">Return to enquiry<\/a><a href=\"https:\/\/luxmanlight.com\/led-solar-street-light-outdoor\/#products\" data-local-return=\"products\" target=\"_blank\" rel=\"noopener\">Back to product range<\/a><\/div><\/div><\/section>\n<\/div>\n<script type=\"application\/json\" id=\"selection-definition\">{\"version\":\"3.2\",\"date\":\"2026-10-25\",\"sections\":[{\"id\":\"operation\",\"title\":\"Lighting & night operation\",\"why\":\"Choose the result you need. LUXMAN develops the optical and energy configuration.\",\"fields\":[[\"brightness\",\"Lighting result\",[[\"Please recommend\",\"We propose the light output and layout for the road or site.\"],[\"Prioritise higher light output\",\"Compare whole-luminaire lumens, optics and the required lighting result.\"],[\"Known lighting target \/ tender criterion\",\"Add the available lm, lux, road luminance or clause reference.\"]]],[\"night\",\"Night operation\",[[\"Please recommend\",\"Describe the site use; no technical specification is needed to start.\"],[\"Dusk to dawn, same required output\",\"Use when the lighting requirement must be maintained throughout the night.\"],[\"Higher output early, lower output later\",\"Consider where traffic or activity falls overnight; dimming must suit the applicable lighting requirements.\"],[\"Scheduled hours or occupancy-based control\",\"Consider for controlled-use sites where lighting can follow an agreed schedule.\"]]],[\"reserve\",\"No-solar reserve target\",[[\"Please recommend\",\"LUXMAN proposes a reserve and recharge basis for the location.\"],[\"3 nights\",\"A design target at the agreed nightly output and operating hours.\"],[\"7 nights\",\"A longer-reserve design target; compare the storage, charging and cost implications.\"],[\"Tender-defined \/ other\",\"Add the specified conditions in the notes.\"]]],[\"cct\",\"Colour-temperature preference\",[[\"Please recommend\",\"Match the location, authority requirements and visual task.\"],[\"3000K\",\"Warm-white preference.\"],[\"4000K\",\"Neutral-white preference.\"],[\"6000K\",\"Cool-white preference.\"],[\"7000K\",\"Cool-white OEM option; specify required lumens or site lighting separately.\"]]]],\"note\":\"A 3- or 7-night reserve is assessed from a full battery, without solar input, at the agreed light output and hours. Seasonal charging and recovery are reviewed alongside storage.\",\"response\":\"Lighting criterion and layout basis; night-output schedule; proposed optics, battery\/PV package and reserve\/recharge assumptions.\"},{\"id\":\"installation\",\"title\":\"Installation & supply interfaces\",\"why\":\"Tell us what is already on site. We propose how the lighting package fits it.\",\"fields\":[[\"format\",\"Construction preference\",[[\"Please recommend\",\"We compare integrated and independently positioned energy packages.\"],[\"Integrated preferred\",\"Prioritise a compact installation where solar access and service needs allow.\"],[\"Separate panel preferred\",\"Position the panel independently from the lamp.\"],[\"Retain the approved arrangement\",\"Use the existing approved interface or configuration as the base.\"]]],[\"mount\",\"Mounting situation\",[[\"Please recommend\",\"A site photograph or sketch can be enough for the first discussion.\"],[\"New poles and foundations\",\"Review a complete lighting-and-pole supply package, with civil work assigned separately.\"],[\"Reuse existing poles\",\"Provide photos or dimensions if available; condition, loading and fixing compatibility need review.\"],[\"Wall, container or existing structure\",\"Review suitable brackets and structural interfaces before selecting the lamp package.\"]]],[\"solar\",\"Solar access at the lamp position\",[[\"Not yet assessed\",\"LUXMAN helps identify what needs checking.\"],[\"Open, largely unshaded position\",\"An integrated arrangement may simplify installation.\"],[\"Shading or a different preferred panel position\",\"Compare a separately positioned panel, brackets and cable routing.\"]]],[\"supply\",\"Supply package\",[[\"Please recommend\",\"Define a package around the site and responsibilities.\"],[\"Lighting system; poles supplied locally\",\"Specify the lamp, panel, battery and controls together with the pole interface.\"],[\"Lighting system plus poles and mounting\",\"Coordinate the equipment package and civil\/foundation interfaces.\"],[\"Tender \/ BOQ package\",\"Supply and document scope follows the agreed BOQ and clarifications.\"]]]],\"note\":\"A site photograph or sketch helps resolve lamp, panel, pole and fixing positions.\",\"response\":\"Proposed integrated\/split arrangement; mounting and cable interfaces; supplied-parts list and contractor responsibilities.\"},{\"id\":\"cost\",\"title\":\"Budget & quotation comparison\",\"why\":\"Choose your commercial priority so alternatives can be compared on the same basis.\",\"fields\":[[\"priority\",\"Main cost priority\",[[\"Please recommend\",\"Compare suitable routes before fixing the specification.\"],[\"Lower equipment purchase cost\",\"Compare options that still meet the required lighting and operating conditions.\"],[\"Lower total installed cost\",\"Include poles, foundations, freight, access equipment and installation work.\"],[\"Lower long-term ownership cost\",\"Include maintenance access, replacement parts, labour and freight over an agreed period.\"]]],[\"alternatives\",\"Alternative configurations\",[[\"Please discuss with us\",\"Explain the trade-offs before changing the base proposal.\"],[\"Base requirement only\",\"Follow the specified configuration; identify clarifications or deviations explicitly.\"],[\"Base offer plus an alternative\",\"Show changed components, scope, performance implications and price differences.\"]]],[\"deadline\",\"Which milestone matters most?\",[[\"Not fixed yet\",\"An approximate project stage is enough to begin.\"],[\"Tender submission\",\"State the bid deadline and required submission documents.\"],[\"Shipment\",\"State the requested dispatch date and shipment scope.\"],[\"Arrival at destination \/ site\",\"State the destination and required arrival date, not just a factory dispatch date.\"]]]],\"note\":\"Compare alternatives on the same lighting duty, quantity and delivery scope.\",\"response\":\"Itemised base offer; inclusions\/exclusions; any allowed alternative; delivery terms, milestones and costs assigned to each party.\"},{\"id\":\"service\",\"title\":\"Maintenance & handover\",\"why\":\"Plan the service arrangement before access and replacement become expensive.\",\"fields\":[[\"team\",\"Who will handle routine maintenance?\",[[\"Not decided\u2014please recommend\",\"Set out a practical service arrangement with the proposal.\"],[\"Our own local team\",\"Prioritise accessible components and clear replacement instructions.\"],[\"Our installation \/ service contractor\",\"Define handover information and the contractor\u2019s replacement responsibilities.\"]]],[\"access\",\"Site access\",[[\"Not yet assessed\",\"Identify access constraints during the project review.\"],[\"Routine vehicle and lifting access\",\"Plan safe maintenance and suitable access equipment.\"],[\"Remote, restricted or difficult access\",\"Consider serviceable assemblies, spares and replacement logistics from the start.\"]]],[\"spares\",\"Spare-parts preference\",[[\"Please recommend\",\"Suggest relevant parts and quantities against the project and service plan.\"],[\"Include an initial spares package\",\"Quote the selected replacement assemblies separately.\"],[\"Quote spares as an option\",\"Keep spares visible without assuming they are included in the base order.\"]]]],\"note\":\"Include replacement access, spares and local labour when comparing service costs.\",\"response\":\"Service-access approach; replaceable assemblies; spares proposal; warranty and labour\/freight responsibilities.\"}],\"customer_inputs_optional\":true,\"transmission\":\"none\",\"procurement_inputs\":[\"stage\",\"mandatory requirements \/ preferences\",\"available document revisions\",\"delivery scope\",\"requested proposal outputs\"],\"exports\":[\"direct PDF\",\"print\",\"TXT\",\"editable HTML\"],\"stages\":[[\"planning\",\"Early planning \/ please advise\",\"Start with the location and site use. Add whichever preferences you already know.\"],[\"tender\",\"Tender \/ technical evaluation\",\"Add the current document references, mandatory requirements and submission date.\"],[\"approved\",\"Approved project \/ preparing an order\",\"Identify the approved configuration, quantities and delivery milestone.\"],[\"repeat\",\"Replacement \/ repeat purchase\",\"Start with the previous model, order reference or the part being replaced.\"]],\"outputs\":[\"Configuration recommendation\",\"Itemised equipment and delivery quotation\",\"Base proposal plus an allowed alternative\",\"Tender compliance \/ deviation schedule\",\"Lighting and energy design scope\",\"Pole, bracket and foundation interfaces\",\"Sample \/ inspection and delivery milestones\",\"Spares, warranty and service responsibilities\"],\"specials\":[[\"coastal\",\"Coastal \/ corrosive exposure\",\"Compare materials, coatings and exposed fixings.\"],[\"cold\",\"Cold-weather operation\",\"Review charging protection, usable storage and any heating load.\"],[\"heat\",\"High ambient temperature\",\"Review thermal conditions, storage and equipment placement.\"],[\"hazardous\",\"Explosion-protected equipment\",\"Identify the area classification and equipment approval scope.\"],[\"cctv\",\"Lighting with CCTV\",\"Include the camera, communications and night load.\"],[\"monitoring\",\"Remote monitoring\",\"Review connectivity, monitoring functions and auxiliary loads.\"],[\"wind\",\"Wind + solar assessment\",\"Assess the local wind resource and turbine service requirements.\"]],\"baseFields\":[[\"location\",\"Country \/ city\",\"For example: Muscat, Oman\"],[\"site-use\",\"Road or site use\",\"For example: access road, campus paths, industrial yard\"],[\"quantity\",\"Approximate quantity\",\"If known\"],[\"site-size\",\"Approximate road width \/ area dimensions\",\"For example: 7 m wide, 500 m long; leave blank if unknown\"]],\"contactFields\":[[\"project\",\"Project \/ company\",\"Optional\"],[\"contact\",\"Contact name\",\"Optional\"],[\"email\",\"Email\",\"Optional\"]],\"stageFields\":{\"tender\":[],\"approved\":[[\"approved-ref\",\"Approved model \/ configuration reference\",\"Model, drawing or specification revision\"]],\"repeat\":[[\"repeat-ref\",\"Previous model \/ order reference\",\"Model, order number or component identification\"],[\"repeat-task\",\"What needs replacing or extending?\",\"Complete units, batteries, controllers or an extension\"]],\"planning\":[]},\"documentFields\":[[\"documents\",\"Current documents and revisions\",\"Specification, BOQ, drawings and amendments\"]],\"milestoneFields\":[[\"bid-date\",\"Tender submission deadline\",\"Date, time and time zone, if relevant\"],[\"approval-date\",\"Required technical \/ sample approval\",\"Target date or approval window\"],[\"shipment-date\",\"Required shipment from factory\",\"Dispatch date or target window\"],[\"arrival-date\",\"Required arrival at destination \/ site\",\"Arrival date and port \/ site; allow for local clearance\"]],\"extraFields\":[[\"light-target\",\"Known lighting target\",\"Luminaire lm, site lux \/ road luminance or a tender clause, if available\"],[\"reserve-other\",\"Other reserve target and operating basis\",\"Number of nights, operating hours or tender clause, if known\"],[\"hazardous-detail\",\"Area classification \/ approval requirement\",\"Zone \/ division, gas or dust, temperature class or document reference, if known\"],[\"temperature\",\"Ambient temperature range\",\"Include the unit, if known\"],[\"camera-load\",\"Camera \/ communications duty\",\"Continuous or scheduled operation; model or load if known\"],[\"connectivity\",\"Available connectivity\",\"Mobile network, Wi-Fi, wired connection or unknown\"],[\"wind-data\",\"Available wind information\",\"Location, measurements or an existing assessment, if available\"]],\"summary\":\"Conditional configuration guidance and a project brief\",\"pdf\":\"Searchable PDF using available browser glyphs; no downloaded font files\",\"return_to_enquiry\":\"https:\/\/luxmanlight.com\/contact-2\/\"}<\/script>\n<script type=\"application\/json\" id=\"selection-saved-state\">null<\/script>\n<script>(()=>{if(new URLSearchParams(location.search).has('elementor-preview')||window.elementorFrontend?.isEditMode?.())return;\n const scope=document.getElementById('luxman-project-selection');if(!scope||scope.dataset.luxmanSelectionReady)return;\n scope.dataset.luxmanSelectionReady='true';const byId=id=>scope.querySelector('[id=\"'+id+'\"]');\n if(location.protocol==='file:'&&byId('selection-saved-state').textContent.trim()==='null')for(const link of scope.querySelectorAll('[data-local-return]'))link.href=\"LUXMAN-Solar-Street-Lights.html\"+'#'+link.dataset.localReturn;\n const stages=[\n  ['planning','Early planning \/ please advise','Start with the location and site use. Add whichever preferences you already know.'],\n  ['tender','Tender \/ technical evaluation','Add the current document references, mandatory requirements and submission date.'],\n  ['approved','Approved project \/ preparing an order','Identify the approved configuration, quantities and delivery milestone.'],\n  ['repeat','Replacement \/ repeat purchase','Start with the previous model, order reference or the part being replaced.']\n];\nconst outputs=[\n  'Configuration recommendation','Itemised equipment and delivery quotation',\n  'Base proposal plus an allowed alternative','Tender compliance \/ deviation schedule',\n  'Lighting and energy design scope','Pole, bracket and foundation interfaces',\n  'Sample \/ inspection and delivery milestones','Spares, warranty and service responsibilities'\n];\nconst specials=[\n  ['coastal','Coastal \/ corrosive exposure','Compare materials, coatings and exposed fixings.'],\n  ['cold','Cold-weather operation','Review charging protection, usable storage and any heating load.'],\n  ['heat','High ambient temperature','Review thermal conditions, storage and equipment placement.'],\n  ['hazardous','Explosion-protected equipment','Identify the area classification and equipment approval scope.'],\n  ['cctv','Lighting with CCTV','Include the camera, communications and night load.'],\n  ['monitoring','Remote monitoring','Review connectivity, monitoring functions and auxiliary loads.'],\n  ['wind','Wind + solar assessment','Assess the local wind resource and turbine service requirements.']\n];\nconst baseFields=[\n  ['location','Country \/ city','For example: Muscat, Oman'],\n  ['site-use','Road or site use','For example: access road, campus paths, industrial yard'],\n  ['quantity','Approximate quantity','If known'],\n  ['site-size','Approximate road width \/ area dimensions','For example: 7 m wide, 500 m long; leave blank if unknown']\n];\nconst contactFields=[['project','Project \/ company','Optional'],['contact','Contact name','Optional'],['email','Email','Optional']];\nconst stageFields={\n  tender:[],\n  approved:[['approved-ref','Approved model \/ configuration reference','Model, drawing or specification revision']],\n  repeat:[['repeat-ref','Previous model \/ order reference','Model, order number or component identification'],['repeat-task','What needs replacing or extending?','Complete units, batteries, controllers or an extension']],\n  planning:[]\n};\nconst documentFields=[['documents','Current documents and revisions','Specification, BOQ, drawings and amendments']];\nconst needsDocuments=state=>state.stage==='tender'||\/Tender|BOQ\/.test(state.choices.supply)||state.outputs.includes('Tender compliance \/ deviation schedule');\nconst milestoneFields=[\n  ['bid-date','Tender submission deadline','Date, time and time zone, if relevant'],\n  ['approval-date','Required technical \/ sample approval','Target date or approval window'],\n  ['shipment-date','Required shipment from factory','Dispatch date or target window'],\n  ['arrival-date','Required arrival at destination \/ site','Arrival date and port \/ site; allow for local clearance']\n];\nconst extraFields=[\n  ['light-target','Known lighting target','Luminaire lm, site lux \/ road luminance or a tender clause, if available'],\n  ['reserve-other','Other reserve target and operating basis','Number of nights, operating hours or tender clause, if known'],\n  ['hazardous-detail','Area classification \/ approval requirement','Zone \/ division, gas or dust, temperature class or document reference, if known'],\n  ['temperature','Ambient temperature range','Include the unit, if known'],\n  ['camera-load','Camera \/ communications duty','Continuous or scheduled operation; model or load if known'],\n  ['connectivity','Available connectivity','Mobile network, Wi-Fi, wired connection or unknown'],\n  ['wind-data','Available wind information','Location, measurements or an existing assessment, if available']\n];\nfunction buildDefinition(legacy){\n  const def=structuredClone(legacy);\n  Object.assign(def,{version:'3.2',date:'2026-10-25',stages,outputs,specials,baseFields,contactFields,stageFields,documentFields,milestoneFields,extraFields,\n    summary:'Conditional configuration guidance and a project brief',pdf:'Searchable text PDF with embedded fonts',\n    return_to_enquiry:'https:\/\/luxmanlight.com\/contact-2\/',transmission:'none'});\n  def.sections[0].fields.unshift(['brightness','Lighting result',[\n    ['Please recommend','We propose the light output and layout for the road or site.'],\n    ['Prioritise higher light output','Compare whole-luminaire lumens, optics and the required lighting result.'],\n    ['Known lighting target \/ tender criterion','Add the available lm, lux, road luminance or clause reference.']\n  ]]);\n  def.sections[1].fields.unshift(['format','Construction preference',[\n    ['Please recommend','We compare integrated and independently positioned energy packages.'],\n    ['Integrated preferred','Prioritise a compact installation where solar access and service needs allow.'],\n    ['Separate panel preferred','Position the panel independently from the lamp.'],\n    ['Retain the approved arrangement','Use the existing approved interface or configuration as the base.']\n  ]]);\n  def.sections[0].note='A 3- or 7-night reserve is assessed from a full battery, without solar input, at the agreed light output and hours. Seasonal charging and recovery are reviewed alongside storage.';\n  def.sections[1].note='A site photograph or sketch helps resolve lamp, panel, pole and fixing positions.';\n  def.sections[2].note='Compare alternatives on the same lighting duty, quantity and delivery scope.';\n  def.sections[3].note='Include replacement access, spares and local labour when comparing service costs.';\n  return def;\n}\nconst allGroups=def=>def.sections.flatMap(s=>s.fields);\nfunction serialiseSavedCopy(html,state){\n  const encoded=JSON.stringify(state).replaceAll('<',String.fromCharCode(92)+'u003c');\n  return html.replace(\/(<script[^>]*id=\"selection-saved-state\"[^>]*>)[\\s\\S]*?(<\\\/script>)\/,(_m,start,end)=>start+encoded+end)\n    .replace(\/<a\\b[^>]*data-local-return=\"(inquiry|products)\"[^>]*>\/g,(tag,target)=>tag.replace(\/href=\"[^\"]*\"\/,'href=\"'+(target==='inquiry'?'https:\/\/luxmanlight.com\/contact-2\/':'https:\/\/luxmanlight.com\/led-solar-street-light-outdoor\/')+'\"'));\n}\nfunction emptyState(def){return {stage:'planning',values:{},choices:Object.fromEntries(allGroups(def).map(([id,,options])=>[id,options[0][0]])),firmness:{},specials:[],outputs:[]};}\nfunction selectedChoices(def,state){return allGroups(def).filter(([id,,options])=>state.choices[id]&&state.choices[id]!==options[0][0]).map(([id,label])=>({id,label,value:state.choices[id],firmness:state.firmness[id]||'Preference'}));}\nfunction conditionalVisibility(state){\n  const has=id=>state.specials.includes(id);\n  return {\n    documents:needsDocuments(state),\n    'light-target':\/higher light output|Known lighting target\/.test(state.choices.brightness),\n    'reserve-other':state.choices.reserve==='Tender-defined \/ other',\n    'hazardous-detail':has('hazardous'),temperature:has('cold')||has('heat'),\n    'camera-load':has('cctv'),connectivity:has('cctv')||has('monitoring'),'wind-data':has('wind')\n  };\n}\nfunction activeValues(def,state){\n  const visible=conditionalVisibility(state);\n  const ids=[...def.baseFields,...def.contactFields,...(def.stageFields[state.stage]||[]),...(def.milestoneFields||[]),\n    ...(visible.documents?def.documentFields:[]),...def.extraFields.filter(([id])=>visible[id]),['fixed'],['delivery'],['notes']].map(([id])=>id);\n  return Object.fromEntries(ids.filter(id=>String(state.values[id]||'').trim()).map(id=>[id,String(state.values[id]).trim()]));\n}\nfunction briefSections(def,state){\n  const v=activeValues(def,state),choices=selectedChoices(def,state);\n  const rows=fields=>fields.filter(([id])=>v[id]).map(([id,label])=>[label,v[id]]);\n  return [\n    {title:'Project overview',rows:[['Procurement stage',def.stages.find(x=>x[0]===state.stage)?.[1]||state.stage],...rows([...def.baseFields,...def.contactFields])]},\n    {title:'Dates and document references',rows:[...rows(def.milestoneFields||[]),...rows(def.documentFields||[]),...rows(def.stageFields[state.stage]||[]),...rows([['delivery','Delivery destination \/ supply scope']])]},\n    {title:'Mandatory requirements',rows:[...choices.filter(x=>x.firmness==='Mandatory').map(x=>[x.label,x.value]),...rows([['fixed','Customer clauses \/ permitted preferences']])]},\n    {title:'Selected preferences',rows:choices.filter(x=>x.firmness!=='Mandatory').map(x=>[x.label,x.value])},\n    {title:'Special needs and supplied details',rows:[...(state.specials.length?[['Special needs',state.specials.map(id=>def.specials.find(x=>x[0]===id)?.[1]).filter(Boolean).join('; ')]]:[]),...rows(def.extraFields),...rows([['notes','Additional requirements']])]}\n  ].filter(section=>section.rows.length);\n}\nfunction enquirySummary(def,state,guidance){\n  const lines=['Solar street lighting project enquiry'];\n  for(const section of briefSections(def,state))lines.push('',section.title,...section.rows.map(([label,value])=>label+': '+value));\n  if(state.outputs.length)lines.push('','Requested proposal outputs',...state.outputs.map(value=>'- '+value));\n  if(guidance.conflicts.length)lines.push('','Decisions to clarify',...guidance.conflicts.map(value=>'- '+value));\n  lines.push('','I will attach the saved project selection PDF and available documents separately.');\n  return lines.join('\\n');\n}\nfunction enquiryEmailDetails(def,state,guidance){\n  const sections=briefSections(def,state),extras=new Set(def.extraFields.map(([,label])=>label));\n  const rows=sections.flatMap(section=>section.rows.map(([label,value])=>({\n    label:label+(section.title==='Mandatory requirements'?' [Mandatory]':''),value,\n    priority:section.title==='Mandatory requirements'||extras.has(label)?3:label==='Additional requirements'?1:2\n  })));\n  if(state.outputs.length)rows.push({label:'Requested proposal outputs',value:state.outputs.join('; '),priority:2});\n  if(guidance.conflicts.length)rows.push({label:'Decisions to clarify',value:guidance.conflicts.join(' '),priority:3});\n  rows.sort((a,b)=>b.priority-a.priority);\n  const title='Solar street lighting project enquiry';\n  const attachment='Please see the saved selection PDF and project documents, which I will attach manually.';\n  const notice='Email summary shortened. Some entries are previews; the complete requirements are in the saved PDF or full copied brief.';\n  const preview=(value,limit)=>{\n    if(value.length<=limit)return value;\n    let text=value.slice(0,Math.max(0,limit-3));\n    if(\/[\\uD800-\\uDBFF]$\/.test(text))text=text.slice(0,-1);\n    return text.trimEnd()+'...';\n  };\n  const limits=rows.map(row=>row.value.length);\n  const render=shortened=>[title,...(shortened?[notice]:[]),'',...rows.map((row,i)=>row.label+': '+preview(row.value,limits[i])),'',attachment].join('\\n');\n  if(render(false).length<=3600)return {body:render(false),shortened:false,shortenedFields:[]};\n  let excess=render(true).length-3600;\n  const reductionOrder=rows.map((row,i)=>i).sort((a,b)=>rows[a].priority-rows[b].priority||b-a);\n  for(const floor of [180,32])for(const i of reductionOrder){\n    if(excess<=0)break;\n    const reduction=Math.min(excess,Math.max(0,limits[i]-floor));limits[i]-=reduction;excess-=reduction;\n  }\n  return {body:render(true),shortened:true,shortenedFields:rows.filter((row,i)=>limits[i]<row.value.length).map(row=>row.label)};\n}\nfunction enquiryEmail(def,state,guidance){\n  const {body}=enquiryEmailDetails(def,state,guidance);\n  const subject='Solar street lighting enquiry'+(state.values.project?' - '+state.values.project.slice(0,100):state.values.location?' - '+state.values.location.slice(0,100):'');\n  return 'mailto:sales@luxmanlight.com?subject='+encodeURIComponent(subject)+'&body='+encodeURIComponent(body);\n}\nconst distinct=arr=>[...new Set(arr.filter(Boolean))];\nfunction deriveGuidance(def,state){\n  const s=state.choices,v=activeValues(def,state),has=id=>state.specials.includes(id),routes=[],checks=[],quote=[],missing=[],conflicts=[];\n  const add=(title,text)=>{if(!routes.some(r=>r.title===title))routes.push({title,text});};\n  const retained=s.format==='Retain the approved arrangement'||state.stage==='approved';\n  const baseOnly=s.alternatives==='Base requirement only';\n  const integratedFixed=s.format==='Integrated preferred'&&(state.firmness.format==='Mandatory'||baseOnly);\n  if(retained){\n    add('Use the approved configuration as the base','Retain the approved arrangement and document revision. Review the current site and interfaces against that base; identify any required change for approval before changing the configuration.');\n    if(\/Shading\/.test(s.solar)){\n      checks.push('Check solar access against the approved panel arrangement. Keep the approved base and raise any unresolved exposure issue for clarification.');\n      conflicts.push('The approved arrangement must be retained, but shading or a different panel position is reported. Confirm the approved panel location and whether a change is authorised.');\n    }\n  }else if(\/Shading\/.test(s.solar)&&integratedFixed){\n    add('Resolve solar access within the required construction','Keep the required integrated arrangement as the base. Check whether the lamp location can provide suitable solar access; seek permission before evaluating a different panel arrangement.');\n    conflicts.push('Integrated construction is fixed, while the lamp position is shaded. Confirm whether a clear solar position exists or an alternative panel arrangement may be evaluated.');\n  }else if(\/Shading\/.test(s.solar)&&baseOnly){\n    add('Clarify panel positioning within the base requirement','Check solar access against the specified configuration. Identify a feasible panel location and any required deviation before offering a changed arrangement.');\n  }else if(\/Shading\/.test(s.solar)){\n    add('Compare an independently positioned solar panel','Keep the lamp over the required road or area and assess a clearer panel position. Include the bracket, cable route and pole loading in the comparison.');\n    quote.push('Panel position, mounting parts, cable lengths and the light \/ pole interface.');\n  }else if(s.format==='Separate panel preferred')add('Develop the separate-panel arrangement','Compare the required lamp position with solar access, structural loading, cable routing and service access.');\n  else if(s.format==='Integrated preferred'||(!baseOnly&&\/Open, largely\/.test(s.solar)))add('Review the integrated starting configuration','Review the required light output, solar access and battery service access together before selecting the assembly.');\n  if(baseOnly)quote.push('Base offer only. Identify necessary clarifications and deviations; do not substitute a different configuration without approval.');\n  if(s.reserve==='7 nights'){\n    add('Compare longer reserve and charging recovery together','Assess seven no-solar nights at the agreed lighting schedule. Compare usable storage, luminaire efficacy, seasonal PV input and recovery. '+(retained||integratedFixed||baseOnly?'Work within the required construction; raise any unmet reserve or charging requirement for clarification before changing the package.':'A larger or separate energy package may be appropriate.'));\n    checks.push('State the lighting output, hours and starting charge for the seven-night reserve comparison.');\n    quote.push('Night-output schedule, usable battery energy, PV sizing and the seasonal recharge basis.');\n  }else if(s.reserve==='3 nights'){\n    checks.push('Assess three no-solar nights at the agreed output and operating hours, then check seasonal charging and recovery.');\n    quote.push('Three-night reserve basis, battery \/ PV configuration and night schedule.');\n  }else if(s.reserve==='Tender-defined \/ other'){\n    checks.push('Use the customer reserve target and operating basis; state the night hours, output, initial charge and recharge conditions in the energy assessment.');\n    if(!v['reserve-other'])missing.push('Other reserve target or the relevant tender clause, if available.');\n  }\n  if(\/Dusk to dawn, same\/.test(s.night))checks.push('Preserve the required lighting result throughout the night when comparing energy packages.');\n  if(\/Higher output early|Scheduled hours\/.test(s.night))checks.push('Check that the proposed dimming or occupancy schedule suits the site use and adopted lighting requirements.');\n  if(\/higher light output|Known lighting target\/.test(s.brightness)){\n    add('Compare output, distribution and the site lighting result','Start from whole-luminaire lumens or the known site criterion. Review optics, pole layout, uniformity and glare, then compare the electrical load and energy package for that result.');\n    quote.push('Luminaire output, optic, CCT and the layout \/ lighting assessment basis.');\n    if(\/Known lighting target\/.test(s.brightness)&&!v['light-target'])missing.push('Known lighting target or tender clause, if available.');\n  }\n  if(s.cct==='7000K')checks.push('Include the requested 7000K cold-white configuration and specify luminaire output separately.');\n  else if(s.cct!=='Please recommend')checks.push('Include the '+s.cct+' '+(state.firmness.cct==='Mandatory'?'requirement':'preference')+' in the optical and location review.');\n  if(\/Reuse existing poles|Wall, container\/.test(s.mount)){\n    add('Resolve the existing installation interface','Review the existing pole or structure, fixing dimensions, condition and additional panel \/ battery loads. Develop compatible brackets before confirming the package.');\n    quote.push('Retained parts, new fixings, installation interfaces and work assigned to the local contractor.');\n  }\n  if(\/plus poles\/.test(s.supply)||\/New poles\/.test(s.mount))quote.push('Poles, arms, brackets, foundation interfaces and the supplied \/ site-work boundary.');\n  if(s.supply==='Lighting system; poles supplied locally')quote.push('Lamp, panel, battery and controls in the supplier package; pole dimensions, fixings and structural interfaces coordinated with the locally supplied poles.');\n  if(\/Tender|BOQ\/.test(s.supply)||state.stage==='tender'){\n    add('Prepare a traceable technical response','Use the latest specification, BOQ and amendments. Match mandatory clauses to the proposed configuration, evidence and any stated deviation.');\n    quote.push('Compliance \/ deviation schedule, document revisions, quantities and the submission milestone.');\n    if(!v.documents)missing.push('Latest specification \/ BOQ and amendment references, if available.');\n  }\n  if(state.stage==='approved'){\n    checks.push('Confirm the approved configuration and revision before pricing changes or starting production.');\n    if(!v['approved-ref'])missing.push('Approved model, drawing or configuration reference.');\n  }\n  if(state.stage==='repeat'){\n    add('Check replacement and expansion compatibility','Compare the previous model, electrical interfaces, mounting dimensions and control settings before confirming a like-for-like replacement.');\n    if(!v['repeat-ref'])missing.push('Previous model \/ order reference or a component photograph.');\n  }\n  if(s.team==='Our own local team'){\n    add('Prepare handover for your local maintenance team','Specify component access, replacement instructions, relevant tools and initial spares. Set out any training and fault-checking information in the handover scope.');\n    quote.push('Maintenance instructions, replaceable assemblies, tools \/ training scope and recommended initial spares for your local team.');\n  }else if(s.team==='Our installation \/ service contractor'){\n    add('Define the contractor handover and service boundary','Identify the documents and parts the contractor receives, installation checks and replacement responsibilities. Separate supplier support from local labour and access equipment.');\n    quote.push('Contractor handover checklist, supplier \/ contractor responsibilities and warranty labour \/ freight boundaries.');\n  }\n  if(s.deadline==='Tender submission'){\n    quote.push('Submission document list, review \/ clarification window and tender deadline.');\n    if(!v['bid-date'])missing.push('Tender submission deadline, including time zone if relevant.');\n  }else if(s.deadline==='Shipment'){\n    quote.push('Factory dispatch milestone, approval dependencies, packing and shipment scope.');\n    if(!v['shipment-date'])missing.push('Target factory shipment date or window.');\n  }else if(s.deadline==='Arrival at destination \/ site'){\n    quote.push('Required arrival milestone, destination, packing, transit and local clearance \/ site-receipt responsibilities. Distinguish dispatch from arrival.');\n    if(!v['arrival-date'])missing.push('Required arrival date and port \/ site; bid and shipment dates are separate.');\n  }\n  if(has('coastal')){checks.push('Compare materials, coatings and exposed fixings for the actual salt \/ corrosion exposure; IP and corrosion protection are specified separately.');quote.push('Itemised corrosion-protection materials and finish.');}\n  if(has('cold')||has('heat')){checks.push('Review ambient temperature, battery charging \/ discharge limits, equipment placement and any auxiliary heating load.');if(!v.temperature)missing.push('Expected ambient temperature range, if known.');}\n  if(has('hazardous')){\n    add('Define the hazardous-area equipment scope','Identify the area classification and which lamp, storage, control and connection components will be inside it. Review the required approval scope for the proposed configuration.');\n    quote.push('Classified-area equipment list, approval evidence and installation interfaces.');\n    if(!v['hazardous-detail'])missing.push('Area-classification or hazardous-area specification, if available.');\n  }\n  if(has('cctv')||has('monitoring')){\n    add('Budget lighting and connected loads together','Include camera \/ communications operation and connectivity in the night and daytime energy budget. Select storage, PV and service access for the combined duty.');\n    quote.push('Lighting and auxiliary-load schedules, connectivity and selected monitoring functions.');\n  }\n  if(has('wind')){\n    add('Assess the wind contribution before selecting the hybrid package','Review the local wind resource, turbine mounting and maintenance alongside seasonal solar charging. Compare the additional generation with installation and servicing demands.');\n    if(!v['wind-data'])missing.push('Available wind assessment or the site location for an initial resource review.');\n  }\n  if(\/long-term\/.test(s.priority)||\/Remote, restricted\/.test(s.access)){\n    add('Compare serviceable assemblies and replacement logistics','Prioritise practical battery \/ controller access, replaceable assemblies and suitable initial spares. Compare local access costs and replacement freight alongside component prices.');\n    quote.push('Service access, spare assemblies, replacement freight and local labour responsibilities.');\n  }\n  if(\/installed cost\/.test(s.priority))checks.push('Compare optics, pole layout, foundations, freight and installation access against the same required lighting result.');\n  if(\/equipment purchase\/.test(s.priority))checks.push('Compare equipment alternatives while retaining mandatory lighting, reserve and approval requirements.');\n  if(s.spares!=='Please recommend')quote.push(s.spares+'. Identify selected assemblies and quantities separately.');\n  if(s.alternatives==='Base requirement only'&&state.outputs.includes('Base proposal plus an allowed alternative'))conflicts.push('The base requirement is marked as the only offer, but an alternative proposal is also requested. Confirm whether an alternative is permitted.');\n  if(s.alternatives==='Base offer plus an alternative')quote.push('Separate the base offer and alternative, showing configuration, scope and price differences.');\n  const requested={\n    'Configuration recommendation':'Configuration recommendation with the selected constraints, proposed route and reasons.',\n    'Itemised equipment and delivery quotation':'Itemised equipment quantities, delivery scope, inclusions and exclusions.',\n    'Base proposal plus an allowed alternative':'Base and permitted alternative shown separately; retain mandatory requirements and identify deviations.',\n    'Tender compliance \/ deviation schedule':'Clause-by-clause compliance \/ deviation schedule linked to current documents, evidence and open clarifications.',\n    'Lighting and energy design scope':'Lighting and energy assessment scope: adopted criterion, layout \/ photometric basis, night duty, reserve and charging assumptions.',\n    'Pole, bracket and foundation interfaces':'Pole, bracket and foundation interface schedule, fixing dimensions, loading inputs and civil-work responsibilities.',\n    'Sample \/ inspection and delivery milestones':'Sample \/ document approval, inspection records, dispatch and arrival milestones with their dependencies.',\n    'Spares, warranty and service responsibilities':'Itemised spares, warranty coverage and supplier \/ local service labour and freight responsibilities.'\n  };\n  for(const output of state.outputs)if(requested[output])quote.push(output==='Base proposal plus an allowed alternative'&&baseOnly?'Alternative proposal requested: clarify permission before developing an alternative to the base-only offer.':requested[output]);\n  if(state.outputs.includes('Tender compliance \/ deviation schedule')&&!v.documents&&state.stage!=='tender')missing.push('Current specification \/ BOQ references for the requested compliance schedule.');\n  if(!v.location)missing.unshift('Project country \/ city.');\n  if(!v['site-use'])missing.splice(v.location?0:1,0,'Road or site use, with a photograph or sketch if available.');\n  if(v.location&&v['site-use']&&!v['site-size'])missing.push('Approximate road width \/ area dimensions or a sketch, if available.');\n  if(!routes.length)add('Start with a site-based configuration recommendation','Share the location, road or site use and any available photograph. LUXMAN proposes the lighting criterion, optical \/ layout route and an appropriate energy and mounting package.');\n  if(!checks.length)checks.push('Review the applicable local lighting requirements, site geometry, night use and seasonal solar input.');\n  if(!quote.length)quote.push('Proposed lighting \/ energy package, supplied parts, document scope and quotation basis.');\n  const known=selectedChoices(def,state);\n  return {headline:known.length||state.specials.length?'Your configuration discussion brief':'Start your project brief',\n    priorities:known.map(x=>x.label+': '+x.value+(x.firmness==='Mandatory'?' [Mandatory]':'')),\n    routes,checks:distinct(checks),quote:distinct(quote),missing:distinct(missing),conflicts,\n    isDraft:!v.location&&!v['site-use']&&!known.length&&!state.specials.length&&!Object.values(v).some(Boolean)};\n}\n\n\/\/ Small, dependency-free PDF export. Reuses the browser's already available font.\n\/\/ Type 3 glyph masks + ToUnicode preserve searchable text without shipping font files.\n\/\/ PDF 32000-1:2008 sections 9.6.5 \/ 9.10.3. No server calls, libraries, or page screenshots.\n\n\nasync function buildSelectionPdf(def,state,guidance,env={}) {\n  const createCanvas=env.createCanvas||((w,h)=>{const c=document.createElement('canvas');c.width=w;c.height=h;return c;});\n  const family=env.fontFamily||'sans-serif';\n  const probe=createCanvas(1,1).getContext('2d');\n  const glyphs=new Map(),rasterSize=128,scale=1000\/rasterSize;\n  function glyph(char,bold=false){\n    const key=(bold?'b:':'r:')+char;\n    if(!glyphs.has(key)){\n      probe.font=(bold?'700':'400')+' '+rasterSize+'px '+family;\n      const metrics=probe.measureText(char);\n      glyphs.set(key,{char,bold,advance:metrics.width*scale,metrics});\n    }\n    return glyphs.get(key);\n  }\n  const measure=(text,size=10.5,bold=false)=>Array.from(text).reduce((sum,c)=>sum+glyph(c,bold).advance*size\/1000,0);\n  const width=595.28,height=841.89,margin=45,usable=width-2*margin;\n  const ink=[.125,.157,.212],blue=[.161,.29,.439],muted=[.34,.39,.46];\n  const pages=[];let page,y;\n  function row(value,size=10.5,bold=false,color=ink,x=margin,baseline=y){\n    for(const char of String(value))glyph(char,bold);\n    page.rows.push({text:String(value),size,bold,color,x,y:baseline});\n  }\n  function newPage(){\n    page={rows:[]};pages.push(page);y=height-78;\n    row('LUXMAN',16,true,blue,margin,height-40);\n    row('Project selection',10,false,muted,width-margin-110,height-39);\n  }\n  const ensure=space=>{if(y-space<54)newPage();};\n  function wrap(value,size,bold){\n    const lines=[];\n    for(const paragraph of String(value).replace(\/\\t\/g,'    ').split(\/\\r?\\n\/)){\n      let buffer='';\n      for(const token of paragraph.match(\/\\s+|[^\\s]+\/gu)||['']){\n        if(measure(buffer+token,size,bold)<=usable){buffer+=token;continue;}\n        if(buffer.trim()){lines.push(buffer.trimEnd());buffer='';}\n        if(measure(token,size,bold)<=usable)buffer=token.trimStart();\n        else for(const char of token){\n          if(measure(buffer+char,size,bold)>usable){lines.push(buffer);buffer='';}\n          buffer+=char;\n        }\n      }\n      lines.push(buffer.trimEnd());\n    }\n    return lines;\n  }\n  function text(value,{size=10.5,bold=false,color=ink,gap=5}={}){\n    for(const line of wrap(value,size,bold)){\n      ensure(size*1.55);if(line)row(line,size,bold,color);y-=size*1.5;\n    }\n    y-=gap;\n  }\n  const heading=title=>{ensure(65);y-=7;text(title,{size:13,bold:true,color:blue,gap:6});};\n  const item=(label,value)=>{if(!value?.trim())return;ensure(34);text(label+': '+value,{size:10,gap:4});};\n  const list=items=>{for(const value of items)text('- '+value,{gap:3});};\n  newPage();\n  text('Solar street lighting project brief',{size:20,bold:true,color:blue,gap:8});\n  text((guidance.isDraft?'Draft \/ preferences to develop':'Customer selections \/ discussion brief')+' | '+(env.date||new Date().toISOString().slice(0,10))+' | Sheet v'+def.version,{size:9,color:muted,gap:12});\n  const sections=briefSections(def,state),longRows=[];\n  const compact=(label,value)=>{if(value.length>220){item(label,value.slice(0,200)+' [Full text in additional details.]');longRows.push([label,value]);}else item(label,value);};\n  for(const section of sections.filter(x=>['Project overview','Dates and document references','Mandatory requirements'].includes(x.title))){heading(section.title);for(const [label,value] of section.rows)compact(label,value);}\n  if(state.outputs.length){heading('Requested proposal outputs');list(state.outputs);}\n  if(guidance.conflicts.length){heading('Decisions to clarify');list(guidance.conflicts);}\n  for(const title of ['Selected preferences','Special needs and supplied details']){\n    const section=sections.find(x=>x.title===title);\n    if(section){heading(title);for(const [label,value] of section.rows)compact(label,value);}\n  }\n  heading('Configuration routes to discuss');\n  for(const route of guidance.routes){ensure(62);text(route.title,{bold:true,gap:2});text(route.text,{gap:8});}\n  heading('What the technical review should establish');list(guidance.checks);\n  heading('What the proposal should make clear');list(guidance.quote);\n  if(longRows.length){heading('Additional details - complete customer text');for(const [label,value] of longRows)item(label,value);}\n  text('Email this PDF with any available specification, BOQ, drawing or site photographs to sales@luxmanlight.com.',{bold:true,color:blue,gap:8});\n  text('Preferences and initial routes are for project review. The selected configuration, performance basis, evidence, supply scope and commercial terms are confirmed in the offer.',{size:9,color:muted});\n  pages.forEach((p,i)=>{\n    page=p;row('sales@luxmanlight.com | Project discussion brief',8,false,muted,margin,30);\n    row((i+1)+' \/ '+pages.length,8,false,muted,width-margin-30,30);\n  });\n\n  const encoder=new TextEncoder(),encode=value=>encoder.encode(value),objects=[null];\n  const number=value=>Number(value.toFixed(3)).toString();\n  const add=object=>{objects.push(object);return objects.length-1;};\n  const catalog=add(null),pagesId=add(null);\n  function stream(data,extra=''){\n    if(typeof data==='string')data=encode(data);\n    return add([encode('<< \/Length '+data.length+' '+extra+' >>\\nstream\\n'),data,encode('\\nendstream')]);\n  }\n  async function deflate(bytes){\n    if(typeof CompressionStream==='undefined')return {bytes,filter:''};\n    const packed=await new Response(new Blob([bytes]).stream().pipeThrough(new CompressionStream('deflate'))).arrayBuffer();\n    return {bytes:new Uint8Array(packed),filter:'\/Filter \/FlateDecode'};\n  }\n  const fonts=[];\n  const hex=value=>value.toString(16).toUpperCase().padStart(2,'0');\n  const unicodeHex=value=>Array.from({length:value.length},(_,i)=>value.charCodeAt(i).toString(16).padStart(4,'0')).join('');\n  for(const bold of [false,true]){\n    const set=[...glyphs.values()].filter(g=>g.bold===bold);\n    for(let start=0;start<set.length;start+=250){\n      const subset=set.slice(start,start+250),name='F'+fonts.length;\n      const charProcs=[],images=[],mapping=[];\n      for(let i=0;i<subset.length;i++){\n        const g=subset[i],code=i+1;g.font=name;g.code=hex(code);\n        const left=Math.max(0,g.metrics.actualBoundingBoxLeft||0),right=Math.max(0,g.metrics.actualBoundingBoxRight||0);\n        const ascent=Math.max(0,g.metrics.actualBoundingBoxAscent||0),descent=Math.max(0,g.metrics.actualBoundingBoxDescent||0);\n        let proc=number(g.advance)+' 0 0 0 0 0 d1';\n        if(right+left>0&&ascent+descent>0){\n          const pad=2,w=Math.ceil(left+right)+2*pad,h=Math.ceil(ascent+descent)+2*pad;\n          const canvas=createCanvas(w,h),context=canvas.getContext('2d');\n          context.font=(bold?'700':'400')+' '+rasterSize+'px '+family;\n          context.textBaseline='alphabetic';context.fillStyle='#000';context.fillText(g.char,left+pad,ascent+pad);\n          const rgba=context.getImageData(0,0,w,h).data,stride=Math.ceil(w\/8),mask=new Uint8Array(stride*h);\n          for(let py=0;py<h;py++)for(let px=0;px<w;px++)if(rgba[(py*w+px)*4+3]>=100)mask[py*stride+(px>>3)]|=1<<(7-(px&7));\n          const compressed=await deflate(mask);\n          const image=stream(compressed.bytes,'\/Type \/XObject \/Subtype \/Image \/Width '+w+' \/Height '+h+' \/ImageMask true \/BitsPerComponent 1 \/Decode [1 0] '+compressed.filter);\n          const imageName='G'+code;images.push('\/'+imageName+' '+image+' 0 R');\n          const x=-(left+pad)*scale,bottom=-(descent+pad)*scale,pw=w*scale,ph=h*scale;\n          proc=number(g.advance)+' 0 '+[x,bottom,x+pw,bottom+ph].map(number).join(' ')+' d1\\nq '+[pw,0,0,ph,x,bottom].map(number).join(' ')+' cm \/'+imageName+' Do Q';\n        }\n        charProcs.push('\/g'+code+' '+stream(proc)+' 0 R');\n        mapping.push('<'+g.code+'> <'+unicodeHex(g.char)+'>');\n      }\n      const cmap=['\/CIDInit \/ProcSet findresource begin','12 dict begin','begincmap','\/CIDSystemInfo << \/Registry (Adobe) \/Ordering (UCS) \/Supplement 0 >> def','\/CMapName \/LUXMAN'+name+' def','\/CMapType 2 def','1 begincodespacerange','<00> <FF>','endcodespacerange'];\n      for(let at=0;at<mapping.length;at+=100){const batch=mapping.slice(at,at+100);cmap.push(batch.length+' beginbfchar',...batch,'endbfchar');}\n      cmap.push('endcmap','CMapName currentdict \/CMap defineresource pop','end','end');\n      const toUnicode=stream(cmap.join('\\n'));\n      const font=add(encode('<< \/Type \/Font \/Subtype \/Type3 \/Name \/'+name+' \/FontBBox [-1000 -1000 3000 3000] \/FontMatrix [0.001 0 0 0.001 0 0] \/CharProcs << '+charProcs.join(' ')+' >> \/Encoding << \/Type \/Encoding \/Differences [1 '+subset.map((_,i)=>'\/g'+(i+1)).join(' ')+'] >> \/FirstChar 1 \/LastChar '+subset.length+' \/Widths ['+subset.map(g=>number(g.advance)).join(' ')+'] \/Resources << \/XObject << '+images.join(' ')+' >> >> \/ToUnicode '+toUnicode+' 0 R >>'));\n      fonts.push({name,id:font});\n    }\n  }\n  const pageIds=[];\n  for(const p of pages){\n    const commands=['q 0.953 0.655 0.071 RG 2 w '+margin+' '+number(height-52)+' m '+number(width-margin)+' '+number(height-52)+' l S Q'];\n    for(const r of p.rows){\n      const runs=[];\n      for(const char of r.text){const g=glyph(char,r.bold),last=runs.at(-1);if(last?.font===g.font)last.code+=g.code;else runs.push({font:g.font,code:g.code});}\n      commands.push('BT '+r.color.map(number).join(' ')+' rg 1 0 0 1 '+number(r.x)+' '+number(r.y)+' Tm');\n      for(const run of runs)commands.push('\/'+run.font+' '+number(r.size)+' Tf <'+run.code+'> Tj');\n      commands.push('ET');\n    }\n    const content=stream(commands.join('\\n'));\n    pageIds.push(add(encode('<< \/Type \/Page \/Parent '+pagesId+' 0 R \/MediaBox [0 0 '+width+' '+height+'] \/Resources << \/Font << '+fonts.map(f=>'\/'+f.name+' '+f.id+' 0 R').join(' ')+' >> >> \/Contents '+content+' 0 R >>')));\n  }\n  objects[catalog]=encode('<< \/Type \/Catalog \/Pages '+pagesId+' 0 R >>');\n  objects[pagesId]=encode('<< \/Type \/Pages \/Count '+pageIds.length+' \/Kids ['+pageIds.map(id=>id+' 0 R').join(' ')+'] >>');\n  const chunks=[encode('%PDF-1.4\\n% LUXMAN standalone export\\n')],offsets=[0];let position=chunks[0].length;\n  for(let id=1;id<objects.length;id++){\n    offsets.push(position);const pieces=[encode(id+' 0 obj\\n'),...(Array.isArray(objects[id])?objects[id]:[objects[id]]),encode('\\nendobj\\n')];\n    chunks.push(...pieces);position+=pieces.reduce((sum,b)=>sum+b.length,0);\n  }\n  const xref=position;\n  chunks.push(encode('xref\\n0 '+objects.length+'\\n0000000000 65535 f \\n'+offsets.slice(1).map(n=>String(n).padStart(10,'0')+' 00000 n \\n').join('')+'trailer\\n<< \/Size '+objects.length+' \/Root '+catalog+' 0 R >>\\nstartxref\\n'+xref+'\\n%%EOF\\n'));\n  const result=new Uint8Array(chunks.reduce((sum,b)=>sum+b.length,0));position=0;\n  for(const chunk of chunks){result.set(chunk,position);position+=chunk.length;}\n  return result;\n}\n\n(()=>{\n  const def=JSON.parse(byId('selection-definition').textContent);\n  const form=byId('selection'),status=byId('status'),bottomStatus=byId('pdf-bottom-status');\n  const seed=emptyState(def);\n  let restored;\n  try{restored=JSON.parse(byId('selection-saved-state').textContent);}catch{restored=null;}\n  let state=restored?{...seed,...restored,values:{...seed.values,...restored.values},choices:{...seed.choices,...restored.choices}}:seed;\n  const fields=[...form.querySelectorAll('input:not([type=radio]):not([type=checkbox]),textarea')];\n  const keyOf=el=>el.closest('[data-state-key]')?.dataset.stateKey||el.id;\n  function hydrate(){\n    byId('procurement-stage').value=state.stage;\n    for(const el of fields)el.value=state.values[keyOf(el)]||'';\n    for(const el of form.querySelectorAll('input[type=radio]'))el.checked=state.choices[el.name]===el.value;\n    for(const el of form.querySelectorAll('[name^=firmness-]'))el.value=state.firmness[el.name.slice(9)]||'Preference';\n    for(const el of form.querySelectorAll('[name=special]'))el.checked=state.specials.includes(el.value);\n    for(const el of form.querySelectorAll('[name=requested-output]'))el.checked=state.outputs.includes(el.value);\n  }\n  function readState(){\n    state.stage=byId('procurement-stage').value;\n    for(const el of fields)if(!el.closest('[hidden]'))state.values[keyOf(el)]=el.value.trim();\n    for(const [id] of allGroups(def)){const selected=form.querySelector('input[name=\"'+id+'\"]:checked');if(selected)state.choices[id]=selected.value;}\n    state.specials=[...form.querySelectorAll('[name=special]:checked')].map(el=>el.value);\n    state.outputs=[...form.querySelectorAll('[name=requested-output]:checked')].map(el=>el.value);\n    for(const el of form.querySelectorAll('[name^=firmness-]'))state.firmness[el.name.slice(9)]=el.value;\n    return state;\n  }\n  function updateVisibility(stageChanged=false){\n    byId('stage-advice').textContent=def.stages.find(x=>x[0]===state.stage)[2];\n    for(const panel of form.querySelectorAll('[data-stage-panel]'))panel.hidden=panel.dataset.stagePanel!==state.stage;\n    for(const [id,,options] of allGroups(def))form.querySelector('[data-firmness=\"'+id+'\"]').hidden=state.choices[id]===options[0][0];\n    const shown=conditionalVisibility(state);\n    for(const field of form.querySelectorAll('[data-conditional]'))field.hidden=!shown[field.dataset.conditional];\n    if(stageChanged){\n      const open={planning:[],tender:['cost','proposal-details'],approved:['installation','proposal-details'],repeat:['installation','service','proposal-details']};\n      for(const id of open[state.stage])byId(id).open=true;\n      if(['tender','approved'].includes(state.stage))byId('project-dates').open=true;\n    }\n    const priority={'Tender submission':'bid-date',Shipment:'shipment-date','Arrival at destination \/ site':'arrival-date'}[state.choices.deadline];\n    for(const [id] of def.milestoneFields)byId(id).closest('label').classList.toggle('milestone-priority',id===priority);\n  }\n  const list=(id,items)=>{const node=byId(id);node.replaceChildren(...items.map(value=>{const el=document.createElement('li');el.textContent=value;return el;}));};\n  function summary(){\n    const node=byId('p1-selection-summary');\n    const sections=briefSections(def,state).map(section=>{\n      const box=document.createElement('div'),h=document.createElement('h3'),dl=document.createElement('dl');h.textContent=section.title;\n      for(const [label,value] of section.rows){const dt=document.createElement('dt'),dd=document.createElement('dd');dt.textContent=label;dd.textContent=value;dl.append(dt,dd);}\n      box.className='brief-section';box.append(h,dl);return box;\n    });\n    node.replaceChildren(...sections);\n    list('output-list',state.outputs);byId('requested-outputs').hidden=!state.outputs.length;\n    if(!selectedChoices(def,state).length){const p=document.createElement('p');p.className='empty-note';p.textContent='Unselected technical items remain for LUXMAN to recommend.';node.append(p);}\n  }\n  function updateSummary(){\n    readState();updateVisibility();\n    const guide=deriveGuidance(def,state);\n    byId('review-title').textContent=guide.headline;\n    byId('review-count').textContent=selectedChoices(def,state).length+' preferences \/ requirements and '+state.specials.length+' special needs selected. You can save at any stage.';\n    const routes=byId('route-list');routes.replaceChildren(...guide.routes.map(route=>{const box=document.createElement('div'),title=document.createElement('h3'),p=document.createElement('p');box.className='route';title.textContent=route.title;p.textContent=route.text;box.append(title,p);return box;}));\n    list('check-list',guide.checks);list('quote-list',guide.quote);list('missing-list',guide.missing.length?guide.missing:['The basic site information is present. Add available specifications or photographs when you contact us.']);\n    list('conflict-list',guide.conflicts);byId('clarifications').hidden=!guide.conflicts.length;\n    summary();byId('email-enquiry').href=enquiryEmail(def,state,guide);\n    const emailDetails=enquiryEmailDetails(def,state,guide);\n    byId('email-summary-note').textContent=emailDetails.shortened\n      ?'The email summary is shortened. Some entries are previews; attach the saved PDF or use Copy full enquiry brief for the complete requirements.'\n      :'The email includes your project details and selected requirements. Attach the saved PDF and any documents manually. The copy button preserves your complete entries.';\n    byId('enquiry-text').value=enquirySummary(def,state,guide);return guide;\n  }\n  function openTopic(){const id=decodeURIComponent(location.hash.slice(1)),node=byId(id);if(node?.tagName==='DETAILS')node.open=true;}\n  const save=(name,bytes,type)=>{const link=document.createElement('a'),url=URL.createObjectURL(new Blob([bytes],{type}));link.href=url;link.download=name;document.body.append(link);link.click();link.remove();setTimeout(()=>URL.revokeObjectURL(url),2000);};\n  function fileName(extension){const name=(state.values.project||'project').normalize('NFKC').replace(\/[^\\p{L}\\p{N}._-]+\/gu,'-').replace(\/^-+|-+$\/g,'').slice(0,70)||'project';const stamp=new Date().toISOString().replace(\/[-:]\/g,'').slice(0,13).replace('T','-');return 'LUXMAN-'+name+'-selection-'+stamp+'.'+extension;}\n  function describe(guide){\n    const lines=['LUXMAN SOLAR STREET LIGHTING PROJECT BRIEF','Sheet v'+def.version,''];\n    for(const section of briefSections(def,state))lines.push(section.title,...section.rows.map(([label,value])=>label+': '+value),'');\n    if(state.outputs.length)lines.push('Requested proposal outputs',...state.outputs.map(x=>'- '+x),'');\n    for(const [title,items] of [['Configuration routes to discuss',guide.routes.map(x=>x.title+': '+x.text)],['Technical review',guide.checks],['Proposal scope',guide.quote],['Decisions to clarify',guide.conflicts],['Useful information to add',guide.missing]])if(items.length)lines.push('',title,...items.map(x=>'- '+x));\n    lines.push('','Send to sales@luxmanlight.com with any available BOQ, drawings or photos.');return lines.join('\\r\\n');\n  }\n  window.luxmanBuildSelectionPdf=async()=>{\n    const guidance=updateSummary(),snapshot=structuredClone(state);\n    if(document.fonts?.status==='loading')await Promise.race([document.fonts.ready,new Promise(resolve=>setTimeout(resolve,1200))]);\n    await new Promise(resolve=>setTimeout(resolve,0));\n    return buildSelectionPdf(def,snapshot,guidance,{fontFamily:getComputedStyle(scope).fontFamily});\n  };\n  const buttons=[byId('pdf'),byId('pdf-bottom')];\n  async function downloadPdf(){\n    if(buttons.some(button=>button.disabled))return;\n    buttons.forEach(button=>button.disabled=true);status.textContent=bottomStatus.textContent='Preparing your PDF...';\n    try{const name=fileName('pdf'),bytes=await window.luxmanBuildSelectionPdf();save(name,bytes,'application\/pdf');status.textContent=bottomStatus.textContent='PDF download started. Email the saved file to sales@luxmanlight.com when you are ready.';}\n    catch(error){status.textContent=bottomStatus.textContent=error.message||'The PDF could not be created. Your entries are kept; save an editable copy or TXT.';}\n    finally{buttons.forEach(button=>button.disabled=false);}\n  }\n  buttons.forEach(button=>button.addEventListener('click',downloadPdf));\n  byId('export').addEventListener('click',()=>{save(fileName('txt'),describe(updateSummary()),'text\/plain;charset=utf-8');status.textContent='TXT download started. Your selections remain on this page.';});\n  byId('copy-enquiry').addEventListener('click',async()=>{\n    const text=enquirySummary(def,state,updateSummary()),notice=byId('enquiry-status');\n    try{if(!navigator.clipboard?.writeText)throw new Error('clipboard unavailable');await navigator.clipboard.writeText(text);notice.textContent='Complete enquiry brief copied. Paste it into your email and attach the PDF when ready.';}\n    catch{const fallback=byId('copy-fallback'),input=byId('enquiry-text');fallback.hidden=false;fallback.open=true;input.value=text;input.focus();input.select();notice.textContent='Select and copy the enquiry text below. Your selections are kept.';}\n  });\n  byId('save').addEventListener('click',()=>{\n    updateSummary();const clone=scope.cloneNode(true);delete clone.dataset.luxmanSelectionReady;\n    for(const button of clone.querySelectorAll('button[disabled]'))button.removeAttribute('disabled');\n    clone.querySelector('#status').textContent='Your saved selections have been restored. You can continue editing.';\n    clone.querySelector('#pdf-bottom-status').textContent='';\n    save(fileName('html'),\"\\u003c!doctype html>\\n\\u003cmeta charset=\\\"utf-8\\\">\\n\\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1\\\">\\n\\u003c!-- Plain HTML. No bundled site header\/footer, fonts, plugins or shortcodes. -->\\n\"+serialiseSavedCopy(clone.outerHTML,state),'text\/html;charset=utf-8');status.textContent='Editable copy download started. Open that file later to continue with these selections.';\n  });\n  let printOpen;\n  const preparePrint=()=>{updateSummary();const review=scope.querySelector('.guidance-review');if(printOpen===undefined)printOpen=review.open;review.open=true;};\n  byId('print').addEventListener('click',()=>{preparePrint();window.print();});\n  window.addEventListener('beforeprint',preparePrint);\n  window.addEventListener('afterprint',()=>{if(printOpen!==undefined)scope.querySelector('.guidance-review').open=printOpen;printOpen=undefined;});\n  window.addEventListener('hashchange',openTopic);\n  form.addEventListener('input',updateSummary);\n  form.addEventListener('change',event=>{updateSummary();if(event.target.id==='procurement-stage')updateVisibility(true);if(event.target.name==='deadline'&&event.target.value!=='Not fixed yet')byId('project-dates').open=true;});\n  hydrate();updateVisibility(true);updateSummary();openTopic();\n})();\n\n})();<\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Plan your solar street lighting project. Choose the priorities you know. See which configuration routes to discuss, then save a [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-104522","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/pages\/104522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/comments?post=104522"}],"version-history":[{"count":10,"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/pages\/104522\/revisions"}],"predecessor-version":[{"id":104544,"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/pages\/104522\/revisions\/104544"}],"wp:attachment":[{"href":"https:\/\/luxmanlight.com\/ja\/wp-json\/wp\/v2\/media?parent=104522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}