{"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","url":"https:\/\/perfumalink.com\/products\/one-yoga-day-extrait-de-parfum-for-women-and-men","provider":"PerfumaLink","version":"1.0","type":"link"}