<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:media="http://search.yahoo.com/mrss/"
	
	>

<channel>
	<title>Spencer Dwight &#124; Graphic Designer</title>
	<link>https://spencerdwight.net</link>
	<description>Spencer Dwight &#124; Graphic Designer</description>
	<pubDate>Mon, 13 Nov 2023 21:23:07 +0000</pubDate>
	<generator>https://spencerdwight.net</generator>
	<language>en</language>
	
		
	<item>
		<title>Home</title>
				
		<link>https://spencerdwight.net/Home</link>

		<pubDate>Mon, 13 Nov 2023 21:23:07 +0000</pubDate>

		<dc:creator>Spencer Dwight &#124; Graphic Designer</dc:creator>

		<guid isPermaLink="true">https://spencerdwight.net/Home</guid>

		<description>
.marquee { overflow: hidden; white-space: nowrap; will-change: transform; }
.marquee &#62; * { display: inline-block; }

.iframe-wrapper {
  display: inline-block;
  width: 408px;
  aspect-ratio: 408 / 320;
  margin-right: 8px;
  border-radius: 8px;
  overflow: hidden;
  background: #f5f5f5;
  border: 1px solid #dedede;
  vertical-align: top;
  cursor: pointer;
}

.iframe-wrapper iframe {
  width: 100%;
  height: 100%;
  border: none;
  border-radius: 8px;
  display: block;
}

.iframe-wrapper:first-child {
  margin-left: 5px;
}




  
&#60;img width="1448" height="1448" width_o="1448" height_o="1448" data-src="https://freight.cargo.site/t/original/i/12b4460ecbebfe1bef935330a8074594c144427d63a347682ed3790731acf102/S_logo_behance_darkmode.png" data-mid="240580927" border="0"  src="https://freight.cargo.site/w/1000/i/12b4460ecbebfe1bef935330a8074594c144427d63a347682ed3790731acf102/S_logo_behance_darkmode.png" /&#62;

_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`

 
  

  
    
      &#38;nbsp;&#38;nbsp; Spencer Dwight
      
&#38;nbsp; &#38;nbsp; Graphic Design / Fine Arts / Multimedia
    
  

  _.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`
  _.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`

  
    
      
︎
      
    
  

      
︎
      
    
  

  
    
      ︎
      
    
  

  
    
      ︎
      
    
  



  &#38;nbsp;
    
      
        Portfolio
      
    
  







  
    
      
      
      
      
      
      
      
      
      
      
      
    
  



	

_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`&#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; _.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`
_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`_.-~+*`&#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp;



︎︎︎

      Spencer Dwight &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp;* &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; Graphic Design / Fine Arts / Multimedia &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp;* &#38;nbsp; &#38;nbsp; © 2025 WhatStudio™, Portland, OR 97214 &#38;nbsp; &#38;nbsp; &#38;nbsp; * &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp;Website updated: November 2025
      
    
  



(function () {
  // ---------------- CONFIG ----------------
  const HOLD_MS = 3 * 60 * 1000; // 3 minutes before unloading
  const CLEANUP_INTERVAL = 60 * 1000; // check every 1 min
  const PRELOAD_BATCH = 2; // load 2 iframes at a time
  const IO_BATCH = 2; // load 2 iframes when observer triggers
  const ROOT_MARGIN = '300px 0px';
  const THRESHOLD = 0.1;

  // ---------------- SETUP ----------------
  const wrappers = Array.from(document.querySelectorAll('.iframe-wrapper[data-src]'));
  const loadedWrappers = new Set();

  function loadIframe(wrapper) {
    if (wrapper.querySelector('iframe')) return;

    const src = wrapper.dataset.src;
    if (!src) return;

    const iframe = document.createElement('iframe');
    iframe.src = src;
    iframe.loading = 'lazy';
    iframe.allowFullscreen = true;
    iframe.referrerPolicy = 'strict-origin-when-cross-origin';
    iframe.title = wrapper.getAttribute('title') &#124;&#124; '';
    wrapper.appendChild(iframe);

    wrapper.dataset.loadedAt = Date.now();
    loadedWrappers.add(wrapper);
    wrapper.style.cursor = 'default';
  }

  function unloadIframe(wrapper) {
    const iframe = wrapper.querySelector('iframe');
    if (!iframe) return;
    iframe.remove();
    wrapper.dataset.loadedAt = '';
    loadedWrappers.delete(wrapper);
    wrapper.style.cursor = 'pointer';
  }

  // Load visible iframes in batch
  function restoreVisible(batch = PRELOAD_BATCH) {
    let loadedCount = 0;
    for (const wrapper of wrappers.filter(w =&#62; !loadedWrappers.has(w))) {
  const rect = wrapper.getBoundingClientRect();
  if (rect.bottom &#62; 0 &#38;&#38; rect.top &#60; window.innerHeight) {
    loadIframe(wrapper);
        loadedCount++;
        if (loadedCount &#62;= batch) break;
      }
    }
  }

  // ---------------- INITIAL PRELOAD ----------------
  restoreVisible(PRELOAD_BATCH);

  // ---------------- INTERSECTION OBSERVER ----------------
  const io = new IntersectionObserver(entries =&#62; {
    entries.forEach(entry =&#62; {
      if (entry.isIntersecting &#124;&#124; entry.intersectionRatio &#62; THRESHOLD) {
        restoreVisible(IO_BATCH); // preload ahead for smooth scroll
      }
    });
  }, {
    rootMargin: ROOT_MARGIN,
    threshold: THRESHOLD
  });

  wrappers.forEach(wrapper =&#62; {
    io.observe(wrapper);
    wrapper.addEventListener('click', () =&#62; loadIframe(wrapper));
  });

  // ---------------- CLEANUP ----------------
  function cleanupOld() {
    const now = Date.now();
    loadedWrappers.forEach(wrapper =&#62; {
      const loadedAt = parseInt(wrapper.dataset.loadedAt &#124;&#124; 0, 10);
      if (now - loadedAt &#62; HOLD_MS) unloadIframe(wrapper);
    });
  }

  setInterval(cleanupOld, CLEANUP_INTERVAL);

  // ---------------- EVENT LISTENERS ----------------
  document.addEventListener('DOMContentLoaded', () =&#62; restoreVisible(PRELOAD_BATCH));
  document.addEventListener('visibilitychange', () =&#62; {
    if (!document.hidden) restoreVisible(PRELOAD_BATCH);
  });
})();
</description>
		
	</item>
		
	</channel>
</rss>