{"title":"The Summer Edit","description":"","products":[{"product_id":"fougere-elite-extrait-de-parfum-for-men","title":"Fougere Élite Extrait de Parfum For Men","description":"\u003cp\u003ewhere classic sophistication meets magnetic allure.\u003cbr\u003eAn intoxicating blend of aromatic freshness and dark sensual warmth, crafted for the man who commands attention without ever asking for it. The fragrance opens with crisp lavender and refined citrus tones, wrapped in the richness of moss and amber — a perfect harmony of confidence and class. As it settles, subtle whispers of musk and tonka unveil a seductive trail that lingers long after you’ve left the room.\u003c\/p\u003e\n\u003cp\u003eThis is not just a scent — it’s the signature of a modern gentleman, effortlessly powerful, irresistibly elite.\u003c\/p\u003e\n\u003csection class=\"perfume-profile\"\u003e\n\u003cdiv class=\"accords section-block\"\u003e\n\u003ch3\u003eMAIN ACCORDS\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"accords-grid\"\u003e\n\u003cdiv style=\"--clr: #d9a066;\" class=\"accord\"\u003eSpicy\u003c\/div\u003e\n\u003cdiv style=\"--clr: #a5c4b4;\" class=\"accord\"\u003eFresh\u003c\/div\u003e\n\u003cdiv style=\"--clr: #c0a2d4;\" class=\"accord\"\u003eFougère\u003c\/div\u003e\n\u003cdiv style=\"--clr: #9cc59d;\" class=\"accord\"\u003eGreen\u003c\/div\u003e\n\u003cdiv style=\"--clr: #caa675;\" class=\"accord\"\u003eWoody\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid section-block\"\u003e\n\u003ch3\u003eFRAGRANCE PYRAMID\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eTOP\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Basil\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Basil.jpg?v=1762170872\"\u003e\u003cspan\u003eBasil\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Bergamot\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328\"\u003e\u003cspan\u003eBergamot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Lavender\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Lavender.jpg?v=1762168899\"\u003e\u003cspan\u003eLavender\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Lemon\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Lemon.jpg?v=1762170963\"\u003e\u003cspan\u003eLemon\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Petitgrain\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Petitgrain.jpg?v=1762171329\"\u003e\u003cspan\u003ePetitgrain\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Tarragon\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Tarragon.jpg?v=1762171394\"\u003e\u003cspan\u003eTarragon\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eMIDDLE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Grass\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Grass.jpg?v=1762171464\"\u003e\u003cspan\u003eGrass\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Jasmine\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Jasmine.jpg?v=1762166951\"\u003e\u003cspan\u003eJasmine\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Lily of the Valley\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Lily_of_the_Valley.jpg?v=1762170007\"\u003e\u003cspan\u003eLily of the Valley\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Rose\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Rose.jpg?v=1762167907\"\u003e\u003cspan\u003eRose\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Violet\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Violet.jpg?v=1762167957\"\u003e\u003cspan\u003eViolet\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eBASE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Cardamom\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cardamom.jpg?v=1762166172\"\u003e\u003cspan\u003eCardamom\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Cashmeran\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cashmeran.jpg?v=1762167787\"\u003e\u003cspan\u003eCashmeran\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Cedarwood\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030\"\u003e\u003cspan\u003eCedarwood\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Clove\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Clove.jpg?v=1762171535\"\u003e\u003cspan\u003eClove\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Labdanum\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Labdanum.jpg?v=1762167154\"\u003e\u003cspan\u003eLabdanum\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Moss\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Moss.jpg?v=1762157733\"\u003e\u003cspan\u003eMoss\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Musk\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459\"\u003e\u003cspan\u003eMusk\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Nutmeg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Nutmeg.jpg?v=1762171593\"\u003e\u003cspan\u003eNutmeg\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Patchouli\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Patchouli.jpg?v=1762157539\"\u003e\u003cspan\u003ePatchouli\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Rhubarb\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Rhubarb.jpg?v=1762171668\"\u003e\u003cspan\u003eRhubarb\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Sandalwood\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Sandalwood.jpg?v=1762166620\"\u003e\u003cspan\u003eSandalwood\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Tonka Bean\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Tonka_Bean.jpg?v=1762157656\"\u003e\u003cspan\u003eTonka Bean\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Vetiver\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vetiver.jpg?v=1762156903\"\u003e\u003cspan\u003eVetiver\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Amber\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Amber.jpg?v=1762156606\"\u003e\u003cspan\u003eAmber\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"classification section-block\"\u003e\n\u003ch3\u003eCLASSIFICATION\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"tabs\"\u003e\n\u003cbutton data-tab=\"type\" class=\"tab active\"\u003eTYPE\u003c\/button\u003e \u003cbutton data-tab=\"occasion\" class=\"tab\"\u003eOCCASION\u003c\/button\u003e \u003cbutton data-tab=\"season\" class=\"tab\"\u003eSEASON\u003c\/button\u003e \u003cbutton data-tab=\"audience\" class=\"tab\"\u003eAUDIENCE\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chart\"\u003e\u003ccanvas height=\"260\" width=\"260\" id=\"chartCanvas\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e            \n.perfume-profile {\n  background-color:#0d0d0c;\n  color:#e8e3d5;\n  font-family:'Touvlo Regular',sans-serif;\n  text-transform:uppercase;\n  padding:2rem 1.5rem;\n  border-radius:16px;\n  max-width:600px;\n  margin:auto;\n  box-shadow:0 0 20px rgba(255,255,255,0.02);\n}            \nh3{font-size:1.1rem;font-weight:700;letter-spacing:1px;margin-bottom:0.7rem;opacity:0.95;text-align:left;}            \n.section-block{margin-bottom:2rem;}            \n.section-divider{height:1px;background:linear-gradient(to right,rgba(255,255,255,0.05),rgba(255,255,255,0.2),rgba(255,255,255,0.05));margin-bottom:1.2rem;border-radius:1px;}            \n.accords-grid{display:flex;flex-wrap:wrap;gap:0.5rem;}            \n.accord{background:var(--clr);color:#0d0d0c;border-radius:50px;padding:0.4rem 0.9rem;font-size:0.8rem;font-weight:600;letter-spacing:0.5px;transition:transform 0.2s ease;box-shadow:0 0 6px rgba(255,255,255,0.15);}            \n.accord:hover{transform:scale(1.05);}            \n.pyramid-column{margin-bottom:1.5rem;}            \n.pyramid-column h4{font-size:0.9rem;color:#b7b1a6;margin-bottom:0.5rem;font-weight:600;}            \n.notes{display:flex;flex-wrap:wrap;gap:0.8rem;justify-content:flex-start;align-items:center;}      \n.note-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;}      \n.note-item img{width:48px;height:48px;border-radius:50%;object-fit:cover;border:1px solid #2a2a28;box-shadow:0 0 8px rgba(255,255,255,0.05);}      \n.note-item span{font-size:0.75rem;opacity:0.9;text-align:center;}      \n\n.classification{text-align:center;}    \n.tabs{display:flex;justify-content:space-between;gap:0.4rem;margin-bottom:1rem;flex-wrap:nowrap;}    \n.tab{flex:1;background:none;border:1px solid #3a3a3a;color:#e8e3d5;font-size:0.7rem;padding:0.5rem 0;border-radius:50px;cursor:pointer;transition:background 0.3s,color 0.3s;white-space:nowrap;}    \n.tab.active{background:#e8e3d5;color:#0d0d0c;font-weight:600;}    \n.chart{display:flex;justify-content:center;align-items:center;min-height:300px;position:relative;}    \n.chart canvas{width:260px!important;height:260px!important;max-width:100%;display:block;}    \n@media(max-width:480px){    \n.perfume-profile{padding:1.5rem 1rem;}    \nh3{font-size:1rem;}    \n.tab{font-size:0.65rem;padding:0.45rem 0;}    \n.chart{min-height:260px;}    \n.chart canvas{width:220px!important;height:220px!important;}    \n}    \n\u003c\/style\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e \u003cscript\u003e    \nconst ctx=document.getElementById('chartCanvas');    \nlet chart;    \nconst chartData={    \ntype:{    \nlabels:['Spicy','Fresh','Fougère','Green','Woody'],    \ndata:[9,9,8,6,6]    \n},    \noccasion:{    \nlabels:['Evening','Leisure','Nightout','Daily','Business'],    \ndata:[4,9,4,9,9]    \n},    \nseason:{    \nlabels:['Winter','Fall','Spring','Summer','Rainy'],    \ndata:[3,3,9,8,7]    \n},    \naudience:{    \nlabels:['Masculine','Feminine','Classic','Modern','Bold'],    \ndata:[9,4,6,4,4]    \n}    \n};    \n\nfunction createChart(type){    \nif(chart)chart.destroy();    \nchart=new Chart(ctx,{    \ntype:'radar',    \ndata:{    \nlabels:chartData[type].labels,    \ndatasets:[{    \ndata:chartData[type].data,    \nborderColor:'#e8e3d5',    \nbackgroundColor:'rgba(232,227,213,0.12)',    \nborderWidth:1,    \npointRadius:2    \n}]    \n},    \noptions:{    \nmaintainAspectRatio:false,    \nscales:{r:{    \nangleLines:{color:'#333'},    \ngrid:{color:'#333'},    \npointLabels:{color:'#e8e3d5',font:{size:10}},    \nticks:{display:false},    \nsuggestedMin:0,    \nsuggestedMax:10    \n}},    \nplugins:{legend:{display:false}}    \n}    \n});    \n}    \n\ncreateChart('type');    \ndocument.querySelectorAll('.tab').forEach(btn=\u003e{    \nbtn.addEventListener('click',e=\u003e{    \ndocument.querySelectorAll('.tab').forEach(b=\u003eb.classList.remove('active'));    \ne.target.classList.add('active');    \ncreateChart(e.target.dataset.tab);    \nsetTimeout(()=\u003e{ Chart.helpers.each(Chart.instances, i =\u003e i.resize()); }, 200);    \n});    \n});    \n  \u003c\/script\u003e\u003c\/p\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":42685785538634,"sku":null,"price":2199.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":42685785505866,"sku":null,"price":249.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Fougere_Elite_S.png?v=1762967995"},{"product_id":"azure-musk-extrait-de-parfum-for-women-men","title":"Azure Musk Extrait de Parfum For Women \u0026 Men","description":"\u003cp\u003e\u003cspan\u003eThere’s a rare kind of beauty in stillness — that quiet, sunlit calm when the world feels freshly reborn. Azure Musk captures that feeling in scent form — clean, comforting, and effortlessly elegant.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eIt opens with a soft breeze of pear and airy aldehydes, evoking crisp sheets and gentle light. Soon, a tender heart of rose, iris, and orange blossom unfolds — delicate yet full of soul. The dry-down wraps you in white musk and ambrette, a silken trail that feels both sensual and pure.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eIt’s the fragrance of peace — the scent of skin kissed by morning light.\u003c\/span\u003e\u003c\/p\u003e\n\u003csection class=\"perfume-profile\"\u003e\n\u003cdiv class=\"accords section-block\"\u003e\n\u003ch3\u003eMAIN ACCORDS\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"accords-grid\"\u003e\n\u003cdiv style=\"--clr: #a8d0c5;\" class=\"accord\"\u003eFresh\u003c\/div\u003e\n\u003cdiv style=\"--clr: #f2b6c6;\" class=\"accord\"\u003eFloral\u003c\/div\u003e\n\u003cdiv style=\"--clr: #d2c2b0;\" class=\"accord\"\u003ePowdery\u003c\/div\u003e\n\u003cdiv style=\"--clr: #e5b48a;\" class=\"accord\"\u003eSweet\u003c\/div\u003e\n\u003cdiv style=\"--clr: #f3dcb1;\" class=\"accord\"\u003eCreamy\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid section-block\"\u003e\n\u003ch3\u003eFRAGRANCE PYRAMID\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eTOP\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Lily of the Valley\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Lily_of_the_Valley.jpg?v=1762170007\"\u003e\u003cspan\u003eLily of the Valley\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Aldehydes\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459\"\u003e\u003cspan\u003eAldehydes\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Pear\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pear.jpg?v=1762170094\"\u003e\u003cspan\u003ePear\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eMIDDLE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Rose Absolute\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Rose.jpg?v=1762167907\"\u003e\u003cspan\u003eRose Absolute\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Iris\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Iris.jpg?v=1762170718\"\u003e\u003cspan\u003eIris\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Orange Blossom\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange_Blossom.jpg?v=1762170230\"\u003e\u003cspan\u003eOrange Blossom\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eBASE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"White Musk\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/White_Musk.jpg?v=1762170308\"\u003e\u003cspan\u003eWhite Musk\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Ambrette\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ambrette.jpg?v=1762170576\"\u003e\u003cspan\u003eAmbrette\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg alt=\"Patchouli\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Patchouli.jpg?v=1762157539\"\u003e\u003cspan\u003ePatchouli\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"classification section-block\"\u003e\n\u003ch3\u003eCLASSIFICATION\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"tabs\"\u003e\n\u003cbutton data-tab=\"type\" class=\"tab active\"\u003eTYPE\u003c\/button\u003e \u003cbutton data-tab=\"occasion\" class=\"tab\"\u003eOCCASION\u003c\/button\u003e \u003cbutton data-tab=\"season\" class=\"tab\"\u003eSEASON\u003c\/button\u003e \u003cbutton data-tab=\"audience\" class=\"tab\"\u003eAUDIENCE\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chart\"\u003e\u003ccanvas height=\"260\" width=\"260\" id=\"chartCanvas\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e        \n.perfume-profile {        \n  background-color:#0d0d0c;        \n  color:#e8e3d5;        \n  font-family:'Touvlo Regular',sans-serif;        \n  text-transform:uppercase;        \n  padding:2rem 1.5rem;        \n  border-radius:16px;        \n  max-width:600px;        \n  margin:auto;        \n  box-shadow:0 0 20px rgba(255,255,255,0.02);        \n}        \nh3{font-size:1.1rem;font-weight:700;letter-spacing:1px;margin-bottom:0.7rem;opacity:0.95;text-align:left;}        \n.section-block{margin-bottom:2rem;}        \n.section-divider{height:1px;background:linear-gradient(to right,rgba(255,255,255,0.05),rgba(255,255,255,0.2),rgba(255,255,255,0.05));margin-bottom:1.2rem;border-radius:1px;}        \n.accords-grid{display:flex;flex-wrap:wrap;gap:0.5rem;}        \n.accord{background:var(--clr);color:#0d0d0c;border-radius:50px;padding:0.4rem 0.9rem;font-size:0.8rem;font-weight:600;letter-spacing:0.5px;transition:transform 0.2s ease;box-shadow:0 0 6px rgba(255,255,255,0.15);}        \n.accord:hover{transform:scale(1.05);}        \n.pyramid-column{margin-bottom:1.5rem;}        \n.pyramid-column h4{font-size:0.9rem;color:#b7b1a6;margin-bottom:0.5rem;font-weight:600;}        \n.notes{display:flex;flex-wrap:wrap;gap:0.8rem;justify-content:flex-start;align-items:center;}      \n.note-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;}  \n.note-item img{width:48px;height:48px;border-radius:50%;object-fit:cover;border:1px solid #2a2a28;box-shadow:0 0 8px rgba(255,255,255,0.05);}  \n.note-item span{font-size:0.75rem;opacity:0.9;text-align:center;}  \n.classification{text-align:center;}\n.tabs{display:flex;justify-content:space-between;gap:0.4rem;margin-bottom:1rem;flex-wrap:nowrap;}\n.tab{flex:1;background:none;border:1px solid #3a3a3a;color:#e8e3d5;font-size:0.7rem;padding:0.5rem 0;border-radius:50px;cursor:pointer;transition:background 0.3s,color 0.3s;white-space:nowrap;}\n.tab.active{background:#e8e3d5;color:#0d0d0c;font-weight:600;}\n.chart{display:flex;justify-content:center;align-items:center;min-height:300px;position:relative;}\n.chart canvas{width:260px!important;height:260px!important;max-width:100%;display:block;}\n@media(max-width:480px){\n.perfume-profile{padding:1.5rem 1rem;}\nh3{font-size:1rem;}\n.tab{font-size:0.65rem;padding:0.45rem 0;}\n.chart{min-height:260px;}\n.chart canvas{width:220px!important;height:220px!important;}\n}\n\u003c\/style\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e \u003cscript\u003e\nconst ctx=document.getElementById('chartCanvas');\nlet chart;\n\nconst chartData={\ntype:{\nlabels:['Fresh','Floral','Powdery','Sweet','Creamy'],\ndata:[9,8,6,4,4]\n},\noccasion:{\nlabels:['Evening','Leisure','Sport','Daily','Business'],\ndata:[4,9,6,9,8]\n},\nseason:{\nlabels:['Winter','Fall','Spring','Summer','Rainy'],\ndata:[3,3,9,8,5]\n},\naudience:{\nlabels:['Masculine','Feminine','Classic','Modern','Bold'],\ndata:[6,8,5,5,7]\n}\n};\n\nfunction createChart(type){\nif(chart)chart.destroy();\nchart=new Chart(ctx,{\ntype:'radar',\ndata:{\nlabels:chartData[type].labels,\ndatasets:[{\ndata:chartData[type].data,\nborderColor:'#e8e3d5',\nbackgroundColor:'rgba(232,227,213,0.12)',\nborderWidth:1,\npointRadius:2\n}]\n},\noptions:{\nmaintainAspectRatio:false,\nscales:{r:{\nangleLines:{color:'#333'},\ngrid:{color:'#333'},\npointLabels:{color:'#e8e3d5',font:{size:10}},\nticks:{display:false},\nsuggestedMin:0,\nsuggestedMax:10\n}},\nplugins:{legend:{display:false}}\n}\n});\n}\n\ncreateChart('type');\n\ndocument.querySelectorAll('.tab').forEach(btn=\u003e{\nbtn.addEventListener('click',e=\u003e{\ndocument.querySelectorAll('.tab').forEach(b=\u003eb.classList.remove('active'));\ne.target.classList.add('active');\ncreateChart(e.target.dataset.tab);\nsetTimeout(()=\u003e{ Chart.helpers.each(Chart.instances, i =\u003e i.resize()); }, 200);\n});\n});\n\u003c\/script\u003e\u003c\/p\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":42685766893642,"sku":null,"price":1999.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":42685766860874,"sku":null,"price":229.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Azure_Musk_S.png?v=1762968023"},{"product_id":"arcadian-sin-extrait-de-parfum-for-women-and-men","title":"Arcadian Sin Extrait de Parfum For Women and Men","description":"\u003cp\u003e\u003cspan\u003eThere’s a moment when charm turns into temptation — when elegance learns the art of sin. Arcadian Sin captures that very instant.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eThe fragrance opens with a smooth, luminous warmth — a whisper of spice and citrus brushing against polished woods. In its heart, delicate petals rest on the glow of amber and soft musks, creating a harmony that feels both addictive and refined.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eAs it settles, shadows of leather, tobacco, and sweet resin rise — evoking the quiet confidence of someone who knows exactly what desire feels like.\u003c\/span\u003e\u003c\/p\u003e\n\u003csection class=\"perfume-profile\"\u003e\n\u003cdiv class=\"accords section-block\"\u003e\n\u003ch3\u003eMAIN ACCORDS\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"accords-grid\"\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #9ab5ac;\"\u003eSpicy\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #caa675;\"\u003eWoody\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #d4b7c6;\"\u003eFloral\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #e0c078;\"\u003eCitrus\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #f5b69d;\"\u003eSweet\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid section-block\"\u003e\n\u003ch3\u003eFRAGRANCE PYRAMID\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch3\u003eTOP\u003c\/h3\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328\" alt=\"Bergamot\"\u003e\u003cspan\u003eBergamot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cardamom.jpg?v=1762166172\" alt=\"Cardamom\"\u003e\u003cspan\u003eCardamom\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pink_Pepper.jpg?v=1762166223\" alt=\"Pink Pepper\"\u003e\u003cspan\u003ePink Pepper\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Juniper_Berry.jpg?v=1762167546\" alt=\"Juniper Berry\"\u003e\u003cspan\u003eJuniper Berry\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch3\u003eMIDDLE\u003c\/h3\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cashmeran.jpg?v=1762167787\" alt=\"Cashmere Wood\"\u003e\u003cspan\u003eCashmeran\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Magnolia.jpg?v=1762167863\" alt=\"Magnolia\"\u003e\u003cspan\u003eMagnolia\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Rose.jpg?v=1762167907\" alt=\"Rose\"\u003e\u003cspan\u003eRose\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Violet.jpg?v=1762167957\" alt=\"Violet\"\u003e\u003cspan\u003eViolet\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch3\u003eBASE\u003c\/h3\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vanilla.jpg?v=1762157792\" alt=\"Vanilla\"\u003e\u003cspan\u003eVanilla\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Amber.jpg?v=1762156606\" alt=\"Amber\"\u003e\u003cspan\u003eAmber\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Moss.jpg?v=1762157733\" alt=\"Moss\"\u003e\u003cspan\u003eMoss\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Leather.jpg?v=1762168209\" alt=\"Leather\"\u003e\u003cspan\u003eLeather\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Sandalwood.jpg?v=1762166620\" alt=\"Sandalwood\"\u003e\u003cspan\u003eSandalwood\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Tobacco.jpg?v=1762168326\" alt=\"Tobacco\"\u003e\u003cspan\u003eTobacco\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"classification section-block\"\u003e\n\u003ch3\u003eCLASSIFICATION\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"tabs\"\u003e\n\u003cbutton class=\"tab active\" data-tab=\"type\"\u003eTYPE\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"occasion\"\u003eOCCASION\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"season\"\u003eSEASON\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"audience\"\u003eAUDIENCE\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chart\"\u003e\u003ccanvas id=\"chartCanvas\" width=\"260\" height=\"260\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e          \n.perfume-profile {background-color:#0d0d0c;color:#e8e3d5;font-family:'Touvlo Regular',sans-serif;text-transform:uppercase;padding:2rem 1.5rem;border-radius:16px;max-width:600px;margin:auto;box-shadow:0 0 20px rgba(255,255,255,0.02);}          \nh3{font-size:1.1rem;font-weight:700;letter-spacing:1px;margin-bottom:0.7rem;opacity:0.95;text-align:left;}          \n.section-block{margin-bottom:2rem;}          \n.section-divider{height:1px;background:linear-gradient(to right,rgba(255,255,255,0.05),rgba(255,255,255,0.2),rgba(255,255,255,0.05));margin-bottom:1.2rem;border-radius:1px;}          \n.accords-grid{display:flex;flex-wrap:wrap;gap:0.5rem;}          \n.accord{background:var(--clr);color:#0d0d0c;border-radius:50px;padding:0.4rem 0.9rem;font-size:0.8rem;font-weight:600;letter-spacing:0.5px;transition:transform 0.2s ease;box-shadow:0 0 6px rgba(255,255,255,0.15);}          \n.accord:hover{transform:scale(1.05);}          \n.pyramid-column{margin-bottom:1.5rem;}          \n.pyramid-column h4{font-size:0.9rem;color:#b7b1a6;margin-bottom:0.5rem;font-weight:600;}          \n.notes{display:flex;flex-wrap:wrap;gap:0.8rem;justify-content:flex-start;align-items:center;}          \n.note-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;}    \n.note-item img{width:48px;height:48px;border-radius:50%;object-fit:cover;border:1px solid #2a2a28;box-shadow:0 0 8px rgba(255,255,255,0.05);}    \n.note-item span{font-size:0.75rem;opacity:0.9;text-align:center;}    \n.classification{text-align:center;}  \n.tabs{display:flex;justify-content:space-between;gap:0.4rem;margin-bottom:1rem;flex-wrap:nowrap;}  \n.tab{flex:1;background:none;border:1px solid #3a3a3a;color:#e8e3d5;font-size:0.7rem;padding:0.5rem 0;border-radius:50px;cursor:pointer;transition:background 0.3s,color 0.3s;white-space:nowrap;}  \n.tab.active{background:#e8e3d5;color:#0d0d0c;font-weight:600;}  \n.chart{display:flex;justify-content:center;align-items:center;min-height:300px;position:relative;}  \n.chart canvas{width:260px!important;height:260px!important;max-width:100%;display:block;}  \n@media(max-width:480px){  \n.perfume-profile{padding:1.5rem 1rem;}  \nh3{font-size:1rem;}  \n.tab{font-size:0.65rem;padding:0.45rem 0;}  \n.chart{min-height:260px;}  \n.chart canvas{width:220px!important;height:220px!important;}  \n}  \n\u003c\/style\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e \u003cscript\u003e  \nconst ctx=document.getElementById('chartCanvas');  \nlet chart;  \nconst chartData={  \ntype:{  \nlabels:['Spicy','Woody','Floral','Citrus','Sweet'],  \ndata:[6,6,6,4,5]  \n},  \noccasion:{  \nlabels:['Evening','Nightout','Sport','Daily','Business'],  \ndata:[8,6,2,9,9]  \n},  \nseason:{  \nlabels:['Winter','Fall','Spring','Summer','Rainy'],  \ndata:[3,6,9,8,6]  \n},  \naudience:{  \nlabels:['Masculine','Feminine','Classic','Modern','Bold'],  \ndata:[8,6,3,9,7]  \n}  \n};  \n\nfunction createChart(type){  \nif(chart)chart.destroy();  \nchart=new Chart(ctx,{  \ntype:'radar',  \ndata:{  \nlabels:chartData[type].labels,  \ndatasets:[{  \ndata:chartData[type].data,  \nborderColor:'#e8e3d5',  \nbackgroundColor:'rgba(232,227,213,0.12)',  \nborderWidth:1,  \npointRadius:2  \n}]  \n},  \noptions:{  \nmaintainAspectRatio:false,  \nscales:{r:{  \nangleLines:{color:'#333'},  \ngrid:{color:'#333'},  \npointLabels:{color:'#e8e3d5',font:{size:10}},  \nticks:{display:false},  \nsuggestedMin:0,  \nsuggestedMax:10  \n}},  \nplugins:{legend:{display:false}}  \n}  \n});  \n}  \n\ncreateChart('type');  \n\ndocument.querySelectorAll('.tab').forEach(btn=\u003e{  \nbtn.addEventListener('click',e=\u003e{  \ndocument.querySelectorAll('.tab').forEach(b=\u003eb.classList.remove('active'));  \ne.target.classList.add('active');  \ncreateChart(e.target.dataset.tab);  \nsetTimeout(()=\u003e{ Chart.helpers.each(Chart.instances, i =\u003e i.resize()); },200);  \n});  \n});  \n\u003c\/script\u003e\u003c\/p\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":42685768040522,"sku":null,"price":2199.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":42685768007754,"sku":null,"price":249.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Arcadian_Sin_S.png?v=1762967946"},{"product_id":"astrum-dor-extrait-de-parfum-for-women-and-men","title":"Astrum d'Or Extrait de Parfum For Women and Men","description":"\u003cp data-end=\"517\" data-start=\"270\"\u003eA fragrance that feels less like a scent and more like an atmosphere. It opens with a soft, glowing radiance — luminous white florals unfolding in a warm, golden embrace. Nothing sharp, nothing overpowering — just pure light wrapped in elegance.\u003c\/p\u003e\n\u003cp data-end=\"742\" data-start=\"519\"\u003eAs the fragrance settles, a creamy amber core begins to shine, smooth and enveloping, creating a halo-like aura around the wearer. The composition feels airy yet deeply comforting, almost spiritual in its calm confidence.\u003c\/p\u003e\n\u003cp data-end=\"928\" data-start=\"744\"\u003eThis is a scent designed to linger gently, leaving behind a trail that feels divine, serene, and unmistakably luxurious. Not meant to impress loudly, but to be remembered effortlessly.\u003c\/p\u003e\n\u003csection class=\"perfume-profile\"\u003e\n\u003cdiv class=\"accords section-block\"\u003e\n\u003ch3\u003eMAIN ACCORDS\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"accords-grid\"\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #b3b3b3;\"\u003eFloral\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #caa675;\"\u003eAmber\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #9ab5ac;\"\u003eSweet\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #d9a066;\"\u003eCreamy\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #a987b2;\"\u003eWoody\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid section-block\"\u003e\n\u003ch3\u003eFRAGRANCE PYRAMID\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eTOP\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange_Blossom.jpg?v=1762170230\" alt=\"Orange Blossom\"\u003e\u003cspan\u003eOrange Blossom\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eMIDDLE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Gurjum_Balsam.jpg?v=1762175980\" alt=\"White Amber\"\u003e\u003cspan\u003eWhite Amber\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eBASE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Woody-notes.jpg?v=1767442243\" alt=\"Woody Notes\"\u003e\u003cspan\u003eWoody Notes\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Peru_Balsam.jpg?v=1762174347\" alt=\"Peru Balsam\"\u003e\u003cspan\u003ePeru Balsam\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"classification section-block\"\u003e\n\u003ch3\u003eCLASSIFICATION\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"tabs\"\u003e\n\u003cbutton class=\"tab active\" data-tab=\"type\"\u003eTYPE\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"occasion\"\u003eOCCASION\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"season\"\u003eSEASON\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"audience\"\u003eAUDIENCE\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chart\"\u003e\u003ccanvas id=\"chartCanvas\" width=\"260\" height=\"260\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e        \n.perfume-profile {background-color:#0d0d0c;color:#e8e3d5;font-family:'Touvlo Regular',sans-serif;text-transform:uppercase;padding:2rem 1.5rem;border-radius:16px;max-width:600px;margin:auto;box-shadow:0 0 20px rgba(255,255,255,0.02);}        \nh3{font-size:1.1rem;font-weight:700;letter-spacing:1px;margin-bottom:0.7rem;opacity:0.95;text-align:left;}        \n.section-block{margin-bottom:2rem;}        \n.section-divider{height:1px;background:linear-gradient(to right,rgba(255,255,255,0.05),rgba(255,255,255,0.2),rgba(255,255,255,0.05));margin-bottom:1.2rem;border-radius:1px;}        \n.accords-grid{display:flex;flex-wrap:wrap;gap:0.5rem;}        \n.accord{background:var(--clr);color:#0d0d0c;border-radius:50px;padding:0.4rem 0.9rem;font-size:0.8rem;font-weight:600;letter-spacing:0.5px;transition:transform 0.2s ease;box-shadow:0 0 6px rgba(255,255,255,0.15);}        \n.accord:hover{transform:scale(1.05);}        \n.pyramid-column{margin-bottom:1.5rem;}        \n.pyramid-column h4{font-size:0.9rem;color:#b7b1a6;margin-bottom:0.5rem;font-weight:600;}        \n.notes{display:flex;flex-wrap:wrap;gap:0.8rem;justify-content:flex-start;align-items:center;}        \n.note-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;}  \n.note-item img{width:48px;height:48px;border-radius:50%;object-fit:cover;border:1px solid #2a2a28;box-shadow:0 0 8px rgba(255,255,255,0.05);}  \n.note-item span{font-size:0.75rem;opacity:0.9;text-align:center;}  \n\n.classification{text-align:center;}        \n.tabs{display:flex;justify-content:space-between;gap:0.4rem;margin-bottom:1rem;flex-wrap:nowrap;}        \n.tab{flex:1;background:none;border:1px solid #3a3a3a;color:#e8e3d5;font-size:0.7rem;padding:0.5rem 0;border-radius:50px;cursor:pointer;transition:background 0.3s,color 0.3s;white-space:nowrap;}        \n.tab.active{background:#e8e3d5;color:#0d0d0c;font-weight:600;}        \n.chart{display:flex;justify-content:center;align-items:center;min-height:300px;position:relative;}        \n.chart canvas{width:260px!important;height:260px!important;max-width:100%;display:block;}        \n@media(max-width:480px){.perfume-profile{padding:1.5rem 1rem;}h3{font-size:1rem;}.tab{font-size:0.65rem;padding:0.45rem 0;}.chart{min-height:260px;}.chart canvas{width:220px!important;height:220px!important;}}        \n\u003c\/style\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e \u003cscript\u003e\nconst ctx=document.getElementById('chartCanvas');\nlet chart;\nconst chartData={\ntype:{\nlabels:['Floral','Sweet','Creamy','Fruity','Powdery'],\ndata:[6,6,3,2,3]\n},\noccasion:{\nlabels:['Evening','Leisure','Nightout','Daily','Business'],\ndata:[6,6,8,9,9]\n},\nseason:{\nlabels:['Winter','Fall','Spring','Summer','Rainy'],\ndata:[2,9,9,2,2]\n},\naudience:{\nlabels:['Masculine','Feminine','Classic','Modern','Bold'],\ndata:[8,9,2,3,3]\n}\n};\nfunction createChart(type){\nif(chart)chart.destroy();\nchart=new Chart(ctx,{\ntype:'radar',\ndata:{\nlabels:chartData[type].labels,\ndatasets:[{\ndata:chartData[type].data,\nborderColor:'#e8e3d5',\nbackgroundColor:'rgba(232,227,213,0.12)',\nborderWidth:1,\npointRadius:2\n}]\n},\noptions:{\nmaintainAspectRatio:false,\nscales:{r:{\nangleLines:{color:'#333'},\ngrid:{color:'#333'},\npointLabels:{color:'#e8e3d5',font:{size:10}},\nticks:{display:false},\nsuggestedMin:0,\nsuggestedMax:10\n}},\nplugins:{legend:{display:false}}\n}\n});\n}\ncreateChart('type');\ndocument.querySelectorAll('.tab').forEach(btn=\u003e{\nbtn.addEventListener('click',e=\u003e{\ndocument.querySelectorAll('.tab').forEach(b=\u003eb.classList.remove('active'));\ne.target.classList.add('active');\ncreateChart(e.target.dataset.tab);\nsetTimeout(()=\u003e{ Chart.helpers.each(Chart.instances, i =\u003e i.resize()); }, 200);\n});\n});\n\u003c\/script\u003e\u003c\/p\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43201616183370,"sku":null,"price":2399.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43201616216138,"sku":null,"price":299.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled_design_20260107_124507_0000_1767770490600.png?v=1767770593"},{"product_id":"pleasurecraft-extrait-de-parfum-for-women-and-men","title":"PleasureCraft Extrait de Parfum For Women and Men","description":"\u003cp data-end=\"497\" data-start=\"260\"\u003eA refined expression of freedom and movement. The fragrance opens with a crisp, luminous freshness — effortless, airy, and immediately uplifting. There’s a sense of open roads and clean horizons, where clarity meets understated luxury.\u003c\/p\u003e\n\u003cp data-end=\"705\" data-start=\"499\"\u003eAs it evolves, smooth woods and gentle spices come forward, adding structure and warmth without disturbing the freshness. The dry-down is elegant and skin-centric — subtle, confident, and deeply wearable.\u003c\/p\u003e\n\u003cp data-end=\"900\" data-start=\"707\"\u003eDesigned for those who lead with presence rather than noise, this is a scent that feels modern, nomadic, and quietly powerful. A true signature for individuals who value refinement over excess.\u003c\/p\u003e\n\u003csection class=\"perfume-profile\"\u003e\n\u003cdiv class=\"accords section-block\"\u003e\n\u003ch3\u003eMAIN ACCORDS\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"accords-grid\"\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #b3b3b3;\"\u003eWoody\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #caa675;\"\u003eFresh\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #9ab5ac;\"\u003eCitrus\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #d9a066;\"\u003eAromatic\u003c\/div\u003e\n\u003cdiv class=\"accord\" style=\"--clr: #a987b2;\"\u003eSpicy\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid section-block\"\u003e\n\u003ch3\u003eFRAGRANCE PYRAMID\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eTOP\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328\" alt=\"Bergamot\"\u003e\u003cspan\u003eBergamot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ginger.jpg?v=1762166270\" alt=\"Ginger\"\u003e\u003cspan\u003eGinger\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eMIDDLE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Woody-notes.jpg?v=1767442243\" alt=\"Akigalawood\"\u003e\u003cspan\u003eAkigalawood\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030\" alt=\"Cedar\"\u003e\u003cspan\u003eCedar\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pyramid-column\"\u003e\n\u003ch4\u003eBASE\u003c\/h4\u003e\n\u003cdiv class=\"notes\"\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Tonka_Bean.jpg?v=1762157656\" alt=\"Tonka Bean\"\u003e\u003cspan\u003eTonka Bean\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vetiver.jpg?v=1762156903\" alt=\"Vetiver\"\u003e\u003cspan\u003eVetiver\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"note-item\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459\" alt=\"Musk\"\u003e\u003cspan\u003eMusk\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"classification section-block\"\u003e\n\u003ch3\u003eCLASSIFICATION\u003c\/h3\u003e\n\u003cdiv class=\"section-divider\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"tabs\"\u003e\n\u003cbutton class=\"tab active\" data-tab=\"type\"\u003eTYPE\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"occasion\"\u003eOCCASION\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"season\"\u003eSEASON\u003c\/button\u003e \u003cbutton class=\"tab\" data-tab=\"audience\"\u003eAUDIENCE\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"chart\"\u003e\u003ccanvas id=\"chartCanvas\" width=\"260\" height=\"260\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cstyle\u003e        \n.perfume-profile {background-color:#0d0d0c;color:#e8e3d5;font-family:'Touvlo Regular',sans-serif;text-transform:uppercase;padding:2rem 1.5rem;border-radius:16px;max-width:600px;margin:auto;box-shadow:0 0 20px rgba(255,255,255,0.02);}        \nh3{font-size:1.1rem;font-weight:700;letter-spacing:1px;margin-bottom:0.7rem;opacity:0.95;text-align:left;}        \n.section-block{margin-bottom:2rem;}        \n.section-divider{height:1px;background:linear-gradient(to right,rgba(255,255,255,0.05),rgba(255,255,255,0.2),rgba(255,255,255,0.05));margin-bottom:1.2rem;border-radius:1px;}        \n.accords-grid{display:flex;flex-wrap:wrap;gap:0.5rem;}        \n.accord{background:var(--clr);color:#0d0d0c;border-radius:50px;padding:0.4rem 0.9rem;font-size:0.8rem;font-weight:600;letter-spacing:0.5px;transition:transform 0.2s ease;box-shadow:0 0 6px rgba(255,255,255,0.15);}        \n.accord:hover{transform:scale(1.05);}        \n.pyramid-column{margin-bottom:1.5rem;}        \n.pyramid-column h4{font-size:0.9rem;color:#b7b1a6;margin-bottom:0.5rem;font-weight:600;}        \n.notes{display:flex;flex-wrap:wrap;gap:0.8rem;justify-content:flex-start;align-items:center;}        \n.note-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;}  \n.note-item img{width:48px;height:48px;border-radius:50%;object-fit:cover;border:1px solid #2a2a28;box-shadow:0 0 8px rgba(255,255,255,0.05);}  \n.note-item span{font-size:0.75rem;opacity:0.9;text-align:center;}  \n.classification{text-align:center;}        \n.tabs{display:flex;justify-content:space-between;gap:0.4rem;margin-bottom:1rem;flex-wrap:nowrap;}        \n.tab{flex:1;background:none;border:1px solid #3a3a3a;color:#e8e3d5;font-size:0.7rem;padding:0.5rem 0;border-radius:50px;cursor:pointer;transition:background 0.3s,color 0.3s;white-space:nowrap;}        \n.tab.active{background:#e8e3d5;color:#0d0d0c;font-weight:600;}        \n.chart{display:flex;justify-content:center;align-items:center;min-height:300px;position:relative;}        \n.chart canvas{width:260px!important;height:260px!important;max-width:100%;display:block;}        \n@media(max-width:480px){.perfume-profile{padding:1.5rem 1rem;}h3{font-size:1rem;}.tab{font-size:0.65rem;padding:0.45rem 0;}.chart{min-height:260px;}.chart canvas{width:220px!important;height:220px!important;}}        \n\u003c\/style\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e \u003cscript\u003e\nconst ctx=document.getElementById('chartCanvas');\nlet chart;\nconst chartData={\ntype:{\nlabels:['Fresh','Woody','Citrus','Spicy','Aromatic'],\ndata:[8,6,6,3,2]\n},\noccasion:{\nlabels:['Evening','Nightout','Leisure','Daily','Business'],\ndata:[3,3,6,8,6]\n},\nseason:{\nlabels:['Winter','Fall','Spring','Summer','Rainy'],\ndata:[2,3,6,9,6]\n},\naudience:{\nlabels:['Masculine','Feminine','Classic','Modern','Bold'],\ndata:[8,6,2,6,3]\n}\n};\nfunction createChart(type){\nif(chart)chart.destroy();\nchart=new Chart(ctx,{\ntype:'radar',\ndata:{\nlabels:chartData[type].labels,\ndatasets:[{\ndata:chartData[type].data,\nborderColor:'#e8e3d5',\nbackgroundColor:'rgba(232,227,213,0.12)',\nborderWidth:1,\npointRadius:2\n}]\n},\noptions:{\nmaintainAspectRatio:false,\nscales:{r:{\nangleLines:{color:'#333'},\ngrid:{color:'#333'},\npointLabels:{color:'#e8e3d5',font:{size:10}},\nticks:{display:false},\nsuggestedMin:0,\nsuggestedMax:10\n}},\nplugins:{legend:{display:false}}\n}\n});\n}\ncreateChart('type');\ndocument.querySelectorAll('.tab').forEach(btn=\u003e{\nbtn.addEventListener('click',e=\u003e{\ndocument.querySelectorAll('.tab').forEach(b=\u003eb.classList.remove('active'));\ne.target.classList.add('active');\ncreateChart(e.target.dataset.tab);\nsetTimeout(()=\u003e{ Chart.helpers.each(Chart.instances, i =\u003e i.resize()); }, 200);\n});\n});\n\u003c\/script\u003e\u003c\/p\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43201620836426,"sku":null,"price":2299.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43201620869194,"sku":null,"price":259.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled_design_20260107_125042_0000_1767770552366.png?v=1767770603"},{"product_id":"green-horizon-extrait-de-parfum-for-women-and-men","title":"Green Horizon Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'aromatic': {dot:'#60A860',track:'#C8E8C0',fill:'#60A860'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Green',      strength:9},\n    {name:'Woody',      strength:7},\n    {name:'aromatic',      strength:7},\n    {name:'Earthy',     strength:5},\n    {name:'mossy',      strength:3},\n  ],\n  notes:{\n    top:[\n      {name:'Mint',    src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Patchouli.jpg?v=1762157539'},\n      {name:'Galbanum',     src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Galbanum.jpg?v=1773922242'},\n      {name:'Orange Blossom',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange_Blossom.jpg?v=1762170230'}\n    ],\n    heart:[\n      {name:'Vetiver',  src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vetiver.jpg?v=1762156903'},\n      {name:'Ivy', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/lvy.jpg?v=1773922486'},\n      {name:'Oakmoss',  src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Oakmoss.jpg?v=1762174144'}\n    ],\n    base:[\n      {name:'Cedarwood',  src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030'},\n      {name:'Patchouli',  src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Patchouli.jpg?v=1762157539'},\n      {name:'White Musk', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/White_Musk.jpg?v=1762170308'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Green','Fresh','Fougère','Woody','Spicy'],\n      data:[9,7,5,6,4],\n      compound:'Green Fresh Woody',\n      line:'A wild chypre — bitter herbs, coastal wind, ancient earth'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[4,2,9,8,5],\n      compound:'Leisure · Daily',\n      line:'Built for open air and unhurried days — freedom has a scent'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[2,3,6,9,5],\n      compound:'Summer · Spring',\n      line:'Born when the world turns green and the wind picks up from the coast'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[6,4,5,7,8],\n      position:38,\n      title:'The Wild Picks No Side',\n      line:'Neither defines it — it finds whoever moves toward the horizon'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[7,3,9,8,6],\n      compound:'Grounded · Fluid',\n      line:'Rooted in earth, carried by wind — moves the way wild things do'\n    }\n  },\n  intensity:{\n    character:'Untamed',\n    inkColors:['#2D5A27','#3A7032','#1E4A20','#4A8040','#1A3018'],\n    projection:{pct:85,desc:'Commands the space around you'},\n    richness:  {pct:72,desc:'Layered and alive'},\n    complexity:{pct:82,desc:'Never the same twice'},\n    desc:'Arrives like a gust off a windswept cliff — lingers like something that grew wild and decided to stay'\n  },\n  anchor:{\n    line1:'The cliff before anyone else got there.',\n    line2:'Wind. Green. Yours.'\n  },\n  weather:{\n    season:'Windswept Coastal Morning',\n    name:'The air before the world\\narrives at the shore',\n    desc:'Raw · Green · Completely Alive',\n    bg:['#E6EEE9','#ECF3EE','#F2F7F3'],\n    labelColor:'rgba(35,75,48,0.65)',\n    nameColor:'#1A3524',\n    descColor:'rgba(45,90,58,0.6)',\n    ruleColor:'rgba(70,130,88,0.2)',\n    particles:{count:28,type:'spray',color:[100,165,125],speed:0.7,size:[1,2.5],drift:1.4},\n    glow:{color:'rgba(80,160,105,0.1)',x:0.5,y:0.22,r:0.85}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43385912983626,"sku":null,"price":2399.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43385913016394,"sku":null,"price":299.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_175157_0000.png?v=1774009348"},{"product_id":"citrus-citrus-extrait-de-parfum-for-women-and-men","title":"Citrus Citrus Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'fresh spicy': {dot:'#E86840',track:'#FFD0B8',fill:'#E86840'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Citrus', strength:10},\n    {name:'Fresh spicy', strength:6},\n    {name:'Woody', strength:4},\n    {name:'Aromatic', strength:4},\n    {name:'Fresh', strength:3},\n  ],\n  notes:{\n    top:[\n      {name:'Bergamot',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328'},\n      {name:'Citron', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Citron.jpg?v=1773933688'}\n    ],\n    heart:[\n      {name:'Ginger',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ginger.jpg?v=1762166270'},\n      {name:'Cedar', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030'}\n    ],\n    base:[\n      {name:'Vetiver', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vetiver.jpg?v=1762156903'},\n      {name:'Benzoin', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Benzoin.jpg?v=1762156754'},\n      {name:'Musk', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Citrus','Fresh','Green','Woody','Spicy'],\n      data:[8,7,3,3,2],\n      compound:'Citrus Fresh',\n      line:'Calabrian bergamot in its purest form — the scent of a fruit cut open with bare hands'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[2,2,9,9,6],\n      compound:'Daily · Leisure',\n      line:'The morning fragrance — the one you reach for without thinking, every single time'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[1,2,7,9,5],\n      compound:'Summer · Spring',\n      line:'It is not what you wear to the season — it is the feeling of the season itself'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[5,5,7,6,4],\n      position:50,\n      title:'Clean Is Its Own Statement',\n      line:'Bergamot answers to no gender — just skin, just air, just the simplest luxury'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[5,6,5,9,3],\n      compound:'Fluid · Intimate',\n      line:'Barely there, then suddenly everywhere — the best things announce themselves softly'\n    }\n  },\n  intensity:{\n    character:'Featherlight',\n    inkColors:['#D4A020','#E8B828','#C09010','#F0CC40','#A87808'],\n    projection:{pct:42,desc:'Intimate and close to skin'},\n    richness: {pct:38,desc:'Pure and beautifully singular'},\n    complexity:{pct:40,desc:'Honest and deliberately linear'},\n    desc:'The rarest kind of restraint — a fragrance that says everything by saying almost nothing'\n  },\n  anchor:{\n    line1:'The kitchen in the morning. Someone cut a lemon.',\n    line2:'That was enough.'\n  },\n  weather:{\n    season:'Mediterranean Summer Morning',\n    name:'Warm stone and citrus groves\\nbefore the world fully wakes',\n    desc:'Pure · Luminous · The simplest joy',\n    bg:['#FBF6E4','#FDF9EC','#FEFBF2'],\n    labelColor:'rgba(140,95,10,0.65)',\n    nameColor:'#2A1C04',\n    descColor:'rgba(140,95,10,0.58)',\n    ruleColor:'rgba(190,140,20,0.2)',\n    particles:{count:22,type:'shimmer',color:[240,200,80],speed:0.18,size:[0.8,2],drift:0.4},\n    glow:{color:'rgba(240,190,40,0.1)',x:0.5,y:0.2,r:0.95}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43385918849098,"sku":null,"price":1999.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43385918881866,"sku":null,"price":229.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_181147_0000.png?v=1774010535"},{"product_id":"vetiver-distille-extrait-de-parfum-for-women-and-men","title":"Vetiver Distillé Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'aromatic': {dot:'#60A860',track:'#C8E8C0',fill:'#60A860'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Woody', strength:9},\n    {name:'Aromatic', strength:7},\n    {name:'Citrus', strength:6},\n    {name:'Earthy', strength:6},\n    {name:'Warm spicy', strength:4},\n  ],\n  notes:{\n    top:[\n      {name:'Bitter Orange', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange.jpg?v=1762165932'},\n      {name:'Bergamot', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328'},\n      {name:'Pepper', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pepper.jpg?v=1773923227'},\n      {name:'Caraway', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Caraway.jpg?v=1773923374'},\n      {name:'Cardamom', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cardamom.jpg?v=1762166172'}\n    ],\n    heart:[\n      {name:'Vetiver', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vetiver.jpg?v=1762156903'},\n      {name:'Pink Pepper', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pink_Pepper.jpg?v=1762166223g'},\n      {name:'Cloves', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Clove.jpg?v=1762171535'},\n      {name:'Licorice', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Licorice.jpg?v=1773923627'},\n      {name:'Incense',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Incense.jpg?v=1773923706'}\n    ],\n    base:[\n      {name:'Cedar',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030'},\n      {name:'Oakmoss',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Oakmoss.jpg?v=1762174144'},\n      {name:'Sandalwood',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Sandalwood.jpg?v=1762166620'},\n      {name:'Myrhh',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Myrhh.jpg?v=1773923977'},\n      {name:'Musk',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459'},\n      {name:'Ambrette', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ambrette.jpg?v=1762170576'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Green','Woody','Spicy','Earthy','Fresh'],\n      data:[9,8,7,6,7],\n      compound:'Earthy Aromatic Fresh',\n      line:'25% raw Haitian vetiver — green, bright, and stripped of all unnecessary decoration'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[4,3,7,9,8],\n      compound:'Daily · Business',\n      line:'Clean enough for the boardroom, alive enough for the morning walk that precedes it'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[2,5,9,7,6],\n      compound:'Spring · Summer',\n      line:'Wears like the first genuinely warm morning — crisp air, green earth, no coat needed'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[7,3,8,6,5],\n      position:32,\n      title:'Clarity Has Its Own Pull',\n      line:'Vetiver this pure and unadorned is for those who already know what they want — whoever they are'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[5,4,9,6,7],\n      compound:'Grounded · Commanding',\n      line:'Rooted like the grass it came from — unhurried, unbothered, entirely itself'\n    }\n  },\n  intensity:{\n    character:'Austere',\n    inkColors:['#3A5A28','#2A4A1A','#4A6A32','#1E3A14','#5A7A3E'],\n    projection:{pct:65,desc:'Extends quietly into the room'},\n    richness: {pct:82,desc:'Dense green depth beneath the brightness'},\n    complexity:{pct:78,desc:'Shifts from bright to rooted over hours'},\n    desc:'The restraint of something that needs no embellishment — raw, bright, entirely resolved'\n  },\n  anchor:{\n    line1:'Wet grass before anyone else was outside.',\n    line2:'Just the earth. Just that.'\n  },\n  weather:{\n    season:'Spring Morning After Rain',\n    name:'The garden when the soil is still dark\\nand everything is very quietly alive',\n    desc:'Raw · Green · Unhurried',\n    bg:['#EAF0EA','#EFF5EF','#F4F8F4'],\n    labelColor:'rgba(40,80,40,0.65)',\n    nameColor:'#1A301A',\n    descColor:'rgba(50,90,50,0.6)',\n    ruleColor:'rgba(70,120,70,0.2)',\n    particles:{count:22,type:'spray',color:[110,170,110],speed:0.5,size:[0.8,2],drift:0.8},\n    glow:{color:'rgba(80,140,80,0.09)',x:0.5,y:0.22,r:0.85}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43385923797066,"sku":null,"price":2399.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43385923829834,"sku":null,"price":299.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_175311_0000.png?v=1774009414"},{"product_id":"one-yoga-day-extrait-de-parfum-for-women-and-men","title":"One Yoga Day Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'aromatic': {dot:'#60A860',track:'#C8E8C0',fill:'#60A860'},\n  'herbal': {dot:'#508840',track:'#C0D8A8',fill:'#508840'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Amber', strength:9},\n    {name:'Musk', strength:9},\n    {name:'Aromatic', strength:8},\n    {name:'Herbal', strength:7},\n    {name:'Powdery', strength:6}\n  ],\n  notes:{\n    top:[\n      {name:'Clary Sage', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Sage.jpg?v=1773933145'},\n      {name:'Mirabelle', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Mirabelle.jpg?v=1773933217'}\n    ],\n    heart:[\n      {name:'Orris Root', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orris_Root.jpg?v=1773933297'},\n      {name:'Cistus Incanus',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cistus_Incanus.jpg?v=1773933370'}\n    ],\n    base:[\n      {name:'Olibanum',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Olibanum.jpg?v=1762165862'},\n      {name:'Ambroxan',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ambroxan.jpg?v=1767442320'},\n      {name:'Musk', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Spicy','Earthy','Woody','Fresh','Green'],\n      data:[7,3,9,4,6],\n      compound:'Aromatic Earthy Resinous',\n      line:'Clary sage and burning frankincense — a ritual distilled into something you can wear'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[4,2,9,8,3],\n      compound:'Leisure · Daily',\n      line:'For the hours that belong entirely to you — slow mornings and quiet intention'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[3,5,7,9,6],\n      compound:'Summer · Spring',\n      line:'Belongs to sun-warmed mornings and evenings when the air carries meaning'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[5,5,4,8,5],\n      position:50,\n      title:'The Practice Has No Gender',\n      line:'Like breath itself — it simply belongs to whoever is present enough to wear it'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[5,8,9,6,3],\n      compound:'Grounded · Intimate',\n      line:'Asks nothing of you except presence — then gives you the feeling of having arrived'\n    }\n  },\n  intensity:{\n    character:'Meditative',\n    inkColors:['#7A5828','#9A7038','#5A4018','#B88848','#3A2C10'],\n    projection:{pct:62,desc:'Stays close like a daily practice'},\n    richness: {pct:70,desc:'Deep and quietly ceremonial'},\n    complexity:{pct:75,desc:'Reveals itself only in stillness'},\n    desc:'Not worn — inhabited. The kind of scent that changes your breathing without you noticing'\n  },\n  anchor:{\n    line1:'The mat still warm. Smoke still in the air',\n    line2:'You stayed a little longer than necessary.'\n  },\n  weather:{\n    season:'Desert Morning Calm',\n    name:'Before the heat arrives\\nwhen sage still holds the night\\'s cool',\n    desc:'Still · Sacred · Unhurried',\n    bg:['#F0EAD8','#F5EFE0','#F8F3E8'],\n    labelColor:'rgba(100,65,20,0.65)',\n    nameColor:'#2A1A08',\n    descColor:'rgba(110,70,20,0.58)',\n    ruleColor:'rgba(150,100,30,0.2)',\n    particles:{count:16,type:'dust',color:[175,130,60],speed:0.12,size:[1.5,3.5],drift:0.6},\n    glow:{color:'rgba(180,120,30,0.1)',x:0.5,y:0.28,r:0.85}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43385928319050,"sku":null,"price":2299.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43385928351818,"sku":null,"price":279.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_175439_0000.png?v=1774009527"},{"product_id":"on-the-yacht-extrait-de-parfum-for-women-and-men","title":"Rainy Rose Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose': {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'Ozonic': {dot:'#60A8C8',track:'#C0E0F0',fill:'#60A8C8'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    \n    {name:'Aquatic', strength:9},\n    {name:'Woody', strength:7},\n    {name:'Green', strength:6},\n    {name:'Ozonic', strength:5},\n    {name:'Rose', strength:5}\n  ],\n  notes:{\n    top:[\n      {name:'Green Notes', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Green_Notes.jpg?v=1773925458'},\n      {name:'Bergamot', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328'},\n      {name:'Pink Pepper', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pink_Pepper.jpg?v=1762166223'}\n    ],\n    heart:[\n      {name:'Watery Notes', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Watery_notes.jpg?v=1773925626'},\n      {name:'Rainy Notes', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Rain_notes.jpg?v=1773925658'},\n      {name:'Turkish Rose', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Turkish_Rose.jpg?v=1762176941'},\n      {name:'Jasmine', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Jasmine.jpg?v=1762166951'}\n    ],\n    base:[\n      {name:'Pine Tree', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pine_Tree.jpg?v=1773925781'},\n      {name:'Patchouli', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Patchouli.jpg?v=1762157539'},\n      {name:'Moss', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Moss.jpg?v=1762157733'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Fresh','Aquatic','Green','Floral','Earthy'],\n      data:[9,8,7,5,2],\n      compound:'Fresh Aquatic Floral',\n      line:'Petrichor and rose through a monsoon wind — cool rain carrying something quietly warm beneath it'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[5,2,9,7,3],\n      compound:'Leisure · Evening',\n      line:'For afternoons that turn grey and cool without warning — and feel better for it'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[2,3,6,6,9],\n      compound:'Rainy · Spring',\n      line:'This is the monsoon — the smell of the city when the heat finally breaks and the air changes'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[3,7,5,7,4],\n      position:65,\n      title:'Grace Has No Dress Code',\n      line:'The rain does not ask who it falls on — and neither does this'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[5,8,5,9,3],\n      compound:'Fluid · Intimate',\n      line:'Moves the way rain does — without asking, without stopping, leaving everything changed'\n    }\n  },\n  intensity:{\n    character:'Tender',\n    inkColors:['#5A8F7A','#4A7A8A','#6A9E90','#3A7060','#7AACAA'],\n    projection:{pct:55,desc:'Stays close like shelter from the rain'},\n    richness: {pct:62,desc:'Cool on the surface, warm underneath'},\n    complexity:{pct:70,desc:'Shifts with the wind as it passes'},\n    desc:'The coolness of rain on warm skin — and the small comfort that comes quietly after'\n  },\n  anchor:{\n    line1:'The window left open. Rain coming in sideways.',\n    line2:'You pulled the blanket anyway.'\n  },\n  weather:{\n    season:'Monsoon Afternoon',\n    name:'When the sky darkens at noon\\nand the wind carries cold and roses both',\n    desc:'Cool · Alive · Something Warm Beneath',\n    bg:['#D8E4EC','#E0EAF0','#E8EFF5'],\n    labelColor:'rgba(40,70,100,0.68)',\n    nameColor:'#0E2030',\n    descColor:'rgba(40,70,100,0.6)',\n    ruleColor:'rgba(60,100,140,0.2)',\n    particles:{count:85,type:'rain',color:[140,175,210],speed:5.5,size:[0.5,1.2],drift:0.8},\n    glow:{color:'rgba(80,120,180,0.1)',x:0.5,y:0.15,r:0.85}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43385946701898,"sku":null,"price":2199.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43385946734666,"sku":null,"price":269.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_180612_0000.png?v=1774010195"},{"product_id":"on-the-yacht-extrait-de-parfum-for-women-and-men-1","title":"On The Yacht Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'marine': {dot:'#0870B8',track:'#A8D8F8',fill:'#0870B8'},\n  'aromatic': {dot:'#60A860',track:'#C8E8C0',fill:'#60A860'},\n  'salty': {dot:'#60A8C8',track:'#C0E0F0',fill:'#60A8C8'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Woody', strength:9},\n    {name:'Marine', strength:6},\n    {name:'Salty', strength:6},\n    {name:'Green', strength:4},\n    {name:'Aromatic', strength:4}\n  ],\n  notes:{\n    top:[\n      {name:'Sea Salt', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Sea_Salt.jpg?v=1773934526'},\n      {name:'Sea water', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Watery_notes.jpg?v=1773925626'},\n      {name:'Green Notes',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Green_Notes.jpg?v=1773925458'},\n      {name:'Rose', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Turkish_Rose.jpg?v=1762176941'}\n    ],\n    heart:[\n      {name:'Cinnamon', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cinnamon.jpg?v=1762168957'},\n      {name:'Heliotrope', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Heliotrope.jpg?v=1762173999'},\n      {name:'Cedar', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030'}\n    ],\n    base:[\n      {name:'Woody notes', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Woody-notes.jpg?v=1767442243'},\n      {name:'Vanilla', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vanilla.jpg?v=1762157792'},\n      {name:'Ambergris',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ambergris.jpg?v=1762174551'},\n      {name:'Musk', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Aquatic','Woody','Fresh','Spicy','Sweet'],\n      data:[8,7,7,6,2],\n      compound:'Woody Musky Aquatic',\n      line:'Polished teak in open sun — salty warmth, cashmeran depth, nothing to prove'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[7,6,8,6,5],\n      compound:'Leisure · Evening',\n      line:'For sun-drenched afternoons that drift effortlessly into warm unhurried nights'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[2,3,6,9,3],\n      compound:'Summer · Spring',\n      line:'Born on open water when the season is at its most generous and light'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[6,4,5,8,6],\n      position:40,\n      title:'The Horizon Belongs to Both',\n      line:'Salt and sandalwood answer to no one — this is fragrance for whoever stands at the bow'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[8,5,4,9,6],\n      compound:'Magnetic · Fluid',\n      line:'Moves the way open water does — effortless, expensive, impossible to ignore'\n    }\n  },\n  intensity:{\n    character:'Radiant',\n    inkColors:['#7A6030','#906838','#A07840','#5A4820','#C08848'],\n    projection:{pct:80,desc:'Radiates warmth across the deck'},\n    richness: {pct:82,desc:'Warm and deeply textured'},\n    complexity:{pct:88,desc:'Shifts like the tide beneath you'},\n    desc:'The kind of scent that makes strangers turn around — unhurried, golden, completely at ease'\n  },\n  anchor:{\n    line1:'The deck at noon. The engine off.',\n    line2:'Salt. Wood. Nothing required of you.'\n  },\n  weather:{\n    season:'Open Mediterranean Summer',\n    name:'Flat water and noon light\\nthe sense that time has stopped for you',\n    desc:'Golden · Weightless · Unhurried',\n    bg:['#F5EDD8','#F8F2E2','#FAF5E8'],\n    labelColor:'rgba(130,90,20,0.65)',\n    nameColor:'#2A1C08',\n    descColor:'rgba(130,90,20,0.6)',\n    ruleColor:'rgba(180,130,40,0.2)',\n    particles:{count:28,type:'shimmer',color:[210,175,80],speed:0.22,size:[1,3],drift:0.5},\n    glow:{color:'rgba(220,170,50,0.12)',x:0.5,y:0.2,r:0.9}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43385956008010,"sku":null,"price":2199.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43385956040778,"sku":null,"price":269.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_180943_0000.png?v=1774010411"},{"product_id":"velvet-skyline-extrait-de-parfum-for-women-and-men","title":"Velvet Skyline Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Fresh', strength:9},\n    {name:'Floral', strength:8},\n    {name:'Fruity', strength:8},\n    {name:'Musky', strength:7},\n    {name:'Sweet', strength:5}\n  ],\n  notes:{\n    top:[\n      {name:'Lychee', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Lychee.jpg?v=1762177200'},\n      {name:'Cassis', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cassis.jpg?v=1773931895'},\n      {name:'Peach',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Peach.jpg?v=1762173885'},\n      {name:'Tangerine',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange.jpg?v=1762165932'}\n    ],\n    heart:[\n      {name:'Peony', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Peony.jpg?v=1773932034'},\n      {name:'Water Lily',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Water_Lily.jpg?v=1773932102'},\n      {name:'Jasmine', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Jasmine.jpg?v=1762166951'}\n    ],\n    base:[\n      {name:'Ambroxan',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Ambroxan.jpg?v=1767442320'},\n      {name:'Praline', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Praline.jpg?v=1773932203'},\n      {name:'Vanilla', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Vanilla.jpg?v=1762157792'},\n      {name:'Musk', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459'},\n      {name:'Oakmoss', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Oakmoss.jpg?v=1762174144'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Fruity','Sweet','Floral','Fresh','Gourmand'],\n      data:[8,6,6,5,4],\n      compound:'Fruity Sweet Floral',\n      line:'Lychee over jasmine over praline — the language of a city that never sleeps early'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[8,8,6,5,3],\n      compound:'Evening · Night Out',\n      line:'Made for the kind of night you will still be describing years later'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[2,3,7,9,5],\n      compound:'Summer · Spring',\n      line:'It belongs to warm nights and open rooftops — the city at its most electric and alive'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[6,7,4,7,6],\n      position:65,\n      title:'Wears Like a New York Night',\n      line:'The Village never asked permission — and neither should the person wearing this'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[9,7,3,8,5],\n      compound:'Magnetic · Fluid',\n      line:'Draws people in without a word — then lingers like a conversation worth continuing'\n    }\n  },\n  intensity:{\n    character:'Luminous',\n    inkColors:['#C05080','#A03060','#D07090','#801840','#E090A8'],\n    projection:{pct:78,desc:'Glows without demanding attention'},\n    richness: {pct:82,desc:'Sweet and beautifully layered'},\n    complexity:{pct:76,desc:'Keeps revealing new facets'},\n    desc:'Like the skyline at dusk — lit from within, layered, impossible to look away from'\n  },\n  anchor:{\n    line1:'The rooftop after midnight. Your laugh in someone else\\'s memory.',\n    line2:'The city kept going. So did you.'\n  },\n  weather:{\n    season:'Summer Night in the City',\n    name:'Warm lights rising\\nthrough the dark above the rooftops',\n    desc:'Luminous · Alive · The city at its best',\n    bg:['#0C0810','#140C1A','#080610'],\n    labelColor:'rgba(220,160,200,0.65)',\n    nameColor:'#F5E0F0',\n    descColor:'rgba(200,140,180,0.6)',\n    ruleColor:'rgba(200,120,180,0.2)',\n    particles:{count:38,type:'fireflies',color:[220,160,210],speed:0.35,size:[1.5,3],drift:0.5},\n    glow:{color:'rgba(160,40,140,0.25)',x:0.5,y:0.3,r:0.75}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43416504959050,"sku":null,"price":2299.0,"currency_code":"INR","in_stock":false},{"title":"3 ML","offer_id":43416504991818,"sku":null,"price":279.0,"currency_code":"INR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_180405_0000.png?v=1774010108"},{"product_id":"golden-harbour-extrait-de-parfum-for-women-and-men","title":"Golden Harbour Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Citrus', strength:9},\n    {name:'White floral', strength:8},\n    {name:'Sweet', strength:7},\n    {name:'Fruity', strength:6},\n    {name:'Powdery', strength:5}\n  ],\n  notes:{\n    top:[\n      {name:'Mandarin Orange',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange.jpg?v=1762165932'},\n      {name:'Bergamot', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328'},\n      {name:'Black Currant', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Black_Currant.jpg?v=1773932638'}\n    ],\n    heart:[\n      {name:'Orange Blossom',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Orange_Blossom.jpg?v=1762170230'},\n      {name:'Jasmine', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Jasmine.jpg?v=1762166951'}\n    ],\n    base:[\n      {name:'Marshmallow',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Marshmallow.jpg?v=1762176407'},\n      {name:'White Musk', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/White_Musk.jpg?v=1762170308'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Fresh','Citrus','Fruity','Sweet','Aquatic'],\n      data:[9,8,7,4,4],\n      compound:'Citrus Fresh Fruity',\n      line:'Bergamot and black currant on warm summer air — clean, vivid, entirely unapologetic'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[3,1,9,9,7],\n      compound:'Leisure · Daily',\n      line:'For days when the only agenda is light, open water, and no agenda at all'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[1,1,6,9,4],\n      compound:'Summer · Spring',\n      line:'This fragrance does not evoke the season — it simply is the season'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[4,6,5,7,5],\n      position:55,\n      title:'The Harbour Has No Gates',\n      line:'Bright and generous — made for anyone willing to spend the day in the sun'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[6,5,4,9,3],\n      compound:'Fluid · Magnetic',\n      line:'Moves freely, changes with the air, leaves something bright wherever it has been'\n    }\n  },\n  intensity:{\n    character:'Breezy',\n    inkColors:['#E8A020','#D08010','#F0B830','#C07008','#FFD060'],\n    projection:{pct:58,desc:'Bright and close to the skin'},\n    richness: {pct:48,desc:'Light and genuinely joyful'},\n    complexity:{pct:52,desc:'Clean and beautifully honest'},\n    desc:'Not every fragrance needs to be a statement — some just make the day feel like a gift'\n  },\n  anchor:{\n    line1:'The ferry landing. Salt and citrus and nowhere urgent to be.',\n    line2:'This is what free smells like.'\n  },\n  weather:{\n    season:'Bright Summer Morning',\n    name:'The harbour at nine\\nbefore the heat arrives and everything is possible',\n    desc:'Open · Bright · Completely Free',\n    bg:['#EEF6FC','#F2F8FE','#F6FAFF'],\n    labelColor:'rgba(30,100,160,0.62)',\n    nameColor:'#0C2840',\n    descColor:'rgba(30,100,160,0.55)',\n    ruleColor:'rgba(40,130,200,0.2)',\n    particles:{count:42,type:'spray',color:[120,190,240],speed:0.9,size:[0.8,2.2],drift:1.6},\n    glow:{color:'rgba(100,180,240,0.1)',x:0.5,y:0.18,r:0.9}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43416508104778,"sku":null,"price":2199.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43416508137546,"sku":null,"price":269.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260320_180813_0000.png?v=1774010314"},{"product_id":"crown-of-cedar-extrait-de-parfum-for-women-and-men","title":"Crown Of Cedar Extrait De Parfum For Women And Men","description":"\u003cdiv id=\"pp-root\"\u003e\n\n\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;1,300;1,400\u0026family=Josefin+Sans:wght@200;300;400\u0026display=swap');\n*{box-sizing:border-box;margin:0;padding:0;}\n\n#pp-root{background:#F3EFE8;color:#2B2622;font-family:'Josefin Sans',sans-serif;box-sizing:border-box;}\n.pp-inner{padding:2rem 1.25rem;box-sizing:border-box;}\n.pp-label{font-size:11px;letter-spacing:4px;font-weight:400;color:#4B443D;text-transform:uppercase;margin-bottom:0.75rem;text-align:center;}\n.pp-rule{height:0.5px;background:#C8BAA8;margin-bottom:1.4rem;}\n.pp-section{margin-bottom:2.8rem;}\n\n.accord-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:0.5px solid #E8E0D4;}\n.accord-row:last-child{border-bottom:none;}\n.accord-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}\n.accord-name{font-size:10px;letter-spacing:2px;font-weight:300;color:#2B2622;text-transform:uppercase;width:86px;flex-shrink:0;line-height:1.3;}\n.accord-track{flex:1;height:2px;border-radius:2px;overflow:hidden;}\n.accord-fill{height:100%;border-radius:2px;width:0%;transition:width 1.2s cubic-bezier(0.4,0,0.2,1);}\n\n.pyr-tier{margin-bottom:1.8rem;}\n.pyr-tier:last-child{margin-bottom:0;}\n.pyr-tier-label{font-size:10px;letter-spacing:4px;font-weight:300;color:#8A7458;text-transform:uppercase;margin-bottom:1rem;padding-bottom:0.5rem;border-bottom:0.5px solid #D8CEC2;text-align:center;}\n.pyr-notes{display:grid;gap:14px 0;}\n.note-chip{display:flex;flex-direction:column;align-items:center;gap:5px;}\n.note-icon{border-radius:50%;background:#EAE4DA;border:0.5px solid #D8CEC2;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0;}\n.note-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%;}\n.note-name{font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;line-height:1.3;word-break:keep-all;overflow-wrap:normal;hyphens:none;}\n\n.class-tabs{display:flex;gap:4px;flex-wrap:nowrap;width:100%;margin-bottom:1.6rem;}\n.ctab{flex:1;min-width:0;font-weight:300;text-transform:uppercase;padding:9px 2px;border:0.5px solid #C8BAA8;border-radius:40px;color:#4B443D;background:none;cursor:pointer;transition:all 0.25s;font-family:'Josefin Sans',sans-serif;white-space:nowrap;-webkit-tap-highlight-color:transparent;text-align:center;overflow:hidden;letter-spacing:1px;}\n.ctab.active{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n\n.descriptor-wrap{margin-bottom:1.2rem;min-height:68px;text-align:center;}\n.descriptor-compound{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.4rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.35rem;transition:opacity 0.3s,transform 0.3s;}\n.descriptor-line{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;transition:opacity 0.3s;}\n.descriptor-compound.pp-fade{opacity:0;transform:translateY(4px);}\n.descriptor-line.pp-fade{opacity:0;}\n\n.spectrum-wrap{margin-bottom:1.2rem;min-height:68px;}\n.spectrum-label-row{display:flex;justify-content:space-between;margin-bottom:10px;}\n.spectrum-label-row span{font-size:9px;letter-spacing:2.5px;font-weight:300;color:#8A7458;text-transform:uppercase;}\n.spectrum-track-bar{position:relative;height:1.5px;background:#D8CEC2;border-radius:2px;margin-bottom:14px;}\n.spectrum-dot-marker{position:absolute;top:50%;width:10px;height:10px;background:#2B2622;border-radius:50%;transform:translate(-50%,-50%);}\n.spectrum-title{font-family:'Cormorant Garamond',serif;font-size:clamp(1.4rem,6vw,2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.3rem;text-align:center;}\n.spectrum-sub{font-size:9px;letter-spacing:2px;font-weight:300;color:#8A7458;text-transform:uppercase;line-height:1.7;text-align:center;}\n\n.radar-outer{display:flex;justify-content:center;width:100%;}\n.radar-outer canvas{display:block;margin:0 auto;touch-action:pan-y;}\n\n.pp-dots{display:flex;justify-content:center;align-items:center;gap:6px;padding-top:16px;}\n.pp-dot{width:5px;height:5px;border-radius:50%;background:#D8CEC2;transition:all 0.3s;flex-shrink:0;}\n.pp-dot.active{background:#2B2622;transform:scale(1.3);}\n\n.pp-swipe-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding-top:12px;padding-bottom:4px;transition:opacity 0.6s;}\n.pp-swipe-hint.hidden{opacity:0;pointer-events:none;}\n.pp-swipe-arrow{font-size:12px;color:#B7A27A;display:inline-block;}\n.pp-swipe-arrow.left{animation:pp-arrow-left 1.6s ease-in-out infinite;}\n.pp-swipe-arrow.right{animation:pp-arrow-right 1.6s ease-in-out infinite;}\n.pp-swipe-text{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n@keyframes pp-arrow-left{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(-4px);opacity:1;}}\n@keyframes pp-arrow-right{0%,100%{transform:translateX(0);opacity:0.5;}50%{transform:translateX(4px);opacity:1;}}\n\n.pp-nav{display:none;align-items:center;justify-content:center;gap:16px;padding-top:14px;padding-bottom:4px;}\n.pp-nav-btn{width:32px;height:32px;border-radius:50%;border:0.5px solid #C8BAA8;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;color:#4B443D;transition:all 0.2s;font-family:'Josefin Sans',sans-serif;-webkit-tap-highlight-color:transparent;}\n.pp-nav-btn:hover{background:#2B2622;color:#F3EFE8;border-color:#2B2622;}\n.pp-nav-btn:disabled{opacity:0.25;cursor:default;}\n.pp-nav-btn:disabled:hover{background:none;color:#4B443D;border-color:#C8BAA8;}\n.pp-nav-label{font-size:9px;letter-spacing:3px;font-weight:300;color:#B7A27A;text-transform:uppercase;}\n\n.si-ink-wrap{display:flex;justify-content:center;margin-bottom:1.4rem;}\n.si-char{text-align:center;margin-bottom:1.6rem;}\n.si-char-word{font-family:'Cormorant Garamond',serif;font-size:clamp(1.6rem,7vw,2.2rem);font-weight:300;font-style:italic;color:#2B2622;line-height:1.1;margin-bottom:0.4rem;}\n.si-char-sub{font-size:7px;letter-spacing:2px;font-weight:300;color:#9A845C;text-transform:uppercase;}\n.si-dims{display:flex;justify-content:center;gap:8px;margin-bottom:1.6rem;}\n.si-dim{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;min-width:0;max-width:100px;}\n.si-dim-name{font-size:8.5px;letter-spacing:2px;font-weight:300;color:#4B443D;text-transform:uppercase;text-align:center;}\n.si-dim-track{width:100%;height:2px;background:#EAE4DA;border-radius:2px;overflow:hidden;}\n.si-dim-fill{height:100%;border-radius:2px;width:0%;transition:width 1.4s cubic-bezier(0.4,0,0.2,1);}\n.si-dim-desc{font-size:7.5px;letter-spacing:1px;font-weight:300;color:#9A845C;text-transform:uppercase;text-align:center;line-height:1.5;}\n.si-overall-desc{text-align:center;font-family:'Cormorant Garamond',serif;font-size:1.05rem;font-style:italic;font-weight:300;color:#4B443D;line-height:1.6;}\n\n.ma-section{position:relative;overflow:hidden;background:#F8F3EB;padding:2.2rem 1.25rem 2.8rem;text-align:center;border-top:0.5px solid #E8E0D4;border-bottom:0.5px solid #E8E0D4;}\n.ma-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.ma-content{position:relative;z-index:2;}\n.ma-text{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:clamp(1.3rem,5vw,1.9rem);line-height:1.45;color:#2B2622;max-width:100%;padding:0 0.5rem;word-break:normal;overflow-wrap:break-word;}\n.ma-text span{opacity:0;transition:opacity 0.6s ease;}\n.ma-text span.show{opacity:1;}\n\n.mw-section{position:relative;overflow:hidden;}\n.mw-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}\n.mw-inner{position:relative;z-index:2;padding:2.8rem 2rem 3.5rem;text-align:center;}\n.mw-label-el{font-family:'Josefin Sans',sans-serif;font-size:11px;letter-spacing:4px;font-weight:400;text-transform:uppercase;margin-bottom:0.75rem;}\n.mw-rule-el{height:0.5px;margin-bottom:2.2rem;}\n.mw-content{opacity:0;transition:opacity 1.2s;}\n.mw-content.visible{opacity:1;}\n.mw-season{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:5px;font-weight:300;text-transform:uppercase;margin-bottom:1rem;}\n.mw-name{font-family:'Cormorant Garamond',serif;font-size:clamp(1.3rem,5vw,2rem);font-weight:300;font-style:italic;line-height:1.45;margin-bottom:0.9rem;}\n.mw-desc{font-family:'Josefin Sans',sans-serif;font-size:9px;letter-spacing:2.5px;font-weight:300;text-transform:uppercase;line-height:1.8;}\n\u003c\/style\u003e\n\n\u003cdiv class=\"ma-section\" id=\"pp-maSection\"\u003e\n  \u003ccanvas class=\"ma-canvas\" id=\"pp-maCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"ma-content\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMemory Anchor\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ma-text\" id=\"pp-maText\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pp-inner\"\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eMain Accords\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-accordRows\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eFragrance Pyramid\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-pyramid\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eClassification\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"class-tabs\" id=\"pp-classTabs\"\u003e\u003c\/div\u003e\n    \u003cdiv id=\"pp-descArea\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"radar-outer\"\u003e\u003ccanvas id=\"pp-rc\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-dots\" id=\"pp-dots\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"pp-swipe-hint\" id=\"pp-swipeHint\"\u003e\n      \u003cspan class=\"pp-swipe-arrow left\"\u003e‹\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-text\"\u003eswipe to explore\u003c\/span\u003e\n      \u003cspan class=\"pp-swipe-arrow right\"\u003e›\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pp-nav\" id=\"pp-nav\"\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navPrev\"\u003e‹\u003c\/button\u003e\n      \u003cspan class=\"pp-nav-label\" id=\"pp-navLabel\"\u003eType\u003c\/span\u003e\n      \u003cbutton class=\"pp-nav-btn\" id=\"pp-navNext\"\u003e›\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"pp-section\"\u003e\n    \u003cdiv class=\"pp-label\"\u003eScent Intensity\u003c\/div\u003e\n    \u003cdiv class=\"pp-rule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-ink-wrap\"\u003e\u003ccanvas id=\"pp-siInk\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n    \u003cdiv class=\"si-char\"\u003e\n      \u003cdiv class=\"si-char-word\" id=\"pp-siWord\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"si-char-sub\"\u003eIntensity Character\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-dims\"\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siProj\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eProjection\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-projBar\" style=\"background:#E85A20\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-projDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siRich\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eRichness\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-richBar\" style=\"background:#A855F7\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-richDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"si-dim\"\u003e\n        \u003ccanvas id=\"pp-siComp\"\u003e\u003c\/canvas\u003e\n        \u003cdiv class=\"si-dim-name\"\u003eComplexity\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-track\"\u003e\u003cdiv class=\"si-dim-fill\" id=\"pp-compBar\" style=\"background:#FF6BC4\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"si-dim-desc\" id=\"pp-compDesc\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"si-overall-desc\" id=\"pp-siDesc\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"mw-section\" id=\"pp-mwSection\"\u003e\n  \u003ccanvas class=\"mw-canvas\" id=\"pp-mwCanvas\"\u003e\u003c\/canvas\u003e\n  \u003cdiv class=\"mw-inner\"\u003e\n    \u003cdiv class=\"mw-label-el\" id=\"pp-mwLabel\"\u003eMood · Weather\u003c\/div\u003e\n    \u003cdiv class=\"mw-rule-el\" id=\"pp-mwRule\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"mw-content\" id=\"pp-mwContent\"\u003e\n      \u003cdiv class=\"mw-season\" id=\"pp-mwSeason\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-name\" id=\"pp-mwName\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"mw-desc\" id=\"pp-mwDesc\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\nvar MOBILE_BP=768;\nfunction isMobile(){return window.innerWidth\u003cMOBILE_BP;}\nvar DPR=window.devicePixelRatio||1;\n\nfunction applyFullBleed(){\n  var root=document.getElementById('pp-root');\n  if(!root)return;\n  if(!isMobile()){\n    root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='';\n    var el=root.parentElement;var depth=0;\n    while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n      el.style.removeProperty('max-width');el.style.removeProperty('overflow-x');\n      el.style.removeProperty('padding-left');el.style.removeProperty('padding-right');\n      el=el.parentElement;depth++;\n    }\n    return;\n  }\n  root.style.marginLeft='';root.style.marginRight='';root.style.width='';root.style.maxWidth='none';\n  var el=root.parentElement;var depth=0;\n  while(el\u0026\u0026el!==document.body\u0026\u0026depth\u003c15){\n    el.style.setProperty('max-width','none','important');\n    el.style.setProperty('overflow-x','visible','important');\n    el.style.setProperty('padding-left','0','important');\n    el.style.setProperty('padding-right','0','important');\n    el=el.parentElement;depth++;\n  }\n  var rect=root.getBoundingClientRect();\n  var offsetLeft=rect.left+window.pageXOffset;\n  root.style.width=window.innerWidth+'px';\n  root.style.marginLeft=(-offsetLeft)+'px';\n}\napplyFullBleed();\nwindow.addEventListener('load',applyFullBleed);\nsetTimeout(applyFullBleed,100);setTimeout(applyFullBleed,500);setTimeout(applyFullBleed,1000);\n\nvar ACCORD_COLORS={\n  'sweet':        {dot:'#FF6B8A',track:'#FFCDD8',fill:'#FF6B8A'},\n  'floral':       {dot:'#FF6BC4',track:'#FFCCE9',fill:'#FF6BC4'},\n  'powdery':      {dot:'#A855F7',track:'#E2CCFF',fill:'#A855F7'},\n  'woody':        {dot:'#E8900A',track:'#FFE0B0',fill:'#E8900A'},\n  'warm spicy':   {dot:'#E85A20',track:'#FFCFB0',fill:'#E85A20'},\n  'citrus':       {dot:'#E8C000',track:'#FFF0A0',fill:'#E8C000'},\n  'oriental':     {dot:'#E8A000',track:'#FFE8B0',fill:'#E8A000'},\n  'smoky':        {dot:'#6868A8',track:'#D0D0E8',fill:'#6868A8'},\n  'musky':        {dot:'#C09060',track:'#F0E4D0',fill:'#C09060'},\n  'aquatic':      {dot:'#0090D8',track:'#B0E4FF',fill:'#0090D8'},\n  'gourmand':     {dot:'#E89040',track:'#FFE8C8',fill:'#E89040'},\n  'earthy':       {dot:'#70A830',track:'#D4E8B0',fill:'#70A830'},\n  'green':        {dot:'#40C040',track:'#C0F0C0',fill:'#40C040'},\n  'spicy':        {dot:'#E84020',track:'#FFCAB0',fill:'#E84020'},\n  'resinous':     {dot:'#A06800',track:'#E8CC99',fill:'#A06800'},\n  'fresh':        {dot:'#10C8A8',track:'#B0F4EC',fill:'#10C8A8'},\n  'amber':        {dot:'#E89000',track:'#FFE8B0',fill:'#E89000'},\n  'vanilla':      {dot:'#E8C040',track:'#FFF0B0',fill:'#E8C040'},\n  'leather':      {dot:'#906040',track:'#E0C8A8',fill:'#906040'},\n  'fruity':       {dot:'#E84060',track:'#FFBBC8',fill:'#E84060'},\n  'rose':         {dot:'#E85050',track:'#FFB8B8',fill:'#E85050'},\n  'oud':          {dot:'#906020',track:'#D8B888',fill:'#906020'},\n  'musk':         {dot:'#C08840',track:'#EED8A8',fill:'#C08840'},\n  'white floral': {dot:'#E8C860',track:'#FFF0C0',fill:'#E8C860'},\n  'animalic':     {dot:'#906040',track:'#D8C0A0',fill:'#906040'},\n  'fresh spicy': {dot:'#508840',track:'#C0D8A8',fill:'#508840'},\n};\nfunction getAccordColor(name){return ACCORD_COLORS[name.toLowerCase()]||{dot:'#9A845C',track:'#EAE4DA',fill:'#9A845C'};}\n\n\/* =====================================================\n   FRAGRANCE DATA — edit ONLY this block per product\n===================================================== *\/\nvar F={\n  accords:[\n    {name:'Woody', strength:9},\n    {name:'Fresh spicy', strength:7},\n    {name:'Citrus', strength:6},\n    {name:'Warm spicy', strength:5},\n    {name:'Powdery', strength:4}\n  ],\n  notes:{\n    top:[\n      {name:'Apple',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Apple.jpg?v=1773930105'},\n      {name:'Lemon', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Lemon.jpg?v=1762170963'},\n      {name:'Bergamot', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Bergamot.jpg?v=1762166328'}\n    ],\n    heart:[\n      {name:'Pepper',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Pepper.jpg?v=1773923227'},\n      {name:'Birch', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Birch.jpg?v=1762156510'},\n      {name:'Clove', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Clove.jpg?v=1762171535'},\n      {name:'Angelica', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Angelica.jpg?v=1773930272'},\n      {name:'Patchouli', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Patchouli.jpg?v=1762157539'}\n    ],\n    base:[\n      {name:'Cedar', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Cedarwood.jpg?v=1762157030'},\n      {name:'Oakmoss', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Oakmoss.jpg?v=1762174144'},\n      {name:'Musk',src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Musk.png?v=1762157459'},\n      {name:'Iris', src:'https:\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Iris.jpg?v=1762170718'}\n    ]\n  },\n  radar:{\n    type:{\n      labels:['Woody','Spicy','Fresh','Citrus','Green'],\n      data:[8,7,6,5,4],\n      compound:'Woody Spicy Aromatic',\n      line:'Crisp green apple, pepper, cold cedar — authority dressed in the finest materials available'\n    },\n    occasion:{\n      labels:['Evening','Night Out','Leisure','Daily','Business'],\n      data:[7,5,6,7,9],\n      compound:'Business · Evening',\n      line:'The fragrance of a person whose presence is felt before they speak a single word'\n    },\n    season:{\n      labels:['Winter','Fall','Spring','Summer','Rainy'],\n      data:[4,8,6,7,3],\n      compound:'Fall · Summer',\n      line:'Golden light, warm air with an edge — the season of decisions and open windows'\n    },\n    audience:{\n      labels:['Masculine','Feminine','Classic','Modern','Bold'],\n      data:[7,6,8,5,6],\n      position:30,\n      title:'Leans Toward the Decisive',\n      line:'Not gendered — timbered. Anyone who wears it with full conviction owns it completely'\n    },\n    character:{\n      labels:['Magnetic','Intimate','Grounded','Fluid','Commanding'],\n      data:[8,4,7,4,9],\n      compound:'Commanding · Magnetic',\n      line:'The kind of presence that makes a room recalibrate — quietly, without a single word'\n    }\n  },\n  intensity:{\n    character:'Sovereign',\n    inkColors:['#8A5A18','#A07028','#6A4010','#C09040','#4A2C08'],\n    projection:{pct:82,desc:'Announces itself before you arrive'},\n    richness: {pct:88,desc:'Layered like a perfectly tailored suit'},\n    complexity:{pct:80,desc:'Evolves over hours like a long negotiation'},\n    desc:'The scent of someone who built something — still building, never rushed, always noticed'\n  },\n  anchor:{\n    line1:'Corner office. Late afternoon light across the desk.',\n    line2:'You had already made the call.'\n  },\n  weather:{\n    season:'Golden Autumn Afternoon',\n    name:'When the sun is still warm\\nbut the air tells you summer is conceding',\n    desc:'Authoritative · Golden · Quietly Inevitable',\n    bg:['#F5ECD8','#F8F0E0','#FAF4E8'],\n    labelColor:'rgba(120,75,15,0.68)',\n    nameColor:'#2A1A06',\n    descColor:'rgba(120,75,15,0.6)',\n    ruleColor:'rgba(170,110,25,0.2)',\n    particles:{count:20,type:'dust',color:[200,155,65],speed:0.16,size:[1.2,3],drift:0.6},\n    glow:{color:'rgba(210,140,30,0.14)',x:0.5,y:0.28,r:0.82}\n  }\n};\n\/* ===================================================== *\/\n\nvar TABS=[\n  {key:'type',     label:'Type'},\n  {key:'occasion', label:'Occasion'},\n  {key:'season',   label:'Season'},\n  {key:'audience', label:'Audience'},\n  {key:'character',label:'Character'}\n];\nvar TAB_KEYS=TABS.map(function(t){return t.key;});\n\nvar accordRowsEl=document.getElementById('pp-accordRows');\nF.accords.forEach(function(a){\n  var c=getAccordColor(a.name);\n  accordRowsEl.innerHTML+='\u003cdiv class=\"accord-row\"\u003e\u003cdiv class=\"accord-dot\" style=\"background:'+c.dot+';\"\u003e\u003c\/div\u003e\u003cdiv class=\"accord-name\"\u003e'+a.name+'\u003c\/div\u003e\u003cdiv class=\"accord-track\" style=\"background:'+c.track+';\"\u003e\u003cdiv class=\"accord-fill\" data-pct=\"'+(a.strength*10)+'\" style=\"background:'+c.fill+';\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e';\n});\nsetTimeout(function(){document.querySelectorAll('.accord-fill').forEach(function(f){f.style.width=f.dataset.pct+'%';});},200);\n\nfunction buildPyramid(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var perRow=5;var gap=8;\n  var iconSize=Math.floor((availW-(gap*(perRow-1)))\/perRow);\n  iconSize=Math.min(iconSize,56);\n  var nameFontSize=Math.max(7,Math.min(8,Math.floor(iconSize*0.15)));\n  var nameMaxW=Math.round(iconSize*1.15);\n  var pyramidEl=document.getElementById('pp-pyramid');\n  pyramidEl.innerHTML='';\n  [{k:'top',l:'Top Notes'},{k:'heart',l:'Heart Notes'},{k:'base',l:'Base Notes'}].forEach(function(t){\n    var chips=F.notes[t.k].map(function(n){\n      return '\u003cdiv class=\"note-chip\" style=\"width:'+iconSize+'px;\"\u003e\u003cdiv class=\"note-icon\" style=\"width:'+iconSize+'px;height:'+iconSize+'px;\"\u003e\u003cimg src=\"'+n.src+'\" alt=\"\" onerror=\"this.style.display=\\'none\\'\"\u003e\u003c\/div\u003e\u003cdiv class=\"note-name\" style=\"font-size:'+nameFontSize+'px;max-width:'+nameMaxW+'px;letter-spacing:0.8px;\"\u003e'+n.name+'\u003c\/div\u003e\u003c\/div\u003e';\n    }).join('');\n    var tier=document.createElement('div');\n    tier.className='pyr-tier';\n    tier.innerHTML='\u003cdiv class=\"pyr-tier-label\"\u003e'+t.l+'\u003c\/div\u003e\u003cdiv class=\"pyr-notes\" style=\"grid-template-columns:repeat('+perRow+','+iconSize+'px);justify-content:center;gap:14px '+gap+'px;\"\u003e'+chips+'\u003c\/div\u003e';\n    pyramidEl.appendChild(tier);\n  });\n}\nbuildPyramid();\n\nfunction buildTabs(){\n  var inner=document.querySelector('.pp-inner');\n  var availW=inner?inner.offsetWidth-40:window.innerWidth-40;\n  var tabW=Math.floor((availW-(4*4))\/5);\n  var tc=document.createElement('canvas');var tcx=tc.getContext('2d');\n  var fontSize=11;\n  while(fontSize\u003e6){\n    tcx.font='300 '+fontSize+'px \"Josefin Sans\",sans-serif';\n    var maxW=0;\n    TABS.forEach(function(t){var w=tcx.measureText(t.label.toUpperCase()).width;if(w\u003emaxW)maxW=w;});\n    if(maxW\u003c=tabW-10)break;\n    fontSize-=0.5;\n  }\n  fontSize=Math.floor(fontSize);\n  var tabsEl=document.getElementById('pp-classTabs');\n  tabsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var btn=document.createElement('button');\n    btn.className='ctab'+(i===0?' active':'');\n    btn.dataset.k=t.key;btn.textContent=t.label;\n    btn.style.fontSize=fontSize+'px';btn.style.letterSpacing='1px';\n    tabsEl.appendChild(btn);\n    btn.addEventListener('click',function(){switchTab(t.key);});\n  });\n}\nbuildTabs();\n\nfunction buildDots(){\n  var dotsEl=document.getElementById('pp-dots');dotsEl.innerHTML='';\n  TABS.forEach(function(t,i){\n    var d=document.createElement('div');\n    d.className='pp-dot'+(i===0?' active':'');\n    d.dataset.k=t.key;dotsEl.appendChild(d);\n  });\n}\nbuildDots();\nfunction updateDots(key){document.querySelectorAll('.pp-dot').forEach(function(d){d.classList.toggle('active',d.dataset.k===key);});}\n\nvar swipeHintEl=document.getElementById('pp-swipeHint');\nvar navEl=document.getElementById('pp-nav');\nvar navPrevBtn=document.getElementById('pp-navPrev');\nvar navNextBtn=document.getElementById('pp-navNext');\nvar navLabelEl=document.getElementById('pp-navLabel');\nvar swipeHintDismissed=false;\n\nfunction updateNavVisibility(){\n  if(isMobile()){if(swipeHintEl)swipeHintEl.style.display='flex';if(navEl)navEl.style.display='none';}\n  else{if(swipeHintEl)swipeHintEl.style.display='none';if(navEl)navEl.style.display='flex';}\n}\nupdateNavVisibility();\nfunction updateNavButtons(){\n  var idx=TAB_KEYS.indexOf(currentKey);\n  if(navPrevBtn)navPrevBtn.disabled=(idx===0);\n  if(navNextBtn)navNextBtn.disabled=(idx===TAB_KEYS.length-1);\n  if(navLabelEl)navLabelEl.textContent=TABS[idx].label;\n}\nif(navPrevBtn)navPrevBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003e0)switchTab(TAB_KEYS[idx-1]);});\nif(navNextBtn)navNextBtn.addEventListener('click',function(){var idx=TAB_KEYS.indexOf(currentKey);if(idx\u003cTAB_KEYS.length-1)switchTab(TAB_KEYS[idx+1]);});\nfunction dismissSwipeHint(){if(swipeHintDismissed)return;swipeHintDismissed=true;if(swipeHintEl)swipeHintEl.classList.add('hidden');}\n\nvar radarCanvas=document.getElementById('pp-rc');\nvar radarCtx=radarCanvas.getContext('2d');\nvar LABEL_FONT_SIZE,LABEL_GAP,RINGS=5,MAX=10;\nvar RADIUS,CSS_W,CSS_H,CX,CY;\n\nfunction initRadarCanvas(){\n  var inner=document.querySelector('.pp-inner');\n  var hpad=20;\n  var availW=(inner?inner.offsetWidth:window.innerWidth)-(hpad*2);\n  if(availW\u003c200)availW=window.innerWidth-(hpad*2);\n  LABEL_FONT_SIZE=Math.max(9,Math.min(11,Math.round(availW*0.028)));\n  LABEL_GAP=Math.max(10,Math.round(availW*0.032));\n  radarCtx.setTransform(1,0,0,1,0,0);\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  var padL=0,padR=0,padT=LABEL_FONT_SIZE+6,padB=LABEL_FONT_SIZE+6;\n  Object.values(F.radar).forEach(function(tab){\n    var n=tab.labels.length;\n    tab.labels.forEach(function(l,i){\n      var a=(Math.PI*2*(i\/n))-(Math.PI\/2);var cos=Math.cos(a);\n      var w=radarCtx.measureText(l.toUpperCase()).width;\n      if(cos\u003e0.15){if(w+LABEL_GAP+6\u003epadR)padR=w+LABEL_GAP+6;}\n      else if(cos\u003c-0.15){if(w+LABEL_GAP+6\u003epadL)padL=w+LABEL_GAP+6;}\n      else{if(w\/2+LABEL_GAP+6\u003epadT)padT=w\/2+LABEL_GAP+6;if(w\/2+LABEL_GAP+6\u003epadB)padB=w\/2+LABEL_GAP+6;}\n    });\n  });\n  var padSide=Math.max(padL,padR);\n  RADIUS=(availW-(padSide*2))\/2;\n  CSS_W=Math.ceil(padSide*2+RADIUS*2);CSS_H=Math.ceil(padT+RADIUS*2+padB);\n  CX=CSS_W\/2;CY=padT+RADIUS;\n  radarCanvas.style.width=CSS_W+'px';radarCanvas.style.height=CSS_H+'px';\n  radarCanvas.width=Math.ceil(CSS_W*DPR);radarCanvas.height=Math.ceil(CSS_H*DPR);\n  radarCtx.scale(DPR,DPR);\n}\n\nvar currentKey='type';\nvar currentData=F.radar.type.data.slice(),targetData=F.radar.type.data.slice();\nvar currentLabels=F.radar.type.labels.slice();\nvar animStart=null,rafId=null,ANIM_DUR=550;\nfunction easeInOut(t){return t\u003c0.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}\nfunction lerp(a,b,t){return a+(b-a)*t;}\n\nfunction drawRadarFrame(data,labels){\n  radarCtx.clearRect(0,0,CSS_W,CSS_H);\n  var n=labels.length;\n  function ang(i){return(Math.PI*2*(i\/n))-(Math.PI\/2);}\n  function pt(i,val){var a=ang(i),r=RADIUS*(val\/MAX);return{x:CX+r*Math.cos(a),y:CY+r*Math.sin(a)};}\n  for(var ring=1;ring\u003c=RINGS;ring++){\n    var r=RADIUS*(ring\/RINGS);radarCtx.beginPath();\n    for(var i=0;i\u003cn;i++){var a=ang(i);i===0?radarCtx.moveTo(CX+r*Math.cos(a),CY+r*Math.sin(a)):radarCtx.lineTo(CX+r*Math.cos(a),CY+r*Math.sin(a));}\n    radarCtx.closePath();radarCtx.strokeStyle='rgba(184,166,140,0.28)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i);radarCtx.beginPath();radarCtx.moveTo(CX,CY);\n    radarCtx.lineTo(CX+RADIUS*Math.cos(a),CY+RADIUS*Math.sin(a));\n    radarCtx.strokeStyle='rgba(184,166,140,0.2)';radarCtx.lineWidth=0.5;radarCtx.stroke();\n  }\n  radarCtx.beginPath();\n  for(var i=0;i\u003cn;i++){var p=pt(i,data[i]);i===0?radarCtx.moveTo(p.x,p.y):radarCtx.lineTo(p.x,p.y);}\n  radarCtx.closePath();radarCtx.fillStyle='rgba(154,132,92,0.10)';radarCtx.fill();\n  radarCtx.strokeStyle='#9A845C';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  for(var i=0;i\u003cn;i++){\n    var p=pt(i,data[i]);\n    radarCtx.beginPath();radarCtx.arc(p.x,p.y,3.5,0,Math.PI*2);\n    radarCtx.fillStyle='#9A845C';radarCtx.fill();radarCtx.strokeStyle='#F3EFE8';radarCtx.lineWidth=1.5;radarCtx.stroke();\n  }\n  radarCtx.font='300 '+LABEL_FONT_SIZE+'px \"Josefin Sans\",sans-serif';\n  radarCtx.fillStyle='#4B443D';radarCtx.textBaseline='middle';\n  for(var i=0;i\u003cn;i++){\n    var a=ang(i),cos=Math.cos(a);\n    var lx=CX+(RADIUS+LABEL_GAP)*Math.cos(a),ly=CY+(RADIUS+LABEL_GAP)*Math.sin(a);\n    if(cos\u003e0.15)radarCtx.textAlign='left';else if(cos\u003c-0.15)radarCtx.textAlign='right';else radarCtx.textAlign='center';\n    radarCtx.fillText(labels[i].toUpperCase(),lx,ly);\n  }\n}\n\nfunction radarAnimLoop(ts){\n  if(!animStart)animStart=ts;\n  var t=Math.min((ts-animStart)\/ANIM_DUR,1);\n  var ease=easeInOut(t);\n  drawRadarFrame(currentData.map(function(v,i){return lerp(v,targetData[i],ease);}),currentLabels);\n  if(t\u003c1){rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=targetData.slice();animStart=null;rafId=null;}\n}\n\nfunction setRadar(key,anim){\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;animStart=null;}\n  currentKey=key;currentLabels=F.radar[key].labels.slice();\n  if(anim){targetData=F.radar[key].data.slice();rafId=requestAnimationFrame(radarAnimLoop);}\n  else{currentData=F.radar[key].data.slice();targetData=currentData.slice();drawRadarFrame(currentData,currentLabels);}\n}\n\nvar descArea=document.getElementById('pp-descArea');\nfunction setDescriptor(key,anim){\n  var d=F.radar[key];\n  if(key==='audience'){\n    var html='\u003cdiv class=\"spectrum-wrap\"\u003e\u003cdiv class=\"spectrum-label-row\"\u003e\u003cspan\u003eMasculine\u003c\/span\u003e\u003cspan\u003eUnisex\u003c\/span\u003e\u003cspan\u003eFeminine\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-track-bar\"\u003e\u003cdiv class=\"spectrum-dot-marker\" style=\"left:'+d.position+'%\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"spectrum-title\"\u003e'+d.title+'\u003c\/div\u003e\u003cdiv class=\"spectrum-sub\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);return;\n  }\n  var hasDesc=descArea.querySelector('.descriptor-wrap');\n  if(!hasDesc){\n    var html='\u003cdiv class=\"descriptor-wrap\"\u003e\u003cdiv class=\"descriptor-compound\" id=\"pp-dComp\"\u003e'+d.compound+'\u003c\/div\u003e\u003cdiv class=\"descriptor-line\" id=\"pp-dLine\"\u003e'+d.line+'\u003c\/div\u003e\u003c\/div\u003e';\n    descArea.style.transition='opacity 0.3s';descArea.style.opacity='0';\n    setTimeout(function(){descArea.innerHTML=html;descArea.style.opacity='1';},300);\n  } else {\n    var comp=document.getElementById('pp-dComp'),line=document.getElementById('pp-dLine');\n    if(comp\u0026\u0026line){\n      comp.classList.add('pp-fade');line.classList.add('pp-fade');\n      setTimeout(function(){comp.textContent=d.compound;line.textContent=d.line;comp.classList.remove('pp-fade');line.classList.remove('pp-fade');},320);\n    }\n  }\n}\n\nfunction switchTab(key){\n  if(key===currentKey)return;\n  currentKey=key;\n  document.querySelectorAll('.ctab').forEach(function(x){x.classList.toggle('active',x.dataset.k===key);});\n  updateDots(key);updateNavButtons();\n  setDescriptor(key,true);setRadar(key,true);\n}\n\nvar swipeStartX=0,swipeStartY=0;\nradarCanvas.addEventListener('touchstart',function(e){swipeStartX=e.touches[0].clientX;swipeStartY=e.touches[0].clientY;},{passive:true});\nradarCanvas.addEventListener('touchend',function(e){\n  var dx=e.changedTouches[0].clientX-swipeStartX;\n  var dy=e.changedTouches[0].clientY-swipeStartY;\n  if(Math.abs(dx)\u003e40\u0026\u0026Math.abs(dx)\u003eMath.abs(dy)*1.5){\n    var idx=TAB_KEYS.indexOf(currentKey);var switched=false;\n    if(dx\u003c0\u0026\u0026idx\u003cTAB_KEYS.length-1){switchTab(TAB_KEYS[idx+1]);switched=true;}\n    else if(dx\u003e0\u0026\u0026idx\u003e0){switchTab(TAB_KEYS[idx-1]);switched=true;}\n    if(switched)dismissSwipeHint();\n  }\n},{passive:true});\n\nvar siT=0;\nvar INK_SIZE=160;\nvar inkC=document.getElementById('pp-siInk');\nvar inkCtx=inkC.getContext('2d');\ninkC.width=INK_SIZE*DPR;inkC.height=INK_SIZE*DPR;\ninkC.style.width=INK_SIZE+'px';inkC.style.height=INK_SIZE+'px';\ninkCtx.scale(DPR,DPR);\n\ndocument.getElementById('pp-siWord').textContent=F.intensity.character;\ndocument.getElementById('pp-siDesc').textContent=F.intensity.desc;\ndocument.getElementById('pp-projDesc').textContent=F.intensity.projection.desc;\ndocument.getElementById('pp-richDesc').textContent=F.intensity.richness.desc;\ndocument.getElementById('pp-compDesc').textContent=F.intensity.complexity.desc;\nsetTimeout(function(){\n  document.getElementById('pp-projBar').style.width=F.intensity.projection.pct+'%';\n  document.getElementById('pp-richBar').style.width=F.intensity.richness.pct+'%';\n  document.getElementById('pp-compBar').style.width=F.intensity.complexity.pct+'%';\n},600);\n\nvar INTENSITY=(F.intensity.projection.pct+F.intensity.richness.pct+F.intensity.complexity.pct)\/(3*100);\nvar inkDrops=[];\n\nfunction spawnInkDrop(){\n  var angle=Math.random()*Math.PI*2;\n  var dist=Math.random()*8*INTENSITY;\n  var cx=INK_SIZE\/2;\n  inkDrops.push({\n    x:cx+Math.cos(angle)*dist,\n    y:cx+Math.sin(angle)*dist,\n    r:0,\n    maxR:8+Math.random()*62*INTENSITY,\n    speed:0.06+Math.random()*0.1*INTENSITY,\n    alpha:0.5+Math.random()*0.38,\n    color:F.intensity.inkColors[Math.floor(Math.random()*F.intensity.inkColors.length)],\n    age:0\n  });\n}\nfor(var ii=0;ii\u003c8;ii++){\n  spawnInkDrop();\n  inkDrops[ii].r=inkDrops[ii].maxR*(0.2+Math.random()*0.6);\n  inkDrops[ii].age=60+Math.random()*140;\n}\n\nfunction drawInkWater(){\n  var cx=INK_SIZE\/2,maxR=INK_SIZE\/2-6;\n  inkCtx.clearRect(0,0,INK_SIZE,INK_SIZE);\n  var pool=inkCtx.createRadialGradient(cx,cx,0,cx,cx,maxR);\n  pool.addColorStop(0,'rgba(225,208,168,0.28)');\n  pool.addColorStop(0.65,'rgba(215,195,150,0.1)');\n  pool.addColorStop(1,'rgba(243,239,232,0)');\n  inkCtx.fillStyle=pool;inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);inkCtx.fill();\n  if(siT%160===0)spawnInkDrop();\n  if(inkDrops.length\u003e14)inkDrops.shift();\n  inkDrops.forEach(function(d){\n    d.age++;\n    if(d.r\u003cd.maxR)d.r+=d.speed;\n    var lifeAlpha=d.alpha*(1-Math.max(0,(d.age-200)\/130));\n    if(lifeAlpha\u003c=0)return;\n    var wobble=Math.sin(siT*0.006+d.age*0.018)*1.8;\n    var halo=inkCtx.createRadialGradient(d.x+wobble*0.2,d.y,0,d.x,d.y,d.r*1.6);\n    halo.addColorStop(0,d.color+'00');\n    halo.addColorStop(0.4,d.color+(Math.round(lifeAlpha*18)).toString(16).padStart(2,'0'));\n    halo.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.2,d.y,d.r*1.6,0,Math.PI*2);\n    inkCtx.fillStyle=halo;inkCtx.fill();\n    var rWobble=d.r*(0.94+Math.sin(siT*0.005+d.age*0.025)*0.06);\n    var grad=inkCtx.createRadialGradient(d.x+wobble*0.15,d.y+wobble*0.1,0,d.x,d.y,rWobble);\n    grad.addColorStop(0,d.color+(Math.round(lifeAlpha*220)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.35,d.color+(Math.round(lifeAlpha*160)).toString(16).padStart(2,'0'));\n    grad.addColorStop(0.7,d.color+(Math.round(lifeAlpha*60)).toString(16).padStart(2,'0'));\n    grad.addColorStop(1,d.color+'00');\n    inkCtx.beginPath();inkCtx.arc(d.x+wobble*0.15,d.y+wobble*0.1,rWobble,0,Math.PI*2);\n    inkCtx.fillStyle=grad;inkCtx.fill();\n  });\n  var core=inkCtx.createRadialGradient(cx,cx,0,cx,cx,14);\n  core.addColorStop(0,'rgba(160,100,30,'+(0.45+0.12*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,80,20,0.2)');core.addColorStop(1,'rgba(120,60,10,0)');\n  inkCtx.fillStyle=core;inkCtx.beginPath();inkCtx.arc(cx,cx,14,0,Math.PI*2);inkCtx.fill();\n  inkCtx.beginPath();inkCtx.arc(cx,cx,maxR,0,Math.PI*2);\n  inkCtx.strokeStyle='rgba(154,132,92,0.1)';inkCtx.lineWidth=0.5;inkCtx.stroke();\n}\n\nvar DS=72;\nfunction setupDim(id){\n  var c=document.getElementById(id);var ctx=c.getContext('2d');\n  c.width=DS*DPR;c.height=DS*DPR;c.style.width=DS+'px';c.style.height=DS+'px';\n  ctx.scale(DPR,DPR);return{ctx:ctx,cx:DS\/2,cy:DS\/2,r:DS\/2-4};\n}\nvar proj=setupDim('pp-siProj');\nvar rich=setupDim('pp-siRich');\nvar comp=setupDim('pp-siComp');\n\nvar sonarRings=[];\nfunction spawnSonarRing(){sonarRings.push({r:3,alpha:0.6,speed:0.12+INTENSITY*0.08});}\nspawnSonarRing();\nvar sonarInterval=Math.round(210-INTENSITY*50);\n\nfunction drawProjection(){\n  var ctx=proj.ctx,cx=proj.cx,cy=proj.cy,maxR=proj.r;\n  ctx.clearRect(0,0,DS,DS);\n  if(siT%sonarInterval===0)spawnSonarRing();\n  if(sonarRings.length\u003e5)sonarRings.shift();\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(232,90,32,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n  sonarRings=sonarRings.filter(function(ring){\n    ring.r+=ring.speed;ring.alpha*=0.988;\n    if(ring.r\u003e=maxR||ring.alpha\u003c0.015)return false;\n    var progress=ring.r\/maxR;\n    ctx.beginPath();ctx.arc(cx,cy,ring.r,0,Math.PI*2);\n    ctx.strokeStyle='rgba(232,90,32,'+(ring.alpha*(1-progress*0.35))+')';\n    ctx.lineWidth=1-progress*0.4;ctx.stroke();\n    return true;\n  });\n  var src=ctx.createRadialGradient(cx,cy,0,cx,cy,6);\n  src.addColorStop(0,'rgba(232,90,32,0.85)');src.addColorStop(1,'rgba(232,90,32,0)');\n  ctx.fillStyle=src;ctx.beginPath();ctx.arc(cx,cy,6,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawRichness(){\n  var ctx=rich.ctx,cx=rich.cx,cy=rich.cy,maxR=rich.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.richness.pct\/100;\n  var layerCount=Math.round(4+val*6);\n  for(var i=layerCount;i\u003e=1;i--){\n    var frac=i\/layerCount;var layerR=maxR*frac;\n    var wobX=Math.sin(siT*0.005+i*0.9)*1.0;\n    var wobY=Math.cos(siT*0.004+i*1.1)*0.8;\n    var alpha=(0.1+val*0.13*(1-frac*0.4))*(0.85+0.15*Math.sin(siT*0.008+i*0.7));\n    var r2=Math.round(120+frac*80),g2=Math.round(50+frac*30),b2=Math.round(80+frac*40);\n    var g=ctx.createRadialGradient(cx+wobX,cy+wobY,0,cx,cy,layerR);\n    g.addColorStop(0,'rgba('+r2+','+g2+','+b2+','+(alpha*2)+')');\n    g.addColorStop(0.5,'rgba('+r2+','+g2+','+b2+','+alpha+')');\n    g.addColorStop(1,'rgba('+r2+','+g2+','+b2+',0)');\n    ctx.beginPath();ctx.arc(cx+wobX*0.4,cy+wobY*0.4,layerR,0,Math.PI*2);ctx.fillStyle=g;ctx.fill();\n  }\n  var core=ctx.createRadialGradient(cx,cy,0,cx,cy,maxR*0.3);\n  core.addColorStop(0,'rgba(168,85,247,'+(0.75+0.15*Math.sin(siT*0.012))+')');\n  core.addColorStop(0.5,'rgba(140,60,200,0.35)');core.addColorStop(1,'rgba(100,30,160,0)');\n  ctx.fillStyle=core;ctx.beginPath();ctx.arc(cx,cy,maxR*0.3,0,Math.PI*2);ctx.fill();\n}\n\nfunction drawComplexity(){\n  var ctx=comp.ctx,cx=comp.cx,cy=comp.cy,maxR=comp.r;\n  ctx.clearRect(0,0,DS,DS);\n  var val=F.intensity.complexity.pct\/100;\n  var blobCount=Math.round(2+val*4);\n  for(var b=0;b\u003cblobCount;b++){\n    var bPhase=siT*0.008+b*1.3;\n    var bR=maxR*(0.3+val*0.25+0.08*Math.sin(bPhase));\n    var bX=cx+Math.sin(bPhase*0.7+b)*maxR*(0.14+val*0.14);\n    var bY=cy+Math.cos(bPhase*0.5+b*1.2)*maxR*(0.11+val*0.11);\n    var alpha=(0.07+val*0.09)*(0.7+0.3*Math.sin(bPhase));\n    ctx.save();ctx.translate(bX,bY);ctx.beginPath();\n    for(var i=0;i\u003c=6;i++){\n      var angle=(Math.PI*2*i\/6)-Math.PI\/2;\n      var rVar=bR*(0.86+0.14*Math.sin(siT*0.012*val*2+i*1.3+b));\n      var px=Math.cos(angle)*rVar,py=Math.sin(angle)*rVar;\n      i===0?ctx.moveTo(px,py):ctx.lineTo(px,py);\n    }\n    ctx.closePath();ctx.fillStyle='rgba(255,107,196,'+alpha+')';ctx.fill();ctx.restore();\n  }\n  ctx.beginPath();ctx.arc(cx,cy,maxR,0,Math.PI*2);\n  ctx.strokeStyle='rgba(255,107,196,0.07)';ctx.lineWidth=0.5;ctx.stroke();\n}\n\nfunction siLoop(){\n  drawInkWater();drawProjection();drawRichness();drawComplexity();\n  siT++;requestAnimationFrame(siLoop);\n}\n\nvar maCanvas=document.getElementById('pp-maCanvas');\nvar maCtx=maCanvas.getContext('2d');\nvar maW=0,maH=0,maParticles=[],maRaf=null;\n\nfunction maResize(){\n  var section=document.getElementById('pp-maSection');\n  maW=section.offsetWidth||window.innerWidth;\n  maH=section.scrollHeight||200;\n  maCanvas.width=Math.ceil(maW*DPR);maCanvas.height=Math.ceil(maH*DPR);\n  maCanvas.style.width=maW+'px';maCanvas.style.height=maH+'px';\n  maCtx.setTransform(1,0,0,1,0,0);maCtx.scale(DPR,DPR);\n  maParticles=[];\n  for(var i=0;i\u003c20;i++){\n    maParticles.push({\n      x:Math.random()*maW,y:maH*0.4+Math.random()*maH*0.6,\n      vy:-(0.08+Math.random()*0.18),vx:(Math.random()-0.5)*0.12,\n      size:Math.random()*32+10,alpha:Math.random()*0.07+0.02,\n      phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction maDraw(){\n  if(!maW||!maH){maRaf=requestAnimationFrame(maDraw);return;}\n  maCtx.clearRect(0,0,maW,maH);\n  maParticles.forEach(function(p){\n    p.phase+=0.007;\n    p.x+=p.vx+Math.sin(p.phase)*0.12;p.y+=p.vy;\n    if(p.y\u003c-70){p.y=maH+10;p.x=Math.random()*maW;}\n    var a=p.alpha*(0.55+0.45*Math.sin(p.phase));\n    maCtx.beginPath();maCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n    maCtx.fillStyle='rgba(154,132,92,'+a+')';maCtx.fill();\n  });\n  maRaf=requestAnimationFrame(maDraw);\n}\n\nfunction initAnchor(){\n  var textEl=document.getElementById('pp-maText');\n  var words1=F.anchor.line1.split(' ');\n  var words2=F.anchor.line2.split(' ');\n  var html='';\n  words1.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  html+='\u003cbr\u003e';\n  words2.forEach(function(w){html+='\u003cspan\u003e'+w+'\u0026nbsp;\u003c\/span\u003e';});\n  textEl.innerHTML=html;\n  var spans=textEl.querySelectorAll('span');\n  spans.forEach(function(s,i){setTimeout(function(){s.classList.add('show');},400+i*230);});\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();});});\n}\n\nvar mwCanvas=document.getElementById('pp-mwCanvas');\nvar mwCtx=mwCanvas.getContext('2d');\nvar mwW=0,mwH=0,mwParticles=[],mwRaf=null;\n\nfunction mwResize(){\n  var section=document.getElementById('pp-mwSection');\n  mwW=section.offsetWidth||window.innerWidth;\n  mwH=section.scrollHeight||300;\n  mwCanvas.width=Math.ceil(mwW*DPR);mwCanvas.height=Math.ceil(mwH*DPR);\n  mwCanvas.style.width=mwW+'px';mwCanvas.style.height=mwH+'px';\n  mwCtx.setTransform(1,0,0,1,0,0);mwCtx.scale(DPR,DPR);\n  mwSpawnParticles();\n}\n\nfunction mwSpawnParticles(){\n  if(!mwW||!mwH)return;\n  var p=F.weather.particles;mwParticles=[];\n  for(var i=0;i\u003cp.count;i++){\n    var s=p.size[0]+Math.random()*(p.size[1]-p.size[0]);\n    mwParticles.push({\n      x:Math.random()*mwW,y:Math.random()*mwH,\n      vx:(Math.random()-0.5)*p.drift,\n      vy:p.type==='rain'?p.speed*(0.6+Math.random()*0.4):-(p.speed*(0.4+Math.random()*0.6)),\n      size:s,alpha:0.08+Math.random()*0.55,phase:Math.random()*Math.PI*2\n    });\n  }\n}\n\nfunction mwDraw(){\n  if(!mwW||!mwH){mwRaf=requestAnimationFrame(mwDraw);return;}\n  mwCtx.clearRect(0,0,mwW,mwH);\n  var w=F.weather;var p=w.particles;var c=p.color;\n  var bg=mwCtx.createLinearGradient(0,0,0,mwH);\n  bg.addColorStop(0,w.bg[0]);bg.addColorStop(0.5,w.bg[1]);bg.addColorStop(1,w.bg[2]);\n  mwCtx.fillStyle=bg;mwCtx.fillRect(0,0,mwW,mwH);\n  var g=w.glow;\n  var glow=mwCtx.createRadialGradient(mwW*g.x,mwH*g.y,0,mwW*g.x,mwH*g.y,mwW*g.r);\n  glow.addColorStop(0,g.color);glow.addColorStop(1,'rgba(0,0,0,0)');\n  mwCtx.fillStyle=glow;mwCtx.fillRect(0,0,mwW,mwH);\n  mwParticles.forEach(function(pt){\n    pt.phase+=0.012;\n    if(p.type==='snow'||p.type==='shimmer'||p.type==='dust'){\n      pt.x+=Math.sin(pt.phase)*0.4+pt.vx;pt.y+=pt.vy;\n      if(pt.y\u003c-10){pt.y=mwH+10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='rain'){\n      pt.x+=pt.vx*0.4;pt.y+=p.speed*0.5;\n      if(pt.y\u003emwH+10){pt.y=-10;pt.x=Math.random()*mwW;}\n    } else if(p.type==='petals'){\n      pt.x+=Math.sin(pt.phase)*pt.vx*0.6+0.25;pt.y+=p.speed*0.5*(0.5+Math.sin(pt.phase*0.5)*0.3);\n      if(pt.y\u003emwH+20){pt.y=-20;pt.x=Math.random()*mwW;}\n    } else if(p.type==='fireflies'){\n      pt.x+=Math.sin(pt.phase*0.5)*0.8+pt.vx*0.5;pt.y+=Math.cos(pt.phase*0.4)*0.5;\n      if(pt.x\u003c0)pt.x=mwW;if(pt.x\u003emwW)pt.x=0;\n      if(pt.y\u003c0)pt.y=mwH;if(pt.y\u003emwH)pt.y=0;\n    } else if(p.type==='spray'){\n      pt.x+=Math.sin(pt.phase*1.2)*pt.vx*1.2;pt.y+=pt.vy*0.7;\n      if(pt.y\u003c-10){pt.y=mwH*0.5+Math.random()*mwH*0.5;pt.x=Math.random()*mwW;}\n    }\n    var a=pt.alpha*(0.5+0.5*Math.sin(pt.phase));\n    mwCtx.beginPath();\n    if(p.type==='rain'){\n      mwCtx.strokeStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.lineWidth=pt.size*0.4;\n      mwCtx.moveTo(pt.x,pt.y);mwCtx.lineTo(pt.x+pt.vx*1.2,pt.y+5);mwCtx.stroke();\n    } else if(p.type==='fireflies'){\n      var gf=mwCtx.createRadialGradient(pt.x,pt.y,0,pt.x,pt.y,pt.size*3);\n      gf.addColorStop(0,'rgba('+c[0]+','+c[1]+','+c[2]+','+a+')');\n      gf.addColorStop(1,'rgba('+c[0]+','+c[1]+','+c[2]+',0)');\n      mwCtx.fillStyle=gf;mwCtx.arc(pt.x,pt.y,pt.size*3,0,Math.PI*2);mwCtx.fill();\n    } else {\n      mwCtx.fillStyle='rgba('+c[0]+','+c[1]+','+c[2]+','+a+')';\n      mwCtx.arc(pt.x,pt.y,pt.size,0,Math.PI*2);mwCtx.fill();\n    }\n    mwCtx.beginPath();\n  });\n  mwRaf=requestAnimationFrame(mwDraw);\n}\n\nfunction initWeather(){\n  var w=F.weather;\n  var labelEl=document.getElementById('pp-mwLabel');\n  var ruleEl=document.getElementById('pp-mwRule');\n  if(labelEl)labelEl.style.color=w.labelColor;\n  if(ruleEl)ruleEl.style.background=w.ruleColor;\n  document.getElementById('pp-mwSeason').textContent=w.season;\n  document.getElementById('pp-mwSeason').style.color=w.labelColor;\n  var nameEl=document.getElementById('pp-mwName');\n  nameEl.innerHTML=w.name.replace('\\n','\u003cbr\u003e');nameEl.style.color=w.nameColor;\n  var descEl=document.getElementById('pp-mwDesc');\n  descEl.textContent=w.desc;descEl.style.color=w.descColor;\n  requestAnimationFrame(function(){requestAnimationFrame(function(){\n    mwResize();mwDraw();\n    setTimeout(function(){document.getElementById('pp-mwContent').classList.add('visible');},1000);\n  });});\n}\n\nfunction init(){\n  initRadarCanvas();\n  setDescriptor('type',false);setRadar('type',false);\n  updateNavButtons();\n  siLoop();\n  initAnchor();\n  initWeather();\n}\n\nvar lastW=window.innerWidth;\nwindow.addEventListener('resize',function(){\n  var newW=window.innerWidth;if(Math.abs(newW-lastW)\u003c10)return;lastW=newW;\n  applyFullBleed();buildPyramid();buildTabs();updateNavVisibility();\n  if(rafId){cancelAnimationFrame(rafId);rafId=null;}animStart=null;\n  initRadarCanvas();setDescriptor(currentKey,false);setRadar(currentKey,false);\n  if(maRaf){cancelAnimationFrame(maRaf);maRaf=null;}\n  if(mwRaf){cancelAnimationFrame(mwRaf);mwRaf=null;}\n  requestAnimationFrame(function(){requestAnimationFrame(function(){maResize();maDraw();mwResize();mwDraw();});});\n});\n\nif(document.fonts\u0026\u0026document.fonts.ready){document.fonts.ready.then(init);}\nelse{setTimeout(init,500);}\n\n})();\n\u003c\/script\u003e","brand":"Verve \u0026 Vesper","offers":[{"title":"50 ML","offer_id":43416518459466,"sku":null,"price":2499.0,"currency_code":"INR","in_stock":true},{"title":"3 ML","offer_id":43416518492234,"sku":null,"price":299.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0672\/1647\/4186\/files\/Untitled-design_20260321_173024_0000.png?v=1774094601"}],"url":"https:\/\/perfumalink.com\/collections\/the-summer-edit.oembed","provider":"PerfumaLink","version":"1.0","type":"link"}