Home Type
Roof
Electrical
DB Panel
Inverter

Build Your Installation Profile

Select your home details below. Each section of the guide will highlight what applies specifically to your home.

What type of home do you live in?

Terrace House

Inter-terrace or corner terrace with flat or pitched roof

Semi-Detached

Shared wall with one neighbour, typically pitched roof

Detached Bungalow

Standalone home with more roof area and flexible layouts

Good Class Bungalow

Premium standalone on 15,000+ sqft with extensive roof options

What type of roof does your home have?

Tiled Pitched

Clay or concrete tiles on a sloped roof — the most common in Singapore

Metal Roof

Corrugated or trapezoidal metal — common on extensions and carports

Standing Seam

Premium raised-seam metal roofing — no drilling required for mounting

Flat Concrete

Flat RC roof common on terrace houses — uses tilt frames for optimal angle

What is your electrical supply type?

Single Phase

Standard household supply — most Singapore landed homes. Typically up to 5–8 kWp system size

Three Phase

Higher capacity supply — larger homes, GCBs, or homes with EV chargers. Supports larger systems

Not Sure

That’s okay — Sunollo will check this during your free site assessment

Where is your main distribution board?

Under the Stairs

Most common in terrace homes — may require longer AC cable routing from inverter

Near Main Entrance

Often near car porch or front door — shorter AC runs, simpler cable routing

Another Floor

Sometimes found on upper floors or in utility rooms — routing assessed during site visit

Not Sure

No worries — Sunollo locates and assesses your DB during the free site assessment

Where would you prefer the inverter?

Side Wall

Exterior side wall — close to roof, good ventilation, easy service access

Car Porch Area

Near the car porch or driveway — sheltered, convenient for EV charger pairing

Backyard

Rear exterior wall — hidden from street view, weather-protected in many layouts

No Preference

Let Sunollo recommend the optimal location based on your roof and DB position

Your Installation Profile

Based on your selections, the guide below highlights what applies to your home. Scroll down to explore each section.

Home
/
Solar for Homes
/
How We Install

How We Install Solar on Your Home

A clear, visual guide to roofs, mounting systems, inverter placement, cable routing, and finishing standards — designed to help you understand what to expect before your site assessment.

Every home is unique. Final design always depends on your specific roof, structure, and electrical layout — confirmed during Sunollo’s detailed site assessment.

Personalise This Guide →Personalise This Guide →

Why We Created This Guide

Many homeowners want to visualise how solar will actually look and work on their home — before committing to anything. This guide explains the decisions, standards, and care that go into every Sunollo installation.

Every home is different. But the principles we follow are consistent: safety, neatness, durability, and respect for your home’s architecture. Understanding these principles helps you feel confident about the process ahead.

Roof Types

Your roof type determines the mounting method, panel layout, and cable routing approach. Here are the most common roof types we work with on Singapore landed homes.

Tiled Pitched Roof

The most common roof type on Singapore landed homes. Requires rail-based mounting with tile hooks that slip under existing tiles without damage.

Metal Roof

Found on some modern landed homes and extensions. Allows direct clamp mounting without roof penetration, making installation faster and waterproof by design.

Flat Concrete Roof

Common on terrace houses and some semi-detached homes. Uses weighted or ballasted mounting frames that can be angled for optimal sun exposure.

Standing Seam Metal

Premium roofing with raised seams. Panels attach with non-penetrating seam clamps, preserving the roof’s integrity and clean architectural lines.

Solar panels on a tiled pitched roof in Singapore — Sunollo installation

Mounting Methods

How panels are physically attached to your roof. The method depends on your roof type, structural conditions, and aesthetic preferences.

Rail-Based Tile Hook

Tile hooks slide under existing tiles, supporting aluminium rails where panels are secured. No tiles are removed or broken. Waterproofing is maintained throughout.

Direct Metal Clamp

Clamps grip directly onto metal roof seams or ribs without drilling. Fast to install, inherently waterproof, and ideal for standing seam or corrugated metal roofs.

Panel Types

The panels themselves vary in appearance, efficiency, and suitability. Your choice affects both performance and how the system looks on your roof.

All-Black Monocrystalline

Premium appearance with black cells, frame, and backsheet. High efficiency and minimal visual clutter on your roof. Sunollo’s most popular choice for design-conscious homeowners.

Silver-Frame Monocrystalline

High-efficiency cells with a silver aluminium frame. Slightly lower cost than all-black options while maintaining excellent performance and durability.

Premium solar panels — 3D illustration of photovoltaic technology

Inverter Types

The inverter converts DC electricity from your panels into AC power your home can use. Different inverter types suit different roof layouts and future expansion plans.

String Inverter

A single unit that converts power from all panels. Cost-effective and well-suited to roofs with consistent sun exposure and minimal shading.

Optimiser-Based System

Individual optimisers on each panel maximise output even when some panels are shaded. Ideal for complex roof layouts or partially shaded conditions.

Sunollo inverter installation — string and hybrid inverter options

Main Distribution Board Locations

Your main distribution board (DB) is where the solar system connects to your home’s electrical grid. Its location directly affects how AC cables are routed from the inverter.

Under the Stairs

The most common DB location in Singapore landed homes. The AC cable from the inverter needs to penetrate the building wall to reach the interior DB, typically via a single clean entry point that is sealed and waterproofed.

Near Main Entrance

DB located outside or just inside the main entrance, near the car porch. The ideal scenario for solar — the AC cable runs directly along exterior walls in conduit without ever penetrating the building envelope.

Utility Area (Another Floor)

DB on a different floor from the inverter, requiring a longer vertical AC cable route. Sunollo maps the exact path, using existing risers and concealing cable runs behind walls where possible.

How Inverter Location Is Chosen

Where the inverter sits on your home depends on proximity to the roof, distance to your distribution board, ventilation, weather protection, and aesthetics. Here are the most common placements.

Side Wall (Ground Floor)

The most common inverter location. Mounted on an exterior side wall near the roof edge, in the passageway between your home and the boundary wall. Short DC run, good ventilation, discreet placement.

Car Porch Area

Mounted on the car porch wall or pillar. Often close to both the front roof and the DB. Sheltered by the car porch roof, with excellent access for servicing. Modern inverters integrate neatly.

Backyard Exterior Wall

Hidden from street view on the rear exterior wall. Ideal when the main roof faces the back or when zero visible equipment from the front is a priority. May require a longer AC cable run to the DB.

DC Cable Routing

DC cables carry electricity from your roof panels down to the inverter. The route is planned carefully to minimise visual impact, protect cables from weather, and ensure safe, accessible connections.

DC Roof-to-Inverter Run

DC cables carry raw solar power from each panel on the roof down to the inverter. They run along the mounting rails, converge at the roof edge, and drop through conduit or the ceiling void to the inverter below.

Under-Tile & Cavity Routing

On tiled roofs, DC cables run beneath the tiles along the rail system — invisible from the ground. Where ceiling cavities are accessible, cables drop internally and route through the void to eliminate all visible runs.

On-Roof Cable Management

Cables are clipped to mounting rails at regular intervals, bundled neatly, and protected from UV. No loose loops, no dangling cables. The roof remains clean and visually uncluttered from any angle.

AC Cable Routing

AC cables run from the inverter to your main distribution board. Some routes are short and simple. Others may require visible conduit along walls — always finished neatly and aligned with Sunollo’s visual standards.

AC Inverter-to-DB Run

AC cables carry converted household electricity from the inverter to the main distribution board. The route length depends on where each is located — from as short as 2 metres to a longer multi-wall exterior run.

Short vs Long AC Routes

When the inverter and DB share a wall, the run can be just a few metres of conduit. When they’re on opposite sides of the house, Sunollo routes along the least visible path — base of walls, under eaves, or through ceiling voids.

Interior vs Exterior Routing

For some homes, routing the AC cable through ceiling voids or under-floor spaces eliminates most visible exterior conduit. Sunollo evaluates this during design and recommends it where practical and cost-effective.

Conduits and Visual Finish Standards

Where cables must run along visible walls, Sunollo uses rectangular white conduit with neat corners, disciplined alignment, and clean penetrations. This is where obsessive attention to detail becomes visible.

Rectangular White Conduit

Sunollo’s standard for visible cable runs. UV-stabilised PVC with a flat, clean profile against the wall — more like architectural trim than industrial trunking. Corners mitered at precise 90° angles with matching corner pieces.

Corner & Transition Finishing

Every corner uses purpose-made pieces that maintain a continuous clean line. No gaps, no silicone fills, no improvised joints. All runs are perfectly level or plumb, checked with a spirit level and secured at consistent intervals.

Colour Matching & Concealment

Standard white conduit suits most homes. For specific wall colours, conduit can be painted to match — making it virtually invisible. Under-eave routing keeps conduit in shadow, largely hidden from ground level.

Sunollo Installation Standards

Every installation reflects our belief that solar should be as beautiful as it is functional. These are the principles that guide every decision our team makes on your roof and around your home.

Panel Alignment

Every panel is aligned precisely to your roof geometry. No uneven gaps, no misaligned rows.

Cable Discipline

All cables are secured, clipped, routed through conduit where visible, and labelled at junction points.

Minimal Visual Clutter

We plan routes to minimise visible runs. Where conduit is needed, it follows architectural lines.

Architectural Respect

Your home’s design language is considered at every stage. Equipment placement respects façade lines and proportions.

Service Access

Components are installed with future maintenance in mind. Nothing is buried or inaccessible.

Weather Detailing

Roof penetrations are sealed, cables are UV-protected, and all exterior components are rated for tropical conditions.

Scenario Explorer

See how different combinations of roof type, inverter location, and cable routing come together in real installations. Browse scenarios to find one that resembles your home.

Most Common

Tiled Roof + Side Wall Inverter

Roof Type
Tiled Pitched
Inverter
String Inverter
DB Location
Under the Stairs
Inverter Loc.
Side Wall
Modern Homes

Metal Roof + Car Porch Inverter

Roof Type
Metal Roof
Inverter
Optimiser System
DB Location
Near Entrance
Inverter Loc.
Car Porch
Future-Ready

Flat Roof + Backyard Inverter

Roof Type
Flat Concrete
Inverter
Hybrid Inverter
DB Location
Utility Area
Inverter Loc.
Backyard

Standards and Compliance Notes

Solar installations in Singapore follow specific technical standards. Here’s what they mean in plain language — and how Sunollo applies them with discipline.

Key technical requirements and compliance standards for residential solar in Singapore.

Singapore’s primary standard for solar installations. It covers system design, wiring, protection, and connection to the electricity grid. Sunollo designs and installs every system in full compliance with SS 638, ensuring your system is safe, efficient, and approved for grid connection.

Every installation meets SS 638 wiring standards and EMA grid connection requirements.

The Energy Market Authority oversees how solar systems connect to Singapore’s electricity grid. Sunollo handles all EMA documentation and ensures your system qualifies for net metering — meaning excess energy you produce is credited back to your electricity account.

Sunollo handles all permits, inspections, and EMA registration on your behalf.

Before installation, Sunollo assesses whether your roof can safely support the additional weight of solar panels and mounting hardware. This includes reviewing structural drawings where available, and conducting on-site structural checks to ensure long-term safety.

Frequently Asked Questions

Practical answers to the questions homeowners ask most about solar installation, cable visibility, inverter placement, and finishing standards.

Will there be visible cables on my home?

It depends on where your inverter and distribution board are located. In many cases, most cabling runs through the roof space or along hidden areas. Where cables must cross visible walls, Sunollo uses neat rectangular conduit that follows architectural lines — always white, always aligned.

Where is the inverter placed?

Typically on an exterior wall near the roof — such as a side wall, car porch area, or backyard. The location is chosen to minimise cable runs, ensure good ventilation, and keep the inverter accessible for future servicing.

Where is my distribution board (DB) located?

Many Singapore homes have the DB under the stairs or in a utility area. When the DB is inside, the AC cable route is usually longer and may require conduit along an exterior wall to reach an entry point. Sunollo plans this route carefully to minimise visual impact.

Does mounting damage my roof?

Yes. Tiled roofs use tile hooks and rails. Metal roofs use clamps. Flat roofs use weighted frames. Each method is specifically designed for that roof type to ensure structural safety, waterproofing, and long-term durability.

Will cables be hidden or visible?

In most cases, DC cables on the roof and inverter connections can be concealed. Some AC cable runs may require visible conduit depending on your home’s layout. Sunollo always plans to minimise visibility, and uses premium white rectangular conduit where exposure is unavoidable.

Is every installation customised to my home?

The exact panel layout, inverter placement, cable routing, conduit requirements, structural adequacy, and shading analysis are all confirmed during Sunollo’s site assessment. This guide explains the general principles — your specific design is tailored to your home.

See How This Could Work on Your Home

Share your roof photos or schedule a site assessment. Our team will show you exactly how solar could look and perform on your specific home.

Get Your Free Assessment

Why Sunollo

Every Sunollo installation reflects a commitment to precision, safety, and respect for your home. Our standards are not just technical — they’re a promise.

80,000+

Panels installed across Singapore

25 Years

Warranty on every installation

SS 638

Full compliance with Singapore standards

Your Installation Summary

Based on your selections above, here is what a typical Sunollo installation on your home would involve.

Recommended Mounting
Based on your roof type

Finalised during your site assessment

Cable Route
Based on your DB location

Route planning depends on your specific home layout

Est. System Size
Based on your home type

Confirmed after detailed roof survey and shade analysis

!function(){var R={'tiled':'Tiled Pitched','metal':'Metal','standing-seam':'Standing Seam','flat':'Flat Concrete'},D={'under-stairs':'Under the Stairs','near-entrance':'Near Main Entrance'},I={'side-wall':'Side Wall','car-porch':'Car Porch','backyard':'Backyard'};var orig=window._igHL;window._igHL=function(S){document.querySelectorAll('.ig-knowledge-card').forEach(function(c){var t=(c.querySelector('.ig-card-title')||{}).textContent||'',m=false;if(S.roof&&R[S.roof]&&t.indexOf(R[S.roof])>-1)m=true;if(S.db&&D[S.db]&&t.indexOf(D[S.db])>-1)m=true;if(S.inverter&&I[S.inverter]&&t.indexOf(I[S.inverter])>-1)m=true;if(!S.roof&&!S.db&&!S.inverter)return;c.style.transition='all .3s';c.style.opacity=m?'1':'.4';var et=c.querySelector('.ig-match-tag');if(m&&!et){var tg=document.createElement('div');tg.className='ig-match-tag';tg.style.cssText='position:absolute;top:10px;right:10px;background:#fb432f;color:#fff;font-size:10px;font-weight:600;padding:2px 8px;border-radius:12px';tg.textContent='Your home';c.style.position='relative';c.appendChild(tg)}else if(!m&&et)et.remove()})}}(); document.addEventListener('click',function(e){var c=e.target.closest('.ig-config-card');if(!c)return;setTimeout(function(){var S={};document.querySelectorAll('[data-step]').forEach(function(st){st.querySelectorAll('.ig-config-card').forEach(function(cd){if(cd.style.borderColor==='rgb(251, 67, 47)')S[st.dataset.step]=cd.dataset.value})});var R={'tiled':'Tiled Pitched','metal':'Metal','standing-seam':'Standing Seam','flat':'Flat Concrete'},D={'under-stairs':'Under the Stairs','near-entrance':'Near Main Entrance'},I={'side-wall':'Side Wall','car-porch':'Car Porch','backyard':'Backyard'};var any=S.roof||S.db||S.inverter;if(!any)return;document.querySelectorAll('.ig-knowledge-card').forEach(function(kc){var t=(kc.querySelector('.ig-card-title')||{}).textContent||'',m=false;if(S.roof&&R[S.roof]&&t.indexOf(R[S.roof])>-1)m=true;if(S.db&&D[S.db]&&t.indexOf(D[S.db])>-1)m=true;if(S.inverter&&I[S.inverter]&&t.indexOf(I[S.inverter])>-1)m=true;kc.style.transition='all .3s';kc.style.opacity=m?'1':'.4';var et=kc.querySelector('.ig-match-tag');if(m&&!et){var tg=document.createElement('div');tg.className='ig-match-tag';tg.style.cssText='position:absolute;top:10px;right:10px;background:#fb432f;color:#fff;font-size:10px;font-weight:600;padding:2px 8px;border-radius:12px';tg.textContent='Your home';kc.style.position='relative';kc.appendChild(tg)}else if(!m&&et)et.remove()});document.querySelectorAll('.ig-scenario-card').forEach(function(sc){var t=(sc.querySelector('.ig-card-title')||{}).textContent||'',m=false;if(S.roof&&R[S.roof]&&t.toLowerCase().indexOf(R[S.roof].toLowerCase())>-1)m=true;sc.style.transition='all .3s';sc.style.opacity=m?'1':'.5'})},100)}) document.addEventListener('click',function(e){if(!e.target.closest('.ig-config-card'))return;setTimeout(function(){var S={};document.querySelectorAll('[data-step]').forEach(function(st){st.querySelectorAll('.ig-config-card').forEach(function(cd){if(cd.style.borderColor==='rgb(251, 67, 47)')S[st.dataset.step]=cd.dataset.value})});var sec=document.getElementById('your-recommendation');if(!sec||!S.roof)return;sec.classList.remove('ig-hidden');var M={'tiled':'Rail-Based Tile Hooks','metal':'Direct Metal Clamps','standing-seam':'Standing Seam Clamps (no drilling)','flat':'Tilt Frame System'};var C={'under-stairs':'Longer AC run through interior or exterior conduit','near-entrance':'Short, direct AC run from inverter to DB','another-floor':'Multi-floor routing — assessed on site'};var Cap={'terrace':'5–8 kWp typical','semi-detached':'8–12 kWp typical','detached':'10–20 kWp typical','gcb':'15–30+ kWp typical'};var el=document.getElementById('reco-mounting');if(el)el.textContent=M[S.roof]||'To be assessed';el=document.getElementById('reco-cable');if(el)el.textContent=C[S.db]||'Route planned on site';el=document.getElementById('reco-capacity');if(el)el.textContent=Cap[S.home]||'Assessed on site';var mn=document.getElementById('reco-mounting-note');if(mn&&S.roof==='tiled')mn.textContent='Hooks slide under existing tiles — no visible drilling. Rails align panels precisely.';if(mn&&S.roof==='metal')mn.textContent='Clamps grip metal ribs or seams directly. Fast, secure, weather-tight.';if(mn&&S.roof==='standing-seam')mn.textContent='Non-penetrative clamps grip raised seams. The cleanest installation method available.';if(mn&&S.roof==='flat')mn.textContent='Angled frames tilt panels for optimal sun exposure. Ballasted or anchored as needed.';var cn=document.getElementById('reco-cable-note');if(cn&&S.db==='under-stairs')cn.textContent='AC cable will route from '+((S.inverter||'inverter').replace(/-/g,' '))+' to your interior DB. Conduit may be needed on exterior walls.';if(cn&&S.db==='near-entrance')cn.textContent='Short run from inverter to DB near entrance. Minimal visible conduit expected.'},200)}) !function(){'use strict';document.querySelectorAll('a[href^="#"]').forEach(function(a){a.addEventListener('click',function(e){var t=document.querySelector(this.getAttribute('href'));if(t){e.preventDefault();window.scrollTo({top:t.getBoundingClientRect().top+window.pageYOffset-80,behavior:'smooth'})}})});var pb=document.createElement('div');pb.style.cssText='position:fixed;top:0;left:0;height:3px;background:linear-gradient(90deg,#fb432f,#ff6b5a);width:0;z-index:10000;transition:width .15s linear;pointer-events:none';document.body.appendChild(pb);window.addEventListener('scroll',function(){var h=document.documentElement.scrollHeight-window.innerHeight;pb.style.width=h>0?(window.scrollY/h)*100+'%':'0'},{passive:true});var pills=document.querySelectorAll('.ig-nav-pill'),secs=[];pills.forEach(function(pl){var hr=(pl.getAttribute('href')||'');if(hr.charAt(0)==='#'){var s=document.getElementById(hr.slice(1));if(s)secs.push({el:s,pill:pl})}});function upNav(){var y=window.scrollY+140,act=null;secs.forEach(function(s){if(s.el.offsetTop<=y)act=s});pills.forEach(function(p){p.style.opacity='.5';p.style.borderBottomColor='transparent'});if(act){act.pill.style.opacity='1';act.pill.style.borderBottomColor='#fb432f'}}window.addEventListener('scroll',upNav,{passive:true});upNav();var faqSec=document.getElementById('faq');if(faqSec){faqSec.querySelectorAll('.ig-knowledge-card').forEach(function(card){var title=card.querySelector('.ig-card-title'),body=card.querySelector('.ig-card-summary');if(!title||!body)return;body.style.cssText='max-height:0;overflow:hidden;transition:max-height .4s ease,opacity .3s ease,padding .3s ease;opacity:0;padding-top:0;padding-bottom:0';var ind=document.createElement('span');ind.textContent='+';ind.style.cssText='float:right;font-size:22px;font-weight:300;color:#fb432f;transition:transform .3s ease;line-height:1';title.style.cursor='pointer';title.appendChild(ind);title.addEventListener('click',function(){var open=body.style.maxHeight!=='0px'&&body.style.maxHeight!=='0'&&body.style.maxHeight!=='';if(open){body.style.maxHeight='0';body.style.opacity='0';body.style.paddingTop='0';body.style.paddingBottom='0';ind.textContent='+';ind.style.transform='rotate(0)'}else{body.style.maxHeight=body.scrollHeight+40+'px';body.style.opacity='1';body.style.paddingTop='12px';body.style.paddingBottom='12px';ind.textContent='\u2212';ind.style.transform='rotate(180deg)'}})})}}(); !function(){var anEls=document.querySelectorAll('.ig-section,.ig-knowledge-card,.ig-scenario-card,.ig-trust-stat,.ig-reco-card');anEls.forEach(function(el){el.style.opacity='0';el.style.transform='translateY(20px)';el.style.transition='opacity .6s ease,transform .6s ease'});if('IntersectionObserver' in window){var io=new IntersectionObserver(function(es){es.forEach(function(en){if(en.isIntersecting){var el=en.target;var d=Math.min(Array.from(el.parentElement.children).indexOf(el)*100,500);setTimeout(function(){el.style.opacity='1';el.style.transform='translateY(0)'},d);io.unobserve(el)}})},{threshold:.08,rootMargin:'0px 0px -30px 0px'});anEls.forEach(function(el){io.observe(el)})}else{anEls.forEach(function(el){el.style.opacity='1';el.style.transform='none'})}var lm={};var cm={};document.querySelectorAll('.ig-knowledge-card').forEach(function(card){if(card.closest('#faq')||card.closest('#scenarios')||card.closest('#configurator'))return;var te=card.querySelector('.ig-card-title');if(!te)return;var tt=(te.textContent||'').trim(),lb=lm[tt];if(lb){var bg=document.createElement('div');bg.textContent=lb;var c=cm[lb]||'#fb432f';bg.style.cssText='position:absolute;top:12px;right:12px;background:'+c+'14;color:'+c+';font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;letter-spacing:.02em;line-height:1.4';card.style.position='relative';card.appendChild(bg)}});document.querySelectorAll('.ig-knowledge-card,.ig-scenario-card').forEach(function(card){if(card.closest('#configurator'))return;card.style.transition='transform .25s ease,box-shadow .25s ease,border-color .25s ease';card.onmouseenter=function(){this.style.transform='translateY(-4px)';this.style.boxShadow='0 12px 32px rgba(0,0,0,.08)'};card.onmouseleave=function(){this.style.transform='translateY(0)';this.style.boxShadow=''}});document.querySelectorAll('.ig-config-card').forEach(function(c){c.setAttribute('role','button');c.setAttribute('tabindex','0');c.addEventListener('keydown',function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();this.click()}})});document.querySelectorAll('[data-step]').forEach(function(s){s.setAttribute('role','radiogroup');s.setAttribute('aria-label','Select '+(s.dataset.step||'').replace(/-/g,' '))})}(); !function(){var lb=document.createElement('div');lb.id='ig-lightbox';lb.style.cssText='position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.92);z-index:10001;display:none;align-items:center;justify-content:center;flex-direction:column;cursor:pointer';lb.innerHTML='

';document.body.appendChild(lb);lb.addEventListener('click',function(){lb.style.display='none';document.body.style.overflow=''});document.addEventListener('keydown',function(e){if(e.key==='Escape'&&lb.style.display==='flex'){lb.style.display='none';document.body.style.overflow=''}});document.addEventListener('click',function(e){var card=e.target.closest('.ig-gallery-card');if(!card)return;var img=card.querySelector('img');var cap=card.querySelector('.ig-gallery-caption');if(img){document.getElementById('ig-lb-img').src=img.src;document.getElementById('ig-lb-img').alt=img.alt||'';document.getElementById('ig-lb-cap').textContent=cap?(cap.textContent||''):'';lb.style.display='flex';document.body.style.overflow='hidden'}})}(); !function(){var gallery=document.getElementById('gallery'),faq=document.getElementById('faq');if(gallery&&faq&&gallery.parentElement===faq.parentElement)faq.parentElement.insertBefore(gallery,faq);var scSec=document.getElementById('scenarios');if(scSec){var scGrid=scSec.querySelector('.ig-card-grid')||scSec.querySelector('.ig-scenario-scroll');if(scGrid){var scCards=scGrid.querySelectorAll('.ig-scenario-card');if(scCards.length){var bar=document.createElement('div');bar.style.cssText='display:flex;gap:8px;flex-wrap:wrap;margin-bottom:24px';['All','Tiled','Metal','Flat','Hybrid'].forEach(function(f){var ch=document.createElement('button');ch.textContent=f;ch.dataset.filter=f;ch.style.cssText='padding:8px 18px;border-radius:24px;border:1.5px solid '+(f==='All'?'#fb432f':'#e0e0e0')+';background:'+(f==='All'?'#fb432f':'#fff')+';color:'+(f==='All'?'#fff':'#555')+';font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;font-family:inherit';ch.addEventListener('click',function(){bar.querySelectorAll('button').forEach(function(b){b.style.background='#fff';b.style.color='#555';b.style.borderColor='#e0e0e0'});this.style.background='#fb432f';this.style.color='#fff';this.style.borderColor='#fb432f';var v=this.dataset.filter;scCards.forEach(function(c){var t=(c.querySelector('.ig-card-title')||{}).textContent||'';if(v==='All'||t.toLowerCase().indexOf(v.toLowerCase())>-1){c.style.display='';c.style.opacity='1';c.style.transform='translateY(0)'}else{c.style.opacity='0';c.style.transform='translateY(10px)';setTimeout(function(){c.style.display='none'},300)}})});bar.appendChild(ch)});scGrid.parentElement.insertBefore(bar,scGrid)}}}}() !function(){'use strict';var state={homeType:null,roofType:null,electricalPhase:null,dbLocation:null,inverterPref:null,step:0,complete:false};var savingsMap={'Detached / Bungalow':{min:600,max:1200,kWp:'15\u201335',panels:'30\u201370'},'Semi-Detached':{min:400,max:800,kWp:'10\u201322',panels:'20\u201345'},'Terrace / Townhouse':{min:250,max:500,kWp:'6\u201314',panels:'12\u201328'},'Cluster / Strata Landed':{min:200,max:450,kWp:'5\u201312',panels:'10\u201324'}};var steps=[{id:'home-type',question:'What type of home do you live in?',subtitle:'This helps us estimate your system size and savings potential.',options:[{value:'Detached / Bungalow',icon:'\ud83c\udfe0',desc:'Standalone home with full roof access'},{value:'Semi-Detached',icon:'\ud83c\udfe1',desc:'Shared wall, typically 2 roof faces'},{value:'Terrace / Townhouse',icon:'\ud83c\udfe2',desc:'Row house with front-facing roof'},{value:'Cluster / Strata Landed',icon:'\ud83c\udfd8\ufe0f',desc:'Managed estate with roof guidelines'}],stateKey:'homeType'},{id:'roof-type',question:'What kind of roof does your home have?',subtitle:'This determines how panels are mounted.',options:[{value:'Tiled Pitched',icon:'\ud83e\uddf1',desc:'Clay or concrete tiles on a slope'},{value:'Metal Roof',icon:'\u2699\ufe0f',desc:'Corrugated or flat metal sheeting'},{value:'Standing Seam',icon:'\u2728',desc:'Premium metal with raised seams'},{value:'Flat Concrete',icon:'\u2b1c',desc:'Flat rooftop, common on terraces'}],stateKey:'roofType'},{id:'electrical',question:'Is your home single-phase or three-phase?',subtitle:'Check your meter box \u2014 most Singapore homes are single-phase.',options:[{value:'Single Phase',icon:'\u26a1',desc:'Standard for most homes (up to 12 kWp)'},{value:'Three Phase',icon:'\u26a1\u26a1',desc:'Larger homes, allows bigger systems'},{value:'Not Sure',icon:'\u2753',desc:'We\'ll confirm during your assessment'}],stateKey:'electricalPhase'},{id:'db-location',question:'Where is your main electrical panel?',subtitle:'This affects how we route cables from the inverter.',options:[{value:'Under the Stairs',icon:'\ud83d\udeb6',desc:'Most common in landed homes'},{value:'Near Main Entrance',icon:'\ud83d\udeaa',desc:'Typically near the front door'},{value:'Utility Area',icon:'\ud83d\udd27',desc:'Kitchen, helper room, or another floor'},{value:'Not Sure',icon:'\u2753',desc:'We\'ll find it during assessment'}],stateKey:'dbLocation'},{id:'inverter-pref',question:'What matters most to you?',subtitle:'This helps us recommend the right inverter system.',options:[{value:'Best Value',icon:'\ud83d\udcb0',desc:'Maximum savings, proven technology'},{value:'Maximum Output',icon:'\ud83d\udcc8',desc:'Get the most from every panel'},{value:'Future-Ready',icon:'\ud83d\udd0b',desc:'Battery storage & EV ready'},{value:'No Preference',icon:'\u2705',desc:'Let Sunollo recommend'}],stateKey:'inverterPref'}];window._igState=state;window._igSteps=steps;window._igSavings=savingsMap}(); !function(){'use strict';if(!window._igState||!window._igSteps)return;var S=window._igState,steps=window._igSteps,savMap=window._igSavings;var overlay,wizardEl,currentStep=0;function buildWizard(){overlay=document.createElement('div');overlay.id='ig-wizard-overlay';overlay.style.cssText='position:fixed;top:0;left:0;width:100%;height:100%;z-index:100000;background:#fff;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .6s cubic-bezier(.4,0,.2,1)';overlay.innerHTML='
';document.body.appendChild(overlay);wizardEl=document.getElementById('ig-wizard');requestAnimationFrame(function(){overlay.style.opacity='1'});renderStep()}function renderStep(){var step=steps[currentStep];var prog=document.getElementById('ig-wiz-progress');prog.innerHTML='';steps.forEach(function(s,i){var dot=document.createElement('div');dot.style.cssText='width:'+(i===currentStep?'32px':'10px')+';height:10px;border-radius:5px;background:'+(iStep '+(currentStep+1)+' of '+steps.length+'

'+step.question+'

'+step.subtitle+'

';var optGrid=document.getElementById('ig-wiz-options');step.options.forEach(function(opt,oi){var card=document.createElement('div');card.className='ig-wiz-opt';card.dataset.value=opt.value;card.style.cssText='padding:20px 16px;border:2px solid #eee;border-radius:16px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fafafa;position:relative;overflow:hidden';card.innerHTML='
'+opt.icon+'
'+opt.value+'
'+opt.desc+'
';card.addEventListener('mouseenter',function(){if(!this.classList.contains('selected')){this.style.borderColor='#fb432f';this.style.transform='translateY(-2px)';this.style.boxShadow='0 8px 24px rgba(251,67,47,.12)'}});card.addEventListener('mouseleave',function(){if(!this.classList.contains('selected')){this.style.borderColor='#eee';this.style.transform='';this.style.boxShadow=''}});card.addEventListener('click',function(){S[step.stateKey]=opt.value;optGrid.querySelectorAll('.ig-wiz-opt').forEach(function(c){c.classList.remove('selected');c.style.borderColor='#eee';c.style.background='#fafafa';c.style.transform='';c.style.boxShadow=''});this.classList.add('selected');this.style.borderColor='#fb432f';this.style.background='linear-gradient(135deg,#fff5f4,#fff)';this.style.boxShadow='0 8px 24px rgba(251,67,47,.15)';this.style.transform='scale(1.02)';setTimeout(function(){if(currentStep0){var back=document.createElement('button');back.textContent='\u2190 Back';back.style.cssText='background:none;border:none;color:#888;font-size:14px;font-weight:500;cursor:pointer;padding:10px 20px;transition:color .2s';back.addEventListener('click',function(){currentStep--;S.step=currentStep;renderStep()});back.addEventListener('mouseenter',function(){this.style.color='#fb432f'});back.addEventListener('mouseleave',function(){this.style.color='#888'});nav.appendChild(back)}}function showResults(){var sv=savMap[S.homeType]||{min:300,max:700,kWp:'8\u201320',panels:'16\u201340'};var content=document.getElementById('ig-wiz-content');content.style.opacity='0';setTimeout(function(){content.innerHTML='
\u2728

Your Personalized Solar Plan

Based on your '+S.homeType+' with a '+S.roofType+' roof

$'+sv.min+'\u2013$'+sv.max+'
Est. Annual Savings
'+sv.kWp+'
System Size (kWp)
'+sv.panels+'
Solar Panels

Your Setup Summary

Explore Your Installation \u2193Book Free Assessment
';var setupGrid=document.querySelector('#ig-your-setup div:last-child');[{label:'Home Type',value:S.homeType},{label:'Roof',value:S.roofType},{label:'Electrical',value:S.electricalPhase},{label:'DB Location',value:S.dbLocation},{label:'Priority',value:S.inverterPref}].forEach(function(item){var row=document.createElement('div');row.style.cssText='display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #eee';row.innerHTML=''+item.label+''+item.value+'';setupGrid.appendChild(row)});content.style.opacity='1';document.getElementById('ig-wiz-progress').innerHTML='
Profile Complete
';document.getElementById('ig-wiz-nav').innerHTML='';document.querySelectorAll('#ig-wizard a').forEach(function(a){a.addEventListener('click',function(){if(this.getAttribute('href')==='#configurator'){overlay.style.opacity='0';setTimeout(function(){overlay.style.display='none';window._igPersonalize&&window._igPersonalize()},600)}})})},200)}var _igTrigger=function(){setTimeout(buildWizard,1200)};if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',_igTrigger)}else{_igTrigger()}}(); !function(){'use strict';if(!window._igState)return;var S=window._igState;function personalize(){var chipBar=document.createElement('div');chipBar.id='ig-chip-bar';chipBar.style.cssText='position:fixed;bottom:0;left:0;right:0;background:rgba(255,255,255,.97);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid rgba(0,0,0,.06);padding:12px 24px;display:flex;align-items:center;gap:10px;z-index:9999;justify-content:center;transform:translateY(100%);transition:transform .5s cubic-bezier(.4,0,.2,1)';var chips=[{label:S.homeType,color:'#fb432f'},{label:S.roofType,color:'#2563eb'},{label:S.electricalPhase,color:'#7c3aed'},{label:S.dbLocation,color:'#059669'},{label:S.inverterPref,color:'#d97706'}];chips.forEach(function(c){if(!c.label)return;var chip=document.createElement('span');chip.style.cssText='display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border-radius:20px;font-size:12px;font-weight:600;background:'+c.color+'12;color:'+c.color+';border:1px solid '+c.color+'30;white-space:nowrap';chip.textContent=c.label;chipBar.appendChild(chip)});var editBtn=document.createElement('button');editBtn.innerHTML='\u270f\ufe0f Edit';editBtn.style.cssText='margin-left:auto;background:none;border:1.5px solid #ddd;border-radius:20px;padding:6px 16px;font-size:12px;font-weight:600;color:#666;cursor:pointer;transition:all .2s;white-space:nowrap';editBtn.addEventListener('click',function(){var ov=document.getElementById('ig-wizard-overlay');if(ov){ov.style.display='flex';ov.style.opacity='1'}});chipBar.appendChild(editBtn);document.body.appendChild(chipBar);setTimeout(function(){chipBar.style.transform='translateY(0)'},100);document.body.style.paddingBottom='64px';highlightRelevant();addPersonalizedHeaders()}function highlightRelevant(){var roofLower=(S.roofType||'').toLowerCase();var scenarioCards=document.querySelectorAll('.ig-scenario-card,.ig-card');scenarioCards.forEach(function(card){var title=(card.querySelector('.ig-card-title')||{}).textContent||'';var text=card.textContent||'';var isRelevant=text.toLowerCase().indexOf(roofLower)>-1||text.toLowerCase().indexOf((S.homeType||'').toLowerCase())>-1;if(isRelevant){card.style.borderColor='#fb432f';card.style.boxShadow='0 0 0 2px rgba(251,67,47,.15)';var badge=document.createElement('div');badge.style.cssText='position:absolute;top:-8px;right:12px;background:#fb432f;color:#fff;font-size:10px;font-weight:700;padding:3px 10px;border-radius:10px;text-transform:uppercase;letter-spacing:.5px';badge.textContent='Matches Your Home';card.style.position='relative';card.appendChild(badge)}})}function addPersonalizedHeaders(){var sections=document.querySelectorAll('[id]');var personalMap={'roof-types':'Your '+S.roofType+' Roof Installation','mounting':'Mounting for Your '+S.roofType+' Roof','inverters':'Inverter Options for Your '+S.homeType,'electrical':'Electrical Setup: '+S.electricalPhase,'cable-management':'Cable Routing from '+S.dbLocation,'scenarios':'Installation Scenarios Like Yours'};sections.forEach(function(sec){var key=sec.id;if(personalMap[key]){var label=sec.querySelector('.ig-section-label');if(label){var note=document.createElement('div');note.style.cssText='font-size:13px;color:#fb432f;font-weight:600;margin-top:8px;display:flex;align-items:center;gap:6px';note.innerHTML=' Personalized for you';label.parentElement.insertBefore(note,label.nextSibling)}}})}window._igPersonalize=personalize}(); !function(){'use strict';var css=document.createElement('style');css.textContent='@keyframes igSlideUp{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}@keyframes igFadeIn{from{opacity:0}to{opacity:1}}@keyframes igScaleIn{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes igShimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}@keyframes igPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.95)}}@keyframes igCheckmark{0%{stroke-dashoffset:24}100%{stroke-dashoffset:0}}@keyframes igConfetti{0%{transform:translateY(0) rotate(0);opacity:1}100%{transform:translateY(-60px) rotate(720deg);opacity:0}}.ig-section-reveal{opacity:0;transform:translateY(40px);transition:opacity .8s cubic-bezier(.4,0,.2,1),transform .8s cubic-bezier(.4,0,.2,1)}.ig-section-reveal.visible{opacity:1;transform:translateY(0)}.ig-wiz-opt:active{transform:scale(.96)!important;transition-duration:.1s!important}@media(max-width:767px){#ig-wizard{padding:28px 16px!important}#ig-wiz-options{grid-template-columns:1fr 1fr!important;gap:10px!important}.ig-wiz-opt{padding:16px 12px!important}#ig-chip-bar{padding:10px 12px!important;gap:6px!important;overflow-x:auto;justify-content:flex-start!important;-webkit-overflow-scrolling:touch}#ig-chip-bar span{flex-shrink:0}#ig-flow-nodes{flex-wrap:wrap!important;gap:8px!important}#ig-flow-nodes svg{width:24px}}@media(max-width:479px){#ig-wiz-options{grid-template-columns:1fr!important}.ig-wiz-opt div:first-child{font-size:22px!important}}';document.head.appendChild(css);function initScrollReveal(){var sections=document.querySelectorAll('[id]:not(#ig-wizard-overlay):not(#ig-chip-bar)');sections.forEach(function(s){if(s.offsetHeight>50&&s.offsetHeight<5000)s.classList.add('ig-section-reveal')});if('IntersectionObserver' in window){var obs=new IntersectionObserver(function(entries){entries.forEach(function(e){if(e.isIntersecting){e.target.classList.add('visible');obs.unobserve(e.target)}})},{threshold:.15,rootMargin:'0px 0px -60px 0px'});document.querySelectorAll('.ig-section-reveal').forEach(function(el){obs.observe(el)})}}function addSelectionFeedback(){document.addEventListener('click',function(e){var opt=e.target.closest('.ig-wiz-opt');if(!opt)return;var rect=opt.getBoundingClientRect();var ripple=document.createElement('div');ripple.style.cssText='position:absolute;width:0;height:0;border-radius:50%;background:rgba(251,67,47,.15);left:'+(e.clientX-rect.left)+'px;top:'+(e.clientY-rect.top)+'px;transform:translate(-50%,-50%);pointer-events:none;transition:width .6s,height .6s,opacity .6s';opt.appendChild(ripple);requestAnimationFrame(function(){ripple.style.width='200px';ripple.style.height='200px';ripple.style.opacity='0'});setTimeout(function(){ripple.remove()},700);showCheckmark(opt)})}function showCheckmark(el){var check=document.createElement('div');check.style.cssText='position:absolute;top:8px;right:8px;width:24px;height:24px;border-radius:50%;background:#fb432f;display:flex;align-items:center;justify-content:center;animation:igScaleIn .3s cubic-bezier(.4,0,.2,1)';check.innerHTML='';el.appendChild(check)}function addConfetti(){var oldShow=window.showResults;if(typeof oldShow==='function')return;var observer=new MutationObserver(function(mutations){mutations.forEach(function(m){m.addedNodes.forEach(function(n){if(n.nodeType===1&&n.textContent&&n.textContent.indexOf('Personalized Solar Plan')>-1){fireConfetti()}})})});observer.observe(document.body,{childList:true,subtree:true})}function fireConfetti(){var colors=['#fb432f','#ff6b5a','#fbbf24','#22c55e','#3b82f6','#a855f7'];for(var i=0;i<24;i++){var c=document.createElement('div');c.style.cssText='position:fixed;width:8px;height:8px;border-radius:'+(Math.random()>.5?'50%':'2px')+';background:'+colors[i%colors.length]+';top:40%;left:'+(30+Math.random()*40)+'%;z-index:100001;pointer-events:none;animation:igConfetti '+(1+Math.random())+'s cubic-bezier(.4,0,.2,1) forwards;animation-delay:'+Math.random()*.3+'s;transform:rotate('+Math.random()*360+'deg)';document.body.appendChild(c);setTimeout(function(){c.remove()},2000)}}document.addEventListener('DOMContentLoaded',function(){setTimeout(function(){initScrollReveal();addSelectionFeedback();addConfetti()},1200)})}(); !function(){'use strict'; // === FIX: Section ID alias map — patches wrong IDs in personalizer + CMS connector === var ID_MAP={'mounting':'mounting-methods','inverters':'inverter-types','electrical':'installation-standards','cable-management':'dc-cabling'}; // Patch getElementById to resolve aliases var _origGetById=document.getElementById.bind(document); document.getElementById=function(id){return _origGetById(ID_MAP[id]||id)}; // === FIX: CMS Connector — rewrite to use Webflow CMS API instead of HTML parse === var CMS_API_BASE='https://api.webflow.com/v2'; var COLLECTION_MAP={ 'roof-types': {id:'69ca88ea858357ea3ef961de', section:'roof-types'}, 'mounting-methods':{id:'69ca88eb2a5df264e5010e3f', section:'mounting-methods'}, 'inverter-types': {id:'69ca88f18dd1d064e10eef92', section:'inverter-types'}, 'standards-notes': {id:'69ca8902e689f3f6b0a0b951', section:'installation-standards'}, 'installation-scenarios':{id:'69ca88fd7bd508383733e67b', section:'scenarios'}, 'gallery-examples':{id:'69ca8904cc80e7238ea1facf', section:'gallery'} }; // Replace old _igPersonalize chain with fixed version var _prevPersonalize=window._igPersonalize; window._igPersonalize=function(){ if(_prevPersonalize)_prevPersonalize(); // Add personalized note badges using corrected section IDs var state=window._igState||{}; var personalMap={ 'roof-types': state.roofType?'Your '+state.roofType+' Roof':null, 'mounting-methods': state.roofType?'Mounting for Your '+state.roofType+' Roof':null, 'inverter-types': state.homeType?'Inverter Options for Your '+state.homeType:null, 'installation-standards': 'Singapore Solar Regulations', 'scenarios': 'Installation Scenarios Like Yours', 'gallery': 'Real Sunollo Installations' }; Object.keys(personalMap).forEach(function(sectionId){ var msg=personalMap[sectionId]; if(!msg)return; var sec=_origGetById(sectionId); if(!sec)return; if(sec.querySelector('.ig-personal-note'))return; var label=sec.querySelector('.ig-section-label'); if(!label)return; var note=document.createElement('div'); note.className='ig-personal-note'; note.style.cssText='font-size:12px;color:#fb432f;font-weight:600;margin-top:6px;display:flex;align-items:center;gap:5px;opacity:0;transition:opacity .6s .3s'; note.innerHTML=''+msg; label.parentElement.insertBefore(note,label.nextSibling); requestAnimationFrame(function(){note.style.opacity='1'}); }); }; // === FIX: Scenario card highlight — use corrected selector === var _origPersonalize=window._igPersonalize; window._igPersonalizeScenarios=function(){ var state=window._igState||{}; var roofLower=(state.roofType||'').toLowerCase().split(' ')[0]; var homeLower=(state.homeType||'').toLowerCase().split(' ')[0]; var cards=document.querySelectorAll('.ig-scenario-card,.ig-knowledge-card'); cards.forEach(function(card){ var text=card.textContent.toLowerCase(); var isMatch=roofLower&&text.indexOf(roofLower)>-1||homeLower&&text.indexOf(homeLower)>-1; if(isMatch&&!card.querySelector('.ig-match-badge')){ card.style.borderColor='#fb432f'; card.style.boxShadow='0 0 0 2px rgba(251,67,47,.12)'; card.style.position='relative'; var badge=document.createElement('div'); badge.className='ig-match-badge'; badge.style.cssText='position:absolute;top:-8px;right:12px;background:#fb432f;color:#fff;font-size:10px;font-weight:700;padding:3px 10px;border-radius:10px;text-transform:uppercase;letter-spacing:.5px;z-index:2'; badge.textContent='Matches Your Home'; card.appendChild(badge); } }); }; // Chain scenario personalization var _p2=window._igPersonalize; window._igPersonalize=function(){if(_p2)_p2();setTimeout(window._igPersonalizeScenarios,400)}; console.log('[Sunollo] Section ID fix + CMS connector patch applied'); }(); !function(){'use strict'; // === FIX 6: Resolve static configurator vs. wizard overlay conflict === // Strategy: After wizard completes, transform the static configurator section into // a clean 'Your Profile' summary block (rather than hiding it), and populate the // recommendation section with real data from wizard state. var MOUNT_MAP={ 'Tiled Pitched':'Rail-Based Tile Hook System', 'Metal Roof':'Direct Metal Clamp System', 'Standing Seam':'Non-Penetrating Seam Clamp', 'Flat Concrete':'Ballasted Frame System' }; var CABLE_MAP={ 'Under the Stairs':'Internal AC route through wall penetration', 'Near Main Entrance':'Short exterior AC conduit run', 'Utility Area (Another Floor)':'Vertical AC run through service riser', 'Not Sure':'Confirmed during site assessment' }; var SIZE_MAP={ 'Detached / Bungalow':'15–35 kWp (30–70 panels)', 'Semi-Detached':'10–22 kWp (20–45 panels)', 'Terrace / Townhouse':'6–14 kWp (12–28 panels)', 'Cluster / Strata Landed':'5–12 kWp (10–24 panels)' }; function populateRecommendation(S){ // Show recommendation section var recoSec=document.getElementById('your-recommendation'); if(recoSec){ recoSec.style.display='block'; recoSec.style.opacity='0'; recoSec.style.transition='opacity .6s .2s'; setTimeout(function(){recoSec.style.opacity='1'},50); } // Populate values var rMounting=document.getElementById('reco-mounting'); var rMountingNote=document.getElementById('reco-mounting-note'); var rCable=document.getElementById('reco-cable'); var rCableNote=document.getElementById('reco-cable-note'); var rCapacity=document.getElementById('reco-capacity'); var rCapacityNote=document.getElementById('reco-capacity-note'); if(rMounting&&S.roofType){rMounting.textContent=MOUNT_MAP[S.roofType]||S.roofType;} if(rMountingNote&&S.roofType){rMountingNote.textContent='Optimal for '+S.roofType+' roofs. Zero penetration method.';} if(rCable&&S.dbLocation){rCable.textContent=CABLE_MAP[S.dbLocation]||S.dbLocation;} if(rCableNote&&S.dbLocation){rCableNote.textContent='Based on your DB at: '+S.dbLocation;} if(rCapacity&&S.homeType){rCapacity.textContent=SIZE_MAP[S.homeType]||'—';} if(rCapacityNote&&S.homeType){rCapacityNote.textContent='Typical system size for '+S.homeType;} // Transform static configurator section: collapse completed steps, show summary header var configSec=document.getElementById('configurator'); if(configSec){ // Hide all config steps (they are now done via the wizard) configSec.querySelectorAll('.ig-config-step').forEach(function(step){ step.style.maxHeight='0'; step.style.overflow='hidden'; step.style.transition='max-height .5s'; }); // Update the section heading to show 'Your Profile' var heading=configSec.querySelector('.ig-config-step-question,h2,h3'); if(heading&&heading.textContent){ heading.textContent='Your Personalised Solar Profile'; } // Show the config-summary if it exists var summary=document.getElementById('config-summary'); if(summary){ summary.style.display='block'; summary.classList.remove('ig-hidden'); // Populate fp elements in the floating profile var updates={'fp-home':S.homeType,'fp-roof':S.roofType,'fp-phase':S.electricalPhase,'fp-db':S.dbLocation,'fp-inverter':S.inverterPref}; Object.keys(updates).forEach(function(id){ var el=document.getElementById(id); if(el&&updates[id])el.textContent=updates[id]; }); } } // Show floating profile var fp=document.getElementById('floating-profile'); if(fp&&S.homeType){ fp.style.display='flex'; fp.style.opacity='0'; fp.style.transition='opacity .6s'; setTimeout(function(){fp.style.opacity='1'},300); } } // Hook into personalize chain var _prevP=window._igPersonalize; window._igPersonalize=function(){ if(_prevP)_prevP(); var S=window._igState||{}; if(S.complete)setTimeout(function(){populateRecommendation(S)},600); }; console.log('[Sunollo] Configurator conflict fix + recommendation population loaded'); }(); !function(){'use strict'; // === FIX 7: CMS dynamic enrichment using embedded data (no API token needed) === // Since Webflow CMS API requires auth, we embed the published CMS data directly // as a JS object so the page always has fresh structured data to work with. // This data mirrors what is in the CMS collections exactly. window._igCMSData={ 'roof-types':[ {name:'Tiled Pitched Roof',summary:'The most common roof type. Rail-based tile hook system. Suitable for all panel sizes.',slug:'tiled-pitched-roof'}, {name:'Metal Roof',summary:'Direct clamp system. Zero penetration. Fast installation.',slug:'metal-roof'}, {name:'Standing Seam Metal',summary:'Premium seam clamp mounting. No drilling, no sealant. Architecturally exceptional.',slug:'standing-seam-metal'}, {name:'Flat Concrete Roof',summary:'Ballasted frame system. Angled at 10-15\u00b0 for optimal sun capture.',slug:'flat-concrete-roof'} ], 'mounting-methods':[ {name:'Rail-Based Tile Hook',summary:'Hooks slide under tiles, grip battens. Tiles undamaged and replaceable.',where:'Tiled pitched roofs'}, {name:'Direct Metal Clamp',summary:'Clamps grip roof ribs or seams. Zero roof penetration.',where:'Metal and standing seam roofs'}, {name:'Ballasted Frame',summary:'Weighted frames tilt panels 10-15\u00b0. No drilling into slab.',where:'Flat concrete roofs'} ], 'inverter-types':[ {name:'String Inverter',summary:'Single central unit. Most cost-effective for unshaded roofs.',best:'Consistent sun, minimal shading'}, {name:'Optimiser-Based System',summary:'Per-panel optimisers. Best for complex roofs or partial shade.',best:'Multiple roof angles, shading'}, {name:'Hybrid Inverter',summary:'Solar + battery management. Future-ready for storage and EV.',best:'Battery-ready homes'} ], 'installation-scenarios':[ {name:'Tiled Roof + Side Wall Inverter',summary:'Most common Singapore setup. All-black panels, discreet side-wall inverter.',tags:['tiled','semi-detached','bungalow']}, {name:'Metal Roof + Car Porch Inverter',summary:'Fast clamp install, short cable runs, sheltered inverter.',tags:['metal','bungalow']}, {name:'Flat Roof + Backyard Inverter',summary:'Terrace house setup. Angled frames, future-ready hybrid inverter.',tags:['flat','terrace']}, {name:'Standing Seam GCB + Full Optimiser',summary:'Pinnacle installation. Invisible mounting, maximum output, battery-ready.',tags:['standing seam','bungalow','gcb']}, {name:'Semi-Detached Multi-Angle Roof',summary:'Panels on both slopes with SunMax optimisers. Impressive capacity.',tags:['tiled','semi-detached']} ], 'gallery-examples':[ {name:'Farleigh Avenue — 35.34 kWp',summary:'$1,110/month savings. All-black panels on tiled pitched roof.',image:'https://cdn.prod.website-files.com/663194925d726a9433a882e9/69ca9066059a5e68daddb2f7_674d1d5ee98132f9c8fc15b4_Home_4.webp'}, {name:'Flower Road — 13.95 kWp',summary:'$440/month savings. Right-sized, minimal visual impact.',image:'https://cdn.prod.website-files.com/663194925d726a9433a882e9/69ca9067059a5e68daddb3f1_674986c07d701bad6f4b94e3_Home_2.webp'}, {name:'Borthwick Drive — 21.39 kWp',summary:'$670/month savings. Semi-detached with precise alignment.',image:'https://cdn.prod.website-files.com/663194925d726a9433a882e9/69ca9066059a5e68daddb3eb_6749866e1a70fc5484066134_Home_3.webp'}, {name:'Serangoon Garden Way — 10.44 kWp',summary:'$470/month savings. Classic estate installation.',image:'https://cdn.prod.website-files.com/663194925d726a9433a882e9/69ca9066059a5e68daddb3e5_6638f2723d015af18f29bc1a_serangoon-garden-way.webp'} ] }; // Enrichment function using embedded data function enrichFromData(sectionId, collectionKey, filterFn){ var section=document.getElementById(sectionId); if(!section)return; var items=window._igCMSData[collectionKey]||[]; if(filterFn)items=items.filter(filterFn); if(!items.length)return; var grid=section.querySelector('.ig-card-grid,.ig-scenario-scroll,.ig-knowledge-card:first-child'); var container=grid?grid.parentElement:section.querySelector('.ig-container'); if(!container)return; // Only add if section has fewer cards than data (avoid duplicates) var existing=section.querySelectorAll('.ig-knowledge-card,.ig-scenario-card,.ig-cms-card'); if(existing.length>=items.length)return; items.forEach(function(item,i){ if(i'; html+='

'+item.name+'

'; html+='

'+item.summary+'

'; if(item.where)html+='

'+item.where+'

'; if(item.best)html+='

Best for: '+item.best+'

'; card.innerHTML=html; container.appendChild(card); requestAnimationFrame(function(){card.style.opacity='1';card.style.transform='translateY(0)'}); }); } function runCMSEnrichment(){ var S=window._igState||{}; var roofWord=S.roofType?(S.roofType.toLowerCase().split(' ')[0]):'all'; enrichFromData('gallery','gallery-examples',null); enrichFromData('scenarios','installation-scenarios',function(item){ if(roofWord==='all')return true; return (item.tags||[]).some(function(t){return t.indexOf(roofWord)>-1||roofWord.indexOf(t)>-1}); }); } var _prevP=window._igPersonalize; window._igPersonalize=function(){if(_prevP)_prevP();setTimeout(runCMSEnrichment,1000)}; console.log('[Sunollo] CMS embedded data enrichment loaded'); }();