{"product_id":"dame-maxikjole-med-floral-designet-og-asymmetrisk-snit-stilla-b2pqavmvxn","title":"Dame maxikjole med blomsterdesign og asymmetrisk snit Stilla","description":"\u003cbody\u003e\n\u003ch2\u003eProduktbeskrivelse\u003c\/h2\u003e\n\u003cp\u003eOpdag det eksklusive dames maxikjole med blomsterdesign og asymmetrisk snit fra Stilla, der forener elegance og komfort. Denne drømmende kjole imponerer med sine iøjnefaldende, farverige blomstertryk, der udstråler friskhed og livlighed.\u003c\/p\u003e\n\u003ch2\u003eEgenskaber\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eBlomster mønster:\u003c\/strong\u003e Fantastisk blomster-design, der løfter ethvert look.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAsymmetrisk snit:\u003c\/strong\u003e En-sidet uden skulder for et moderne og stilfuldt udseende.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHøj kvalitet stof:\u003c\/strong\u003e Let og åndbart materialeblanding, ideelt til varme dage.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAlsidigt kombinerbar:\u003c\/strong\u003e Perfekt til festlige lejligheder eller afslappede sommeraftener.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBehagelig pasform:\u003c\/strong\u003e Elegant flydende snit for maksimal bevægelsesfrihed og bære komfort.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eMed denne maxikjole sætter du ikke kun modeaccentuer, men føler dig også godt tilpas i din hud. Ideel til bryllupper, fester eller bare en dag i byen.\u003c\/p\u003e\n\u003cdiv class=\"note-box\"\u003e\n\u003cp\u003eBemærk: Farverne kan variere lidt på grund af belysning, kameravinkler og skærmindstillinger.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.note-box {\n  font-family: Arial, sans-serif;\n  max-width: 100%;\n  margin: 1em 0;\n  padding: 12px 16px;\n  background-color: #f9f9f9; \/* blid grå baggrund *\/\n  border-left: 4px solid #4a90e2; \/* minimalistisk blå accent *\/\n  border-radius: 6px;\n  font-size: 0.95em;\n  color: #333;\n  line-height: 1.4em;\n  transition: background-color 0.2s ease;\n}\n.note-box:hover {\n  background-color: #eef6ff; \/* blid blå ved hover *\/\n}\n.note-box p {\n  margin: 0;\n}\n\u003c\/style\u003e\n\n\u003c!--\nFit Recommender Widget v5 - Shopify Compatible with EU Size Display\nRequired fields added per category to ensure at least one recommendation\nOptional fields still marked, note added for best results\n--\u003e\n\n\n\n\n  \u003cmeta charset=\"utf-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n  \u003ctitle\u003eFit Recommender Widget\u003c\/title\u003e\n  \u003cstyle\u003e\n    .fr-widget{font-family:Inter, system-ui, -apple-system, \"Segoe UI\", Roboto, Arial; max-width:760px; background:#fff; border:1px solid #e6e6e6; border-radius:10px; padding:18px; box-shadow:0 6px 18px rgba(20,20,20,0.04)}\n    .fr-row{display:flex; gap:10px; flex-wrap:wrap; margin-bottom:10px}\n    .fr-col{flex:1 1 140px; min-width:140px; position:relative}\n    .fr-label{font-size:13px;color:#333;margin-bottom:6px; display:block}\n    .fr-input{width:100%;padding:8px 10px;border-radius:8px;border:1px solid #d6d6d6;font-size:14px}\n    .fr-select{appearance:none;background-image:none}\n    .fr-btn{background:#111827;color:#fff;padding:10px 14px;border-radius:8px;border:0;font-weight:600;cursor:pointer}\n    .fr-result{margin-top:12px;padding:12px;border-radius:8px;background:linear-gradient(180deg,#f8fafc,#fff);border:1px solid #eef2f7}\n    .fr-size{font-weight:700;font-size:20px}\n    .fr-note{font-size:13px;color:#555;margin-top:6px}\n    .fr-small{font-size:12px;color:#666}\n    .fr-input-box{border:1px solid #e0e0e0;border-radius:10px;padding:12px;background:#f9f9f9;margin-bottom:12px}\n    .optional-note{font-size:11px;color:#888;margin-top:2px}\n    .required-note{font-size:11px;color:#e53935;margin-top:2px}\n  \u003c\/style\u003e\n\n\n\n\u003cdiv class=\"fr-widget\" id=\"fitRecommender\"\u003e\n  \u003cdiv style=\"font-weight:700;font-size:16px;margin-bottom:10px\"\u003eFit Recommender\u003c\/div\u003e\n\n  \u003cdiv class=\"fr-row\"\u003e\n    \u003cdiv class=\"fr-col\"\u003e\n      \u003cdiv class=\"fr-label\"\u003eCategory\u003c\/div\u003e\n      \u003cselect id=\"frCategory\" class=\"fr-input fr-select\"\u003e\n        \u003coption value=\"tops\"\u003eTops\u003c\/option\u003e\n        \u003coption value=\"bottoms\"\u003eBottoms\u003c\/option\u003e\n        \u003coption value=\"shoes\"\u003eShoes\u003c\/option\u003e\n      \u003c\/select\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"fr-col\"\u003e\n      \u003cdiv class=\"fr-label\"\u003eFit Preference\u003c\/div\u003e\n      \u003cselect id=\"frFitPref\" class=\"fr-input fr-select\"\u003e\n        \u003coption value=\"regular\"\u003eRegular\u003c\/option\u003e\n        \u003coption value=\"tight\"\u003eTight\u003c\/option\u003e\n        \u003coption value=\"loose\"\u003eLoose\u003c\/option\u003e\n      \u003c\/select\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv id=\"frMeasurements\" class=\"fr-input-box\"\u003e\u003c\/div\u003e\n\n  \u003cdiv class=\"fr-note\"\u003eNote: For best results, please provide as many measurements as possible.\u003c\/div\u003e\n\n  \u003cdiv style=\"margin-top:6px\"\u003e\u003cbutton id=\"frBtn\" class=\"fr-btn\"\u003eRecommend Size\u003c\/button\u003e\u003c\/div\u003e\n\n  \u003cdiv id=\"frResult\" class=\"fr-result\" style=\"display:none\"\u003e\n    \u003cdiv style=\"display:flex;justify-content:space-between;align-items:center\"\u003e\n      \u003cdiv\u003e\n\u003cdiv class=\"fr-small\"\u003eRecommended EU Size\u003c\/div\u003e\n\u003cdiv class=\"fr-size\" id=\"frSizeText\"\u003e-\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv style=\"text-align:right\"\u003e\n\u003cdiv class=\"fr-small\"\u003eCategory\u003c\/div\u003e\n\u003cdiv id=\"frCatText\" style=\"font-weight:700\"\u003e-\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"fr-note\" id=\"frAdvice\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  const SIZE_DATA={\n    tops:[{label:'XS', bust:[78,84], shoulder:[34,36], sleeve:[55,58], length:[55,60], hem:[78,82], neck:[32,34]},\n          {label:'S', bust:[85,90], shoulder:[36,38], sleeve:[56,59], length:[56,62], hem:[83,88], neck:[35,36]},\n          {label:'M', bust:[91,96], shoulder:[38,40], sleeve:[57,60], length:[57,63], hem:[89,94], neck:[37,38]},\n          {label:'L', bust:[97,102], shoulder:[40,42], sleeve:[58,61], length:[58,65], hem:[95,100], neck:[39,40]},\n          {label:'XL', bust:[103,108], shoulder:[42,44], sleeve:[59,63], length:[59,67], hem:[101,106], neck:[41,42]},\n          {label:'2XL', bust:[109,114], shoulder:[44,46], sleeve:[60,65], length:[60,69], hem:[107,112], neck:[43,44]},\n          {label:'3XL', bust:[115,120], shoulder:[46,48], sleeve:[61,67], length:[61,71], hem:[113,118], neck:[45,46]},\n          {label:'4XL', bust:[121,126], shoulder:[48,50], sleeve:[62,69], length:[62,73], hem:[119,124], neck:[47,48]}],\n    bottoms:[{label:'S', waist:[67,74], hip:[91,98], inseam:[74,78], outseam:[96,100], legOpening:[30,32], rise:[22,24]},\n             {label:'M', waist:[75,82], hip:[99,106], inseam:[75,79], outseam:[97,101], legOpening:[32,34], rise:[23,25]},\n             {label:'L', waist:[83,90], hip:[107,114], inseam:[76,81], outseam:[98,103], legOpening:[34,36], rise:[24,26]},\n             {label:'XL', waist:[91,98], hip:[115,122], inseam:[77,82], outseam:[99,104], legOpening:[36,38], rise:[25,27]}],\n    shoes:[{label:'35', insole:[23.6,24.0], foot:[22.8,23.4], width:[7.5,8]},\n           {label:'36', insole:[24.1,24.6], foot:[23.5,24.1], width:[7.8,8.3]},\n           {label:'37', insole:[24.7,25.2], foot:[24.2,24.8], width:[8,8.5]},\n           {label:'38', insole:[25.3,25.8], foot:[24.9,25.5], width:[8.3,8.8]},\n           {label:'39', insole:[26.0,26.5], foot:[25.6,26.2], width:[8.5,9]},\n           {label:'40', insole:[26.6,27.1], foot:[26.3,26.9], width:[8.8,9.3]},\n           {label:'41', insole:[27.3,27.8], foot:[27.0,27.6], width:[9,9.5]},\n           {label:'42', insole:[28.0,28.5], foot:[27.7,28.3], width:[9.3,9.8]}]\n  };\n\n  const EU_MAPPING={tops:{'XS':32,'S':34,'M':38,'L':42,'XL':46,'2XL':50,'3XL':54,'4XL':58}, bottoms:{'S':36,'M':40,'L':44,'XL':48}, shoes:{}}\n\n  function num(v){const n=parseFloat(String(v).replace(',','.'));return isNaN(n)?null:n;}\n  function inRange(val,range){return val!=null\u0026\u0026val\u003e=range[0]\u0026\u0026val\u003c=range[1];}\n\n  function scoreSize(category,data){\n    return SIZE_DATA[category].map(entry=\u003e{\n      let s=0,max=0;\n      Object.keys(entry).forEach(k=\u003e{if(k!=='label'){max++; if(data[k]!=null \u0026\u0026 inRange(data[k],entry[k])) s++;}});\n      return {label:entry.label, score:s, pct:max\u003e0?s\/max:0};\n    }).sort((a,b)=\u003eb.pct-a.pct);\n  }\n\n  function decideRecommendation(category,data,fitPref){\n    const scored=scoreSize(category,data);\n    if(scored.length===0) return {label:'No Match', method:'none'};\n    let top=scored[0];\n    if(fitPref==='tight'){const smaller=findNeighbour(category,top.label,-1);if(smaller) top.label=smaller;}\n    if(fitPref==='loose'){const larger=findNeighbour(category,top.label,1);if(larger) top.label=larger;}\n    return {label:top.label, method:'calculated'};\n  }\n\n  function findNeighbour(category,label,direction){\n    const list=SIZE_DATA[category].map(e=\u003ee.label);\n    const idx=list.indexOf(label);\n    if(idx===-1) return null;\n    const target=list[idx+direction];\n    return target||null;\n  }\n\n  const el=document.getElementById('fitRecommender');\n  const cat=document.getElementById('frCategory');\n  const fitPref=document.getElementById('frFitPref');\n  const btn=document.getElementById('frBtn');\n  const result=document.getElementById('frResult');\n  const sizeText=document.getElementById('frSizeText');\n  const catText=document.getElementById('frCatText');\n  const advice=document.getElementById('frAdvice');\n  const measArea=document.getElementById('frMeasurements');\n\n  function renderFields(){\n    const c=cat.value;\n    measArea.innerHTML='';\n    if(c==='tops'){\n      measArea.innerHTML=`\n      \u003cdiv class=\"fr-row\"\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eBust (cm)\u003c\/div\u003e\u003cinput id=\"bust\" class=\"fr-input\"\u003e\u003cdiv class=\"required-note\"\u003eRequired\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eShoulder (cm)\u003c\/div\u003e\u003cinput id=\"shoulder\" class=\"fr-input\"\u003e\u003cdiv class=\"required-note\"\u003eRequired\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eSleeve (cm)\u003c\/div\u003e\u003cinput id=\"sleeve\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eGarment Length (cm)\u003c\/div\u003e\u003cinput id=\"length\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eHem (cm)\u003c\/div\u003e\u003cinput id=\"hem\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eNeck Width (cm)\u003c\/div\u003e\u003cinput id=\"neck\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n      \u003c\/div\u003e`\n    } else if(c==='bottoms'){\n      measArea.innerHTML=`\n      \u003cdiv class=\"fr-row\"\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eWaist (cm)\u003c\/div\u003e\u003cinput id=\"waist\" class=\"fr-input\"\u003e\u003cdiv class=\"required-note\"\u003eRequired\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eHip (cm)\u003c\/div\u003e\u003cinput id=\"hip\" class=\"fr-input\"\u003e\u003cdiv class=\"required-note\"\u003eRequired\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eInseam (cm)\u003c\/div\u003e\u003cinput id=\"inseam\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eOutseam (cm)\u003c\/div\u003e\u003cinput id=\"outseam\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eLeg Opening (cm)\u003c\/div\u003e\u003cinput id=\"legOpening\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eRise (cm)\u003c\/div\u003e\u003cinput id=\"rise\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n      \u003c\/div\u003e`\n    } else if(c==='shoes'){\n      measArea.innerHTML=`\n      \u003cdiv class=\"fr-row\"\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eFoot Length (cm)\u003c\/div\u003e\u003cinput id=\"foot\" class=\"fr-input\"\u003e\u003cdiv class=\"required-note\"\u003eRequired\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eInsole Length (cm)\u003c\/div\u003e\u003cinput id=\"insole\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n        \u003cdiv class=\"fr-col\"\u003e\u003cdiv class=\"fr-label\"\u003eWidth (cm)\u003c\/div\u003e\u003cinput id=\"width\" class=\"fr-input\"\u003e\u003cdiv class=\"optional-note\"\u003eOptional\u003c\/div\u003e\u003c\/div\u003e\n      \u003c\/div\u003e`\n    }\n  }\n\n  cat.addEventListener('change',renderFields);\n  renderFields();\n\n  function gatherInputs(){\n    const c=cat.value;\n    const data={};\n    if(c==='tops'){['bust','shoulder','sleeve','length','hem','neck'].forEach(k=\u003edata[k]=num(document.getElementById(k)?.value));}\n    else if(c==='bottoms'){['waist','hip','inseam','outseam','legOpening','rise'].forEach(k=\u003edata[k]=num(document.getElementById(k)?.value));}\n    else if(c==='shoes'){['foot','insole','width'].forEach(k=\u003edata[k]=num(document.getElementById(k)?.value));}\n    return data;\n  }\n\n  function hasRequiredInputs(category,data){\n    if(category==='tops') return data.bust!=null \u0026\u0026 data.shoulder!=null;\n    if(category==='bottoms') return data.waist!=null \u0026\u0026 data.hip!=null;\n    if(category==='shoes') return data.foot!=null;\n    return false;\n  }\n\n  function onRecommend(){\n    const category=cat.value;\n    const fit=fitPref.value;\n    const data=gatherInputs();\n\n    if(!hasRequiredInputs(category,data)){\n      alert('Please fill out the required fields to get a recommendation.');\n      return;\n    }\n\n    const rec=decideRecommendation(category,data,fit);\n    result.style.display='block';\n    catText.textContent=category.charAt(0).toUpperCase()+category.slice(1);\n    const euSize=EU_MAPPING[category][rec.label];\n    sizeText.textContent=rec.label + (euSize ? ` (EU ${euSize})` : '');\n    advice.textContent='Recommendation method: '+rec.method;\n  }\n\n  btn.addEventListener('click',onRecommend);\n  el.addEventListener('keydown',function(e){if(e.key==='Enter') onRecommend();});\n})();\n\u003c\/script\u003e\n\n\n\n\n\u003c\/body\u003e","brand":"Stilla","offers":[{"title":"Mønster \/ S","offer_id":51692403097936,"sku":"sz00131yf00201","price":387.95,"currency_code":"DKK","in_stock":true},{"title":"Mønster \/ M","offer_id":51692403130704,"sku":"sz00131yf00201","price":387.95,"currency_code":"DKK","in_stock":true},{"title":"Mønster \/ L","offer_id":51692403163472,"sku":"sz00131yf00201","price":387.95,"currency_code":"DKK","in_stock":true},{"title":"Mønster \/ XL","offer_id":51692403196240,"sku":"sz00131yf00201","price":387.95,"currency_code":"DKK","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0773\/1268\/8464\/files\/O1CN01uTYvp01QTyUAg7yvE__4154671978-0-cib.jpg?v=1752510136","url":"https:\/\/skovae.com\/products\/dame-maxikjole-med-floral-designet-og-asymmetrisk-snit-stilla-b2pqavmvxn","provider":"Skovae","version":"1.0","type":"link"}