{"title":"Songshan District","description":"\u003ch4\u003e\n\u003cspan style=\"color: rgb(128, 128, 128);\"\u003e\u003cem\u003eSophisticated urban life: Where global transit meets the serenity of riverside lanes.\u003c\/em\u003e\u003c\/span\u003e\u003cbr\u003e\u003cstrong\u003e\u003cbr\u003eLiving Vibe\u003cbr\u003e\u003c\/strong\u003e-The vibe: Live at the city’s strategic hub—where the financial energy of \"Taipei’s Wall Street\" meets the connectivity of Songshan Airport.\u003cbr\u003e-The Style: Immerse yourself in the \"green tunnel\" of Fujin Street and the slow-living charm of Minsheng Community, the city’s most coveted residential place.\u003cbr\u003e-The Ritual: Rejuvenate with sunset cycling along the Keelung River or find nighttime comfort in the flavors of Raohe Market.\u003cbr\u003e\n\u003c\/h4\u003e","products":[{"product_id":"taipei-rental-monthly-apartment-yanj7-1","title":"2-Bedroom Home with Elevator(YanJ7-1)","description":"\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eFeaturing great natural lights, new furniture and renovations, this home is modern, new and cozy at the same time. It nestles to MRT station and bus stop which gives city dwellers great convenience. A working desk in the room makes it easy to work from home.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eSize\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003e22 ping \/ 72 ㎡ \/ 783 sqft\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e1 double bedroom and 1 single room\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e1 bathroom with bathtub and 1 toilet with shower\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e7-minute walk from \u003cspan style=\"color: rgb(60, 145, 38);\"\u003eMRT Taipei Arena station\u003c\/span\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eTV\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWifi\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eAir Conditioner \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDouble Bed (150 x 188cm)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eSingle Bed (105 x 188cm)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eCooking Stove\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDining Table\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eMicrowave \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWasher\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 class=\"p3\"\u003e\u003cb\u003eInterested in Renting?\u003c\/b\u003e\u003c\/h3\u003e\n\u003cp class=\"p3\"\u003e\u003cmeta charset=\"utf-8\"\u003eContact us for more information via our official LINE account, by email, or through the contact form:\u003c\/p\u003e\n\u003cul class=\"ul1\"\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/lin.ee\/Q7g9PtG\" rel=\"noopener\" target=\"_blank\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eLINE:\u003c\/b\u003e @kolette\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\n\u003cspan class=\"s1\"\u003e\u003c\/span\u003e\u003cb\u003eEmail:\u003c\/b\u003e contact@kolettehome.com\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/kolettehome.com\/pages\/contact\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eContact form\u003c\/b\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\n\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  var WORKER = \"https:\/\/ical-proxy.aidantpe.workers.dev\";\n  var ICAL_URL = \"https:\/\/www.airbnb.com.tw\/calendar\/ical\/879378797430883334.ics?t=3cab3ac99e83406f9d4eb2cd8b435dfb\";\n\n  var bookedRanges=[];\n  var cy=new Date().getFullYear();\n  var cm=new Date().getMonth();\n  var MN=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n  var DN=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n  var wrap=document.getElementById(\"kc-cal\");\n  wrap.innerHTML=`\n  \u003cstyle\u003e\n  .kc-wrap{font-family:sans-serif;margin:40px 0;border-top:2px solid #e5e7eb;padding-top:30px}\n  .kc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}\n  .kc-htitle{font-size:1.1rem;font-weight:700;color:#111}\n  .kc-nav button{background:#f3f4f6;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;margin-left:6px}\n  .kc-nav button:hover{background:#e5e7eb}\n  .kc-status{font-size:12px;color:#6b7280;margin-bottom:12px}\n  .kc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:12px}\n  .kc-dow{font-size:11px;color:#9ca3af;text-align:center;padding:4px 0;font-weight:600}\n  .kc-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:13px;color:#111}\n  .kc-avail{background:#f9fafb;border:1px solid #e5e7eb}\n  .kc-booked{background:#e5e7eb;color:#6b7280;text-decoration:line-through}\n  .kc-past{color:#d1d5db}\n  .kc-today{border:2px solid #3b82f6!important;font-weight:700}\n  .kc-legend{display:flex;gap:14px;font-size:12px;color:#6b7280;margin-top:4px;margin-bottom:10px}\n  .kc-leg{display:flex;align-items:center;gap:5px}\n  .kc-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n  .kc-notice{font-size:12px;color:#6b7280;margin-top:10px}\n  \u003c\/style\u003e\n  \u003cdiv class=\"kc-wrap\"\u003e\n    \u003cdiv class=\"kc-head\"\u003e\n      \u003cdiv class=\"kc-htitle\" id=\"kc-monthlabel\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"kc-nav\"\u003e\n        \u003cbutton onclick=\"kcPrev()\"\u003e\u0026#8592;\u003c\/button\u003e\n        \u003cbutton onclick=\"kcNext()\"\u003e\u0026#8594;\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"kc-status\" id=\"kc-status\"\u003eLoading...\u003c\/div\u003e\n    \u003cdiv class=\"kc-grid\" id=\"kc-grid\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"kc-legend\"\u003e\n    \u003cdiv class=\"kc-notice\"\u003eBookings for 30+ nights only\u003c\/div\u003e\n  \u003c\/div\u003e`;\n\n  function pd(s){return new Date(+s.slice(0,4),+s.slice(4,6)-1,+s.slice(6,8));}\n  function isBooked(d){for(var r of bookedRanges){if(d\u003e=r.start\u0026\u0026d\u003cr.end)return true;}return false;}\n\n  function renderCal(){\n    document.getElementById(\"kc-monthlabel\").textContent=MN[cm]+\" \"+cy;\n    var g=document.getElementById(\"kc-grid\");\n    g.innerHTML=\"\";\n    DN.forEach(function(d){var e=document.createElement(\"div\");e.className=\"kc-dow\";e.textContent=d;g.appendChild(e);});\n    var first=new Date(cy,cm,1).getDay();\n    var total=new Date(cy,cm+1,0).getDate();\n    var today=new Date();today.setHours(0,0,0,0);\n    for(var i=0;i\u003cfirst;i++){var e=document.createElement(\"div\");e.className=\"kc-day\";g.appendChild(e);}\n    for(var d=1;d\u003c=total;d++){\n      var date=new Date(cy,cm,d);\n      var e=document.createElement(\"div\");\n      e.textContent=d;\n      if(date\u003ctoday){e.className=\"kc-day kc-past\";}\n      else if(isBooked(date)){e.className=\"kc-day kc-booked\";}\n      else{e.className=\"kc-day kc-avail\";}\n      if(date.getTime()===today.getTime())e.classList.add(\"kc-today\");\n      g.appendChild(e);\n    }\n  }\n\n  window.kcPrev=function(){cm--;if(cm\u003c0){cm=11;cy--;}renderCal();};\n  window.kcNext=function(){cm++;if(cm\u003e11){cm=0;cy++;}renderCal();};\n\n  fetch(WORKER+\"\/?url=\"+encodeURIComponent(ICAL_URL))\n    .then(function(r){return r.text();})\n    .then(function(text){\n      var lines=text.replace(\/\\r\\n\/g,\"\\n\").replace(\/\\r\/g,\"\\n\").split(\"\\n\");\n      var inEv=false,ds=null,de=null;\n      lines.forEach(function(line){\n        if(line===\"BEGIN:VEVENT\"){inEv=true;ds=null;de=null;}\n        else if(line===\"END:VEVENT\"){if(inEv\u0026\u0026ds\u0026\u0026de)bookedRanges.push({start:ds,end:de});inEv=false;}\n        else if(inEv){\n          var m=line.match(\/^DTSTART[^:]*:(\\d{8})\/);\n          var m2=line.match(\/^DTEND[^:]*:(\\d{8})\/);\n          if(m)ds=pd(m[1]);\n          if(m2)de=pd(m2[1]);\n        }\n      });\n      document.getElementById(\"kc-status\").textContent=\"Contact us for details\";\n      renderCal();\n    })\n    .catch(function(e){\n      document.getElementById(\"kc-status\").textContent=\"\";\n      renderCal();\n    });\n\n  renderCal();\n})();\n\u003c\/script\u003e\n","brand":"Kolette Home","offers":[{"title":"Default Title","offer_id":42488339333306,"sku":"","price":0.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0605\/9504\/4538\/files\/YanJ_Kolette_Home_Living_Room.jpg?v=1776676442"},{"product_id":"taipei-rental-monthly-apartment-vdn","title":"Downtown Cozy 4-Bedroom Home (VDN)","description":"\u003cp\u003e\u003cspan\u003eDiscover the perfect blend of space, comfort, and convenience in our 132 square meter apartment, thoughtfully designed to be your ideal urban retreat. Featuring four bedrooms, two bathrooms, a spacious living room, a fully-equipped kitchen, and not one, but three balconies, this haven is crafted for memorable stays.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eSize\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003e40 ping \/ 132㎡ \/ 1423 sqft\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e4 bedrooms \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e8-minute walk from \u003cspan style=\"color: rgb(0, 73, 255);\"\u003eMRT Zhongxiao Dunhua Station\u003c\/span\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eTV\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e600M Wifi\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eAir Conditioner \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBed (150cm*190cm) \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eCooking Stove\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eMicrowave \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWasher\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDryer\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBalcony\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 class=\"p3\"\u003e\u003cb\u003eInterested in Renting?\u003c\/b\u003e\u003c\/h3\u003e\n\u003cp class=\"p3\"\u003e\u003cmeta charset=\"utf-8\"\u003eContact us for more information via our official LINE account, by email, or through the contact form:\u003c\/p\u003e\n\u003cul class=\"ul1\"\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/lin.ee\/Q7g9PtG\" target=\"_blank\" rel=\"noopener\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eLINE:\u003c\/b\u003e @kolette\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\n\u003cspan class=\"s1\"\u003e\u003c\/span\u003e\u003cb\u003eEmail:\u003c\/b\u003e contact@kolettehome.com\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/kolettehome.com\/pages\/contact\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eContact form\u003c\/b\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  var WORKER = \"https:\/\/ical-proxy.aidantpe.workers.dev\";\n  var ICAL_URL = \"https:\/\/www.airbnb.com.tw\/calendar\/ical\/1050443260789181478.ics?t=fa3b8a6a4ab2438e924caab9b20e1610\";\n\n  var bookedRanges=[];\n  var cy=new Date().getFullYear();\n  var cm=new Date().getMonth();\n  var MN=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n  var DN=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n  var wrap=document.getElementById(\"kc-cal\");\n  wrap.innerHTML=`\n  \u003cstyle\u003e\n  .kc-wrap{font-family:sans-serif;margin:40px 0;border-top:2px solid #e5e7eb;padding-top:30px}\n  .kc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}\n  .kc-htitle{font-size:1.1rem;font-weight:700;color:#111}\n  .kc-nav button{background:#f3f4f6;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;margin-left:6px}\n  .kc-nav button:hover{background:#e5e7eb}\n  .kc-status{font-size:12px;color:#6b7280;margin-bottom:12px}\n  .kc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:12px}\n  .kc-dow{font-size:11px;color:#9ca3af;text-align:center;padding:4px 0;font-weight:600}\n  .kc-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:13px;color:#111}\n  .kc-avail{background:#f9fafb;border:1px solid #e5e7eb}\n  .kc-booked{background:#e5e7eb;color:#6b7280;text-decoration:line-through}\n  .kc-past{color:#d1d5db}\n  .kc-today{border:2px solid #3b82f6!important;font-weight:700}\n  .kc-legend{display:flex;gap:14px;font-size:12px;color:#6b7280;margin-top:4px;margin-bottom:10px}\n  .kc-leg{display:flex;align-items:center;gap:5px}\n  .kc-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n  .kc-notice{font-size:12px;color:#6b7280;margin-top:10px}\n  \u003c\/style\u003e\n  \u003cdiv class=\"kc-wrap\"\u003e\n    \u003cdiv class=\"kc-head\"\u003e\n      \u003cdiv class=\"kc-htitle\" id=\"kc-monthlabel\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"kc-nav\"\u003e\n        \u003cbutton onclick=\"kcPrev()\"\u003e\u0026#8592;\u003c\/button\u003e\n        \u003cbutton onclick=\"kcNext()\"\u003e\u0026#8594;\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"kc-status\" id=\"kc-status\"\u003eLoading...\u003c\/div\u003e\n    \u003cdiv class=\"kc-grid\" id=\"kc-grid\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"kc-legend\"\u003e\n    \u003cdiv class=\"kc-notice\"\u003eBookings for 30+ nights only\u003c\/div\u003e\n  \u003c\/div\u003e`;\n\n  function pd(s){return new Date(+s.slice(0,4),+s.slice(4,6)-1,+s.slice(6,8));}\n  function isBooked(d){for(var r of bookedRanges){if(d\u003e=r.start\u0026\u0026d\u003cr.end)return true;}return false;}\n\n  function renderCal(){\n    document.getElementById(\"kc-monthlabel\").textContent=MN[cm]+\" \"+cy;\n    var g=document.getElementById(\"kc-grid\");\n    g.innerHTML=\"\";\n    DN.forEach(function(d){var e=document.createElement(\"div\");e.className=\"kc-dow\";e.textContent=d;g.appendChild(e);});\n    var first=new Date(cy,cm,1).getDay();\n    var total=new Date(cy,cm+1,0).getDate();\n    var today=new Date();today.setHours(0,0,0,0);\n    for(var i=0;i\u003cfirst;i++){var e=document.createElement(\"div\");e.className=\"kc-day\";g.appendChild(e);}\n    for(var d=1;d\u003c=total;d++){\n      var date=new Date(cy,cm,d);\n      var e=document.createElement(\"div\");\n      e.textContent=d;\n      if(date\u003ctoday){e.className=\"kc-day kc-past\";}\n      else if(isBooked(date)){e.className=\"kc-day kc-booked\";}\n      else{e.className=\"kc-day kc-avail\";}\n      if(date.getTime()===today.getTime())e.classList.add(\"kc-today\");\n      g.appendChild(e);\n    }\n  }\n\n  window.kcPrev=function(){cm--;if(cm\u003c0){cm=11;cy--;}renderCal();};\n  window.kcNext=function(){cm++;if(cm\u003e11){cm=0;cy++;}renderCal();};\n\n  fetch(WORKER+\"\/?url=\"+encodeURIComponent(ICAL_URL))\n    .then(function(r){return r.text();})\n    .then(function(text){\n      var lines=text.replace(\/\\r\\n\/g,\"\\n\").replace(\/\\r\/g,\"\\n\").split(\"\\n\");\n      var inEv=false,ds=null,de=null;\n      lines.forEach(function(line){\n        if(line===\"BEGIN:VEVENT\"){inEv=true;ds=null;de=null;}\n        else if(line===\"END:VEVENT\"){if(inEv\u0026\u0026ds\u0026\u0026de)bookedRanges.push({start:ds,end:de});inEv=false;}\n        else if(inEv){\n          var m=line.match(\/^DTSTART[^:]*:(\\d{8})\/);\n          var m2=line.match(\/^DTEND[^:]*:(\\d{8})\/);\n          if(m)ds=pd(m[1]);\n          if(m2)de=pd(m2[1]);\n        }\n      });\n      document.getElementById(\"kc-status\").textContent=\"Contact us for details\";\n      renderCal();\n    })\n    .catch(function(e){\n      document.getElementById(\"kc-status\").textContent=\"\";\n      renderCal();\n    });\n\n  renderCal();\n})();\n\u003c\/script\u003e\n","brand":"Kolette Home","offers":[{"title":"Default Title","offer_id":44296756953274,"sku":null,"price":0.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0605\/9504\/4538\/files\/VDN_Kolette_Home_Living_Room.jpg?v=1776504074"},{"product_id":"taipei-rental-monthly-apartment-nj21","title":"Sunlight 1-Bedroom Home with Elevator (NJ21)","description":"\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eEnjoy natural light all day long! \u003cmeta charset=\"utf-8\"\u003eThis home is modern and cozy at the same time, also features a bathroom with a wet and dry separation, a small dressing room, and an outdoor balcony flooded with great natural lights. \u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003eJust a 5-minute walk to Taipei Arena MRT Station(G17)  which gives city dwellers great convenience. Surrounded by convenience stores, a variety of restaurants, cafes, bars, and fast-food outlets to meet your everyday needs. A working desk provided in the unit for the guests to work from home.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eSize\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003e10 ping \/ 33 m² \/ 356 sqft\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e1 Double Bedroom\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWorking Desk\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e1 Bathroom\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e5-minute walk from \u003cspan style=\"color: #06782c;\"\u003eMRT Taipei Arena station\u003c\/span\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eTV\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWifi\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eAir Conditioner \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDouble Bed (150 x 188cm)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003eElectric Kettle\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDining Table\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eMicrowave \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWasher\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDryer\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eElevator\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 class=\"p3\"\u003e\u003cb\u003eInterested in Renting?\u003c\/b\u003e\u003c\/h3\u003e\n\u003cp class=\"p3\"\u003e\u003cmeta charset=\"utf-8\"\u003eContact us for more information via our official LINE account, by email, or through the contact form:\u003c\/p\u003e\n\u003cul class=\"ul1\"\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/lin.ee\/Q7g9PtG\" target=\"_blank\" rel=\"noopener\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eLINE:\u003c\/b\u003e @kolette\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\n\u003cspan class=\"s1\"\u003e\u003c\/span\u003e\u003cb\u003eEmail:\u003c\/b\u003e contact@kolettehome.com\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/kolettehome.com\/pages\/contact\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eContact form\u003c\/b\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  var WORKER = \"https:\/\/ical-proxy.aidantpe.workers.dev\";\n  var ICAL_URL = \"https:\/\/www.airbnb.com.tw\/calendar\/ical\/1233804835893842384.ics?t=efa03235dbee4e7caa5378203eaa02cc\";\n\n  var bookedRanges=[];\n  var cy=new Date().getFullYear();\n  var cm=new Date().getMonth();\n  var MN=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n  var DN=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n  var wrap=document.getElementById(\"kc-cal\");\n  wrap.innerHTML=`\n  \u003cstyle\u003e\n  .kc-wrap{font-family:sans-serif;margin:40px 0;border-top:2px solid #e5e7eb;padding-top:30px}\n  .kc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}\n  .kc-htitle{font-size:1.1rem;font-weight:700;color:#111}\n  .kc-nav button{background:#f3f4f6;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;margin-left:6px}\n  .kc-nav button:hover{background:#e5e7eb}\n  .kc-status{font-size:12px;color:#6b7280;margin-bottom:12px}\n  .kc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:12px}\n  .kc-dow{font-size:11px;color:#9ca3af;text-align:center;padding:4px 0;font-weight:600}\n  .kc-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:13px;color:#111}\n  .kc-avail{background:#f9fafb;border:1px solid #e5e7eb}\n  .kc-booked{background:#e5e7eb;color:#6b7280;text-decoration:line-through}\n  .kc-past{color:#d1d5db}\n  .kc-today{border:2px solid #3b82f6!important;font-weight:700}\n  .kc-legend{display:flex;gap:14px;font-size:12px;color:#6b7280;margin-top:4px;margin-bottom:10px}\n  .kc-leg{display:flex;align-items:center;gap:5px}\n  .kc-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n  .kc-notice{font-size:12px;color:#6b7280;margin-top:10px}\n  \u003c\/style\u003e\n  \u003cdiv class=\"kc-wrap\"\u003e\n    \u003cdiv class=\"kc-head\"\u003e\n      \u003cdiv class=\"kc-htitle\" id=\"kc-monthlabel\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"kc-nav\"\u003e\n        \u003cbutton onclick=\"kcPrev()\"\u003e\u0026#8592;\u003c\/button\u003e\n        \u003cbutton onclick=\"kcNext()\"\u003e\u0026#8594;\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"kc-status\" id=\"kc-status\"\u003eLoading...\u003c\/div\u003e\n    \u003cdiv class=\"kc-grid\" id=\"kc-grid\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"kc-legend\"\u003e\n    \u003cdiv class=\"kc-notice\"\u003eBookings for 30+ nights only\u003c\/div\u003e\n  \u003c\/div\u003e`;\n\n  function pd(s){return new Date(+s.slice(0,4),+s.slice(4,6)-1,+s.slice(6,8));}\n  function isBooked(d){for(var r of bookedRanges){if(d\u003e=r.start\u0026\u0026d\u003cr.end)return true;}return false;}\n\n  function renderCal(){\n    document.getElementById(\"kc-monthlabel\").textContent=MN[cm]+\" \"+cy;\n    var g=document.getElementById(\"kc-grid\");\n    g.innerHTML=\"\";\n    DN.forEach(function(d){var e=document.createElement(\"div\");e.className=\"kc-dow\";e.textContent=d;g.appendChild(e);});\n    var first=new Date(cy,cm,1).getDay();\n    var total=new Date(cy,cm+1,0).getDate();\n    var today=new Date();today.setHours(0,0,0,0);\n    for(var i=0;i\u003cfirst;i++){var e=document.createElement(\"div\");e.className=\"kc-day\";g.appendChild(e);}\n    for(var d=1;d\u003c=total;d++){\n      var date=new Date(cy,cm,d);\n      var e=document.createElement(\"div\");\n      e.textContent=d;\n      if(date\u003ctoday){e.className=\"kc-day kc-past\";}\n      else if(isBooked(date)){e.className=\"kc-day kc-booked\";}\n      else{e.className=\"kc-day kc-avail\";}\n      if(date.getTime()===today.getTime())e.classList.add(\"kc-today\");\n      g.appendChild(e);\n    }\n  }\n\n  window.kcPrev=function(){cm--;if(cm\u003c0){cm=11;cy--;}renderCal();};\n  window.kcNext=function(){cm++;if(cm\u003e11){cm=0;cy++;}renderCal();};\n\n  fetch(WORKER+\"\/?url=\"+encodeURIComponent(ICAL_URL))\n    .then(function(r){return r.text();})\n    .then(function(text){\n      var lines=text.replace(\/\\r\\n\/g,\"\\n\").replace(\/\\r\/g,\"\\n\").split(\"\\n\");\n      var inEv=false,ds=null,de=null;\n      lines.forEach(function(line){\n        if(line===\"BEGIN:VEVENT\"){inEv=true;ds=null;de=null;}\n        else if(line===\"END:VEVENT\"){if(inEv\u0026\u0026ds\u0026\u0026de)bookedRanges.push({start:ds,end:de});inEv=false;}\n        else if(inEv){\n          var m=line.match(\/^DTSTART[^:]*:(\\d{8})\/);\n          var m2=line.match(\/^DTEND[^:]*:(\\d{8})\/);\n          if(m)ds=pd(m[1]);\n          if(m2)de=pd(m2[1]);\n        }\n      });\n      document.getElementById(\"kc-status\").textContent=\"Contact us for details\";\n      renderCal();\n    })\n    .catch(function(e){\n      document.getElementById(\"kc-status\").textContent=\"\";\n      renderCal();\n    });\n\n  renderCal();\n})();\n\u003c\/script\u003e\n","brand":"Kolette Home","offers":[{"title":"Default Title","offer_id":44328157577402,"sku":null,"price":0.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0605\/9504\/4538\/files\/NJ21_Kolette_Home_Living_Room.jpg?v=1776496445"},{"product_id":"taipei-rental-monthly-apartment-jk3","title":"3-Bedroom Home with Elevator (JK3)","description":"\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eFeaturing abundant natural lights, new furniture and modern renovations. Conveniently located near an MRT station and bus stop. A working desk makes it easy to work from home.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eSize\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003e35 ping \/ 115 m² \/ 1245 sqft\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e3 double bedrooms\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e2 bathrooms (1 with bathtub and 1 is shower)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e3-minute walk from \u003cspan style=\"color: #4b7dfa;\"\u003eMRT Taipei Arena station\u003c\/span\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eTV\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWifi\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eAir Conditioner \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDouble Bed (150 x 188cm)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eCooking Stove\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eKitchenware and tableware\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDining Table\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eMicrowave \u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eWasher\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDryer\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eElevator\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 class=\"p3\"\u003e\u003cb\u003eInterested in Renting?\u003c\/b\u003e\u003c\/h3\u003e\n\u003cp class=\"p3\"\u003e\u003cmeta charset=\"utf-8\"\u003eContact us for more information via our official LINE account, by email, or through the contact form:\u003c\/p\u003e\n\u003cul class=\"ul1\"\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/lin.ee\/Q7g9PtG\" target=\"_blank\" rel=\"noopener\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eLINE:\u003c\/b\u003e @kolette\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\n\u003cspan class=\"s1\"\u003e\u003c\/span\u003e\u003cb\u003eEmail:\u003c\/b\u003e contact@kolettehome.com\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/kolettehome.com\/pages\/contact\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eContact form\u003c\/b\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  var WORKER = \"https:\/\/ical-proxy.aidantpe.workers.dev\";\n  var ICAL_URL = \"https:\/\/www.airbnb.com.tw\/calendar\/ical\/1294879243091183285.ics?t=4ba713e639d841faaee1fa3ae5cd0fc1\";\n\n  var bookedRanges=[];\n  var cy=new Date().getFullYear();\n  var cm=new Date().getMonth();\n  var MN=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n  var DN=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n  var wrap=document.getElementById(\"kc-cal\");\n  wrap.innerHTML=`\n  \u003cstyle\u003e\n  .kc-wrap{font-family:sans-serif;margin:40px 0;border-top:2px solid #e5e7eb;padding-top:30px}\n  .kc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}\n  .kc-htitle{font-size:1.1rem;font-weight:700;color:#111}\n  .kc-nav button{background:#f3f4f6;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;margin-left:6px}\n  .kc-nav button:hover{background:#e5e7eb}\n  .kc-status{font-size:12px;color:#6b7280;margin-bottom:12px}\n  .kc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:12px}\n  .kc-dow{font-size:11px;color:#9ca3af;text-align:center;padding:4px 0;font-weight:600}\n  .kc-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:13px;color:#111}\n  .kc-avail{background:#f9fafb;border:1px solid #e5e7eb}\n  .kc-booked{background:#e5e7eb;color:#6b7280;text-decoration:line-through}\n  .kc-past{color:#d1d5db}\n  .kc-today{border:2px solid #3b82f6!important;font-weight:700}\n  .kc-legend{display:flex;gap:14px;font-size:12px;color:#6b7280;margin-top:4px;margin-bottom:10px}\n  .kc-leg{display:flex;align-items:center;gap:5px}\n  .kc-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n  .kc-notice{font-size:12px;color:#6b7280;margin-top:10px}\n  \u003c\/style\u003e\n  \u003cdiv class=\"kc-wrap\"\u003e\n    \u003cdiv class=\"kc-head\"\u003e\n      \u003cdiv class=\"kc-htitle\" id=\"kc-monthlabel\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"kc-nav\"\u003e\n        \u003cbutton onclick=\"kcPrev()\"\u003e\u0026#8592;\u003c\/button\u003e\n        \u003cbutton onclick=\"kcNext()\"\u003e\u0026#8594;\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"kc-status\" id=\"kc-status\"\u003eLoading...\u003c\/div\u003e\n    \u003cdiv class=\"kc-grid\" id=\"kc-grid\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"kc-legend\"\u003e\n    \u003cdiv class=\"kc-notice\"\u003eBookings for 30+ nights only\u003c\/div\u003e\n  \u003c\/div\u003e`;\n\n  function pd(s){return new Date(+s.slice(0,4),+s.slice(4,6)-1,+s.slice(6,8));}\n  function isBooked(d){for(var r of bookedRanges){if(d\u003e=r.start\u0026\u0026d\u003cr.end)return true;}return false;}\n\n  function renderCal(){\n    document.getElementById(\"kc-monthlabel\").textContent=MN[cm]+\" \"+cy;\n    var g=document.getElementById(\"kc-grid\");\n    g.innerHTML=\"\";\n    DN.forEach(function(d){var e=document.createElement(\"div\");e.className=\"kc-dow\";e.textContent=d;g.appendChild(e);});\n    var first=new Date(cy,cm,1).getDay();\n    var total=new Date(cy,cm+1,0).getDate();\n    var today=new Date();today.setHours(0,0,0,0);\n    for(var i=0;i\u003cfirst;i++){var e=document.createElement(\"div\");e.className=\"kc-day\";g.appendChild(e);}\n    for(var d=1;d\u003c=total;d++){\n      var date=new Date(cy,cm,d);\n      var e=document.createElement(\"div\");\n      e.textContent=d;\n      if(date\u003ctoday){e.className=\"kc-day kc-past\";}\n      else if(isBooked(date)){e.className=\"kc-day kc-booked\";}\n      else{e.className=\"kc-day kc-avail\";}\n      if(date.getTime()===today.getTime())e.classList.add(\"kc-today\");\n      g.appendChild(e);\n    }\n  }\n\n  window.kcPrev=function(){cm--;if(cm\u003c0){cm=11;cy--;}renderCal();};\n  window.kcNext=function(){cm++;if(cm\u003e11){cm=0;cy++;}renderCal();};\n\n  fetch(WORKER+\"\/?url=\"+encodeURIComponent(ICAL_URL))\n    .then(function(r){return r.text();})\n    .then(function(text){\n      var lines=text.replace(\/\\r\\n\/g,\"\\n\").replace(\/\\r\/g,\"\\n\").split(\"\\n\");\n      var inEv=false,ds=null,de=null;\n      lines.forEach(function(line){\n        if(line===\"BEGIN:VEVENT\"){inEv=true;ds=null;de=null;}\n        else if(line===\"END:VEVENT\"){if(inEv\u0026\u0026ds\u0026\u0026de)bookedRanges.push({start:ds,end:de});inEv=false;}\n        else if(inEv){\n          var m=line.match(\/^DTSTART[^:]*:(\\d{8})\/);\n          var m2=line.match(\/^DTEND[^:]*:(\\d{8})\/);\n          if(m)ds=pd(m[1]);\n          if(m2)de=pd(m2[1]);\n        }\n      });\n      document.getElementById(\"kc-status\").textContent=\"Contact us for details\";\n      renderCal();\n    })\n    .catch(function(e){\n      document.getElementById(\"kc-status\").textContent=\"\";\n      renderCal();\n    });\n\n  renderCal();\n})();\n\u003c\/script\u003e\n\n\n","brand":"Kolette Home","offers":[{"title":"Default Title","offer_id":44463609151674,"sku":null,"price":0.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0605\/9504\/4538\/files\/JK3_Kolette_Home_Living_Room.jpg?v=1776493659"},{"product_id":"taipei-rental-monthly-apartment-gf35","title":"Luxurious 3BR Retreat: King-Size Comfort \u0026 Prime Location (GF35)","description":"\u003cp\u003eStay in this spacious three-bedroom apartment with king size beds for comfort. Enjoy two full bathrooms and a fully equipped kitchen for convenience. Relax on two private balconies while being close to Songshan Cultural \u0026amp; Creative Park. Benefit from fast WiFi, dedicated workspace, and access to laundry facilities. This is the perfect home in Taipei.\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eSize\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003e36 ping \/ 118 m² \/ 1281 sqft\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e3 bedrooms and 2 bathrooms\u003c\/li\u003e\n\u003cli\u003e10-minute walk to \u003cspan style=\"color: #4b7dfa;\"\u003eMRT \u003cspan\u003eSun Yat-Sen Memorial Hall Station\u003c\/span\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eSmart TV\u003c\/li\u003e\n\u003cli\u003eWifi\u003c\/li\u003e\n\u003cli\u003eMedia Streamer\u003c\/li\u003e\n\u003cli\u003eAir Conditioner \u003c\/li\u003e\n\u003cli\u003eBed (150*200cm in 2 bedrooms, \u003cspan\u003e150 x 188cm in 1 bedroom)\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003eCooking Stove\u003c\/li\u003e\n\u003cli\u003eMicrowave \u003c\/li\u003e\n\u003cli\u003eWasher\u003c\/li\u003e\n\u003cli\u003eDryer\u003cbr\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 class=\"p3\"\u003e\u003cb\u003eInterested in Renting?\u003c\/b\u003e\u003c\/h3\u003e\n\u003cp class=\"p3\"\u003e\u003cmeta charset=\"utf-8\"\u003eContact us for more information via our official LINE account, by email, or through the contact form:\u003c\/p\u003e\n\u003cul class=\"ul1\"\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/lin.ee\/Q7g9PtG\" rel=\"noopener\" target=\"_blank\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eLINE:\u003c\/b\u003e @kolette\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\n\u003cspan class=\"s1\"\u003e\u003c\/span\u003e\u003cb\u003eEmail:\u003c\/b\u003e contact@kolettehome.com\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/kolettehome.com\/pages\/contact\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eContact form\u003c\/b\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  var WORKER = \"https:\/\/ical-proxy.aidantpe.workers.dev\";\n  var ICAL_URL = \"https:\/\/www.airbnb.com.tw\/calendar\/ical\/1381763783442931155.ics?t=4b6ab6831be14f2aa17a05a086c006f0\";\n\n  var bookedRanges=[];\n  var cy=new Date().getFullYear();\n  var cm=new Date().getMonth();\n  var MN=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n  var DN=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n  var wrap=document.getElementById(\"kc-cal\");\n  wrap.innerHTML=`\n  \u003cstyle\u003e\n  .kc-wrap{font-family:sans-serif;margin:40px 0;border-top:2px solid #e5e7eb;padding-top:30px}\n  .kc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}\n  .kc-htitle{font-size:1.1rem;font-weight:700;color:#111}\n  .kc-nav button{background:#f3f4f6;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;margin-left:6px}\n  .kc-nav button:hover{background:#e5e7eb}\n  .kc-status{font-size:12px;color:#6b7280;margin-bottom:12px}\n  .kc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:12px}\n  .kc-dow{font-size:11px;color:#9ca3af;text-align:center;padding:4px 0;font-weight:600}\n  .kc-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:13px;color:#111}\n  .kc-avail{background:#f9fafb;border:1px solid #e5e7eb}\n  .kc-booked{background:#e5e7eb;color:#6b7280;text-decoration:line-through}\n  .kc-past{color:#d1d5db}\n  .kc-today{border:2px solid #3b82f6!important;font-weight:700}\n  .kc-legend{display:flex;gap:14px;font-size:12px;color:#6b7280;margin-top:4px;margin-bottom:10px}\n  .kc-leg{display:flex;align-items:center;gap:5px}\n  .kc-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n  .kc-notice{font-size:12px;color:#6b7280;margin-top:10px}\n  \u003c\/style\u003e\n  \u003cdiv class=\"kc-wrap\"\u003e\n    \u003cdiv class=\"kc-head\"\u003e\n      \u003cdiv class=\"kc-htitle\" id=\"kc-monthlabel\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"kc-nav\"\u003e\n        \u003cbutton onclick=\"kcPrev()\"\u003e\u0026#8592;\u003c\/button\u003e\n        \u003cbutton onclick=\"kcNext()\"\u003e\u0026#8594;\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"kc-status\" id=\"kc-status\"\u003eLoading...\u003c\/div\u003e\n    \u003cdiv class=\"kc-grid\" id=\"kc-grid\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"kc-legend\"\u003e\n    \u003cdiv class=\"kc-notice\"\u003eBookings for 30+ nights only\u003c\/div\u003e\n  \u003c\/div\u003e`;\n\n  function pd(s){return new Date(+s.slice(0,4),+s.slice(4,6)-1,+s.slice(6,8));}\n  function isBooked(d){for(var r of bookedRanges){if(d\u003e=r.start\u0026\u0026d\u003cr.end)return true;}return false;}\n\n  function renderCal(){\n    document.getElementById(\"kc-monthlabel\").textContent=MN[cm]+\" \"+cy;\n    var g=document.getElementById(\"kc-grid\");\n    g.innerHTML=\"\";\n    DN.forEach(function(d){var e=document.createElement(\"div\");e.className=\"kc-dow\";e.textContent=d;g.appendChild(e);});\n    var first=new Date(cy,cm,1).getDay();\n    var total=new Date(cy,cm+1,0).getDate();\n    var today=new Date();today.setHours(0,0,0,0);\n    for(var i=0;i\u003cfirst;i++){var e=document.createElement(\"div\");e.className=\"kc-day\";g.appendChild(e);}\n    for(var d=1;d\u003c=total;d++){\n      var date=new Date(cy,cm,d);\n      var e=document.createElement(\"div\");\n      e.textContent=d;\n      if(date\u003ctoday){e.className=\"kc-day kc-past\";}\n      else if(isBooked(date)){e.className=\"kc-day kc-booked\";}\n      else{e.className=\"kc-day kc-avail\";}\n      if(date.getTime()===today.getTime())e.classList.add(\"kc-today\");\n      g.appendChild(e);\n    }\n  }\n\n  window.kcPrev=function(){cm--;if(cm\u003c0){cm=11;cy--;}renderCal();};\n  window.kcNext=function(){cm++;if(cm\u003e11){cm=0;cy++;}renderCal();};\n\n  fetch(WORKER+\"\/?url=\"+encodeURIComponent(ICAL_URL))\n    .then(function(r){return r.text();})\n    .then(function(text){\n      var lines=text.replace(\/\\r\\n\/g,\"\\n\").replace(\/\\r\/g,\"\\n\").split(\"\\n\");\n      var inEv=false,ds=null,de=null;\n      lines.forEach(function(line){\n        if(line===\"BEGIN:VEVENT\"){inEv=true;ds=null;de=null;}\n        else if(line===\"END:VEVENT\"){if(inEv\u0026\u0026ds\u0026\u0026de)bookedRanges.push({start:ds,end:de});inEv=false;}\n        else if(inEv){\n          var m=line.match(\/^DTSTART[^:]*:(\\d{8})\/);\n          var m2=line.match(\/^DTEND[^:]*:(\\d{8})\/);\n          if(m)ds=pd(m[1]);\n          if(m2)de=pd(m2[1]);\n        }\n      });\n      document.getElementById(\"kc-status\").textContent=\"Contact us for details\";\n      renderCal();\n    })\n    .catch(function(e){\n      document.getElementById(\"kc-status\").textContent=\"\";\n      renderCal();\n    });\n\n  renderCal();\n})();\n\u003c\/script\u003e","brand":"Kolette Home","offers":[{"title":"Default Title","offer_id":44729775423674,"sku":null,"price":0.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0605\/9504\/4538\/files\/GF35_Kolette_Home_kitchen.png?v=1776493254"},{"product_id":"taipei-rental-monthly-apartment-cv139","title":"Spacious 3-Bedroom Apartment, Cozy Urban Escape in Eastern Area (CV139)","description":"\u003cp\u003eEmbrace urban living in this inviting apartment nestled in Taipei's Eastern Area. With convenient access to public transportation, you'll find both the MRT and bus stations within minutes. Enjoy the modern conveniences of a full kitchen, high-speed Wi-Fi, and a cozy living area with a 70-inch smart TV. Perfectly designed for larger groups up to 6 guests. Experience effortless city life with centralized waste collection, making your stay both practical and enjoyable.\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eSize\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003e19 ping \/ 62.5 m\u003cmeta charset=\"utf-8\"\u003e\n\u003csup\u003e2\u003c\/sup\u003e \/ 676 sqft\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e3 bedrooms and 1 bathrooms\u003c\/li\u003e\n\u003cli\u003e5 minutes walk to \u003cspan style=\"color: #4b7dfa;\"\u003eMRT Zhongxiao Dunhua Station\u003c\/span\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eTV\u003c\/li\u003e\n\u003cli\u003eWifi\u003c\/li\u003e\n\u003cli\u003eMedia Streamer\u003c\/li\u003e\n\u003cli\u003eAir Conditioner (with heater function)\u003c\/li\u003e\n\u003cli\u003eBed (\u003cspan\u003e150 x 188cm)\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003eCooking Stove\u003c\/li\u003e\n\u003cli\u003eMicrowave \u003c\/li\u003e\n\u003cli\u003eDish Washer \u003c\/li\u003e\n\u003cli\u003eWasher\u003c\/li\u003e\n\u003cli\u003eDryer\u003cbr\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 class=\"p3\"\u003e\u003cb\u003eInterested in Renting?\u003c\/b\u003e\u003c\/h3\u003e\n\u003cp class=\"p3\"\u003eContact us for more information via our official LINE account, by email, or through the contact form:\u003c\/p\u003e\n\u003cul class=\"ul1\"\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca rel=\"noopener\" href=\"https:\/\/lin.ee\/Q7g9PtG\" target=\"_blank\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eLINE:\u003c\/b\u003e @kolette\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\n\u003cspan class=\"s1\"\u003e\u003c\/span\u003e\u003cb\u003eEmail:\u003c\/b\u003e contact@kolettehome.com\u003c\/li\u003e\n\u003cli class=\"li3\"\u003e\u003cspan class=\"s1\"\u003e\u003ca href=\"https:\/\/kolettehome.com\/pages\/contact\"\u003e\u003cspan class=\"s2\"\u003e\u003cb\u003eContact form\u003c\/b\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cdiv id=\"kc-cal\"\u003e\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\n\u003cscript\u003e\n\n(function(){\n\n  var WORKER = \"https:\/\/ical-proxy.aidantpe.workers.dev\";\n\n  var ICAL_URL = \"https:\/\/www.airbnb.com.tw\/calendar\/ical\/1489563607441669370.ics?t=6fad3a23315049209b6f7213ecd47751\";\n\n\n\n  var bookedRanges=[];\n\n  var cy=new Date().getFullYear();\n\n  var cm=new Date().getMonth();\n\n  var MN=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n\n  var DN=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n\n\n  var wrap=document.getElementById(\"kc-cal\");\n\n  wrap.innerHTML=`\n\n  \u003cstyle\u003e\n\n  .kc-wrap{font-family:sans-serif;margin:40px 0;border-top:2px solid #e5e7eb;padding-top:30px}\n\n  .kc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}\n\n  .kc-htitle{font-size:1.1rem;font-weight:700;color:#111}\n\n  .kc-nav button{background:#f3f4f6;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;margin-left:6px}\n\n  .kc-nav button:hover{background:#e5e7eb}\n\n  .kc-status{font-size:12px;color:#6b7280;margin-bottom:12px}\n\n  .kc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:12px}\n\n  .kc-dow{font-size:11px;color:#9ca3af;text-align:center;padding:4px 0;font-weight:600}\n\n  .kc-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:13px;color:#111}\n\n  .kc-avail{background:#f9fafb;border:1px solid #e5e7eb}\n\n  .kc-booked{background:#e5e7eb;color:#6b7280;text-decoration:line-through}\n\n  .kc-past{color:#d1d5db}\n\n  .kc-today{border:2px solid #3b82f6!important;font-weight:700}\n\n  .kc-legend{display:flex;gap:14px;font-size:12px;color:#6b7280;margin-top:4px;margin-bottom:10px}\n\n  .kc-leg{display:flex;align-items:center;gap:5px}\n\n  .kc-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n\n  .kc-notice{font-size:12px;color:#6b7280;margin-top:10px}\n\n  \u003c\/style\u003e\n\n  \u003cdiv class=\"kc-wrap\"\u003e\n\n    \u003cdiv class=\"kc-head\"\u003e\n\n      \u003cdiv class=\"kc-htitle\" id=\"kc-monthlabel\"\u003e\u003c\/div\u003e\n\n      \u003cdiv class=\"kc-nav\"\u003e\n\n        \u003cbutton onclick=\"kcPrev()\"\u003e\u0026#8592;\u003c\/button\u003e\n\n        \u003cbutton onclick=\"kcNext()\"\u003e\u0026#8594;\u003c\/button\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"kc-status\" id=\"kc-status\"\u003eLoading...\u003c\/div\u003e\n\n    \u003cdiv class=\"kc-grid\" id=\"kc-grid\"\u003e\u003c\/div\u003e\n\n    \u003cdiv class=\"kc-legend\"\u003e\n\n    \u003cdiv class=\"kc-notice\"\u003eBookings for 30+ nights only\u003c\/div\u003e\n\n  \u003c\/div\u003e`;\n\n\n\n  function pd(s){return new Date(+s.slice(0,4),+s.slice(4,6)-1,+s.slice(6,8));}\n\n  function isBooked(d){for(var r of bookedRanges){if(d\u003e=r.start\u0026\u0026d\u003cr.end)return true;}return false;}\n\n\n\n  function renderCal(){\n\n    document.getElementById(\"kc-monthlabel\").textContent=MN[cm]+\" \"+cy;\n\n    var g=document.getElementById(\"kc-grid\");\n\n    g.innerHTML=\"\";\n\n    DN.forEach(function(d){var e=document.createElement(\"div\");e.className=\"kc-dow\";e.textContent=d;g.appendChild(e);});\n\n    var first=new Date(cy,cm,1).getDay();\n\n    var total=new Date(cy,cm+1,0).getDate();\n\n    var today=new Date();today.setHours(0,0,0,0);\n\n    for(var i=0;i\u003cfirst;i++){var e=document.createElement(\"div\");e.className=\"kc-day\";g.appendChild(e);}\n\n    for(var d=1;d\u003c=total;d++){\n\n      var date=new Date(cy,cm,d);\n\n      var e=document.createElement(\"div\");\n\n      e.textContent=d;\n\n      if(date\u003ctoday){e.className=\"kc-day kc-past\";}\n\n      else if(isBooked(date)){e.className=\"kc-day kc-booked\";}\n\n      else{e.className=\"kc-day kc-avail\";}\n\n      if(date.getTime()===today.getTime())e.classList.add(\"kc-today\");\n\n      g.appendChild(e);\n\n    }\n\n  }\n\n\n\n  window.kcPrev=function(){cm--;if(cm\u003c0){cm=11;cy--;}renderCal();};\n\n  window.kcNext=function(){cm++;if(cm\u003e11){cm=0;cy++;}renderCal();};\n\n\n\n  fetch(WORKER+\"\/?url=\"+encodeURIComponent(ICAL_URL))\n\n    .then(function(r){return r.text();})\n\n    .then(function(text){\n\n      var lines=text.replace(\/\\r\\n\/g,\"\\n\").replace(\/\\r\/g,\"\\n\").split(\"\\n\");\n\n      var inEv=false,ds=null,de=null;\n\n      lines.forEach(function(line){\n\n        if(line===\"BEGIN:VEVENT\"){inEv=true;ds=null;de=null;}\n\n        else if(line===\"END:VEVENT\"){if(inEv\u0026\u0026ds\u0026\u0026de)bookedRanges.push({start:ds,end:de});inEv=false;}\n\n        else if(inEv){\n\n          var m=line.match(\/^DTSTART[^:]*:(\\d{8})\/);\n\n          var m2=line.match(\/^DTEND[^:]*:(\\d{8})\/);\n\n          if(m)ds=pd(m[1]);\n\n          if(m2)de=pd(m2[1]);\n\n        }\n\n      });\n\n      document.getElementById(\"kc-status\").textContent=\"Contact us for details\";\n\n      renderCal();\n\n    })\n\n    .catch(function(e){\n\n      document.getElementById(\"kc-status\").textContent=\"\";\n\n      renderCal();\n\n    });\n\n\n\n  renderCal();\n\n})();\n\n\u003c\/script\u003e\n\n","brand":"Kolette Home","offers":[{"title":"Default Title","offer_id":45009649074362,"sku":null,"price":0.0,"currency_code":"TWD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0605\/9504\/4538\/files\/Kolette_Home_living_room_cv139.jpg?v=1776486955"}],"url":"https:\/\/kolettehome.com\/collections\/songshan-district-taipei-apartments.oembed","provider":"Kolette Home","version":"1.0","type":"link"}