PageSourceSearch

https://www.goodshuffle.com/g/linen-rentals/search

html goodshuffle.com collected 2026-09-25 20:24:33 UTC 8,562 bytes, 143 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
3<script>(function(w,i,g){w[g]=w[g]||[];if(typeof w[g].push=='function')w[g].push(i)})
4(window,'AW-980483674','google_tags_first_party');</script>
4<script async src="/w7be/"></script>
4
5			
5<script>
6				window.dataLayer = window.dataLayer || [];
7				function gtag(){dataLayer.push(arguments);}
8				gtag('js', new Date());
9				gtag('set', 'developer_id.dYzg1YT', true);
10				gtag('config', 'AW-980483674');
11			</script>
11
12			
13							  
13<script type="text/javascript">
14							  	if (!window._fs_host) {
15										Object.defineProperties(window, {
16											_fs_host: {
17												get: function() {
18													return 'insights.goodshuffle.com';
19												},
20												set: function(val) {
21													// console.log('thank you, but no');
22												}
23											}
24										});
25							  	}
26
27									if (!window._fs_script) {
28										Object.defineProperties(window, {
29											_fs_script: {
30												get: function() {
31													return 'insights.goodshuffle.com/s/fs.js';
32												},
33												set: function(val) {
34													// console.log('thank you, but no');
35												}
36											}
37										});
38									}
39
40									if (!window._fs_app_host) {
41										Object.defineProperties(window, {
42											_fs_app_host: {
43												get: function() {
44													return 'app.fullstory.com';
45												},
46												set: function(val) {
47													// console.log('thank you, but no');
48												}
49											}
50										});
51									}
52
53										// console.log('Altered FS Path');
54							  </script>
54
55    <meta charset="UTF-8" />
56    <link rel="icon" type="image/webp" href="https://ai-to-wp.tempurl.host/wp-content/uploads/2025/10/goodshuffle_fav-150x150.webp" />
57    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
58    <title>Goodshuffle Marketplace</title>
59    <meta name="description" content="GoodShuffle Marketplace - Find and rent equipment" />
60    <!--
61      GSPRO-27642 — Boot skeleton for client-view / portal-detail pages.
62      Inlined here (not in a JS bundle) so it paints the instant the HTML document
63      arrives, BEFORE index.js / React / the data fetch. React clears #root on mount
64      and renders its own PortalDetailLoading skeleton, so the swap is seamless.
65      Neutral hardcoded colors are used deliberately: the design-system CSS (--color-*
66      tokens) and the vendor theme aren't loaded yet at first paint.
67    -->
68    <style>
69      #portal-boot-skeleton { min-height: 100vh; background: #ffffff; }
70      #portal-boot-skeleton .pbs-bar {
71        position: fixed; top: 0; left: 0; right: 0; height: 2px;
72        background: #2563eb; animation: pbs-pulse 1.2s ease-in-out infinite;
73      }
74      #portal-boot-skeleton .pbs-navbar {
75        height: 56px; border-bottom: 1px solid #e5e7eb;
76        display: flex; align-items: center; justify-content: space-between;
77        padding: 0 16px;
78      }
79      #portal-boot-skeleton .pbs-wrap { max-width: 768px; margin: 0 auto; padding: 0 16px; }
80      #portal-boot-skeleton .pbs-header { border-bottom: 1px solid #e5e7eb; padding: 24px 0; }
81      #portal-boot-skeleton .pbs-main { padding: 32px 16px; max-width: 768px; margin: 0 auto; }
82      #portal-boot-skeleton .blk {
83        background: #e5e7eb; border-radius: 8px;
84        animation: pbs-pulse 1.5s ease-in-out infinite;
85      }
86      #portal-boot-skeleton .blk + .blk { margin-top: 16px; }
87      #portal-boot-skeleton .h1 { height: 24px; width: 66%; }
88      #portal-boot-skeleton .h2 { height: 16px; width: 33%; margin-top: 12px; }
89      #portal-boot-skeleton .nav-l { height: 20px; width: 120px; }
90      #portal-boot-skeleton .nav-r { height: 28px; width: 28px; border-radius: 9999px; }
91      #portal-boot-skeleton .card-sm { height: 96px; }
92      #portal-boot-skeleton .card-lg { height: 160px; }
93      @keyframes pbs-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
94      @media (prefers-reduced-motion: reduce) {
95        #portal-boot-skeleton .pbs-bar,
96        #portal-boot-skeleton .blk { animation: none; }
97      }
98      @media (prefers-color-scheme: dark) {
99        #portal-boot-skeleton { background: #0b0f14; }
100        #portal-boot-skeleton .pbs-navbar,
101        #portal-boot-skeleton .pbs-header { border-bottom-color: #1f2937; }
102        #portal-boot-skeleton .blk { background: #1f2937; }
103      }
104    </style>
105    
105<script type="module" crossorigin src="/react-ui/assets/index-BeVg8Waw.js"></script>
105
106    <link rel="stylesheet" crossorigin href="/react-ui/assets/index-CTpaKttL.css">
107  
107<script>!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){if(window.analytics.initialized)return window.analytics[e].apply(window.analytics,arguments);var i=Array.prototype.slice.call(arguments);i.unshift(e);analytics.push(i);return analytics}};for(var i=0;i<analytics.methods.length;i++){var key=analytics.methods[i];analytics[key]=analytics.factory(key)}analytics.load=function(key,i){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://www.goodshuffle.com/app/seg/ajs/40ee864c-28c0-422c-86c3-6c253ad26d4a";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=i};analytics._writeKey="REDACTED";analytics._cdn = "https://www.goodshuffle.com/app/seg";analytics.SNIPPET_VERSION="4.16.1";
108analytics.load("REDACTED");
109
110}}();</script>
110</head>
111  <body>
112    <div id="root"></div>
113    
113<script>
114      /* Inject the boot skeleton synchronously (before the deferred module script
115         below) — but only for the heavy client-view / portal-detail routes, so other
116         pages (home, search, project list) don't flash a detail-shaped placeholder.
117         React replaces #root's contents on mount. */
118      (function () {
119        var p = location.pathname;
120        var isDetail =
121          /^\/c\/[^/]+/.test(p) ||
122          /^\/portal\/projects\/[^/]+/.test(p) ||
123          /^\/preview\/[^/]+/.test(p) ||
124          /^\/portal\/admin\/skinwalk\/[^/]+/.test(p);
125        if (!isDetail) { return; }
126        var root = document.getElementById("root");
127        if (!root) { return; }
128        root.innerHTML =
129          '<div id="portal-boot-skeleton" data-testid="portal-loading-skeleton" role="status" aria-label="Loading project">' +
130            '<div class="pbs-bar"></div>' +
131            '<div class="pbs-navbar"><div class="blk nav-l"></div><div class="blk nav-r"></div></div>' +
132            '<div class="pbs-header"><div class="pbs-wrap"><div class="blk h1"></div><div class="blk h2"></div></div></div>' +
133            '<div class="pbs-main">' +
134              '<div class="blk card-sm"></div>' +
135              '<div class="blk card-lg"></div>' +
136              '<div class="blk card-lg"></div>' +
137            '</div>' +
138          '</div>';
139      })();
140    </script>
140
141  
141<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"75e4812d24bf455fbd80bc011f2a2061","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 141
141
142<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a40cc0c60b16fe89',t:'MTc5MDM2Nzg3Mg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
142</body>
143</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.