{
  "version": 3,
  "sources": ["/cdn/shop/t/29/assets/nootka-configurator.js?check=202611070726"],
  "sourcesContent": ["/* Set 97: bundle the canonical storefront runtime before its configurator consumers. */\n(function (w, d) {\n  'use strict';\n  if (w.NootkaStorefront && w.NootkaStorefront.version === 85 &&\n      typeof w.NootkaStorefront.canSplitAssembly === 'function' && w.NootkaStorefront.cart &&\n      typeof w.NootkaStorefront.cart.begin === 'function') return;\n  var script = d.currentScript || d.querySelector('script[data-nk-market-root]');\n  var localeRoot = script && script.getAttribute('data-nk-market-root') ||\n    w.Shopify && w.Shopify.routes && w.Shopify.routes.root || '/';\n  var marketCountry = String(script && script.getAttribute('data-nk-market-country') || w.Shopify && w.Shopify.country || '').toUpperCase();\n  localeRoot = '/' + String(localeRoot).replace(/^\\/+|\\/+$/g, '');\n  if (localeRoot !== '/') localeRoot += '/';\n  function localUrl(value) {\n    var raw = String(value || ''), u;\n    if (!raw || /^(?:#|mailto:|tel:|javascript:)/i.test(raw)) return raw;\n    try { u = new URL(raw, w.location.href); } catch (ignore) { return raw; }\n    if (u.origin !== w.location.origin || /(?:^|[?&])(?:country|country_code|locale|language_code)=/i.test(u.search)) return raw;\n    if (localeRoot === '/' || u.pathname.indexOf(localeRoot) === 0 || u.pathname === localeRoot.slice(0, -1)) return raw;\n    if (u.pathname !== '/' && !/^\\/(?:products|collections|pages|blogs|policies|search|cart)(?:\\/|$)/.test(u.pathname)) return raw;\n    return localeRoot + u.pathname.replace(/^\\//, '') + u.search + u.hash;\n  }\n  function endpoint(url) {\n    try { return new URL(String(url || 'cart'), w.location.origin).pathname; }\n    catch (ignore) { return 'Shopify request'; }\n  }\n  function responseError(response, url, detail) {\n    var error = new Error(endpoint(url) + ' could not be confirmed (HTTP ' + response.status + '). ' + detail);\n    error.name = 'NootkaResponseError'; error.status = response.status; error.endpoint = endpoint(url);\n    return error;\n  }\n  function readJSON(response, url) {\n    var type = response.headers && response.headers.get && response.headers.get('content-type') || '';\n    var jsonType = !type || /^(?:application\\/(?:[\\w.+-]*\\+)?json|(?:text|application)\\/javascript)(?:\\s*;|$)/i.test(type);\n    return response.text().then(function (text) {\n      var data = null;\n      if (jsonType) { try { data = JSON.parse(text); } catch (ignore) {} }\n      if (!response.ok) {\n        var message = data && typeof data === 'object' && (data.description || data.message);\n        message = typeof message === 'string' ? message.replace(/<[^>]*>/g, ' ').replace(/[\\u0000-\\u001f\\u007f]/g, ' ').replace(/\\s+/g, ' ').trim().slice(0, 240) : '';\n        throw responseError(response, url, message || 'Shopify or the network returned an error. Review your cart before trying again. Nothing will be retried automatically.');\n      }\n      if (!jsonType || !data || typeof data !== 'object') {\n        throw responseError(response, url, 'An unexpected response was returned. Review your cart, then refresh this page. Nothing will be retried automatically.');\n      }\n      return data;\n    });\n  }\n  function fetchJSON(url, options) {\n    var controller = new AbortController(), timer = setTimeout(function () { controller.abort(); }, 15000);\n    var opts = Object.assign({}, options || {}, { signal: controller.signal });\n    return w.fetch(url, opts).then(function (r) { return readJSON(r, url); }).catch(function (error) {\n      if (error && error.name === 'AbortError') throw new Error(endpoint(url) + ' timed out. Review your cart before trying again. Nothing will be retried automatically.');\n      throw error;\n    }).finally(function () { clearTimeout(timer); });\n  }\n  var exclusive = false, epoch = 0, tail = Promise.resolve(), drainError = null;\n  var cart = {\n    begin: function () { if (exclusive) return false; exclusive = true; epoch++; drainError = null; return true; },\n    end: function () { if (exclusive) { exclusive = false; epoch++; } },\n    active: function () { return exclusive; },\n    background: function (work) {\n      if (exclusive) return Promise.resolve(null);\n      var ticket = epoch;\n      function current() { return !exclusive && epoch === ticket; }\n      var operation = tail.catch(function () {}).then(function () {\n        if (!current()) return null;\n        return Promise.resolve().then(function () { return work(current); }).catch(function (error) {\n          if (exclusive) drainError = error;\n          throw error;\n        });\n      });\n      tail = operation;\n      operation.catch(function () {});\n      return operation;\n    },\n    idle: function () {\n      return tail.catch(function () {}).then(function () {\n        if (drainError) throw new Error('A previous cart update could not be confirmed. Your cart has not been replaced. Review your cart and refresh before continuing.');\n      });\n    }\n  };\n  // Set85: exact existing BOA per-kind ZIP coverage; no statewide or rate-title bypass.\n  var ENC_BARREL = '0173101731017730177301801018010180301803018050180501813018130181501815018250182501864018640186701867018800188001888018900190101908019100191001913019130191501915019220192301929019310193601938019400194001944019450194901952019600196101965019660196901971019820198402018020180202002021020250202702032020320203502035020400204102043020450204702048020500205102055020550205902062020650206702071020720208102081020900209002093020930210802145021480215302155021560216302163021690217102176021760218002180021840219102196021960219902199022010220102203022060221002212022150221502217022170222202222022380223802241022410226602266022690226902283022840229302293022970229802301023050232202322023240232502327023270233002334023370234102343023510235502362023640236402366023680237002370023750237502379023790238102382024200242102445024470245102455024570246202464024680247102472024740247902481024820249202495025320253202534025340253602538025400254302553025530255602556025580255902561025630257102571025740257402576025760260102601026300263502637026390264102653026550265502657026570265902664026660267302675026750270202703027120271202714027150271702726027380274802760027640276602771027770277702779027800278302783027900279102801028020280402804028060280602808028090281202818028220283302835028420285202852028570286502871028830288502889028910289602898028980290102912029140292102940029400380103804038200382203824038240383303833038400384003842038420384403844038540385403857038570386203862038690387103874038740388503885039020391104003040030400504007040110401104014040150402104022040240402404029040290403204034040380403904043040430404604046040540405504062040640406604066040690407204074040740407704079040820408204084040860409004094040960409804101041070411004110041120411204116041160412204124042600426004274042740429104291045300453004537045380454104541045440454404548045480455404554045560455604558045580456204562045650456504568045680457104571045730457304575045760457804579060010600206006060060601006011060160601606023060230602506025060280603006032060340603706037060400604306045060450605006053060620606206064060640606606067060700607006073060740608106081060840608506087060890609506095061010611206114061150611706120061230612306126061290613106134061370613806140061470615006156061600616106167061670617606176061800618006183061830622606226062300623506237062390624106244062460625106254062560625806260062630626906277062820632006320063300633606338063400634906351063530635506357063570635906360063650636506370063800638206385063870638906401064010640306405064080642006422064240642606426064370644406447064470645006451064550645706459064610646706475064770648406489064890649106495064980649806501065210652406525065300653806540065400660106602066040660806610066120661406615066730667306699066990670106706067080670806710067100671206712067160671606720067260674906749067700677006781067810680106801068070680706810068140681606817068200682006824068250682806831068360683606838068380684006840068500685806860068600687006870068750688106883068830688806890068960689706901069070691006914069200692206926069271000110014100161004110043100451005510055100601006010065100651006910069100751007510080100811008710087100901009010101101261012810133101381013810150101791018510185101991019910203102031021110213102421024210249102491025610256102581026110265102651026810282102851028610451104751050110507105091051210514105141051610524105261052810530105301053210533105351053810540105431054510553105601056010562105621056610567105701057010573105731057610580105831058310587105911059410598106011060710610106101070110710108011080510922109221092810928109801098010986109861099610997110011100511010110101102011024110261102711030110301104011040110421104211050110551109611096111011110611109111091112011120112011122611228112391124111243112451124511247112471124911249112511125211256112561135211352113621136311368113751137711381113851138611405114051141411422114241142511431114311145111451114991149911501115011150711507115091151011514115141151611516115181151811520115201153011531115421154211545115451154711561115631156311565115661156811572115751157711579115821159011590115961159611598115991169011691116951169511701117041170711707117091171011714117141172111721117241172611729117291173111732117351173511737117371174011740117431174311746117471175311753117561175811760117601176211762117651176511768117681177111771117731177311775117751178311783117911179111793117931179511795117971179811801118041181511815118191181911853118531250812508125101251212515125151251812518125201252012524125241252712528125311253112533125331253712537125401254012542125421254712547125501255312555125551256312564125681256812570125701258212582125841258412590125901260112601126031260314302143025400154001540035400354006540065400954011540145401754020540265408254082548105481054824548245484054840548535485354858548585500155003550055500855011550145501655017550245502555029550305503255033550365503855040550405504255045550475504755051550515505555056550635506355067550715507355080550825508555090550905509255092551015513155133551335514455146551505515055155551555516455165551705517055172551725517555175551875518855301553065530855309553115531155313553135531555320553225532355327553285533055331553375534155343553495535255352553545535455356553645536755380553835538455386553885539055392553955539555397553985540155450554545545555458554605546755467554705547055472554745547855480554835548855550555515555355554555585555855568555795558355583555925559955704557045573555735557605576055783557835578755787557955579556302563025630456304563135631356317563175632956330563335633356338563385634256342563445634456350563505635356353563575635956363563645636756367563725637356379563795638656386563935639356395563995640156401564255642556431564315644156442564445644456447564505645556456564595645956465564655646856469564725647256474564746912869128691336913369145691456915669156693456934573301733017334473344750017500275006750077500975011750137501775019750197502275030750327503675038750547505675057750597506575067750727507475075750777507875080750837508575089750937509475098750997510475104751067510675115751167512175121751237512375126751267513475134751377513875141751417514675146751497515075154751547515975159751667516675172751737518075182751857518575187751877520175212752147523875240752447524675254752607526775270752707527575275752777527775283752857528775287753017530175303753037531275313753157531575320753207532675326753367533675339753397534275342753547536075367753687537075374753767537675378753827538975395753977539875407754077545475454760017600776010760197602176022760287602876034760347603676036760397604076051760547606076061760637606376071760717607876078760927609276094760977609976099761017612476127761277612976137761407614076147761487615076150761557615576161761647616676166761777617776179761827618576185761907619376195761997620176206762087621076226762277624476244762477624876259762597626276262765747657478002780027803978039780547805478069780697807378073781017810178108781097811278112781247812478130781337813578135781487814878152781527815478154781637816378201782617826378263782657826678268782707827878280782837828578288782897829178299786107861078612786137861578615786177861778619786197862178621786237862378626786287863078630786347863478640786417864578646786517865378656786567866078660786647866778669786697867678676786807868378691786917870178705787087873978741787427874478769787727877478778787797878378783787997879980001800078001080027800308003180033800388004080042800448004780101801138011680118801208013880150801518015580155801608016380165801668020180212802148023980241802418024380244802468025280256802578025980266802718027180273802748028180281802908029180293802948029980299803018031080314803148040180403804198043080432804408044280444804468044980451804578045980459804618046180463804638046580468804708047180473804838048780488804978049880501805048051080517805208052880530805308053280547805498055180553805538060180603806108061280614806158062080624806318063480638806408064280646806488065480701807018070580705807208072080722807238072980729807328073380740807428074580745807508075180754807548075780757808048080480808808098081380814808168082180823808238082680833808358083580840808418086080860808638086480866808668090180939809418094280944809448094680947809498095180960809608096280962809708097080977809778099580995809978099781001810128101981023810258102581030810308103381034810398104081050810508105581055810588105981062810638106781067810698106981076810778108981089811238112381125811258113181131811338113381136811368114381143811468114681149811498115581155812018120181210812128121581215812218122881232812338123681237812398124281244812448124881248812518125381290812908160181602816118161281615816158162081621816238162381631816328163781637816428164281645816458164981649816548165882001820038200582010820508205582059820618206382063820708207382081820848222182221823248232582327823278232982329823318233183801838018380383804838098381083814838168382683826838338383383835838358384283842838548385483858838588386983869838768387784006840068400984011840148401884020840208402484025840338403384037840378404084041840448404484047840478405084050840548405484056840568406084060840658406584067840688407084070840758407584081840818408484084840878409684098840988410184134841368413684138841398414184141841438414384145841458414784148841508415284157841588416584165841708417184180841808418484184841898419084199841998420184201842448424484302843028430784307843108431084315843158431784317843248432484340843408440184405844078440984412844128441484415850018504685048850488505085051850538505485060850768507885080850828508385097850988520185216852248522685233852348524485244852468524685250852518525385254852578525885260852618526785267852718527185274852758527785277852808528585287852888529585296852998529985301853128531885318853238532385329853298533585335853388534085345853458535185351853538535385355853558536385363853728537685378853838538585385853928539285395853958940289402894118941189413894138942389423894318943589439894398944889452894608946089501895058950789507895098950989511895138951589515895198952189523895238953389533895558955589557895578957089570895958959589599895998970189706897118971489721897219000190084900869009190093900969009990099901349013490189901899020190202902099021390220902249023090233902399024290245902459024790251902549025590260902679027090270902729027290274902759027790278902809028090290902969030190312904019041190501905109060190610906209062490630906339063790640906509065290660906629067090671906809068090701907039070690707907109071790720907219072390723907319073490740907409074290749907559075590801908109081390815908229082290831908359084090840908429084290844908449084690848908539085390895908959089990899910019100191003910039100691012910169101791020910219102391025910309103191040910439104691046910669106691077910779110191110911149111891121911219112391126911299112991182911829118491185911889118991199911999120191210912149121491221912229122491226913019131191313913139131691316913199132291324913319133391335913379133791340913469135091362913649136591367913679137191372913769137791380913879139091390913929139691401914139141691416914239142391426914269143691436914709147091482914829149591496914999149991501915089151091510915219152391526915269160191612916149161891701917029170691706917089171191714917169172291724917299173591737917379173991741917439175091752917529175491756917589175991761917739177591776917789177891780917809178491786917889179391801918049189691896918999189991901919039190591906919089191791921919219193191933919359193591941919469194891948919509195191962919639197691980920039200392007920119201392014920189203092033920339203692037920409204092046920469204992049920519205292054920619206492065920679207292074920759207892079920819208692088920889209192091920969209692101921059210892108921109212492126921329213492140921429214292145921459214792147921499215092152921559215892161921639216392165921799218292182921869218792190921939219592199922019220392210922119222092220922239222392230922309223492236922409224192247922489225392253922559225692258922589226092264922709227092276922769228292282923059230592313923189232092322923249232592329923299233192331923339233792339923399234192341923449234492346923469235092350923529235292354923549235792359923699236992372923789238292382923859238692391923919239792397923999239992401924089241092411924139241392415924159241892418924239242392427924279250192509925139251992521925229253092532925369253692539925399254392546925489254992551925579256192564925679256792570925729258192587925899259392595925969259992599926029260792609926109261292612926149262092623926309263792637926469266392672926799268392685926889268892690926949269792698927019270892711927129272892728927359273592780927829279992799928019280992811928129281492817928219282392825928259283192838928409284692850928509285692857928599287192877928839288592887928999289993001930079300993016930209302493030930309303293033930359303693040930449306093067930949309493099930999310193103931059311193116931189312093121931309313093140931409315093150931609316093190931909342793427934369343893440934419346093460934639346493510935109354393543935509355093553935539356393563939019390293905939089391293912939159391593920939289393093930939329393393940939409394293944939509395093953939559396093960939629396294002940029400594005940109401194014940289403094030940359403594037940449406094066940709407094074940749408094080940839408394085940899410294105941079411294114941349413794137941399414794151941519415894161941639416494172941729417794177941889418894203942099421194211942299423094232942329423494237942399424094244942459424794250942529425294254942549425694259942619426394267942699427194271942739427494277942809428294291942939429994301943069430994309944019440494497944979450194503945059453194533945539455594583945859459294595945999460194615946179462494649946499465994662946669466694701947109471294712947209472094801948089482094820948509485094901949019490394904949129491594920949209492294931949339493394937949429494594957949609496094963949669497094979949989499995001950159501795021950239502695030950339503595039950419504695050950569506095067950709507195073950739507595077951019510195103951039510695106951089511395115951369513895141951489514895150951619516495164951709517095172951739519095194951969519695201952159521995220952259522795230952319523495234952369523795240952429525295254952589525895267952679526995269952969529795304953049531395313953209532095322953229533095330953369533795350953569535895358953609536095363953639536695368953769537895385953859538795387953919539195397953979540195407954099540995412954129541595416954199541995421954269543095431954339543395435954369543995439954419544695448954539545795459954619546295464954689547195473954769547695480954819548695487954929549295494954949549795497956019562195623956419564495646956489564895650956539565595656956589566495667956889569095699957019570195703957039570995709957129571595717957179572095722957249572495726957269572895728957359573695741957429574695747957579575995762957639576595765957769577695798957999581195838958409584395851958539586095860958649586795894958949589995899959129591295924959249593795937959459594595949959499595995959959929599296111961119614096143961459614696148961489615096152961549615896160961629700197011970139702497026970289703097032970349703897041970429704497045970489704997051970519705397057970609706097062970649706797068970709707197075970809708697086970899708997101971039710697119971219712597127971389714097141971439714997201972259722797233972369723697238972409724297242972509725497256972569725897258972669726997280972839728697286972909729497296972969729897298973019731497317973179732197322973249732797329973319733397333973359733697338973399734197348973509735297355973559735797358973609736297364973719737397378973809738197383973869738897392973949739497396973969740197417974199742097423974249742697426974299743297434974449744697459974619746797469974719747397473974759748197484974849748697499975019750497520975209752297528975309754197543975449760197604976219762797630976309763297634976369763697638976419770197703977079770997711977129773097731977339773597737977379773997739977419774197753977549775697756977599776198001980159801998043980459804798050980539805598059980619806598068980689807098075980779807798082980839808798087980899808998092980939810198119981219812298124981279812998129981319813198133981349813698136981389813998141981419814498146981489814898154981559815898158981609816198164981669816898168981709817098174981759817798178981819818198185981859818898188981909819198194981959819898199982019820198203982049820698208982139821398220982339823598241982439824598247982539825598264982669826798270982809828298284982869828898290982979830398305983109831298314983159832098333983359834098342983469834898368983709837898380983889839098398984019840998411984139841598419984219842298424984249843098431984339843398438984399844398448984649846798471984719848198481984909849098493984939849698499985019850998511985139851698516985209852098522985229852498524985269852898530985339853598542985449854498546985489855098550985529855298554985669856898572985759857798579985939859598597985999859998601986079860998612986149861498616986169861998626986289862998631986329863798645986479865198660986669866898668986709867298674986759868298687988019880298807988079881198811988149881798821988229882698826988289882898831988319883398834988369883698843988439884598847988509885098852988529885698856988589885898862988629890198904989079890998920989239892598926989339893498936989379893998943989469894898951989529900199001990039900699009990099901199011990149901499016990169901999023990259902799030990319903499034990369903799110991109920199220992239922499228992289925199252992569925699258992589926099260';\n  var ENC_CUBE = '017310173101773017730180101801018030180301805018050181301813018150181501825018250186401864018670186701880018800188801890019010190801910019100191301913019150191501922019230192901931019360193801940019400194401945019490195201960019610196501966019690197101982019840201802018020200202102025020270203202032020350203502040020410204302045020470204802050020510205502055020590206202065020670207102072020810208102090020900209302093021080214502148021530215502156021630216302169021710217602176021800218002184021910219602196021990219902201022010220302206022100221202215022150221702217022220222202238022380224102241022660226602269022690228302284022930229302297022980230102305023220232202324023250232702327023300233402337023410234302351023550236202364023640236602368023700237002375023750237902379023810238202420024210244502447024510245502457024620246402468024710247202474024790248102482024920249502532025320253402534025360253802540025430255302553025560255602558025590256102563025710257102574025740257602576026010260102630026350263702639026410265302655026550265702657026590266402666026730267502675027020270302712027120271402715027170272602738027480276002764027660277102777027770277902780027830278302790027910280102802028040280402806028060280802809028120281802822028330283502842028520285202857028650287102883028850288902891028960289802898029010291202914029210294002940038010380403820038220382403824038330383303840038400384203842038440384403854038540385703857038620386203869038710387403874038850388503902039110400304003040050400704011040110401404015040210402204024040240402904029040320403404038040390404304043040460404604054040550406204064040660406604069040720407404074040770407904082040820408404086040900409404096040980410104107041100411004112041120411604116041220412404260042600427404274042910429104530045300453704538045410454104544045440454804548045540455404556045560455804558045620456204565045650456804568045710457104573045730457504576045780457906001060020600606006060100601106016060160602306023060250602506028060300603206034060370603706040060430604506045060500605306062060620606406064060660606706070060700607306074060810608106084060850608706089060950609506101061120611406115061170612006123061230612606129061310613406137061380614006147061500615606160061610616706167061760617606180061800618306183062260622606230062350623706239062410624406246062510625406256062580626006263062690627706282063200632006330063360633806340063490635106353063550635706357063590636006365063650637006380063820638506387063890640106401064030640506408064200642206424064260642606437064440644706447064500645106455064570645906461064670647506477064840648906489064910649506498064980650106521065240652506530065380654006540066010660206604066080661006612066140661506673066730669906699067010670606708067080671006710067120671206716067160672006726067490674906770067700678106781068010680106807068070681006814068160681706820068200682406825068280683106836068360683806838068400684006850068580686006860068700687006875068810688306883068880689006896068970690106907069100691406920069220692606927100011001410016100411004310045100551005510060100601006510065100691006910075100751008010081100871008710090100901010110126101281013310138101381015010179101851018510199101991020310203102111021310242102421024910249102561025610258102611026510265102681028210285102861045110475105011050710509105121051410514105161052410526105281053010530105321053310535105381054010543105451055310560105601056210562105661056710570105701057310573105761058010583105831058710591105941059810601106071061010610107011071010801108051092210922109281092810980109801098610986109961099711001110051101011010110201102411026110271103011030110401104011042110421105011055110961109611101111061110911109111201112011201112261122811239112411124311245112451124711247112491124911251112521125611256113521135211362113631136811375113771138111385113861140511405114141142211424114251143111431114511145111499114991150111501115071150711509115101151411514115161151611518115181152011520115301153111542115421154511545115471156111563115631156511566115681157211575115771157911582115901159011596115961159811599116901169111695116951170111704117071170711709117101171411714117211172111724117261172911729117311173211735117351173711737117401174011743117431174611747117531175311756117581176011760117621176211765117651176811768117711177111773117731177511775117831178311791117911179311793117951179511797117981180111804118151181511819118191185311853125081250812510125121251512515125181251812520125201252412524125271252812531125311253312533125371253712540125401254212542125471254712550125531255512555125631256412568125681257012570125821258212584125841259012590126011260112603126031430214302540015400154003540035400654006540095401154014540175402054026540825408254723547235481054810548245482454840548405485354853548585485855001550035500555014550165502155024550255502755027550295503355036550385504055040550425504755049550495505155057550605506055063550635506555071550735508055082550855508755090550925509255101551315513355133551445514655150551505515555155551645516555170551705517255172551755517555187551885530155309553115531155313553135531555320553225532355327553285533055331553375534155343553495535255352553545535455356553645536755380553835538455386553885539055392553955539555397553985540155450554545545555458554605546755467554705547055472554745547855480554835548855550555515555355554555585555855568555795558355583555925559955704557045573555735557605576055783557835578755787557955579555901559015592055920559245592455946559465595555956559605596055963559635598355983559855598555992559925600156002560115601156017560175602456024560285602856044560445604856048560505605056052560525605756058560635606356069560695607156071560805608056082560825609356093560965609656302563025630456304563135631356317563175632956330563335633356338563385634256342563445634456350563505635356353563575635956363563645636756367563725637356379563795638656386563935639356395563995640156401564255642556431564315644156442564445644456447564505645556456564595645956465564655646856469564725647256474564746912869128691336913369145691456915669156693456934573301733017334473344750017500275006750077500975011750137501775019750197502275030750327503675038750547505675057750597506575067750727507475075750777507875080750837508575089750937509475098750997510475104751067510675115751167512175121751237512375126751267513475134751377513875141751417514675146751497515075154751547515975159751667516675172751737518075182751857518575187751877520175212752147523875240752447524675254752607526775270752707527575275752777527775283752857528775287753017530175303753037531275313753157531575320753207532675326753367533675339753397534275342753547536075367753687537075374753767537675378753827538975395753977539875407754077545475454760017600776010760197602176022760287602876034760347603676036760397604076051760547606076061760637606376071760717607876078760927609276094760977609976099761017612476127761277612976137761407614076147761487615076150761557615576161761647616676166761777617776179761827618576185761907619376195761997620176206762087621076226762277624476244762477624876259762597626276262765747657478002780027803978039780547805478069780697807378073781017810178108781097811278112781247812478130781337813578135781487814878152781527815478154781637816378201782617826378263782657826678268782707827878280782837828578288782897829178299786107861078612786137861578615786177861778619786197862178621786237862378626786287863078630786347863478640786417864578646786517865378656786567866078660786647866778669786697867678676786807868378691786917870178705787087873978741787427874478769787727877478778787797878378783787997879980001800078001080027800308003180033800388004080042800448004780101801138011680118801208013880150801518015580155801608016380165801668020180212802148023980241802418024380244802468025280256802578025980266802718027180273802748028180281802908029180293802948029980299803018031080314803148040180403804198043080432804408044280444804468044980451804578045980459804618046180463804638046580468804708047180473804838048780488804978049880501805048051080517805208052880530805308053280547805498055180553805538060180603806108061280614806158062080624806318063480638806408064280646806488065480701807018070580705807208072080722807238072980729807328073380740807428074580745807508075180754807548075780757808048080480808808098081380814808168082180823808238082680833808358083580840808418086080860808638086480866808668090180939809418094280944809448094680947809498095180960809608096280962809708097080977809778099580995809978099781001810128101981023810258102581030810308103381034810398104081050810508105581055810588105981062810638106781067810698106981076810778108981089811238112381125811258113181131811338113381136811368114381143811468114681149811498115581155812018120181210812128121581215812218122881232812338123681237812398124281244812448124881248812518125381290812908160181602816118161281615816158162081621816238162381631816328163781637816428164281645816458164981649816548165882001820038200582010820508205582059820618206382063820708207382081820848222182221823248232582327823278232982329823318233183801838018380383804838098381083814838168382683826838338383383835838358384283842838548385483858838588386983869838768387784006840068400984011840148401884020840208402484025840338403384037840378404084041840448404484047840478405084050840548405484056840568406084060840658406584067840688407084070840758407584081840818408484084840878409684098840988410184134841368413684138841398414184141841438414384145841458414784148841508415284157841588416584165841708417184180841808418484184841898419084199841998420184201842448424484302843028430784307843108431084315843158431784317843248432484340843408440184405844078440984412844128441484415850018504685048850488505085051850538505485060850768507885080850828508385097850988520185216852248522685233852348524485244852468524685250852518525385254852578525885260852618526785267852718527185274852758527785277852808528585287852888529585296852998529985301853128531885318853238532385329853298533585335853388534085345853458535185351853538535385355853558536385363853728537685378853838538585385853928539285395853958940289402894138941389431894378943989439894488945289501895078950989509895118951389515895158951989520895238952389533895338955589555895578955789570895708959589595895998959989704897049000190084900869009190093900969009990099901349013490189901899020190202902099021390220902249023090233902399024290245902459024790251902549025590260902679027090270902729027290274902759027790278902809028090290902969030190312904019041190501905109060190610906209062490630906339063790640906509065290660906629067090671906809068090701907039070690707907109071790720907219072390723907319073490740907409074290749907559075590801908109081390815908229082290831908359084090840908429084290844908449084690848908539085390895908959089990899910019100191003910039100691012910169101791020910219102391025910309103191040910439104691046910669106691077910779110191110911149111891121911219112391126911299112991182911829118491185911889118991199911999120191210912149121491221912229122491226913019131191313913139131691316913199132291324913319133391335913379133791340913469135091362913649136591367913679137191372913769137791380913879139091390913929139691401914139141691416914239142391426914269143691436914709147091482914829149591496914999149991501915089151091510915219152391526915269160191612916149161891701917029170691706917089171191714917169172291724917299173591737917379173991741917439175091752917529175491756917589175991761917739177591776917789177891780917809178491786917889179391801918049189691896918999189991901919039190591906919089191791921919219193191933919359193591941919469194891948919509195191962919639197691979920039200392007920119201392014920189203092033920339203692040920469204692049920499205192052920549206192064920729207492075920789207992081920869208892088920919209392096920969210192124921269213292134921409214292143921459214592147921479214992150921529215592158921619216392163921659217992182921829218692187921909219392195921999220192203922109221192220922209222392223922309223092234922369223992241922479224892253922539225592256922589225892260922649227092270922769227692282922829230592305923139231892320923229232492325923299232992331923319233392337923399233992341923419234692346923509235092352923529235492354923579235992369923699237292378923829238292385923869239192391923979239792399923999240192408924109241192413924139241592415924189241892423924239242792427925019250992513925199252192522925309253292536925369253992539925439254692548925499255192557925619256492567925679257092572925819258792589925939259592596925999259992602926079260992610926129261292614926209262392630926379263792646926639267292679926839268592688926889269092694926979269892701927089271192712927289272892735927359278092782927999279992801928099281192812928149281792821928239282592825928319283892840928469285092850928569285792859928719287792883928859288792899928999300193007930099301693020930249303093030930329303393035930369304093044930609306793094930949309993099931019310393105931119311693118931209312193130931309314093140931509315093160931609319093190934279342793436934369343893438934609346093463934639351093510935439354393550935509355393553935639356393901939029390593908939129391293915939159392093928939339393393940939409394293944939509395093953939539395593955939609396093962939629400294002940059400594010940119401494028940309403094035940359403794044940609406694070940709407494074940809408094083940839408594089941029410594107941129411494134941379413794139941479415194151941589416194163941649417294172941779417794188941889420394209942119421194229942309423294232942349423794239942409424494245942479425094252942529425494254942569425994261942639426794269942719427194273942749427794280942829429194293942999430194306943099430994401944049449794497945019450394505945319453394553945559458394585945929459594599946019461594617946249464994649946599466294666946669470194710947129471294720947209480194808948209482094850948509490194901949039490494912949159492094920949229493194933949339493794942949459495794960949609496394966949709497994998949999500195015950179502195023950269503095033950359503995041950429504495046950509505695060950679507095071950739507395075950779510195101951039510395106951069510895113951159513695138951419514895148951509516195164951649517095170951729517395190951949519695196952019521595219952209522795227952319523195234952349523795237952409524295253952539525895258952679526795269952699529695297953049530495330953309533695337953639536395376953789538595385953879538795391953919540195407954099541095412954129541595416954189542795430954339543595437954399543995441954469544895453954569546895470954739547695476954809548295485954879549095490954929549495497954979560295621956239562895630956359563795639956419564195645956459564895648956509565395655956559565895664956679566895670956749567695683956869568895690956989570195701957039570395709957099571295715957179571795720957209572295722957249572495726957269572895728957369573695741957429574695747957579575995762957639576595765957769577695798957999581195838958409584395851958539586095860958649586795894958949589995899959019590195903959039591295912959249592495937959379594595946959499595095957959579596195961959759597595977959779599195993961119611196140961439614596146961489614896150961529615496154961569615896160961629700197011970139702497026970289703097032970349703897041970429704497045970489704997051970519705397057970609706097062970649706797068970709707197075970809708697086970899708997101971039710697119971219712597127971389714097141971439714997201972259722797233972369723697238972409724297242972509725497256972569725897258972669726997280972839728697286972909729497296972969729897298973019731497317973179732197322973249732797329973319733397333973359733697338973399734197348973509735297355973559735797358973609736297364973719737397378973809738197383973869738897392973949739497396973969740197417974199742097423974249742697426974299743297434974449744697459974619746797469974719747397473974759748197484974849748697499975019750497520975209752297528975309754197543975449760197604976219762797630976309763297634976369763697638976419770197703977079770997711977129773097731977339773597737977379773997739977419774197753977549775697756977599776198001980159801998043980459804798050980539805598059980619806598068980689807098075980779807798082980839808798087980899808998092980939810198119981219812298124981279812998129981319813198133981349813698136981389813998141981419814498146981489814898154981559815898158981609816198164981669816898168981709817098174981759817798178981819818198185981859818898188981909819198194981959819898199982019820198203982049820698208982139821398220982339823598241982439824598247982539825598264982669826798270982809828298284982869828898290982979830398305983109831298314983159832098333983359834098342983469834898368983709837898380983889839098398984019840998411984139841598419984219842298424984249843098431984339843398438984399844398448984649846798471984719848198481984909849098493984939849698499985019850998511985139851698516985209852098522985229852498524985269852898530985339853598542985449854498546985489855098550985529855298554985669856898572985759857798579985939859598597985999859998601986079860998612986149861498616986169861998626986289862998631986329863798645986479865198660986669866898668986709867298674986759868298687988019880298807988079881198811988149881798821988229882698826988289882898831988319883398834988369883698843988439884598847988509885098852988529885698856988589885898862988629890198904989079890998920989239892598926989339893498936989379893998943989469894898951989529900199001990039900699009990099901199011990149901499016990169901999023990259902799030990319903499034990369903799110991109920199220992239922499228992289925199252992569925699258992589926099260';\n  function splitZipInKindZone(kind, zip) {\n    var m = /^\\s*(\\d{5})(?:[-\\s]?\\d{4})?\\s*$/.exec(String(zip || ''));\n    if (!m || (kind !== 'barrel' && kind !== 'cube')) return false;\n    var enc = kind === 'cube' ? ENC_CUBE : ENC_BARREL, lo = 0, hi = enc.length / 10 - 1;\n    while (lo <= hi) {\n      var mid = (lo + hi) >> 1, start = enc.slice(mid * 10, mid * 10 + 5), end = enc.slice(mid * 10 + 5, mid * 10 + 10);\n      if (m[1] < start) hi = mid - 1; else if (m[1] > end) lo = mid + 1; else return true;\n    }\n    return false;\n  }\n  function isAssemblySplitState(rec) {\n    var state = String(rec && (rec.province || rec.region || rec.state) || '').trim().toUpperCase().replace(/^US-/, '');\n    return String(rec && rec.country || '').trim().toUpperCase() === 'US' && /^(CA|NV|CO|CALIFORNIA|NEVADA|COLORADO)$/.test(state);\n  }\n  function canSplitAssembly(rec, kind) {\n    return isAssemblySplitState(rec) && splitZipInKindZone(kind, rec && (rec.postal || rec.zip));\n  }\n  var geoFlight = null;\n  function geoIP(url) {\n    if (!geoFlight) geoFlight = fetchJSON(url, { credentials: 'omit', headers: { Accept: 'application/json' } }).then(function (data) {\n      return data && data.status !== 'fail' ? data : null;\n    }).catch(function () { return null; });\n    return geoFlight;\n  }\n  function marketingLocation(data) {\n    var country = marketCountry === 'US' ? 'United States' : marketCountry === 'CA' ? 'Canada' : data && data.country || '';\n    return data && data.country === country ? data : { country: country, city: '', regionName: '' };\n  }\n  function preserveLink(a) {\n    if (!a || !a.getAttribute || a.hasAttribute('hreflang') || a.hasAttribute('download') ||\n      a.closest('form[action*=\"localization\"], [data-localization], [data-disclosure-list]')) return;\n    var old = a.getAttribute('href'), value = localUrl(old);\n    if (old && value !== old) a.setAttribute('href', value);\n  }\n  function scan(node) {\n    if (!node || !node.querySelectorAll) return;\n    if (node.matches && node.matches('a[href]')) preserveLink(node);\n    Array.prototype.forEach.call(node.querySelectorAll('a[href]'), preserveLink);\n  }\n  function boot() {\n    scan(d);\n    if (typeof MutationObserver !== 'undefined') new MutationObserver(function (records) {\n      records.forEach(function (record) {\n        if (record.type === 'attributes') preserveLink(record.target);\n        else Array.prototype.forEach.call(record.addedNodes, scan);\n      });\n    }).observe(d.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['href'] });\n    d.addEventListener('click', function (event) {\n      var a = event.target && event.target.closest && event.target.closest('a[href]');\n      if (a) preserveLink(a);\n    }, true);\n  }\n  w.NootkaStorefront = { version: 85, localUrl: localUrl, readJSON: readJSON, fetchJSON: fetchJSON, cart: cart, isAssemblySplitState: isAssemblySplitState, canSplitAssembly: canSplitAssembly, splitZipInKindZone: splitZipInKindZone, geoIP: geoIP, marketingLocation: marketingLocation };\n  w.addEventListener('pageshow', function (event) { if (event.persisted) cart.end(); });\n  if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', boot); else boot();\n})(window, document);\n\n/* Set 85: shared Length resolver, replacement coordination and K1-safe checkout. */\n(function (w, d) {\n  'use strict';\n  if (w.NootkaLengthVariants && w.NootkaLengthVariants.version === 85) return;\n  var PRODUCTS = { 'flat-flooring-slats': 9470730862911, backrests: 9470722015551 };\n  var cached = {}, loading = {}, cartFlight = null, resumeDepth = 0, checkoutBusy = false;\n  var MARKER = '_nk_length_migrated_from', replacementActive = false;\n  function root() {\n    var s = (w.Shopify && w.Shopify.routes && w.Shopify.routes.root) ||\n      (w.theme && w.theme.routes && w.theme.routes.root_url) || '/';\n    return s.replace(/\\/?$/, '/');\n  }\n  function request(path, body) {\n    var ctrl = new AbortController(), timer = setTimeout(function () { ctrl.abort(); }, 12000);\n    var opts = { credentials: 'same-origin', cache: 'no-store', signal: ctrl.signal, headers: { Accept: 'application/json' } };\n    if (body) { opts.method = 'POST'; opts.headers['Content-Type'] = 'application/json'; opts.body = JSON.stringify(body); }\n    return fetch(root() + path, opts).then(function (r) {\n      return w.NootkaStorefront.readJSON(r, path);\n    }).finally(function () { clearTimeout(timer); });\n  }\n  function target(handle) { return Object.prototype.hasOwnProperty.call(PRODUCTS, handle); }\n  function cleanLength(v) {\n    return /^short$/i.test(String(v || '').trim()) ? 'Short' : /^long$/i.test(String(v || '').trim()) ? 'Long' : null;\n  }\n  function pick(product, length) {\n    length = cleanLength(length);\n    if (!length) throw new Error('Choose Short or Long for this accessory.');\n    var variants = product && product.variants || [], variant;\n    if (variants.length === 1) variant = variants[0];\n    else {\n      var index = (product.options || []).findIndex(function (o) { return /^length$/i.test(typeof o === 'string' ? o : o.name); });\n      if (index < 0) throw new Error('Accessory lengths are updating. Please try again shortly.');\n      var matches = variants.filter(function (v) { return cleanLength((v.options || [v.option1, v.option2, v.option3])[index]) === length; });\n      if (matches.length !== 1) throw new Error(length + ' is not available for this accessory. Please review your selection.');\n      variant = matches[0];\n    }\n    if (!variant || !Number.isSafeInteger(+variant.id) || +variant.id <= 0 || variant.available !== true) {\n      throw new Error(length + ' is currently unavailable for this accessory. Please review your selection.');\n    }\n    return { id: +variant.id, price: +variant.price, variant: variant, length: length, legacy: variants.length === 1 };\n  }\n  function load(handle, fresh) {\n    if (!target(handle)) return Promise.reject(new Error('Unknown Length accessory.'));\n    if (!fresh && cached[handle]) return Promise.resolve(cached[handle]);\n    if (!fresh && loading[handle]) return loading[handle];\n    var p = request('products/' + encodeURIComponent(handle) + '.js').then(function (product) {\n      if (+product.id !== PRODUCTS[handle] || product.handle !== handle || !Array.isArray(product.variants)) {\n        throw new Error('Unable to verify this accessory. Please try again.');\n      }\n      cached[handle] = product;\n      return product;\n    });\n    if (!fresh) {\n      loading[handle] = p;\n      p.then(function () { delete loading[handle]; }, function () { delete loading[handle]; });\n    }\n    return p;\n  }\n  function resolve(handle, length, properties, quantity) {\n    return load(handle, true).then(function (product) {\n      var chosen = pick(product, length), props = Object.assign({}, properties || {}, { Length: chosen.length });\n      return { id: chosen.id, quantity: quantity || 1, properties: props };\n    });\n  }\n  function handleOf(item) {\n    if (target(item.handle)) return item.handle;\n    return Object.keys(PRODUCTS).find(function (h) { return +item.product_id === PRODUCTS[h]; }) || null;\n  }\n  function planOf(item) {\n    var a = item.selling_plan_allocation;\n    return a && a.selling_plan && a.selling_plan.id || null;\n  }\n  function signature(item) {\n    return JSON.stringify([+item.variant_id, +item.quantity, planOf(item),\n      Object.keys(item.properties || {}).sort().map(function (k) { return [k, item.properties[k]]; })]);\n  }\n  function sameProps(a, b) {\n    var ka = Object.keys(a || {}).sort(), kb = Object.keys(b || {}).sort();\n    return JSON.stringify(ka) === JSON.stringify(kb) && ka.every(function (k) { return a[k] === b[k]; });\n  }\n  function reconcileOne(old, handle, product) {\n    var length = cleanLength(old.properties && old.properties.Length);\n    if (!length) return Promise.resolve(false);\n    var chosen = pick(product, length);\n    if (chosen.legacy || chosen.id === +old.variant_id) return Promise.resolve(false);\n    if (old.parent_relationship || old.has_components || (old.item_components || []).length) {\n      return Promise.reject(new Error('Please remove and re-add this accessory to confirm its length.'));\n    }\n    var props = Object.assign({}, old.properties, { Length: length }); props[MARKER] = old.key;\n    var expected = signature(old), payload = { id: chosen.id, quantity: old.quantity, properties: props };\n    if (planOf(old)) payload.selling_plan = planOf(old);\n    function findAdded(cart) {\n      return cart.items.filter(function (it) {\n        var saved = Object.assign({}, it.properties || {}), source = saved[MARKER];\n        delete saved[MARKER];\n        var wanted = Object.assign({}, props); delete wanted[MARKER];\n        return source && String(source).split(':')[0] === String(old.variant_id) &&\n          +it.variant_id === chosen.id && sameProps(saved, wanted) && String(planOf(it) || '') === String(planOf(old) || '');\n      });\n    }\n    function findOld(cart) {\n      var exact = cart.items.find(function (it) { return it.key === old.key; });\n      if (exact) return exact;\n      var same = cart.items.filter(function (it) { return +it.variant_id === +old.variant_id && sameProps(it.properties, old.properties) && String(planOf(it) || '') === String(planOf(old) || ''); });\n      if (same.length > 1) throw new Error('Please review the accessory lines in your cart before checkout.');\n      return same[0] || null;\n    }\n    return request('cart.js').then(function (before) {\n      var current = findOld(before);\n      if (!current) return null;\n      if (signature(current) !== expected) throw new Error('Your cart changed while confirming lengths. Please review it and retry.');\n      var added = findAdded(before);\n      if (added.length > 1 || added.length === 1 && +added[0].quantity !== +old.quantity) {\n        throw new Error('Please review the accessory quantities in your cart before checkout.');\n      }\n      return added.length ? null : request('cart/add.js', { items: [payload] });\n    }).then(function () { return request('cart.js'); }).then(function (verified) {\n      var current = findOld(verified);\n      if (!current) return false;\n      var added = findAdded(verified);\n      if (signature(current) !== expected || added.length !== 1 || +added[0].quantity !== +old.quantity) {\n        throw new Error('Please review your cart before checkout. We could not confirm the accessory replacement.');\n      }\n      return request('cart/change.js', { id: current.key, quantity: 0 }).then(function (next) {\n        if (findOld(next)) throw new Error('Please review your cart: the previous accessory line could not be removed.');\n        return true;\n      });\n    });\n  }\n  function reconcileCart() {\n    if (replacementActive) return request('cart.js').then(function (cart) { return { cart: cart, changed: false }; });\n    if (cartFlight) return cartFlight;\n    var changed = false;\n    cartFlight = request('cart.js').then(function (cart) {\n      var lines = cart.items.filter(function (it) { return handleOf(it) && cleanLength(it.properties && it.properties.Length); });\n      var products = {};\n      return Promise.all(lines.map(function (it) {\n        var h = handleOf(it);\n        if (!products[h]) products[h] = load(h, true);\n        return products[h];\n      })).then(function () {\n        return lines.reduce(function (chain, it) {\n          return chain.then(function () { return products[handleOf(it)]; }).then(function (product) {\n            return reconcileOne(it, handleOf(it), product).then(function (did) { changed = changed || did; });\n          });\n        }, Promise.resolve());\n      });\n    }).then(function () { return request('cart.js'); }).then(function (cart) {\n      return { cart: cart, changed: changed };\n    }).finally(function () { cartFlight = null; });\n    return cartFlight;\n  }\n  function notice(text) {\n    var el = d.getElementById('nk-length-notice');\n    if (!el) {\n      el = d.createElement('div'); el.id = 'nk-length-notice'; el.setAttribute('role', 'alert');\n      el.style.cssText = 'position:fixed;z-index:2147483001;bottom:20px;left:20px;right:20px;max-width:680px;margin:auto;padding:16px;background:#334433;color:white;font:16px/1.4 sans-serif';\n      var close = d.createElement('button'); close.type = 'button'; close.textContent = 'Dismiss';\n      close.style.cssText = 'margin-left:12px;color:inherit;text-decoration:underline';\n      close.addEventListener('click', function () { el.remove(); });\n      var msg = d.createElement('span'); msg.setAttribute('data-nk-length-message', ''); el.appendChild(msg); el.appendChild(close);\n      d.body.appendChild(el);\n    }\n    el.querySelector('[data-nk-length-message]').textContent = text;\n  }\n  function stop(e) { e.preventDefault(); e.stopImmediatePropagation(); }\n  function checkoutTarget(e) {\n    var el = e.target && e.target.closest ? e.target : null;\n    if (!el) return null;\n    if (e.type === 'submit') {\n      var form = el.closest('form'), submitter = e.submitter;\n      if (submitter && (submitter.name === 'checkout' || submitter.hasAttribute('data-checkout-button'))) return form;\n      return form && /\\/checkout(?:[/?#]|$)/.test(form.getAttribute('action') || '') ? form : null;\n    }\n    var a = el.closest('a[href]');\n    if (a) {\n      var u;\n      try { u = new URL(a.href, w.location.origin); } catch (ignore) { return null; }\n      if (u.origin === w.location.origin && /\\/checkout(?:\\/|$)/.test(u.pathname)) return a;\n    }\n    return el.closest('button[name=\"checkout\"], input[name=\"checkout\"], [data-checkout-button]');\n  }\n  function guard(e) {\n    if (resumeDepth) return;\n    // Native cart checkout clicks must reach K1 once. Verify at submit,\n    // then requestSubmit (never another click) so K1 cannot be re-entered.\n    var clicked = e.type === 'click' && e.target && e.target.closest && e.target.closest('[name=\"checkout\"]');\n    if (clicked && clicked.form) {\n      if (typeof clicked.form._nkConfirmConsent === 'function' && !clicked.form._nkConfirmConsent()) stop(e);\n      return;\n    }\n\n    var el = checkoutTarget(e); if (!el) return;\n    stop(e);\n    if (replacementActive && typeof el._nkVerifyReplacement !== 'function') { notice('Please wait for your current sauna configuration to finish.'); return; }\n    if (checkoutBusy) return;\n    checkoutBusy = true;\n    var submitter = e.submitter;\n    (typeof el._nkVerifyReplacement === 'function' ? el._nkVerifyReplacement() : reconcileCart()).then(function () {\n      resumeDepth++;\n      try {\n        if (e.type === 'submit') el.requestSubmit(submitter || undefined);\n        else el.click();\n      } finally { resumeDepth--; }\n    }).catch(function (err) { notice(err.message || 'Please review your cart and retry checkout.'); })\n      .finally(function () { checkoutBusy = false; });\n  }\n  function enhanceClip(holder) {\n    if (holder.hasAttribute('data-nk-length-enhanced')) return;\n    var h = holder.getAttribute('data-nk-length-product');\n    if (!target(h)) return;\n    var content = holder.querySelector('.product-clip__content'), button = holder.querySelector('.product-clip__btn[name=\"add\"]');\n    if (!content || !button) return;\n    holder.setAttribute('data-nk-length-enhanced', '');\n    button.removeAttribute(':disabled');\n    var label = d.createElement('label'), select = d.createElement('select'), status = d.createElement('span');\n    label.textContent = 'Length '; label.style.cssText = 'display:block;margin:8px 0';\n    select.setAttribute('data-nk-clip-length', ''); select.setAttribute('aria-label', 'Length for ' + h);\n    select.style.cssText = 'max-width:100%;padding:6px;border:1px solid currentColor;border-radius:0';\n    [['', 'Choose length'], ['Short', 'Short'], ['Long', 'Long']].forEach(function (pair) {\n      var opt = d.createElement('option'); opt.value = pair[0]; opt.textContent = pair[1]; select.appendChild(opt);\n    });\n    label.appendChild(select); content.insertBefore(label, button.closest('[x-data=\"productAddButtonForm()\"]') || button);\n    status.setAttribute('role', 'status'); status.setAttribute('data-nk-clip-length-status', ''); status.style.display = 'block'; content.appendChild(status);\n    button.disabled = true;\n    var busy = false;\n    function refresh() {\n      if (busy) return;\n      button.disabled = !select.value;\n      if (!select.value) { status.textContent = ''; return; }\n      load(h, true).then(function (product) {\n        var chosen = pick(product, select.value);\n        status.textContent = 'Length: ' + chosen.length; button.disabled = false;\n      }).catch(function (err) { status.textContent = err.message; button.disabled = true; });\n    }\n    select.addEventListener('change', refresh);\n    holder._nkLengthAdd = function () {\n      if (replacementActive) { status.textContent = 'Please wait for your sauna configuration to finish.'; return; }\n      if (busy || !select.value) return;\n      busy = true; button.disabled = true; select.disabled = true; status.textContent = 'Adding\u2026';\n      resolve(h, select.value, {}, 1).then(function (item) {\n        return request('cart/add.js', { items: [item] });\n      }).then(function () {\n        return reconcileCart();\n      }).then(function () {\n        status.textContent = 'Added to cart';\n        w.location.assign(root() + 'cart');\n      }).catch(function (err) {\n        status.textContent = err.message || 'Please review your cart before retrying.';\n      }).finally(function () { busy = false; select.disabled = false; button.disabled = !select.value; });\n    };\n  }\n  function scanClips(from) {\n    if (from.matches && from.matches('[data-nk-length-product]')) enhanceClip(from);\n    if (from.querySelectorAll) Array.prototype.forEach.call(from.querySelectorAll('[data-nk-length-product]'), enhanceClip);\n  }\n  function clipEvent(e) {\n    var holder = e.target && e.target.closest && e.target.closest('[data-nk-length-product]');\n    if (!holder) return;\n    var clicked = e.type === 'submit' || e.target.closest('.product-clip__btn[name=\"add\"]');\n    if (!clicked) return;\n    stop(e); enhanceClip(holder); if (holder._nkLengthAdd) holder._nkLengthAdd();\n  }\n  function boot() {\n    scanClips(d);\n    new MutationObserver(function (records) {\n      records.forEach(function (r) { Array.prototype.forEach.call(r.addedNodes, scanClips); });\n    }).observe(d.documentElement, { childList: true, subtree: true });\n    if (/\\/cart\\/?$/.test(w.location.pathname)) {\n      reconcileCart().then(function (result) { if (result.changed && !checkoutBusy) w.location.reload(); })\n        .catch(function (err) { notice(err.message || 'Please review accessory lengths before checkout.'); });\n    }\n  }\n  /* Set80: native cart form, K1 click refresh ONCE, final submit verification.\n     Never re-click a K1-guarded control from an asynchronous submit continuation. */\n  function busyControl(button, busy, message) {\n    if (!button) return;\n    var saved = button._nkBusyState;\n    if (busy) {\n      if (!saved) {\n        saved = { style: button.getAttribute('style'), hidden: button.hidden, children: [], progress: d.createElement('span') };\n        Array.prototype.forEach.call(button.children, function (child) {\n          saved.children.push({ node: child, style: child.getAttribute('style') }); child.style.setProperty('display', 'none', 'important');\n        });\n        saved.progress.setAttribute('role', 'status'); saved.progress.setAttribute('aria-live', 'polite');\n        saved.progress.setAttribute('data-nk-checkout-progress', ''); button.appendChild(saved.progress); button._nkBusyState = saved;\n      }\n      button.disabled = true; button.hidden = false; button.setAttribute('aria-busy', 'true');\n      button.classList.remove('is-busy'); button.style.setProperty('display', 'flex', 'important');\n      button.style.setProperty('visibility', 'visible', 'important'); button.style.setProperty('opacity', '0.85', 'important');\n      saved.progress.textContent = message || 'Preparing your checkout\u2026';\n    } else {\n      button.disabled = false; button.removeAttribute('aria-busy');\n      if (saved) {\n        saved.children.forEach(function (part) { if (part.style === null) part.node.removeAttribute('style'); else part.node.setAttribute('style', part.style); });\n        saved.progress.remove(); if (saved.style === null) button.removeAttribute('style'); else button.setAttribute('style', saved.style);\n        button.hidden = saved.hidden; delete button._nkBusyState;\n      }\n    }\n  }\n  function submitReplacementCheckout(options) {\n    var url = new URL(options.checkoutUrl || root() + 'checkout', w.location.origin);\n    if (url.origin !== w.location.origin) return Promise.reject(new Error('Please refresh this page before checkout.'));\n    var form = d.createElement('form'), button = d.createElement('button'), cancelled = false;\n    form.method = 'post'; form.action = root() + 'cart' + url.search; form.hidden = true;\n    form.setAttribute('data-nk-native-checkout', '81'); button.type = 'submit'; button.name = 'checkout'; button.value = 'Checkout';\n    button.textContent = 'Checkout'; form.appendChild(button); d.body.appendChild(form);\n    function fail(error) {\n      if (cancelled) return;\n      cancelled = true; clearTimeout(watchdog); button.disabled = true;\n      if (options.onError) options.onError(error);\n    }\n    // Read the actual configurator checkbox, not the unrelated drawer #agree.\n    // The legacy layout click handler recognizes this per-attempt consent bridge.\n    function confirmConsent() {\n      if (typeof options.hasConsent !== 'function' || options.hasConsent() === true) return true;\n      fail(new Error('Please agree to the terms and conditions before checkout.'));\n      return false;\n    }\n    if (typeof options.hasConsent === 'function') form._nkConfirmConsent = confirmConsent;\n    // Error-only watchdog, never a timed navigation or a second cart/add.\n    var watchdog = setTimeout(function () { fail(new Error('Checkout did not open. Please review your cart and try again.')); }, 25000);\n    form._nkVerifyReplacement = function () {\n      if (cancelled) return Promise.reject(new Error('This checkout attempt has stopped. Please try again.'));\n      if (!confirmConsent()) return Promise.reject(new Error('Please agree to the terms and conditions before checkout.'));\n      return Promise.resolve().then(options.verify).then(function (cart) {\n        if (cancelled) throw new Error('This checkout attempt has stopped. Please try again.');\n        if (!confirmConsent()) throw new Error('Please agree to the terms and conditions before checkout.');\n        if (options.onVerified) options.onVerified(cart); return cart;\n      }).catch(function (error) { fail(error); throw error; });\n    };\n    form._nkCheckoutCancelled = function () { return cancelled; };\n    w.addEventListener('pagehide', function () { clearTimeout(watchdog); }, { once: true });\n    w.addEventListener('pageshow', function (event) {\n      if (event.persisted) { cancelled = true; button.disabled = true; clearTimeout(watchdog); }\n    });\n    if (!confirmConsent()) return Promise.reject(new Error('Please agree to the terms and conditions before checkout.'));\n    if (options.onHandoff) options.onHandoff();\n    // K1's supported [name=checkout] click guard runs on window capture first.\n    // Its replay reaches the native submit; our submit guard verifies and resumes\n    // with requestSubmit, not click, so it never restarts K1's click refresh.\n    button.click();\n    return Promise.resolve(form);\n  }\n\n  w.NootkaLengthVariants = {\n    busyControl: busyControl, submitReplacementCheckout: submitReplacementCheckout,\n    beginReplacement: function () { if (replacementActive || !w.NootkaStorefront || !w.NootkaStorefront.cart.begin()) return false; replacementActive = true; return true; },\n    endReplacement: function () { replacementActive = false; if (w.NootkaStorefront) w.NootkaStorefront.cart.end(); },\n    replacementActive: function () { return replacementActive; },\n    whenCartIdle: function () { return Promise.all([cartFlight ? cartFlight.catch(function () {}) : Promise.resolve(), w.NootkaStorefront.cart.idle()]); },\n    version: 85, target: target, pick: pick, load: load, resolve: resolve,\n    peek: function (h) { return cached[h] || null; }, reconcileCart: reconcileCart, notice: notice\n  };\n  w.addEventListener('click', clipEvent, true);\n  w.addEventListener('submit', clipEvent, true);\n  w.addEventListener('click', guard, true);\n  w.addEventListener('submit', guard, true);\n  w.addEventListener('pageshow', function (event) { if (event.persisted) { checkoutBusy = false; replacementActive = false; if (w.NootkaStorefront) w.NootkaStorefront.cart.end(); } });\n  if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', boot); else boot();\n})(window, document);\n\n/*\n * nootka-configurator.js (theme-v3) - barrel sauna configurator, vertical timeline (v3-7 hybrid design).\n * v3: option tooltips (one shared photo card; bottom sheet on mobile) from the section's \"Nootka option tooltip\"\n * blocks (settings.tips), whole-row step headers, inline address field in step 4 (the theme-v1 delivery block's\n * own input, moved in; never opens the location popup) and a delivery card (service, dates; the rate is shown at checkout) from NootkaLocation.\n * Reads JSON from snippets/nootka-configurator-data.liquid + the block settings JSON.\n * No customer copy lives here: every string comes from settings.copy.\n *\n * Build switching: no reload. history.pushState to the build URL (Back/Forward walk through builds), swaps gallery\n * images, price, title and variant id in place, then swaps the page sections below the product section with the\n * build's own sections (fetched once, cached, prefetched on hover/idle) and re-inits them through the theme's\n * section registry. If that fetch fails, it falls back to a normal navigation that keeps step + add-ons.\n * 3D models load only when the shopper touches the 3D slide or the \"View in your space\" button.\n *\n * K1 deposit app: K1 has no re-init hook for a different product (it prefetches the loaded product's\n * plan data once per page). So in \"navigate\" mode (default) when the build differs from the product the\n * page loaded with, opening Delivery & pay or pressing Add to cart does a full navigation to the build\n * URL with ?variant= (selections carried in sessionStorage; the old nk_step/nk_addons/nk_go URL params still work).\n * That one navigation is prefetched ahead of time; with the optional <head> line from the install notes it also\n * cross-fades (cross-document view transition) instead of flashing blank.\n * \"mirror\" mode skips the reload and builds the selling_plan + K1 line properties from window.PreorderConfig.\n *\n * Location: never stored here. Reads theme-v1's shared record (window.NootkaLocation / localStorage) and\n * listens for nootka:location-confirmed / nootka:lead-times-ready / nootka:delivery-price.\n *\n * Events fired on document: nootka:configurator:change {product, variant, total}\n *\n * Set 40: one-row stats (CSS); the phone bar / Continue / final button name the first missing required choice and\n * scroll to it; \"Start with door choices unselected\" (Cube, off by default); the Cube gallery shows the exterior\n * render for side \u00D7 door type (block \"Render\" pickers); set 44: barrels show the render for size \u00D7 heater \u00D7 roof \u00D7\n * door \u00D7 rear window with Front / Back / Above buttons (Content > Files, by name; wood falls back to electric), a \"Back to your sauna\" chip, and any\n * option change brings the render back; the Door side Details popup shows exterior + from-above images with a\n * Left/Right switch (tooltip \"Layout image (aerial)\"); barrel photo-card layout: size photos (each size's own build\n * photo when the tooltip has no card image), list rows for heat source / controller / roof / window.\n * Set 58: sticky product image (desktop + shorter mobile); mobile collapses thumbs + view rail\n * behind a Views chip; tip sheets close on swipe-down / scrim tap (X kept); pairs with\n * assets/nootka-mobile-nav.css for larger drawer menu text.\n * Set 57: Cube rail drops Side (window-side); Front / Above / Cutaway only; side\u2192front fallback.\n * Set 56: hero stays on flickity-viewport (Cube split fix); selected option ring.\n * Set 64: gallery drag under hero locked (partial).\n * Set 65: single gallery stage (render|photo|landing); rail only on render; Flickity\n * Set 67/72: Step 4 fulfillment dates use Option C milestone path (Order \u2192 Build \u2192 Ship? \u2192\n * Assembly/Delivery) with early/mid/late month labels \u2014 never weekday exact dates as a promise.\n * Pure helpers live on window.NootkaTimeline (also used by tests/set67.js). Separate from set 66\n * flooring-split (which only touches syncSizedAddons / bSizeKey / bHeat / addon rows).\n * change/settle syncs stage; drag on render never dismisses; lifestyle never blanked.\n * Set 55: Cube Front/Side/Above/Cutaway rail + Dimensions; barrel no-heater photos/dims use -v2 filenames; mobile\n * hides the geo location pill on configurator pages so it clears the sticky bar.\n * Set 46: the barrel door is a list row too (same as the rear window); no-heater builds use their own front renders\n * (nootka-barrel-noheat-<size>-<shot>.webp, electric as the safety net); and the right store for the address:\n * a confirmed U.S. address on the Canadian site (or a Canadian one on /en-us/) switches market through Shopify's\n * /localization form and comes back to the same build, open step, scroll spot and add-ons (sessionStorage carry).\n * Set 49: no \"Yours\" gallery thumbnail; the gallery thumbnails show only photos. While a photo is showing, the\n * \"Back to your sauna\" chip (phone: \"Your sauna\") on the main image brings the build back.\n * Set 52: Fulfillment opens in place for every build (no page reload). When the build is not the product the page\n * loaded with, step 4 shows its own Deposit / Pay in full cards and Add to cart sends K1's selling plan + _K1 line\n * properties from window.PreorderConfig (the same line K1 builds). Only a build with no K1 plan data (or no\n * PreorderConfig) still reloads, and every reload (that one, or a market switch) lands with the open step at the\n * same spot on screen (scroll restoration off, re-applied while late content loads, given up as soon as the shopper\n * scrolls). On-site Assembly: added only on the U.S. store for a confirmed U.S. street address inside an install\n * zone; a leftover On-site Assembly line is taken out of the cart on load and whenever the address changes\n * (Canadian store, Canadian address, outside a zone, no street address).\n * Set 50: fixed gallery frame (3:2, phone 4:5). Photos are cropped at the Shopify focal point, else at the \"Photo\n * focus\" setting, else 50% 55% (tall photos) or the centre. \"Never crop these images\" keeps drawings whole.\n * Set 76: Step 4 street address is optional; no-number/city/postal/missing entries are soft-flagged\n * with _address_unverified* cart attributes. The separate rural form is no longer needed.\n * City/postal geocoding still supports zone estimates + the set 67 timeline.\n * Set 78: Flat Flooring + Backrests resolve real Length variants at add time. 10ft wood uses Short\n * flooring and visible Long backrests. The configurator stamps a visible Length = Short|Long on those\n * two add-ons from size \u00D7 heater. Single-variant fallback retains the Length note during rollout.\n */\n\n/* ---------- Set 67: month-thirds fulfillment timeline (pure helpers) ----------\n * Maps computed ISO dates from NootkaLocation.promise() to early/mid/late month labels.\n * Customer-facing copy never shows weekday + exact calendar dates as a promise.\n * See /workspace/nootka-geo/mockups/fulfillment-timeline/MONTH-THIRDS-RULE.md\n */\n(function (w) {\n  'use strict';\n  var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n  var MONTHS_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n  // Extra soft buffer beyond the already-computed delivery ISO, so a ~1-week slip still sits inside the window.\n  var WINDOW_BUFFER_DAYS = 9;\n\n  function parseISO(iso) {\n    if (!iso) return null;\n    var d = new Date(String(iso).slice(0, 10) + 'T12:00:00Z');\n    return isNaN(d.getTime()) ? null : d;\n  }\n  function addDays(d, n) {\n    var x = new Date(d.getTime());\n    x.setUTCDate(x.getUTCDate() + n);\n    return x;\n  }\n  function isoOf(d) { return d.toISOString().slice(0, 10); }\n\n  function monthThird(d) {\n    var day = d.getUTCDate();\n    if (day <= 10) return 'early';\n    if (day <= 20) return 'mid';\n    return 'late';\n  }\n\n  // Long: \"mid-December\" / \"early January\" / \"late December\"\n  // Short (timeline chips): \"Mid-Dec\" / \"Early Jan\" / \"Late Dec\"\n  function phrasePoint(isoOrDate, short) {\n    var d = typeof isoOrDate === 'string' ? parseISO(isoOrDate) : isoOrDate;\n    if (!d) return '';\n    var third = monthThird(d);\n    var mi = d.getUTCMonth();\n    if (short) {\n      var lab = third.charAt(0).toUpperCase() + third.slice(1);\n      // mid keeps the hyphen feel as \"Mid-Dec\"; early/late are separate words\n      if (third === 'mid') return 'Mid-' + MONTHS_SHORT[mi];\n      return lab + ' ' + MONTHS_SHORT[mi];\n    }\n    var month = MONTHS[mi];\n    if (third === 'mid') return 'mid-' + month;\n    return third + ' ' + month;\n  }\n\n  function phraseWindow(startIso, endIso, short) {\n    var a = phrasePoint(startIso, short);\n    var b = phrasePoint(endIso || startIso, short);\n    if (!a) return b || '';\n    if (!b || a.toLowerCase() === b.toLowerCase()) return a;\n    // Long form keeps \"early\" lowercase in the second half: \"late December \u2013 early January\"\n    // Short form: \"Late Dec \u2013 early Jan\" (second half lowercases the third word only when long? mockup uses \"early Jan\")\n    if (short) {\n      // Normalize second half: Mid-Xxx stays; Early/Late \u2192 early/late for the trailing side of a range\n      b = b.replace(/^Early /, 'early ').replace(/^Late /, 'late ').replace(/^Mid-/, 'mid-');\n    }\n    return a + ' to ' + b;\n  }\n\n  function thirdKey(isoOrDate) {\n    var d = typeof isoOrDate === 'string' ? parseISO(isoOrDate) : isoOrDate;\n    if (!d) return '';\n    return monthThird(d) + '-' + d.getUTCFullYear() + '-' + d.getUTCMonth();\n  }\n\n  // Build the Option C path. pr = NootkaLocation.promise() result.\n  // opts.zone = true when bucket white_glove (on-site assembly wording).\n  // opts.lt = pr.leadTime (optional) for transit-derived Ship.\n  function buildPath(pr, opts) {\n    opts = opts || {};\n    var zone = !!opts.zone;\n    var lt = (pr && pr.leadTime) || opts.lt || null;\n    var steps = [];\n    steps.push({ id: 'order', lab: 'Order', when: 'Today', state: 'done' });\n\n    var prod = pr && pr.production ? parseISO(pr.production) : null;\n    var del = pr && pr.delivery ? parseISO(pr.delivery) : null;\n\n    if (prod) {\n      steps.push({ id: 'ship', lab: 'Ship', when: phrasePoint(prod, true), state: 'active', iso: isoOf(prod) });\n    }\n\n    // Set91: production completion is the single Ship milestone.\n    // Do not invent an additional Ship date by adding transit days.\n\n    var finalLab = zone ? 'Assembly' : 'Delivery';\n    var calloutTitle = zone ? 'Expected on site' : 'Expected delivery';\n    var note = zone\n      ? \"Our team will work with you to confirm an assembly date, while we're producing your sauna\"\n      : \"Our team will stay in close contact with you during the process to ensure you're ready to receive the sauna. It won't just show up unannounced. With reasonable notice, there is also no issue delaying delivery after order if you need more time to get your site ready for the sauna.\";\n    var calloutWhen = '';\n    var finalIso = null;\n\n    if (del) {\n      var end = addDays(del, WINDOW_BUFFER_DAYS);\n      calloutWhen = phraseWindow(isoOf(del), isoOf(end), false);\n      var whenShort = phraseWindow(isoOf(del), isoOf(end), true);\n      finalIso = isoOf(del);\n      steps.push({ id: zone ? 'assembly' : 'delivery', lab: finalLab, when: whenShort, state: prod ? '' : 'active', iso: finalIso });\n    } else if (prod) {\n      // Production only: last step is Ship (already active); callout mirrors Ship.\n      calloutWhen = phrasePoint(prod, false);\n      calloutTitle = 'Ships by';\n      note = \"We'll confirm your exact dates when your sauna ships.\";\n    }\n\n    // If we have no dates at all, caller should fall back to pr.text\n    return {\n      steps: steps,\n      calloutTitle: calloutTitle,\n      calloutWhen: calloutWhen,\n      note: note,\n      hasDates: !!(prod || del)\n    };\n  }\n\n  function renderHtml(path, esc) {\n    if (!path || !path.hasDates) return '';\n    var n = path.steps.length;\n    var html = '<div class=\"nk-tl nk-tl--n' + n + '\" role=\"list\" aria-label=\"Your fulfillment path\">';\n    path.steps.forEach(function (s) {\n      html += '<div class=\"nk-tl__ms' + (s.state ? ' is-' + s.state : '') + '\" role=\"listitem\">' +\n        '<span class=\"nk-tl__dot\" aria-hidden=\"true\"></span>' +\n        '<span class=\"nk-tl__lab\">' + esc(s.lab) + '</span>' +\n        '<span class=\"nk-tl__when\">' + esc(s.when) + '</span></div>';\n    });\n    html += '</div>';\n    if (path.calloutWhen) {\n      html += '<div class=\"nk-tl__callout\">' +\n        '<span class=\"nk-tl__ck\">' + esc(path.calloutTitle) + '</span>' +\n        '<span class=\"nk-tl__cv\">' + esc(path.calloutWhen) + '</span>' +\n        (path.note ? '<p class=\"nk-tl__note\">' + esc(path.note) + '</p>' : '') +\n        '</div>';\n    }\n    return html;\n  }\n\n  w.NootkaTimeline = {\n    WINDOW_BUFFER_DAYS: WINDOW_BUFFER_DAYS,\n    parseISO: parseISO,\n    addDays: addDays,\n    monthThird: monthThird,\n    phrasePoint: phrasePoint,\n    phraseWindow: phraseWindow,\n    thirdKey: thirdKey,\n    buildPath: buildPath,\n    renderHtml: renderHtml\n  };\n})(typeof window !== 'undefined' ? window : (typeof global !== 'undefined' ? global : this));\n\n(function () {\n  'use strict';\n\n  var BARREL_ROLES = ['size', 'heat', 'roof', 'window', 'door'];\n  var WEIGHT = { size: 16, heat: 8, roof: 4, window: 2, door: 1, side: 1 };\n  var TOKEN = /^(.*?)\\s*\\(\\s*(\\+?)\\s*\\[\\[USD-CAD (\\d+)\\|(\\d+)\\]\\]\\s*\\)\\s*$/;\n  var WIDTHS = [352, 400, 768, 932, 1024, 1200, 1920, 3000];\n\n  function $(sel, el) { return (el || document).querySelector(sel); }\n  function $$(sel, el) { return Array.prototype.slice.call((el || document).querySelectorAll(sel)); }\n  function esc(s) { return String(s == null ? '' : s).replace(/[&<>\"']/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]; }); }\n  function norm(s) { return String(s || '').toLowerCase().replace(/[\u2033\u201D\u201C]/g, '\"').replace(/\\s+/g, ' ').trim(); }\n  function json(el) { try { return JSON.parse(el.textContent); } catch (e) { return null; } }\n\n  function init(root) {\n    if (root.__nk) return; root.__nk = true;\n    var data = json($('[data-nk-combos]', root));\n    var cfg = json($('[data-nk-settings]', root));\n    if (!data || !cfg || !data.products || !data.products.length) return;\n    var copy = cfg.copy || {};\n    // Barrel: one product per build (size/heat/roof/window/door metafields). Cube: entries of ONE product\n    // (door type + door side), so every switch stays on the same page and only ?variant= changes.\n    var ROLES = cfg.roles && cfg.roles.length ? cfg.roles : BARREL_ROLES;\n    var isUSD = String(cfg.currency || data.currency).toUpperCase() === 'USD';\n    var k1Mode = root.getAttribute('data-k1-mode') || 'navigate';\n    var stickyMode = root.getAttribute('data-sticky-mode') || 'add';\n    var form = $('[data-nk-form]', root);\n    var idInput = $('[data-nk-variant-input]', root);\n    var uid = root.id;\n    // Set 35: calm layout (Direction C). Photo cards for the listed groups, Details links instead of (i),\n    // a gallery preview that follows the choice, and a slim summary bar instead of the Continue buttons.\n    var calm = !!cfg.calm || root.hasAttribute('data-nk-calm');\n    function roleList(s) { return String(s || '').split(',').map(function (x) { return x.trim(); }).filter(Boolean); }\n    var cardRoles = calm ? roleList(copy.calm_card_roles) : [];\n    var heroRole = calm ? String(copy.calm_hero_role || '').trim() : '';\n    var badgeRole = calm ? String(copy.calm_badge_role || '').trim() : '';\n    // Set 40: list rows (barrel calm), Cube renders keyed \"side|door\" (normalised option values).\n    var rowRoles = calm ? roleList(copy.calm_row_roles) : [];\n    var renders = cfg.renders || {};\n    /* ---------- set 44: barrel renders ----------\n       cfg.barrel.map: one Shopify Files URL per \"heat|size|shot\" (Liquid builds it from the nootka-barrel-\u2026 names).\n       heat = electric | wood | none (none only has the overhead). Wood keys exist only once the block setting\n       \"Wood-stove renders are uploaded\" is on; until then wood builds use the electric render (+ a small note).\n       No heater: Front/Back use electric, Above uses the no-heater aerial. Front = roof \u00D7 door (no roof: the\n       no-roof render), Back = rear window, Above = benches + heater. */\n    var bR = cfg.barrel || null, bPre = {};\n    var barrelR = !!(calm && !heroRole && bR && bR.on && bR.map);\n    /* Set 55: Cube multi-view + Dimensions, parallel to the barrel rail.\n       Set 57: rail is Front / Above / Cutaway only (Side / window-side removed; Files kept). */\n    var cR = cfg.cube || null;\n    var cubeR = !!(calm && heroRole && cR && cR.on && cR.map);\n    var C_VIEWS = ['front', 'over', 'cut'];\n    var cViewLab = (function () {\n      // Prefer the theme setting, but drop a leftover \"Side\" label if the saved value is still the set-55 string.\n      var l = String((cR && cR.views) || 'Front | Above | Cutaway').split('|').map(function (x) { return x.trim(); })\n        .filter(function (x) { return x && !/^side$/i.test(x); });\n      return { front: l[0] || 'Front', over: l[1] || 'Above', cut: l[2] || 'Cutaway' };\n    })();\n    function cNormView(view) { return C_VIEWS.indexOf(view) > -1 ? view : 'front'; }\n    var cD = (cR && cR.dims && cR.dims.on && cR.dims.map) ? cR.dims : null;\n    var B_ROLES = ['size', 'heat', 'roof', 'window', 'door'];\n    var B_VIEWS = ['front', 'rear', 'side', 'over'];\n    var bViewLab = (function () {\n      var l = String((bR && bR.views) || '').split('|').map(function (x) { return x.trim(); });\n      return { front: l[0] || 'Front', rear: l[1] || 'Back', side: 'Side', over: l[2] || 'Above' };\n    })();\n    function bSized(u, w) { if (!u) return ''; u = String(u).replace(/([?&])width=\\d+&?/, '$1').replace(/[?&]$/, ''); return u + (u.indexOf('?') > -1 ? '&' : '?') + 'width=' + w; }\n    function bHeat() { var h = norm(selOr('heat')); return /wood/.test(h) ? 'wood' : (/no heater/.test(h) ? 'none' : 'electric'); }\n    function bShot(view) {\n      if (view === 'rear') return (/no rear/.test(norm(selOr('window'))) ? 'rear-no-window' : 'rear-xl-window') + (bNoRoof() ? '-no-roof' : '');\n      if (view === 'over') return 'overhead';\n      var glass = /glass/.test(norm(selOr('door')));\n      if (bNoRoof()) return glass ? 'front-glass-door-no-roof' : 'front-no-roof';\n      return glass ? 'front-glass-door' : 'front-standard-door';\n    }\n    function bNoRoof() { return /no roof/.test(norm(selOr('roof'))); }\n    // Set 45: candidate URLs, best first (wood, then electric as a safety net). A URL that 404s (file missing from\n    // Content > Files) is skipped automatically.\n    var bBad = {}, bOk = {};\n    function bCands(view, size, heat) {\n      var m = bR.map, shot = bShot(view === 'side' ? 'rear' : view), shots = [shot], out = [];\n      if (view === 'over' && heat === 'none') out.push(m['none|' + size + '|overhead']);\n      var heats = heat === 'wood' ? ['wood', 'electric'] : (heat === 'none' && view === 'front' ? ['none', 'electric'] : ['electric']);\n      heats.forEach(function (h) { shots.forEach(function (s) { out.push(m[h + '|' + size + '|' + s]); }); });\n      return out.filter(Boolean);\n    }\n    function bProbe(u) {\n      if (bOk[u] || bBad[u] || bPre[u]) return; bPre[u] = 1;\n      var im = new Image(); im.decoding = 'async';\n      im.onload = function () { bOk[u] = 1; };\n      im.onerror = function () { bBad[u] = 1; if (state.hero) paintHero(); };\n      im.src = bSized(u, 1800);\n    }\n    function bPick(view) {\n      if (!barrelR) return null;\n      view = B_VIEWS.indexOf(view) > -1 ? view : 'front';\n      var size = /10/.test(norm(selOr('size'))) ? '10ft' : '8ft', heat = bHeat(), c = bCands(view, size, heat), src = '';\n      c.forEach(function (u) { bProbe(u); });\n      for (var i = 0; i < c.length; i++) { if (!bBad[c[i]]) { src = c[i]; break; } }\n      if (!src) src = c[c.length - 1] || '';\n      return src ? { hero: bSized(src, 1800), card: bSized(src, 360), th: bSized(src, 240), sq: view === 'over', fb: false, view: view } : null;\n    }\n    // Which view a change is best seen from: rear window from the back, heater from above (unless the wood render is\n    // still missing: then stay on the front rather than show an electric heater), the rest from the front.\n    function cHand() { return /right/.test(norm(selOr(heroRole) || '')) ? 'right' : 'left'; }\n    function cPick(view) {\n      if (!cubeR) return null;\n      // Set 57: unknown / removed \"side\" (window-side) falls back to Front.\n      view = cNormView(view);\n      if (view === 'front') {\n        var rr = renderFor(selOr(heroRole), selOr(badgeRole));\n        if (!rr) return null;\n        return { hero: rr.hero, card: rr.card || rr.hero, th: rr.card || rr.hero, sq: false, view: 'front' };\n      }\n      var hand = cHand(), shot = view === 'over' ? 'overhead' : 'cutaway';\n      var src = cR.map[hand + '|' + shot];\n      if (!src) return null;\n      bProbe(src);\n      if (bBad[src]) return null;\n      return { hero: bSized(src, 1800), card: bSized(src, 360), th: bSized(src, 240), sq: view === 'over', view: view };\n    }\n    function cViewFor(role) {\n      if (role === heroRole || role === badgeRole) return 'front';\n      return state.view || 'front';\n    }\n    function bViewFor(role) {\n      if (role === 'window') return 'rear';\n      if (role === 'heat') return 'over';\n      return 'front';\n    }\n    /* ---------- set 48: Dimensions switch (rail option 1) ----------\n       Off by default. On: the main image crossfades to the drawing for the current view and size\n       (Front -> end elevation, Back -> side elevation, Above -> overhead), the rail reads End / Side / Top, the caption\n       reads \"8 ft \u00B7 approx. dimensions\", \"Click to enlarge\" / \"Tap to zoom\" opens the drawing full screen (pinch, wheel,\n       double-tap zoom, drag to pan) and on phones a row of key sizes (theme settings, per size) sits under the image.\n       Drawings come from Content > Files by name: nootka-barrel-dim-<8ft|10ft>-<end|side|top>.webp. */\n    var bD = (bR && bR.dims && bR.dims.on && bR.dims.map) ? bR.dims : null;\n    var DIM_OF = { front: 'end', rear: 'end', side: 'side', over: 'top', cut: 'cut' }, DIM_LAB = { front: 'End', rear: 'Back', side: 'Side', over: 'Top', cut: 'Cutaway' };\n    var C_DIM_LAB = { front: 'Front', over: 'Top', cut: 'Cutaway' };\n    var DIM_TXT = { sw: 'Dimensions', cap: 'approx. dimensions', big: 'Click to enlarge', tap: 'Tap to zoom',\n      hintT: 'Pinch or double-tap to zoom in \u00B7 drag to pan', hintM: 'Scroll or double-click to zoom \u00B7 drag to pan', close: 'Close' };\n    function dimOn() { return !!(((barrelR && bD) || (cubeR && cD)) && state.dims); }\n    function dimDrawingOn() { return dimOn() && !(barrelR && state.view === 'rear') && !window.matchMedia('(max-width: 768px)').matches; }\n    /* Set 53: Dimensions on keeps the sauna where the photo had it. Measured per file (scripts in set 53 _tools/measure):\n       [natural w, natural h, sauna box x0, y0, x1, y1 (fractions of the image)] and, for drawings, the box of all ink\n       (labels and dimension lines) x0, y0, x1, y1. The drawing is scaled so its sauna is as tall as the photo's sauna on\n       screen and centred on it; only if its labels would leave the frame (or run under the view rail) is it shrunk\n       to fit. A file not in the table (renamed or a new upload) falls back to the CSS box. */\n    var DIM_FIT = {\"p\":{\"nootka-barrel-10ft-overhead-no-heater\":[2240,2240,0.2522,0.1375,0.7491,0.8643],\"nootka-barrel-8ft-overhead-no-heater\":[2240,2240,0.2522,0.2112,0.7491,0.7911],\"nootka-barrel-electric-10ft-front-glass-door-no-roof\":[2112,2640,0.1245,0.275,0.866,0.7307],\"nootka-barrel-electric-10ft-front-glass-door\":[1920,2400,0.1151,0.2646,0.8755,0.7308],\"nootka-barrel-electric-10ft-front-no-roof\":[1920,2400,0.1245,0.275,0.8656,0.7308],\"nootka-barrel-electric-10ft-front-standard-door\":[1920,2400,0.1151,0.2646,0.8755,0.7308],\"nootka-barrel-electric-10ft-overhead\":[2240,2240,0.2522,0.1375,0.7491,0.8643],\"nootka-barrel-electric-10ft-rear-no-window-no-roof\":[2112,2640,0.1155,0.2735,0.8759,0.7424],\"nootka-barrel-electric-10ft-rear-no-window\":[1920,2400,0.1057,0.2621,0.8854,0.7425],\"nootka-barrel-electric-10ft-rear-xl-window-no-roof\":[2112,2640,0.1155,0.2735,0.8759,0.7424],\"nootka-barrel-electric-10ft-rear-xl-window\":[1920,2400,0.1057,0.2621,0.8854,0.7425],\"nootka-barrel-electric-8ft-front-glass-door-no-roof\":[2112,2640,0.1723,0.275,0.866,0.7307],\"nootka-barrel-electric-8ft-front-glass-door\":[1920,2400,0.1625,0.2646,0.8755,0.7308],\"nootka-barrel-electric-8ft-front-no-roof\":[1920,2400,0.1724,0.275,0.8656,0.7308],\"nootka-barrel-electric-8ft-front-standard-door\":[1920,2400,0.1625,0.2646,0.8755,0.7308],\"nootka-barrel-electric-8ft-overhead\":[2240,2240,0.2522,0.2112,0.7491,0.7911],\"nootka-barrel-electric-8ft-rear-no-window-no-roof\":[2112,2640,0.1155,0.2735,0.8272,0.7424],\"nootka-barrel-electric-8ft-rear-no-window\":[1920,2400,0.1057,0.2621,0.8375,0.7425],\"nootka-barrel-electric-8ft-rear-xl-window-no-roof\":[2112,2640,0.1155,0.2735,0.8272,0.7424],\"nootka-barrel-electric-8ft-rear-xl-window\":[1920,2400,0.1057,0.2621,0.8375,0.7425],\"nootka-barrel-noheat-10ft-front-glass-door-no-roof\":[1920,2400,0.1245,0.275,0.8661,0.7308],\"nootka-barrel-noheat-10ft-front-glass-door\":[1920,2400,0.1151,0.2646,0.8755,0.7308],\"nootka-barrel-noheat-10ft-front-no-roof\":[1920,2400,0.1245,0.275,0.8661,0.7308],\"nootka-barrel-noheat-10ft-front-standard-door\":[1920,2400,0.1151,0.2646,0.8755,0.7308],\"nootka-barrel-noheat-8ft-front-glass-door-no-roof\":[1920,2400,0.1724,0.2754,0.8661,0.7308],\"nootka-barrel-noheat-8ft-front-glass-door\":[1920,2400,0.1625,0.2646,0.8755,0.7308],\"nootka-barrel-noheat-8ft-front-no-roof\":[1920,2400,0.1724,0.275,0.8661,0.7312],\"nootka-barrel-noheat-8ft-front-standard-door\":[1920,2400,0.1625,0.2646,0.8755,0.7308],\"nootka-barrel-wood-10ft-front-glass-door-no-roof\":[2112,2640,0.1245,0.275,0.866,0.7307],\"nootka-barrel-wood-10ft-front-glass-door\":[2112,2640,0.1151,0.1947,0.8755,0.7307],\"nootka-barrel-wood-10ft-front-no-roof\":[2112,2640,0.1241,0.275,0.866,0.7307],\"nootka-barrel-wood-10ft-front-standard-door\":[2112,2640,0.1151,0.1947,0.8755,0.7307],\"nootka-barrel-wood-10ft-overhead\":[2508,2508,0.252,0.059,0.7492,0.8644],\"nootka-barrel-wood-10ft-rear-no-window-no-roof\":[2112,2640,0.1155,0.1057,0.8759,0.7424],\"nootka-barrel-wood-10ft-rear-no-window\":[2112,2640,0.1061,0.1057,0.8854,0.7424],\"nootka-barrel-wood-10ft-rear-xl-window-no-roof\":[2112,2640,0.1155,0.1057,0.8759,0.7424],\"nootka-barrel-wood-10ft-rear-xl-window\":[2112,2640,0.1061,0.1057,0.8854,0.7424],\"nootka-barrel-wood-8ft-front-glass-door-no-roof\":[2112,2640,0.1723,0.275,0.866,0.7307],\"nootka-barrel-wood-8ft-front-glass-door\":[2112,2640,0.1624,0.1841,0.8755,0.7307],\"nootka-barrel-wood-8ft-front-no-roof\":[2112,2640,0.1723,0.275,0.866,0.7311],\"nootka-barrel-wood-8ft-front-standard-door\":[2112,2640,0.1624,0.1841,0.8755,0.7307],\"nootka-barrel-wood-8ft-overhead\":[2508,2508,0.252,0.132,0.7492,0.7911],\"nootka-barrel-wood-8ft-rear-no-window-no-roof\":[2112,2640,0.1155,0.1057,0.8272,0.7424],\"nootka-barrel-wood-8ft-rear-no-window\":[2112,2640,0.1061,0.1057,0.8376,0.7424],\"nootka-barrel-wood-8ft-rear-xl-window-no-roof\":[2112,2640,0.1155,0.1057,0.8272,0.7424],\"nootka-barrel-wood-8ft-rear-xl-window\":[2112,2640,0.1061,0.1057,0.8376,0.7424],\"cube_overhead_left\":[2240,2240,0.2094,0.129,0.8063,0.8411],\"cube_overhead_right\":[2240,2240,0.1938,0.129,0.7906,0.8411],\"cube_render_left_glass\":[1920,2400,0.151,0.1492,0.8781,0.7954],\"cube_render_left_standard\":[1920,2400,0.151,0.1492,0.8781,0.7954],\"cube_render_right_glass\":[1920,2400,0.1219,0.1492,0.8484,0.7954],\"cube_render_right_standard\":[1920,2400,0.1219,0.1492,0.8484,0.7954],\"nootka-barrel-10ft-overhead-no-heater-v2\":[2240,2240,0.2522,0.1379,0.7491,0.8643],\"nootka-barrel-8ft-overhead-no-heater-v2\":[2240,2240,0.2522,0.2112,0.7491,0.7911],\"nootka-barrel-noheat-10ft-front-glass-door-no-roof-v2\":[1920,2400,0.1245,0.2754,0.8661,0.7308],\"nootka-barrel-noheat-10ft-front-glass-door-v2\":[1920,2400,0.1151,0.2646,0.8755,0.7308],\"nootka-barrel-noheat-10ft-front-no-roof-v2\":[1920,2400,0.1245,0.275,0.8661,0.7308],\"nootka-barrel-noheat-10ft-front-standard-door-v2\":[1920,2400,0.1151,0.2646,0.8755,0.7308],\"nootka-barrel-noheat-8ft-front-glass-door-no-roof-v2\":[1920,2400,0.1724,0.275,0.8661,0.7308],\"nootka-barrel-noheat-8ft-front-glass-door-v2\":[1920,2400,0.1625,0.2646,0.8755,0.7308],\"nootka-barrel-noheat-8ft-front-no-roof-v2\":[1920,2400,0.1724,0.275,0.8661,0.7308],\"nootka-barrel-noheat-8ft-front-standard-door-v2\":[1920,2400,0.1625,0.2646,0.8755,0.7308],\"nootka-cube-left-cutaway\":[1920,2400,0.213,0.2362,0.8802,0.7958],\"nootka-cube-left-window-side\":[1920,2400,0.1135,0.2358,0.8016,0.7954],\"nootka-cube-right-cutaway\":[1920,2400,0.1198,0.2362,0.787,0.7958],\"nootka-cube-right-window-side\":[1920,2400,0.1135,0.2358,0.8016,0.7954]},\"d\":{\"nootka-barrel-dim-10ft-electric-noroof-glassdoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-10ft-electric-noroof-side\":[2400,1920,0.1571,0.1693,0.8408,0.776,0.1567,0.1667,0.8958,0.8719],\"nootka-barrel-dim-10ft-electric-noroof-stddoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-10ft-electric-roof-glassdoor-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-10ft-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-10ft-noheat-noroof-glassdoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-10ft-noheat-noroof-side\":[2400,1920,0.1571,0.1693,0.8408,0.776,0.1567,0.1667,0.8958,0.8719],\"nootka-barrel-dim-10ft-noheat-noroof-stddoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-10ft-noheat-roof-glassdoor-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-10ft-noheat-roof-side\":[2400,1920,0.1558,0.1562,0.8438,0.776,0.1554,0.1542,0.9021,0.8719],\"nootka-barrel-dim-10ft-noheat-roof-stddoor-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-10ft-noheat-top\":[2240,2480,0.2522,0.1734,0.7491,0.8286,0.1911,0.0218,0.804,0.9069],\"nootka-barrel-dim-10ft-side\":[2400,1920,0.1558,0.1562,0.8438,0.776,0.1554,0.1542,0.9021,0.8719],\"nootka-barrel-dim-10ft-top\":[2240,2480,0.2522,0.1734,0.7491,0.8286,0.1911,0.0218,0.804,0.9069],\"nootka-barrel-dim-10ft-wood-noroof-glassdoor-end\":[2140,2700,0.2098,0.0933,0.7916,0.7222,0.1477,0.093,0.9547,0.87],\"nootka-barrel-dim-10ft-wood-noroof-side\":[2400,2100,0.1325,0.2905,0.7512,0.7433,0.1321,0.1438,0.9038,0.9333],\"nootka-barrel-dim-10ft-wood-noroof-stddoor-end\":[2140,2700,0.2098,0.0933,0.7916,0.7222,0.1477,0.093,0.9547,0.87],\"nootka-barrel-dim-10ft-wood-roof-glassdoor-end\":[2140,2700,0.2,0.0933,0.8,0.7222,0.1374,0.093,0.9636,0.87],\"nootka-barrel-dim-10ft-wood-roof-side\":[2400,2100,0.1317,0.281,0.7512,0.7433,0.1313,0.1438,0.9038,0.9333],\"nootka-barrel-dim-10ft-wood-roof-stddoor-end\":[2140,2700,0.2,0.0933,0.8,0.7222,0.1374,0.093,0.9636,0.87],\"nootka-barrel-dim-10ft-wood-top\":[2240,2480,0.2522,0.1012,0.7491,0.8286,0.1911,0.0218,0.804,0.9069],\"nootka-barrel-dim-8ft-electric-noroof-glassdoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-8ft-electric-noroof-side\":[2400,1920,0.1988,0.1391,0.7987,0.8073,0.1988,0.1375,0.8538,0.9031],\"nootka-barrel-dim-8ft-electric-noroof-stddoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-8ft-electric-roof-glassdoor-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-8ft-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-8ft-noheat-noroof-glassdoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-8ft-noheat-noroof-side\":[2400,1920,0.1988,0.1391,0.7987,0.8073,0.1988,0.1375,0.8538,0.9031],\"nootka-barrel-dim-8ft-noheat-noroof-stddoor-end\":[1920,2400,0.1766,0.1775,0.825,0.7125,0.1073,0.1767,0.8943,0.8788],\"nootka-barrel-dim-8ft-noheat-roof-glassdoor-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-8ft-noheat-roof-side\":[2400,1920,0.1975,0.1255,0.8021,0.8073,0.1971,0.1234,0.8604,0.9031],\"nootka-barrel-dim-8ft-noheat-roof-stddoor-end\":[1920,2400,0.1656,0.1658,0.8344,0.7125,0.0958,0.1654,0.9042,0.8788],\"nootka-barrel-dim-8ft-noheat-top\":[2240,2240,0.2522,0.2121,0.7491,0.7906,0.1911,0.0442,0.804,0.8768],\"nootka-barrel-dim-8ft-side\":[2400,1920,0.1975,0.1255,0.8021,0.8073,0.1971,0.1234,0.8604,0.9031],\"nootka-barrel-dim-8ft-top\":[2240,2240,0.2522,0.2121,0.7491,0.7906,0.1911,0.0442,0.804,0.8768],\"nootka-barrel-dim-8ft-wood-noroof-glassdoor-end\":[2140,2700,0.2098,0.0933,0.7916,0.7222,0.1477,0.093,0.9547,0.87],\"nootka-barrel-dim-8ft-wood-noroof-side\":[2400,2100,0.1554,0.2638,0.7242,0.7738,0.155,0.0995,0.8775,0.9638],\"nootka-barrel-dim-8ft-wood-noroof-stddoor-end\":[2140,2700,0.2098,0.0933,0.7916,0.7222,0.1477,0.093,0.9547,0.87],\"nootka-barrel-dim-8ft-wood-roof-glassdoor-end\":[2140,2700,0.2,0.0933,0.8,0.7222,0.1374,0.093,0.9636,0.87],\"nootka-barrel-dim-8ft-wood-roof-side\":[2400,2100,0.1542,0.2533,0.7242,0.7738,0.1537,0.0995,0.8775,0.9638],\"nootka-barrel-dim-8ft-wood-roof-stddoor-end\":[2140,2700,0.2,0.0933,0.8,0.7222,0.1374,0.093,0.9636,0.87],\"nootka-barrel-dim-8ft-wood-top\":[2240,2240,0.2522,0.1317,0.7491,0.7906,0.1911,0.0442,0.804,0.8768],\"nootka-barrel-dim-10ft-noheat-noroof-glassdoor-end-v2\":[1920,2400,0.1766,0.1771,0.825,0.7129,0.1115,0.1767,0.8901,0.8767],\"nootka-barrel-dim-10ft-noheat-noroof-side-v2\":[2400,1920,0.1571,0.1688,0.8408,0.7771,0.1567,0.1667,0.8925,0.8719],\"nootka-barrel-dim-10ft-noheat-noroof-stddoor-end-v2\":[1920,2400,0.1766,0.1771,0.825,0.7129,0.1115,0.1767,0.8901,0.8767],\"nootka-barrel-dim-10ft-noheat-roof-glassdoor-end-v2\":[1920,2400,0.1656,0.1658,0.8344,0.7129,0.1,0.1654,0.9,0.8771],\"nootka-barrel-dim-10ft-noheat-roof-side-v2\":[2400,1920,0.1558,0.1562,0.8438,0.7771,0.1554,0.1542,0.8988,0.8719],\"nootka-barrel-dim-10ft-noheat-roof-stddoor-end-v2\":[1920,2400,0.1656,0.1658,0.8344,0.7129,0.1,0.1654,0.9,0.8771],\"nootka-barrel-dim-10ft-noheat-top-v2\":[2240,2480,0.2522,0.1726,0.7491,0.8294,0.1571,0.0218,0.825,0.9048],\"nootka-barrel-dim-8ft-noheat-noroof-glassdoor-end-v2\":[1920,2400,0.1766,0.1771,0.825,0.7129,0.1115,0.1767,0.8901,0.8767],\"nootka-barrel-dim-8ft-noheat-noroof-side-v2\":[2400,1920,0.1988,0.1391,0.7987,0.8078,0.1988,0.1375,0.8504,0.9031],\"nootka-barrel-dim-8ft-noheat-noroof-stddoor-end-v2\":[1920,2400,0.1766,0.1771,0.825,0.7129,0.1115,0.1767,0.8901,0.8767],\"nootka-barrel-dim-8ft-noheat-roof-glassdoor-end-v2\":[1920,2400,0.1656,0.1658,0.8344,0.7129,0.1,0.1654,0.9,0.8771],\"nootka-barrel-dim-8ft-noheat-roof-side-v2\":[2400,1920,0.1975,0.1255,0.8021,0.8078,0.1971,0.1234,0.8575,0.9031],\"nootka-barrel-dim-8ft-noheat-roof-stddoor-end-v2\":[1920,2400,0.1656,0.1658,0.8344,0.7129,0.1,0.1654,0.9,0.8771],\"nootka-barrel-dim-8ft-noheat-top-v2\":[2240,2240,0.2522,0.2112,0.7491,0.7911,0.1571,0.0442,0.8232,0.8768],\"nootka-cube-dim-left-cutaway\":[1920,2400,0.213,0.2362,0.8802,0.7963,0.0177,0.0767,0.9401,0.8742],\"nootka-cube-dim-left-front-glass-door\":[1920,2400,0.1688,0.2362,0.8359,0.7963,0.0984,0.0767,0.8958,0.8742],\"nootka-cube-dim-left-front-standard-door\":[1920,2400,0.1688,0.2362,0.8359,0.7963,0.0984,0.0767,0.8958,0.8742],\"nootka-cube-dim-left-overhead\":[1920,2400,0.2589,0.2008,0.8859,0.7992,0.0646,0.1167,1.0,0.8767],\"nootka-cube-dim-left-window-side\":[1920,2400,0.113,0.2358,0.8016,0.7954,0.1068,0.235,0.8823,0.8746],\"nootka-cube-dim-right-cutaway\":[1920,2400,0.1198,0.2362,0.787,0.7963,0.0599,0.0767,0.9823,0.8721],\"nootka-cube-dim-right-front-glass-door\":[1920,2400,0.1641,0.2362,0.8313,0.7963,0.1042,0.0767,0.9016,0.8721],\"nootka-cube-dim-right-front-standard-door\":[1920,2400,0.1641,0.2362,0.8313,0.7963,0.1042,0.0767,0.9016,0.8721],\"nootka-cube-dim-right-overhead\":[1920,2400,0.1141,0.2008,0.7406,0.7992,0.0,0.1167,0.9354,0.8767],\"nootka-cube-dim-right-window-side\":[1920,2400,0.1135,0.2358,0.8016,0.7954,0.1068,0.235,0.8823,0.8746]}};\n    function fBase(u) { return String(u || '').split('?')[0].split('/').pop().replace(/\\.(webp|png|jpe?g)$/i, ''); }\n    function dimFit() {\n      var di = hero && $('[data-nk-hero-dim]', hero);\n      if (!di) return;\n      // Set 58h: responsive CSS owns the drawing box at all widths.\n      // Never reuse cached ink bounds: same-name replacement files may differ.\n      ['left', 'top', 'width', 'height', 'transform'].forEach(function (key) { di.style.removeProperty(key); });\n      di.removeAttribute('data-nk-fit');\n    }\n    var dimRO = null;\n    function dimWatch() {\n      if (dimRO || !hero || typeof ResizeObserver === 'undefined') return;\n      dimRO = new ResizeObserver(function () { if (dimOn()) dimFit(); });\n      dimRO.observe(hero);\n    }\n    function bSizeKey() { return /10/.test(norm(selOr('size'))) ? '10ft' : '8ft'; }\n\n    /* ---------- set 66/73: Length as line-item property (single-variant products) ----------\n       Flat Flooring + Backrests are single-variant again (Quick View broke with Length variants).\n       Mapping (Kris):\n         8ft electric / no-heater / wood \u2192 Length Short\n         10ft electric / no-heater \u2192 Length Long\n         10ft wood \u2192 flooring Short; backrests Long (confirmed)\n       Property key is \"Length\" (visible in cart/checkout \u2014 no underscore prefix). */\n    var LENGTH_HANDLES = { 'flat-flooring-slats': true, 'backrests': true };\n    function flooringLengthKey() {\n      return (bSizeKey() === '10ft' && bHeat() !== 'wood') ? 'Long' : 'Short';\n    }\n    function backrestsLengthKey() {\n      // Set 78 / Kris confirmed: every 10ft build, including wood, uses Long backrests.\n      return (bSizeKey() === '10ft') ? 'Long' : 'Short';\n    }\n    function lengthKeyForHandle(handle) {\n      if (handle === 'flat-flooring-slats') return flooringLengthKey();\n      if (handle === 'backrests') return backrestsLengthKey();\n      return null;\n    }\n    function applyLengthAddon(handle, lengthKey) {\n      var row = root.querySelector('[data-nk-addon-row=\"' + handle + '\"]');\n      if (!row) return;\n      var inp = row.querySelector('[data-nk-addon]');\n      if (lengthKey == null) {\n        row.hidden = true;\n        row.classList.add('is-size-off');\n        if (inp) {\n          inp.checked = false;\n          row.classList.remove('on');\n          inp.removeAttribute('data-nk-length');\n        }\n        return;\n      }\n      row.hidden = false;\n      row.classList.remove('is-size-off');\n      if (inp) {\n        inp.setAttribute('data-nk-length', lengthKey);\n        var product = window.NootkaLengthVariants.peek(handle);\n        if (product) {\n          try {\n            var chosen = window.NootkaLengthVariants.pick(product, lengthKey);\n            inp.value = String(chosen.id);\n            inp.setAttribute('data-price', chosen.price);\n            inp.removeAttribute('data-nk-length-error');\n            inp.disabled = false;\n            row.classList.remove('is-off');\n            var price = row.querySelector('.nk-ad__pr');\n            if (price) price.textContent = moneyWithCurrency(chosen.price);\n          } catch (err) {\n            inp.setAttribute('data-nk-length-error', err.message);\n            // A checked request must fail visibly, never disappear from addonItems().\n            inp.disabled = false;\n          }\n        }\n        var status = row.querySelector('[data-nk-length-status]');\n        if (!status) {\n          status = document.createElement('span'); status.setAttribute('data-nk-length-status', '');\n          status.setAttribute('role', 'status'); status.className = 'nk-ad__ds';\n          var text = row.querySelector('.nk-ad__tx'); if (text) text.appendChild(status);\n        }\n        status.textContent = inp.checked ? (inp.getAttribute('data-nk-length-error') || '') : '';\n      }\n    }\n    function syncSizedAddons() {\n      applyLengthAddon('flat-flooring-slats', flooringLengthKey());\n      applyLengthAddon('backrests', backrestsLengthKey());\n    }\n    // Set 77: resolve the exact variant with fresh market data; always retain visible Length.\n    function addonCartItem(inp, attemptProducts) {\n      var item = { id: +inp.value, quantity: 1 };\n      var handle = inp.getAttribute('data-handle') || '';\n      var len = inp.getAttribute('data-nk-length') || lengthKeyForHandle(handle);\n      if (len && LENGTH_HANDLES[handle]) {\n        var fresh = window.NootkaLengthVariants.load(handle, true);\n        if (attemptProducts) attemptProducts[handle] = fresh;\n        return fresh.then(function (product) {\n          var chosen = window.NootkaLengthVariants.pick(product, len);\n          var resolved = { id: chosen.id, quantity: 1, properties: { Length: chosen.length } };\n          inp.value = String(resolved.id); return resolved;\n        });\n      }\n      return Promise.resolve(item);\n    }\n\n\n    // Set 51: the drawing for this exact build (size, heater, roof, door), then the general one for the size.\n    // A per-build file that 404s is skipped (bProbe marks it bad and repaints), so a missing upload falls back.\n    function dimBuild() {\n      var h = bHeat(); return { heat: h === 'none' ? 'noheat' : h, roof: bNoRoof() ? 'noroof' : 'roof', door: /glass/.test(norm(selOr('door'))) ? 'glassdoor' : 'stddoor' };\n    }\n    function dimCands(view) {\n      if (cubeR && cD) {\n        var hand = cHand(), m = cD.map;\n        view = cNormView(view);\n        if (view === 'front') {\n          var door = /glass/.test(norm(selOr(badgeRole) || '')) ? 'front-glass-door' : 'front-standard-door';\n          return [m[hand + '|' + door]].filter(Boolean);\n        }\n        var shot = view === 'over' ? 'overhead' : 'cutaway';\n        return [m[hand + '|' + shot]].filter(Boolean);\n      }\n      if (!bD || view === 'rear') return []; // Existing rear renders only: no fabricated rear drawing.\n      var sz = bSizeKey(), dv = DIM_OF[view] || 'end', b = dimBuild(), m = bD.map, k;\n      if (dv === 'end') k = [sz, b.heat, b.roof, b.door, 'end'];\n      else if (dv === 'side') k = [sz, b.heat, b.roof, 'side'];\n      else k = [sz, b.heat, 'top'];\n      return [m[k.join('|')], m[sz + '|' + dv]].filter(Boolean);\n    }\n    function dimSrc(view) {\n      var c = dimCands(view); c.forEach(function (u) { bProbe(u); });\n      for (var i = 0; i < c.length; i++) { if (!bBad[c[i]]) return c[i]; }\n      return c[c.length - 1] || '';\n    }\n    function dimLabOf(view) { return (cubeR ? C_DIM_LAB : DIM_LAB)[view] || view; }\n    function dimTouch() { try { return matchMedia('(hover: none), (pointer: coarse)').matches; } catch (e) { return false; } }\n    // \"End | ~7\u2032 0\u2033 | width | 2144 mm\", one per line. Set 51: the first column may add words that limit the line to\n    // some builds: roof / noroof, electric / wood / noheat, stddoor / glassdoor (\"End noroof | ~7\u2032 0\u2033 | height | 2143 mm\").\n    function dimLineOk(first, want) {\n      var w = norm(first).replace(/no[\\s-]+(roof|heat(er)?)/g, 'no$1').split(/[\\s,\u00B7]+/).filter(Boolean), b = dimBuild(), h = bHeat();\n      if (w[0] !== want) return false;\n      for (var i = 1; i < w.length; i++) {\n        var q = w[i].replace(/-/g, '');\n        if (q === 'roof' || q === 'noroof') { if (q !== b.roof) return false; }\n        else if (q === 'electric' || q === 'wood') { if (q !== h) return false; }\n        else if (q === 'noheat' || q === 'noheater') { if (h !== 'none') return false; }\n        else if (q === 'stddoor' || q === 'glassdoor') { if (q !== b.door) return false; }\n      }\n      return true;\n    }\n    function dimNoCallouts(view) {\n      view = view || state.view;\n      // Set 63 #1: barrel Back is angled (photo only); Cube cutaway is the angled dim view.\n      return (barrelR && view === 'rear') || (cubeR && view === 'cut');\n    }\n    function dimSizes(view) {\n      if (dimNoCallouts(view)) return [];\n      var want = cubeR ? (C_DIM_LAB[view] || view).toLowerCase() : DIM_OF[view];\n      var txt = '';\n      if (cubeR && cD) txt = String(cD.sizes || '');\n      else if (bD && bD.sizes) txt = String(bD.sizes[bSizeKey()] || '');\n      return txt.split(/\\r?\\n/).map(function (l) { return l.split('|').map(function (x) { return x.trim(); }); })\n        .filter(function (c) {\n          if (!(c.length >= 3 && c[1])) return false;\n          if (cubeR) {\n            var w = norm(c[0]).split(/[\\s,\u00B7]+/)[0];\n            var map = { front: 'front', end: 'front', side: 'side', top: 'over', above: 'over', over: 'over', cut: 'cut', cutaway: 'cut', interior: 'cut' };\n            return (map[w] || w) === view;\n          }\n          return dimLineOk(c[0], want);\n        })\n        .map(function (c) { return { v: c[1], k: c[2] || '', mm: c[3] || '' }; });\n    }\n    var dimRowEl = null;\n    function dimRow() {\n      if (!(bD || cD)) return;\n      var scope = root.closest('.shopify-section') || document, show = $('[data-product-slideshow]', scope);\n      if (!show) return;\n      if (!dimRowEl || !document.contains(dimRowEl)) {\n        dimRowEl = document.createElement('div'); dimRowEl.className = 'nk-dimrow'; dimRowEl.hidden = true;\n        dimRowEl.setAttribute('aria-label', DIM_TXT.cap);\n        show.parentNode.insertBefore(dimRowEl, show.nextSibling);\n      }\n      var on = dimOn() && hero && hero.classList.contains('is-on'), list = on ? dimSizes(state.view) : [];\n      var hd = list.length ? [selOr('size') ? lab(selOr('size')).sum : '', dimLabOf(state.view), DIM_TXT.cap].filter(Boolean).join(' \u00B7 ') : '';\n      dimRowEl.innerHTML = (hd ? '<p class=\"nk-dimrow__h\">' + esc(hd) + '</p>' : '') + list.map(function (d) { return '<div class=\"nk-dimrow__t\"><b>' + esc(d.v) + '</b><span>' + esc(d.k) + '</span>' + (d.mm ? '<small>' + esc(d.mm) + '</small>' : '') + '</div>'; }).join('');\n      dimRowEl.style.setProperty('--n', String(list.length > 4 ? 3 : Math.max(list.length, 1))); // set 51: 5-6 sizes wrap in rows of 3\n      dimRowEl.hidden = !list.length;\n      dimRowEl.classList.remove('nk-dimrow--back'); // Set 63 #1: Back/angled views never get a dim table\n    }\n    var RULER = '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"2.5\" y=\"8\" width=\"19\" height=\"8\" rx=\"1.4\" transform=\"rotate(-35 12 12)\"/><path d=\"M7.2 12.6l1.3 1.8M9.9 10.7l.8 1.2M12.6 8.8l1.3 1.8M15.3 6.9l.8 1.2\" transform=\"translate(0 .6)\"/></svg>';\n    var LOUPE = '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"10.5\" cy=\"10.5\" r=\"6\"/><path d=\"M15 15l5 5M10.5 8v5M8 10.5h5\"/></svg>';\n    function dimZoom() {\n      var u = dimSrc(state.view); if (!u) return;\n      var size = selOr('size') ? lab(selOr('size')).sum : '';\n      var title = dimNoCallouts(state.view)\n        ? [size, dimLabOf(state.view)].filter(Boolean).join(' \u00B7 ')\n        : [size, dimLabOf(state.view), DIM_TXT.cap].filter(Boolean).join(' \u00B7 ');\n      var back = document.activeElement, z = document.createElement('div');\n      z.className = 'nk-dimz'; z.setAttribute('role', 'dialog'); z.setAttribute('aria-modal', 'true'); z.setAttribute('aria-label', title);\n      z.setAttribute('style', root.getAttribute('style') || '');\n      z.innerHTML = '<div class=\"nk-dimz__bar\"><b>' + esc(title) + '</b><button type=\"button\" class=\"nk-dimz__x\" aria-label=\"' + esc(DIM_TXT.close) + '\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6L6 18\"/></svg></button></div>' +\n        '<div class=\"nk-dimz__stage\"><img alt=\"' + esc(title) + '\" src=\"' + esc(bSized(u, 2400)) + '\" draggable=\"false\"></div><p class=\"nk-dimz__hint\">' + esc(dimTouch() ? DIM_TXT.hintT : DIM_TXT.hintM) + '</p>';\n      document.body.appendChild(z); document.documentElement.classList.add('nk-dimz-open');\n      var stage = $('.nk-dimz__stage', z), img = $('img', z), s = 1, x = 0, y = 0, pts = {}, g = null, lastTap = 0;\n      function clamp() {\n        s = Math.min(5, Math.max(1, s));\n        var r = stage.getBoundingClientRect(), mx = (s - 1) * r.width / 2, my = (s - 1) * r.height / 2;\n        x = Math.min(mx, Math.max(-mx, x)); y = Math.min(my, Math.max(-my, y));\n      }\n      function apply() { clamp(); img.style.transform = 'translate(' + x + 'px,' + y + 'px) scale(' + s + ')'; z.classList.toggle('is-zoomed', s > 1.01); }\n      function zoomAt(ns, cx, cy) {\n        var r = stage.getBoundingClientRect(), ox = cx - (r.left + r.width / 2), oy = cy - (r.top + r.height / 2), k = Math.min(5, Math.max(1, ns)) / s;\n        x = ox - (ox - x) * k; y = oy - (oy - y) * k; s = s * k; apply();\n      }\n      function list() { return Object.keys(pts).map(function (k) { return pts[k]; }); }\n      stage.addEventListener('pointerdown', function (e) {\n        pts[e.pointerId] = { x: e.clientX, y: e.clientY }; try { stage.setPointerCapture(e.pointerId); } catch (er) {}\n        var l = list();\n        if (l.length === 2) g = { d: Math.hypot(l[0].x - l[1].x, l[0].y - l[1].y) || 1, s: s };\n        else if (l.length === 1) {\n          g = { px: e.clientX, py: e.clientY, x: x, y: y };\n          var now = Date.now();\n          if (e.pointerType !== 'mouse' && now - lastTap < 300) { zoomAt(s > 1.01 ? 1 : 2.5, e.clientX, e.clientY); lastTap = 0; } else lastTap = now;\n        }\n      });\n      stage.addEventListener('pointermove', function (e) {\n        if (!pts[e.pointerId]) return;\n        pts[e.pointerId] = { x: e.clientX, y: e.clientY };\n        var l = list();\n        if (l.length >= 2 && g && g.d) { zoomAt(g.s * Math.hypot(l[0].x - l[1].x, l[0].y - l[1].y) / g.d, (l[0].x + l[1].x) / 2, (l[0].y + l[1].y) / 2); }\n        else if (l.length === 1 && g && g.px != null && s > 1.01) { x = g.x + e.clientX - g.px; y = g.y + e.clientY - g.py; apply(); }\n      });\n      function up(e) { delete pts[e.pointerId]; var l = list(); g = l.length === 1 ? { px: l[0].x, py: l[0].y, x: x, y: y } : null; }\n      stage.addEventListener('pointerup', up); stage.addEventListener('pointercancel', up);\n      stage.addEventListener('dblclick', function (e) { zoomAt(s > 1.01 ? 1 : 2.5, e.clientX, e.clientY); });\n      stage.addEventListener('wheel', function (e) { e.preventDefault(); zoomAt(s * Math.exp(-e.deltaY * 0.0022), e.clientX, e.clientY); }, { passive: false });\n      function close() {\n        document.removeEventListener('keydown', key, true); z.remove(); document.documentElement.classList.remove('nk-dimz-open');\n        if (back && back.focus) try { back.focus({ preventScroll: true }); } catch (er) {}\n      }\n      function key(e) {\n        if (e.key === 'Escape') { e.preventDefault(); close(); }\n        else if (e.key === 'Tab') { e.preventDefault(); $('.nk-dimz__x', z).focus(); }\n        else if (e.key === '+' || e.key === '=') zoomAt(s * 1.4, innerWidth / 2, innerHeight / 2);\n        else if (e.key === '-') zoomAt(s / 1.4, innerWidth / 2, innerHeight / 2);\n      }\n      document.addEventListener('keydown', key, true);\n      $('.nk-dimz__x', z).addEventListener('click', close);\n      $('.nk-dimz__x', z).focus();\n      z.__close = close;\n    }\n    window.matchMedia('(max-width: 768px)').addEventListener('change', function () {\n      if (state.dims && hero) paintHero();\n    });\n    function collapseMobileViews() {\n      if (!hero || !window.matchMedia('(max-width: 768px)').matches) return;\n      hero.classList.remove('is-rail-open');\n      var toggle = $('.nk-rail-toggle', hero);\n      if (toggle) {\n        toggle.setAttribute('aria-expanded', 'false');\n        var label = $('[data-lab]', toggle); if (label) label.textContent = 'Views';\n      }\n    }\n    function paintDims(rr) {\n      var on = dimDrawingOn(), di = $('[data-nk-hero-dim]', hero);\n      if ((bD || cD) && !di) {\n        di = document.createElement('img'); di.className = 'nk-hero__dim'; di.setAttribute('data-nk-hero-dim', ''); di.alt = '';\n        di.addEventListener('click', function (e) { if (dimOn()) { e.preventDefault(); e.stopPropagation(); dimZoom(); } });\n        var main = $('[data-nk-hero-img]', hero); main.parentNode.insertBefore(di, main.nextSibling);\n        var zb = document.createElement('button');\n        zb.type = 'button'; zb.className = 'nk-hero__zoom'; zb.setAttribute('data-nk-dim-zoom', ''); zb.hidden = true;\n        ['pointerdown', 'pointerup', 'mousedown', 'touchstart'].forEach(function (ev) { zb.addEventListener(ev, function (e) { e.stopPropagation(); }, { passive: true }); });\n        zb.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); dimZoom(); });\n        hero.appendChild(zb);\n      }\n      var zb2 = $('[data-nk-dim-zoom]', hero);\n      if (on) {\n        var u = bSized(dimSrc(rr.view), 1800);\n        if (di.getAttribute('src') !== u) di.setAttribute('src', u);\n        hero.classList.add('is-dims'); dimFit(); dimWatch(); // set 53: same size and spot as the photo\n        var size = selOr('size') ? lab(selOr('size')).sum : '';\n        di.alt = dimNoCallouts(rr.view)\n          ? [size, dimLabOf(rr.view)].filter(Boolean).join(' \u00B7 ')\n          : [size, dimLabOf(rr.view), DIM_TXT.cap].filter(Boolean).join(' \u00B7 ');\n        zb2.innerHTML = LOUPE + '<span>' + esc(dimTouch() ? DIM_TXT.tap : DIM_TXT.big) + '</span>';\n      }\n      if (zb2) zb2.hidden = !on;\n      hero.classList.toggle('is-dims', on);\n      var ex = $('[data-nk-rail-extra]', hero);\n      if (ex && (bD || cD)) {\n        var sw = $('[data-nk-dim-sw]', ex);\n        if (!sw) {\n          ex.innerHTML = '<button type=\"button\" class=\"nk-dimsw\" role=\"switch\" aria-checked=\"false\" data-nk-dim-sw><span class=\"nk-dimsw__row\">' + RULER + '<span class=\"nk-dimsw__tr\" aria-hidden=\"true\"><i></i></span></span><span class=\"nk-dimsw__lab\">' + esc(DIM_TXT.sw) + '</span></button>';\n          sw = $('[data-nk-dim-sw]', ex);\n          sw.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); state.dims = !state.dims; if (!state.dims && state.view === 'side') state.view = 'rear'; collapseMobileViews(); setStage('render'); });\n        }\n        sw.setAttribute('aria-checked', dimOn() ? 'true' : 'false');\n        sw.classList.toggle('on', dimOn());\n        ex.hidden = false;\n      }\n      dimRow();\n    }\n    function bPreload() {\n      if (!barrelR) return;\n      B_VIEWS.forEach(function (v) { bPick(v); });\n    }\n    /* ---------- set 42: US assembly split (test) + capacity by size/heater ----------\n       Block setting \"US assembly split (test)\": U.S. visitors only (Liquid sets split.on only when the setting is\n       on, an On-site Assembly product is picked and localization is US). Address entry is optional;\n       a confirmed U.S. street address inside an install zone (bucket white_glove) adds the\n       On-site Assembly variant to the cart with the sauna; everywhere else nothing is added and the card shows\n       delivery-only wording. Cart attributes _nootka_split_* tell the checkout extension/validation to act. */\n    var split = cfg.split || {};\n    function splitVids() {\n      var v = split.variants || {};\n      var out = [];\n      [v.barrel, v.cube, split.variant].forEach(function (id) {\n        var n = +id; if (n && out.indexOf(n) < 0) out.push(n);\n      });\n      return out;\n    }\n    function splitVariantForHere() {\n      var v = split.variants || {}, h = split.handles || {};\n      if (cubeR) return h.cube === 'cube-on-site-assembly' ? +(v.cube || 0) : 0;\n      return h.barrel === 'on-site-assembly' ? +(v.barrel || 0) : 0;\n    }\n    function splitOn() { return !!(split.on && splitVids().length && String(split.country || '').toUpperCase() === 'US'); }\n    // Set 43: tag every configurator cart while the test is on (any country, with or without an address). The checkout\n    // Set85 app decides separate assembly from explicit US CA/NV/CO + existing per-kind ZIPs; attributes stay informational.\n    function splitTag() { return !!((split.tag || splitOn()) && splitVids().length); }\n    var SPLIT_ATTRS = ['_nootka_split_test', '_nootka_split_zone', '_nootka_split_address', '_nootka_split_city', '_nootka_split_region', '_nootka_split_postal', '_nootka_split_country'];\n    var capRules = String(cfg.capacity || '').split(/\\r?\\n/).map(function (line) {\n      var eq = line.indexOf('='); if (eq < 0) return null;\n      var keys = line.slice(0, eq).split(',').map(norm).filter(Boolean), val = line.slice(eq + 1).trim();\n      return keys.length && val ? { keys: keys, val: val } : null;\n    }).filter(Boolean);\n    // \"8ft, electric = Up to 6\": every key must appear in the size + heater names.\n    function capFor(size, heat) {\n      if (!size || !heat || !capRules.length) return '';\n      var hay = norm(size + ' ' + heat);\n      for (var i = 0; i < capRules.length; i++) {\n        if (capRules[i].keys.every(function (k) { return hay.indexOf(k) > -1; })) return capRules[i].val;\n      }\n      return '';\n    }\n\n    /* ---------- money ---------- */\n    function fmt(cents) {\n      var f = String(cfg.moneyFormat || '${{amount}}').replace(/<[^>]*>/g, '');\n      var n = Math.round(Number(cents) || 0);\n      function group(num, dec, th, ds) {\n        var parts = (num / 100).toFixed(dec).split('.');\n        parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, th);\n        return parts.join(ds);\n      }\n      var whole = n % 100 === 0;\n      var out = f.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/, function (_, k) {\n        switch (k) {\n          case 'amount_no_decimals': return group(n, 0, ',', '.');\n          case 'amount_with_comma_separator': return group(n, whole ? 0 : 2, '.', ',');\n          case 'amount_no_decimals_with_comma_separator': return group(n, 0, '.', ',');\n          case 'amount_with_apostrophe_separator': return group(n, whole ? 0 : 2, \"'\", '.');\n          default: return group(n, whole ? 0 : 2, ',', '.');\n        }\n      });\n      return out.trim();\n    }\n    function tokenCents(o) { return o ? (isUSD ? o.usd : o.cad) * 100 : 0; }\n\n    /* ---------- labels ---------- */\n    var labelMap = {}, labelOrder = {};\n    String(copy.option_labels || '').split(/\\r?\\n/).forEach(function (line, i) {\n      var eq = line.indexOf('=');\n      if (eq < 0) return;\n      var key = norm(line.slice(0, eq));\n      var rest = line.slice(eq + 1).split('|');\n      labelMap[key] = { btn: rest[0].trim(), sum: (rest[1] || rest[0]).trim(), note: (rest[2] || '').trim() };\n      labelOrder[key] = i;\n    });\n    function parseOpt(raw) {\n      var m = TOKEN.exec(String(raw || ''));\n      if (!m) return { name: String(raw || '').trim(), plus: false, usd: 0, cad: 0 };\n      return { name: m[1].trim(), plus: m[2] === '+', usd: +m[3], cad: +m[4], tok: true };\n    }\n    function lab(name) { return labelMap[norm(name)] || { btn: name, sum: name, note: '' }; }\n    /* tooltip content: keyed by metafield value (no price), ctrl:touch|wifi|lte, lights, or an add-on handle */\n    var tips = {};\n    (cfg.tips || []).forEach(function (tp) { if (tp && tp.key) tips[norm(tp.key)] = tp; });\n    /* Set 45: barrel option cards + Details popups use the photoreal renders from Content > Files (by filename, via\n       cfg.barrel.map), so nothing is picked in the theme editor. pos = focal point; zoom = card detail crop. */\n    if (barrelR) (function () {\n      var m = bR.map, E = 'electric|8ft|';\n      var plan = [\n        [/^8\\s*ft/, m[E + 'front-standard-door'], '50% 52%', 1],\n        [/^10\\s*ft/, m['electric|10ft|front-standard-door'], '50% 52%', 1],\n        [/electric/, m[E + 'overhead'], '50% 22%', 1.7],\n        [/wood/, m['wood|8ft|overhead'], '50% 22%', 1.7],\n        [/no heater/, m['none|8ft|overhead'], '50% 22%', 1.7],\n        [/no roof/, m[E + 'front-no-roof'], '50% 45%', 1.15],\n        [/roof/, m[E + 'front-standard-door'], '50% 45%', 1.15],\n        [/no rear window/, m[E + 'rear-no-window'], '42% 45%', 1.5],\n        [/rear window/, m[E + 'rear-xl-window'], '42% 45%', 1.5],\n        [/glass door/, m[E + 'front-glass-door'], '45% 56%', 1.6],\n        [/standard door/, m[E + 'front-standard-door'], '45% 56%', 1.6]\n      ];\n      Object.keys(tips).forEach(function (k) {\n        if (/^ctrl:/.test(k)) return;\n        for (var i = 0; i < plan.length; i++) {\n          var r = plan[i]; if (!r[1] || !r[0].test(k)) continue;\n          var tp = tips[k];\n          tp.img = bSized(r[1], 1200); tp.cardImg = bSized(r[1], 720); tp.fit = 'cover'; tp.pos = r[2]; tp.zoom = r[3]; tp.tpos = r[3] >= 1.7 ? '50% 18%' : '50% 40%';\n          return;\n        }\n      });\n    })();\n    var addonByHandle = {};\n    (cfg.addons || []).forEach(function (a) { addonByHandle[a.handle] = a; });\n    function tipFor(key) {\n      var tp = tips[norm(key)], a = addonByHandle[key];\n      if (!tp && !(a && (a.img || a.text))) return null;\n      tp = tp || {};\n      return { eyebrow: tp.eyebrow || (a ? copy.tip_addon_eyebrow : ''), title: tp.title || '', img: tp.img || (a && a.img) || '',\n        fit: tp.img ? tp.fit : 'cover', text: tp.text || (a && a.text) || '', bullets: tp.bullets || '', layoutImg: tp.layoutImg || '' };\n    }\n    function iBtn(key, name) {\n      if (!tipFor(key)) return '';\n      if (calm) {\n        return '<button type=\"button\" class=\"nk-det\" data-nk-otip=\"' + esc(key) + '\" data-nk-otip-name=\"' + esc(name) + '\" aria-haspopup=\"dialog\" aria-expanded=\"false\" aria-label=\"' +\n          esc(((copy.tip_more_label || '') + ' ' + name).trim()) + '\">' + esc(copy.details_label || 'Details') + '</button>';\n      }\n      return '<button type=\"button\" class=\"nk-i nk-oi\" data-nk-otip=\"' + esc(key) + '\" data-nk-otip-name=\"' + esc(name) + '\" aria-haspopup=\"dialog\" aria-expanded=\"false\" aria-label=\"' +\n        esc(((copy.tip_more_label || '') + ' ' + name).trim()) + '\">i</button>';\n    }\n\n    /* ---------- index ---------- */\n    var values = {}, tokens = {};\n    ROLES.forEach(function (r) { values[r] = []; tokens[r] = {}; });\n    var byKey = {}, byHandle = {};\n    data.products.forEach(function (p) {\n      p.o = {};\n      ROLES.forEach(function (r) {\n        var o = parseOpt(p.opts[r]);\n        p.o[r] = o.name;\n        if (values[r].indexOf(o.name) < 0) values[r].push(o.name);\n        if (!tokens[r][o.name]) tokens[r][o.name] = o;\n      });\n      p.key = ROLES.map(function (r) { return p.o[r]; }).join('||');\n      p.hasConn = p.variants.length > 1 && p.variants.some(function (v) { return !!v.conn; });\n      byKey[p.key] = p; byHandle[p.handle] = p;\n    });\n    ROLES.forEach(function (r) {\n      values[r].sort(function (a, b) {\n        var ia = labelOrder[norm(a)], ib = labelOrder[norm(b)];\n        return (ia == null ? 999 : ia) - (ib == null ? 999 : ib);\n      });\n    });\n\n    var loaded = byHandle[data.loaded] || data.products[0];\n    data.products.forEach(function (p) {\n      if (p.handle === data.loaded && p.variants.some(function (v) { return String(v.id) === String(cfg.variantId); })) loaded = p;\n    });\n    function samePage(a, b) { return !!a && !!b && a.handle === b.handle; }\n    function isLoaded(p) { return samePage(p, loaded); }\n    var params = new URLSearchParams(location.search);\n    // ?view= only matters while previewing an alternate template; carry it so switching stays on that template.\n    var viewParam = params.get('view') || '';\n    var swapOn = root.getAttribute('data-nk-swap') !== 'off';\n    var CARRY_KEY = 'nk_carry_v1';\n    var carry = null;\n    try {\n      carry = JSON.parse(sessionStorage.getItem(CARRY_KEY) || 'null');\n      sessionStorage.removeItem(CARRY_KEY);\n      if (!carry || carry.h !== data.loaded || Date.now() - (carry.t || 0) > 10 * 60 * 1000) carry = null;\n    } catch (e) { carry = null; }\n    if (carry) {\n      if (carry.step && !params.has('nk_step')) params.set('nk_step', carry.step);\n      if (carry.go && !params.has('nk_go')) params.set('nk_go', '1');\n      if (carry.f) params.set('nk_focus', 'address');\n      if (carry.addons && carry.addons.length && !params.has('nk_addons')) params.set('nk_addons', carry.addons.join(','));\n    }\n    // Set 46: a market switch carries the exact variant (controller / lights), the open step's screen position and\n    // which store we switched to (for the short notice in step 4).\n    var carryV = carry && carry.v ? String(carry.v) : '', carryY = carry && typeof carry.y === 'number' ? carry.y : null,\n      carrySY = carry && typeof carry.sy === 'number' ? carry.sy : null, carryMk = carry && carry.mk ? String(carry.mk) : '',\n      carryPlan = carry && carry.plan ? +carry.plan : null;\n    function buildUrl(p, vid) {\n      var q = [];\n      if (vid && (p.hasConn || p.variants.length > 1)) q.push('variant=' + vid);\n      if (viewParam) q.push('view=' + encodeURIComponent(viewParam));\n      return p.url + (q.length ? '?' + q.join('&') : '');\n    }\n    var startVariant = (carryV && loaded.variants.filter(function (v) { return String(v.id) === carryV; })[0]) ||\n      loaded.variants.filter(function (v) { return String(v.id) === String(cfg.variantId); })[0] || loaded.variants[0];\n    var state = {\n      sel: {}, conn: startVariant.conn || 'touch', lights: !!startVariant.lights,\n      addons: {}, cur: 1, done: {}, product: loaded, variant: startVariant, shownProduct: loaded, plan: carryPlan, view: 'front', dims: false\n    };\n    ROLES.forEach(function (r) { state.sel[r] = loaded.o[r]; });\n    // Set 40: \"Start with door choices unselected\" (Cube). Skipped when the URL names a build (?variant=, e.g.\n    // \"Edit build\" from the cart). Prices, the gallery render and add to cart use the starting build meanwhile.\n    if (cfg.startUnselected && !params.has('variant') && !carry) ROLES.forEach(function (r) { state.sel[r] = null; });\n    // Photo-first on every fresh load; do not let the old tab-wide nk_built_v1\n    // flag or the section's inline pre-hero script force a render on repeat visits.\n    var LAND = null;\n    if (barrelR) {\n      var landingPre = $('[data-nk-hero-pre]', root.closest('.shopify-section') || document);\n      LAND = {\n        src: location.origin + '/cdn/shop/files/nootka-barrel-hero-porch-garden.webp?width=1800',\n        alt: 'Nootka barrel sauna glowing at dusk beside a garden path and Japanese maple',\n        pos: ''\n      };\n    }\n    state.landing = !!LAND;\n    function endLanding() { state.landing = false; }\n    function selOr(r) { return state.sel[r] != null ? state.sel[r] : (state.product || loaded).o[r]; }\n    (params.get('nk_addons') || '').split(',').forEach(function (id) { if (/^\\d+$/.test(id)) state.addons[id] = true; });\n\n    /* ---------- variant picking ---------- */\n    function findVariant(p, conn, lights) {\n      return p.variants.filter(function (v) { return v.conn === conn && !!v.lights === !!lights; })[0] || null;\n    }\n    function pickVariant(p) {\n      if (!p.hasConn) return p.variants.filter(function (v) { return v.available; })[0] || p.variants[0];\n      return [findVariant(p, state.conn, state.lights), findVariant(p, state.conn, !state.lights)]\n        .concat(p.variants.filter(function (v) { return v.conn === state.conn; }), p.variants)\n        .filter(function (v) { return v && v.available; })[0] || findVariant(p, state.conn, state.lights) || p.variants[0];\n    }\n    function nearest(role, name) {\n      var exact = byKey[ROLES.map(function (r) { return r === role ? name : selOr(r); }).join('||')];\n      if (exact && exact.available) return exact;\n      var best = null, bestScore = -1;\n      data.products.forEach(function (p) {\n        if (p.o[role] !== name) return;\n        var sc = p.available ? 100 : 0;\n        ROLES.forEach(function (r) { if (r !== role && p.o[r] === selOr(r)) sc += WEIGHT[r]; });\n        if (sc > bestScore) { bestScore = sc; best = p; }\n      });\n      return best || exact;\n    }\n\n    /* ---------- option cards ---------- */\n    var groups = {};\n    function buildGroup(role, list) {\n      var fs = $('[data-nk-group=\"' + role + '\"]', root);\n      if (!fs) return;\n      var box = $('[data-nk-options]', fs);\n      box.style.setProperty('--nk-cols', Math.min(list.length, 3));\n      box.setAttribute('style', '--nk-cols:' + Math.min(list.length, 3));\n      var asCards = cardRoles.indexOf(role) > -1;\n      if (asCards) { box.classList.add('nk-cards'); fs.classList.add('nk-fs--cards'); }\n      if (!asCards && rowRoles.indexOf(role) > -1) { box.classList.add('nk-rows'); fs.classList.add('nk-fs--rows'); }\n      var lg = $('legend', fs);\n      if (lg && !lg.hasAttribute('data-nk-name')) {\n        lg.setAttribute('data-nk-name', lg.textContent.trim());\n        if (copy.need_label) lg.insertAdjacentHTML('beforeend', '<span class=\"nk-need\">' + esc(copy.need_label) + '</span>');\n      }\n      box.innerHTML = list.map(function (item, i) {\n        if (asCards) return cardHtml(role, item);\n        return '<label class=\"nk-opt\" data-value=\"' + esc(item.value) + '\">' +\n          '<input type=\"radio\" name=\"' + esc(uid + '-' + role) + '\" value=\"' + esc(item.value) + '\">' +\n          '<span class=\"nk-opt__nm\">' + esc(item.label) + '</span><span class=\"nk-opt__pr\" data-nk-pr></span>' +\n          (item.note ? '<span class=\"nk-opt__ds\">' + esc(item.note) + '</span>' : '') +\n          iBtn(item.tip, item.label) + '</label>';\n      }).join('');\n      groups[role] = { fs: fs, box: box };\n      box.addEventListener('change', function (e) {\n        if (!e.target || e.target.type !== 'radio') return;\n        if (role === 'conn') { touch(); heroBack(); state.conn = e.target.value; update(); }\n        else choose(role, e.target.value);\n      });\n    }\n    function cardImg(tp) { return tp ? (tp.cardImg || tp.img || '') : ''; }\n    // Set 40: barrel size cards show that size's own build photo when the tooltip has no photo-card image\n    // (the spec drawing stays in Details).\n    function sizePhoto(v) {\n      var p = nearest('size', v), im = p && p.images && p.images[0];\n      return im && im.src ? sized(im.src, 720) : '';\n    }\n    function cardHtml(role, item) {\n      var tp = tips[norm(item.tip)] || null, src = tp && tp.cardImg || '';\n      var fit = 'cover';\n      if (!src && role === 'size') src = sizePhoto(item.value);\n      if (!src) { src = cardImg(tp); fit = tp && tp.fit === 'contain' ? 'contain' : 'cover'; }\n      var text = (tp && tp.cardText) || item.note || '';\n      return '<label class=\"nk-opt nk-card\" data-value=\"' + esc(item.value) + '\">' +\n        '<input type=\"radio\" name=\"' + esc(uid + '-' + role) + '\" value=\"' + esc(item.value) + '\">' +\n        (src ? '<span class=\"nk-card__im is-' + fit + '\"><img src=\"' + esc(src) + '\" alt=\"\" loading=\"lazy\" width=\"452\" height=\"566\"' + (tp && tp.pos && src === tp.cardImg ? ' style=\"object-fit:cover;object-position:' + esc(tp.pos) + ';transform-origin:' + esc(tp.pos) + ';transform:scale(' + (+tp.zoom || 1) + ')\"' : '') + '></span>' : '') +\n        '<span class=\"nk-card__bd\"><span class=\"nk-card__row\"><span class=\"nk-opt__nm\">' + esc(item.label) + '</span><span class=\"nk-opt__pr\" data-nk-pr></span></span>' +\n        (text ? '<span class=\"nk-opt__ds\">' + esc(text) + '</span>' : '') +\n        iBtn(item.tip, item.label) + '</span><span class=\"nk-card__ck\" aria-hidden=\"true\"></span></label>';\n    }\n    ROLES.forEach(function (r) {\n      buildGroup(r, values[r].map(function (v) { return { value: v, label: lab(v).btn, note: lab(v).note, tip: v }; }));\n    });\n    buildGroup('conn', [['touch', copy.ctrl_touch], ['wifi', copy.ctrl_wifi], ['lte', copy.ctrl_lte]].map(function (x) { return { value: x[0], label: x[1] || x[0], tip: 'ctrl:' + x[0] }; }));\n    // (i) buttons for the lights toggle and each add-on (slots rendered by Liquid)\n    $$('[data-nk-otip-slot]', root).forEach(function (sl) {\n      var html = iBtn(sl.getAttribute('data-nk-otip-slot'), sl.getAttribute('data-nk-otip-name') || '');\n      if (html) sl.outerHTML = html; else sl.parentNode.removeChild(sl);\n    });\n    // Set 76: move accessory Details out of the name, AFTER its description.\n    // The card's final grid row reserves its own space, including on narrow screens.\n    $$('.nk-ad .nk-det', root).forEach(function (button) {\n      var card = button.closest('.nk-ad');\n      if (card) { card.setAttribute('data-nk-details-flow', ''); card.appendChild(button); }\n    });\n    var lightsInput = $('[data-nk-lights]', root);\n    if (lightsInput) lightsInput.addEventListener('change', function () { touch(); heroBack(); state.lights = lightsInput.checked; update(); });\n\n    function choose(role, name) {\n      var p = nearest(role, name);\n      if (!p) return;\n      touch();\n      if (calm && (role === heroRole || role === badgeRole)) state.hero = true;\n      var bRole = barrelR && B_ROLES.indexOf(role) > -1;\n      if (bRole) { state.hero = true; endLanding(); }\n      heroBack();\n      // Set 40: choices still unselected stay unselected (the build behind them is priced meanwhile).\n      var unset = ROLES.filter(function (r) { return r !== role && state.sel[r] == null; });\n      ROLES.forEach(function (r) { state.sel[r] = p.o[r]; });\n      if (unset.length) { unset.forEach(function (r) { state.sel[r] = null; }); state.product = p; }\n      if (bRole && !dimOn()) { var sv = state.sel[role]; state.sel[role] = p.o[role]; state.view = bViewFor(role); state.sel[role] = sv; } // after the pick, so the view reflects the new choice\n      if (cubeR && (role === heroRole || role === badgeRole) && !dimOn()) state.view = 'front';\n      update();\n    }\n    // Set 40: any option change brings the gallery back to the shopper's render (once it has been shown).\n    function heroBack() { if (calm && (heroRole || barrelR || cubeR)) { setStage('render'); } }\n\n    // No [[USD-CAD]] token (cube variants): price difference against the cheapest choice in this group,\n    // compared on the same controller and lights.\n    function eqPrice(p) {\n      if (!p) return null;\n      var v = findVariant(p, state.variant.conn, state.variant.lights) || p.variants[0];\n      return v ? v.price : null;\n    }\n    function diffPrice(role, combo) {\n      if (!combo) return '';\n      var min = null;\n      values[role].forEach(function (val) {\n        var c = byKey[ROLES.map(function (x) { return x === role ? val : selOr(x); }).join('||')];\n        var pr = eqPrice(c); if (pr != null && (min == null || pr < min)) min = pr;\n      });\n      var mine = eqPrice(combo);\n      if (mine == null || min == null) return '';\n      var d = Math.max(0, mine - min);\n      return d === 0 ? (copy.included_label || '') : '+' + fmt(d);\n    }\n    function moneyWithCurrency(cents) { return fmt(cents) + ' ' + String(cfg.currency || data.currency || '').toUpperCase(); }\n    function paintGroups() {\n      var p = state.product;\n      ROLES.forEach(function (r) {\n        var g = groups[r]; if (!g) return;\n        g.fs.classList.toggle('nk-fs--need', state.sel[r] == null);\n        $$('.nk-opt', g.box).forEach(function (el) {\n          var v = el.getAttribute('data-value');\n          var on = state.sel[r] === v;\n          var combo = byKey[ROLES.map(function (x) { return x === r ? v : selOr(x); }).join('||')];\n          var t = tokens[r][v];\n          var price = t && t.tok ? ((t.plus ? '+' : '') + fmt(tokenCents(t))) : diffPrice(r, combo);\n          el.classList.toggle('on', on);\n          el.classList.toggle('is-off', !!combo && !combo.available);\n          $('input', el).checked = on;\n          // set 37: Cube photo cards say \"+$0\" instead of \"Included\" (block setting \"Show +$0 instead of Included\").\n          if (calm && cfg.zeroPlus && cardRoles.indexOf(r) > -1 && price && price === copy.included_label) price = '+' + fmt(0);\n          if (calm && price && (price.charAt(0) === '+' || (r === 'size' && /\\d/.test(price))) && !/\\b(?:CAD|USD)\\b/i.test(price)) price += ' ' + String(cfg.currency || data.currency || '').toUpperCase();\n          $('[data-nk-pr]', el).textContent = (combo && !combo.available) ? (copy.unavailable_label || '') : price;\n        });\n      });\n      var ctrl = $('[data-nk-controller]', root);\n      if (ctrl) ctrl.hidden = !p.hasConn;\n      if (p.hasConn && groups.conn) {\n        var base = findVariant(p, 'touch', state.lights);\n        $$('.nk-opt', groups.conn.box).forEach(function (el) {\n          var c = el.getAttribute('data-value');\n          var v = findVariant(p, c, state.lights);\n          var on = state.variant.conn === c;\n          el.hidden = !v;\n          el.classList.toggle('on', on);\n          el.classList.toggle('is-off', !!v && !v.available);\n          $('input', el).checked = on;\n          var diff = v && base ? Math.max(0, v.price - base.price) : null;\n          $('[data-nk-pr]', el).textContent = diff == null ? '' : (diff === 0 && copy.included_label ? copy.included_label : '+' + moneyWithCurrency(diff));\n        });\n        var withL = findVariant(p, state.variant.conn, true), noL = findVariant(p, state.variant.conn, false);\n        if (lightsInput) {\n          lightsInput.checked = !!state.variant.lights;\n          lightsInput.disabled = !(withL && noL);\n          var lp = $('[data-nk-lights-price]', root);\n          if (lp) lp.textContent = withL && noL ? '+' + moneyWithCurrency(Math.max(0, withL.price - noL.price)) : '';\n        }\n      }\n    }\n\n    /* ---------- money totals ---------- */\n    function addonItems() {\n      // Skip only deliberately hidden rows; all 10ft backrests are now visible.\n      return $$('[data-nk-addon]', root).filter(function (i) {\n        if (!i.checked || i.disabled) return false;\n        var row = i.closest('[data-nk-addon-row]');\n        return !(row && (row.hidden || row.classList.contains('is-size-off')));\n      });\n    }\n    function addonsTotal() { return addonItems().reduce(function (s, i) { return s + (+i.getAttribute('data-price') || 0); }, 0); }\n    function plans(v) { return (v && v.plans) || []; }\n    function depositPlan(v) {\n      return plans(v).filter(function (pl) { return pl.charge != null && pl.charge < v.price; })\n        .sort(function (a, b) { return a.charge - b.charge; })[0] || null;\n    }\n    function fullPlan(v) { return plans(v).filter(function (pl) { return pl.charge == null || pl.charge >= v.price; })[0] || null; }\n    function selectedPaymentPlan(v) {\n      var id = null;\n      if (mirrorOn()) id = state.plan;\n      else {\n        var checked = k1Slot && $('.k1-payment-option input[type=\"radio\"]:checked', k1Slot);\n        var option = checked && checked.closest('.k1-payment-option');\n        if (checked) id = +(option && option.getAttribute('data-option-id') || checked.value);\n        if (!id && form) { var input = form.querySelector('input[name=\"selling_plan\"]'); id = input && +input.value; }\n      }\n      return plans(v).find(function (plan) { return +plan.id === +id; }) || null;\n    }\n    function selectedDeposit(v) {\n      var selected = selectedPaymentPlan(v);\n      return selected && selected.charge != null && selected.charge < v.price ? selected : null;\n    }\n    function orderPaymentSummary(v, add) {\n      var selected = selectedPaymentPlan(v), dp = selectedDeposit(v);\n      var text = 'Order total: ' + moneyWithCurrency(v.price + add) + '.';\n      if (dp) return text + ' Sauna deposit' + (add ? ' + add-ons paid in full' : '') + ' due now: ' + moneyWithCurrency(dp.charge + add) + '. Remaining sauna balance: ' + moneyWithCurrency(v.price - dp.charge) + '.';\n      return selected ? text + ' Full payment due now: ' + moneyWithCurrency(v.price + add) + '.' : text;\n    }\n\n    function paintTotals() {\n      var v = state.variant, add = addonsTotal(), total = v.price + add;\n      paintOwnPay(v, add);\n      var selected = selectedPaymentPlan(v), dp = selectedDeposit(v);\n      var depTxt = dp ? fmt(dp.charge + add) : fmt(total);\n      $$('[data-nk-total]', root).forEach(function (el) { el.textContent = fmt(total); });\n      var dl = $('[data-nk-dep-line]', root);\n      if (dl) {\n        dl.innerHTML = dp ? esc(copy.deposit_line || '').replace('{deposit}', '<b>' + esc(depTxt) + '</b>') : '';\n        dl.parentNode.hidden = !dp;\n        dl.parentNode.style.display = dp ? '' : 'none';\n      }\n      var ct = $('[data-nk-cta-total]', root);\n      if (ct) ct.textContent = fmt(total) + ' ' + (cfg.currency || '');\n      if (sticky) {\n        $('[data-nk-sticky-total]', sticky).textContent = fmt(total);\n        var stickyDep = $('[data-nk-sticky-dep]', sticky);\n        stickyDep.textContent = dp ? String(copy.sticky_deposit || '').replace('{deposit}', depTxt) : '';\n        // Hide the entire currency + payment detail line, not only its text.\n        stickyDep.parentNode.hidden = !dp;\n        stickyDep.parentNode.style.display = dp ? '' : 'none';\n      }\n      paintNativePay(v, add);\n      if (state.cur === 4 && typeof syncK1Visibility === 'function') syncK1Visibility();\n    }\n\n    /* ---------- summaries & steps ---------- */\n    var rows = $$('[data-nk-step]', root);\n    function rolesIn(n) {\n      var row = rows[n - 1]; if (!row) return [];\n      return $$('[data-nk-group]', row).map(function (g) { return g.getAttribute('data-nk-group'); })\n        .filter(function (r) { return ROLES.indexOf(r) > -1 && state.sel[r]; });\n    }\n    function sumFor(n) {\n      var p = state.product;\n      if (n === 1) {\n        var parts = rolesIn(1).map(function (r) { return lab(state.sel[r]).sum; });\n        if (p.hasConn) parts.push((copy['ctrl_' + state.variant.conn] || '') + (state.variant.lights ? ' ' + (copy.lights_sum || '') : ''));\n        return parts.filter(Boolean).join(' \u00B7 ');\n      }\n      if (n === 2) return rolesIn(2).map(function (r) { return lab(state.sel[r]).sum; }).join(' \u00B7 ');\n      if (n === 3) {\n        var c = addonItems().length;\n        return c ? String(copy.addons_count || '').replace('{count}', c) : (state.done[3] ? copy.addons_none : copy.step3_todo);\n      }\n      var loc = location_ && location_.city ? String(copy.location_sum || '').replace('{city}', location_.city) : '';\n      return loc;\n    }\n    /* ---------- set 40: required choices still missing (only with \"Start with door choices unselected\") ---------- */\n    function missingIn(n) {\n      var row = rows[n - 1]; if (!row) return null;\n      var fs = $$('[data-nk-group]', row).filter(function (g) { var r = g.getAttribute('data-nk-group'); return ROLES.indexOf(r) > -1 && state.sel[r] == null; })[0];\n      return fs ? { n: n, role: fs.getAttribute('data-nk-group'), fs: fs } : null;\n    }\n    function firstMissing() {\n      for (var n = 1; n <= rows.length; n++) { var m = missingIn(n); if (m) return m; }\n      if (needAddr()) return { n: 4, role: 'address', fs: addr || rows[3], addr: true };\n      return null;\n    }\n    // Set 76: precision still controls delivery/assembly promises, not permission to check out.\n    function hasValidAddr() {\n      return !!(location_ && location_.precision === 'address' && location_.lat != null && location_.lng != null);\n    }\n    // Set 76: address is optional here; Shopify checkout collects the final shipping address.\n    function needAddr() { return false; }\n    function streetNeedMsg() {\n      try { if (window.NootkaLocation && NootkaLocation.streetNeedMessage) return NootkaLocation.streetNeedMessage(); } catch (e) {}\n      return 'Add your street address for an accurate delivery quote. You can continue to checkout without it.';\n    }\n    function chooseText(m) {\n      if (m.addr) return streetNeedMsg() || copy.address_label || '';\n      var lg = $('legend', m.fs), name = lg ? (lg.getAttribute('data-nk-name') || lg.textContent) : m.role;\n      return String(copy.sticky_choose_label || copy.tip_choose_label || '').replace('{option}', String(name).trim().toLowerCase());\n    }\n    // Opens the step, scrolls the group into view and pulses it for ~2 s.\n    function guide(m) {\n      if (m.addr) {\n        var w4 = state.cur === 4 ? 0 : 380;\n        if (state.cur !== 4) open(4, false);\n        setTimeout(function () {\n          focusAddress();\n          var f = fieldBox && !fieldBox.hidden ? fieldBox : (addr || rows[3]);\n          f.classList.remove('nk-pulse'); void f.offsetWidth; f.classList.add('nk-pulse');\n          clearTimeout(f.__pt); f.__pt = setTimeout(function () { f.classList.remove('nk-pulse'); }, 2100);\n        }, w4);\n        return;\n      }\n      var wait = state.cur === m.n ? 0 : 380;\n      if (state.cur !== m.n) open(m.n, false);\n      setTimeout(function () {\n        var y = m.fs.getBoundingClientRect().top + window.pageYOffset - contentOffset() - 18;\n        try { SE.scrollTo({ top: Math.max(0, y), behavior: mqCalmMotion.matches ? 'auto' : 'smooth' }); } catch (e) { SE.scrollTop = Math.max(0, y); }\n        m.fs.classList.remove('nk-pulse'); void m.fs.offsetWidth; m.fs.classList.add('nk-pulse');\n        clearTimeout(m.fs.__pt); m.fs.__pt = setTimeout(function () { m.fs.classList.remove('nk-pulse'); }, 2100);\n        if (!m.fs.hasAttribute('tabindex')) m.fs.setAttribute('tabindex', '-1');\n        try { m.fs.focus({ preventScroll: true }); } catch (e) {}\n      }, wait);\n    }\n    function todoFor(n, s) {\n      if (n < 3 && copy['step' + n + '_todo']) return copy['step' + n + '_todo'];\n      if (n < 3 && s) return s;\n      return s;\n    }\n    function paintSteps() {\n      rows.forEach(function (row) {\n        var n = +row.getAttribute('data-nk-step');\n        var isCur = state.cur === n, isDone = !!state.done[n] && !isCur && !missingIn(n);\n        row.classList.toggle('cur', isCur);\n        row.classList.toggle('done', isDone);\n        var body = $('[data-nk-body]', row); if (body) body.hidden = !isCur;\n        var btn = $('[data-nk-toggle]', row); if (btn) btn.setAttribute('aria-expanded', isCur ? 'true' : 'false');\n        var dot = $('[data-nk-dot]', row); if (dot) dot.textContent = isDone ? '\u2713' : String(n);\n        var s = sumFor(n);\n        if (!isDone && !isCur) s = todoFor(n, s);\n        var sum = $('[data-nk-sum]', row); if (sum) sum.textContent = s;\n      });\n      if (peek) peek.hidden = !!(location_ && location_.city);\n      paintSplitReq();\n      paintSticky();\n    }\n    function paintSplitReq() {\n      if (!atc) return;\n      var need = needAddr();\n      atc.classList.toggle('is-locked', need);\n      atc.setAttribute('aria-disabled', need ? 'true' : 'false');\n      if (need) atc.setAttribute('title', streetNeedMsg()); else atc.removeAttribute('title');\n      var rq = $('[data-nk-split-req]', root);\n      if (!rq && placeInput && addr) {\n        rq = document.createElement('p');\n        rq.className = 'nk-split-req'; rq.setAttribute('data-nk-split-req', '');\n        rq.setAttribute('role', 'status'); rq.setAttribute('aria-live', 'polite');\n        var ctaWrap = atc.parentNode || root;\n        ctaWrap.insertBefore(rq, atc.nextSibling);\n      }\n      if (rq) {\n        rq.hidden = hasValidAddr();\n        rq.textContent = 'Add your street address for an accurate delivery quote. You can continue to checkout without it.';\n      }\n    }\n    /* ---------- set 37: step transitions ----------\n       Desktop: the step being left rolls up while the next one rolls open, and the page keeps its scroll\n       position, so the product images stay in view for every step. Mobile: the opened step's title is\n       scrolled into view smoothly (below any sticky header). prefers-reduced-motion: no animation. */\n    var mqDesk = window.matchMedia ? window.matchMedia('(min-width: 768px)') : { matches: true };\n    var mqCalmMotion = window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : { matches: false };\n    var SE = document.scrollingElement || document.documentElement;\n    function headerOffset() {\n      var off = 0;\n      $$('header, [data-header-sticky], .shopify-section-header, .shopify-section-group-header-group').forEach(function (h) {\n        var cs = getComputedStyle(h);\n        if (cs.position !== 'fixed' && cs.position !== 'sticky') return;\n        var r = h.getBoundingClientRect();\n        if (r.top <= 1 && r.bottom > off && r.height < window.innerHeight / 2) off = r.bottom;\n      });\n      return off;\n    }\n    function contentOffset() {\n      var off = headerOffset();\n      if (!window.matchMedia('(max-width: 767px)').matches) return off;\n      var media = $('.product__media__wrapper', root.closest('.shopify-section') || document);\n      if (!media) return off;\n      var cs = getComputedStyle(media), r = media.getBoundingClientRect();\n      if (cs.position !== 'sticky' && cs.position !== '-webkit-sticky') return off;\n      var top = parseFloat(cs.top); if (!isFinite(top)) top = off;\n      // Anticipate the compact pinned slot when scrolling down from the expanded gallery.\n      return r.top <= top + 2 ? Math.max(off, r.bottom) : Math.max(off, top + Math.min(innerHeight * 0.26, 200));\n    }\n    function rollBody(body, from, to, done) {\n      body.style.overflow = 'hidden';\n      body.style.height = from + 'px';\n      body.style.transition = 'none';\n      void body.offsetHeight;\n      body.style.transition = 'height .34s cubic-bezier(.4,0,.2,1)';\n      body.style.height = to + 'px';\n      var fin = false;\n      function end() {\n        if (fin) return; fin = true;\n        body.style.overflow = body.style.height = body.style.transition = '';\n        if (done) done();\n      }\n      body.addEventListener('transitionend', function te(e) { if (e.target === body) { body.removeEventListener('transitionend', te); end(); } });\n      setTimeout(end, 480);\n    }\n    function moveTo(row) {\n      function go(beh) {\n        var d = row.getBoundingClientRect().top - contentOffset() - 12;\n        if (Math.abs(d) < 4) return;\n        var y = Math.max(0, d + window.pageYOffset);\n        try { SE.scrollTo({ top: y, behavior: beh }); } catch (e) { SE.scrollTop = y; }\n      }\n      var beh = mqCalmMotion.matches ? 'auto' : 'smooth';\n      // Wait for the closed step to settle (its step dot eases back for .2s), then glide; correct once more if\n      // late layout (images, summaries) moved it.\n      setTimeout(function () { go(beh); setTimeout(function () { go(beh); }, 750); }, 220);\n    }\n    function open(n, focus) {\n      if (n === 4 && needsReload()) { navigate(false, 4, focus === 'address'); return; }\n      var prevN = state.cur, prevRow = prevN ? rows[prevN - 1] : null;\n      var prevBody = prevRow && prevN !== n ? $('[data-nk-body]', prevRow) : null;\n      var prevH = prevBody && !prevBody.hidden ? prevBody.offsetHeight : 0;\n      var y0 = window.pageYOffset;\n      for (var i = 1; i < n; i++) state.done[i] = true;\n      state.cur = n;\n      if (calm && (heroRole ? rolesIn(n).indexOf(heroRole) > -1 : barrelR && rolesIn(n).length > 0) && !state.hero) { state.hero = true; paintHero(); }\n      paintSteps();\n      if (n === 4) syncK1Visibility();\n      var row = rows[n - 1];\n      var desk = mqDesk.matches;\n      if (desk) {\n        // Keep the page where it is; scroll anchoring would otherwise chase the collapsing step.\n        var rolling = !mqCalmMotion.matches && prevBody && prevH;\n        if (rolling) {\n          var nb = $('[data-nk-body]', row), nh = nb ? nb.offsetHeight : 0;\n          root.classList.add('nk-rolling');\n          SE.style.overflowAnchor = 'none';\n          prevBody.hidden = false;\n          rollBody(prevBody, prevH, 0, function () { prevBody.hidden = state.cur !== prevN; root.classList.remove('nk-rolling'); SE.style.overflowAnchor = ''; });\n          if (nb && nh) rollBody(nb, 0, nh);\n        }\n        if (Math.abs(window.pageYOffset - y0) > 1) SE.scrollTop = y0;\n        if (focus === 'address') { focusAddress(); return; }\n        var btn0 = $('[data-nk-toggle]', row); if (focus && btn0) btn0.focus({ preventScroll: true });\n        // Only nudge when the opened step's title would end up off screen (e.g. after a long scroll inside a step).\n        var top = row.getBoundingClientRect().top;\n        var after = rolling && (prevRow.compareDocumentPosition(row) & 4) ? top - prevH : top;\n        if (after < contentOffset() + 8 || after > window.innerHeight * 0.75) {\n          var yT = after + window.pageYOffset - contentOffset() - 24;\n          try { SE.scrollTo({ top: Math.max(0, yT), behavior: mqCalmMotion.matches ? 'auto' : 'smooth' }); } catch (e) { SE.scrollTop = Math.max(0, yT); }\n        }\n        return;\n      }\n      if (focus === 'address') { focusAddress(); return; }\n      var btn = $('[data-nk-toggle]', row);\n      if (btn && focus) btn.focus({ preventScroll: true });\n      moveTo(row);\n    }\n    rows.forEach(function (row) {\n      var n = +row.getAttribute('data-nk-step');\n      // The whole header row is the toggle button's hit area (CSS ::after); \"Edit\" is only a visual cue.\n      var t = $('[data-nk-toggle]', row), nx = $('[data-nk-next]', row);\n      if (t) t.addEventListener('click', function () {\n        if (state.cur === n) {\n          var b0 = $('[data-nk-body]', row), h0 = b0 && !b0.hidden ? b0.offsetHeight : 0;\n          state.done[n] = true; state.cur = 0; paintSteps();\n          if (mqDesk.matches && !mqCalmMotion.matches && b0 && h0) { b0.hidden = false; rollBody(b0, h0, 0, function () { b0.hidden = state.cur !== n; }); }\n        } else open(n, false);\n      });\n      if (nx) nx.addEventListener('click', function () {\n        var m = firstMissing(); if (m && m.n <= n) { guide(m); return; }\n        state.done[n] = true; open(n + 1, true);\n      });\n    });\n    $$('[data-nk-addon]', root).forEach(function (i) {\n      i.addEventListener('change', function () { touch(); heroBack(); i.closest('.nk-ad').classList.toggle('on', i.checked); paintTotals(); paintSteps(); paintHero(); });\n      var handle = i.getAttribute('data-handle') || '';\n      var carriedHandles = (carry && carry.addonHandles) || (params.get('nk_addon_handles') || '').split(',');\n      if (state.addons[i.value] || carriedHandles.indexOf(handle) !== -1) { i.checked = true; i.closest('.nk-ad').classList.add('on'); }\n      if (LENGTH_HANDLES[handle]) {\n        i.addEventListener('change', function () { i.setAttribute('data-nk-length-touched', '1'); syncSizedAddons(); });\n        window.NootkaLengthVariants.load(handle, true).then(function (product) {\n          if (!i.hasAttribute('data-nk-length-touched') && product.variants.some(function (v) { return state.addons[String(v.id)]; })) {\n            i.checked = true; i.closest('.nk-ad').classList.add('on');\n          }\n          syncSizedAddons(); paintTotals(); paintSteps();\n        }).catch(function () {});\n      }\n    });\n    syncSizedAddons();\n\n    /* ---------- calm: first choice hides \"Starting from\" ---------- */\n    function touch() {\n      if (!state.ready || state.touched) return;\n      state.touched = true;\n      var f = $('[data-nk-from]', root); if (f && calm) f.hidden = true;\n      root.classList.add('is-touched');\n    }\n\n    /* ---------- calm: gallery preview follows the choice ---------- */\n    var hero = null;\n    function heroHost() {\n      var scope = root.closest('.shopify-section') || document;\n      var show = $('[data-product-slideshow]', scope);\n      if (!show) return null;\n      return $('.flickity-viewport', show) || show;\n    }\n    // Set 53: the server-drawn hero waits beside the slideshow until Flickity adds .flickity-viewport, then moves in.\n    // Set 56: keep the hero a direct child of the viewport (not a Flickity cell). Flickity was reparenting it into\n    // .flickity-slider; combined with set 55's transform:none override that left the Cube render half off-frame.\n    function heroDock(scope) {\n      var show = $('[data-product-slideshow]', scope);\n      function pin() {\n        if (!hero) return;\n        hero.classList.remove('nk-hero--pre', 'flickity-cell');\n        // Drop Flickity's inline cell transform/opacity so CSS can place the overlay.\n        hero.style.transform = '';\n        hero.style.opacity = '';\n        hero.style.position = 'absolute';\n        hero.style.left = '0';\n        hero.style.top = '0';\n        hero.style.right = '0';\n        hero.style.bottom = '0';\n        hero.style.width = '100%';\n        hero.style.height = '100%';\n      }\n      function go() {\n        var vp = show && $('.flickity-viewport', show);\n        if (!vp) return false;\n        if (getComputedStyle(vp).position === 'static') vp.style.position = 'relative';\n        if (hero.parentNode !== vp) vp.appendChild(hero);\n        pin();\n        hero.__dock = false;\n        if (dimOn()) dimFit();\n        return true;\n      }\n      if (go()) {\n        // Flickity may re-collect cells after init; pull the hero back onto the viewport.\n        if (!hero.__keep && typeof MutationObserver !== 'undefined' && show) {\n          hero.__keep = true;\n          var keep = new MutationObserver(function () {\n            if (!hero || !hero.classList.contains('is-on')) return;\n            var vp = $('.flickity-viewport', show);\n            if (vp && hero.parentNode !== vp) { vp.appendChild(hero); pin(); if (dimOn()) dimFit(); }\n            else if (hero.classList.contains('flickity-cell') || (hero.parentNode && hero.parentNode.classList && hero.parentNode.classList.contains('flickity-slider'))) {\n              if (vp) { vp.appendChild(hero); pin(); if (dimOn()) dimFit(); }\n            }\n          });\n          keep.observe(show, { childList: true, subtree: true, attributes: true, attributeFilter: ['class', 'style'] });\n          setTimeout(function () { keep.disconnect(); hero.__keep = false; }, 20000);\n        }\n        return;\n      }\n      hero.__dock = true;\n      if (!show || typeof MutationObserver === 'undefined') return;\n      var mo = new MutationObserver(function () { if (go()) mo.disconnect(); });\n      mo.observe(show, { childList: true });\n      setTimeout(function () { mo.disconnect(); }, 15000);\n    }\n    // Set 65: one source of truth for gallery stage.\n    //   'landing' \u2014 lifestyle landing hero (no rail)\n    //   'render'  \u2014 configured build hero + view rail + Dimensions\n    //   'photo'   \u2014 Flickity lifestyle/product photo + Back pill\n    // Rail CSS already keys off .nk-hero.is-on.is-render:not(.is-landing); we keep\n    // state.nkStage in sync via showYours / option changes / thumb clicks / Flickity settle.\n    var nkStage = state.landing ? 'landing' : (state.hero ? 'render' : 'photo');\n    var nkStageBound = false;\n    function setGalleryDraggable(on) {\n      var flk = flickityApi();\n      if (!flk) return;\n      try {\n        if (flk.options) flk.options.draggable = !!on;\n        if (typeof flk.updateDraggable === 'function') flk.updateDraggable();\n        else if (typeof flk.unbindDrag === 'function' && typeof flk.bindDrag === 'function') {\n          if (on) flk.bindDrag(); else flk.unbindDrag();\n        }\n      } catch (e) {}\n    }\n    function ensureSelectedPhotoPainted() {\n      var scope = root.closest('.shopify-section') || document;\n      var sel = $('[data-media-slide].is-selected', scope) || $('[data-media-slide][data-type=\"image\"]', scope);\n      if (!sel || sel.getAttribute('data-type') !== 'image') return;\n      var el = $('img', sel);\n      if (!el) return;\n      var src = el.getAttribute('src') || '';\n      var broken = !!el.getAttribute('data-nk-image-load-error') || (el.complete && el.naturalWidth === 0);\n      if (src && !broken) {\n        try { el.loading = 'eager'; } catch (e) {}\n        return;\n      }\n      // Prefer the slide's own intended URL; never wipe a good src with an empty stage.\n      var want = el.getAttribute('data-src') || el.getAttribute('data-nk-src') || '';\n      if (!want) {\n        var imgs = nkGalleryImages(state.product || state.shownProduct || { images: [] });\n        var slides = $$('[data-media-slide][data-type=\"image\"]', scope).filter(function (s) { return scope.contains(s); });\n        var idx = Math.max(0, slides.indexOf(sel));\n        var im = imgs[idx] || imgs[0];\n        if (im && im.src) {\n          var max = im.w || 2000;\n          var list = WIDTHS.filter(function (w) { return w < max; }).concat([Math.min(max, 3000)]);\n          // Commit immediately for the visible lifestyle cell \u2014 async stageImage was leaving a tan blank for ~1\u20132s.\n          el.setAttribute('src', sized(im.src, Math.min(max, 2000)));\n          el.setAttribute('srcset', list.map(function (w) { return sized(im.src, w) + ' ' + w + 'w'; }).join(', '));\n          el.removeAttribute('data-nk-image-load-error');\n          try { el.loading = 'eager'; } catch (e2) {}\n          return;\n        }\n      }\n      if (want) {\n        el.setAttribute('src', want);\n        el.removeAttribute('data-nk-image-load-error');\n        try { el.loading = 'eager'; } catch (e3) {}\n      }\n    }\n    function syncStageChrome() {\n      var onRender = nkStage === 'render';\n      var onLanding = nkStage === 'landing';\n      var onPhoto = nkStage === 'photo';\n      if (hero) {\n        if (onRender || onLanding) {\n          // paintHero / paintBarrelHero owns is-on, is-render, is-landing classes.\n        } else {\n          hero.classList.remove('is-on');\n        }\n      }\n      state.hero = onRender || onLanding;\n      if (onPhoto) ensureSelectedPhotoPainted();\n      setGalleryDraggable(onPhoto);\n      paintYours();\n      dimRow();\n      if (typeof syncSwipeCue === 'function') syncSwipeCue();\n    }\n    function setStage(mode, opts) {\n      opts = opts || {};\n      if (mode !== 'landing' && mode !== 'render' && mode !== 'photo') return;\n      var prev = nkStage;\n      nkStage = mode;\n      if (mode === 'landing') {\n        state.landing = true;\n        state.hero = true;\n        if (typeof paintHero === 'function') paintHero();\n      } else if (mode === 'render') {\n        endLanding();\n        state.hero = true;\n        if (opts.view) state.view = opts.view;\n        if (typeof paintHero === 'function') paintHero();\n      } else {\n        endLanding();\n        state.hero = false;\n        if (hero) hero.classList.remove('is-on');\n        // Do NOT force Flickity to index 0 \u2014 that blanked the lifestyle the shopper just opened.\n        syncStageChrome();\n      }\n      if (prev !== mode && mode === 'photo') ensureSelectedPhotoPainted();\n    }\n    function hideHero(opts) {\n      // Set 65: hiding the hero means entering photo stage (lifestyle), not a forced slide jump.\n      opts = opts || {};\n      setStage('photo', opts);\n    }\n    function onGalleryPhotoClick(e) {\n      var scope = root.closest('.shopify-section') || document;\n      var t = e.target && e.target.closest && e.target.closest('[data-slideshow-thumbnail], .flickity-button, .flickity-page-dots, .product__thumb, [data-media-select]');\n      if (!t) return;\n      // Explicitly dismiss the overlay even if Flickity already has this photo selected\n      // and emits no change/settle event (common for the first photo after configuring).\n      setStage('photo');\n      var thumb = t.closest('[data-slideshow-thumbnail], [data-media-select], .product__thumb');\n      var id = thumb && thumb.getAttribute('data-media-select');\n      var flk = flickityApi();\n      if (id && flk && typeof flk.selectCell === 'function') {\n        // Match actual media IDs, not thumbnail positions: hidden cells and the hero\n        // overlay must never shift a photo thumbnail onto a different gallery cell.\n        var slide = $$('[data-media-slide]', scope).filter(function (el) {\n          return el.getAttribute('data-media-id') === id;\n        })[0];\n        if (slide) flk.selectCell(slide, false, true);\n      }\n      ensureSelectedPhotoPainted();\n      // Let Pipeline retain native thumbnail selection, focus and accessibility.\n    }\n    // Set 75: measure the real layout viewport (not 100vw, which includes scrollbars).\n    // Break out just the slideshow, leaving the sticky column and dimensions table in flow.\n    function initMobileFullbleed() {\n      var scope = root.closest('.shopify-section') || document;\n      var show = $('[data-product-slideshow]', scope);\n      var column = show && show.closest('.product__media__wrapper');\n      var host = show && show.parentNode;\n      if (!show || !column || !host) return;\n      column.setAttribute('data-nk-mobile-gallery', '');\n      host.setAttribute('data-nk-mobile-gallery-host', '');\n      var last = '', pending = false;\n      function measure() {\n        pending = false;\n        var mobile = window.matchMedia('(max-width: 767px)').matches;\n        if (!mobile) {\n          host.style.removeProperty('--nk-gallery-viewport');\n          host.style.removeProperty('--nk-gallery-inset');\n          last = '';\n          return;\n        }\n        var cs = getComputedStyle(host);\n        var inset = host.getBoundingClientRect().left + (host.clientLeft || 0) + (parseFloat(cs.paddingLeft) || 0);\n        var width = document.documentElement.clientWidth;\n        if (!width || !isFinite(inset)) return;\n        var key = width + '|' + inset;\n        if (key === last) return;\n        last = key;\n        host.style.setProperty('--nk-gallery-viewport', width + 'px');\n        host.style.setProperty('--nk-gallery-inset', inset + 'px');\n        // Pipeline cells must be remeasured after their container widens.\n        var flk = flickityApi();\n        if (flk && typeof flk.resize === 'function') flk.resize();\n      }\n      function queueMeasure() {\n        if (pending) return;\n        pending = true;\n        window.requestAnimationFrame(measure);\n      }\n      measure();\n      window.addEventListener('resize', queueMeasure, { passive: true });\n      if (window.ResizeObserver) {\n        var observer = new window.ResizeObserver(queueMeasure);\n        observer.observe(host);\n      }\n    }\n    function bindStageToFlickity() {\n      if (nkStageBound) return;\n      var scope = root.closest('.shopify-section') || document;\n      var show = $('[data-product-slideshow], .product__grid--slides', scope);\n      if (!show) return;\n      nkStageBound = true;\n      // Ignore Flickity's init settle/change (same idea as the swipe-cue arm).\n      var stageArmAt = Date.now() + 900;\n      function onGalleryUser() {\n        if (Date.now() < stageArmAt) return;\n        // Render/landing overlay owns the stage \u2014 a background Flickity tick must not steal it.\n        if ((nkStage === 'render' || nkStage === 'landing') && hero && hero.classList.contains('is-on')) return;\n        setStage('photo');\n      }\n      ['change.flickity', 'settle.flickity'].forEach(function (ev) {\n        show.addEventListener(ev, onGalleryUser);\n      });\n      show.addEventListener('settle', onGalleryUser);\n      show.addEventListener('change', onGalleryUser);\n    }\n\n    // Set 40: the exterior render for side \u00D7 door type (Cube \"Render\" pickers); empty pickers fall back to the option photo.\n    function renderFor(side, door) { var r = renders[norm(side) + '|' + norm(door)]; return r && r.hero ? r : null; }\n    function heroRender() { if (barrelR) return bPick(state.view); if (cubeR) return cPick(state.view || 'front'); return heroRole && badgeRole ? renderFor(selOr(heroRole), selOr(badgeRole)) : null; }\n    var backBtn = null;\n    // Set 61: keep the existing photo until its replacement has loaded and decoded.\n    // Request keys prevent a slow older selection overwriting the newest build.\n    function stageImage(img, src, srcset) {\n      if (!img || !src) return;\n      var key = src + '|' + (srcset || '');\n      img.__nkImageWanted = key;\n      if (img.getAttribute('src') === src && (img.getAttribute('srcset') || '') === (srcset || '')) return;\n      function commit() {\n        if (img.__nkImageWanted !== key) return;\n        if (srcset) img.setAttribute('srcset', srcset); else img.removeAttribute('srcset');\n        img.setAttribute('src', src);\n        img.removeAttribute('data-nk-image-load-error');\n      }\n      img.setAttribute('loading', 'eager'); img.setAttribute('decoding', 'async');\n      if (!img.getAttribute('src')) { commit(); return; }\n      var next = new Image();\n      next.onload = function () {\n        var decoded = next.decode ? next.decode().catch(function () {}) : Promise.resolve();\n        decoded.then(commit);\n      };\n      next.onerror = function () { if (img.__nkImageWanted === key) img.setAttribute('data-nk-image-load-error', src); };\n      if (srcset) { next.sizes = img.getAttribute('sizes') || '100vw'; next.srcset = srcset; }\n      next.src = src;\n    }\n    function bgUrl(u) { return u ? 'url(\"' + String(u).replace(/\"/g, '%22') + '\")' : ''; }\n    function heroThumb() {\n      // Set 44: the barrel Yours thumb always shows the front of the shopper's build.\n      if (barrelR) { var fr = bPick('front'); return fr ? fr.card : ''; }\n      var rr = heroRender(); if (rr) return rr.card || rr.hero;\n      var tp = tips[norm(selOr(heroRole) || '')]; return tp ? (tp.cardImg || tp.img || '') : '';\n    }\n    function showYours() { setStage('render'); }\n    function addYours(scope, host) {\n      // Set 49: no gallery thumbnail any more, only the back chip on the main image.\n      if (!backBtn) {\n        backBtn = document.createElement('button');\n        backBtn.type = 'button';\n        backBtn.className = 'nk-back'; backBtn.hidden = true;\n        backBtn.setAttribute('style', root.getAttribute('style') || '');\n        backBtn.innerHTML = '<i aria-hidden=\"true\"></i><span class=\"nk-back__l\">' + esc(copy.back_label || '') + '</span><span class=\"nk-back__s\">' + esc(copy.back_label_short || copy.back_label || '') + '</span>' +\n          '<svg class=\"nk-back__chev\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9.5 6l6 6-6 6\"/></svg>';\n        ['pointerdown', 'mousedown', 'touchstart'].forEach(function (ev) { backBtn.addEventListener(ev, function (e) { e.stopPropagation(); }, { passive: true }); });\n        backBtn.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); showYours(); });\n        host.appendChild(backBtn);\n      }\n    }\n    function paintYours() {\n      if (!hero) return;\n      var on = hero.classList.contains('is-on'), th = heroThumb();\n      // Set 49: while the build is on the main image, no photo thumbnail is marked as current.\n      var thumbs = $('[data-product-thumbs]', root.closest('.shopify-section') || document);\n      if (thumbs) thumbs.classList.toggle('nk-build-on', on);\n      // Set 65: pill on every lifestyle/photo stage after the shopper has seen a build/landing.\n      var photo = (typeof nkStage !== 'undefined' ? nkStage === 'photo' : (!on && state.heroSeen));\n      if (backBtn) {\n        backBtn.hidden = !photo || !state.heroSeen;\n        $('i', backBtn).style.backgroundImage = bgUrl(th);\n      }\n      if (on) setGalleryDraggable(false);\n      else if (photo) setGalleryDraggable(true);\n      if (typeof syncSwipeCue === 'function') syncSwipeCue();\n    }\n    function paintHero() {\n      if (!calm || !(heroRole || barrelR || cubeR)) return;\n      if (!state.hero) {\n        if (hero) hero.classList.remove('is-on');\n        else {\n          var scope0 = root.closest('.shopify-section') || document;\n          $$('.nk-hero--pre.is-on, [data-nk-hero-pre].is-on', scope0).forEach(function (el) { el.classList.remove('is-on'); });\n        }\n        paintYours();\n        if (typeof syncSwipeCue === 'function') syncSwipeCue();\n        return;\n      }\n      var rr = heroRender();\n      var tp = heroRole ? tips[norm(selOr(heroRole) || '')] : null;\n      var src = rr ? rr.hero : (tp && (tp.heroImg || tp.img));\n      var host = heroHost();\n      if (!src || !host) return;\n      var scope = root.closest('.shopify-section') || document;\n      if (!hero || !document.contains(hero) || (!host.contains(hero) && !hero.__dock)) {\n        // Set 53: sections/product.liquid draws this same hero (image, rail, tag) server-side so the first paint already\n        // shows it. Take it over instead of building a second one; it moves into the slideshow viewport once Flickity\n        // has made it (until then it sits on top of the slideshow at the same size).\n        // Set 56: if Flickity already stole an existing hero into .flickity-slider, re-dock it \u2014 do not create a second.\n        if (hero && document.contains(hero) && !host.contains(hero)) {\n          heroDock(scope);\n        } else {\n          var pre = !hero && barrelR ? $('[data-nk-hero-pre]', scope) : null;\n          if (pre) {\n            hero = pre; hero.removeAttribute('data-nk-hero-pre');\n            var preRail = $('[data-nk-pre-rail]', hero); if (preRail) preRail.parentNode.removeChild(preRail);\n            heroDock(scope);\n          } else {\n            hero = document.createElement('div');\n            hero.className = 'nk-hero';\n            hero.setAttribute('style', root.getAttribute('style') || '');\n            hero.innerHTML = '<img alt=\"\" data-nk-hero-img><span class=\"nk-hero__tag\" data-nk-hero-tag><i data-nk-hero-th></i><b data-nk-hero-nm></b></span><span class=\"nk-hero__cap\" data-nk-hero-cap></span>';\n            // Set 56: dock Cube (and any non-pre) hero onto the viewport the same way as barrel \u2014 Flickity\n            // otherwise promotes it into .flickity-slider as a cell (set 55 transform:none split).\n            if (getComputedStyle(host).position === 'static') host.style.position = 'relative';\n            host.appendChild(hero);\n            heroDock(scope);\n          }\n          // Set 74: every photo thumbnail opens its own original photo, including #1.\n          // The Back to your sauna pill is the separate path back to the render.\n          scope.addEventListener('click', onGalleryPhotoClick, true);\n          // Set 65: drag/swipe on the render must NOT dismiss it or hide the rail.\n          // Only stop the gesture from driving Flickity under the overlay.\n          ['pointerdown', 'pointermove', 'pointerup', 'touchstart', 'touchmove', 'mousedown', 'mousemove', 'mouseup'].forEach(function (ev) {\n            hero.addEventListener(ev, function (e) { e.stopPropagation(); }, { capture: true, passive: true });\n          });\n          bindStageToFlickity();\n        }\n      }\n      addYours(scope, host);\n      if (barrelR) { paintBarrelHero(rr); return; }\n      if (cubeR) { paintCubeHero(rr); return; }\n      hero.classList.toggle('is-render', !!rr);\n      var img = $('[data-nk-hero-img]', hero);\n      stageImage(img, src);\n      var sideSum = state.sel[heroRole] ? (lab(state.sel[heroRole]).sum || '') : '', doorSum = badgeRole && state.sel[badgeRole] ? (lab(state.sel[badgeRole]).sum || '') : '';\n      img.alt = sideSum + (doorSum ? ', ' + doorSum : '');\n      var tag = $('[data-nk-hero-tag]', hero), bt = badgeRole && tips[norm(selOr(badgeRole) || '')];\n      var th = $('[data-nk-hero-th]', hero);\n      if (rr) {\n        $('[data-nk-hero-nm]', hero).textContent = [copy.back_label_short, sideSum, doorSum].filter(Boolean).join(' \u00B7 ');\n        th.hidden = true; th.style.backgroundImage = '';\n        tag.hidden = false;\n        $('[data-nk-hero-cap]', hero).textContent = '';\n      } else {\n        if (badgeRole && selOr(badgeRole)) {\n          $('[data-nk-hero-nm]', hero).textContent = doorSum;\n          var ts = cardImg(bt);\n          th.style.backgroundImage = bgUrl(ts);\n          th.hidden = !ts;\n          tag.hidden = false;\n        } else tag.hidden = true;\n        $('[data-nk-hero-cap]', hero).textContent = sideSum;\n      }\n      hero.classList.add('is-on');\n      state.heroSeen = true;\n      paintYours();\n    }\n\n    // Set 55: Cube hero with Front / Side / Above / Cutaway rail + Dimensions (same pattern as the barrel).\n    function paintCubeHero(rr) {\n      // Set 57: coerce a stale \"side\" view (saved rail / prior session) back to Front.\n      if (cubeR) state.view = cNormView(state.view);\n      if (!rr) rr = cPick(state.view || 'front') || { hero: '', view: state.view || 'front', sq: false };\n      var img = $('[data-nk-hero-img]', hero);\n      nkStage = 'render';\n      hero.classList.add('is-render', 'is-cube', 'has-rail');\n      hero.classList.toggle('is-sq', !!rr.sq);\n      if (rr.hero) stageImage(img, rr.hero);\n      var sideSum = state.sel[heroRole] ? (lab(state.sel[heroRole]).sum || '') : '';\n      var doorSum = badgeRole && state.sel[badgeRole] ? (lab(state.sel[badgeRole]).sum || '') : '';\n      img.alt = [sideSum, doorSum, cViewLab[rr.view]].filter(Boolean).join(', ');\n      var vs = $('[data-nk-hero-views]', hero);\n      if (!vs) {\n        vs = document.createElement('div');\n        vs.className = 'nk-hero__rail'; vs.setAttribute('data-nk-hero-views', ''); vs.setAttribute('role', 'group'); vs.setAttribute('aria-label', 'Sauna view');\n        vs.innerHTML = C_VIEWS.map(function (v) {\n          return '<button type=\"button\" class=\"nk-rail__b nk-rail__b--' + v + '\" data-v=\"' + v + '\" aria-pressed=\"false\" aria-label=\"' + esc('Show ' + String(cViewLab[v]).toLowerCase() + ' view') + '\"><i class=\"nk-rail__th\" aria-hidden=\"true\"></i><span>' + esc(cViewLab[v]) + '</span></button>';\n        }).join('') + '<span class=\"nk-rail__extra\" data-nk-rail-extra hidden></span>';\n        ['pointerdown', 'pointerup', 'mousedown', 'touchstart'].forEach(function (ev) { vs.addEventListener(ev, function (e) { e.stopPropagation(); }, { passive: true }); });\n        vs.addEventListener('click', function (e) {\n          var b = e.target.closest && e.target.closest('button[data-v]'); if (!b) return;\n          e.preventDefault(); e.stopPropagation(); state.view = b.getAttribute('data-v'); collapseMobileViews(); setStage('render');\n        });\n        hero.appendChild(vs);\n      }\n      $$('button[data-v]', vs).forEach(function (b) {\n        var v = b.getAttribute('data-v'), on = v === rr.view, pk = on ? rr : cPick(v), dm = dimDrawingOn(), lb = dm ? dimLabOf(v) : cViewLab[v];\n        b.classList.toggle('on', on); b.setAttribute('aria-pressed', on ? 'true' : 'false');\n        b.hidden = !pk;\n        var sp = $('span', b); if (sp && sp.textContent !== lb) sp.textContent = lb;\n        b.setAttribute('aria-label', 'Show ' + String(lb).toLowerCase() + (dm ? ' drawing' : ' view'));\n        var th = $('.nk-rail__th', b), u = dm ? bgUrl(bSized(dimSrc(v), 240)) : (pk ? bgUrl(pk.th) : '');\n        if (th && th.style.backgroundImage !== u) th.style.backgroundImage = u;\n      });\n      var tag = $('[data-nk-hero-tag]', hero), th = $('[data-nk-hero-th]', hero), nm = $('[data-nk-hero-nm]', hero);\n      th.hidden = true; th.style.backgroundImage = '';\n      // Set 63 #1/#4: cutaway has no dim caption; sticky/pill use the same concise live summary.\n      if (dimDrawingOn() && !dimNoCallouts(rr.view)) nm.textContent = DIM_TXT.cap;\n      else nm.textContent = liveBuildSummary() || [copy.back_label_short, sideSum, doorSum].filter(Boolean).join(' \u00B7 ');\n      nm.title = nm.textContent;\n      tag.hidden = false;\n      $('[data-nk-hero-cap]', hero).textContent = '';\n      hero.classList.add('is-on');\n      paintDims(rr);\n      state.heroSeen = true;\n      paintYours();\n      C_VIEWS.forEach(function (v) { cPick(v); });\n    }\n\n    // Set 44: barrel hero. Render for the current view. Set 47: Front / Back / Above rail, tag \"Your sauna \u00B7 8 ft\".\n    function paintBarrelHero(rr) {\n      var img = $('[data-nk-hero-img]', hero);\n      hero.classList.add('is-render', 'is-barrel');\n      // Set 54: landing photo until the first choice; Dimensions on shows the default build's drawing over its render.\n      var land = !!(state.landing && LAND && !dimDrawingOn());\n      nkStage = land ? 'landing' : 'render';\n      hero.classList.toggle('is-landing', land);\n      hero.classList.toggle('is-sq', !land && !!rr.sq);\n      var want = land ? LAND.src : rr.hero;\n      stageImage(img, want);\n      img.style.objectPosition = land && LAND.pos ? LAND.pos : '';\n      var names = B_ROLES.map(function (r) { return selOr(r) ? (lab(selOr(r)).sum || '') : ''; }).filter(Boolean);\n      img.alt = land ? LAND.alt : names.join(', ') + ' (' + bViewLab[rr.view] + ')';\n      // Set 47: view rail (direction B). Frosted column on the right edge of the image: one live photo thumbnail per\n      // view (Front / Back / Above), each drawn from the same render map as the main image, so it follows size,\n      // roof, door, window and heater. The [data-nk-rail-extra] slot is reserved for a future Dimensions toggle.\n      hero.classList.add('has-rail');\n      var vs = $('[data-nk-hero-views]', hero);\n      if (!vs) {\n        vs = document.createElement('div');\n        vs.className = 'nk-hero__rail'; vs.setAttribute('data-nk-hero-views', ''); vs.setAttribute('role', 'group'); vs.setAttribute('aria-label', 'Sauna view');\n        vs.innerHTML = B_VIEWS.map(function (v) {\n          return '<button type=\"button\" class=\"nk-rail__b nk-rail__b--' + v + '\" data-v=\"' + v + '\" aria-pressed=\"false\" aria-label=\"' + esc('Show ' + String(bViewLab[v]).toLowerCase() + ' view') + '\"><i class=\"nk-rail__th\" aria-hidden=\"true\"></i><span>' + esc(bViewLab[v]) + '</span></button>';\n        }).join('') + '<span class=\"nk-rail__extra\" data-nk-rail-extra hidden></span>';\n        ['pointerdown', 'pointerup', 'mousedown', 'touchstart'].forEach(function (ev) { vs.addEventListener(ev, function (e) { e.stopPropagation(); }, { passive: true }); });\n        vs.addEventListener('click', function (e) {\n          var b = e.target.closest && e.target.closest('button[data-v]'); if (!b) return;\n          e.preventDefault(); e.stopPropagation(); state.view = b.getAttribute('data-v'); collapseMobileViews(); setStage('render');\n        });\n        hero.appendChild(vs);\n      }\n      $$('button[data-v]', vs).forEach(function (b) {\n        var v = b.getAttribute('data-v'), on = !land && v === rr.view, pk = on ? rr : bPick(v), dm = dimOn() && v !== 'rear' && !window.matchMedia('(max-width: 768px)').matches, lb = dimOn() ? dimLabOf(v) : bViewLab[v];\n        b.classList.toggle('on', on); b.setAttribute('aria-pressed', on ? 'true' : 'false');\n        b.hidden = !pk || (v === 'side' && !dimOn());\n        var sp = $('span', b); if (sp && sp.textContent !== lb) sp.textContent = lb;\n        b.setAttribute('aria-label', 'Show ' + String(lb).toLowerCase() + (dm ? ' drawing' : ' view'));\n        var th = $('.nk-rail__th', b), u = dm ? bgUrl(bSized(dimSrc(v), 240)) : (pk ? bgUrl(pk.th) : '');\n        if (th && th.style.backgroundImage !== u) th.style.backgroundImage = u;\n      });\n      var tag = $('[data-nk-hero-tag]', hero), th = $('[data-nk-hero-th]', hero), nm = $('[data-nk-hero-nm]', hero);\n      th.hidden = true; th.style.backgroundImage = '';\n      var size = selOr('size') ? lab(selOr('size')).sum : '';\n      // Set 63 #4: same concise live summary as the sticky bar (middots, no full variant title).\n      var buildSummary = liveBuildSummary();\n      if (dimDrawingOn() && !dimNoCallouts(state.view)) {\n        nm.textContent = [size, DIM_TXT.cap].filter(Boolean).join(' \u00B7 ');\n      } else if (dimOn() && dimNoCallouts(state.view)) {\n        // Angled Back/cutaway: drawing/photo only \u2014 pill stays the build summary, not \"approx. dimensions\".\n        nm.textContent = buildSummary;\n      } else {\n        nm.textContent = buildSummary;\n      }\n      nm.title = nm.textContent;\n      var note = $('[data-nk-hero-note]', tag);\n      if (!note) { note = document.createElement('small'); note.className = 'nk-hero__note'; note.setAttribute('data-nk-hero-note', ''); tag.appendChild(note); }\n      note.textContent = '';\n      note.hidden = !note.textContent;\n      tag.hidden = land;\n      $('[data-nk-hero-cap]', hero).textContent = '';\n      hero.classList.add('is-on');\n      paintDims(rr);\n      state.heroSeen = true;\n      paintYours();\n      bPreload();\n    }\n\n    /* ---------- main update ---------- */\n    function update(opts) {\n      opts = opts || {};\n      var p = byKey[ROLES.map(function (r) { return selOr(r); }).join('||')] || state.product;\n      var prevProduct = state.product;\n      state.product = p;\n      state.variant = pickVariant(p);\n      if (p.hasConn) { state.conn = state.variant.conn; state.lights = !!state.variant.lights; }\n      syncSizedAddons();\n      paintGroups(); paintTotals(); paintSteps(); paintSpecs(); paintHero();\n      var changed = !samePage(p, state.shownProduct);\n      if (changed) swapGallery(p); else state.shownProduct = p;\n      syncUrlAndForm(prevProduct, opts);\n      if (changed && state.ready) swapSections(p);\n      if (state.ready) schedulePrefetch();\n      syncK1Visibility();\n      try { document.dispatchEvent(new CustomEvent('nootka:configurator:change', { detail: { product: p.handle, variant: state.variant.id, total: state.variant.price + addonsTotal() } })); } catch (e) {}\n    }\n\n    function histState(p, v) {\n      var hs = {}, cur = history.state;\n      if (cur && typeof cur === 'object') for (var k in cur) if (Object.prototype.hasOwnProperty.call(cur, k)) hs[k] = cur[k];\n      hs.nk = { h: p.handle, v: v.id };\n      return hs;\n    }\n    function syncUrlAndForm(prevProduct, opts) {\n      var p = state.product, v = state.variant;\n      var url = buildUrl(p, v.id);\n      if ((state.ready || p !== loaded) && !opts.fromPop) {\n        try {\n          if (location.pathname + location.search !== url) {\n            // A different build is a new history entry (Back returns to the previous build); a variant change is not.\n            if (state.ready && prevProduct && !samePage(prevProduct, p)) {\n              if ('scrollRestoration' in history) history.scrollRestoration = 'manual';\n              history.pushState(histState(p, v), '', url);\n            } else {\n              history.replaceState(histState(p, v), '', url);\n            }\n          } else {\n            history.replaceState(histState(p, v), '', location.href);\n          }\n        } catch (e) {}\n      }\n      if (isLoaded(p) && idInput && String(idInput.value) !== String(v.id)) {\n        idInput.value = v.id;\n        idInput.dispatchEvent(new Event('change', { bubbles: true }));\n      }\n      var vh = $('.nk-h1 .nk-vh', root);\n      if (vh && p.title) vh.textContent = ' \u2013 ' + p.title;\n      if (p.title && state.titleFrom && document.title.indexOf(state.titleFrom) > -1) {\n        document.title = document.title.replace(state.titleFrom, p.title); state.titleFrom = p.title;\n      }\n    }\n    state.titleFrom = loaded.title;\n\n    /* ---------- specs strip ---------- */\n    var specs = $('[data-nk-specs]', root);\n    if (specs && root.getAttribute('data-specs-position') === 'gallery') {\n      var gw = root.closest('[data-section-id], .shopify-section, section') || document;\n      var target = $('.product__media__wrapper', gw) || $('.product__media__wrapper');\n      // Inside the (sticky) gallery sub-wrapper, so the strip moves with the gallery and never slides under it.\n      var sub = target && $('.product__media__subwrapper', target);\n      if (sub) target = sub;\n      if (target) {\n        specs.classList.add('nk-specs--gallery');\n        specs.setAttribute('style', root.getAttribute('style') || '');\n        target.appendChild(specs);\n      }\n    }\n    function paintSpecs() {\n      if (!specs) return;\n      var p = state.product;\n      var heat = String(p.specs.heat || '');\n      heat = /depend/i.test(heat) ? (copy.spec_heat_byo || '') : heat.replace(/\\s*minutes?/i, ' min').replace(/-/g, '\u2013');\n      var fx = cfg.specs || {};\n      var hasHeat = ROLES.indexOf('heat') > -1, size = hasHeat ? selOr('size') : '', heatName = hasHeat ? selOr('heat') : '';\n      var cap = hasHeat ? capFor(size, heatName) : '';\n      var vals = { people: String(fx.people || cap || p.specs.people || '').replace(/-/g, '\u2013'), heat: fx.heat || heat, length: fx.length || (state.sel.size ? lab(state.sel.size).sum : '') };\n      $$('[data-nk-spec]', specs).forEach(function (b) {\n        var k = b.getAttribute('data-nk-spec'); b.textContent = vals[k] || '';\n        b.parentNode.hidden = !vals[k];\n      });\n      // set 42: barrels show the heater stat (9 kW) only with the electric heater; the Details note only for the\n      // size in \"Heater stat: show Details only for size\" (8ft).\n      var kw = $('[data-nk-spec-kw]', specs), det = $('[data-nk-spec-det]', specs), pop = $('[data-nk-spec-pop]', root);\n      var kwOn = !hasHeat || /electric/i.test(String(heatName || ''));\n      if (kw) kw.hidden = !kwOn;\n      var tipSize = norm(copy.spec_heater_tip_size || '');\n      var detOn = kwOn && !!det && !!pop && (hasHeat ? !!tipSize && norm(size).indexOf(tipSize) > -1 : !tipSize);\n      if (det) det.hidden = !detOn;\n      if (pop && !detOn) { pop.hidden = true; if (det) det.setAttribute('aria-expanded', 'false'); }\n      specs.classList.toggle('nk-specs--dense', $$('[data-nk-specs] > div', root.parentNode || document).filter(function (d) { return !d.hidden && specs.contains(d); }).length >= 5);\n      paintCapCards();\n    }\n    function paintCapCards() {\n      if (ROLES.indexOf('heat') < 0 || !groups.size) return;\n      var heatName = selOr('heat');\n      $$('.nk-opt', groups.size.box).forEach(function (el) {\n        var cap = capFor(el.getAttribute('data-value'), heatName), ds = $('.nk-opt__ds', el);\n        if (!cap || !ds) return;\n        ds.textContent = String(copy.capacity_card || '{cap}').replace('{cap}', cap.replace(/-/g, '\u2013'));\n      });\n    }\n    (function wireKwTip() {\n      var det = specs && $('[data-nk-spec-det]', specs), pop = $('[data-nk-spec-pop]', root);\n      if (!det || !pop) return;\n      det.addEventListener('click', function (e) {\n        e.preventDefault(); e.stopPropagation();\n        var show = pop.hidden; pop.hidden = !show; det.setAttribute('aria-expanded', show ? 'true' : 'false');\n      });\n      document.addEventListener('click', function (e) { if (!pop.hidden && !pop.contains(e.target) && e.target !== det) { pop.hidden = true; det.setAttribute('aria-expanded', 'false'); } });\n      document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && !pop.hidden) { pop.hidden = true; det.setAttribute('aria-expanded', 'false'); det.focus(); } });\n    })();\n\n    /* ---------- gallery ---------- */\n    function sized(src, w) { return src + (src.indexOf('?') > -1 ? '&' : '?') + 'width=' + w; }\n    /* ---------- Set 50: fixed gallery frame (smart crop) ----------\n       The CSS locks the main image to 3:2 (phone 4:5) and fills it with each photo (object-fit: cover).\n       Crop position: the Shopify focal point when set; else the \"Photo focus\" setting (file-name start: x% y%);\n       else 50% 55% for tall photos; else the centre. \"Never crop these images\" (file-name starts, comma-separated)\n       keeps drawings whole on their own corner colour. Re-run for each build swap (images change without a reload). */\n    function nkList(v) { return String(v || '').split(/[\\n,]+/).map(function (t) { return t.trim().toLowerCase(); }).filter(Boolean); }\n    var nkWhole = nkList(cfg.keepWhole);\n    var nkFocus = String(cfg.photoFocus || '').split(/\\n+/).map(function (l) {\n      var m = l.match(/^\\s*([^:]+?)\\s*:\\s*(\\d{1,3}(?:\\.\\d+)?)\\s*%?\\s*[ ,]\\s*(\\d{1,3}(?:\\.\\d+)?)\\s*%?\\s*$/);\n      return m ? { k: m[1].toLowerCase(), pos: Math.min(100, +m[2]) + '% ' + Math.min(100, +m[3]) + '%' } : null;\n    }).filter(Boolean);\n    function nkFile(src) {\n      var f = String(src || '').split('?')[0].split('/').pop() || '';\n      try { f = decodeURIComponent(f); } catch (e) {}\n      return f.toLowerCase();\n    }\n    function nkSrc(el) {\n      var s = el.getAttribute('src') || el.getAttribute('data-src') || '';\n      if (!s || /^data:/.test(s)) s = String(el.getAttribute('srcset') || el.getAttribute('data-srcset') || '').split(',')[0].trim().split(' ')[0];\n      return s;\n    }\n    var nkBg = {};\n    function nkCorner(src, cb) {\n      var key = nkFile(src);\n      if (key in nkBg) { if (nkBg[key]) cb(nkBg[key]); return; }\n      nkBg[key] = '';\n      var im = new Image();\n      im.crossOrigin = 'anonymous';\n      im.onload = function () {\n        try {\n          var c = document.createElement('canvas'); c.width = 16; c.height = 16;\n          var x = c.getContext('2d'); x.drawImage(im, 0, 0, 16, 16);\n          var d = x.getImageData(0, 0, 1, 1).data;\n          if (d[3] > 200) { nkBg[key] = 'rgb(' + d[0] + ',' + d[1] + ',' + d[2] + ')'; cb(nkBg[key]); }\n        } catch (e) {}\n      };\n      im.src = sized(src, 64);\n    }\n    function nkFrame(slide, src, fp, tall) {\n      if (!slide || slide.getAttribute('data-type') !== 'image') return;\n      var el = $('img', slide);\n      if (!el) return;\n      var f = nkFile(src || nkSrc(el));\n      if (!f) return;\n      var whole = nkWhole.some(function (k) { return f.indexOf(k) === 0; });\n      slide.classList.toggle('nk-whole', whole);\n      if (whole) { nkCorner(src || nkSrc(el), function (c) { slide.style.setProperty('--nk-whole-bg', c); }); el.style.setProperty('object-position', '50% 50%', 'important'); return; }\n      var pos = fp;\n      if (!pos) { var hit = nkFocus.filter(function (r) { return f.indexOf(r.k) === 0; })[0]; if (hit) pos = hit.pos; }\n      if (!pos && tall == null) return; // first load, no rule: the theme's inline position + CSS tall default stay\n      el.style.setProperty('object-position', pos || (tall ? '50% 55%' : '50% 50%'), 'important');\n    }\n    (function nkFrameAll() {\n      var scope = root.closest('.shopify-section') || document;\n      $$('[data-media-slide]', scope).forEach(function (slide) {\n        var el = $('img', slide);\n        if (!el) return;\n        // image.liquid writes the Shopify focal point inline, or \"center center\" when none is set.\n        var op = String(el.style.objectPosition || '').trim();\n        var fp = op && !/^(center( center)?|50(\\.0+)?% 50(\\.0+)?%)$/.test(op) ? op : null;\n        nkFrame(slide, null, fp, null);\n      });\n    })();\n\n    // Set 60: the barrel landing photo also exists in product media with a DIFFERENT\n    // filename. Keep one canonical copy first in the gallery, including thumbnails.\n    // Product media is not deleted. Keep a slot pool so changing builds with different\n    // photo counts restores the original DOM nodes/listeners rather than wrapping images.\n    function nkGalleryKey(src) {\n      var file = nkFile(String(src || '').split('#')[0]);\n      file = file.replace(/_\\d+x\\d*(?:_crop_[a-z]+)?(?=\\.[^.]+$)/, '');\n      if (file === 'nootka-lifestyle-garden-path.jpg' || file === 'nootka-barrel-hero-porch-garden.webp') return 'nootka-barrel-garden-path';\n      return file;\n    }\n    function nkGalleryImages(p) {\n      if (!barrelR) return p.images || [];\n      var images = (p.images || []).slice(), seen = Object.create(null);\n      if (LAND) {\n        var landingKey = nkGalleryKey(LAND.src);\n        var landing = images.filter(function (im) { return nkGalleryKey(im.src) === landingKey; })[0];\n        // Do not add a new gallery slot where no matching product photo exists.\n        if (landing) images.unshift(Object.assign({}, landing, { src: LAND.src, alt: LAND.alt || landing.alt }));\n      }\n      return images.filter(function (im) {\n        var key = nkGalleryKey(im.src);\n        if (!key) return true;\n        if (seen[key]) return false;\n        seen[key] = true;\n        return true;\n      });\n    }\n    var nkGallerySlots = null;\n    function nkGalleryCells(scope, count) {\n      if (!nkGallerySlots) {\n        nkGallerySlots = $$('[data-media-slide][data-type=\"image\"]', scope).map(function (slide) {\n          var id = slide.getAttribute('data-media-id');\n          var thumb = $('[data-slideshow-thumbnail][data-media-select=\"' + id + '\"]', scope);\n          var anchor = document.createComment('nk-gallery-thumb');\n          if (thumb && thumb.parentNode) thumb.parentNode.insertBefore(anchor, thumb);\n          return { slide: slide, parent: slide.parentNode, thumb: thumb, anchor: anchor };\n        });\n      }\n      var show = $('[data-product-slideshow]', scope);\n      var flk = show && flickityApi();\n      nkGallerySlots.forEach(function (slot, i) {\n        var cell = slot.slide, active = i < count;\n        if (active && !scope.contains(cell)) {\n          if (flk && typeof flk.insert === 'function') flk.insert(cell, i);\n          else slot.parent.appendChild(cell);\n        } else if (!active && scope.contains(cell)) {\n          if (flk && typeof flk.remove === 'function') flk.remove(cell);\n          else cell.parentNode.removeChild(cell);\n        }\n        if (slot.thumb) {\n          if (active && !scope.contains(slot.thumb) && slot.anchor.parentNode) slot.anchor.parentNode.insertBefore(slot.thumb, slot.anchor.nextSibling);\n          else if (!active && slot.thumb.parentNode) slot.thumb.parentNode.removeChild(slot.thumb);\n        }\n      });\n      if (flk && typeof flk.resize === 'function') flk.resize();\n      return nkGallerySlots.filter(function (slot, i) { return i < count; }).map(function (slot) { return slot.slide; });\n    }\n    function swapGallery(p) {\n      var scope = root.closest('.shopify-section') || document;\n      var imgs = nkGalleryImages(p);\n      // Never re-use images modulo the image count: that creates repeated thumbnails.\n      var imgSlides = barrelR ? nkGalleryCells(scope, imgs.length) : $$('[data-media-slide][data-type=\"image\"]', scope);\n      var slides = $$('[data-media-slide]', scope);\n      if (!slides.length) { state.shownProduct = p; return; }\n      var idToImg = {};\n      imgSlides.forEach(function (slide, i) {\n        var im = barrelR ? (imgs[i] || null) : (imgs.length ? imgs[i % imgs.length] : null);\n        var el = $('img', slide);\n        if (!im || !el) return;\n        idToImg[slide.getAttribute('data-media-id')] = im;\n        var max = im.w || 2000;\n        var list = WIDTHS.filter(function (w) { return w < max; }).concat([Math.min(max, 3000)]);\n        stageImage(el, sized(im.src, Math.min(max, 2000)), list.map(function (w) { return sized(im.src, w) + ' ' + w + 'w'; }).join(', '));\n        if (im.w && im.h) { el.width = Math.min(max, 2000); el.height = Math.round(Math.min(max, 2000) * im.h / im.w); }\n        el.alt = im.alt || '';\n        slide.setAttribute('aria-label', im.alt || '');\n        slide.classList.toggle('nk-repeat', i >= imgs.length);\n        // Set 50: crop position travels with the swapped image (fx/fy = Shopify focal point, 50/50 = none set).\n        var fp = im.fx != null && im.fy != null && !(+im.fx === 50 && +im.fy === 50) ? (+im.fx) + '% ' + (+im.fy) + '%' : null;\n        nkFrame(slide, im.src, fp, !!(im.w && im.h && im.h > im.w * 1.05));\n      });\n      $$('[data-slideshow-thumbnail]', scope).forEach(function (th) {\n        var id = th.getAttribute('data-media-select'), im = idToImg[id], el = $('img', th);\n        if (im && el) {\n          el.src = im.src + (im.src.indexOf('?') > -1 ? '&' : '?') + 'width=228&height=288&crop=center';\n          el.alt = im.alt || '';\n        }\n      });\n      swapModel(p, slides, scope);\n      state.shownProduct = p;\n    }\n    function swapModel(p, slides, scope) {\n      var mSlide = slides.filter(function (s) { return s.getAttribute('data-type') === 'model'; })[0];\n      var xr = $('[data-shopify-xr]', scope);\n      if (!mSlide) return;\n      var mv = $('model-viewer', mSlide);\n      var thumb = $('[data-slideshow-thumbnail][data-media-select=\"' + mSlide.getAttribute('data-media-id') + '\"]', scope);\n      var m = p.model;\n      mSlide.classList.toggle('nk-no-model', !m);\n      if (thumb) thumb.hidden = !m;\n      if (xr) xr.hidden = !m;\n      if (!m || !mv) return;\n      if (m.poster) mv.setAttribute('poster', m.poster);\n      mv.setAttribute('alt', m.alt || '');\n      if (mv.getAttribute('src') === m.src) { mSlide.__nkPending = null; return; }\n      mSlide.__nkPending = m;\n      if (!mSlide.__nkBound) {\n        mSlide.__nkBound = true;\n        var apply = function () {\n          var pm = mSlide.__nkPending; if (!pm) return;\n          mSlide.__nkPending = null;\n          mv.setAttribute('src', pm.src);\n        };\n        ['pointerdown', 'keydown', 'focusin', 'touchstart'].forEach(function (ev) { mSlide.addEventListener(ev, apply, { capture: true, passive: true }); });\n      }\n      if (xr && m.media) {\n        xr.setAttribute('data-shopify-model3d-id', m.id);\n        if (!xr.__nkBound) {\n          xr.__nkBound = true;\n          xr.addEventListener('click', function () {\n            var cm = state.product.model;\n            xr.__nkAdded = xr.__nkAdded || {};\n            if (cm && cm.media && window.ShopifyXR && !xr.__nkAdded[cm.id]) {\n              try { window.ShopifyXR.addModels([cm.media]); window.ShopifyXR.setupXRElements(); xr.__nkAdded[cm.id] = true; } catch (e) {}\n            }\n          }, true);\n        }\n      }\n    }\n\n    /* ---------- K1 ---------- */\n    var k1Slot = $('[data-nk-k1-slot]', root);\n    var payOwn = $('[data-nk-pay-own]', root);\n    var reloadMsg = $('[data-nk-reload]', root);\n    (function moveK1() {\n      var scope = root.closest('.shopify-section') || document;\n      var k1 = $('.k1-payment-options-block', scope);\n      var wrap = k1 && (k1.closest('.shopify-app-block') || k1);\n      if (wrap && k1Slot && !k1Slot.contains(wrap)) k1Slot.appendChild(wrap);\n    })();\n    function hasK1() { return !!(k1Slot && $('.k1-payment-options-block', k1Slot)); }\n    // Set 52: K1's plan data for this build is on the page (selling plans in our JSON + K1's PreorderConfig), so the\n    // sauna line can be built here exactly as K1 builds it: no reload needed at Fulfillment or Add to cart.\n    function k1Data(v) { return !!(window.PreorderConfig && plans(v).length); }\n    function mirrorOn() { return !isLoaded(state.product) && (k1Mode === 'mirror' || (hasK1() && k1Data(state.variant))); }\n    function needsReload() { return k1Mode !== 'mirror' && !isLoaded(state.product) && hasK1() && !k1Data(state.variant); }\n    function syncK1Visibility() {\n      var mirror = mirrorOn();\n      if (k1Slot) k1Slot.hidden = mirror || !isLoaded(state.product);\n      if (payOwn) payOwn.hidden = !(mirror && plans(state.variant).length);\n    }\n    function paintOwnPay(v, add) {\n      if (!payOwn || !mirrorOn()) return;\n      var dp = depositPlan(v), fp = fullPlan(v);\n      // Set 52: start from the choice made in K1's own widget (same plan ids on every build).\n      if (!state.plan && form) { var spIn = form.querySelector('input[name=\"selling_plan\"]'); if (spIn && +spIn.value) state.plan = +spIn.value; }\n      if (!state.plan || !plans(v).some(function (p) { return p.id === state.plan; })) state.plan = dp ? dp.id : (fp ? fp.id : null);\n      // Set 52: same look and words as K1's own widget (its markup classes, its stylesheet, its plan names and\n      // description from PreorderConfig); amounts for the sauna itself, like K1. Falls back to the cards below.\n      var k1w = k1Slot && $('.k1-payment-widget', k1Slot), tr = (window.PreorderConfig || {}).poTranslations || {};\n      if (k1w && ((dp && tr[dp.id]) || (fp && tr[fp.id]))) {\n        payOwn.classList.remove('nk-seg', 'nk-c2'); payOwn.classList.add('nk-payown');\n        var lab = $('.k1-payment-label', k1w), opts = [];\n        if (dp) opts.push([dp.id, (tr[dp.id] || {}).n || copy.pay_deposit_title, moneyWithCurrency(dp.charge + add), paymentDescription(v, add, dp)]);\n        if (fp) opts.push([fp.id, (tr[fp.id] || {}).n || copy.pay_full_title, moneyWithCurrency(v.price + add), paymentDescription(v, add, null)]);\n        payOwn.innerHTML = '<div class=\"k1-payment-widget\">' + (lab ? '<div class=\"k1-payment-label\">' + esc(lab.textContent.trim()) + '</div>' : '') +\n          '<div class=\"k1-payment-options\">' + opts.map(function (o) {\n            var on = o[0] === state.plan;\n            return '<label class=\"k1-payment-option' + (on ? ' selected' : '') + '\" data-option-id=\"' + o[0] + '\"><input type=\"radio\" name=\"' + esc(uid) + '-plan\" value=\"' + o[0] + '\" class=\"k1-payment-radio\"' + (on ? ' checked' : '') + '>' +\n              '<div class=\"k1-payment-content\"><div class=\"k1-payment-header\"><div class=\"k1-payment-name\">' + esc(o[1]) + '</div><div class=\"k1-payment-price\">' + esc(o[2]) + '</div></div>' +\n              (o[3] ? '<div class=\"k1-payment-description\">' + esc(o[3]) + '</div>' : '') + '</div></label>';\n          }).join('') + '</div></div>';\n        return;\n      }\n      var items = [];\n      if (dp) items.push([dp.id, copy.pay_deposit_title, String(copy.pay_deposit_sub || '').replace('{amount}', moneyWithCurrency(dp.charge + add))]);\n      if (fp) items.push([fp.id, copy.pay_full_title, moneyWithCurrency(v.price + add)]);\n      payOwn.innerHTML = items.map(function (it) {\n        var on = it[0] === state.plan;\n        return '<label class=\"nk-opt' + (on ? ' on' : '') + '\"><input type=\"radio\" name=\"' + esc(uid) + '-plan\" value=\"' + it[0] + '\"' + (on ? ' checked' : '') + '>' +\n          '<span class=\"nk-opt__nm\">' + esc(it[1]) + '</span><span class=\"nk-opt__pr\">' + esc(it[2]) + '</span></label>';\n      }).join('');\n    }\n    if (payOwn) payOwn.addEventListener('change', function (e) { state.plan = +e.target.value; paintTotals(); });\n    if (k1Slot) k1Slot.addEventListener('change', function () {\n      var selected = selectedPaymentPlan(state.variant);\n      if (selected) state.plan = +selected.id;\n      paintTotals();\n      requestAnimationFrame(function () { if (document.contains(root)) paintTotals(); });\n    });\n\n    // Set 60: the sauna's selling plan applies only to the sauna; add-ons are paid in full now.\n    function paymentDescription(v, add, dp) {\n      return dp ? ('Sauna deposit ' + moneyWithCurrency(dp.charge) + (add ? ' + add-ons ' + moneyWithCurrency(add) + ' paid in full' : '') + '. Remaining sauna balance ' + moneyWithCurrency(v.price - dp.charge) + ' before shipping.')\n        : ('Full order total ' + moneyWithCurrency(v.price + add) + (add ? ', including add-ons paid in full.' : '.'));\n    }\n    function paintNativePay(v, add) {\n      if (!k1Slot || !isLoaded(state.product)) return;\n      var dp = depositPlan(v), fp = fullPlan(v);\n      $$('.k1-payment-option', k1Slot).forEach(function (opt) {\n        var input = $('input[type=\"radio\"]', opt), id = +(opt.getAttribute('data-option-id') || (input && input.value));\n        var plan = dp && id === +dp.id ? dp : (fp && id === +fp.id ? fp : null);\n        if (!plan) return;\n        var deposit = dp && +plan.id === +dp.id;\n        var price = $('.k1-payment-price', opt), desc = $('.k1-payment-description', opt);\n        var text = moneyWithCurrency((deposit ? dp.charge : v.price) + add);\n        if (price && price.textContent !== text) price.textContent = text;\n        text = paymentDescription(v, add, deposit ? dp : null);\n        if (desc && desc.textContent !== text) desc.textContent = text;\n      });\n      // This independent order summary also covers K1 widget versions with different internal markup.\n      var summary = $('[data-nk-order-payment-summary]', k1Slot);\n      if (!summary) { summary = document.createElement('p'); summary.className = 'nk-order-payment-summary'; summary.setAttribute('data-nk-order-payment-summary', ''); k1Slot.appendChild(summary); }\n      var text = orderPaymentSummary(v, add);\n      if (summary.textContent !== text) summary.textContent = text;\n    }\n    if (k1Slot && typeof MutationObserver !== 'undefined') {\n      var payQueued = false;\n      new MutationObserver(function () {\n        if (payQueued) return;\n        payQueued = true;\n        requestAnimationFrame(function () { payQueued = false; if (document.contains(root)) paintTotals(); });\n      }).observe(k1Slot, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['class', 'checked', 'value'] });\n    }\n\n    function mirrorLine(item, planId) {\n      var pc = window.PreorderConfig || {};\n      var key = (pc.settings && pc.settings.k1Key) || '_K1';\n      item.selling_plan = planId;\n      item.properties = item.properties || {};\n      item.properties[key] = 'preorder';\n      var tr = pc.poTranslations && pc.poTranslations[planId];\n      if (tr && tr.lk && tr.lv) item.properties[tr.lk] = tr.lv;\n    }\n\n    function navUrl(p, v) {\n      var q = ['variant=' + v.id];\n      if (viewParam) q.push('view=' + encodeURIComponent(viewParam));\n      return window.NootkaStorefront.localUrl(p.url) + '?' + q.join('&');\n    }\n    function navigate(go, step, focusAddr) {\n      var p = state.product, v = state.variant;\n      var ids = addonItems().map(function (i) { return i.value; });\n      step = step || 4;\n      var url = navUrl(p, v), stored = false;\n      // Set 52: the step being opened lands with its header near the top of the screen.\n      var yN = headerOffset() + 24;\n      try {\n        sessionStorage.setItem(CARRY_KEY, JSON.stringify({ h: p.handle, v: v.id, step: step, addons: ids, addonHandles: addonItems().map(function (i) { return i.getAttribute('data-handle'); }), go: !!go, f: !!focusAddr, y: yN, plan: state.plan || null, t: Date.now() }));\n        stored = true;\n      } catch (e) {}\n      if (!stored) url += '&nk_step=' + step + (ids.length ? '&nk_addons=' + ids.join(',') + '&nk_addon_handles=' + addonItems().map(function (i) { return encodeURIComponent(i.getAttribute('data-handle')); }).join(',') : '') + (go ? '&nk_go=1' : '');\n      if (step === 4) {\n        if (reloadMsg) reloadMsg.hidden = false;\n        state.cur = 4; paintSteps();\n        var b4 = $('[data-nk-body]', rows[3]); if (b4) b4.hidden = false;\n        setBusy(true);\n      }\n      try { history.scrollRestoration = 'manual'; } catch (e) {}\n      location.assign(url);\n    }\n\n    /* ---------- seamless section swap (Section Rendering via full-page fetch) ---------- */\n    // Only the sections BELOW the product section are swapped. The product section itself stays: the configurator\n    // already redraws gallery/title/price from its JSON, and the K1 block must stay bound to the product it loaded\n    // with (K1 fetches its plan rules for the first product on the page only; see README).\n    var pageCache = {}, cacheOrder = [], CACHE_MAX = 8, swapSeq = 0;\n    function pageUrl(p) { return window.NootkaStorefront.localUrl(p.url) + (viewParam ? '?view=' + encodeURIComponent(viewParam) : ''); }\n    function getPage(p, low) {\n      var key = p.handle;\n      if (pageCache[key]) return pageCache[key];\n      var opts = { credentials: 'same-origin', headers: { Accept: 'text/html' } };\n      if (low) opts.priority = 'low'; // background warm-ups must not hold up the delivery check\n      var pr = fetch(pageUrl(p), opts)\n        .then(function (r) { if (!r.ok) throw new Error('HTTP ' + r.status); return r.text(); })\n        .catch(function (e) { delete pageCache[key]; throw e; });\n      pageCache[key] = pr;\n      cacheOrder.push(key);\n      while (cacheOrder.length > CACHE_MAX) { var old = cacheOrder.shift(); if (old !== key) delete pageCache[old]; }\n      return pr;\n    }\n    function lowerSections(doc) {\n      var main = doc.getElementById('MainContent') || doc.querySelector('main');\n      if (!main) return null;\n      var secs = $$(':scope > .shopify-section', main);\n      var idx = -1;\n      secs.forEach(function (s, i) { if (idx < 0 && (s.querySelector('[data-nk-cfg]') || /__main$/.test(s.id))) idx = i; });\n      if (idx < 0) return null;\n      return { main: main, anchor: secs[idx], list: secs.slice(idx + 1) };\n    }\n    var themeSecs = (window.Shopify && Shopify.theme && Shopify.theme.sections) || null;\n    function unloadIn(el) {\n      if (!themeSecs || !themeSecs.instances) return;\n      var inst = themeSecs.instances;\n      for (var i = inst.length - 1; i >= 0; i--) {\n        var c = inst[i] && inst[i].container;\n        if (c && (c === el || el.contains(c))) {\n          var it = inst.splice(i, 1)[0];\n          try { it.onUnload(); } catch (e) {}\n        }\n      }\n    }\n    var SectionCtor = null;\n    function loadIn(el) {\n      if (!themeSecs || !themeSecs.registered) return;\n      if (!SectionCtor && themeSecs.instances && themeSecs.instances[0]) SectionCtor = themeSecs.instances[0].constructor;\n      if (!SectionCtor) return;\n      var nodes = $$('[data-section-type][data-section-id]', el);\n      if (el.matches && el.matches('[data-section-type][data-section-id]')) nodes.unshift(el);\n      nodes.forEach(function (c) {\n        var reg = themeSecs.registered[c.getAttribute('data-section-type')];\n        if (!reg) return;\n        try { themeSecs.instances.push(new SectionCtor(c, reg)); } catch (e) { if (window.console) console.warn('[nootka-configurator] section init failed', e); }\n      });\n    }\n    function runScripts(el) {\n      $$('script', el).forEach(function (old) {\n        var type = (old.getAttribute('type') || '').toLowerCase();\n        if (type && type !== 'text/javascript' && type !== 'module' && type !== 'application/javascript') return; // JSON etc. stay as data\n        var src = old.getAttribute('src');\n        if (src && $$('script[src]').some(function (s) { return s !== old && s.getAttribute('src') === src; })) return; // already loaded once\n        var n = document.createElement('script');\n        for (var i = 0; i < old.attributes.length; i++) n.setAttribute(old.attributes[i].name, old.attributes[i].value);\n        if (!src) n.textContent = old.textContent;\n        old.parentNode.replaceChild(n, old);\n      });\n    }\n    function sectionIdOf(el) { return String(el.id || '').replace(/^shopify-section-/, ''); }\n    // Swapped-in autoplay videos would start downloading at once and starve the delivery check; start them when seen.\n    function deferVideos(n) {\n      $$('video[autoplay]', n).forEach(function (v) {\n        v.removeAttribute('autoplay'); v.setAttribute('preload', 'none');\n        if (!window.IntersectionObserver) { v.setAttribute('preload', 'metadata'); return; }\n        var io = new IntersectionObserver(function (es) {\n          if (!es.some(function (x) { return x.isIntersecting; })) return;\n          io.disconnect();\n          v.setAttribute('preload', 'metadata');\n          try { var pr = v.play(); if (pr && pr.catch) pr.catch(function () {}); } catch (e) {}\n        }, { rootMargin: '200px' });\n        io.observe(v);\n      });\n    }\n    function swapSections(p) {\n      if (!swapOn || !window.fetch || !window.DOMParser) return;\n      var seq = ++swapSeq;\n      var here = lowerSections(document);\n      if (!here) return;\n      root.classList.add('nk-swapping');\n      getPage(p).then(function (html) {\n        if (seq !== swapSeq) return; // a newer switch won\n        var doc = new DOMParser().parseFromString(html, 'text/html');\n        var there = lowerSections(doc);\n        if (!there) throw new Error('no sections in fetched page');\n        var cur = lowerSections(document);\n        var same = cur.list.length === there.list.length && cur.list.every(function (s, i) { return s.id === there.list[i].id && s.innerHTML === there.list[i].innerHTML; });\n        if (same) return;\n        var y = window.scrollY;\n        var drop = function (s) {\n          try { s.dispatchEvent(new CustomEvent('shopify:section:unload', { bubbles: true, detail: { sectionId: sectionIdOf(s) } })); } catch (e) {}\n          unloadIn(s);\n          // A removed <video> keeps downloading until garbage-collected; release it so it can't hog the connection.\n          $$('video', s).forEach(function (v) {\n            try { v.pause(); $$('source', v).forEach(function (x) { x.removeAttribute('src'); }); v.removeAttribute('src'); v.load(); } catch (e) {}\n          });\n          s.parentNode.removeChild(s);\n        };\n        var add = function (s, after) {\n          var n = document.importNode(s, true);\n          deferVideos(n);\n          after.parentNode.insertBefore(n, after.nextSibling);\n          runScripts(n);\n          loadIn(n);\n          try { n.dispatchEvent(new CustomEvent('shopify:section:load', { bubbles: true, detail: { sectionId: sectionIdOf(n) } })); } catch (e) {}\n          return n;\n        };\n        var sameIds = cur.list.length === there.list.length && cur.list.every(function (s, i) { return s.id === there.list[i].id; });\n        if (sameIds) {\n          // Same layout: only replace the sections that differ, so shared ones (videos, reviews) keep running untouched.\n          cur.list.forEach(function (s, i) {\n            if (s.innerHTML === there.list[i].innerHTML) return;\n            var prev = s.previousSibling || cur.anchor;\n            drop(s);\n            add(there.list[i], prev);\n          });\n        } else {\n          cur.list.forEach(drop);\n          var after = cur.anchor;\n          there.list.forEach(function (s) { after = add(s, after); });\n        }\n        if (Math.abs(window.scrollY - y) > 2) window.scrollTo(0, y);\n        try { document.dispatchEvent(new CustomEvent('nootka:configurator:sections-swapped', { detail: { product: p.handle } })); } catch (e) {}\n      }).catch(function (e) {\n        if (seq !== swapSeq) return;\n        if (window.console) console.warn('[nootka-configurator] section swap failed, navigating instead', e);\n        // Fallback: normal navigation to the build, keeping the open step and the add-ons.\n        navigate(false, state.cur || 1);\n      }).then(function () { if (seq === swapSeq) root.classList.remove('nk-swapping'); });\n    }\n\n    /* ---------- prefetch neighbouring builds ---------- */\n    function cheapNet() {\n      var c = navigator.connection;\n      return !(c && (c.saveData || /(^|-)2g$/.test(c.effectiveType || '')));\n    }\n    function warm(p) {\n      if (!p || p === state.product || !swapOn || !cheapNet()) return;\n      if (checking) return;\n      try { getPage(p, true).catch(function () {}); } catch (e) {}\n    }\n    var specAdded = {};\n    function prefetchNav(p, v) {\n      // Warm the one real navigation (Delivery & pay / Add to cart when K1 needs its own page load).\n      if (!p || !v || isLoaded(p) || !hasK1() || k1Mode === 'mirror' || k1Data(v) || !cheapNet()) return;\n      var url = navUrl(p, v);\n      if (specAdded[url]) return;\n      specAdded[url] = true;\n      var el;\n      if (window.HTMLScriptElement && HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) {\n        el = document.createElement('script');\n        el.type = 'speculationrules';\n        el.textContent = JSON.stringify({ prefetch: [{ source: 'list', urls: [url] }] });\n      } else {\n        el = document.createElement('link'); el.rel = 'prefetch'; el.href = url; el.as = 'document';\n      }\n      document.head.appendChild(el);\n    }\n    var idleT = null;\n    function schedulePrefetch() {\n      if (idleT) return;\n      var ric = window.requestIdleCallback || function (fn) { return setTimeout(fn, 1200); };\n      idleT = ric(function () {\n        idleT = null;\n        // One neighbour per main choice (size, then heat), not every combo: each page is a few hundred KB.\n        ROLES.slice(0, 2).forEach(function (r) {\n          values[r].forEach(function (val) { if (val !== state.sel[r]) { var np = nearest(r, val); if (!isLoaded(np)) warm(np); } });\n        });\n        if (state.cur >= 3) prefetchNav(state.product, state.variant);\n      }, { timeout: 4000 });\n    }\n    function optTarget(e) {\n      var el = e.target && e.target.closest && e.target.closest('.nk-opt[data-value]');\n      if (!el) return null;\n      var fs = el.closest('[data-nk-group]'), role = fs && fs.getAttribute('data-nk-group');\n      if (!role || ROLES.indexOf(role) < 0) return null;\n      return nearest(role, el.getAttribute('data-value'));\n    }\n    ['pointerover', 'focusin', 'touchstart'].forEach(function (ev) {\n      root.addEventListener(ev, function (e) { var p = optTarget(e); if (p && !samePage(p, state.product)) warm(p); }, { passive: true });\n    });\n    ['pointerover', 'focusin', 'touchstart'].forEach(function (ev) {\n      root.addEventListener(ev, function (e) {\n        var t = e.target && e.target.closest && e.target.closest('[data-nk-atc], [data-nk-step=\"4\"] [data-nk-toggle], [data-nk-step=\"3\"] [data-nk-next]');\n        if (t) prefetchNav(state.product, state.variant);\n      }, { passive: true });\n    });\n\n    /* ---------- Back / Forward between builds ---------- */\n    window.addEventListener('popstate', function (e) {\n      var hs = e.state && e.state.nk;\n      var vid = hs ? hs.v : +new URLSearchParams(location.search).get('variant');\n      var p = hs ? byHandle[hs.h] : null;\n      if (!p) {\n        // Entry not written by us: match by path.\n        p = data.products.filter(function (x) { return x.url === location.pathname || location.pathname.slice(-x.url.length) === x.url; })[0] || null;\n      }\n      if (!p) return;\n      // Cube: several entries share one handle; take the one holding that variant.\n      data.products.forEach(function (x) { if (samePage(x, p) && x.variants.some(function (y) { return String(y.id) === String(vid); })) p = x; });\n      var v = p.variants.filter(function (x) { return String(x.id) === String(vid); })[0];\n      ROLES.forEach(function (r) { state.sel[r] = p.o[r]; });\n      if (v && p.hasConn) { state.conn = v.conn || state.conn; state.lights = !!v.lights; }\n      var y = window.scrollY;\n      update({ fromPop: true });\n      requestAnimationFrame(function () { if (Math.abs(window.scrollY - y) > 2) window.scrollTo(0, y); });\n    });\n\n    /* ---------- add to cart ---------- */\n    var atc = $('[data-nk-atc]', root), errEl = $('[data-nk-error]', root);\n    function setBusy(b, message) {\n      [atc, sticky && $('[data-nk-sticky-btn]', sticky)].forEach(function (btn) {\n        window.NootkaLengthVariants.busyControl(btn, b, message || 'Preparing your checkout\u2026');\n      });\n      var l = atc && $('[data-nk-atc-label]', atc); if (l && !b) l.textContent = copy.atc_label;\n    }\n    function saunaItem() {\n      var v = state.variant, item = { id: v.id, quantity: 1 };\n      if (isLoaded(state.product) && form) {\n        var fd = new FormData(form);\n        var props = {};\n        fd.forEach(function (val, key) {\n          var m = /^properties\\[(.+)\\]$/.exec(key);\n          if (m) props[m[1]] = val;\n          if (key === 'selling_plan' && val) item.selling_plan = +val;\n        });\n        if (Object.keys(props).length) item.properties = props;\n        if (!item.selling_plan && plans(v).length && hasK1() && window.PreorderConfig) {\n          var dp = depositPlan(v); if (dp) mirrorLine(item, dp.id);\n        }\n      } else if (mirrorOn() && plans(v).length) {\n        mirrorLine(item, state.plan || (depositPlan(v) || {}).id);\n      }\n      return item;\n    }\n    function post(body) {\n      return fetch(cfg.cartAddUrl || '/cart/add.js', {\n        method: 'POST', credentials: 'same-origin',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },\n        body: JSON.stringify(body)\n      }).then(function (r) { return window.NootkaStorefront.readJSON(r, cfg.cartAddUrl || '/cart/add.js'); });\n    }\n    /* ---------- set 37: straight to checkout ----------\n       The cart page's hand-off, replicated: (1) the K1 deposit lives on the sauna line itself (selling plan +\n       _K1 / Deposit properties from saunaItem()), so Shopify checkout charges the same deposit; (2) the cart\n       note (Special notes) is saved with /cart/update.js; (3) the one-per-line rule the cart template applies\n       (layout/theme.liquid) runs here too; (4) the delivery attributes nootka-location.js writes on the cart\n       page are written now; (5) checkout is opened by clicking a real a[href=\"/checkout\"], so K1's own\n       checkout-click guard (cart property refresh) runs exactly as it does for the cart page's button. */\n    var noteEl = $('[data-nk-note]', root), agreeEl = $('[data-nk-agree]', root);\n    function postJSON(url, body) {\n      return fetch(url, { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify(body) })\n        .then(function (r) { return window.NootkaStorefront.readJSON(r, url); });\n    }\n    var rootUrl = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || cfg.root || '/';\n    if (rootUrl.slice(-1) !== '/') rootUrl += '/';\n    if (noteEl && !cfg.skipCart) noteEl.addEventListener('change', function () { postJSON(rootUrl + 'cart/update.js', { note: noteEl.value.trim() }).catch(function () {}); });\n    if (agreeEl) agreeEl.addEventListener('change', function () { var t = agreeEl.closest('.nk-terms'); if (t) t.classList.remove('is-err'); if (errEl && agreeEl.checked) errEl.hidden = true; });\n    // Set 61: an eight-second fallback could resume on BFCache Back and re-enter checkout.\n    // Cancel on both leaving/returning; a genuine fallback replaces instead of adding history.\n    var checkoutFallbackTimer = null, checkoutPending = false;\n    function cancelCheckoutFallback() {\n      if (checkoutFallbackTimer != null) clearTimeout(checkoutFallbackTimer);\n      checkoutFallbackTimer = null; checkoutPending = false;\n    }\n    window.addEventListener('pagehide', cancelCheckoutFallback);\n    window.addEventListener('pageshow', function (event) { if (event.persisted) cancelCheckoutFallback(); });\n    // set 42: the split record for this cart (null = test off). Set 43: also for Canada / no address (us = false).\n    function splitRec() {\n      if (!splitTag()) return null;\n      var r = location_ || {}, us = splitOn() && mkHere() !== 'CA' && String(r.country || '').toUpperCase() === 'US' && r.precision === 'address';\n      var zone = '';\n      try { zone = window.NootkaLocation && NootkaLocation.bucket ? NootkaLocation.bucket() : (r.bucket || ''); } catch (e) { zone = r.bucket || ''; }\n      return { us: us, install: us && window.NootkaStorefront.canSplitAssembly(r, cubeR ? 'cube' : 'barrel') && zone === 'white_glove', rec: r };\n    }\n    function addr1Of(r) {\n      var first = String(r.label || '').split(',')[0].trim();\n      return /\\d/.test(first) && first !== String(r.city || '').trim() ? first : '';\n    }\n    // Shopify checkout accepts checkout[shipping_address][...] query params (cart permalink docs); fields it\n    // doesn't take are simply ignored, and the shopper can still edit everything at checkout.\n    function splitCheckoutUrl(url) {\n      var r = location_ || {};\n      try { if (window.NootkaLocation && NootkaLocation.get) r = NootkaLocation.get() || r; } catch (e) {}\n      var country = String(r.country || '').toUpperCase();\n      if (r.precision !== 'address' || (country !== 'CA' && country !== 'US')) return url;\n      var a1 = String(r.address1 || addr1Of(r) || '').trim();\n      if (!a1) return url;\n      try {\n        var u = new URL(url, location.origin);\n        [['address1', a1], ['address2', r.address2], ['city', r.city], ['province', String(r.province || r.region || '').replace(/^[A-Z]{2}-/, '')], ['zip', r.postal], ['country', country]].forEach(function (x) {\n          if (x[1]) u.searchParams.set('checkout[shipping_address][' + x[0] + ']', x[1]);\n        });\n        return u.origin === location.origin ? u.pathname + u.search + u.hash : u.href;\n      } catch (e) { return url; }\n    }\n    // Before the add: drop any On-site Assembly line already in the cart (exactly one per order, re-added below\n    // only inside an install zone), and write or clear the _nootka_split_* attributes.\n    function splitPrep() {\n      if (!splitTag()) return Promise.resolve(null);\n      var s = splitRec(), vids = splitVids();\n      return fetch(rootUrl + 'cart.js', { credentials: 'same-origin', cache: 'no-store' }).then(function (r) { return window.NootkaStorefront.readJSON(r, rootUrl + 'cart.js'); }).catch(function () { return null; })\n        .then(function (c) {\n          var ups = {}, attrs = {};\n          (c && c.items || []).forEach(function (it) { if (vids.indexOf(+it.variant_id) > -1) ups[it.key] = 0; });\n          // Set 43: always tagged. Zone/address are what the shopper entered HERE (informational only; the\n          // checkout address may differ and wins). zone: install | delivery (U.S. street address) | none.\n          var r = s.rec || {};\n          SPLIT_ATTRS.forEach(function (k) { attrs[k] = ''; });\n          attrs._nootka_split_test = '1';\n          attrs._nootka_split_zone = s.us ? (s.install ? 'install' : 'delivery') : 'none';\n          attrs._nootka_split_address = String(r.label || '');\n          attrs._nootka_split_city = String(r.city || '');\n          attrs._nootka_split_region = String(r.region || r.province || '');\n          attrs._nootka_split_postal = String(r.postal || '');\n          attrs._nootka_split_country = String(r.country || '').toUpperCase();\n          if (r.unverified || r.precision !== 'address') {\n            attrs._address_unverified = '1';\n            attrs._address_unverified_line = String(r.unverified_line || r.address1 || (placeInput && placeInput.value) || '');\n            attrs._address_unverified_text = String(r.unverified_text || r.label || (placeInput && placeInput.value) || '');\n          } else {\n            attrs._address_unverified = '';\n            attrs._address_unverified_line = '';\n            attrs._address_unverified_text = '';\n          }\n          var body = { attributes: attrs }; if (Object.keys(ups).length) body.updates = ups;\n          return postJSON(rootUrl + 'cart/update.js', body).catch(function () {});\n        })\n        .then(function () { return s; });\n    }\n    // Set 52/59: leftover Barrel or Cube On-site Assembly lines leave the cart as soon as they no longer apply.\n    var sweepBusy = false, sweepKey = '';\n    function splitSweep() {\n      if (cfg.skipCart || !splitVids().length || sweepBusy) return;\n      var s = splitRec(), keep = !!(s && s.install), key = (keep ? 'k' : 'x') + '|' + mkAddrKey(location_) + '|' + mkHere() + '|' + (cubeR ? 'c' : 'b');\n      if (keep || key === sweepKey) return;\n      sweepBusy = true;\n      var vids = splitVids();\n      fetch(rootUrl + 'cart.js', { credentials: 'same-origin', cache: 'no-store' }).then(function (r) { return window.NootkaStorefront.readJSON(r, rootUrl + 'cart.js'); })\n        .then(function (c) {\n          var ups = {}, n = 0;\n          (c && c.items || []).forEach(function (it) { if (vids.indexOf(+it.variant_id) > -1) { ups[it.key] = 0; n++; } });\n          if (!n) return null;\n          return postJSON(rootUrl + 'cart/update.js', { updates: ups }).then(function () {\n            try { document.dispatchEvent(new CustomEvent('nootka:assembly-removed', { detail: { count: n } })); } catch (e) {}\n          });\n        })\n        .then(function () { sweepKey = key; }, function () {})\n        .then(function () { sweepBusy = false; });\n    }\n    function writeUnverifiedAttrs() {\n      var r = location_ || {};\n      var unverified = !!r.unverified || r.precision !== 'address';\n      var attrs = {\n        _address_unverified: unverified ? '1' : '',\n        _address_unverified_line: unverified ? String(r.unverified_line || r.address1 || (placeInput && placeInput.value) || '') : '',\n        _address_unverified_text: unverified ? String(r.unverified_text || r.label || (placeInput && placeInput.value) || '') : ''\n      };\n      return postJSON(rootUrl + 'cart/update.js', { attributes: attrs }).catch(function () {});\n    }\n    /* Set 78: only the sauna Continue-to-checkout action replaces the cart.\n       Product/plan/Length lookups and snapshot validation ALL precede clear.\n       Clear/add are deliberately never retried automatically. */\n    function replacementRequest(path, body) {\n      var controller = new AbortController(), timer = setTimeout(function () { controller.abort(); }, 15000);\n      var options = { credentials: 'same-origin', cache: 'no-store', signal: controller.signal,\n        headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' } };\n      if (body !== undefined) {\n        options.method = 'POST'; options.headers['Content-Type'] = 'application/json'; options.body = JSON.stringify(body);\n      }\n      return fetch(rootUrl + path, options).then(function (response) {\n        return window.NootkaStorefront.readJSON(response, rootUrl + path);\n      }).finally(function () { clearTimeout(timer); });\n    }\n    function replacementRecord() {\n      var NL = window.NootkaLocation;\n      return NL && NL.get ? (NL.get() || {}) : (location_ || {});\n    }\n    function replacementSplitRecord() {\n      if (!splitTag()) return null;\n      var r = replacementRecord(), NL = window.NootkaLocation;\n      var us = splitOn() && mkHere() !== 'CA' && String(r.country || '').toUpperCase() === 'US' && r.precision === 'address';\n      var zone = NL && NL.bucket ? NL.bucket() : r.bucket || '';\n      return { us: us, install: us && window.NootkaStorefront.canSplitAssembly(r, cubeR ? 'cube' : 'barrel') && zone === 'white_glove', rec: r };\n    }\n    function replacementStamp() {\n      return JSON.stringify([selectionStamp(), saunaItem(), replacementRecord(), replacementSplitRecord(),\n        noteEl ? noteEl.value.trim() : '', agreeEl ? agreeEl.checked : true, placeInput ? placeInput.value.trim() : '']);\n    }\n    function assertReplacementSelection(context) {\n      if (context.stamp !== replacementStamp()) throw new Error('Your configuration or delivery details changed. Review your choices and press Continue again.');\n    }\n    function replacementAttributes(cart, splitRecord) {\n      var NL = window.NootkaLocation, r = replacementRecord(), attrs = {};\n      var defaults = { city: 'Delivery city', region: 'Delivery province/state', postal: 'Delivery postal code',\n        zone: 'Delivery zone', bucket: 'Delivery bucket', source: 'Delivery location source', precision: 'Delivery location precision',\n        production: 'Target production completion', delivery: 'Expected delivery by', shownOn: 'Delivery promise date' };\n      var names = Object.assign({}, defaults, NL && NL.config && NL.config.cartAttributes || {});\n      Object.keys(defaults).forEach(function (key) { attrs[defaults[key]] = ''; attrs[names[key]] = ''; });\n      Object.keys(cart.attributes || {}).forEach(function (key) {\n        if (/^_nootka_split_/.test(key) || /^_address_unverified(?:_line|_text)?$/.test(key)) attrs[key] = '';\n      });\n      SPLIT_ATTRS.forEach(function (key) { attrs[key] = ''; });\n      if (splitRecord) {\n        attrs._nootka_split_test = '1';\n        attrs._nootka_split_zone = splitRecord.us ? (splitRecord.install ? 'install' : 'delivery') : 'none';\n        attrs._nootka_split_address = String(r.label || ''); attrs._nootka_split_city = String(r.city || '');\n        attrs._nootka_split_region = String(r.region || r.province || ''); attrs._nootka_split_postal = String(r.postal || '');\n        attrs._nootka_split_country = String(r.country || '').toUpperCase();\n      }\n      var unverified = !!r.unverified || r.precision !== 'address';\n      attrs._address_unverified = unverified ? '1' : '';\n      attrs._address_unverified_line = unverified ? String(r.unverified_line || r.address1 || (placeInput && placeInput.value) || '') : '';\n      attrs._address_unverified_text = unverified ? String(r.unverified_text || r.label || (placeInput && placeInput.value) || '') : '';\n      var promise = NL && NL.promise ? NL.promise(cubeR ? 'cube' : 'barrel') || {} : {};\n      attrs[names.city] = String(r.city || ''); attrs[names.region] = String(r.region || r.province || '');\n      attrs[names.postal] = String(r.postal || ''); attrs[names.zone] = String(r.zone_id || promise.leadTime && promise.leadTime.id || '');\n      attrs[names.bucket] = String(NL && NL.bucket ? NL.bucket() || '' : r.bucket || '');\n      attrs[names.source] = String(r.source || ''); attrs[names.precision] = String(r.precision || '');\n      attrs[names.production] = String(promise.production || ''); attrs[names.delivery] = String(promise.delivery || '');\n      var now = new Date();\n      attrs[names.shownOn] = promise.production || promise.delivery ?\n        [now.getFullYear(), String(now.getMonth() + 1).padStart(2, '0'), String(now.getDate()).padStart(2, '0')].join('-') : '';\n      return attrs;\n    }\n    function assertEmptyReplacement(cart) {\n      if (!cart || !Array.isArray(cart.items) || cart.items.length || +cart.item_count !== 0) {\n        throw new Error('Shopify did not confirm an empty cart. Nothing new was added. Review your cart and press Continue again.');\n      }\n    }\n    function assertReplacementCart(cart, context) {\n      if (!cart || !Array.isArray(cart.items) || cart.items.length !== context.items.length) {\n        throw new Error('Your cart does not match this configuration. Open your cart to review it, or press Continue again to replace it.');\n      }\n      var seen = {}, total = 0;\n      cart.items.forEach(function (line) {\n        var intended = context.items.find(function (item) { return +item.id === +line.variant_id; });\n        var plan = line.selling_plan_allocation && line.selling_plan_allocation.selling_plan;\n        if (!intended || seen[intended.id] || +line.quantity !== intended.quantity ||\n          String(plan && plan.id || '') !== String(intended.selling_plan || '') ||\n          !Object.keys(intended.properties || {}).every(function (key) {\n            var value = intended.properties[key];\n            return value === '' || String((line.properties || {})[key]) === String(value);\n          })) throw new Error('Your cart items or quantities changed. Review your cart, then press Continue again to replace it.');\n        seen[intended.id] = true; total += +line.quantity;\n      });\n      if (+cart.item_count !== total || String(cart.note || '') !== context.note ||\n        !Object.keys(context.attributes).every(function (key) { return String((cart.attributes || {})[key] || '') === context.attributes[key]; })) {\n        throw new Error('Shopify could not confirm the current configuration and delivery details. Review your cart and press Continue again.');\n      }\n      return cart;\n    }\n    function verifyReplacement(context) {\n      assertReplacementSelection(context);\n      return replacementRequest('cart.js').then(function (cart) {\n        assertReplacementSelection(context); return assertReplacementCart(cart, context);\n      });\n    }\n    function replacementFailure(error) {\n      window.NootkaLengthVariants.endReplacement();\n      cancelCheckoutFallback(); lengthAddInFlight = false; setBusy(false);\n      if (errEl) {\n        errEl.textContent = (error && error.message || 'Cart replacement could not be confirmed.') +\n          ' Checkout has not started. The previous cart may already have been cleared or the new items partly added. Review your cart, or press Continue again to replace it from scratch. Nothing will be retried automatically.';\n        errEl.hidden = false; errEl.setAttribute('role', 'alert');\n      }\n    }\n    function replacementCheckout(context) {\n      if (checkoutPending) return Promise.resolve();\n      checkoutPending = true; state.checkoutReturned = false;\n      return window.NootkaLengthVariants.submitReplacementCheckout({\n        checkoutUrl: splitCheckoutUrl(cfg.checkoutUrl || rootUrl + 'checkout'),\n        hasConsent: function () { return !!(agreeEl && agreeEl.checked); },\n        verify: function () { return verifyReplacement(context); },\n        onHandoff: function () {\n          setBusy(true, 'Opening secure checkout\u2026');\n          try { sessionStorage.setItem('nk_checkout_return_v1', JSON.stringify({ path: location.pathname, at: Date.now() })); } catch (ignore) {}\n        },\n        onVerified: function () { setBusy(true, 'Opening secure checkout\u2026'); },\n        onError: replacementFailure\n      });\n    }\n    function replaceConfiguredCart(sauna, chosen, addons, products) {\n      var context = { stamp: replacementStamp(), items: [sauna].concat(addons), note: noteEl ? noteEl.value.trim() : '' };\n      var s = replacementSplitRecord(), handles = [state.product.handle].concat(chosen.map(function (input) { return input.getAttribute('data-handle') || ''; }));\n      if (s && s.install) {\n        var vid = splitVariantForHere(), h = split.handles || {}, v = split.variants || {};\n        var handle = +v.cube === vid && h.cube ? h.cube : +v.barrel === vid && h.barrel ? h.barrel : h.fallback;\n        if (!vid || !handle) return Promise.reject(new Error('Assembly options need refreshing. Reload this configurator before continuing.'));\n        context.items.push({ id: vid, quantity: 1 }); handles.push(handle);\n      }\n      var seen = {}; products = products || {};\n      // Snapshot attributes before destructive work; metadata writes must not be swallowed.\n      return replacementRequest('cart.js').then(function (before) {\n        if (!before || !Array.isArray(before.items)) throw new Error('Unable to read your existing cart. Please refresh and try again.');\n        context.attributes = replacementAttributes(before, s);\n        return Promise.all(context.items.map(function (item, index) {\n          var handle = handles[index];\n          if (!Number.isSafeInteger(+item.id) || +item.id <= 0 || item.quantity !== 1 || seen[item.id] || !handle || !/^[a-z0-9][a-z0-9-]*$/i.test(handle)) {\n            throw new Error('An item could not be verified. Reload the configurator and review your selections.');\n          }\n          seen[item.id] = true;\n          if (!products[handle]) products[handle] = replacementRequest('products/' + encodeURIComponent(handle) + '.js');\n          return products[handle].then(function (product) {\n            var variant = product && product.handle === handle && (product.variants || []).find(function (candidate) { return +candidate.id === +item.id; });\n            if (!variant || variant.available !== true) throw new Error('A selected sauna, add-on or assembly option is unavailable. Review your choices before continuing.');\n            if (item.selling_plan && !(variant.selling_plan_allocations || []).some(function (allocation) {\n              return String(allocation.selling_plan_id) === String(item.selling_plan);\n            })) throw new Error('The selected payment option could not be verified. Refresh the configurator and choose your payment option again.');\n            if (!item.selling_plan && (variant.requires_selling_plan || product.requires_selling_plan)) {\n              throw new Error('Please choose a valid payment option before continuing.');\n            }\n          });\n        }));\n      }).then(function () {\n        assertReplacementSelection(context);\n        setBusy(true, 'Replacing your cart\u2026');\n        return replacementRequest('cart/clear.js', {});\n      }).then(function (empty) {\n        assertEmptyReplacement(empty); assertReplacementSelection(context);\n        return replacementRequest('cart/update.js', { note: context.note, attributes: context.attributes });\n      }).then(function (updated) {\n        assertEmptyReplacement(updated); assertReplacementSelection(context);\n        setBusy(true, 'Adding your current configuration\u2026');\n        return replacementRequest('cart/add.js', { items: context.items });\n      }).then(function (added) {\n        if (!added || !Array.isArray(added.items) || added.items.length !== context.items.length) throw new Error('Shopify did not confirm all selected items. Please review your cart.');\n        // The canonical native-submit guard performs the authoritative readback\n        // after K1 refresh and before the POST /cart checkout navigation.\n        return null;\n      }).then(function () { return replacementCheckout(context); });\n    }\n\n    var lengthAddInFlight = false;\n    window.addEventListener('pageshow', function (event) { if (event.persisted) lengthAddInFlight = false; });\n    function selectionStamp() {\n      return JSON.stringify([state.variant && state.variant.id, bSizeKey(), bHeat(), addonItems().map(function (i) {\n        return [i.getAttribute('data-handle') || i.value, i.getAttribute('data-nk-length') || ''];\n      }).sort()]);\n    }\n    function addToCart() {\n      if (lengthAddInFlight) return;\n      var miss = firstMissing(); if (miss) { guide(miss); return; }\n      if (needsReload()) { navigate(true); return; }\n      if (errEl) errEl.hidden = true;\n      if (cfg.skipCart && agreeEl && !agreeEl.checked) {\n        if (state.cur !== 4) open(4, false);\n        var tw = agreeEl.closest('.nk-terms'); if (tw) tw.classList.add('is-err');\n        if (errEl) { errEl.textContent = copy.terms_alert || ''; errEl.hidden = !copy.terms_alert; }\n        moveTo(tw || agreeEl);\n        agreeEl.focus({ preventScroll: true });\n        return;\n      }\n      if (cfg.skipCart && !window.NootkaLengthVariants.beginReplacement()) {\n        if (errEl) { errEl.textContent = 'Please wait for your current sauna configuration to finish.'; errEl.hidden = false; }\n        return;\n      }\n      lengthAddInFlight = true; setBusy(true, 'Checking your selections\u2026');\n      var sauna, stamp, chosen, replacementBefore, replacementProducts;\n      // Set 97: synchronous validation failures must reach the same cleanup as rejected requests.\n      Promise.resolve().then(function () {\n        syncSizedAddons();\n        sauna = saunaItem(); stamp = selectionStamp(); chosen = addonItems();\n        replacementBefore = cfg.skipCart ? replacementStamp() : null; replacementProducts = cfg.skipCart ? {} : null;\n        return cfg.skipCart ? window.NootkaLengthVariants.whenCartIdle() : null;\n      }).then(function () { return Promise.all(chosen.map(function (input) { return addonCartItem(input, replacementProducts); })); }).then(function (addons) {\n        if (stamp !== selectionStamp()) throw new Error('Your selection changed. Please review it and try again.');\n        if (cfg.skipCart) {\n          if (replacementBefore !== replacementStamp()) throw new Error('Your configuration changed. Review your choices and press Continue again.');\n          return replaceConfiguredCart(sauna, chosen, addons, replacementProducts);\n        }\n        var items = [sauna].concat(addons);\n        return window.NootkaLengthVariants.reconcileCart().then(function () {\n          if (stamp !== selectionStamp()) throw new Error('Your selection changed. Please review it and try again.');\n          return Promise.resolve(writeUnverifiedAttrs()).then(function () { return splitPrep(); }).then(function (s) {\n            if (stamp !== selectionStamp()) throw new Error('Your selection changed. Please review it and try again.');\n            var vid = splitVariantForHere();\n            if (s && s.install && vid) items.push({ id: vid, quantity: 1 });\n            return post({ items: items });\n          });\n        });\n      }).then(function () { if (!cfg.skipCart) location.href = cfg.cartUrl || '/cart'; })\n        .catch(function (e) {\n          if (cfg.skipCart) { replacementFailure(e); return; }\n          lengthAddInFlight = false; setBusy(false);\n          if (errEl) { errEl.textContent = (e && e.message) || copy.error_text || 'Please review your cart and retry.'; errEl.hidden = false; }\n          if (window.console) console.warn('[nootka-configurator] add to cart failed', e && e.data || e);\n        });\n    }\n    if (atc) atc.addEventListener('click', addToCart);\n\n    /* ---------- delivery slot + location (theme-v1 shared record) ---------- */\n    var slot = $('[data-nk-delivery-slot]', root);\n    var ptype = copy.delivery_product_type || 'barrel';\n    (function moveDelivery() {\n      var scope = root.closest('.shopify-section') || document;\n      var blk = $$('.nootka-delivery-block', scope).filter(function (b) { return !slot.contains(b); })[0];\n      if (blk && slot) {\n        slot.appendChild(blk); slot.classList.add('has-block');\n        blk.setAttribute('data-nootka-product-type', ptype);\n        blk.setAttribute('data-nootka-kind', ptype);\n      }\n      // theme-v1 \"Nootka winter FAQ\" block: sits right under the delivery block inside step 4.\n      // Its visibility (snowy regions only) stays with nootka-location.js via [data-nootka-winter-faq].\n      if (slot) {\n        var faq = $$('[data-nootka-winter-faq]', scope).filter(function (f) {\n          return !slot.contains(f) && !f.closest('.nootka-delivery-block');\n        })[0];\n        if (faq) { faq.classList.add('nk-winter-faq'); slot.appendChild(faq); }\n      }\n    })();\n    /* ---------- step 4: inline address field (the delivery block's own Google-wired input, moved in) ---------- */\n    var addr = $('[data-nk-addr]', root), fieldIn = $('[data-nk-field-in]', root), fieldBox = $('[data-nk-field]', root),\n      fieldDone = $('[data-nk-field-done]', root), addrVal = $('[data-nk-addr-val]', root), dl = $('[data-nk-dl]', root),\n      peek = $('[data-nk-peek]', root), placeInput = null, editing = false;\n    (function moveInput() {\n      var inp = slot && $('[data-nootka-place-input]', slot);\n      if (!inp || !fieldIn || !addr) { if (addr) addr.hidden = true; if (peek) peek.parentNode.removeChild(peek); peek = null; return; }\n      placeInput = inp;\n      if (!inp.id) inp.id = uid + '-addr';\n      var l = $('[data-nk-addr-label]', root); if (l) l.setAttribute('for', inp.id);\n      if (copy.address_placeholder) inp.setAttribute('placeholder', copy.address_placeholder);\n      fieldIn.appendChild(inp);\n      addr.hidden = false;\n      // Enter never submits the product form; nootka-location.js handles Enter / suggestion picks itself.\n      inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') e.preventDefault(); });\n      ['focus', 'input', 'keydown', 'mousedown', 'touchstart'].forEach(function (ev) {\n        inp.addEventListener(ev, function () { lastPlaceUse = Date.now(); hookZoneCheck(); }, { passive: true });\n      });\n      // Suggestion picks happen in Google's list, outside the input.\n      document.addEventListener('mousedown', function (e) { if (e.target && e.target.closest && e.target.closest('.pac-container')) { lastPlaceUse = Date.now(); hookZoneCheck(); } }, true);\n      var go = $('[data-nk-go]', root);\n      if (go) go.addEventListener('click', function (e) {\n        e.preventDefault();\n        var q = (inp.value || '').trim();\n        if (!q) { inp.focus(); return; }\n        // Set 76: typed city/postal entries can still calculate an estimated location.\n        inp.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', code: 'Enter', keyCode: 13, which: 13, bubbles: true, cancelable: true }));\n      });\n      var chg = $('[data-nk-chg]', root);\n      if (chg) chg.addEventListener('click', function (e) { e.preventDefault(); editAddress(); });\n      // Google sizes the suggestion list to the bare input; line it up with the whole field instead.\n      function alignPac() {\n        if (document.activeElement !== inp) return;\n        var box = inp.closest('.nk-field') || inp, r = box.getBoundingClientRect();\n        $$('.pac-container').forEach(function (pc) {\n          if (pc.style.display === 'none') return;\n          var L = Math.round(r.left + window.pageXOffset) + 'px', W = Math.round(r.width) + 'px';\n          if (pc.style.left !== L) pc.style.left = L;\n          if (pc.style.width !== W) pc.style.width = W;\n        });\n      }\n      if (window.MutationObserver) {\n        var pacObs = new MutationObserver(alignPac), watched = [];\n        var watch = function () {\n          $$('.pac-container').forEach(function (pc) {\n            if (watched.indexOf(pc) < 0) { watched.push(pc); pacObs.observe(pc, { attributes: true, attributeFilter: ['style'] }); }\n          });\n          alignPac();\n        };\n        inp.addEventListener('focus', watch);\n        inp.addEventListener('input', function () { setTimeout(watch, 0); setTimeout(watch, 400); });\n        window.addEventListener('resize', alignPac);\n      }\n    })();\n    if (placeInput) {\n      // Set 76: the optional address field replaces the separate no-number form.\n      placeInput.removeAttribute('required');\n      placeInput.setCustomValidity('');\n      var help76 = $('[data-nk-addr-help]', root);\n      if (help76) help76.textContent = 'Add your street address for an accurate delivery quote. City or postal code works for estimates; you can also continue without it.';\n      try { paintSplitReq(); } catch (eP) {}\n    }\n    function locLabel() {\n      try { if (window.NootkaLocation && NootkaLocation.label) { var s = NootkaLocation.label(); if (s) return s; } } catch (e) {}\n      return location_ ? [location_.city, location_.province].filter(Boolean).join(', ') : '';\n    }\n    function editAddress() {\n      if (!placeInput) return;\n      editing = true; paintAddr();\n      if (!placeInput.value) placeInput.value = locLabel();\n      placeInput.focus();\n      try { placeInput.select(); } catch (x) {}\n    }\n    function focusAddress() {\n      if (!placeInput) return;\n      if (location_ && location_.precision !== 'address') { editAddress(); }\n      else if (!location_) { placeInput.focus(); }\n      else { var c = $('[data-nk-chg]', root); if (c) c.focus(); }\n      var r = (addr || rows[3]).getBoundingClientRect();\n      if (r.top < contentOffset() + 16 || r.bottom > window.innerHeight - 90) moveTo(addr || rows[3]);\n    }\n    // While the theme's zone check runs (it can take a few seconds on a busy connection) show that we're on it.\n    var checking = 0;\n    function setChecking(on) {\n      checking = Math.max(0, checking + (on ? 1 : -1));\n      root.toggleAttribute('data-nk-checking', checking > 0);\n      var w = $('[data-nk-checking-line]', root);\n      if (!w && fieldBox && fieldBox.parentNode) {\n        w = document.createElement('p'); w.className = 'nk-checking'; w.setAttribute('data-nk-checking-line', ''); w.setAttribute('role', 'status');\n        w.textContent = copy.checking_text || 'Checking delivery options for this address\\u2026';\n        fieldBox.parentNode.insertBefore(w, fieldBox.nextSibling);\n      }\n      if (w) w.hidden = !(checking > 0);\n    }\n    function hookZoneCheck() {\n      var zc = window.nootkaZoneCheck;\n      if (typeof zc !== 'function' || zc.__nk) return;\n      var wrapped = function () {\n        var mine = placeInput && (document.activeElement === placeInput || Date.now() - lastPlaceUse < 15000);\n        var r = zc.apply(this, arguments);\n        if (mine && r && typeof r.then === 'function') {\n          setChecking(true);\n          var done = false, off = function () { if (!done) { done = true; setChecking(false); } };\n          r.then(off, off); setTimeout(off, 20000);\n        }\n        return r;\n      };\n      wrapped.__nk = true;\n      window.nootkaZoneCheck = wrapped;\n    }\n    var lastPlaceUse = 0;\n    function paintAddr() {\n      if (!placeInput || !fieldBox || !fieldDone) return;\n      var valid = hasValidAddr();\n      var done = valid && !editing;\n      fieldBox.hidden = done; fieldDone.hidden = !done;\n      if (done && addrVal) {\n        addrVal.textContent = locLabel() + (location_.unverified ? ' (details to confirm)' : '');\n      }\n      var help = $('[data-nk-addr-help]', root);\n      if (help) help.hidden = done;\n      if (!valid && location_ && location_.precision !== 'address' && placeInput && !placeInput.getAttribute('data-nootka-typed') && !placeInput.value) {\n        var hint = [location_.city, location_.province].filter(Boolean).join(', ');\n        if (hint) placeInput.setAttribute('placeholder', 'Street address (optional)');\n      }\n      paintSplitReq();\n    }\n    if (peek) peek.addEventListener('click', function (e) { e.preventDefault(); open(4, 'address'); });\n    // Inside the configurator (and the option card), \"check delivery\" links focus the field above, never the popup.\n    window.addEventListener('click', function (e) {\n      var t = e.target && e.target.closest ? e.target.closest('[data-nootka-open-checker],[data-nootka-focus-input]') : null;\n      if (!t || !placeInput || !(root.contains(t) || (tipCard && tipCard.contains(t)))) return;\n      e.preventDefault(); e.stopPropagation();\n      closeCard();\n      if (state.cur !== 4) open(4, 'address'); else editAddress();\n    }, true);\n\n    /* ---------- delivery card: service + fee, dates, fee note ---------- */\n    function fmtDate(iso) {\n      if (!iso) return '';\n      var d = new Date(String(iso).slice(0, 10) + 'T12:00:00Z');\n      if (isNaN(d)) return '';\n      try { return d.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', timeZone: 'UTC' }); } catch (e) { return d.toDateString(); }\n    }\n    // pricesFor() rows may already carry the currency in .price (\"$750 CAD\"); show it once.\n    function feeParts(r) {\n      var p = String(r.price == null ? '' : r.price).trim(), c = String(r.currency || '').trim();\n      if (c && p.toUpperCase().slice(-c.length) === c.toUpperCase()) p = p.slice(0, -c.length).trim();\n      return { p: p, c: c };\n    }\n    function svcKey(type) { return type === 'whiteGlove' ? 'white_glove' : type; }\n    // set 33: inside an install zone the unassembled row gets its own neutral sub-line (no DIY copy in a zone).\n    function subOf(type, bk) {\n      if (type === 'unassembled' && bk === 'white_glove') return copy.svc_sub_unassembled_zone || '';\n      return copy['svc_sub_' + svcKey(type)] || '';\n    }\n    function paintCard() {\n      if (!dl) return;\n      var NL = window.NootkaLocation;\n      if (!location_ || !NL) { dl.hidden = true; dl.innerHTML = ''; return; }\n      var html = '', rowsP = [], pr = null;\n      try { rowsP = NL.pricesFor ? NL.pricesFor(ptype) || [] : []; } catch (e) { rowsP = []; }\n      try { pr = NL.promise ? NL.promise(ptype) : null; } catch (e) { pr = null; }\n      // set 33: no service rows (white glove / assembly / unassembled) until the address is confirmed; an\n      // unknown or boundary-pending visitor only sees dates and the neutral address nudge.\n      var bk = ''; try { bk = NL.bucket ? NL.bucket() : ''; } catch (e) { bk = ''; }\n      if (bk === 'unconfirmed') rowsP = [];\n      // set 42: split test + confirmed U.S. street address: one result line instead of the service rows.\n      // Inside a zone: \"On-site Assembly available at your address\"; outside: delivery only (no assembly words).\n      var sp = splitOn() && window.NootkaStorefront.isAssemblySplitState(location_) && location_.precision === 'address' && bk !== 'unconfirmed';\n      if (sp) {\n        var inZone = bk === 'white_glove' && window.NootkaStorefront.canSplitAssembly(location_, cubeR ? 'cube' : 'barrel');\n        var st = inZone ? copy.split_zone_title : copy.split_out_title, sx = inZone ? copy.split_zone_text : copy.split_out_text;\n        if (st) html += '<div class=\"nk-svc nk-svc--split' + (inZone ? ' is-zone' : '') + '\"><span class=\"nk-svc__rd\" aria-hidden=\"true\"></span><span class=\"nk-svc__tx\"><span class=\"nk-svc__nm\">' + esc(st) + '</span>' +\n          (sx ? '<span class=\"nk-svc__ds\">' + esc(sx) + '</span>' : '') + '</span></div>';\n      } else if (rowsP.length) {\n        html += rowsP.map(function (r) {\n          return '<div class=\"nk-svc\"><span class=\"nk-svc__rd\" aria-hidden=\"true\"></span><span class=\"nk-svc__tx\"><span class=\"nk-svc__nm\">' + esc(r.what || '') + '</span>' +\n            (subOf(r.type, bk) ? '<span class=\"nk-svc__ds\">' + esc(subOf(r.type, bk)) + '</span>' : '') + '</span></div>';  // set 30: the delivery rate is shown at checkout only, never here\n        }).join('');\n      } else if (location_.precision !== 'address' && copy.address_nudge && placeInput) {\n        html += '<p class=\"nk-nudge\"><button type=\"button\" data-nk-nudge>' + esc(copy.address_nudge) + '</button></p>';\n      }\n      // Set 67: Option C milestone path (Order \u2192 Build \u2192 Ship? \u2192 Assembly/Delivery) with early/mid/late\n      // month labels. Exact weekday dates from NootkaLocation.promise() stay internal; presentation only.\n      // Zone (white_glove) \u2192 Assembly wording; everyone else \u2192 Delivery. Ship is omitted when its month-third\n      // would collide with Build or the start of the buffered final window (avoids \"Ship late Dec\" beside\n      // \"Assembly late Dec \u2013 early Jan\").\n      var dts = '', datesShown = false;\n      if (pr && (pr.delivery || pr.production) && window.NootkaTimeline) {\n        datesShown = true;\n        var zone = bk === 'white_glove';\n        var path = window.NootkaTimeline.buildPath(pr, { zone: zone, lt: pr.leadTime });\n        dts = window.NootkaTimeline.renderHtml(path, esc);\n      } else if (pr && pr.text) {\n        dts = '<p class=\"nk-dt__txt\">' + esc(pr.text) + '</p>';\n      }\n      if (dts) html += '<div class=\"nk-dts\">' + dts + '</div>';\n      // No dates yet: the general note (Theme settings > Nootka delivery > Note when no dates are available).\n      if (html && !datesShown && copy.date_none_note) html += '<p class=\"nk-calm\">' + esc(copy.date_none_note) + '</p>';\n      // set 30: the \"Delivery cost: shown at checkout\" note is rendered by Liquid under this card (data-nk-checkout-note).\n      dl.innerHTML = html; dl.hidden = !html;\n      var nb = $('[data-nk-nudge]', dl); if (nb) nb.addEventListener('click', function () { editAddress(); });\n      // Set 72: Step 4 also hosts the moved .nootka-delivery-block, whose [data-nootka-date]\n      // is still painted by nootka-location.js with exact weekday rows (\"Target manufacturing\n      // completion Friday, December 11\"). Option C lives in paintCard (.nk-tl); hide the duplicate.\n      try {\n        $$('[data-nootka-date]', root).forEach(function (el) {\n          if (datesShown) {\n            el.setAttribute('hidden', '');\n            el.setAttribute('data-nk-dates-suppressed', '1');\n          } else if (el.getAttribute('data-nk-dates-suppressed') === '1') {\n            el.removeAttribute('hidden');\n            el.removeAttribute('data-nk-dates-suppressed');\n          }\n        });\n      } catch (e) {}\n    }\n    var location_ = null, deliveryPrice = null;\n    function readLocation() {\n      var rec = null;\n      try { if (window.NootkaLocation && typeof window.NootkaLocation.get === 'function') rec = window.NootkaLocation.get(); } catch (e) {}\n      if (!rec) {\n        try {\n          var key = (window.NootkaLocationConfig && window.NootkaLocationConfig.storageKey) || 'nootka_location_v3';\n          rec = JSON.parse(localStorage.getItem(key) || 'null');\n        } catch (e) {}\n      }\n      return rec && rec.confirmed ? rec : null;\n    }\n    function normPrice(v) {\n      if (v == null || v === '') return null;\n      if (typeof v === 'number') return isFinite(v) ? { cents: Math.round(v * 100) } : null;\n      if (typeof v === 'string') return /^\\s*\\d+(\\.\\d+)?\\s*$/.test(v) ? { cents: Math.round(parseFloat(v) * 100) } : { formatted: v };\n      if (typeof v === 'object') {\n        var o = { currency: v.currency || v.currency_code || '', label: v.label || '' };\n        if (v.formatted) o.formatted = v.formatted;\n        if (v.cents != null) o.cents = +v.cents;\n        else if (v.amount_cents != null) o.cents = +v.amount_cents;\n        else if (v.amount != null) o.cents = Math.round(+v.amount * 100);\n        else if (v.price != null && typeof v.price !== 'object') o.cents = Math.round(+v.price * 100);\n        return (o.formatted || o.cents != null) ? o : null;\n      }\n      return null;\n    }\n    function pickPrice(src) {\n      if (!src || typeof src !== 'object') return null;\n      var cands = [src.deliveryPrice, src.delivery_price, src.deliveryPrices, src.delivery_prices, src.prices];\n      for (var i = 0; i < cands.length; i++) {\n        var c = cands[i]; if (c == null) continue;\n        var v = (typeof c === 'object' && !Array.isArray(c) && c[ptype] !== undefined) ? c[ptype] : c;\n        if (typeof v === 'object' && v && v[ptype] === undefined && !('amount' in v || 'cents' in v || 'formatted' in v || 'price' in v || 'amount_cents' in v)) continue;\n        var n = normPrice(v); if (n) return n;\n      }\n      if (src[ptype] && typeof src[ptype] === 'object') {\n        var t = src[ptype];\n        var n2 = normPrice(t.deliveryPrice != null ? t.deliveryPrice : (t.delivery_price != null ? t.delivery_price : t.price));\n        if (n2) return n2;\n      }\n      return null;\n    }\n    function domPrice() {\n      var el = slot && $('[data-nootka-delivery-price]', slot);\n      if (!el || el.hidden) return null;\n      var c = el.getAttribute('data-amount-cents') || el.getAttribute('data-cents');\n      if (c && /^\\d+$/.test(c)) return { cents: +c };\n      var txt = (el.textContent || '').trim();\n      return txt ? { formatted: txt } : null;\n    }\n    function refreshLocation(detail) {\n      var rec = readLocation();\n      if (detail && detail.confirmed && (detail.city || detail.country)) rec = detail;\n      if (rec && location_ && (rec.label !== location_.label || rec.saved_at !== location_.saved_at)) editing = false;\n      if (rec && !location_) editing = false;\n      location_ = rec;\n      deliveryPrice = (detail && pickPrice(detail)) || pickPrice(rec) || domPrice() || (rec ? deliveryPrice : null);\n      paintDelivery(); paintSteps();\n      if (state.ready) splitSweep();\n    }\n    function paintDelivery() {\n      paintAddr(); paintCard();\n      // set 38: the old \"Delivery price line\" under the total was always blank and is gone (fees show at checkout).\n    }\n    ['nootka:location-confirmed', 'nootka:location-cleared', 'nootka:lead-times-ready', 'nootka:delivery-price'].forEach(function (ev) {\n      document.addEventListener(ev, function (e) {\n        // Set 63: a bare ZIP/postal clears storage; force the delivery step off the old city/assembly\n        // state immediately. Do not keep painting Collingwood (or any prior city) from a stale location_.\n        if (ev === 'nootka:location-cleared' || (e && e.detail && e.detail.cleared)) {\n          location_ = null;\n          deliveryPrice = null;\n          editing = true;\n          if (addrVal) addrVal.textContent = '';\n          if (dl) { dl.hidden = true; dl.innerHTML = ''; }\n          paintDelivery(); paintSteps();\n          setTimeout(function () {\n            if (!readLocation()) {\n              location_ = null; deliveryPrice = null; editing = true;\n              paintDelivery(); paintSteps();\n            } else refreshLocation();\n          }, 400);\n          return;\n        }\n        refreshLocation(e.detail);\n        setTimeout(function () { refreshLocation(); }, 400);\n      });\n    });\n    window.addEventListener('storage', function (e) { if (e.key && /nootka_location/.test(e.key)) refreshLocation(); });\n\n    /* ---------- set 46: the right store for the address (Canada = nootkasaunas.com, U.S. = /en-us/) ----------\n       Auto-switch only right after the shopper confirms a place on this page (autocomplete pick, typed address +\n       Enter / Check, popup or \"Yes, that's me\"); a saved address from an earlier visit that doesn't match the store\n       only gets a quiet \"Switch\" link. Never twice for the same address in one session (no flip loops). */\n    var mkt = cfg.market || {}, MK_KEY = 'nk_mkt_v1', userActed = false, mkBusy = false, mkEl = null;\n    ['pointerdown', 'keydown', 'touchstart'].forEach(function (ev) {\n      document.addEventListener(ev, function () { userActed = true; }, { capture: true, passive: true });\n    });\n    function mkHere() {\n      var h = String(mkt.market || '').toLowerCase();\n      if (h === 'us' || h === 'ca') return h.toUpperCase();\n      var c = String(mkt.country || (window.Shopify && Shopify.country) || '').toUpperCase();\n      return c === 'US' ? 'US' : (c ? 'CA' : '');\n    }\n    function mkWant(rec) { var c = String(rec && rec.country || '').toUpperCase(); return c === 'CA' || c === 'US' ? c : ''; }\n    function mkAddrKey(rec) { return rec ? [rec.label || '', rec.city || '', rec.country || ''].join('|').toLowerCase() : ''; }\n    function mkFill(s, to) {\n      var us = to === 'US';\n      return String(s || '').replace(/\\{site\\}/g, us ? (copy.market_site_us || 'U.S.') : (copy.market_site_ca || 'Canadian'))\n        .replace(/\\{currency\\}/g, us ? 'USD' : 'CAD');\n    }\n    function mkRecent(to, rec) {\n      try {\n        var m = JSON.parse(sessionStorage.getItem(MK_KEY) || 'null');\n        return !!(m && m.to === to && m.key === mkAddrKey(rec) && Date.now() - (m.t || 0) < 30 * 60 * 1000);\n      } catch (e) { return false; }\n    }\n    function mkReturnTo() {\n      var p = state.product, v = state.variant, base = String(cfg.root || '/').replace(/\\/$/, '');\n      var path = String((p && p.url) || location.pathname).split('?')[0];\n      if (/^https?:/.test(path)) { try { path = new URL(path).pathname; } catch (e) {} }\n      // Shopify adds the new store's prefix itself; strip ours (/en-us) from the path.\n      if (base && (path === base || path.indexOf(base + '/') === 0)) path = path.slice(base.length) || '/';\n      // Set 96: retain safe product-page query context, never carry an add-to-cart instruction.\n      if (path.charAt(0) !== '/' || path.indexOf('//') === 0) path = '/products/' + encodeURIComponent(p.handle);\n      var q = new URLSearchParams(location.search);\n      ['nk_step', 'nk_go', 'nk_addons', 'nk_addon_handles', 'nk_focus'].forEach(function (k) { q.delete(k); });\n      if (v && v.id) q.set('variant', v.id);\n      if (viewParam) q.set('view', viewParam);\n      var qs = q.toString();\n      return path + (qs ? '?' + qs : '') + location.hash;\n    }\n    // Set 52: the open step comes back at the same spot on screen; if its header is off screen, near the top.\n    function mkY(row) {\n      var y = Math.round(row.getBoundingClientRect().top);\n      return (y < headerOffset() || y > window.innerHeight * 0.6) ? headerOffset() + 24 : y;\n    }\n    function mkSwitch(to, auto) {\n      if (mkBusy || !to) return;\n      mkBusy = true;\n      var p = state.product, row = state.cur ? rows[state.cur - 1] : null;\n      try {\n        sessionStorage.setItem(CARRY_KEY, JSON.stringify({\n          h: p.handle, v: state.variant && state.variant.id, step: state.cur || 0, addons: addonItems().map(function (i) { return i.value; }), addonHandles: addonItems().map(function (i) { return i.getAttribute('data-handle'); }),\n          y: row ? mkY(row) : null, sy: row ? null : Math.round(window.pageYOffset), mk: to, plan: state.plan || null, t: Date.now()\n        }));\n        try { history.scrollRestoration = 'manual'; } catch (e) {}\n        sessionStorage.setItem(MK_KEY, JSON.stringify({ to: to, key: mkAddrKey(location_), auto: !!auto, t: Date.now() }));\n      } catch (e) {\n        // Do not navigate if this browser cannot retain the build for the destination page.\n        mkBusy = false; mkNotice('offer', to); return;\n      }\n      mkNotice('going', to);\n      var f = document.createElement('form');\n      f.method = 'post'; f.action = String(cfg.root || '/').replace(/\\/$/, '') + '/localization'; f.setAttribute('accept-charset', 'UTF-8'); f.hidden = true;\n      [['form_type', 'localization'], ['utf8', '\\u2713'], ['_method', 'put'], ['country_code', to], ['return_to', mkReturnTo()]].forEach(function (x) {\n        var i = document.createElement('input'); i.type = 'hidden'; i.name = x[0]; i.value = x[1]; f.appendChild(i);\n      });\n      document.body.appendChild(f);\n      f.submit();\n      // If the browser stays put (offline, blocked), let the shopper carry on here.\n      setTimeout(function () { if (document.visibilityState !== 'hidden') { mkBusy = false; mkNotice('', ''); } }, 9000);\n    }\n    function mkNotice(kind, to) {\n      var host = (addr && !addr.hidden) ? addr : (rows[3] && $('[data-nk-body]', rows[3]));\n      if (!host) return;\n      if (!mkEl) {\n        mkEl = document.createElement('div'); mkEl.className = 'nk-mkt'; mkEl.setAttribute('role', 'status'); mkEl.hidden = true;\n        host.insertBefore(mkEl, host.firstChild);\n      }\n      var txt = kind === 'switched' ? copy.market_switched : kind === 'offer' ? copy.market_offer : kind === 'going' ? copy.market_going : '';\n      if (!txt) { mkEl.hidden = true; mkEl.innerHTML = ''; mkEl.removeAttribute('data-kind'); return; }\n      mkEl.setAttribute('data-kind', kind);\n      mkEl.innerHTML = '<span class=\"nk-mkt__tx\">' + esc(mkFill(txt, to)) + '</span>' +\n        (kind === 'offer' && copy.market_offer_btn ? ' <button type=\"button\" class=\"nk-mkt__btn\" data-nk-mkt-go>' + esc(mkFill(copy.market_offer_btn, to)) + '</button>' : '');\n      mkEl.hidden = false;\n      var b = $('[data-nk-mkt-go]', mkEl); if (b) b.addEventListener('click', function () { mkSwitch(to, false); });\n    }\n    function mkCheck(rec, fresh) {\n      var want = mkWant(rec), here = mkHere();\n      if (mkBusy) return;\n      if (!want || !here || want === here) {\n        if (mkEl && mkEl.getAttribute('data-kind') !== 'switched') mkNotice('', '');\n        if (mkEl && mkEl.getAttribute('data-kind') === 'switched' && want && want !== carryMk) mkNotice('', '');\n        return;\n      }\n      // Set 96: only a newly confirmed Step 4 street address selects its country market.\n      // Saved locations, IP guesses, city/ZIP estimates and partial typing never auto-switch.\n      if (fresh && userActed && state.cur === 4 && rec && rec.confirmed && rec.precision === 'address' &&\n          !rec.unverified && !rec.blocked && !mkRecent(want, rec)) { mkSwitch(want, true); return; }\n      mkNotice('offer', want);\n    }\n    document.addEventListener('nootka:address-rejected', function () {\n      editing = true;\n      try { paintAddr(); paintDelivery(); paintSteps(); paintSplitReq(); } catch (e) {}\n    });\n    document.addEventListener('nootka:location-confirmed', function (e) {\n      var d = e.detail;\n      // Give nootka-location.js a moment to finish its own work (lead times, cart attributes) before we leave.\n      setTimeout(function () {\n        var current = readLocation();\n        // A new keystroke clears the shared record; an older pending confirmation must not redirect.\n        if (!d || !current || !current.confirmed || mkAddrKey(current) !== mkAddrKey(d) ||\n            current.confirmed_at !== d.confirmed_at) return;\n        mkCheck(current, true);\n      }, 700);\n    });\n\n    /* ---------- option tooltip card: one shared dark photo card (desktop popover, mobile bottom sheet) ---------- */\n    var tipCard = null, tipScrim = null, tipBtn = null;\n    function ensureCard() {\n      if (tipCard) return tipCard;\n      tipCard = document.createElement('div');\n      tipCard.className = 'nk-tc'; tipCard.hidden = true;\n      tipCard.setAttribute('role', 'dialog'); tipCard.setAttribute('aria-modal', 'false');\n      tipCard.id = uid + '-tc';\n      tipCard.setAttribute('style', root.getAttribute('style') || '');\n      tipCard.innerHTML = '<span class=\"nk-tc__grab\" aria-hidden=\"true\"></span><div class=\"nk-tc__im\" data-im></div><div class=\"nk-tc__pair\" data-pair hidden></div>' +\n        '<button type=\"button\" class=\"nk-tc__x\" data-x aria-label=\"' + esc(copy.tip_close_label || 'Close') + '\">\u00D7</button>' +\n        '<div class=\"nk-tc__bd\"><div class=\"nk-tc__sw\" data-sw hidden></div><p class=\"nk-tc__k\" data-k></p><h5 class=\"nk-tc__h\" id=\"' + uid + '-tch\"><span data-h></span><span class=\"nk-tc__pr\" data-pr></span></h5>' +\n        '<p class=\"nk-tc__p\" data-p></p><ul class=\"nk-tc__ul\" data-ul></ul><button type=\"button\" class=\"nk-tc__act\" data-act></button></div>';\n      tipCard.setAttribute('aria-labelledby', uid + '-tch');\n      tipScrim = document.createElement('div'); tipScrim.className = 'nk-tc-scrim'; tipScrim.hidden = true;\n      document.body.appendChild(tipScrim); document.body.appendChild(tipCard);\n      $('[data-x]', tipCard).addEventListener('click', function () { closeCard(true); });\n      tipScrim.addEventListener('click', function () { closeCard(true); });\n      /* Set 58: swipe down on the mobile tip sheet to close (grab + body). X and scrim still work. */\n      (function bindSheetSwipe() {\n        var startY = 0, lastY = 0, startT = 0, dragging = false, active = false;\n        function sheetOn() { return tipCard && !tipCard.hidden && tipCard.classList.contains('is-sheet'); }\n        function onDown(e) {\n          if (!sheetOn()) return;\n          /* Don't start a dismiss-drag from action controls; grab handle + body/image still swipe. */\n          if (e.target && e.target.closest && e.target.closest('[data-act], [data-sw] button, a, input, textarea, select')) return;\n          var p = e.touches ? e.touches[0] : e;\n          startY = lastY = p.clientY; startT = Date.now(); dragging = true; active = false;\n          tipCard.classList.add('is-dragging');\n        }\n        function onMove(e) {\n          if (!dragging || !sheetOn()) return;\n          var p = e.touches ? e.touches[0] : e;\n          lastY = p.clientY;\n          var dy = Math.max(0, lastY - startY);\n          if (dy > 6) active = true;\n          if (active) {\n            if (e.cancelable) e.preventDefault();\n            tipCard.style.transform = 'translateY(' + dy + 'px)';\n            tipCard.style.opacity = String(Math.max(0.4, 1 - dy / 280));\n          }\n        }\n        function onUp() {\n          if (!dragging) return;\n          dragging = false;\n          tipCard.classList.remove('is-dragging');\n          var dy = Math.max(0, lastY - startY);\n          var dt = Math.max(1, Date.now() - startT);\n          var v = dy / dt;\n          tipCard.style.transform = '';\n          tipCard.style.opacity = '';\n          if (active && (dy > 90 || (dy > 48 && v > 0.45))) closeCard(true);\n          active = false;\n        }\n        tipCard.addEventListener('touchstart', onDown, { passive: true });\n        tipCard.addEventListener('touchmove', onMove, { passive: false });\n        tipCard.addEventListener('touchend', onUp);\n        tipCard.addEventListener('touchcancel', onUp);\n        tipCard.addEventListener('pointerdown', function (e) { if (e.pointerType === 'touch' || e.pointerType === 'pen') onDown(e); });\n        window.addEventListener('pointermove', function (e) { if (dragging) onMove(e); });\n        window.addEventListener('pointerup', function () { if (dragging) onUp(); });\n      })();\n      // Set 40: Left / Right switch inside the Door side popup (refills the card in place).\n      // Set 43: the switch now also SELECTS that side (same as tapping the option: price, variant, render, URL),\n      // so the popup and the option cards never disagree.\n      $('[data-sw]', tipCard).addEventListener('click', function (e) {\n        var sb = e.target.closest && e.target.closest('[data-sw-v]'); if (!sb) return;\n        e.preventDefault(); e.stopPropagation();\n        var v = sb.getAttribute('data-sw-v'), g = groups[heroRole];\n        var host = g && $$('.nk-opt', g.box).filter(function (x) { return norm(x.getAttribute('data-value')) === norm(v); })[0];\n        var inp = host && $('input', host);\n        if (inp && !inp.disabled && state.sel[heroRole] !== host.getAttribute('data-value')) choose(heroRole, host.getAttribute('data-value'));\n        var nb = host && $('[data-nk-otip]', host);\n        if (nb) openCard(nb, true);\n      });\n      $('[data-act]', tipCard).addEventListener('click', function () {\n        var b = tipBtn; if (!b) return;\n        var host = b.closest('.nk-opt, .nk-ad, .nk-lt');\n        var inp = host && $('input', host);\n        if (inp && !inp.disabled) {\n          if (inp.type === 'radio') { if (!inp.checked) inp.click(); }\n          else inp.click();\n        }\n        closeCard(true);\n      });\n      return tipCard;\n    }\n    function isSheet() { return window.matchMedia ? window.matchMedia('(max-width: 749px)').matches : window.innerWidth < 750; }\n    function closeCard(refocus) {\n      if (!tipCard || tipCard.hidden) return;\n      tipCard.hidden = true; tipScrim.hidden = true;\n      tipCard.classList.remove('is-dragging');\n      tipCard.style.transform = ''; tipCard.style.opacity = '';\n      var b = tipBtn; tipBtn = null;\n      if (b) { b.setAttribute('aria-expanded', 'false'); b.classList.remove('is-act'); if (refocus) b.focus({ preventScroll: true }); }\n    }\n    function placeCard(b) {\n      var c = tipCard;\n      c.style.left = c.style.top = '';\n      c.classList.remove('is-up');\n      if (isSheet()) return;\n      var r = b.getBoundingClientRect(), w = c.offsetWidth, h = c.offsetHeight, vw = document.documentElement.clientWidth;\n      var left = Math.max(12, Math.min(vw - w - 12, r.left + r.width / 2 - w / 2));\n      var top = r.bottom + 10;\n      if (top + h > window.innerHeight - 8 && r.top - h - 10 > 8) { top = r.top - h - 10; c.classList.add('is-up'); }\n      c.style.left = (left + window.scrollX) + 'px';\n      c.style.top = (top + window.scrollY) + 'px';\n      c.style.setProperty('--ax', Math.max(18, Math.min(w - 18, r.left + r.width / 2 - left)) + 'px');\n    }\n    function openCard(b, keepPos) {\n      var key = b.getAttribute('data-nk-otip'), tp = tipFor(key); if (!tp) return;\n      ensureCard();\n      if (tipBtn && tipBtn !== b) { tipBtn.setAttribute('aria-expanded', 'false'); tipBtn.classList.remove('is-act'); }\n      tipBtn = b;\n      var name = b.getAttribute('data-nk-otip-name') || '';\n      var host = b.closest('.nk-opt, .nk-ad, .nk-lt');\n      var prEl = host && (host.querySelector('[data-nk-pr]') || host.querySelector('.nk-ad__pr'));\n      var c = tipCard, im = $('[data-im]', c);\n      // Set 40: Door side options with a \"Layout image (aerial)\": exterior render (side \u00D7 current door type) + from above.\n      var isPair = !!(calm && heroRole && tp.layoutImg && values[heroRole] && values[heroRole].some(function (v) { return norm(v) === norm(key); }));\n      var pairEl = $('[data-pair]', c), swEl = $('[data-sw]', c);\n      c.classList.toggle('is-pair', isPair);\n      pairEl.hidden = !isPair; swEl.hidden = !isPair;\n      if (isPair) {\n        var rr = renderFor(key, selOr(badgeRole));\n        var ext = rr ? (rr.card || rr.hero) : tp.img;\n        var fig = function (u, cap, cls) {\n          return '<figure class=\"nk-tc__fig ' + cls + '\"><span style=\"background-image:' + esc(bgUrl(u)) + '\"></span>' + (cap ? '<figcaption>' + esc(cap) + '</figcaption>' : '') + '</figure>';\n        };\n        pairEl.innerHTML = (ext ? fig(ext, copy.tip_ext_caption, rr ? 'is-render' : (tp.fit === 'contain' ? 'is-contain' : '')) : '') + fig(tp.layoutImg, copy.tip_aerial_caption, 'is-aerial');\n        // Set 43: white pill = the side shown in the popup; aria-pressed + a small dot = the side that is selected.\n        var selSide = state.sel[heroRole];\n        swEl.innerHTML = values[heroRole].map(function (v) {\n          var on = norm(v) === norm(key), isSel = selSide != null && norm(v) === norm(selSide);\n          var cls = (on ? 'on' : '') + (isSel ? (on ? ' ' : '') + 'is-sel' : '');\n          return '<button type=\"button\" data-sw-v=\"' + esc(v) + '\" aria-pressed=\"' + isSel + '\"' + (cls ? ' class=\"' + cls + '\"' : '') + '>' + esc(lab(v).btn) + '</button>';\n        }).join('');\n      } else { pairEl.innerHTML = ''; swEl.innerHTML = ''; }\n      c.classList.toggle('no-im', !tp.img && !isPair);\n      im.style.backgroundImage = tp.img ? 'url(\"' + String(tp.img).replace(/\"/g, '%22') + '\")' : '';\n      im.classList.toggle('is-contain', tp.fit === 'contain');\n      im.style.backgroundPosition = tp.tpos || '';\n      $('[data-k]', c).textContent = tp.eyebrow || '';\n      $('[data-h]', c).textContent = tp.title || name;\n      $('[data-pr]', c).textContent = prEl ? prEl.textContent : '';\n      $('[data-p]', c).textContent = tp.text || '';\n      $('[data-ul]', c).innerHTML = String(tp.bullets || '').split(/\\r?\\n/).map(function (l) { return l.trim(); }).filter(Boolean).map(function (l) {\n        return l.charAt(0) === '?' ? '<li class=\"is-pending\" data-pending=\"' + esc(copy.pending_label || '') + '\">' + esc(l.slice(1).trim()) + '</li>' : '<li>' + esc(l) + '</li>';\n      }).join('');\n      $('[data-ul]', c).hidden = !$('[data-ul]', c).children.length;\n      // sheet action: Keep/Choose for options, Add/Remove for add-ons and the lights toggle\n      var act = $('[data-act]', c), inp = host && $('input', host), txt = '';\n      if (inp && !inp.disabled) {\n        if (inp.type === 'radio') txt = String(inp.checked ? copy.tip_keep_label : copy.tip_choose_label || '').replace('{option}', name);\n        else txt = inp.checked ? copy.tip_remove_label : copy.tip_add_label;\n      }\n      act.textContent = txt || ''; act.hidden = !txt;\n      var sheet = isSheet();\n      c.classList.toggle('is-sheet', sheet);\n      c.setAttribute('aria-modal', sheet ? 'true' : 'false');\n      c.hidden = false; tipScrim.hidden = !sheet;\n      b.setAttribute('aria-expanded', 'true'); b.setAttribute('aria-controls', c.id); b.classList.add('is-act');\n      if (!keepPos) placeCard(b);\n      var fo = keepPos && $('[data-sw] .on', c);\n      (fo || $('[data-x]', c)).focus({ preventScroll: true });\n    }\n    root.addEventListener('click', function (e) {\n      var b = e.target.closest && e.target.closest('[data-nk-otip]');\n      if (!b) return;\n      e.preventDefault(); e.stopPropagation();   // inside a <label>: never toggle the option itself\n      if (tipBtn === b && tipCard && !tipCard.hidden) closeCard(false); else openCard(b);\n    });\n    document.addEventListener('click', function (e) {\n      if (!tipCard || tipCard.hidden) return;\n      if (tipCard.contains(e.target) || (tipBtn && tipBtn.contains(e.target))) return;\n      closeCard(false);\n    });\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape' && tipCard && !tipCard.hidden) { closeCard(true); return; }\n      if (e.key === 'Tab' && tipCard && !tipCard.hidden && tipCard.classList.contains('is-sheet')) {\n        var f = $$('button:not([hidden])', tipCard).filter(function (x) { return x.offsetParent !== null; });\n        if (!f.length) return;\n        if (e.shiftKey && document.activeElement === f[0]) { e.preventDefault(); f[f.length - 1].focus(); }\n        else if (!e.shiftKey && document.activeElement === f[f.length - 1]) { e.preventDefault(); f[0].focus(); }\n      }\n    });\n    window.addEventListener('resize', function () { if (tipCard && !tipCard.hidden && tipBtn) { if (isSheet() !== tipCard.classList.contains('is-sheet')) closeCard(false); else placeCard(tipBtn); } });\n\n    /* ---------- simple text toggletips (deposit, payment) ---------- */\n    function closeTips(except) {\n      $$('[data-nk-tip][aria-expanded=\"true\"]').forEach(function (b) {\n        if (b === except) return;\n        b.setAttribute('aria-expanded', 'false');\n        var p = document.getElementById(b.getAttribute('aria-controls')); if (p) p.hidden = true;\n      });\n    }\n    function placeTip(pop) {\n      pop.classList.remove('is-left', 'is-right');\n      var r = pop.getBoundingClientRect();\n      if (r.right > window.innerWidth - 8) pop.classList.add('is-left');\n      else if (r.left < 8) pop.classList.add('is-right');\n    }\n    root.addEventListener('click', function (e) {\n      var b = e.target.closest && e.target.closest('[data-nk-tip]');\n      if (!b) return;\n      e.preventDefault(); e.stopPropagation();\n      var pop = document.getElementById(b.getAttribute('aria-controls'));\n      var openNow = b.getAttribute('aria-expanded') !== 'true';\n      closeTips(b);\n      b.setAttribute('aria-expanded', openNow ? 'true' : 'false');\n      if (pop) { pop.hidden = !openNow; if (openNow) placeTip(pop); }\n    });\n    document.addEventListener('click', function (e) { if (!(e.target.closest && e.target.closest('.nk-tip'))) closeTips(); });\n    document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeTips(); });\n\n    /* ---------- sticky bar ---------- */\n    var sticky = $('[data-nk-sticky]', root);\n    var ctaVisible = false;\n    if (sticky) {\n      sticky.setAttribute('style', root.getAttribute('style') || '');\n      document.body.appendChild(sticky);\n      sticky.hidden = false;\n      document.body.classList.add('nk-has-sticky');\n      if (calm) document.body.classList.add('nk-has-sticky--calm');\n      $('[data-nk-sticky-btn]', sticky).addEventListener('click', function () {\n        var m = firstMissing();\n        if (m && (stickyMode === 'add' && !calm || m.n <= (state.cur || nextStep()))) { guide(m); return; }\n        if (calm && state.cur !== 4) { var nx = nextStep(); if (state.cur) state.done[state.cur] = true; open(nx, true); return; }\n        if (stickyMode === 'continue' && state.cur !== 4) {\n          var n = Math.min(4, (state.cur || 0) + 1);\n          if (state.cur) state.done[state.cur] = true;\n          open(n, true);\n          return;\n        }\n        addToCart();\n      });\n      if ('IntersectionObserver' in window && atc) {\n        new IntersectionObserver(function (en) { ctaVisible = en[0].isIntersecting; paintSticky(); }, { threshold: 0.6 }).observe(atc);\n      }\n    }\n    function nextStep() {\n      if (state.cur && state.cur < 4) return state.cur + 1;\n      for (var i = 1; i <= 4; i++) if (!state.done[i]) return i;\n      return 4;\n    }\n    // Set 63 #4: one concise live build line for the sticky bar and image pill (no full variant title).\n    function liveBuildSummary() {\n      var parts = [], size = selOr('size');\n      if (size) {\n        var sz = String(lab(size).sum || lab(size).btn || size).replace(/\\s*(?:ft|feet)\\b/i, ' ft').replace(/\\s+/g, ' ').trim();\n        if (sz) parts.push(sz);\n      }\n      var heat = selOr('heat');\n      if (heat) {\n        var hl = lab(heat).sum || lab(heat).btn || heat, hm = String(heat) + ' ' + hl;\n        if (/no[ -]?heater/i.test(hm)) parts.push('No heater');\n        else if (/wood|stove/i.test(hm)) parts.push('Wood');\n        else if (/electric/i.test(hm)) parts.push('Electric');\n        else if (hl) parts.push(hl);\n      }\n      ['roof', 'window', 'door', 'side'].forEach(function (r) {\n        var v = selOr(r); if (v == null || v === '') return;\n        // Cube \"side\" is Left/Right configuration \u2014 keep a short label when present.\n        var sm = lab(v).sum || lab(v).btn; if (sm) parts.push(sm);\n      });\n      // Wi-Fi / LTE only when actually selected (never list the standard touchscreen).\n      if (state.product && state.product.hasConn && state.variant) {\n        if (state.variant.conn === 'wifi') parts.push((copy.ctrl_wifi || 'Wi-Fi').replace(/\\s*\\(.*?\\)\\s*/g, '').trim() || 'Wi-Fi');\n        else if (state.variant.conn === 'lte') parts.push((copy.ctrl_lte || 'LTE').replace(/\\s*\\(.*?\\)\\s*/g, '').trim() || 'LTE');\n      }\n      // De-dupe while preserving order (lab.sum can repeat a short form).\n      var seen = {}, out = [];\n      parts.forEach(function (p) {\n        var k = String(p).toLowerCase();\n        if (!k || seen[k]) return;\n        seen[k] = 1; out.push(p);\n      });\n      return out.join(' \u00B7 ');\n    }\n    function paintSticky() {\n      if (!sticky) return;\n      var btn = $('[data-nk-sticky-btn]', sticky);\n      var m = firstMissing();\n      btn.classList.toggle('is-need', !!m);\n      if (calm) {\n        var nx = nextStep();\n        btn.textContent = m && m.n <= (state.cur || nx) ? chooseText(m) : state.cur === 4 ? copy.atc_label : String(copy.sticky_next_label || copy.continue_label || '').replace('{step}', copy['step' + nx + '_title'] || '');\n        var ss = $('[data-nk-sticky-sum]', sticky);\n        var sn = ss && ss.parentNode && $('b', ss.parentNode);\n        var summary = liveBuildSummary();\n        // One summary only \u2014 hide the full product title that used to run into sticky-sum.\n        if (sn) { sn.textContent = ''; sn.setAttribute('hidden', ''); }\n        if (ss) { ss.textContent = summary; ss.removeAttribute('hidden'); }\n        sticky.hidden = ctaVisible && state.cur === 4;\n        return;\n      }\n      btn.textContent = m && (stickyMode === 'add' || m.n <= (state.cur || 1)) ? chooseText(m) : (stickyMode === 'continue' && state.cur !== 4) ? copy.continue_label : copy.atc_label;\n      sticky.hidden = ctaVisible && state.cur === 4;\n    }\n\n    /* ---------- starting price line ---------- */\n    var fromEl = $('[data-nk-from]', root);\n    if (fromEl && copy.from_line && cfg.fromPrice != null) {\n      var fp = esc(fmt(cfg.fromPrice)) + ' <small>' + esc(cfg.currency || '') + '</small>';\n      fromEl.innerHTML = esc(copy.from_line).replace('{price}', '<b>' + fp + '</b>');\n      fromEl.hidden = !!state.touched;\n    }\n\n\n\n    /* ---------- set 58d: mobile swipe cue on the photo gallery ---------- */\n    var swipeCue = null, swipeCueTimer = null, swipeCueDone = false;\n    function swipeCueHost() {\n      var scope = root.closest('.shopify-section') || document;\n      return $('.product__media__wrapper', scope) || heroHost();\n    }\n    function syncSwipeCue() {\n      if (!swipeCue) return;\n      var mobile = window.matchMedia && window.matchMedia('(max-width: 768px)').matches;\n      var heroOn = !!(hero && hero.classList.contains('is-on') && state.hero && !state.landing);\n      var show = mobile && !swipeCueDone && !heroOn;\n      swipeCue.hidden = !show;\n      swipeCue.setAttribute('aria-hidden', show ? 'false' : 'true');\n      if (show && !swipeCueTimer) {\n        swipeCueTimer = setTimeout(function () { dismissSwipeCue(false); }, 4500);\n      }\n    }\n    function dismissSwipeCue(mark) {\n      if (swipeCueTimer) { clearTimeout(swipeCueTimer); swipeCueTimer = null; }\n      if (swipeCue) swipeCue.classList.add('is-gone');\n    }\n    function flickityApi() {\n      var scope = root.closest('.shopify-section') || document;\n      var show = $('[data-product-slideshow], .product__grid--slides', scope);\n      if (!show) return null;\n      // Pipeline stores Flickity on the element via jQuery data or Flickity.data\n      try {\n        if (window.Flickity && typeof Flickity.data === 'function') return Flickity.data(show);\n      } catch (e) {}\n      try {\n        if (window.jQuery) {\n          var $el = window.jQuery(show);\n          if ($el.data && $el.data('flickity')) return $el.data('flickity');\n        }\n      } catch (e2) {}\n      return show._flickity || show.flickityInstance || null;\n    }\n    function galleryStep(dir) {\n      setStage('photo'); endLanding();\n      var flk = flickityApi();\n      var moved = false;\n      if (flk) {\n        if (dir < 0 && typeof flk.previous === 'function') { flk.previous(true, false); moved = true; }\n        else if (dir > 0 && typeof flk.next === 'function') { flk.next(true, false); moved = true; }\n      }\n      if (!moved) {\n        // Fallback: click theme arrow buttons if present\n        var scope = root.closest('.shopify-section') || document;\n        var btn = $(dir < 0 ? '.flickity-prev-button, .product__media__nav--prev, [data-media-prev]' : '.flickity-next-button, .product__media__nav--next, [data-media-next]', scope);\n        if (btn) { btn.click(); moved = true; }\n        if (!moved) {\n          var thumbs = $$('[data-slideshow-thumbnail][data-media-select]', scope);\n          var selected = $('[data-media-slide].is-selected', scope);\n          var current = selected && selected.getAttribute('data-media-id');\n          var index = thumbs.findIndex(function (t) { return t.getAttribute('data-media-select') === current; });\n          if (thumbs.length) thumbs[(index + dir + thumbs.length) % thumbs.length].click();\n        }\n      }\n      // Always dismiss the cue once the shopper taps an arrow (even if Flickity API is late).\n      dismissSwipeCue(true);\n    }\n    function initSwipeCue() {\n      if (swipeCue) { syncSwipeCue(); return; }\n      var host = swipeCueHost();\n      if (!host) return;\n      if (getComputedStyle(host).position === 'static') host.style.position = 'relative';\n      swipeCue = document.createElement('div');\n      swipeCue.className = 'nk-swipe-cue';\n      swipeCue.hidden = true;\n      swipeCue.setAttribute('aria-hidden', 'true');\n      swipeCue.innerHTML =\n        '<button type=\"button\" class=\"nk-swipe-cue__arr nk-swipe-cue__arr--prev\" aria-label=\"Previous photo\">' +\n          '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M14.5 6l-6 6 6 6\"/></svg></button>' +\n        '<span class=\"nk-swipe-cue__pill\" role=\"status\"><i></i><i></i><i></i><b>Swipe for more photos</b></span>' +\n        '<button type=\"button\" class=\"nk-swipe-cue__arr nk-swipe-cue__arr--next\" aria-label=\"Next photo\">' +\n          '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9.5 6l6 6-6 6\"/></svg></button>';\n      host.appendChild(swipeCue);\n      var prev = $('.nk-swipe-cue__arr--prev', swipeCue);\n      var next = $('.nk-swipe-cue__arr--next', swipeCue);\n      if (prev) prev.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); galleryStep(-1); });\n      if (next) next.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); galleryStep(1); });\n      ['pointerdown', 'mousedown', 'touchstart'].forEach(function (ev) {\n        swipeCue.addEventListener(ev, function (e) { e.stopPropagation(); }, { passive: true });\n      });\n      var scope = root.closest('.shopify-section') || document;\n      var show = $('[data-product-slideshow], .product__grid--slides', scope);\n      // Ignore Flickity's first settle/change (fires on init). Only a real drag or later\n      // slide change means the shopper found the gallery.\n      var cueArmAt = Date.now() + 900;\n      if (show) {\n        function onUserGallery(ev) {\n          if (Date.now() < cueArmAt) return;\n          dismissSwipeCue(true);\n        }\n        ['dragStart.flickity', 'change.flickity'].forEach(function (ev) {\n          show.addEventListener(ev, onUserGallery);\n        });\n      }\n      var startX = null, startY = null;\n      host.addEventListener('pointerdown', function (e) { startX = e.clientX; startY = e.clientY; }, { passive: true, capture: true });\n      host.addEventListener('pointerup', function (e) {\n        if (startX != null && Math.abs(e.clientX - startX) > 30 && Math.abs(e.clientX - startX) > Math.abs(e.clientY - startY)) {\n          // Set 65: a horizontal drag over the photo gallery (hero off) is enough to dismiss the cue.\n          // Do not tear down the configured render / landing hero \u2014 that hid the rail and blanked cells.\n          if (nkStage === 'photo' || !(hero && hero.classList.contains('is-on'))) dismissSwipeCue(true);\n          else dismissSwipeCue(true);\n        }\n        startX = startY = null;\n      }, { passive: true, capture: true });\n      window.addEventListener('resize', syncSwipeCue);\n      syncSwipeCue();\n    }\n\n    /* ---------- set 58: mobile Views chip + sticky image top offset ---------- */\n    (function set58Chrome() {\n      function headerOffset() {\n        var h = document.querySelector('.theme__header') || document.querySelector('[data-header-height]') || document.querySelector('header');\n        if (!h) return 0;\n        var r = h.getBoundingClientRect();\n        /* The theme fixes the header's wrapper, not necessarily the header itself.\n           Use its visible bottom edge (not full height) so a translated/hidden\n           header never leaves an empty gap above the mobile sticky image. */\n        if (!r.height || window.getComputedStyle(h).visibility === 'hidden') return 0;\n        var stuck = document.documentElement.classList.contains('js__header__stuck') || document.body.classList.contains('js__header__stuck');\n        var node = h;\n        while (node && node !== document.body && node !== document.documentElement) {\n          var cs = window.getComputedStyle(node);\n          if (cs.position === 'fixed' || cs.position === 'sticky' || cs.position === '-webkit-sticky') {\n            stuck = true;\n            break;\n          }\n          node = node.parentElement;\n        }\n        /* Mobile cfg: if the header still occupies the top of the viewport (Pipeline often\n           keeps it in flow until scroll), treat that visible bottom as the sticky offset so\n           overlays/image never sit half-under the nav. */\n        if (!stuck && r.top <= 1 && r.bottom > 40) stuck = true;\n        return stuck ? Math.max(0, Math.round(r.bottom)) : 0;\n      }\n      var mediaFrame = 0, mediaCheck = false, viewportMeasure = null;\n      function mediaProperty(name, value) {\n        var style = document.documentElement.style;\n        if (style.getPropertyValue(name) !== value) style.setProperty(name, value);\n      }\n      function measureMediaHeights() {\n        if (!window.matchMedia('(max-width: 767px)').matches) return;\n        if (!viewportMeasure) {\n          viewportMeasure = document.createElement('div');\n          viewportMeasure.setAttribute('aria-hidden', 'true');\n          viewportMeasure.style.cssText = 'position:fixed;top:0;left:0;width:0;height:100vh;visibility:hidden;pointer-events:none;overflow:hidden;contain:strict;';\n          document.body.appendChild(viewportMeasure);\n        }\n        var vh = viewportMeasure.getBoundingClientRect().height;\n        mediaProperty('--nk-media-expanded-height', Math.min(vh * 0.38, 300) + 'px');\n        mediaProperty('--nk-media-compact-height', Math.min(vh * 0.26, 200) + 'px');\n      }\n      function applyMediaTop(checkCompact) {\n        if (!(window.matchMedia && window.matchMedia('(max-width: 767px)').matches)) {\n          ['--nk-media-sticky-top', '--nk-content-scroll-top', '--nk-media-expanded-height', '--nk-media-compact-height'].forEach(function (name) {\n            document.documentElement.style.removeProperty(name);\n          });\n          document.body.classList.remove('nk-media-compact');\n          if (viewportMeasure) { viewportMeasure.remove(); viewportMeasure = null; }\n          return;\n        }\n        var top = headerOffset(), contentTop = contentOffset() + 20;\n        mediaProperty('--nk-media-sticky-top', top + 'px');\n        mediaProperty('--nk-content-scroll-top', contentTop + 'px');\n        if (!checkCompact) return;\n        var y = window.pageYOffset || document.documentElement.scrollTop || 0;\n        var compact = document.body.classList.contains('nk-media-compact');\n        if (!compact && y > 160) document.body.classList.add('nk-media-compact');\n        else if (compact && y < 60) document.body.classList.remove('nk-media-compact');\n      }\n      function scheduleMediaTop(checkCompact) {\n        mediaCheck = mediaCheck || checkCompact === true;\n        if (mediaFrame) return;\n        mediaFrame = window.requestAnimationFrame(function () {\n          mediaFrame = 0;\n          var check = mediaCheck; mediaCheck = false;\n          applyMediaTop(check);\n        });\n      }\n      var observedMedia = $('.product__media__wrapper', root.closest('.shopify-section') || document);\n      if (observedMedia && typeof ResizeObserver !== 'undefined') new ResizeObserver(function () { scheduleMediaTop(false); }).observe(observedMedia);\n      measureMediaHeights();\n      applyMediaTop(true);\n      window.addEventListener('resize', function () { measureMediaHeights(); scheduleMediaTop(false); });\n      window.addEventListener('scroll', function () { scheduleMediaTop(true); }, { passive: true });\n      if ('MutationObserver' in window) {\n        new MutationObserver(function () { scheduleMediaTop(false); }).observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n      }\n\n      function bindRailToggle(hero) {\n        if (!hero || hero.querySelector('.nk-rail-toggle')) return;\n        var rail = hero.querySelector('.nk-hero__rail');\n        if (!rail) return;\n        hero.__nkRailToggle = true;\n        var btn = document.createElement('button');\n        btn.type = 'button';\n        btn.className = 'nk-rail-toggle';\n        btn.setAttribute('aria-expanded', 'false');\n        btn.setAttribute('aria-controls', rail.id || '');\n        if (!rail.id) { rail.id = uid + '-rail'; btn.setAttribute('aria-controls', rail.id); }\n        btn.innerHTML = '<span data-lab>Views</span>';\n        rail.insertBefore(btn, rail.firstChild);\n        function sync() {\n          var open = hero.classList.contains('is-rail-open');\n          btn.setAttribute('aria-expanded', open ? 'true' : 'false');\n          btn.querySelector('[data-lab]').textContent = open ? 'Close' : 'Views';\n        }\n        btn.addEventListener('click', function (e) {\n          e.preventDefault(); e.stopPropagation();\n          hero.classList.toggle('is-rail-open');\n          sync();\n        });\n        ['pointerdown', 'mousedown', 'touchstart'].forEach(function (ev) {\n          btn.addEventListener(ev, function (e) { e.stopPropagation(); }, { passive: true });\n        });\n        sync();\n      }\n      // Existing heroes (pre-hero + JS-built)\n      $$('.nk-hero.has-rail', document).forEach(bindRailToggle);\n      // When a hero is created later, observe the product media host\n      var host = root.closest('.shopify-section') || document;\n      if ('MutationObserver' in window) {\n        new MutationObserver(function (muts) {\n          muts.forEach(function (m) {\n            (m.addedNodes || []).forEach(function (n) {\n              if (!n || n.nodeType !== 1) return;\n              if (n.classList && n.classList.contains('nk-hero')) bindRailToggle(n);\n              if (n.closest) bindRailToggle(n.closest('.nk-hero')); \n              $$('.nk-hero.has-rail', n).forEach(bindRailToggle);\n            });\n          });\n        }).observe(host, { childList: true, subtree: true });\n      }\n    })();\n\n    /* ---------- set 52: hold the landing spot after a reload ----------\n       Images, K1's widget and the delivery block load after the first paint and push content around; re-apply the\n       target until the page settles (about 2.5 s), and stop the moment the shopper scrolls or touches the page. */\n    function holdSpot(target, checkoutReturn) {\n      if (state.checkoutReturned && !checkoutReturn) return;\n      try { history.scrollRestoration = 'manual'; } catch (e) {}\n      var stop = false, t0 = Date.now();\n      function quit() { stop = true; }\n      ['wheel', 'touchstart', 'keydown', 'pointerdown'].forEach(function (ev) { window.addEventListener(ev, quit, { once: true, passive: true, capture: true }); });\n      function put() {\n        if (stop || (state.checkoutReturned && !checkoutReturn)) return;\n        var y = target(); if (typeof y !== 'number' || isNaN(y)) return;\n        if (Math.abs(window.pageYOffset - y) > 2) { try { SE.scrollTop = y; } catch (e) {} window.scrollTo(0, y); }\n      }\n      [0, 50, 200, 450, 800, 1200, 1800, 2500].forEach(function (ms) { setTimeout(put, ms); });\n      window.addEventListener('load', function () { put(); setTimeout(put, 300); });\n      setTimeout(function () { stop = true; try { history.scrollRestoration = 'auto'; } catch (e) {} }, Math.max(3200, Date.now() - t0));\n    }\n\n    /* ---------- start ---------- */\n    // Set 60: normalize the initial server gallery too, not only later build switches.\n    if (barrelR) swapGallery(loaded);\n\n    // Set 58d: open on real photos (or the barrel lifestyle landing photo), not the configured 3D render.\n    // Set 53/55 used to force state.hero=true so the first paint was the build render; that skipped the\n    // product gallery. Keep the landing lifestyle photo when Set 54 marked it; otherwise leave the hero\n    // off so Flickity photos show until the shopper picks an option, taps a view, or \"Back to your sauna\".\n    if (LAND && barrelR) {\n      state.hero = true;\n    } else {\n      state.hero = false;\n      // Server-drawn barrel pre-hero starts with .is-on; turn it off so the photo gallery is visible.\n      (function hidePre() {\n        var scope = root.closest('.shopify-section') || document;\n        $$('.nk-hero--pre, [data-nk-hero-pre]', scope).forEach(function (el) {\n          el.classList.remove('is-on');\n        });\n      })();\n    }\n    update();\n    // Mobile swipe cue over the photo gallery (arrows + pill); skipped when the build/landing hero covers it.\n    if (typeof initSwipeCue === 'function') initSwipeCue();\n    if (typeof bindStageToFlickity === 'function') bindStageToFlickity();\n    initMobileFullbleed();\n    try { history.replaceState(histState(state.product, state.variant), '', location.href); } catch (e) {}\n    state.ready = true;\n    schedulePrefetch();\n    refreshLocation();\n    var startStep = +params.get('nk_step');\n    if (startStep >= 1 && startStep <= 4) {\n      open(startStep, false);\n      holdSpot(function () {\n        var rw0 = rows[startStep - 1];\n        // Set 46/52: after a reload put the open step back where it was on screen (else near the top).\n        var want = carryY != null ? carryY : headerOffset() + 24;\n        return Math.max(0, rw0.getBoundingClientRect().top + window.pageYOffset - want);\n      });\n    } else {\n      paintSteps();\n      if (carrySY != null) holdSpot(function () { return carrySY; });\n    }\n    if (carryMk) mkNotice('switched', carryMk);\n    if (params.get('nk_go') === '1' && isLoaded(state.product)) {\n      // Came back from a navigate-to-build: wait for K1 to inject its inputs, then add.\n      var t0 = Date.now();\n      setBusy(true);\n      (function waitK1() {\n        var ready = !hasK1() || (form && form.querySelector('input[name=\"selling_plan\"]'));\n        if (ready || Date.now() - t0 > 4000) {\n          setBusy(false);\n          if (ready) addToCart();\n          return;\n        }\n        setTimeout(waitK1, 150);\n      })();\n    }\n    if (params.get('nk_focus') === 'address' && state.cur === 4) setTimeout(focusAddress, 80);\n    if (params.has('nk_step') || params.has('nk_go') || params.has('nk_addons') || params.has('nk_focus')) {\n      ['nk_step', 'nk_go', 'nk_addons', 'nk_addon_handles', 'nk_focus'].forEach(function (k) { params.delete(k); });\n      var qs = params.toString();\n      try { history.replaceState(history.state, '', location.pathname + (qs ? '?' + qs : '')); } catch (e) {}\n    }\n    window.addEventListener('load', function () { refreshLocation(); });\n    mkCheck(location_, false);\n    function restoreCheckoutReturn() {\n      var marker = null;\n      try { marker = JSON.parse(sessionStorage.getItem('nk_checkout_return_v1') || 'null'); } catch (e) {}\n      if (!marker || marker.path !== location.pathname || Date.now() - marker.at > 1800000) return;\n      try { sessionStorage.removeItem('nk_checkout_return_v1'); } catch (e) {}\n      state.checkoutReturned = true; state.cur = 1; paintSteps(); setBusy(false);\n      holdSpot(function () { return 0; }, true);\n    }\n    window.addEventListener('pageshow', function (e) { if (e.persisted) setBusy(false); restoreCheckoutReturn(); });\n    // A full back/forward reload may boot after pageshow in a section reinitialization.\n    if (document.readyState === 'complete') restoreCheckoutReturn();\n  }\n\n  function boot() { $$('[data-nk-cfg]').forEach(init); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); else boot();\n  document.addEventListener('shopify:section:load', boot);\n})();\n\n/* ---------- set 33: Step 4 \"How it works\" filmstrip (snippets/nootka-howitworks.liquid) ----------\n * Swipeable 4:5 cards. Which step-04 card shows is pure CSS (html[data-nootka-bucket] + .nootka-bucket--*), so\n * unknown / guessed visitors only ever see the neutral fulfillment card. This script adds: {city} / {lead} text,\n * dots + arrows for the visible cards, and tap-to-play video. No <video> exists until a visitor taps play\n * (posters only on load); videos start muted with a \"Sound off \u00B7 tap\" pill, one plays at a time, and a video\n * pauses when it scrolls out of view or its card is hidden.\n */\n(function () {\n  'use strict';\n  function $$(s, r) { return Array.prototype.slice.call((r || document).querySelectorAll(s)); }\n  function esc(s) { return String(s == null ? '' : s).replace(/[&<>\"']/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]; }); }\n  function fmtDate(iso) {\n    var d = new Date(String(iso).slice(0, 10) + 'T12:00:00Z');\n    if (isNaN(d)) return '';\n    try { return d.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', timeZone: 'UTC' }); } catch (e) { return d.toDateString(); }\n  }\n  function fmtT(s) { s = Math.max(0, Math.floor(s || 0)); return Math.floor(s / 60) + ':' + ('0' + (s % 60)).slice(-2); }\n  var SVG_MUTED = '<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M11 5 6 9H3v6h3l5 4z\"/><path d=\"m22 9-6 6M16 9l6 6\"/></svg>';\n  var SVG_SOUND = '<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M11 5 6 9H3v6h3l5 4z\"/><path d=\"M15.5 8.5a5 5 0 0 1 0 7M18.5 5.5a9 9 0 0 1 0 13\"/></svg>';\n  var SVG_PAUSE = '<svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" aria-hidden=\"true\"><rect x=\"1\" y=\"1\" width=\"3\" height=\"8\" fill=\"#fff\"/><rect x=\"6\" y=\"1\" width=\"3\" height=\"8\" fill=\"#fff\"/></svg>';\n  var SVG_PLAY = '<svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" aria-hidden=\"true\"><path d=\"M2 1l7 4-7 4z\" fill=\"#fff\"/></svg>';\n  var all = [];\n\n  function stopOthers(keep) { all.forEach(function (m) { if (m.v && m !== keep && !m.v.paused) m.v.pause(); }); }\n\n  function initMedia(hw, ph) {\n    var m = { ph: ph, v: null };\n    all.push(m);\n    var btn = ph.querySelector('[data-hw-play]');\n    function sync() {\n      if (!m.v) return;\n      m.mute.innerHTML = (m.v.muted ? SVG_MUTED : SVG_SOUND) + '<span>' + esc(m.v.muted ? hw.getAttribute('data-hw-sound-off') : hw.getAttribute('data-hw-sound-on')) + '</span>';\n      m.mute.setAttribute('aria-pressed', m.v.muted ? 'false' : 'true');\n      m.ic.innerHTML = m.v.paused ? SVG_PLAY : SVG_PAUSE;\n      m.ic.setAttribute('aria-label', m.v.paused ? 'Play' : 'Pause');\n    }\n    function tick() {\n      if (!m.v) return;\n      var d = m.v.duration || 0, t = m.v.currentTime || 0;\n      m.bar.style.width = d ? Math.min(100, t / d * 100) + '%' : '0';\n      m.time.textContent = fmtT(t) + ' / ' + fmtT(d);\n    }\n    function build() {\n      var img = ph.querySelector('img');\n      var v = document.createElement('video');\n      v.muted = true; v.defaultMuted = true; v.playsInline = true;\n      v.setAttribute('muted', ''); v.setAttribute('playsinline', ''); v.setAttribute('webkit-playsinline', '');\n      v.preload = 'auto';\n      if (img) v.poster = img.currentSrc || img.src;\n      v.src = ph.getAttribute('data-hw-video');\n      ph.appendChild(v);\n      var mute = document.createElement('button'); mute.type = 'button'; mute.className = 'hw__mute';\n      var ctl = document.createElement('div'); ctl.className = 'hw__ctl';\n      ctl.innerHTML = '<button type=\"button\" class=\"hw__ic\"></button><span class=\"hw__bar\"><i></i></span><span class=\"hw__time\">0:00</span>';\n      ph.appendChild(mute); ph.appendChild(ctl);\n      m.v = v; m.mute = mute; m.ic = ctl.querySelector('.hw__ic'); m.bar = ctl.querySelector('.hw__bar i'); m.time = ctl.querySelector('.hw__time');\n      mute.addEventListener('click', function (e) { e.stopPropagation(); v.muted = !v.muted; if (!v.muted && v.paused) play(); sync(); });\n      m.ic.addEventListener('click', function (e) { e.stopPropagation(); if (v.paused) play(); else v.pause(); });\n      v.addEventListener('click', function () { if (v.paused) play(); else v.pause(); });\n      ['play', 'pause', 'volumechange'].forEach(function (ev) { v.addEventListener(ev, sync); });\n      v.addEventListener('timeupdate', tick); v.addEventListener('loadedmetadata', tick);\n      v.addEventListener('ended', function () { ph.classList.remove('is-on'); try { v.currentTime = 0; } catch (x) {} v.muted = true; sync(); tick(); if (btn) btn.focus({ preventScroll: true }); });\n      sync();\n    }\n    function play() {\n      if (!m.v) build();\n      stopOthers(m);\n      ph.classList.add('is-on');\n      var p = m.v.play();\n      if (p && p.catch) p.catch(function () { sync(); });\n    }\n    m.pause = function () { if (m.v && !m.v.paused) m.v.pause(); };\n    m.build = function () { if (!m.v) build(); return m.v; };\n    m.play = play;\n    m.sync = sync;\n    var exp = ph.querySelector('[data-hw-expand]');\n    if (exp) exp.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); expand(hw, m, exp); });\n    if (btn) btn.addEventListener('click', function (e) { e.preventDefault(); play(); });\n    var pimg = ph.querySelector('img'); if (pimg) pimg.addEventListener('click', function () { if (!ph.classList.contains('is-on')) play(); });\n    return m;\n  }\n\n  /* set 34: expand a video. Desktop: centered modal player (dimmed backdrop, close button, Esc, click outside,\n   * starts muted with a sound pill, native controls). Phones: the video goes full screen (requestFullscreen, or\n   * webkitEnterFullscreen on iOS); if neither is available, a full-viewport modal. The inline video is paused. */\n  var SVG_X = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6 6 18\"/></svg>';\n  function isPhone() {\n    try { if (window.matchMedia('(hover: none) and (pointer: coarse)').matches) return true; } catch (e) {}\n    return window.innerWidth < 768;\n  }\n  function cardTitle(m) {\n    var c = m.ph.closest('[data-hw-card]'), t = c && c.querySelector('.hw__t');\n    return t ? t.textContent.replace(/\\s+/g, ' ').trim() : '';\n  }\n  function expand(hw, m, opener) {\n    if (isPhone()) {\n      var v = m.build();\n      m.play();\n      var fsDone = false;\n      var exitFs = function () {\n        if (document.fullscreenElement || document.webkitFullscreenElement) return;\n        document.removeEventListener('fullscreenchange', exitFs); document.removeEventListener('webkitfullscreenchange', exitFs);\n        v.controls = false; if (m.sync) m.sync();\n      };\n      try {\n        if (v.requestFullscreen) {\n          v.controls = true;\n          document.addEventListener('fullscreenchange', exitFs);\n          var r = v.requestFullscreen();\n          fsDone = true;\n          if (r && r.catch) r.catch(function () { document.removeEventListener('fullscreenchange', exitFs); v.controls = false; modal(hw, m, opener, true); });\n        } else if (v.webkitRequestFullscreen) {\n          v.controls = true; document.addEventListener('webkitfullscreenchange', exitFs); v.webkitRequestFullscreen(); fsDone = true;\n        } else if (v.webkitEnterFullscreen) {\n          v.addEventListener('webkitendfullscreen', function h() { v.removeEventListener('webkitendfullscreen', h); if (m.sync) m.sync(); });\n          v.webkitEnterFullscreen(); fsDone = true;\n        }\n      } catch (e) { fsDone = false; v.controls = false; }\n      if (!fsDone) modal(hw, m, opener, true);\n      return;\n    }\n    modal(hw, m, opener, false);\n  }\n  function modal(hw, m, opener, full) {\n    var src = m.ph.getAttribute('data-hw-video');\n    if (!src) return;\n    var start = 0;\n    if (m.v) { start = m.v.currentTime || 0; if (m.v.ended) start = 0; m.v.pause(); m.v.controls = false; }\n    stopOthers(null);\n    var title = cardTitle(m);\n    var lb = document.createElement('div');\n    lb.className = 'hw-lb' + (full ? ' is-full' : '');\n    lb.setAttribute('role', 'dialog'); lb.setAttribute('aria-modal', 'true');\n    if (title) lb.setAttribute('aria-label', title);\n    lb.innerHTML = '<div class=\"hw-lb__box\"><button type=\"button\" class=\"hw-lb__snd\" aria-pressed=\"false\"></button>' +\n      '<button type=\"button\" class=\"hw-lb__x\" aria-label=\"' + esc(hw.getAttribute('data-hw-close-label') || 'Close') + '\">' + SVG_X + '</button></div>';\n    var box = lb.querySelector('.hw-lb__box'), snd = lb.querySelector('.hw-lb__snd'), x = lb.querySelector('.hw-lb__x');\n    var v = document.createElement('video');\n    v.muted = true; v.defaultMuted = true; v.playsInline = true; v.controls = true; v.autoplay = true; v.preload = 'auto';\n    v.setAttribute('muted', ''); v.setAttribute('playsinline', ''); v.setAttribute('webkit-playsinline', ''); v.setAttribute('controls', '');\n    var img = m.ph.querySelector('img'); if (img) v.poster = img.currentSrc || img.src;\n    v.src = src;\n    box.insertBefore(v, snd);\n    var ratio = 4 / 5;\n    function size() {\n      if (full) { box.style.width = ''; box.style.aspectRatio = ''; return; }\n      var w = Math.min(window.innerWidth * 0.92, window.innerHeight * 0.86 * ratio, ratio > 1 ? 1280 : 760);\n      box.style.width = Math.round(w) + 'px'; box.style.aspectRatio = String(ratio);\n    }\n    function syncSnd() {\n      snd.innerHTML = (v.muted ? SVG_MUTED : SVG_SOUND) + '<span>' + esc(v.muted ? hw.getAttribute('data-hw-sound-off') : hw.getAttribute('data-hw-sound-on')) + '</span>';\n      snd.setAttribute('aria-pressed', v.muted ? 'false' : 'true');\n    }\n    v.addEventListener('loadedmetadata', function () {\n      if (v.videoWidth && v.videoHeight) { ratio = v.videoWidth / v.videoHeight; size(); }\n      if (start > 0.2) { try { v.currentTime = start; } catch (e) {} }\n    });\n    v.addEventListener('volumechange', syncSnd);\n    snd.addEventListener('click', function (e) { e.stopPropagation(); v.muted = !v.muted; if (!v.muted && v.paused) v.play(); syncSnd(); });\n    function close() {\n      if (!lb.parentNode) return;\n      var t = v.currentTime || 0;\n      try { v.pause(); } catch (e) {}\n      v.removeAttribute('src'); try { v.load(); } catch (e) {}\n      document.removeEventListener('keydown', onKey, true);\n      window.removeEventListener('resize', size);\n      lb.parentNode.removeChild(lb);\n      document.documentElement.classList.remove('hw-lock');\n      if (m.v && t > 0.2) { try { m.v.currentTime = t; } catch (e) {} if (m.sync) m.sync(); }\n      if (opener && opener.focus) { try { opener.focus({ preventScroll: true }); } catch (e) { opener.focus(); } }\n    }\n    function onKey(e) {\n      if (e.key === 'Escape' || e.key === 'Esc') { e.preventDefault(); e.stopPropagation(); close(); return; }\n      if (e.key === 'Tab') {\n        var f = [snd, v, x], i = f.indexOf(document.activeElement);\n        e.preventDefault();\n        f[(i + (e.shiftKey ? f.length - 1 : 1)) % f.length].focus();\n      }\n    }\n    x.addEventListener('click', function (e) { e.stopPropagation(); close(); });\n    lb.addEventListener('click', function (e) { if (e.target === lb) close(); });\n    document.addEventListener('keydown', onKey, true);\n    window.addEventListener('resize', size);\n    syncSnd(); size();\n    document.documentElement.classList.add('hw-lock');\n    document.body.appendChild(lb);\n    lb.__close = close;\n    window.requestAnimationFrame(function () { lb.classList.add('is-in'); });\n    var p = v.play(); if (p && p.catch) p.catch(function () {});\n    try { x.focus({ preventScroll: true }); } catch (e) { x.focus(); }\n  }\n\n  function init(hw) {\n    if (hw.__hw) return; hw.__hw = true;\n    var rail = hw.querySelector('[data-hw-rail]'), dots = hw.querySelector('[data-hw-dots]');\n    var prev = hw.querySelector('[data-hw-prev]'), next = hw.querySelector('[data-hw-next]');\n    var ptype = hw.getAttribute('data-hw-ptype') || 'any';\n    var media = $$('[data-hw-media]', hw).map(function (ph) { return initMedia(hw, ph); });\n\n    function shown() { return $$('[data-hw-card]', rail).filter(function (c) { return getComputedStyle(c).display !== 'none'; }); }\n    // Set 43: a card's scroll position inside the rail. The rail is position:relative, so card.offsetLeft is\n    // already rail-relative; subtracting rail.offsetLeft (16px) made every target 16px short, and scroll-snap\n    // pulled \"Previous\" straight back to the card it was on. Measure from the rail's own box instead.\n    function posOf(c) {\n      var rr = rail.getBoundingClientRect(), cr = c.getBoundingClientRect();\n      var sp = parseFloat(getComputedStyle(rail).scrollPaddingLeft) || 0;\n      return Math.round(cr.left - rr.left - rail.clientLeft + rail.scrollLeft - sp);\n    }\n    function stops() {\n      var max = Math.max(0, rail.scrollWidth - rail.clientWidth), out = [];\n      shown().forEach(function (c) { var p = Math.max(0, Math.min(max, posOf(c))); if (!out.length || p - out[out.length - 1] > 2) out.push(p); });\n      if (!out.length) out.push(0);\n      return out;\n    }\n    function paintText() {\n      var NL = window.NootkaLocation, rec = null, pr = null;\n      try { rec = NL && NL.get ? NL.get() : null; } catch (e) {}\n      try { pr = NL && NL.promise ? NL.promise(ptype) : null; } catch (e) {}\n      var city = (rec && rec.confirmed && rec.city) || hw.getAttribute('data-hw-city-fallback') || '';\n      // Set 67: lead chip uses month-third (e.g. mid-December), not weekday exact date.\n      var leadDate = (pr && pr.production)\n        ? ((window.NootkaTimeline && window.NootkaTimeline.phrasePoint(pr.production, false)) || fmtDate(pr.production))\n        : '';\n      var lead = leadDate ? (hw.getAttribute('data-hw-lead-dated') || '').replace('{date}', leadDate) : '';\n      if (!lead || /\\{date\\}/.test(lead)) lead = hw.getAttribute('data-hw-lead-fallback') || '';\n      $$('[data-hw-src]', hw).forEach(function (el) { el.innerHTML = el.getAttribute('data-hw-src').replace(/\\{city\\}/g, esc(city)); });\n      $$('[data-hw-lead]', hw).forEach(function (el) { el.textContent = lead; });\n    }\n    function layout() {\n      var cards = shown();\n      media.forEach(function (m) { var c = m.ph.closest('[data-hw-card]'); if (c && cards.indexOf(c) < 0) m.pause(); });\n      if (!rail.clientWidth) return;\n      var x = rail.scrollLeft, w = rail.clientWidth, first = -1, last = -1;\n      cards.forEach(function (c, i) {\n        var l = posOf(c) - x, r = l + c.offsetWidth;\n        var vis = Math.min(r, w) - Math.max(l, 0);\n        if (vis >= c.offsetWidth * 0.6) { if (first < 0) first = i; last = i; }\n      });\n      if (dots.children.length !== cards.length) dots.innerHTML = cards.map(function () { return '<i></i>'; }).join('');\n      $$('i', dots).forEach(function (d, i) { d.classList.toggle('on', i >= first && i <= last); });\n      var fits = rail.scrollWidth <= w + 2;\n      hw.classList.toggle('is-static', fits);\n      if (prev) prev.disabled = x <= 2;\n      if (next) next.disabled = x + w >= rail.scrollWidth - 2;\n      if (prev && prev.disabled && document.activeElement === prev && next && !next.disabled) next.focus({ preventScroll: true });\n      if (next && next.disabled && document.activeElement === next && prev && !prev.disabled) prev.focus({ preventScroll: true });\n    }\n    function go(dir) {\n      var ss = stops(), x = rail.scrollLeft, target = null, max = Math.max(0, rail.scrollWidth - rail.clientWidth);\n      for (var i = 0; i < ss.length; i++) {\n        if (dir > 0 && ss[i] > x + 4) { target = ss[i]; break; }\n        if (dir < 0 && ss[i] < x - 4) target = ss[i];\n      }\n      if (target == null) target = dir > 0 ? max : 0;\n      try { rail.scrollTo({ left: target, behavior: 'smooth' }); } catch (e) { rail.scrollLeft = target; }\n    }\n    if (prev) prev.addEventListener('click', function () { go(-1); });\n    if (next) next.addEventListener('click', function () { go(1); });\n    rail.addEventListener('scroll', function () { window.requestAnimationFrame(layout); }, { passive: true });\n    rail.addEventListener('keydown', function (e) { if (e.key === 'ArrowRight') { e.preventDefault(); go(1); } else if (e.key === 'ArrowLeft') { e.preventDefault(); go(-1); } });\n    window.addEventListener('resize', layout);\n    ['nootka:location-confirmed', 'nootka:location-guessed', 'nootka:lead-times-ready'].forEach(function (ev) {\n      document.addEventListener(ev, function () { setTimeout(function () { paintText(); layout(); }, 0); });\n    });\n    // Step 4 opens and closes (hidden body): re-measure when it becomes visible; pause video when it leaves view.\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) layout(); }); }).observe(hw);\n      var io = new IntersectionObserver(function (es) {\n        es.forEach(function (e) { if (!e.isIntersecting) media.forEach(function (m) { if (m.ph === e.target) m.pause(); }); });\n      }, { threshold: 0.2 });\n      media.forEach(function (m) { io.observe(m.ph); });\n    }\n    if (window.MutationObserver) new MutationObserver(function () { layout(); }).observe(document.documentElement, { attributes: true, attributeFilter: ['data-nootka-bucket'] });\n\n    /* set 34: mouse drag-scroll anywhere on the cards (text, thumbnails, buttons), with momentum and a snap to the\n     * nearest card. A gesture that moves more than 6px is a drag: its click never reaches a card (no play, no link).\n     * Touch and pen keep native swipe scrolling; trackpad/wheel scrolling is untouched. */\n    var TH = 6, drag = null, anim = 0, eatClick = false;\n    function snapTargets() { return stops(); }\n    function animTo(to) {\n      var from = rail.scrollLeft, d = to - from, t0 = 0;\n      var dur = Math.max(220, Math.min(620, Math.abs(d) * 0.9));\n      if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) dur = 1;\n      window.cancelAnimationFrame(anim);\n      function step(ts) {\n        if (!t0) t0 = ts;\n        var k = Math.min(1, (ts - t0) / dur), e = 1 - Math.pow(1 - k, 3);\n        rail.scrollLeft = from + d * e;\n        if (k < 1) anim = window.requestAnimationFrame(step);\n        else { rail.scrollLeft = to; anim = 0; rail.classList.remove('is-drag'); layout(); }\n      }\n      anim = window.requestAnimationFrame(step);\n    }\n    rail.addEventListener('pointerdown', function (e) {\n      if (e.pointerType !== 'mouse' || e.button !== 0) return;\n      if (rail.scrollWidth <= rail.clientWidth + 2) return;\n      window.cancelAnimationFrame(anim); anim = 0;\n      drag = { id: e.pointerId, x0: e.clientX, s0: rail.scrollLeft, on: false, pts: [{ x: e.clientX, t: e.timeStamp }] };\n    });\n    rail.addEventListener('pointermove', function (e) {\n      if (!drag || e.pointerId !== drag.id) return;\n      var dx = e.clientX - drag.x0;\n      if (!drag.on) {\n        if (Math.abs(dx) < TH) return;\n        drag.on = true;\n        rail.classList.add('is-drag');\n        try { rail.setPointerCapture(e.pointerId); } catch (x) {}\n        try { var sel = window.getSelection && window.getSelection(); if (sel && sel.removeAllRanges) sel.removeAllRanges(); } catch (x) {}\n      }\n      e.preventDefault();\n      rail.scrollLeft = drag.s0 - dx;\n      drag.pts.push({ x: e.clientX, t: e.timeStamp });\n      if (drag.pts.length > 6) drag.pts.shift();\n    });\n    function endDrag(e) {\n      if (!drag || (e && e.pointerId !== drag.id)) return;\n      var d = drag; drag = null;\n      if (!d.on) return;\n      eatClick = true; setTimeout(function () { eatClick = false; }, 0);\n      try { rail.releasePointerCapture(d.id); } catch (x) {}\n      var a = d.pts[0], b = d.pts[d.pts.length - 1], dt = Math.max(1, b.t - a.t);\n      var v = (b.t - a.t) < 120 ? (b.x - a.x) / dt : 0;          // px per ms, mouse direction\n      var proj = rail.scrollLeft - v * 220;                         // where momentum would carry the rail\n      var ts = snapTargets(), best = rail.scrollLeft, bd = Infinity;\n      ts.forEach(function (x) { var dd = Math.abs(x - proj); if (dd < bd) { bd = dd; best = x; } });\n      if (Math.abs(v) > 0.35 && ts.length) {                        // a flick always moves at least one card\n        var fwd = ts.filter(function (x) { return x > d.s0 + 2; }), back = ts.filter(function (x) { return x < d.s0 - 2; });\n        if (v < 0 && best <= d.s0 + 2 && fwd.length) best = fwd[0];\n        if (v > 0 && best >= d.s0 - 2 && back.length) best = back[back.length - 1];\n      }\n      animTo(best);\n    }\n    rail.addEventListener('pointerup', endDrag);\n    rail.addEventListener('pointercancel', endDrag);\n    rail.addEventListener('lostpointercapture', function (e) { if (drag && drag.on) endDrag(e); });\n    rail.addEventListener('click', function (e) {\n      if (!eatClick) return;\n      e.preventDefault(); e.stopPropagation(); if (e.stopImmediatePropagation) e.stopImmediatePropagation();\n      eatClick = false;\n    }, true);\n    rail.addEventListener('dragstart', function (e) { e.preventDefault(); });\n\n    paintText(); layout();\n  }\n  function boot() { $$('[data-hw]').forEach(init); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); else boot();\n  document.addEventListener('shopify:section:load', boot);\n  document.addEventListener('visibilitychange', function () { if (document.hidden) all.forEach(function (m) { if (m.pause) m.pause(); }); });\n})();\n"],
  "mappings": "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",
  "names": ["dl", "beh", "th", "fp", "slot", "lab", "text", "after", "y", "handle", "qs", "headerOffset", "hero", "open", "target", "t0"]
}
