<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3899126097392080552</atom:id><lastBuildDate>Wed, 15 Jul 2026 09:56:57 +0000</lastBuildDate><title>Bitten by travelbug</title><description></description><link>https://bitten-by-travelbug.blogspot.com/</link><managingEditor>noreply@blogger.com (marwantoAVA)</managingEditor><generator>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3899126097392080552.post-6124266866039900789</guid><pubDate>Wed, 15 Jul 2026 09:56:57 +0000</pubDate><atom:updated>2026-07-15T02:56:57.898-07:00</atom:updated><title>Katalog Olshop Kekinian - Pilihan Produk Kece Harga Terjangkau</title><description>&lt;style&gt;.gallery-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;padding:20px 0}.gallery-item{display:flex;flex-direction:column;aspect-ratio:3 / 4;overflow:hidden;border-radius:8px;background-color:#ffffff;box-shadow:0 4px 12px rgba(0,0,0,0.05);text-decoration:none}.gallery-item img{width:100%;height:72%;object-fit:cover}.gallery-overlay{height:28%;background-color:#ffffff;color:#000000;display:flex;align-items:center;padding:8px 12px;box-sizing:border-box;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.gallery-title{font-size:14px;font-weight:500;line-height:1.35;color:#000000;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}@media (min-width:1024px){.gallery-grid{grid-template-columns:repeat(4,1fr)}.gallery-item{position:relative;aspect-ratio:1 / 1;display:block;background-color:#eaeaea}.gallery-item img{width:100%;height:100%;transition:transform 0.3s ease}.gallery-item:hover img{transform:scale(1.05)}.gallery-overlay{position:absolute;bottom:0;left:0;right:0;top:auto;height:auto;max-height:40%;background:rgba(255,255,255,0.95);transform:translateY(105%);transition:transform 0.3s cubic-bezier(0.25,0.8,0.25,1);padding:12px}.gallery-item:hover .gallery-overlay{transform:translateY(0)}.gallery-title{font-size:14px;-webkit-line-clamp:3}}.gallery-item.skeleton{background:linear-gradient(90deg,#eaeaea 25%,#f2f2f2 50%,#eaeaea 75%);background-size:200% 100%;animation:shimmer-animation 1.5s infinite linear;pointer-events:none}@keyframes shimmer-animation{0%{background-position:200% 0}100%{background-position:-200% 0}}.load-more-container{display:flex;justify-content:center;margin:40px 0}.btn-load-more{display:inline-flex;align-items:center;gap:8px;background-color:#000;color:#fff;border:none;padding:12px 24px;font-size:16px;font-weight:600;border-radius:25px;cursor:pointer;transition:background-color 0.2s ease,opacity 0.2s ease}.btn-load-more:hover{background-color:#fff;color:#000}.btn-load-more:disabled{background-color:#cccccc;cursor:not-allowed}.spinner{display:none;width:20px;height:20px;animation:rotate 2s linear infinite}.spinner .path{stroke:#ffffff;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.btn-load-more.loading .spinner{display:inline-block}&lt;/style&gt;

&lt;div id=&quot;gallery&quot; class=&quot;gallery-grid&quot;&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;div class=&quot;gallery-item skeleton&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;load-more-container&quot;&gt;&lt;button id=&quot;btnLoadMore&quot; class=&quot;btn-load-more&quot;&gt;&lt;svg class=&quot;spinner&quot; viewBox=&quot;0 0 50 50&quot;&gt;&lt;circle class=&quot;path&quot; cx=&quot;25&quot; cy=&quot;25&quot; r=&quot;20&quot; fill=&quot;none&quot; stroke-width=&quot;5&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;span&gt;Load More&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;

&lt;script&gt;const galleryEl=document.getElementById(&quot;gallery&quot;),btnLoadMore=document.getElementById(&quot;btnLoadMore&quot;);let apiPage=1;const fallbackImage=&quot;data:image/svg+xml;utf8,&lt;svg xmlns=&#39;http://www.w3.org/2000/svg&#39; width=&#39;300&#39; height=&#39;300&#39; viewBox=&#39;0 0 300 300&#39;&gt;&lt;rect width=&#39;300&#39; height=&#39;300&#39; fill=&#39;%23eaeaea&#39;/&gt;&lt;text x=&#39;50%&#39; y=&#39;50%&#39; dominant-baseline=&#39;middle&#39; text-anchor=&#39;middle&#39; font-family=&#39;sans-serif&#39; font-size=&#39;16&#39; fill=&#39;%23999999&#39;&gt;No Image&lt;/text&gt;&lt;/svg&gt;&quot;;function createItemElement(e,t,a){const n=document.createElement(&quot;a&quot;);n.className=&quot;gallery-item&quot;,n.href=t,n.target=&quot;_blank&quot;,n.rel=&quot;noopener noreferrer&quot;;const l=document.createElement(&quot;img&quot;);l.src=a||fallbackImage,l.alt=e,l.loading=&quot;lazy&quot;,l.onerror=function(){this.src=fallbackImage};const o=document.createElement(&quot;div&quot;);o.className=&quot;gallery-overlay&quot;;const r=document.createElement(&quot;span&quot;);return r.className=&quot;gallery-title&quot;,r.textContent=e,o.appendChild(r),n.appendChild(l),n.appendChild(o),n}function appendSkeletons(e){const t=document.createDocumentFragment(),a=[];for(let n=0;n&lt;e;n++){const e=document.createElement(&quot;div&quot;);e.className=&quot;gallery-item skeleton&quot;,t.appendChild(e),a.push(e)}return galleryEl.appendChild(t),a}async function fetchRSSData(){const e=[];try{const t=await fetch(&quot;https://shop.marwanto606.com/feed.xml&quot;),a=await t.text(),n=new DOMParser,l=n.parseFromString(a,&quot;text/xml&quot;).getElementsByTagName(&quot;item&quot;);for(let t of l){const a=t.getElementsByTagName(&quot;title&quot;)[0]?.textContent||&quot;&quot;,n=t.getElementsByTagName(&quot;link&quot;)[0]?.textContent||&quot;&quot;,l=t.getElementsByTagName(&quot;enclosure&quot;)[0],o=l?l.getAttribute(&quot;url&quot;):&quot;&quot;;e.push(createItemElement(a,n,o))}}catch(e){console.error(&quot;Gagal memuat RSS feed:&quot;,e)}return e}async function fetchAPIData(e){const t=[];let a=!0;try{const n=await fetch(`https://api-graphql.cariolshop.qzz.io/home?page=${e}`),l=await n.json(),o=l?.data?.landingPageLinkList?.linkList;o&amp;&amp;o.length&gt;0?o.forEach(e=&gt;{t.push(createItemElement(e.linkName,e.link,e.image))}):a=!1}catch(t){console.error(`Gagal memuat API page ${e}:`,t),a=!1}return{elements:t,hasMore:a}}function toggleLoadingState(e){e?(btnLoadMore.classList.add(&quot;loading&quot;),btnLoadMore.disabled=!0):(btnLoadMore.classList.remove(&quot;loading&quot;),btnLoadMore.disabled=!1)}window.addEventListener(&quot;DOMContentLoaded&quot;,async()=&gt;{const[e,t]=await Promise.all([fetchRSSData(),fetchAPIData(apiPage)]);galleryEl.innerHTML=&quot;&quot;,e.forEach(e=&gt;galleryEl.appendChild(e)),t.elements.forEach(e=&gt;galleryEl.appendChild(e)),t.hasMore||(btnLoadMore.disabled=!0,btnLoadMore.innerText=&quot;Semua Data Dimuat&quot;)}),btnLoadMore.addEventListener(&quot;click&quot;,async()=&gt;{apiPage+=1,toggleLoadingState(!0);const e=appendSkeletons(4),t=await fetchAPIData(apiPage);e.forEach(e=&gt;e.remove()),t.elements.forEach(e=&gt;galleryEl.appendChild(e)),t.hasMore||(btnLoadMore.disabled=!0,btnLoadMore.innerText=&quot;Semua Data Dimuat&quot;),toggleLoadingState(!1)});&lt;/script&gt;</description><link>https://bitten-by-travelbug.blogspot.com/2026/07/katalog-olshop-kekinian-pilihan-produk.html</link><author>noreply@blogger.com (marwantoAVA)</author></item></channel></rss>