PageSourceSearch

https://storyrenovations.com/

html storyrenovations.com collected 2026-09-29 10:49:28 UTC 186,367 bytes, 3,147 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Tue Sep 08 2026 15:16:13 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="story-renovations-staging.webflow.io" data-wf-page="683dd4e18841ecef777ffee4" data-wf-site="65511c14a69010c6ced966df" data-wf-intellimize-customer-id="117787524" lang="en"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>Story | Custom Homes and Renovations in Denver, Arizona and Dallas</title><meta content="Story, a leading design build contractor in Denver, Arizona and Dallas, specializes in custom homes, luxury remodeling, interior design and furnishing. Get a free consultation." name="description"/><meta content="Story | Custom Homes and Renovations in Denver, Arizona and Dallas" property="og:title"/><meta content="Story, a leading design build contractor in Denver, Arizona and Dallas, specializes in custom homes, luxury remodeling, interior design and furnishing. Get a free consultation." property="og:description"/><meta content="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d93509634124c8c7030d5_open-graph.png" property="og:image"/><meta content="Story | Custom Homes and Renovations in Denver, Arizona and Dallas" name="twitter:title"/><meta content="Story, a leading design build contractor in Denver, Arizona and Dallas, specializes in custom homes, luxury remodeling, interior design and furnishing. Get a free consultation." name="twitter:description"/><meta content="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d93509634124c8c7030d5_open-graph.png" name="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/css/story-renovations-staging.webflow.shared.4224b8282.min.css" rel="stylesheet" type="text/css" integrity="sha384-QiS4KCbUHVdZ9QOS05IjPb9O3Tz22WcMfrnixT15HJFh/uqxhAJRVos1ZM+w2rtz" crossorigin="anonymous"/><link href="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/css/story-renovations-staging.webflow.683dd4e18841ecef777ffee4.ecea95fce.opt.min.css" rel="stylesheet" type="text/css" integrity="sha384-7OqV/OhitES6fZD8n3dtXzUPc2yIEk+c+wiJ9IU7W2R3LR3idL9DQadW9lJnwTKW" crossorigin="anonymous"/>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677dcaa2f72c547f5d7e6a3d_675c9e9133257bb4c6821cf4_Favicon-32.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677dcaa8c278782b3a64dd87_675c9e94a9f03434dd431dd3_Favicon-256.png" rel="apple-touch-icon"/><link href="https://www.storyrenovations.com" rel="canonical"/><style>.anti-flicker, .anti-flicker * {visibility: hidden !important; opacity: 0 !important;}</style><style>[data-wf-hidden-variation], [data-wf-hidden-variation] * {
2        display: none !important;
3      }</style>
3<script>!function(w,d,s,u){if(w.oaiq)return;var q=function(){q.q.push(arguments)};q.q=[];w.oaiq=q;var j=d.createElement(s);j.async=1;j.src=u;var f=d.getElementsByTagName(s)[0];f.parentNode.insertBefore(j,f)}(window,document,"script","https://bzrcdn.openai.com/sdk/oaiq.min.js");oaiq("init",{pixelId:"Ptpms9oDvqnGCKjUZN93SQ",debug:true});</script>
3
4
5<!-- Critical preloads -->
6<link rel="preload" href="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/css/story-renovations-staging.webflow.shared.c247b3eb5.min.css" as="style">
7<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js" as="script">
8
9<!-- Critical CSS (inlined for faster rendering) -->
10<style>
11  * {
12    -webkit-font-smoothing: antialiased;
13    -moz-osx-font-smoothing: grayscale;
14    -o-font-smoothing: antialiased;
15    -webkit-appearance: none;
16  }
17  
18  .animate-on-scroll {
19    opacity: 0;
20    transform: translateY(20px);
21    transition: opacity 0.6s ease-out, transform 0.6s ease-out;
22  }
23  
24  .animate-on-scroll.fade-up {
25    opacity: 1;
26    transform: translateY(0);
27  }
28  
29  .cta37_link-image-wrapper {
30    position: absolute;
31    top: 0;
32    left: 0;
33    transform: translate(0, 0) scale(0.95);
34    opacity: 0;
35    pointer-events: none;
36    transition: opacity 0.3s ease, transform 0.3s ease;
37  }
38  
39  .cta37_link-text {
40    transition: font-family 0.4s ease, font-style 0.4s ease;
41  }
42  
43  .form_input.is-text-area {
44    resize: none;
45  }
46  
47  .visually-hidden {
48    position: absolute;
49    width: 1px;
50    height: 1px;
51    padding: 0;
52    margin: -1px;
53    overflow: hidden;
54    clip: rect(0, 0, 0, 0);
55    white-space: nowrap;
56    border: 0;
57  }
58</style>
59
60<style>
61.instagram-embed-container {
62  width: 100%;
63  max-width: 540px;
64  margin: 0 auto;
65  min-height: 700px;
66  background: #fafafa;
67  border-radius: 8px;
68  overflow: hidden;
69}
70
71.instagram-embed-container iframe {
72  display: block;
73  margin: 0 auto;
74}
75</style>
76
77<!-- Google Tag Manager -->
78<script>
vendor: 328 bytes, lines 78-83
78
79(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
80new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
81j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
82'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
83})(window,document,'script','dataLayer','
83GTM-W3349D68
vendor: 4 bytes, line 83
83');
84</script>
84
85
86
87
88<meta name="p:domain_verify" content="66eb4f5f13cab5e1aedd015a85e03d4a"/>
89
90
91<script>
92// Only apply to content subdomain
93if (window.location.hostname === 'content.storyrenovations.com') {
94  document.write('<meta name="robots" content="noindex, nofollow, noarchive, nosnippet" />');
95  document.write('<link rel="canonical" href="https://www.storyrenovations.com' + window.location.pathname + '" />');
96}
97</script>
97
98
99<!-- Checkbox fix -->
100<script>
101document.addEventListener('DOMContentLoaded', function() {
102  const checkboxes = document.querySelectorAll('.checkbox-field input[type="checkbox"]');
103  
104  checkboxes.forEach(function(checkbox) {
105    checkbox.addEventListener('change', function() {
106      const label = this.closest('.checkbox-field');
107      if (this.checked) {
108        label.style.backgroundColor = '#CAD6E8';
109      } else {
110        label.style.backgroundColor = '';
111      }
112    });
113  });
114});
115</script>
115<style>
116.vimeo-lightbox__player {
117  transition: all 0.3s cubic-bezier(0.625, 0.05, 0, 1);
118  opacity: 0;
119  visibility: hidden;
120  transform: scale(0.9) rotate(0.001deg) translateX(0);
121}
122
123.vimeo-lightbox[data-vimeo-activated="true"] .vimeo-lightbox__player {
124  opacity: 1;
125  visibility: visible;
126  transform: scale(1) rotate(0.001deg) translateX(0);
127}
128
129/* Dark BG */
130.vimeo-lightbox__bg {
131  transition: all 0.3s cubic-bezier(0.625, 0.05, 0, 1);
132  opacity: 0;
133  visibility: hidden;
134}
135
136.vimeo-lightbox[data-vimeo-activated="loading"] .vimeo-lightbox__bg,
137.vimeo-lightbox[data-vimeo-activated="true"] .vimeo-lightbox__bg{
138  opacity: 1;
139  visibility: visible;
140}
141
142/* Close Button */
143.vimeo-lightbox__close {
144  transition: all 0.5s cubic-bezier(0.625, 0.05, 0, 1);
145  opacity: 0;
146  visibility: hidden;
147}
148
149.vimeo-lightbox[data-vimeo-activated="true"] .vimeo-lightbox__close {
150  opacity: 1;
151  visibility: visible;
152}
153
154/* Cover */
155.vimeo-lightbox[data-vimeo-update-size="cover"] .vimeo-lightbox__calc-wrap {
156  height: 100%;
157}
158
159.vimeo-lightbox[data-vimeo-update-size="cover"] [data-vimeo-lightbox-player] {
160  width: 100%;
161  min-width: 100%;
162  max-width: 100%;
163  height: 100%;
164  min-height: 100%;
165  max-height: 100%;
166}
167
168/* Placeholder */
169.vimeo-lightbox[data-vimeo-loaded="true"] .vimeo-lightbox__placeholder {
170  opacity: 0;
171}
172
173/* Dark (Overlay) */
174.vimeo-lightbox[data-vimeo-playing="false"] .vimeo-lightbox__dark {
175  opacity: 0.33;
176}
177
178.vimeo-lightbox[data-vimeo-activated="false"][data-vimeo-playing="false"] .vimeo-lightbox__dark {
179  opacity: 0;
180}
181
182.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-loaded="true"] .vimeo-lightbox__dark {
183  opacity: 0;
184}
185
186@media (hover: hover) and (pointer: fine) {
187  .vimeo-lightbox[data-vimeo-hover="true"]:hover .vimeo-lightbox__dark {
188    opacity: 0.33 !important;
189  }
190}
191
192/* Pause */
193.vimeo-lightbox .vimeo-lightbox__pause {
194  display: none;
195}
196
197.vimeo-lightbox[data-vimeo-playing="true"] .vimeo-lightbox__pause {
198  display: flex;
199}
200
201.vimeo-lightbox .vimeo-lightbox__pause .vimeo-lightbox__btn {
202  opacity: 0;
203}
204
205.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="false"] .vimeo-lightbox__pause .vimeo-lightbox__btn,
206.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-hover="true"]:hover .vimeo-lightbox__pause .vimeo-lightbox__btn {
207  opacity: 1;
208}
209
210@media (hover: none) and (pointer: coarse) {
211  .vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="true"] .vimeo-lightbox__pause .vimeo-lightbox__btn {
212    opacity: 0 !important;
213  }
214}
215
216/* Play */
217.vimeo-lightbox[data-vimeo-playing="true"] .vimeo-lightbox__play {
218  opacity: 0;
219}
220
221/* Loading */
222.vimeo-lightbox .vimeo-lightbox__loading {
223  opacity: 0;
224}
225
226.vimeo-lightbox[data-vimeo-playing="true"] .vimeo-lightbox__loading {
227  opacity: 1;
228}
229
230.vimeo-lightbox[data-vimeo-playing="true"][data-vimeo-loaded="true"] .vimeo-lightbox__loading {
231  opacity: 0;
232}
233
234/* Interface */
235.vimeo-lightbox .vimeo-lightbox__interface {
236  opacity: 0;
237}
238
239.vimeo-lightbox[data-vimeo-activated="false"][data-vimeo-playing="false"] .vimeo-lightbox__interface {
240  opacity: 1;
241}
242
243.vimeo-lightbox .vimeo-lightbox__interface * {
244  pointer-events: all; /* Make children of div clickable by user */
245}
246
247.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="false"] .vimeo-lightbox__interface,
248.vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-hover="true"]:hover .vimeo-lightbox__interface {
249  opacity: 1;
250}
251
252@media (hover: none) and (pointer: coarse) {
253  .vimeo-lightbox[data-vimeo-activated="true"][data-vimeo-playing="true"] .vimeo-lightbox__interface {
254    opacity: 0 !important;
255  }
256}
257
258/* Interface - Variables */
259.vimeo-lightbox {
260  --timeline-rounded-corners: 1.5em;
261  --timeline-dot-height: 0.75em;
262  --timeline-dot-color: #5c8aae;
263  --progress-bg: rgba(239, 238, 236, 0.2);
264  --progress-fill-bg: #5c8aae;
265  --progress-height: 0.2em;
266}
267
268/* Interface - Timeline */
269.vimeo-lightbox progress::-webkit-progress-bar {
270  border-radius: var(--timeline-rounded-corners);
271  background-color: var(--progress-bg);
272  box-shadow: 0;
273}
274
275.vimeo-lightbox progress::-webkit-progress-value {
276  background: var(--progress-fill-bg);
277}
278
279.vimeo-lightbox progress::-moz-progress-bar{
280  border-radius: var(--timeline-rounded-corners);
281  background: var(--progress-fill-bg);
282  box-shadow: 0;
283}
284
285.vimeo-lightbox progress::-ms-fill {
286  border-radius: var(--timeline-rounded-corners);
287}
288
289/* Interface - Range */
290.vimeo-lightbox [type="range"]::-webkit-slider-thumb {
291  -webkit-appearance: none;
292}
293 
294.vimeo-lightbox [type="range"]:focus {
295  outline: none;
296}
297 
298.vimeo-lightbox [type="range"]::-ms-track {
299  width: 100%;
300  cursor: pointer;
301  background-color: transparent;
302  border-color: transparent;
303  color: transparent;
304}
305
306.vimeo-lightbox [type="range"]::-webkit-slider-runnable-track{
307  width: 100%;
308  height: var(--progress-height);
309  cursor: pointer;
310  background-color: var(--progress-bg);
311  border-radius: var(--timeline-rounded-corners);
312  background-color: transparent;
313  border-color: transparent;
314  color: transparent;
315}
316
317.vimeo-lightbox [type="range"]::-webkit-slider-thumb {
318  box-shadow: 0;
319  height: var(--timeline-dot-height);
320  width: var(--timeline-dot-height);
321  border-radius: var(--timeline-rounded-corners);
322  background-color: var(--timeline-dot-color);
323  cursor: pointer;
324  -webkit-appearance: none;
325  margin-top: calc((var(--progress-height) / 2) - (var(--timeline-dot-height) / 2));
326}
327
328.vimeo-lightbox [type="range"]::-webkit-slider-runnable-track,
329.vimeo-lightbox [type="range"]:focus::-webkit-slider-runnable-track {
330  background-color: transparent;
331  border-color: transparent;
332  color: transparent;
333}
334
335.vimeo-lightbox [type="range"]::-moz-range-track {
336  width: 100%;
337  height: var(--progress-height);
338  cursor: pointer;
339  background: var(--progress-bg);
340  border-radius: 0;
341  border: 0;
342  border-radius: var(--timeline-rounded-corners);
343  overflow: hidden;
344  opacity: 1 !important;
345}
346
347.vimeo-lightbox [type="range"]::-moz-range-thumb {
348  box-shadow: 0;
349  border: 0;
350  height: var(--timeline-dot-height);
351  width: var(--timeline-dot-height);
352  border-radius: var(--timeline-rounded-corners);
353  background: var(--timeline-dot-color);
354  cursor: pointer;
355  box-shadow: 0;
356}
357
358/* Interface - Mute */
359.vimeo-lightbox .vimeo-lightbox__mute svg:nth-child(2),
360.vimeo-lightbox[data-vimeo-muted="true"] .vimeo-lightbox__mute svg:nth-child(1) {
361  display: none;
362}
363
364.vimeo-lightbox .vimeo-lightbox__mute svg:nth-child(1),
365.vimeo-lightbox[data-vimeo-muted="true"] .vimeo-lightbox__mute svg:nth-child(2) {
366  display: block;
367}
368
369/* Interface - Fullscreen */
370.vimeo-lightbox .vimeo-lightbox__fullscreen svg:nth-child(2),
371.vimeo-lightbox[data-vimeo-fullscreen="true"] .vimeo-lightbox__fullscreen svg:nth-child(1) {
372  display: none;
373}
374
375.vimeo-lightbox .vimeo-lightbox__fullscreen svg:nth-child(1),
376.vimeo-lightbox[data-vimeo-fullscreen="true"] .vimeo-lightbox__fullscreen svg:nth-child(2) {
377  display: block;
378}
379</style><style>
380       .w-webflow-badge, 
381       .webflow-badge, 
382       .w-webflow-badge * { 
383          display: none!important; 
384          visibility: hidden!important; 
385          opacity: 0!important; 
386          pointer-events: none!important;
387          width: 0!important;
388          height: 0!important;
389        }
390      </style></head><body><div class="page-wrapper"><div class="global-styles w-embed"><style>
391
392/* Ensure all elements inherit the color from its parent */
393body * {
394    color: inherit;
395}
396
397a,
398.w-input,
399.w-select,
400.w-tab-link,
401.w-nav-link,
402.w-slider-arrow-left,
403.w-slider-arrow-right,
404.w-dropdown-btn,
405.w-dropdown-toggle,
406.w-dropdown-link {
407  color: inherit;
408  text-decoration: inherit;
409  font-size: inherit;
410}
411
412/* Focus state style for keyboard navigation for the focusable elements */
413*[tabindex]:focus-visible,
414  input[type="file"]:focus-visible {
415   outline: 0.125rem solid #4d65ff;
416   outline-offset: 0.125rem;
417}
418
419/* Get rid of top margin on first element in any rich text element */
420.w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child {
421  margin-top: 0 !important;
422}
423
424/* Get rid of bottom margin on last element in any rich text element */
425.w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child {
426	margin-bottom: 0 !important;
427}
428
429/* Prevent all click and hover interaction with an element */
430.pointer-events-off {
431	pointer-events: none;
432}
433
434/* Enables all click and hover interaction with an element */
435.pointer-events-on {
436  pointer-events: auto;
437}
438
439/* Create a class of .div-square which maintains a 1:1 dimension of a div */
440.div-square::after {
441	content: "";
442	display: block;
443	padding-bottom: 100%;
444}
445
446/* Make sure containers never lose their center alignment */
447.container-medium,.container-small, .container-large {
448	margin-right: auto !important;
449  margin-left: auto !important;
450}
451
452
453/* Apply "..." after 3 lines of text */
454.text-style-3lines {
455	display: -webkit-box;
456	overflow: hidden;
457	-webkit-line-clamp: 3;
458	-webkit-box-orient: vertical;
459}
460
461/* Apply "..." after 2 lines of text */
462.text-style-2lines {
463	display: -webkit-box;
464	overflow: hidden;
465	-webkit-line-clamp: 2;
466	-webkit-box-orient: vertical;
467}
468
469/* Adds inline flex display */
470.display-inlineflex {
471  display: inline-flex;
472}
473
474/* These classes are never overwritten */
475.hide {
476  display: none !important;
477}
478
479@media screen and (max-width: 991px) {
480    .hide, .hide-tablet {
481        display: none !important;
482    }
483}
484  @media screen and (max-width: 767px) {
485    .hide-mobile-landscape{
486      display: none !important;
487    }
488}
489  @media screen and (max-width: 479px) {
490    .hide-mobile{
491      display: none !important;
492    }
493}
494 
495.margin-0 {
496  margin: 0rem !important;
497}
498  
499.padding-0 {
500  padding: 0rem !important;
501}
502
503.spacing-clean {
504padding: 0rem !important;
505margin: 0rem !important;
506}
507
508.margin-top {
509  margin-right: 0rem !important;
510  margin-bottom: 0rem !important;
511  margin-left: 0rem !important;
512}
513
514.padding-top {
515  padding-right: 0rem !important;
516  padding-bottom: 0rem !important;
517  padding-left: 0rem !important;
518}
519  
520.margin-right {
521  margin-top: 0rem !important;
522  margin-bottom: 0rem !important;
523  margin-left: 0rem !important;
524}
525
526.padding-right {
527  padding-top: 0rem !important;
528  padding-bottom: 0rem !important;
529  padding-left: 0rem !important;
530}
531
532.margin-bottom {
533  margin-top: 0rem !important;
534  margin-right: 0rem !important;
535  margin-left: 0rem !important;
536}
537
538.padding-bottom {
539  padding-top: 0rem !important;
540  padding-right: 0rem !important;
541  padding-left: 0rem !important;
542}
543
544.margin-left {
545  margin-top: 0rem !important;
546  margin-right: 0rem !important;
547  margin-bottom: 0rem !important;
548}
549  
550.padding-left {
551  padding-top: 0rem !important;
552  padding-right: 0rem !important;
553  padding-bottom: 0rem !important;
554}
555  
556.margin-horizontal {
557  margin-top: 0rem !important;
558  margin-bottom: 0rem !important;
559}
560
561.padding-horizontal {
562  padding-top: 0rem !important;
563  padding-bottom: 0rem !important;
564}
565
566.margin-vertical {
567  margin-right: 0rem !important;
568  margin-left: 0rem !important;
569}
570  
571.padding-vertical {
572  padding-right: 0rem !important;
573  padding-left: 0rem !important;
574}
575
576/* Apply "..." at 100% width */
577.truncate-width { 
578		width: 100%; 
579    white-space: nowrap; 
580    overflow: hidden; 
581    text-overflow: ellipsis; 
582}
583/* Removes native scrollbar */
584.no-scrollbar {
585    -ms-overflow-style: none;
586    overflow: -moz-scrollbars-none; 
587}
588
589.no-scrollbar::-webkit-scrollbar {
590    display: none;
591}
592
593</style>
594
595<!-- Fluid Responsive -->
596<style>
597html { font-size: 16px;}
598@media (min-width: 240px) {
599   html {font-size: calc(8px + 8 * ((100vw - 240px) / 239));}
600}
601@media (min-width: 768px) {
602   html {font-size: calc(12px + 4 * ((100vw - 768px) / 223));}
603}
604@media (min-width: 992px) {
605   html {font-size: calc(11.71px + 4.29 * ((100vw - 992px) / 448));}
606}
607@media (min-width: 1440px) {
608   html {font-size: 16px;}
609}
610
611.container-large {
612   max-width: 120rem;
613}
614
615.animate-h1 {
616  text-wrap: balance;
617  white-space: normal;
618  opacity: 0;
619}
620
621.animate-h1 .word {
622  display: inline;
623  white-space: normal;
624}
625</style></div><div data-animation="default" class="navbar2_component w-nav" data-easing2="ease" fs-scrolldisable-element="smart-nav" data-easing="ease" data-collapse="medium" data-w-id="b076c0b1-aeb6-4735-66cc-6bdb22ae1522" role="banner" data-duration="400"><div class="navbar2_container"><a href="/" id="w-node-b076c0b1-aeb6-4735-66cc-6bdb22ae1524-22ae1522" aria-current="page" class="navbar2_logo-link w-nav-brand w--current"><div class="w-embed"><svg xmlns="http://www.w3.org/2000/svg" style="display: block;" width="100%" height="100%" viewBox="0 0 139 40" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
626  <path d="M55.7761 11.649H45.7921C44.8042 11.649 44.0281 12.456 44.0281 13.4034C44.0281 13.9297 44.2045 14.3508 44.4867 14.5964C45.2629 15.3332 46.9915 15.228 48.3674 15.1578C49.0377 15.1578 49.6375 15.0876 50.1667 15.1578C55.141 15.2981 57.3989 19.0174 57.3989 22.456C57.3989 25.8946 55.141 29.6139 50.1667 29.7543H38.4893V24.2104H50.1314C51.1192 24.2104 51.8954 23.4034 51.8954 22.456C51.8954 21.5087 51.0839 20.7016 50.1314 20.7016C49.1789 20.7016 49.2141 20.7016 48.6849 20.7016C46.039 20.7367 42.758 20.8069 40.8177 18.7367C38.5951 16.8069 37.8895 13.649 39.0537 10.7367C40.1827 7.89463 42.758 6.07007 45.6157 6.07007H55.7761V11.6139V11.649Z" fill="currentColor"/>
627  <path d="M84.952 29.9999C78.3195 29.9999 72.957 24.5613 72.957 17.8596C72.957 11.1578 78.3195 5.71924 84.952 5.71924C91.5844 5.71924 96.9469 11.1578 96.9469 17.8596C96.9469 24.5613 91.5844 29.9999 84.952 29.9999ZM91.3022 17.9298C91.3022 14.3859 88.4446 11.5087 84.952 11.5087C81.4593 11.5087 78.6017 14.3859 78.6017 17.9298C78.6017 21.4736 81.4593 24.3508 84.952 24.3508C88.4446 24.3508 91.3022 21.4736 91.3022 17.9298Z" fill="currentColor"/>
628  <path d="M124.465 29.158L121.113 37.9299H127.181L138.682 5.92993H132.861L127.463 22.0352L121.536 5.92993H115.574L124.5 29.158H124.465Z" fill="currentColor"/>
629  <path d="M71.37 11.7192V6.14026H65.9017V0.70166H60.6098V6.14026H58.2461V11.7192H60.6098V24.5262C60.6098 27.3683 62.8324 29.649 65.5842 29.649H71.37V24.0701H65.9017V11.7192H71.37Z" fill="currentColor"/>
630  <path d="M104.673 8.66657V5.92973H99.3105V29.7543H104.673V17.5789C104.673 14.3508 107.107 11.5789 110.353 11.3332C111.059 11.2982 111.764 11.3332 112.505 11.5438L114.022 5.92973C110.741 5.05254 106.719 6.31569 104.708 8.70166L104.673 8.66657Z" fill="currentColor"/>
631  <path d="M15.0289 23.5789L8.71396 29.8596H21.3792L15.0642 23.5789H15.0289ZM16.0168 0.982456L15.0289 0L0 14.807V22.9123L19.0155 4L16.0168 1.01754V0.982456ZM17.0751 21.8246L25.1541 29.8596H30.0226V26.5614L21.1675 17.7544L17.0751 21.8246ZM20.8147 6L0 26.7017V29.8596H4.97437L20.9558 13.9649L30.0579 23.0175V14.9123L20.9911 5.89474L20.85 6.03509L20.8147 6Z" fill="currentColor"/>
632</svg></div></a><nav role="navigation" id="w-node-b076c0b1-aeb6-4735-66cc-6bdb22ae1526-22ae1522" class="navbar2_menu is-page-height-tablet w-nav-menu"><a href="/process" class="navbar2_link light w-nav-link">How It Works</a><link rel="prefetch" href="/process"/><div data-delay="200" data-hover="true" data-w-id="b7d33e45-8073-b4e6-655d-4884aea8b146" class="dropdown-4 w-dropdown"><div class="navbar3_dropdown-toggle w-dropdown-toggle"><div class="text-block-36">Services</div><div class="dropdown-chevron w-embed"><svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
633<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
634</svg></div></div><nav class="navbar3_dropdown-list w-dropdown-list"><a href="/services" class="drop-nav light alt w-dropdown-link">All Services</a><a href="/landing/residential-architecture" class="drop-nav light alt w-dropdown-link">Architecture</a><a href="/services/interior-design" class="drop-nav light alt w-dropdown-link">Interior Design</a><a href="/services/renovations-and-additions" class="drop-nav light alt w-dropdown-link">
634Renovations &amp; Additions</a><a href="/services/custom-homes" class="drop-nav light alt w-dropdown-link">Custom Homes</a><a href="/furnishing" class="drop-nav light alt w-dropdown-link">Furnishing</a></nav></div><a href="/our-projects" class="navbar2_link light w-nav-link">Projects</a><link rel="prefetch" href="/our-projects"/><a href="/design-studio" class="navbar2_link light w-nav-link">AI Design Studio</a><a href="/team" class="navbar2_link light w-nav-link">About</a><link rel="prefetch" href="/team"/><a href="/blog" class="navbar2_link light w-nav-link">Blog</a><link rel="prefetch" href="/blog"/><a href="/contact-us" class="navbar2_link light w-nav-link">Contact</a><link rel="prefetch" href="/contact-us"/><a href="/start-my-project" class="button is-icon nav dropdown w-inline-block"><div class="text-block-34">Start My Project</div><div class="white-arrow w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 16 16" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
635<g clip-path="url(#clip0_5204_438)">
636<path d="M0 8C0 10.1217 0.842855 12.1566 2.34315 13.6569C3.84344 15.1571 5.87827 16 8 16C10.1217 16 12.1566 15.1571 13.6569 13.6569C15.1571 12.1566 16 10.1217 16 8C16 5.87827 15.1571 3.84344 13.6569 2.34315C12.1566 0.842855 10.1217 0 8 0C5.87827 0 3.84344 0.842855 2.34315 2.34315C0.842855 3.84344 0 5.87827 0 8ZM9.28125 12.0312C8.9875 12.325 8.5125 12.325 8.22188 12.0312C7.93125 11.7375 7.92813 11.2625 8.22188 10.9719L10.4406 8.75313L3.75 8.75C3.33437 8.75 3 8.41563 3 8C3 7.58437 3.33437 7.25 3.75 7.25H10.4406L8.22188 5.03125C7.92813 4.7375 7.92813 4.2625 8.22188 3.97187C8.51563 3.68125 8.99062 3.67812 9.28125 3.97187L12.7812 7.46875C13.075 7.7625 13.075 8.2375 12.7812 8.52812L9.28125 12.0312Z" fill="currentColor"/>
637</g>
638<defs>
639<clipPath id="clip0_5204_438">
640<rect width="16" height="16" fill="currentColor"/>
641</clipPath>
642</defs>
643</svg></div></a></nav><div id="w-node-b076c0b1-aeb6-4735-66cc-6bdb22ae1533-22ae1522" class="navbar2_button-wrapper"><a href="/start-my-project" class="button is-icon w-inline-block"><div class="text-block-34">Start My Project</div><img src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/684222d3f3718a1102625fe6_circle-arrow-right-solid%201.svg" loading="lazy" alt="" class="image-48"/></a><link rel="prefetch" href="/start-my-project"/><div class="navbar2_menu-button w-nav-button"><div class="menu-icon2"><div class="menu-icon2_line-top"></div><div class="menu-icon2_line-middle"><div class="menu-icon2_line-middle-inner"></div></div><div class="menu-icon2_line-bottom"></div></div></div></div></div></div><main class="main-wrapper"><header class="section_home-new-hero text-color-white"><div class="padding-global"><div class="container-large"><div class="header5_content"><div class="padding-section-large bottom-none"><div><h1 class="heading-style-h1 is-hero">Elevate Your <span class="type-text"> </span></h1><div class="spacer-xsmall"></div><p class="paragraph-30">A Tech-Driven, White Glove Design-Build Service for your Home</p><div class="spacer-medium"></div><div class="button-group"><a href="/start-my-project" class="button is-icon w-inline-block"><div class="text-block-34">Start My Project</div><img src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/684222d3f3718a1102625fe6_circle-arrow-right-solid%201.svg" loading="lazy" alt="" class="image-48"/></a><link rel="prefetch" href="/start-my-project"/></div></div></div></div></div></div><div class="header5_background-image-wrapper"><img width="4500" height="2240" alt="a house with a driveway and a driveway" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/6841ede3f3b5645206c15507_Card.avif" loading="eager" class="header5_background-image"/><div class="div-block-73"></div></div></header><section class="section_home-intro"><div class="padding-global"><div class="container-large"><div class="padding-section-large bottom-none"><div class="w-layout-grid grid-18 animate-on-scroll"><div><h1 class="animate-h1 intro-sm">Where Architecture,<br/>Design &amp; Craftsmanship <br/>meet <span class="text-span-5">under one roof.</span></h1><div class="spacer-small"></div><p class="paragraph-28">Story is a full-service residential design-build firm specializing in high-end remodels and custom homes.</p></div><div class="video-modal-wrap"><a data-vimeo-lightbox-id="1040210311?h=d09985cb21" aria-label="Play Video" data-vimeo-lightbox-control
643="open" href="#" class="hero-button play-button w-inline-block"><div class="play-button w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 110 111" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
644<path fill-rule="evenodd" clip-rule="evenodd" d="M9.16602 55.5001C9.16602 30.187 29.6863 9.66675 54.9994 9.66675C67.1551 9.66675 78.813 14.4956 87.4085 23.091C96.0038 31.6864 100.833 43.3444 100.833 55.5001C100.833 80.8131 80.3125 101.333 54.9994 101.333C29.6863 101.333 9.16602 80.8131 9.16602 55.5001ZM46.6121 75.1169L73.3328 58.4335C74.3327 57.7931 74.9376 56.6876 74.9376 55.5001C74.9376 54.3128 74.3327 53.2071 73.3328 52.5669L46.5203 35.8835C45.4643 35.2176 44.1302 35.1767 43.0353 35.7764C41.9405 36.3762 41.2568 37.5225 41.2496 38.771V72.2293C41.2348 73.5081 41.931 74.6894 43.057 75.2956C44.1829 75.902 45.5525 75.8331 46.6121 75.1169Z" fill="currentColor"/>
645</svg></div></a><video loading="eager" preload="none" title="" loop="" playsinline="true" muted="" autoplay="true" poster="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/682789afd7b28c04b7d2afb2_67b4cfab4ba9701f4f751c36_first_frame.avif" class="video"><source src="https://dl.dropboxusercontent.com/scl/fi/ea9hvuj71xfcofytboj73/STRY_WebVideoHeaderBG_v03.mp4?rlkey=0skt1i3qohfmi2talkwkcze8c&amp;e=1&amp;st=pr1ipsce&amp;dl=0" type="video/mp4" data-resolution="720p" data-format="mp4" class="source"/></video></div></div><div data-vimeo-playing="false" class="vimeo-lightbox" data-vimeo-activated="false" data-vimeo-fullscreen="false" data-vimeo-hover="false" data-vimeo-loaded="false" data-vimeo-update-size="true" data-vimeo-lightbox-init="" data-vimeo-muted="false"><div data-vimeo-lightbox-control="close" class="vimeo-lightbox__bg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="L9" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve" width="100%" class="vimeo-lightbox__loading-svg"><path fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"><animatetransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"></animatetransform></path></svg></div><div class="vimeo-lightbox__calc"><div class="vimeo-lightbox__calc-wrap"><div data-vimeo-lightbox-player="" class="vimeo-lightbox__player"><div class="vimeo-lightbox__before"></div><iframe src="" width="640" height="360" frameborder="0" allowfullscreen="true" allow="autoplay; encrypted-media" class="vimeo-lightbox__iframe"></iframe><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/682789afd7b28c04b7d2afb2_67b4cfab4ba9701f4f751c36_first_frame.avif" alt="" class="vimeo-lightbox__placeholder"/><div class="vimeo-lightbox__dark"></div><div data-vimeo-control="play" class="vimeo-lightbox__play"><div class="vimeo-lightbox__btn"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" class="vimeo-lightbox__btn-play-svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.38178 6.13982C6.40762 5.94017 6.48425 5.74878 6.60555 5.58089C6.72686 5.413 6.88949 5.27326 7.08049 5.17279C7.2715 5.07232 7.48559 5.01391 7.70574 5.00219C7.92587 4.99048 8.14597 5.02579 8.3485 5.10532C9.37235 5.50436 11.6669 6.45272 14.5784 7.98469C17.4908 9.51754 19.5395 10.8562 20.4294 11.4635C21.1891 11.9829 21.191 13.013 20.4304 13.5342C19.5491 14.1381 17.5256 15.4591 14.5784 17.0113C11.6283 18.5635 9.36078 19.5005 8.34657 19.8942C7.47311 20.2343 6.49554 19.7183 6.38178 18.8597C6.24873 17.856 6 15.5769 6 12.4989C6 9.42262 6.24777 7.14443 6.38178 6.13982Z" fill="currentColor"></path></svg></div></div><div data-vimeo-control="pause" class="vimeo-lightbox__pause"><div class="vimeo-lightbox__btn"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" class="vimeo-lightbox__btn-pause-svg"><path d="M8 6.5C8 6.22386 8.22386 6 8.5 6H10.5C10.7761 6 11 6.22386 11 6.5V17.5C11 17.7761 10.7761 18 10.5 18H8.5C8.22386 18 8 17.7761 8 17.5V6.5Z" fill="currentColor"></path><path d="M14 6.5C14 6.22386 14.2239 6 14.5 6H16.5C16.7761 6 17 6.22386 17 6.5V17.5C17 17.7761 16.7761 18 16.5 18H14.5C14.2239 18 14 17.7761 14 17.5V6.5Z" fill="currentColor"></path></svg></div></div><div class="vimeo-lightbox__interface"><div class="vimeo-lightbox__interface-bottom"><div class="vimeo-lightbox__duration"><span data-vimeo-duration="" class="vimeo-lightbox__duration-span">0:00</span></div><div class="vimeo-lightbox__timeline">
645<progress min="0" max="100" value="0" class="vimeo-lightbox__timeline-progress"></progress><input type="range" min="0" max="100" step="0.01" data-vimeo-control="timeline" class="vimeo-lightbox__timeline-input" value="0"/></div><div data-vimeo-control="mute" class="vimeo-lightbox__mute"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" class="vimeo-lightbox__volume-up-svg"><path d="M3 8.99998V15H7L12 20V3.99998L7 8.99998H3ZM16.5 12C16.5 10.23 15.48 8.70998 14 7.96998V16.02C15.48 15.29 16.5 13.77 16.5 12ZM14 3.22998V5.28998C16.89 6.14998 19 8.82998 19 12C19 15.17 16.89 17.85 14 18.71V20.77C18.01 19.86 21 16.28 21 12C21 7.71998 18.01 4.13998 14 3.22998Z" fill="currentColor"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" class="vimeo-lightbox__volume-mute-svg"><path d="M16.5 12C16.5 10.23 15.48 8.71 14 7.97V10.18L16.45 12.63C16.48 12.43 16.5 12.22 16.5 12ZM19 12C19 12.94 18.8 13.82 18.46 14.64L19.97 16.15C20.63 14.91 21 13.5 21 12C21 7.72 18.01 4.14 14 3.23V5.29C16.89 6.15 19 8.83 19 12ZM4.27 3L3 4.27L7.73 9H3V15H7L12 20V13.27L16.25 17.52C15.58 18.04 14.83 18.45 14 18.7V20.76C15.38 20.45 16.63 19.81 17.69 18.95L19.73 21L21 19.73L12 10.73L4.27 3ZM12 4L9.91 6.09L12 8.18V4Z" fill="currentColor"></path></svg></div><div data-vimeo-control="fullscreen" class="vimeo-lightbox__fullscreen"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" class="vimeo-lightbox__fullscreen-scale-svg"><rect x="3" y="14" width="2" height="7" fill="currentColor"></rect><rect x="3" y="3" width="2" height="7" fill="currentColor"></rect><rect x="19" y="3" width="2" height="7" fill="currentColor"></rect><rect x="19" y="14" width="2" height="7" fill="currentColor"></rect><rect x="3" y="19" width="7" height="2" fill="currentColor"></rect><rect x="14" y="19" width="7" height="2" fill="currentColor"></rect><rect x="3" y="3" width="7" height="2" fill="currentColor"></rect><rect x="14" y="3" width="7" height="2" fill="currentColor"></rect></svg><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" class="vimeo-lightbox__fullscreen-shrink-svg"><rect x="7" y="2" width="2" height="7" fill="currentColor"></rect><rect x="15" y="2" width="2" height="7" fill="currentColor"></rect><rect x="15" y="15" width="2" height="7" fill="currentColor"></rect><rect x="8" y="15" width="2" height="7" fill="currentColor"></rect><rect x="2" y="7" width="7" height="2" fill="currentColor"></rect><rect x="3" y="15" width="7" height="2" fill="currentColor"></rect><rect x="15" y="7" width="7" height="2" fill="currentColor"></rect><rect x="15" y="15" width="7" height="2" fill="currentColor"></rect></svg></div></div></div><div class="vimeo-lightbox__loading"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="L9" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve" width="100%" class="vimeo-lightbox__loading-svg"><path fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50" class="path"><animatetransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"></animatetransform></path></svg></div></div></div></div><button data-vimeo-lightbox-control="close" class="vimeo-lightbox__close"><div class="vimeo-lightbox__close-bar"></div><div class="vimeo-lightbox__close-bar is--duplicate"></div></button></div></div></div></div></section><section class="section_home-type animate-on-scroll"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="w-layout-grid grid-3"><div id="w-node-aa726df8-6a67-e549-e634-6c444dc3a2a2-777ffee4" class="project-type"><h1 class="heading-13">What project are you<br/>looking to start?</h1></div><a id="custom" href="#" data-project="custom" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2a7-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a04_Rectangle%2048.webp" alt="" class="image-4"/></div><div class="text-block-6">Custom Home</div></a><a id="whole-home-remodel" href="#" data-project="whole-home" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2ac-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ff_image.webp" alt="" class="image-4"/></div><div class="text-block-6">Whole Home Remodel</div></a><a id="kitchen" href="#" data-project="kitchen" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2b1-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a1e_image-1.webp" alt="" class="image-4"/></div><div class="text-block-6">Kitchen Remodel</div></a><a id="basement" href="#" data-project="basement" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2b6-777ffee4 w-inline-block"><div class="proj-img"><img width="70" loading="lazy" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a20_image-3.webp" class="image-4"/></div><div class="text-block-6">Basement Remodel</div></a><a id="living-room" href="#" data-project="living-room" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2bb-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a1f_Rectangle%2045.webp" alt="" class="image-4"/></div><div class="text-block-6">Living Room Remodel</div></a><a id="home-addition" href="#" data-project="home-addition" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2c0-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a02_Rectangle%2046.webp" alt="" class="image-4"/></div><div class="text-block-6">Home Addition</div></a><a id="exterior" href="#" data-project="exterior" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2c5-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a03_image-2.webp" alt="" class="image-4"/></div><div class="text-block-6">Exterior Renovation</div></a>
645<a id="furniture" href="#" data-project="furniture" class="project-type scale w-node-aa726df8-6a67-e549-e634-6c444dc3a2ca-777ffee4 w-inline-block"><div class="proj-img"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/67b4ba6daa3742b358d2787f_furniture_home.webp" alt="" class="image-4"/></div><div class="text-block-6">Custom Furniture</div></a></div></div></div></div></section><section class="section_home-tabs animate-on-scroll"><div class="padding-global"><div class="container-large"><div class="padding-section-large bottom-none top-none"><div class="intro-text-container"><p class="paragraph align-center">Our trusted in-house architects, interior designers &amp; <br/>builders create a truly seamless renovation experience – <br/>all enabled by our proprietary software.</p></div><div class="layout496_component"><div data-current="Tab 7" data-easing="ease" data-duration-in="1162" data-duration-out="914" class="tabs w-tabs"><div class="tabs-menu w-tab-menu"><a data-w-tab="Tab 7" class="layout496_tab-link w-inline-block w-tab-link w--current"><div class="layout496_tab-title"><div class="top-tab"><h2 class="tab-heading">Easy, Thorough Planning</h2><div class="icon-embed-xxsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 15 17" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
646<path d="M7.28816 16.492C7.07216 16.492 6.92816 16.348 6.92816 16.132V9.25601H0.520156C0.304156 9.25601 0.160156 9.11201 0.160156 8.89601V8.39201C0.160156 8.17601 0.304156 8.03201 0.520156 8.03201H6.92816V1.12001C6.92816 0.904011 7.07216 0.76001 7.28816 0.76001H7.86416C8.08016 0.76001 8.22416 0.904011 8.22416 1.12001V8.03201H14.5962C14.8122 8.03201 14.9562 8.17601 14.9562 8.39201V8.89601C14.9562 9.11201 14.8122 9.25601 14.5962 9.25601H8.22416V16.132C8.22416 16.348 8.08016 16.492 7.86416 16.492H7.28816Z" fill="currentColor"/>
647</svg></div></div><div class="layout496_paragraph"><div class="margin-top"><p class="tab-para">Through a guided step-by-step process, we learn about your dream space, personal style, and unique needs. Your dedicated design team will help you at every step of the process.</p></div></div></div></a><a data-w-tab="Tab 8" class="layout496_tab-link w-inline-block w-tab-link"><div class="layout496_tab-title"><div class="top-tab"><h2 class="tab-heading">In-House Architecture &amp; Design</h2><div class="icon-embed-xxsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 15 17" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
648<path d="M7.28816 16.492C7.07216 16.492 6.92816 16.348 6.92816 16.132V9.25601H0.520156C0.304156 9.25601 0.160156 9.11201 0.160156 8.89601V8.39201C0.160156 8.17601 0.304156 8.03201 0.520156 8.03201H6.92816V1.12001C6.92816 0.904011 7.07216 0.76001 7.28816 0.76001H7.86416C8.08016 0.76001 8.22416 0.904011 8.22416 1.12001V8.03201H14.5962C14.8122 8.03201 14.9562 8.17601 14.9562 8.39201V8.89601C14.9562 9.11201 14.8122 9.25601 14.5962 9.25601H8.22416V16.132C8.22416 16.348 8.08016 16.492 7.86416 16.492H7.28816Z" fill="currentColor"/>
649</svg></div></div><div class="layout496_paragraph"><div class="margin-top"><p class="tab-para">Our architects and interior designers work with you to create a beautiful and functional space while staying within your budget.</p></div></div></div></a><a data-w-tab="Tab 9" class="layout496_tab-link w-inline-block w-tab-link"><div class="layout496_tab-title"><div class="top-tab"><h2 class="tab-heading">A Better Way to Build</h2><div class="icon-embed-xxsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 15 17" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
650<path d="M7.28816 16.492C7.07216 16.492 6.92816 16.348 6.92816 16.132V9.25601H0.520156C0.304156 9.25601 0.160156 9.11201 0.160156 8.89601V8.39201C0.160156 8.17601 0.304156 8.03201 0.520156 8.03201H6.92816V1.12001C6.92816 0.904011 7.07216 0.76001 7.28816 0.76001H7.86416C8.08016 0.76001 8.22416 0.904011 8.22416 1.12001V8.03201H14.5962C14.8122 8.03201 14.9562 8.17601 14.9562 8.39201V8.89601C14.9562 9.11201 14.8122 9.25601 14.5962 9.25601H8.22416V16.132C8.22416 16.348 8.08016 16.492 7.86416 16.492H7.28816Z" fill="currentColor"/>
651</svg></div></div><div class="layout496_paragraph"><div class="margin-top"><p class="tab-para">Our in-house construction team guarantees the highest quality renovation or custom home. Our highly skilled craftsmen work side-by-side with designers to plan every detail of your project. No more last-minute, mid-project fire drills.</p></div></div></div></a></div><div class="tabs-content w-tab-content"><div data-w-tab="Tab 7" class="layout496_tab-pane w-tab-pane w--tab-active"><div class="layout496_image-wrapper"><img width="1144" height="838" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a09_image-1.avif" loading="lazy" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a09_image-1-p-500.avif 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a09_image-1.avif 1144w" sizes="(max-width: 1144px) 100vw, 1144px" class="image-32"/></div></div><div data-w-tab="Tab 8" class="layout496_tab-pane w-tab-pane"><div class="layout496_image-wrapper"><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a19_image-2-p-500.avif 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a19_image-2.avif 1162w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a19_image-2.avif" loading="lazy" class="image-33"/></div></div><div data-w-tab="Tab 9" class="layout496_tab-pane w-tab-pane"><div class="layout496_image-wrapper"><img width="1196" height="914" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a11_image-3.avif" loading="lazy" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a11_image-3-p-500.avif 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a11_image-3.avif 1196w" sizes="(max-width: 1196px) 100v
651w, 1196px" class="image-34"/></div></div></div></div></div></div></div></div></section><section class="section_home-gallery animate-on-scroll"><div class="padding-global"><div class="container-large"><div class="padding-section-large top-smaller"><div class="gallery20_component"><div class="div-block-72"><h2 class="heading-style-h2 cc-sm">Our work<span class="text-span-5"> speaks for itself.</span></h2><a href="/our-projects" class="button w-button">View Our Work</a><link rel="prefetch" href="/our-projects"/></div><div class="spacer-medium"></div><div class="swiper-project-wrapper"><div class="div-block-17"><div class="swiper-arrows is-projects left"><a aria-label="swipe left" href="#" class="slider-arrow is-projects prev w-inline-block"><div class="slider-arrow-icon w-embed"><svg width="100%" height="100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
652<path d="M3.31066 8.75001L9.03033 14.4697L7.96967 15.5303L0.439339 8.00001L7.96967 0.469676L9.03033 1.53034L3.31066 7.25001L15.5 7.25L15.5 8.75L3.31066 8.75001Z" fill="currentColor"/>
653</svg></div></a></div><div class="swiper-arrows is-projects right"><a aria-label="swipe right" href="#" class="slider-arrow is-projects next w-inline-block"><div class="slider-arrow-icon w-embed"><svg width="100%" height="100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
654<path d="M12.6893 7.25L6.96967 1.53033L8.03033 0.469666L15.5607 8L8.03033 15.5303L6.96967 14.4697L12.6893 8.75H0.5V7.25H12.6893Z" fill="currentColor"/>
655</svg></div></a></div><div class="swiper is-projects w-dyn-list"><div role="list" class="swiper-wrapper is-projects w-dyn-items"><div role="listitem" class="swiper-slide is-projects w-dyn-item"><div class="project-img-container"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938.jpg" alt="" sizes="(max-width: 991px) 100vw, 5200px" srcset="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-500.jpg 500w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-800.jpg 800w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-1080.jpg 1080w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-1600.jpg 1600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-2000.jpg 2000w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-2600.jpg 2600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938-p-3200.jpg 3200w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6b86cd7e665ebf3d584a41_SSP_19938.jpg 5200w" class="image-14"/><a href="/project/turkey-creek" class="project-link-container w-inline-block"><div class="project-button"><div class="text-block-24">View Our Work</div></div></a><link rel="prefetch" href="/project/turkey-creek"/></div></div><div role="listitem" class="swiper-slide is-projects w-dyn-item"><div class="project-img-container"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize.webp" alt="" sizes="(max-width: 991px) 100vw, 5200px" srcset="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-500.webp 500w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-800.webp 800w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-1080.webp 1080w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-1600.webp 1600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-2000.webp 2000w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-2600.webp 2600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize-p-3200.webp 3200w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69fbba4f094efe0daf210958_0A2A9707_websize.webp 5200w" class="image-14"/><a href="/project/high-valley-hollow" class="project-link-container w-inline-block"><div class="project-button"><div class="text-block-24">View Our Work</div></div></a><link rel="prefetch" href="/project/high-valley-hollow"/></div></div><div role="listitem" class="swiper-slide is-projects w-dyn-item"><div class="project-img-container"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize.webp" alt="" sizes="(max-width: 991px) 100v
655w, 5200px" srcset="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize-p-500.webp 500w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize-p-800.webp 800w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize-p-1080.webp 1080w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize-p-1600.webp 1600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize-p-2000.webp 2000w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize-p-2600.webp 2600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69d579a003a312a754072aaa_WR84%20-%208459%20E%20Old%20Field%20Rd-9_websize.webp 3600w" class="image-14"/><a href="/project/chicago-to-arizona" class="project-link-container w-inline-block"><div class="project-button"><div class="text-block-24">View Our Work</div></div></a><link rel="prefetch" href="/project/chicago-to-arizona"/></div></div><div role="listitem" class="swiper-slide is-projects w-dyn-item"><div class="project-img-container"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize.webp" alt="" sizes="(max-width: 991px) 100vw, 5200px" srcset="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-500.webp 500w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-800.webp 800w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-1080.webp 1080w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-1600.webp 1600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-2000.webp 2000w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-2600.webp 2600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize-p-3200.webp 3200w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize.webp 5842w" class="image-14"/><a href="/project/ranch-reimagined" class="project-link-container w-inline-block"><div class="project-button"><div class="text-block-24">View Our Work</div></div></a><link rel="prefetch" href="/project/ranch-reimagined"/></div></div><div role="listitem" class="swiper-slide is-projects w-dyn-item"><div class="project-img-container"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2.webp" alt="" sizes="(max-width: 991px) 100vw, 5200px" srcset="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-500.webp 500w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-800.webp 800w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-1080.webp 1080w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-1600.webp 1600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-2000.webp 2000w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-2600.webp 2600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2-p-3200.webp 3200w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2.webp 4695w" class="image-14"/><a href="/project/desert-glam" class="project-link-container w-inline-block"><div class="project-button"><div class="text-block-24">View Our Work</div></div></a><link rel="prefetch" href="/project/desert-glam"/></div></div><div role="listitem" class="swiper-slide is-projects w-dyn-item"><div class="project-img-container"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1.webp" alt="" sizes="(max-width: 991px) 100v
655w, 5200px" srcset="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-500.webp 500w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-800.webp 800w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-1080.webp 1080w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-1600.webp 1600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-2000.webp 2000w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-2600.webp 2600w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1-p-3200.webp 3200w, https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1.webp 5352w" class="image-14"/><a href="/project/desert-luxe" class="project-link-container w-inline-block"><div class="project-button"><div class="text-block-24">View Our Work</div></div></a><link rel="prefetch" href="/project/desert-luxe"/></div></div></div></div></div><div class="swiper-nav-wrapper"><div class="swiper-bullets is-projects"></div></div></div><div class="w-embed"><style>
656.w-slider-dot.w-active {
657    background-color: #D5A75D !important;
658}
659</style></div></div></div></div></div></section><section class="section_home-testimonials animate-on-scroll"><div class="padding-global"><div class="container-large"><div class="padding-section-large top-none"><div class="testimonial-heading"><div class="text-style-tagline">Testimonials</div><h1 class="heading-5">What our customers say...</h1></div><div class="spacer-huge"></div><div class="swiper-container"><div class="swiper w-dyn-list"><div role="list" class="swiper-wrapper w-dyn-items"><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">Over the multi-year course of building our North Scottsdale home, we worked closely and seamlessly with Story. Our experience was beyond excellent. Communication and listening was top of the list. These skilled professionals became key players in the building process and the results have been magnificent. While they are extremely busy with a large list of clients, we were treated with kindness, respect and sincere interest in our wishes as if we were their only clients. Several meetings in the field and in their office were held with full attention given to our needs. Follow up on minor post-installation issues were promptly and professionally addressed and resolved with the same dedication of our initial dealings. It is without reserve that we offer our highest recommendation of Stacy and Kacie, and the whole Story team. We&#x27;ve never dealt with finer more capable professionals than them.</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Eugene from Scottsdale</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
660<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
661</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">I never thought that hiring a design team would make such a difference in the design, attention to detail, and usefulness of our new home. Not only are they fun and thoughtful to work with, but they knocked it out of the park when taking some ideas and likes of ours and turning it into something much better! They helped to keep are builder on track with upgrades, but went to the build-out in intervals and made even the small detail changes that we would never have thought of on our own. We ended up with a home that meets all our needs and is so us in so many ways, but elegant, different, and so relevant to look at. A home run in every way, thank you for our dream home in the desert! </h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Gale from Phoenix</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewB
661ox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
662<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
663</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">Zach and the whole team at Story Renovations are the best at what they do. The design team is superb and brought our vision to life even better than we could’ve imagined! The whole team goes above and beyond and truly puts the client first. They’re organized, thorough, have superb attention to detail and are proactive in identifying potential issues and presenting creative solutions. Having our house be a construction site was stressful, but Story Renovations made the overall experience smooth and fun!”</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Nicole from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
664<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
665</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">I did a pop top with this group and couldn&#x27;t be happier. After several years, we still get compliments regularly on how beautiful the home turned out and how well it fits into the neighborhood. Would highly recommend.”</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Ryan from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
666<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
667</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">My husband and I loved working with Story Renovations for our basement remodel. From the initial meeting to the very last punch list item, the entire team was professional, communicative, respectful, responsive, and attentive! I would recommend them to ANYONE!”</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Jen from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
668<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
669</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">We have loved working with Story! They have been friendly, professional, prompt and easy to work with. Story has a well-rounded team of specialists and each person we came in contact with was great to work with. The job site was kept clean and the construction was completed on time. I would highly recommend Story and we can’t wait to have them back to work in another area of our home.&quot;</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
670<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
671</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">I would highly recommend Story Renovations to anyone doing a home renovation. Whether it&#x27;s a smaller project or a larger one, Story treats each project with equal importance and delivers a high quality product. Story did an outdoor living space for us and couldn&#x27;t have been easier or more professional to work with. Everyone on their team is very responsive and made sure to keep us in the loop during the process. They created a beautiful design that fit well with our existing outdoor space and even assisted in furniture, lighting, etc. selections. Equally important, they stayed within the original budget and we were never blindsided with additional expenses. I would certainly use Story again for any future home renovations.&quot;</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Jenny from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewB
671ox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
672<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
673</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">The whole Story team was great to work with! We had a pretty large project that involved several rooms on all 3 floors of the house. Rachel and Laurie designed such beautiful spaces for us and were so thoughtful with all of the details. Ian, Ryan and all of our contractors were great as well and helped us navigate through any problems that popped up. We couldn&#x27;t be happier with our home!&quot;</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Lauren from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
674<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
675</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">We have a wonderful 1950s custom ranch home. We have lived in our home for over 30 years and this time decided to really do it all- down to the studs, all new bathrooms and kitchen! The craftsmanship and attention to detail have been outstanding. Every trade that worked on our home was a true professional. Additionally, Story has been absolutely outstanding with follow-ups to the items that needed attention following our move in. We couldn&#x27;t be happier with our &quot;new&quot; home! My husband and I were just commenting the other night how pleased we are and we are so glad we chose Story.&quot;</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Kathy from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
676<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
677</svg></div></div></div><div role="listitem" class="swiper-slide w-dyn-item"><div class="testimonial7_content"><h2 class="heading-25">We have been so pleased with Story. Clearly the best choice we could have made in our opinion. Their work is high quality; they take great pride in their craftsmanship . Follow-through has been stellar on the little odds and ends that are part of any project of this scale. And, the entire team has been delightful to work with - from the project leads to every trade that has been in our home. Give them a try - I don&#x27;t think you would be disappointed!&quot;</h2><div class="spacer-medium"></div><div class="testimonial7_client"><div class="text-block-22">Katherine from Denver</div></div><div class="icon-embed-xsmall is-blue w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 19 14" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
678<path d="M9.73013 13.334L15.0081 0.400024H18.4881L15.1821 13.334H9.73013ZM0.682129 13.334L5.90213 0.400024H9.38213L6.13413 13.334H0.682129Z" fill="currentColor"/>
679</svg></div></div></div></div></div><div class="arrow-container-left"><a aria-label="swipe-left" href="#" class="slider-arrow w-inline-block"><div class="slider-arrow-icon w-embed"><svg width="100%" height="100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
680<path d="M3.31066 8.75001L9.03033 14.4697L7.96967 15.5303L0.439339 8.00001L7.96967 0.469676L9.03033 1.53034L3.31066 7.25001L15.5 7.25L15.5 8.75L3.31066 8.75001Z" fill="currentColor"/>
681</svg></div></a></div><div class="arrow-container-right"><a aria-label="swipe right" href="#" class="slider-arrow w-inline-block"><div class="slider-arrow-icon w-embed">
681<svg width="100%" height="100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
682<path d="M12.6893 7.25L6.96967 1.53033L8.03033 0.469666L15.5607 8L8.03033 15.5303L6.96967 14.4697L12.6893 8.75H0.5V7.25H12.6893Z" fill="currentColor"/>
683</svg></div></a></div><div class="swiper-bullets"></div></div></div></div></div></section><section class="section_home-projects animate-on-scroll hide"><div class="padding-global"><div class="container-large"><div class="padding-section-medium"><div class="heading-aligned-center"><h1 class="heading-3">Explore our projects</h1></div><div class="layout235_component"><div class="w-dyn-list"><div role="list" class="project-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/project/ranch-reimagined" class="layout235_item scale w-inline-block"><div class="margin-bottom margin-medium"><div class="layout178_image-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69b30af559dd50454f0988dc_8511%20N%2059th%20Pl%20-15_websize.webp" alt="" class="layout235_image"/></div></div><div class="margin-bottom margin-custom1"><div class="project-heading"><h2 class="heading-26">Ranch Reimagined</h2><div class="icon-embed-xxsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 13 13" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
684<path d="M1.42761 1H12M11.6586 1L11.6586 11.6008M11.5724 1.39918L1 12" stroke="currentColor" stroke-width="2"/>
685</svg></div></div></div></a></div><div role="listitem" class="w-dyn-item"><a href="/project/desert-glam" class="layout235_item scale w-inline-block"><div class="margin-bottom margin-medium"><div class="layout178_image-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6925f39c9f3669bd0e3c6060_MorottiRes-GreatRm2.webp" alt="" class="layout235_image"/></div></div><div class="margin-bottom margin-custom1"><div class="project-heading"><h2 class="heading-26">Desert Glam</h2><div class="icon-embed-xxsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 13 13" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
686<path d="M1.42761 1H12M11.6586 1L11.6586 11.6008M11.5724 1.39918L1 12" stroke="currentColor" stroke-width="2"/>
687</svg></div></div></div></a></div><div role="listitem" class="w-dyn-item"><a href="/project/desert-luxe" class="layout235_item scale w-inline-block"><div class="margin-bottom margin-medium"><div class="layout178_image-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/690d247622dfd7ca50c9b24a_Klayko-Res_Dining1.webp" alt="" class="layout235_image"/></div></div><div class="margin-bottom margin-custom1"><div class="project-heading"><h2 class="heading-26">Desert Luxe</h2><div class="icon-embed-xxsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 13 13" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
688<path d="M1.42761 1H12M11.6586 1L11.6586 11.6008M11.5724 1.39918L1 12" stroke="currentColor" stroke-width="2"/>
689</svg></div></div></div></a></div></div></div></div></div></div></div></section><section class="section_cta39 animate-on-scroll"><div class="padding-global"><div class="container-large"><div><div class="cta39_component"><div class="w-layout-grid cta39_card"><div id="w-node-bd0c9f67-f6fd-a1f7-e917-1ba4b0b7fd99-777ffee4" class="cta39_card-content"><div class="cta39_card-content-top"><h2 class="heading-39">Let us help you design a home you’ll <span class="text-span-22">be proud of</span>.</h2><div class="spacer-small"></div></div><div class="spacer-medium"></div><div class="button-group align-center"><a href="/start-my-project" class="button cc-white w-inline-block"><div>Start My Project</div><img src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/68422351f3718a110262a770_black-arrow.svg" loading="lazy" alt="" class="image-50"/></a><link rel="prefetch" href="/start-my-project"/></div></div><div class="cta39_image-wrapper"><img sizes="(max-width: 1314px) 100vw, 1314px" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/683f3e85c32c933d2396392d_CTA%20-%20Prefooter-p-500.jpg 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/683f3e85c32c933d2396392d_CTA%20-%20Prefooter-p-800.jpg 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/683f3e85c32c933d2396392d_CTA%20-%20Prefooter-p-1080.jpg 1080w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/683f3e85c32c933d2396392d_CTA%20-%20Prefooter.jpg 1314w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/683f3e85c32c933d2396392d_CTA%20-%20Prefooter.jpg" loading="lazy" class="cta39_image"/></div></div></div></div></div></div></section><section class="section_home-blogs animate-on-scroll"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="blog58_component"><div class="blog58_heading-wrapper"><div class="blog58_heading"><div class="max-width-large"><div class="text-style-tagline">Blog</div><div class="spacer-xsmall"></div><h2 class="heading">The latest design insights</h2></div></div><div class="button-group is-right hide-mobile-landscape"><a href="/blog" class="button w-button">View all</a><link rel="prefetch" href="/blog"/></div></div><div class="spacer-large"></div><div class="blog58_list-wrapper"><div class="w-dyn-list"><div role="list" class="collection-list-2 w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="blog58_item"><a href="/post/how-to-find-your-real-style-not-the-one-pinterest-picked-for-you" class="blog58_item-link scale w-inline-block"><div class="blog58_image-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a46d68cdbb6d3ada80ea35f_IL.Net0-1000939-min.webp" alt="" class="blog58_image"/></div><div class="spacer-small"></div><h3 class="blog-heading">How to Find Your Real Style (Not the One Pinterest Picked for You)</h3><div class="spacer-small"></div><div class="spacer-small"></div><div class="button-group absolute"><div class="button is-link is-icon"><div class="text-block-23">Read more</div><img src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/6842230e035144c5c3901c64_blue-arrow.svg" loading="lazy" alt="Blue arrow" class="image-49"/></div></div></a><link rel="prefetch" href="/post/how-to-find-your-real-style-not-the-one-pinterest-picked-for-you"/></div></div><div role="listitem" class="w-dyn-item"><div class="blog58_item"><a href="/post/renovate-or-move" class="blog58_item-link scale w-inline-block"><div class="blog58_image-wrapper"><img loading="lazy" src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/69f51eb678a89547c07c1240_SSP_9392_result.webp" alt="" class="blog58_image"/></div><div class="spacer-small"></div><h3 class="blog-heading">Your House Doesn&#x27;t Work Anymore. So Do You Renovate, or Move? </h3><div class="spacer-small"></div><div class="spacer-small"></div><div class="button-group absolute"><div class="button is-link is-icon"><div class="text-block-23">Read more</div><img src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/6842230e035144c5c3901c64_blue-arrow.svg" loading="lazy" alt="Blue arrow" class="image-49"/></div></div></a><link rel="prefetch" href="/post/renovate-or-move"/></div></div></div></div></div><div class="show-mobile-landscape"><div class="spacer-xxlarge"></div><div class="button-group is-right"><a href="#" class="button is-secondary w-button">View all</a></div></div></div></div></div></div></section></main><section class="section_instagram-feed"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="insta-top"><a href="#" class="insta-link w-inline-block"><div class="text-block-40">#ElevateYourEveryday</div></a><a href="#" class="insta-link w-inline-block"><div class="text-block-41">@storyrenovations</div></a></div><div class="insta-middle"><div class="w-dyn-list"><div role="list" class="collection-list-12 w-dyn-items"><div role="listitem" class="w-dyn-item"><a data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24b" href="https://www.instagram.com/p/DdFGAqtFBlk/" target="_blank" class="div-block-80 w-inline-block"><div class="code-embed-4 w-embed w-iframe w-script"><!-- <div class="instagram-crop-wrapper">
690  <blockquote 
691    class="instagram-media" 
692    data-instgrm-captioned 
693    data-instgrm-permalink=""
694    data-instgrm-version="14">
695  </blockquote>
696</div>
697
698<script async src="//www.instagram.com/embed.js"></script>
698
699
700<script>
701(function() {
702  function cropInstagramEmbeds() {
703    const wrappers = document.querySelectorAll('.instagram-crop-wrapper');
704    
705    wrappers.forEach(wrapper => {
706      const iframe = wrapper.querySelector('iframe.instagram-media-rendered');
707      
708      if (iframe) {
709        // Get viewport width to determine crop values
710        const viewportWidth = window.innerWidth;
711        let marginTop, marginBottom, heightAdd;
712        
713        if (viewportWidth <= 768) {
714          // Mobile
715          marginTop = '-60px';
716          marginBottom = '-120px';
717          heightAdd = '180px';
718        } else if (viewportWidth <= 1024) {
719          // Tablet
720          marginTop = '-64px';
721          marginBottom = '-128px';
722          heightAdd = '192px';
723        } else if (viewportWidth <= 1919) {
724          // Desktop
725          marginTop = '-80px';
726          marginBottom = '-160px';
727          heightAdd = '240px';
728        } else {
729          // Large Desktop 1920+
730          marginTop = '-85px';
731          marginBottom = '-170px';
732          heightAdd = '255px';
733        }
734        
735        iframe.style.setProperty('position', 'relative', 'important');
736        iframe.style.setProperty('margin-top', marginTop, 'important');
737        iframe.style.setProperty('margin-bottom', marginBottom, 'important');
738        iframe.style.setProperty('width', '100%', 'important');
739        iframe.style.setProperty('height', `calc(100% + ${heightAdd})`, 'important');
740        iframe.style.setProperty('border', 'none', 'important');
741        iframe.style.setProperty('display', 'block', 'important');
742      }
743    });
744  }
745  
746  // Run multiple times to catch async loading
747  setTimeout(cropInstagramEmbeds, 1000);
748  setTimeout(cropInstagramEmbeds, 2000);
749  setTimeout(cropInstagramEmbeds, 3000);
750  setTimeout(cropInstagramEmbeds, 4000);
751  
752  // Run on load
753  window.addEventListener('load', function() {
754    setTimeout(cropInstagramEmbeds, 500);
755  });
756  
757  // Re-crop on window resize
758  window.addEventListener('resize', cropInstagramEmbeds);
759})();
760</script>
760
761
762<style>
763.instagram-crop-wrapper {
764  position: relative;
765  width: 100%;
766  margin: 0 auto;
767  overflow: hidden !important;
768  background: #fff;
769}
770
771/* Target the actual Instagram iframe classes */
772.instagram-crop-wrapper .instagram-media,
773.instagram-crop-wrapper .instagram-media-rendered {
774  margin: 0 !important;
775  padding: 0 !important;
776  border: none !important;
777  min-width: 100% !important;
778  max-width: 100% !important;
779}
780
781/* Crop the iframe - base styles */
782.instagram-crop-wrapper iframe,
783.instagram-crop-wrapper iframe.instagram-media-rendered {
784  position: relative !important;
785  display: block !important;
786  padding: 0 !important;
787  border: none !important;
788  width: 100% !important;
789}
790
791/* Mobile (up to 768px) - Increased size */
792@media (max-width: 768px) {
793  .instagram-crop-wrapper {
794    max-width: 360px;
795    height: 380px; /* Almost double from 211px */
796  }
797  
798  .instagram-crop-wrapper iframe,
799  .instagram-crop-wrapper iframe.instagram-media-rendered {
800    margin: -60px 0 -120px 0 !important;
801    height: calc(100% + 180px) !important;
802  }
803}
804
805/* Tablet (769px to 1024px) - Keeping as is */
806@media (min-width: 769px) and (max-width: 1024px) {
807  .instagram-crop-wrapper {
808    max-width: 480px;
809    height: 281px;
810  }
811  
812  .instagram-crop-wrapper iframe,
813  .instagram-crop-wrapper iframe.instagram-media-rendered {
814    margin: -64px 0 -128px 0 !important;
815    height: calc(100% + 192px) !important;
816  }
817}
818
819/* Desktop (1025px to 1439px) */
820@media (min-width: 1025px) and (max-width: 1439px) {
821  .instagram-crop-wrapper {
822    max-width: 540px;
823    height: 316px;
824  }
825  
826  .instagram-crop-wrapper iframe,
827  .instagram-crop-wrapper iframe.instagram-media-rendered {
828    margin: -72px 0 -144px 0 !important;
829    height: calc(100% + 216px) !important;
830  }
831}
832
833/* Large Desktop (1440px to 1919px) - Keeping as is */
834@media (min-width: 1440px) and (max-width: 1919px) {
835  .instagram-crop-wrapper {
836    max-width: 640px;
837    height: 375px;
838  }
839  
840  .instagram-crop-wrapper iframe,
841  .instagram-crop-wrapper iframe.instagram-media-rendered {
842    margin: -80px 0 -160px 0 !important;
843    height: calc(100% + 240px) !important;
844  }
845}
846
847/* Extra Large Desktop (1920px+) - Reduced height */
848@media (min-width: 1920px) {
849  .instagram-crop-wrapper {
850    max-width: 800px;
851    height: 500px; /* Reduced from 600px */
852  }
853  
854  .instagram-crop-wrapper iframe,
855  .instagram-crop-wrapper iframe.instagram-media-rendered {
856    margin: -85px 0 -170px 0 !important;
857    height: calc(100% + 255px) !important;
858  }
859}
860</style> --></div><img src="https://cdn.prod.website-files.com/plugins/Basic/assets/placeholder.60f9b1840c.svg" loading="lazy" data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24d" alt="" class="image-54 w-dyn-bind-empty"/></a></div><div role="listitem" class="w-dyn-item"><a data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24b" href="https://www.instagram.com/p/DbMBYzkGnfa/" target="_blank" class="div-block-80 w-inline-block"><div class="code-embed-4 w-embed w-iframe w-script"><!-- <div class="instagram-crop-wrapper">
861  <blockquote 
862    class="instagram-media" 
863    data-instgrm-captioned 
864    data-instgrm-permalink=""
865    data-instgrm-version="14">
866  </blockquote>
867</div>
868
869<script async src="//www.instagram.com/embed.js"></script>
869
870
871<script>
872(function() {
873  function cropInstagramEmbeds() {
874    const wrappers = document.querySelectorAll('.instagram-crop-wrapper');
875    
876    wrappers.forEach(wrapper => {
877      const iframe = wrapper.querySelector('iframe.instagram-media-rendered');
878      
879      if (iframe) {
880        // Get viewport width to determine crop values
881        const viewportWidth = window.innerWidth;
882        let marginTop, marginBottom, heightAdd;
883        
884        if (viewportWidth <= 768) {
885          // Mobile
886          marginTop = '-60px';
887          marginBottom = '-120px';
888          heightAdd = '180px';
889        } else if (viewportWidth <= 1024) {
890          // Tablet
891          marginTop = '-64px';
892          marginBottom = '-128px';
893          heightAdd = '192px';
894        } else if (viewportWidth <= 1919) {
895          // Desktop
896          marginTop = '-80px';
897          marginBottom = '-160px';
898          heightAdd = '240px';
899        } else {
900          // Large Desktop 1920+
901          marginTop = '-85px';
902          marginBottom = '-170px';
903          heightAdd = '255px';
904        }
905        
906        iframe.style.setProperty('position', 'relative', 'important');
907        iframe.style.setProperty('margin-top', marginTop, 'important');
908        iframe.style.setProperty('margin-bottom', marginBottom, 'important');
909        iframe.style.setProperty('width', '100%', 'important');
910        iframe.style.setProperty('height', `calc(100% + ${heightAdd})`, 'important');
911        iframe.style.setProperty('border', 'none', 'important');
912        iframe.style.setProperty('display', 'block', 'important');
913      }
914    });
915  }
916  
917  // Run multiple times to catch async loading
918  setTimeout(cropInstagramEmbeds, 1000);
919  setTimeout(cropInstagramEmbeds, 2000);
920  setTimeout(cropInstagramEmbeds, 3000);
921  setTimeout(cropInstagramEmbeds, 4000);
922  
923  // Run on load
924  window.addEventListener('load', function() {
925    setTimeout(cropInstagramEmbeds, 500);
926  });
927  
928  // Re-crop on window resize
929  window.addEventListener('resize', cropInstagramEmbeds);
930})();
931</script>
931
932
933<style>
934.instagram-crop-wrapper {
935  position: relative;
936  width: 100%;
937  margin: 0 auto;
938  overflow: hidden !important;
939  background: #fff;
940}
941
942/* Target the actual Instagram iframe classes */
943.instagram-crop-wrapper .instagram-media,
944.instagram-crop-wrapper .instagram-media-rendered {
945  margin: 0 !important;
946  padding: 0 !important;
947  border: none !important;
948  min-width: 100% !important;
949  max-width: 100% !important;
950}
951
952/* Crop the iframe - base styles */
953.instagram-crop-wrapper iframe,
954.instagram-crop-wrapper iframe.instagram-media-rendered {
955  position: relative !important;
956  display: block !important;
957  padding: 0 !important;
958  border: none !important;
959  width: 100% !important;
960}
961
962/* Mobile (up to 768px) - Increased size */
963@media (max-width: 768px) {
964  .instagram-crop-wrapper {
965    max-width: 360px;
966    height: 380px; /* Almost double from 211px */
967  }
968  
969  .instagram-crop-wrapper iframe,
970  .instagram-crop-wrapper iframe.instagram-media-rendered {
971    margin: -60px 0 -120px 0 !important;
972    height: calc(100% + 180px) !important;
973  }
974}
975
976/* Tablet (769px to 1024px) - Keeping as is */
977@media (min-width: 769px) and (max-width: 1024px) {
978  .instagram-crop-wrapper {
979    max-width: 480px;
980    height: 281px;
981  }
982  
983  .instagram-crop-wrapper iframe,
984  .instagram-crop-wrapper iframe.instagram-media-rendered {
985    margin: -64px 0 -128px 0 !important;
986    height: calc(100% + 192px) !important;
987  }
988}
989
990/* Desktop (1025px to 1439px) */
991@media (min-width: 1025px) and (max-width: 1439px) {
992  .instagram-crop-wrapper {
993    max-width: 540px;
994    height: 316px;
995  }
996  
997  .instagram-crop-wrapper iframe,
998  .instagram-crop-wrapper iframe.instagram-media-rendered {
999    margin: -72px 0 -144px 0 !important;
1000    height: calc(100% + 216px) !important;
1001  }
1002}
1003
1004/* Large Desktop (1440px to 1919px) - Keeping as is */
1005@media (min-width: 1440px) and (max-width: 1919px) {
1006  .instagram-crop-wrapper {
1007    max-width: 640px;
1008    height: 375px;
1009  }
1010  
1011  .instagram-crop-wrapper iframe,
1012  .instagram-crop-wrapper iframe.instagram-media-rendered {
1013    margin: -80px 0 -160px 0 !important;
1014    height: calc(100% + 240px) !important;
1015  }
1016}
1017
1018/* Extra Large Desktop (1920px+) - Reduced height */
1019@media (min-width: 1920px) {
1020  .instagram-crop-wrapper {
1021    max-width: 800px;
1022    height: 500px; /* Reduced from 600px */
1023  }
1024  
1025  .instagram-crop-wrapper iframe,
1026  .instagram-crop-wrapper iframe.instagram-media-rendered {
1027    margin: -85px 0 -170px 0 !important;
1028    height: calc(100% + 255px) !important;
1029  }
1030}
1031</style> --></div><img src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a63c115d38bc68ef9e6ea7c_753197579_18103491839601718_6342419425694661972_n.jpeg" loading="lazy" data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24d" alt="" class="image-54"/></a></div><div role="listitem" class="w-dyn-item"><a data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24b" href="https://www.instagram.com/p/DbHEBkUEkyI/" target="_blank" class="div-block-80 w-inline-block"><div class="code-embed-4 w-embed w-iframe w-script"><!-- <div class="instagram-crop-wrapper">
1032  <blockquote 
1033    class="instagram-media" 
1034    data-instgrm-captioned 
1035    data-instgrm-permalink=""
1036    data-instgrm-version="14">
1037  </blockquote>
1038</div>
1039
1040<script async src="//www.instagram.com/embed.js"></script>
1040
1041
1042<script>
1043(function() {
1044  function cropInstagramEmbeds() {
1045    const wrappers = document.querySelectorAll('.instagram-crop-wrapper');
1046    
1047    wrappers.forEach(wrapper => {
1048      const iframe = wrapper.querySelector('iframe.instagram-media-rendered');
1049      
1050      if (iframe) {
1051        // Get viewport width to determine crop values
1052        const viewportWidth = window.innerWidth;
1053        let marginTop, marginBottom, heightAdd;
1054        
1055        if (viewportWidth <= 768) {
1056          // Mobile
1057          marginTop = '-60px';
1058          marginBottom = '-120px';
1059          heightAdd = '180px';
1060        } else if (viewportWidth <= 1024) {
1061          // Tablet
1062          marginTop = '-64px';
1063          marginBottom = '-128px';
1064          heightAdd = '192px';
1065        } else if (viewportWidth <= 1919) {
1066          // Desktop
1067          marginTop = '-80px';
1068          marginBottom = '-160px';
1069          heightAdd = '240px';
1070        } else {
1071          // Large Desktop 1920+
1072          marginTop = '-85px';
1073          marginBottom = '-170px';
1074          heightAdd = '255px';
1075        }
1076        
1077        iframe.style.setProperty('position', 'relative', 'important');
1078        iframe.style.setProperty('margin-top', marginTop, 'important');
1079        iframe.style.setProperty('margin-bottom', marginBottom, 'important');
1080        iframe.style.setProperty('width', '100%', 'important');
1081        iframe.style.setProperty('height', `calc(100% + ${heightAdd})`, 'important');
1082        iframe.style.setProperty('border', 'none', 'important');
1083        iframe.style.setProperty('display', 'block', 'important');
1084      }
1085    });
1086  }
1087  
1088  // Run multiple times to catch async loading
1089  setTimeout(cropInstagramEmbeds, 1000);
1090  setTimeout(cropInstagramEmbeds, 2000);
1091  setTimeout(cropInstagramEmbeds, 3000);
1092  setTimeout(cropInstagramEmbeds, 4000);
1093  
1094  // Run on load
1095  window.addEventListener('load', function() {
1096    setTimeout(cropInstagramEmbeds, 500);
1097  });
1098  
1099  // Re-crop on window resize
1100  window.addEventListener('resize', cropInstagramEmbeds);
1101})();
1102</script>
1102
1103
1104<style>
1105.instagram-crop-wrapper {
1106  position: relative;
1107  width: 100%;
1108  margin: 0 auto;
1109  overflow: hidden !important;
1110  background: #fff;
1111}
1112
1113/* Target the actual Instagram iframe classes */
1114.instagram-crop-wrapper .instagram-media,
1115.instagram-crop-wrapper .instagram-media-rendered {
1116  margin: 0 !important;
1117  padding: 0 !important;
1118  border: none !important;
1119  min-width: 100% !important;
1120  max-width: 100% !important;
1121}
1122
1123/* Crop the iframe - base styles */
1124.instagram-crop-wrapper iframe,
1125.instagram-crop-wrapper iframe.instagram-media-rendered {
1126  position: relative !important;
1127  display: block !important;
1128  padding: 0 !important;
1129  border: none !important;
1130  width: 100% !important;
1131}
1132
1133/* Mobile (up to 768px) - Increased size */
1134@media (max-width: 768px) {
1135  .instagram-crop-wrapper {
1136    max-width: 360px;
1137    height: 380px; /* Almost double from 211px */
1138  }
1139  
1140  .instagram-crop-wrapper iframe,
1141  .instagram-crop-wrapper iframe.instagram-media-rendered {
1142    margin: -60px 0 -120px 0 !important;
1143    height: calc(100% + 180px) !important;
1144  }
1145}
1146
1147/* Tablet (769px to 1024px) - Keeping as is */
1148@media (min-width: 769px) and (max-width: 1024px) {
1149  .instagram-crop-wrapper {
1150    max-width: 480px;
1151    height: 281px;
1152  }
1153  
1154  .instagram-crop-wrapper iframe,
1155  .instagram-crop-wrapper iframe.instagram-media-rendered {
1156    margin: -64px 0 -128px 0 !important;
1157    height: calc(100% + 192px) !important;
1158  }
1159}
1160
1161/* Desktop (1025px to 1439px) */
1162@media (min-width: 1025px) and (max-width: 1439px) {
1163  .instagram-crop-wrapper {
1164    max-width: 540px;
1165    height: 316px;
1166  }
1167  
1168  .instagram-crop-wrapper iframe,
1169  .instagram-crop-wrapper iframe.instagram-media-rendered {
1170    margin: -72px 0 -144px 0 !important;
1171    height: calc(100% + 216px) !important;
1172  }
1173}
1174
1175/* Large Desktop (1440px to 1919px) - Keeping as is */
1176@media (min-width: 1440px) and (max-width: 1919px) {
1177  .instagram-crop-wrapper {
1178    max-width: 640px;
1179    height: 375px;
1180  }
1181  
1182  .instagram-crop-wrapper iframe,
1183  .instagram-crop-wrapper iframe.instagram-media-rendered {
1184    margin: -80px 0 -160px 0 !important;
1185    height: calc(100% + 240px) !important;
1186  }
1187}
1188
1189/* Extra Large Desktop (1920px+) - Reduced height */
1190@media (min-width: 1920px) {
1191  .instagram-crop-wrapper {
1192    max-width: 800px;
1193    height: 500px; /* Reduced from 600px */
1194  }
1195  
1196  .instagram-crop-wrapper iframe,
1197  .instagram-crop-wrapper iframe.instagram-media-rendered {
1198    margin: -85px 0 -170px 0 !important;
1199    height: calc(100% + 255px) !important;
1200  }
1201}
1202</style> --></div><img src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a6137410d0fc1aae859b28a_752937221_18103208072601718_6186199200540104759_n.jpeg" loading="lazy" data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24d" alt="" class="image-54"/></a></div><div role="listitem" class="w-dyn-item"><a data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24b" href="https://www.instagram.com/p/Dayn96pH0Rr/" target="_blank" class="div-block-80 w-inline-block"><div class="code-embed-4 w-embed w-iframe w-script"><!-- <div class="instagram-crop-wrapper">
1203  <blockquote 
1204    class="instagram-media" 
1205    data-instgrm-captioned 
1206    data-instgrm-permalink=""
1207    data-instgrm-version="14">
1208  </blockquote>
1209</div>
1210
1211<script async src="//www.instagram.com/embed.js"></script>
1211
1212
1213<script>
1214(function() {
1215  function cropInstagramEmbeds() {
1216    const wrappers = document.querySelectorAll('.instagram-crop-wrapper');
1217    
1218    wrappers.forEach(wrapper => {
1219      const iframe = wrapper.querySelector('iframe.instagram-media-rendered');
1220      
1221      if (iframe) {
1222        // Get viewport width to determine crop values
1223        const viewportWidth = window.innerWidth;
1224        let marginTop, marginBottom, heightAdd;
1225        
1226        if (viewportWidth <= 768) {
1227          // Mobile
1228          marginTop = '-60px';
1229          marginBottom = '-120px';
1230          heightAdd = '180px';
1231        } else if (viewportWidth <= 1024) {
1232          // Tablet
1233          marginTop = '-64px';
1234          marginBottom = '-128px';
1235          heightAdd = '192px';
1236        } else if (viewportWidth <= 1919) {
1237          // Desktop
1238          marginTop = '-80px';
1239          marginBottom = '-160px';
1240          heightAdd = '240px';
1241        } else {
1242          // Large Desktop 1920+
1243          marginTop = '-85px';
1244          marginBottom = '-170px';
1245          heightAdd = '255px';
1246        }
1247        
1248        iframe.style.setProperty('position', 'relative', 'important');
1249        iframe.style.setProperty('margin-top', marginTop, 'important');
1250        iframe.style.setProperty('margin-bottom', marginBottom, 'important');
1251        iframe.style.setProperty('width', '100%', 'important');
1252        iframe.style.setProperty('height', `calc(100% + ${heightAdd})`, 'important');
1253        iframe.style.setProperty('border', 'none', 'important');
1254        iframe.style.setProperty('display', 'block', 'important');
1255      }
1256    });
1257  }
1258  
1259  // Run multiple times to catch async loading
1260  setTimeout(cropInstagramEmbeds, 1000);
1261  setTimeout(cropInstagramEmbeds, 2000);
1262  setTimeout(cropInstagramEmbeds, 3000);
1263  setTimeout(cropInstagramEmbeds, 4000);
1264  
1265  // Run on load
1266  window.addEventListener('load', function() {
1267    setTimeout(cropInstagramEmbeds, 500);
1268  });
1269  
1270  // Re-crop on window resize
1271  window.addEventListener('resize', cropInstagramEmbeds);
1272})();
1273</script>
1273
1274
1275<style>
1276.instagram-crop-wrapper {
1277  position: relative;
1278  width: 100%;
1279  margin: 0 auto;
1280  overflow: hidden !important;
1281  background: #fff;
1282}
1283
1284/* Target the actual Instagram iframe classes */
1285.instagram-crop-wrapper .instagram-media,
1286.instagram-crop-wrapper .instagram-media-rendered {
1287  margin: 0 !important;
1288  padding: 0 !important;
1289  border: none !important;
1290  min-width: 100% !important;
1291  max-width: 100% !important;
1292}
1293
1294/* Crop the iframe - base styles */
1295.instagram-crop-wrapper iframe,
1296.instagram-crop-wrapper iframe.instagram-media-rendered {
1297  position: relative !important;
1298  display: block !important;
1299  padding: 0 !important;
1300  border: none !important;
1301  width: 100% !important;
1302}
1303
1304/* Mobile (up to 768px) - Increased size */
1305@media (max-width: 768px) {
1306  .instagram-crop-wrapper {
1307    max-width: 360px;
1308    height: 380px; /* Almost double from 211px */
1309  }
1310  
1311  .instagram-crop-wrapper iframe,
1312  .instagram-crop-wrapper iframe.instagram-media-rendered {
1313    margin: -60px 0 -120px 0 !important;
1314    height: calc(100% + 180px) !important;
1315  }
1316}
1317
1318/* Tablet (769px to 1024px) - Keeping as is */
1319@media (min-width: 769px) and (max-width: 1024px) {
1320  .instagram-crop-wrapper {
1321    max-width: 480px;
1322    height: 281px;
1323  }
1324  
1325  .instagram-crop-wrapper iframe,
1326  .instagram-crop-wrapper iframe.instagram-media-rendered {
1327    margin: -64px 0 -128px 0 !important;
1328    height: calc(100% + 192px) !important;
1329  }
1330}
1331
1332/* Desktop (1025px to 1439px) */
1333@media (min-width: 1025px) and (max-width: 1439px) {
1334  .instagram-crop-wrapper {
1335    max-width: 540px;
1336    height: 316px;
1337  }
1338  
1339  .instagram-crop-wrapper iframe,
1340  .instagram-crop-wrapper iframe.instagram-media-rendered {
1341    margin: -72px 0 -144px 0 !important;
1342    height: calc(100% + 216px) !important;
1343  }
1344}
1345
1346/* Large Desktop (1440px to 1919px) - Keeping as is */
1347@media (min-width: 1440px) and (max-width: 1919px) {
1348  .instagram-crop-wrapper {
1349    max-width: 640px;
1350    height: 375px;
1351  }
1352  
1353  .instagram-crop-wrapper iframe,
1354  .instagram-crop-wrapper iframe.instagram-media-rendered {
1355    margin: -80px 0 -160px 0 !important;
1356    height: calc(100% + 240px) !important;
1357  }
1358}
1359
1360/* Extra Large Desktop (1920px+) - Reduced height */
1361@media (min-width: 1920px) {
1362  .instagram-crop-wrapper {
1363    max-width: 800px;
1364    height: 500px; /* Reduced from 600px */
1365  }
1366  
1367  .instagram-crop-wrapper iframe,
1368  .instagram-crop-wrapper iframe.instagram-media-rendered {
1369    margin: -85px 0 -170px 0 !important;
1370    height: calc(100% + 255px) !important;
1371  }
1372}
1373</style> --></div><img src="https://cdn.prod.website-files.com/655161dc9af0d6e6f9bec5b5/6a56c017c9dba7d68f9b74b0_744028695_18102045563601718_6002951371287732303_n.jpeg" loading="lazy" data-w-id="7de78d66-0ccd-828b-f1e4-f12de897e24d" alt="" class="image-54"/></a></div></div></div></div><div class="insta-bottom"><div><h2 class="heading-style-h2 cc-smaller">Our work<span class="text-span-5"> speaks for itself.</span></h2></div><div><div class="footer2_form-block w-form"><form id="email-form" name="email-form" data-name="Email Form" method="get" class="footer2_form cc-dark" data-wf-page-id="683dd4e18841ecef777ffee4" data-wf-element-id="7de78d66-0ccd-828b-f1e4-f12de897e259"><input class="form_input cc-dark darker w-input" maxlength="256" name="email-2" data-name="Email 2" placeholder="Email Address" type="email" id="email-2" required=""/><input type="submit" data-wait="" aria-label="Subscribe to our Newsletter" class="button is-secondary is-small cc-arrow dark w-button" value=""/></form><div class="form_message-success-wrapper w-form-done"><div class="form_message-success"><div>Thank you! Your submission has been received!</div></div></div><div class="form_message-error-wrapper w-form-fail"><div class="form_message-error"><div>Oops! Something went wrong while submitting the form.</div></div></div></div></div></div></div></div></div></section><section class="footer-light"><div class="container-7"><div class="footer-wrapper-two"><a href="#" class="footer-brand w-inline-block"><img loading="lazy" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/683dd57d177d94c034aaad73_Story_logo_black%201.svg" alt="" class="footer2_logo"/><div class="text-block-33">An integrated design build studio<br/>serving greater Denver, Phoenix and Dallas. </div></a><div class="footer-block-two"><div class="text-weight-semibold">Info</div><div class="div-block-69"><div class="footer2_link-list is-grid"><a href="/process" class="footer2_link">How it Works</a><link rel="prefetch" href="/process"/><a href="/services" class="footer2_link">Services</a><link rel="prefetch" href="/services"/><a href="/our-projects" class="footer2_link">Projects</a><link rel="prefetch" href="/our-projects"/></div><div class="footer2_link-list is-grid"><a href="/team" class="footer2_link">About Us</a><link rel="prefetch" href="/team"/><a href="/blog" class="footer2_link">Blog</a><link rel="prefetch" href="/blog"/><a href="/contact-us" class="footer2_link">Contact</a><link rel="prefetch" href="/contact-us"/></div></div></div><div class="footer-block-two"><div class="text-weight-semibold">Questions</div><a href="tel:833-671-9713" class="link-3">Call us at 833-671-9713<br/>Email us at [email protected]</a><div class="text-size-small">2650 W. Belleview Ave, Suite 300<br/>Littleton, CO 80123</div></div><div class="footer-block-two"><div class="text-weight-semibold">Follow Us</div><div class="footer2_link-list is-flex"><div class="w-layout-grid social-icons1_list"><a aria-label="instagram" href="https://www.instagram.com/storyrenovations/" target="_blank" class="social-icons1_link 
1373w-inline-block"><div class="icon-embed-xsmall w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1374<path fill-rule="evenodd" clip-rule="evenodd" d="M16 3H8C5.23858 3 3 5.23858 3 8V16C3 18.7614 5.23858 21 8 21H16C18.7614 21 21 18.7614 21 16V8C21 5.23858 18.7614 3 16 3ZM19.25 16C19.2445 17.7926 17.7926 19.2445 16 19.25H8C6.20735 19.2445 4.75549 17.7926 4.75 16V8C4.75549 6.20735 6.20735 4.75549 8 4.75H16C17.7926 4.75549 19.2445 6.20735 19.25 8V16ZM16.75 8.25C17.3023 8.25 17.75 7.80228 17.75 7.25C17.75 6.69772 17.3023 6.25 16.75 6.25C16.1977 6.25 15.75 6.69772 15.75 7.25C15.75 7.80228 16.1977 8.25 16.75 8.25ZM12 7.5C9.51472 7.5 7.5 9.51472 7.5 12C7.5 14.4853 9.51472 16.5 12 16.5C14.4853 16.5 16.5 14.4853 16.5 12C16.5027 10.8057 16.0294 9.65957 15.1849 8.81508C14.3404 7.97059 13.1943 7.49734 12 7.5ZM9.25 12C9.25 13.5188 10.4812 14.75 12 14.75C13.5188 14.75 14.75 13.5188 14.75 12C14.75 10.4812 13.5188 9.25 12 9.25C10.4812 9.25 9.25 10.4812 9.25 12Z" fill="CurrentColor"/>
1375</svg></div></a><a aria-label="facebook" href="https://www.facebook.com/storyrenovations/" target="_blank" class="social-icons1_link w-inline-block"><div class="icon-embed-xsmall w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1376<path d="M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3088 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1739V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.083 22 12.0611Z" fill="CurrentColor"/>
1377</svg></div></a><a aria-label="houzz" href="https://www.houzz.com/professionals/design-build-firms/story-renovations-pfvwus-pf~1103201291?" target="_blank" class="social-icons1_link w-inline-block"><div class="icon-embed-xsmall-copy w-embed"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--simple-icons" width="100%" height="100%" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M1.27 0v24h8.05v-7.56h5.36V24h8.05V10.37L6.61 5.75V0z"></path></svg></div></a><a aria-label="pinterest" href="https://www.pinterest.com/StoryRenovations/" target="_blank" class="social-icons1_link w-inline-block"><div class="icon-embed-xsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--carbon" width="100%" height="100%" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path fill="currentColor" d="M16 2a14 14 0 0 0-5.1 27a13.2 13.2 0 0 1 0-4l1.65-7a5.05 5.05 0 0 1-.38-2c0-1.94 1.13-3.4 2.53-3.4a1.76 1.76 0 0 1 1.77 2c0 1.2-.76 3-1.16 4.66a2 2 0 0 0 2.08 2.53c2.48 0 4.4-2.63 4.4-6.41a5.53 5.53 0 0 0-5.85-5.7a6.06 6.06 0 0 0-6.32 6.08a5.42 5.42 0 0 0 1 3.19a.44.44 0 0 1 .1.4c-.11.44-.35 1.4-.39 1.59s-.21.31-.47.19c-1.75-.82-2.84-3.37-2.84-5.43c0-4.41 3.21-8.47 9.25-8.47c4.85 0 8.63 3.46 8.63 8.09c0 4.82-3 8.7-7.27 8.7a3.76 3.76 0 0 1-3.21-1.6l-.87 3.33a15.6 15.6 0 0 1-1.74 3.67A14.2 14.2 0 0 0 16 30a14 14 0 0 0 0-28"></path></svg></div></a><a aria-label="linkedin" href="https://www.linkedin.com/company/story-renovations/" target="_blank" class="social-icons1_link w-inline-block"><div class="icon-embed-xsmall w-embed"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--carbon" width="100%" height="100%" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path fill="currentColor" d="M26.2 4H5.8C4.8 4 4 4.8 4 5.7v20.5c0 .9.8 1.7 1.8 1.7h20.4c1 0 1.8-.8 1.8-1.7V5.7c0-.9-.8-1.7-1.8-1.7M11.1 24.4H7.6V13h3.5zm-1.7-13c-1.1 0-2.1-.9-2.1-2.1s.9-2.1 2.1-2.1c1.1 0 2.1.9 2.1 2.1s-1 2.1-2.1 2.1m15.1 12.9H21v-5.6c0-1.3 0-3.1-1.9-3.1S17 17.1 17 18.5v5.7h-3.5V13h3.3v1.5h.1c.5-.9 1.7-1.9 3.4-1.9c3.6 0 4.3 2.4 4.3 5.5v6.2z"></path></svg></div></a></div></div></div><div class="footer2_right-wrapper"><div class="text-weight-semibold">Get our Newsletter</div><div class="spacer-xsmall"></div><div class="footer2_form-block w-form"><form id="email-form" name="email-form" data-name="Email Form" method="get" class="footer2_form" data-wf-page-id="683dd4e18841ecef777ffee4" data-wf-element-id="a7c87823-d3b0-d4ea-6596-8f03ed9c037d"><input class="form_input white w-input" maxlength="256" name="email-2" data-name="Email 2" placeholder="Email Address" type="email" id="email-2" required=""/><input type="submit" data-wait="" aria-label="Subscribe to our Newsletter" class="button is-secondary is-small cc-arrow w-button" value=""/></form><div class="text-size-small is-sm">By subscribing you agree to our<a href="/privacy-policy"> Privacy Policy</a></div><div class="form_message-success-wrapper w-form-done"><div class="form_message-success"><div>Thank you! Your submission has been received!</div></div></div><div class="form_message-error-wrapper w-form-fail"><div class="form_message-error"><div>Oops! Something went wrong while submitting the form.</div></div></div></div></div></div><div class="footer-divider-two"></div><div class="footer-bottom"><div class="w-layout-grid footer2_legal-list"><div class="text-size-small">© <span class="footer-year">2025</span> Story. All rights reserved.</div><a href="/privacy-policy" class="footer2_legal-link">Privacy Policy</a><link rel="prefetch" href="/privacy-policy"/><div class="w-embed w-script"><!-- Change Footer Year -->
1378<script>
1379// when the DOM is ready
1380document.addEventListener("DOMContentLoaded", function() { 
1381  // get the the span element
1382  const yrSpan = document.querySelector('.footer-year');
1383  // get the current year
1384  const currentYr = new Date().getFullYear();
1385  // set the year span element's text to the current year
1386  yrSpan.textContent = currentYr;
1387});
1388</script>
1388</div></div></div></div></section></div><div class="set-all-components-to-display-none-and-use-this-div-to-create-a-symbol"><div fs-cc="banner" class="fs-cc-banner2_component"><div class="fs-cc-banner2_container"><div class="fs-cc-banner2_text">By clicking “Accept”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our <a href="/privacy-policy" class="fs-cc-banner2_text-link">Privacy Policy</a> for more information.</div><div class="fs-cc-banner2_buttons-wrapper"><a fs-cc="deny" href="#" class="fs-cc-banner2_button fs-cc-button-alt button outline w-button">Deny</a><a fs-cc="allow" href="#" class="fs-cc-banner2_button button w-button">Accept</a></div></div></div></div><div data-animation="default" class="navbar16_component is-black w-nav" data-easing2="ease" fs-scrolldisable-element="smart-nav" data-easing="ease" data-collapse="all" data-w-id="971ca03e-8eee-6879-b9f6-c81c4ce4e986" role="banner" data-duration="0" data-doc-height="1"><div class="navbar16_container"><a href="/old-home" class="brand-2 w-nav-brand"><img width="162" height="60" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/682795958a763c44cf9d6cee_Story_logo_black%201.svg" loading="lazy" class="image-45"/></a><div class="navbar16_wrapper"><a href="/start-my-project" class="button is-navbar16-button is-gold w-button">Start a Project</a><a href="/contact-us" class="button is-navbar16-button is-black w-button">Contact Us</a><nav role="navigation" class="navbar16_menu w-nav-menu"><div class="navbar16_menu-wrapper"><div class="main-nav-wrapper"><a href="/process" class="nav-link _1 w-inline-block"><h3 class="cta37_link-text">How it Works</h3><div class="cta37_link-image-wrapper pointer-events-off"><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero-p-1080.webp 1080w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero.webp 1600w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero.webp" loading="eager" class="cta37_link-image"/></div></a><a href="/our-projects" class="nav-link _2 w-inline-block"><h3 class="cta37_link-text">Projects</h3><div class="cta37_link-image-wrapper pointer-events-off"><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%2520Image%25201-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%2520Image%25201-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%2520Image%25201-p-1080.webp 1080w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%20Image%201.webp 1280w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%20Image%201.webp" loading="eager" class="cta37_link-image"/></div></a><a href="/services" class="nav-link _3 w-inline-block"><h3 class="cta37_link-text">Services</h3><div class="cta37_link-image-wrapper pointer-events-off"><img loading="eager" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a04_Rectangle%2048.webp" alt="" class="cta37_link-image"/></div></a><a href="/team" class="nav-link _4 w-inline-block"><h3 class="cta37_link-text">About Us</h3><div class="cta37_link-image-wrapper pointer-events-off"><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%2520Image%25201-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%2520Image%25201-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%2520Image%25201-p-1080.webp 1080w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%20Image%201.webp 1280w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce79ee_Placeholder%20Image%201.webp" loading="eager" class="cta37_link-image"/></div></a><a href="/blog" class="nav-link _5 w-inline-block"><h3 class="cta37_link-text">Blog</h3><div class="cta37_link-image-wrapper pointer-events-off"><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero-p-1080.webp 1080w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero.webp 1600w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/655e68ddeb49c926788bae75_custom-homes-hero.webp" loading="eager" class="cta37_link-image"/></div></a><a href="/contact-us" class="nav-link _6 w-inline-block"><h3 class="cta37_link-text">Contact</h3><div class="cta37_link-image-wrapper pointer-events-off"><img loading="eager" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677d6c407dee7ccadbce7a04_Rectangle%2048.webp" alt="" class="cta37_link-image"/></div></a><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3e358cb0befa2f8500c_image-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3e358cb0befa2f8500c_image-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3e358cb0befa2f8500c_image.webp 820w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3e358cb0befa2f8500c_image.webp" loading="lazy" class="img-1"/><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3f1c9bfd72c68c44531_Placeholder%20Image%209-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3f1c9bfd72c68c44531_Placeholder%20Image%209.webp 606w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3f1c9bfd72c68c44531_Placeholder%20Image%209.webp" loading="lazy" class="img-2"/><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3fcb24002ad5c60bb79_Placeholder%20Image%207-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3fcb24002ad5c60bb79_Placeholder%20Image%207-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3fcb24002ad5c60bb79_Placeholder%20Image%207.webp 820w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb3fcb24002ad5c60bb79_Placeholder%20Image%207.webp" loading="lazy" class="img-3"/><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb40ee31103a574520ac1_Placeholder%20Image%2010-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb40ee31103a574520ac1_Placeholder%20Image%2010.webp 606w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb40ee31103a574520ac1_Placeholder%20Image%2010.webp" loading="lazy" class="img-4"/><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb419063f9a8fb3d0b1ae_Placeholder%20Image%208-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb419063f9a8fb3d0b1ae_Placeholder%20Image%208-p-800.webp 800w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb419063f9a8fb3d0b1ae_Placeholder%20Image%208.webp 820w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb419063f9a8fb3d0b1ae_Placeholder%20Image%208.webp" loading="lazy" class="img-5"/><img sizes="100vw" srcset="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb42a289eb13b8411c9e5_Placeholder%20Image%206-p-500.webp 500w, https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb42a289eb13b8411c9e5_Placeholder%20Image%206.webp 820w" alt="" src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/677eb42a289eb13b8411c9e5_Placeholder%20Image%206.webp" loading="lazy" class="img-6"/></div></div></nav><div class="navbar16_menu-button w-nav-button"><div class="div-block-7"></div><div class="menu-icon4"><div class="menu-icon4_wrapper"><div class="menu-icon4_line-top"></div><div class="menu-icon4_line-middle"><div class="menu-icon4_line-middle-top"></div><div class="menu-icon4_line-middle-base"></div></div><div class="menu-icon4_line-bottom"></div></div></div></div></div></div></div><div data-animation="default" class="navigation filled w-nav" data-easing2="ease" fs-scrolldisable-element="smart-nav" data-easing="ease" data-collapse="medium" data-w-id="82ec9e33-a395-4490-b23b-e3a18efe29c9" role="banner" data-duration="400"><div class="navbar2_container"><a href="/" id="w-node-f2bb327d-39e4-bab5-8dba-b94cdd413993-8efe29c9" aria-current="page" class="nav-link-logo w-nav-brand w--current"><div class="w-embed"><svg xmlns="http://www.w3.org/2000/svg" style="display: block;
1388" width="100%" height="100%" viewBox="0 0 139 40" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
1389  <path d="M55.7761 11.649H45.7921C44.8042 11.649 44.0281 12.456 44.0281 13.4034C44.0281 13.9297 44.2045 14.3508 44.4867 14.5964C45.2629 15.3332 46.9915 15.228 48.3674 15.1578C49.0377 15.1578 49.6375 15.0876 50.1667 15.1578C55.141 15.2981 57.3989 19.0174 57.3989 22.456C57.3989 25.8946 55.141 29.6139 50.1667 29.7543H38.4893V24.2104H50.1314C51.1192 24.2104 51.8954 23.4034 51.8954 22.456C51.8954 21.5087 51.0839 20.7016 50.1314 20.7016C49.1789 20.7016 49.2141 20.7016 48.6849 20.7016C46.039 20.7367 42.758 20.8069 40.8177 18.7367C38.5951 16.8069 37.8895 13.649 39.0537 10.7367C40.1827 7.89463 42.758 6.07007 45.6157 6.07007H55.7761V11.6139V11.649Z" fill="currentColor"/>
1390  <path d="M84.952 29.9999C78.3195 29.9999 72.957 24.5613 72.957 17.8596C72.957 11.1578 78.3195 5.71924 84.952 5.71924C91.5844 5.71924 96.9469 11.1578 96.9469 17.8596C96.9469 24.5613 91.5844 29.9999 84.952 29.9999ZM91.3022 17.9298C91.3022 14.3859 88.4446 11.5087 84.952 11.5087C81.4593 11.5087 78.6017 14.3859 78.6017 17.9298C78.6017 21.4736 81.4593 24.3508 84.952 24.3508C88.4446 24.3508 91.3022 21.4736 91.3022 17.9298Z" fill="currentColor"/>
1391  <path d="M124.465 29.158L121.113 37.9299H127.181L138.682 5.92993H132.861L127.463 22.0352L121.536 5.92993H115.574L124.5 29.158H124.465Z" fill="currentColor"/>
1392  <path d="M71.37 11.7192V6.14026H65.9017V0.70166H60.6098V6.14026H58.2461V11.7192H60.6098V24.5262C60.6098 27.3683 62.8324 29.649 65.5842 29.649H71.37V24.0701H65.9017V11.7192H71.37Z" fill="currentColor"/>
1393  <path d="M104.673 8.66657V5.92973H99.3105V29.7543H104.673V17.5789C104.673 14.3508 107.107 11.5789 110.353 11.3332C111.059 11.2982 111.764 11.3332 112.505 11.5438L114.022 5.92973C110.741 5.05254 106.719 6.31569 104.708 8.70166L104.673 8.66657Z" fill="currentColor"/>
1394  <path d="M15.0289 23.5789L8.71396 29.8596H21.3792L15.0642 23.5789H15.0289ZM16.0168 0.982456L15.0289 0L0 14.807V22.9123L19.0155 4L16.0168 1.01754V0.982456ZM17.0751 21.8246L25.1541 29.8596H30.0226V26.5614L21.1675 17.7544L17.0751 21.8246ZM20.8147 6L0 26.7017V29.8596H4.97437L20.9558 13.9649L30.0579 23.0175V14.9123L20.9911 5.89474L20.85 6.03509L20.8147 6Z" fill="currentColor"/>
1395</svg></div></a><nav role="navigation" id="w-node-f2bb327d-39e4-bab5-8dba-b94cdd413995-8efe29c9" class="navbar2_menu is-page-height-tablet w-nav-menu"><a href="/process" class="navbar2_link light alt w-nav-link">How It Works</a><div data-delay="200" data-hover="true" data-w-id="6651d933-3522-4452-febc-322a6a4c3dc8" class="dropdown-3 w-dropdown"><div class="navbar3_dropdown-toggle w-dropdown-toggle"><div class="text-block-37">Services</div><div class="dropdown-chevron w-embed"><svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
1396<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
1397</svg></div></div><nav class="navbar3_dropdown-list w-dropdown-list"><a href="/services" class="navbar2_link light alt w-dropdown-link">All Services</a><a href="/landing/residential-architecture" class="navbar2_link light alt w-dropdown-link">Architecture</a><a href="/services/interior-design" class="navbar2_link light alt w-dropdown-link">Interior Design</a><a href="/services/renovations-and-additions" class="navbar2_link light alt w-dropdown-link">Renovations &amp; Additions</a><a href="/services/custom-homes" class="navbar2_link light alt w-dropdown-link">Custom Homes</a><a href="/furnishing" class="navbar2_link light alt w-dropdown-link">Furnishing</a></nav></div><a href="/our-projects" class="navbar2_link light alt w-nav-link">Projects</a><a href="/design-studio" class="navbar2_link light alt hidden w-nav-link">AI Design Studio</a><a href="/design-studio" class="navbar2_link light w-nav-link">AI Design Studio</a><a href="/team" class="navbar2_link light alt w-nav-link">About</a><a href="/blog" class="navbar2_link light alt w-nav-link">Blog</a><a href="/contact-us" class="navbar2_link light alt w-nav-link">Contact</a><a href="https://app.storyrenovations.com/" target="_blank" class="navbar2_link light alt">Client Login</a><link rel="noopener" href="https://app.storyrenovations.com/"/><a href="/start-my-project" class="button is-icon nav dropdown w-inline-block"><div class="text-block-34">Start My Project</div><div class="white-arrow w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewB
1397ox="0 0 16 16" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
1398<g clip-path="url(#clip0_5204_438)">
1399<path d="M0 8C0 10.1217 0.842855 12.1566 2.34315 13.6569C3.84344 15.1571 5.87827 16 8 16C10.1217 16 12.1566 15.1571 13.6569 13.6569C15.1571 12.1566 16 10.1217 16 8C16 5.87827 15.1571 3.84344 13.6569 2.34315C12.1566 0.842855 10.1217 0 8 0C5.87827 0 3.84344 0.842855 2.34315 2.34315C0.842855 3.84344 0 5.87827 0 8ZM9.28125 12.0312C8.9875 12.325 8.5125 12.325 8.22188 12.0312C7.93125 11.7375 7.92813 11.2625 8.22188 10.9719L10.4406 8.75313L3.75 8.75C3.33437 8.75 3 8.41563 3 8C3 7.58437 3.33437 7.25 3.75 7.25H10.4406L8.22188 5.03125C7.92813 4.7375 7.92813 4.2625 8.22188 3.97187C8.51563 3.68125 8.99062 3.67812 9.28125 3.97187L12.7812 7.46875C13.075 7.7625 13.075 8.2375 12.7812 8.52812L9.28125 12.0312Z" fill="currentColor"/>
1400</g>
1401<defs>
1402<clipPath id="clip0_5204_438">
1403<rect width="16" height="16" fill="currentColor"/>
1404</clipPath>
1405</defs>
1406</svg></div></a></nav><div id="w-node-f2bb327d-39e4-bab5-8dba-b94cdd4139a6-8efe29c9" class="navbar2_button-wrapper"><a href="/start-my-project" class="button is-icon nav w-inline-block"><div class="text-block-34">Start My Project</div><div class="white-arrow w-embed"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 16 16" fill="none" preserveAspectRatio="xMidYMid meet" overflow="visible">
1407  <path d="M0 8C0 10.1217 0.842855 12.1566 2.34315 13.6569C3.84344 15.1571 5.87827 16 8 16C10.1217 16 12.1566 15.1571 13.6569 13.6569C15.1571 12.1566 16 10.1217 16 8C16 5.87827 15.1571 3.84344 13.6569 2.34315C12.1566 0.842855 10.1217 0 8 0C5.87827 0 3.84344 0.842855 2.34315 2.34315C0.842855 3.84344 0 5.87827 0 8ZM9.28125 12.0312C8.9875 12.325 8.5125 12.325 8.22188 12.0312C7.93125 11.7375 7.92813 11.2625 8.22188 10.9719L10.4406 8.75313L3.75 8.75C3.33437 8.75 3 8.41563 3 8C3 7.58437 3.33437 7.25 3.75 7.25H10.4406L8.22188 5.03125C7.92813 4.7375 7.92813 4.2625 8.22188 3.97187C8.51563 3.68125 8.99062 3.67812 9.28125 3.97187L12.7812 7.46875C13.075 7.7625 13.075 8.2375 12.7812 8.52812L9.28125 12.0312Z" fill="currentColor"/>
1408</svg></div></a><div class="navbar2_menu-button w-nav-button"><div class="menu-icon2"><div class="menu-icon2_line-top"></div><div class="menu-icon2_line-middle"><div class="menu-icon2_line-middle-inner"></div></div><div class="menu-icon2_line-bottom"></div></div></div></div></div></div><div class="w-embed"></div>
1408<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=65511c14a69010c6ced966df" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
1408<script src="https://cdn.prod.website-files.com/65511c14a69010c6ced966df/js/webflow.6520cd2a.4ee7a934f5f00cc8.js" type="text/javascript" integrity="sha384-KjiK3bOOL00QkLSbH5xlZaldT4lWyYJb3SS+AWeGtqvbhXlWyB82WiAe2AblAaPP" crossorigin="anonymous"></script>
1408<!-- Performance Core -->
1409<script>
1410// Mobile performance optimization toolkit
1411(function () {
1412  let startTime = performance.now();
1413  const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
1414
1415  function loadScripts() {
1416    const scriptsToLoad = [
1417      { src: "https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js", priority: "high" },
1418      { src: "https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js", priority: "high" },
1419      { src: "https://cdn.jsdelivr.net/gh/timothydesign/script/split-type.js", priority: "high" },
1420      { src: "https://cdn.jsdelivr.net/npm/@finsweet/attributes-scrolldisable@1/scrolldisable.js", priority: "low", attributes: { defer: true } },
1421      { src: "https://cdn.jsdelivr.net/npm/visualdx@1/dist/vdx.min.js", priority: "low" }
1422    ];
1423
1424    const priorityOrder = { "high": 0, "medium": 1, "low": 2 };
1425    scriptsToLoad.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
1426
1427    let highPriorityLoaded = Promise.resolve();
1428
1429    scriptsToLoad.forEach(script => {
1430      const loadScript = () => {
1431        return new Promise((resolve) => {
1432          const scriptEl = document.createElement('script');
1433          scriptEl.src = script.src;
1434          if (script.attributes) {
1435            Object.entries(script.attributes).forEach(([key, value]) => {
1436              scriptEl.setAttribute(key, value);
1437            });
1438          }
1439          scriptEl.onload = () => resolve();
1440          document.body.appendChild(scriptEl);
1441        });
1442      };
1443
1444      if (script.priority === "high") {
1445        highPriorityLoaded = highPriorityLoaded.then(loadScript);
1446      } else {
1447        loadScript();
1448      }
1449    });
1450
1451    return highPriorityLoaded;
1452  }
1453
1454  document.addEventListener('DOMContentLoaded', function () {
1455    loadScripts().then(() => {
1456      initAnimations();
1457    });
1458
1459    optimizeImages();
1460    initFormValidations();
1461
1462    console.log(`Page fully initialized in ${(performance.now() - startTime).toFixed(0)}ms`);
1463  });
1464
1465  function initAnimations() {
1466    if (typeof gsap === 'undefined') return;
1467    if (typeof ScrollTrigger === 'undefined') {
1468      setTimeout(initAnimations, 100);
1469      return;
1470    }
1471
1472    gsap.registerPlugin(ScrollTrigger);
1473    initNavHover();
1474    initH1Animations();
1475    initFadeUpAnimations();
1476    initScaleOnHover();
1477  }
1478
1479  function initNavHover() {
1480    const navLinks = document.querySelectorAll('[class*="nav-link"]');
1481    const mediaQuery = window.matchMedia('(min-width: 992px)');
1482    let isDesktop = mediaQuery.matches;
1483
1484    navLinks.forEach((link, index) => {
1485      const img = document.querySelector(`.img-${index + 1}`);
1486      if (!img) return;
1487
1488      const textElement = link.querySelector('.cta37_link-text');
1489      if (!textElement) return;
1490
1491      gsap.set(img, {
1492        display: 'none',
1493        opacity: 0,
1494        y: 20,
1495        scale: 0.95
1496      });
1497
1498      gsap.set(textElement, {
1499        fontFamily: '"Instrument Sans", sans-serif',
1500        fontWeight: 400
1501      });
1502
1503      const tl = gsap.timeline({ paused: true });
1504      tl.set(img, { display: isDesktop ? 'block' : 'none' })
1505        .to(textElement, {
1506          fontFamily: '"Instrument Serif", serif',
1507          fontWeight: 400
1508        })
1509        .to(img, {
1510          opacity: 1,
1511          y: 0,
1512          scale: 1
1513        }, '<');
1514
1515      const tlReverse = gsap.timeline({ paused: true });
1516      tlReverse.to(img, {
1517        opacity: 0,
1518        y: 10,
1519        scale: 0.98,
1520        onComplete: () => gsap.set(img, { display: 'none' })
1521      }).to(textElement, {
1522        fontFamily: '"Instrument Sans", sans-serif',
1523        fontWeight: 400
1524      }, '<');
1525
1526      link.addEventListener('mouseenter', () => isDesktop && tl.restart());
1527      link.addEventListener('mouseleave', () => isDesktop && tlReverse.restart());
1528    });
1529  }
1530
1531  function initH1Animations() {
1532    if (typeof SplitType === 'undefined' || typeof gsap === 'undefined') return;
1533
1534    function runAnimation() {
1535      const headers = document.querySelectorAll('.animate-h1');
1536
1537      headers.forEach(el => {
1538        el.setAttribute("data-text-split", "");
1539        el.style.opacity = "0";
1540      });
1541
1542      new SplitType('.animate-h1', {
1543        types: 'words',
1544        tagName: 'span',
1545        preserveWhitespace: true
1546      });
1547
1548      gsap.utils.toArray('.animate-h1').forEach(el => {
1549        const timeline = gsap.timeline();
1550        timeline
1551          .to(el, {
1552            opacity: 1,
1553            duration: 0.2,
1554            ease: 'power1.out'
1555          })
1556          .from(el.querySelectorAll('.word'), {
1557            opacity: 0,
1558            yPercent: 20,
1559            duration: 0.5,
1560            ease: 'power2.out',
1561            stagger: { amount: 0.6 }
1562          }, '<+0.1');
1563      });
1564
1565      ScrollTrigger?.refresh();
1566    }
1567
1568    Promise.all([
1569      document.fonts.ready,
1570      new Promise(resolve => requestAnimationFrame(() => setTimeout(resolve, 100)))
1571    ]).then(runAnimation);
1572
1573    window.addEventListener('load', () => {
1574      setTimeout(() => {
1575        if (window.ScrollTrigger) ScrollTrigger.refresh();
1576      }, 1500);
1577    });
1578  }
1579
1580  function initFadeUpAnimations() {
1581    const elements = document.querySelectorAll(".animate-on-scroll");
1582    elements.forEach(el => {
1583      gsap.set(el, { opacity: 0, y: 30 });
1584      gsap.to(el, {
1585        scrollTrigger: {
1586          trigger: el,
1587          start: "top 85%",
1588          end: "top 50%",
1589          toggleActions: "play none none none"
1590        },
1591        opacity: 1,
1592        y: 0,
1593        duration: isMobile ? 0.8 : 1.2,
1594        ease: "power2.out"
1595      });
1596    });
1597  }
1598
1599  function initScaleOnHover() {
1600    const elements = document.querySelectorAll('.scale');
1601    elements.forEach(el => {
1602      el.addEventListener('mouseenter', () => {
1603        gsap.to(el, { scale: 1.02, duration: 0.3, ease: "power2.out" });
1604      });
1605      el.addEventListener('mouseleave', () => {
1606        gsap.to(el, { scale: 1, duration: 0.3, ease: "power2.out" });
1607      });
1608    });
1609  }
1610
1611  function optimizeImages() {
1612  const images = document.querySelectorAll('img:not([data-pin-processed])');
1613  images.forEach(img => {
1614    // Mark as processed to avoid re-checking
1615    img.setAttribute('data-pin-processed', 'true');
1616    
1617    // Existing lazy loading logic
1618    if (!img.hasAttribute('loading') && !img.hasAttribute('fetchpriority')) {
1619      const rect = img.getBoundingClientRect();
1620      if (rect.top > window.innerHeight) {
1621        img.setAttribute('loading', 'lazy');
1622        img.setAttribute('fetchpriority', 'low');
1623      }
1624    }
1625    
1626    // Exclude UI/navigation/hero/lightbox thumbnail images from Pinterest
1627    if (img.closest('.navigation') || 
1628        img.closest('.footer') || 
1629        img.classList.contains('logo') ||
1630        img.closest('[class*="nav"]') ||
1631        img.closest('[class*="icon"]') ||
1632        img.closest('.portfolio4-header_image-wrapper') ||
1633        img.classList.contains('portfolio4-header_image') ||
1634        img.closest('.lightbox-link') ||
1635        img.closest('.w-lightbox-thumbnail') ||
1636        img.closest('[class*="lightbox"]') ||
1637        img.closest('[class*="thumbnail"]')) {
1638      img.setAttribute('data-pin-nopin', 'true');
1639    }
1640  });
1641}
1642
1643// Initial run
1644document.addEventListener('DOMContentLoaded', optimizeImages);
1645
1646// Targeted fix: Only watch for Webflow lightbox opening
1647document.addEventListener('click', (e) => {
1648  if (e.target.closest('.lightbox-link, .w-lightbox-control')) {
1649    // Small delay for lightbox to render
1650    setTimeout(optimizeImages, 100);
1651  }
1652});
1653  function initFormValidations() {
1654    // Your form validation logic
1655  }
1656})();
1657</script>
1657
1658
1659<!-- Homepage Project Link Handling -->
1660<script>
1661// Homepage Script - Add to the page with project type links
1662document.addEventListener('DOMContentLoaded', function() {
1663  // Find all project type link blocks
1664  const projectLinks = document.querySelectorAll('.project-type.scale');
1665  
1666  // Add click handlers to each project link
1667  projectLinks.forEach(link => {
1668    link.addEventListener('click', function(e) {
1669      e.preventDefault();
1670      
1671      // Get the project type from the data attribute
1672      const projectType = this.getAttribute('data-project');
1673      
1674      // Store the selection in localStorage
1675      localStorage.setItem('selectedProject', projectType);
1676      
1677      // Navigate to the form page
1678      window.location.href = '/start-my-project';
1679    });
1680  });
1681});
1682</script>
1682
1683
1684<!-- Nav dropshadow -->
1685<script>
1686// Robust Navbar Drop Shadow Script (No GSAP Required)
1687// Add this script to your Webflow site's custom code section
1688
1689(function() {
1690  'use strict';
1691  
1692  console.log('Shadow script starting...');
1693  
1694  function initShadowEffect() {
1695    // Try multiple ways to find the navbar
1696    let navbar = document.querySelector('.navigation.filled') || 
1697                 document.querySelector('.navigation') ||
1698                 document.querySelector('[data-w-id="82ec9e33-a395-4490-b23b-e3a18efe29c9"]') ||
1699                 document.querySelector('.w-nav');
1700    
1701    if (!navbar) {
1702      console.error('Could not find navbar. Available nav elements:', 
1703        Array.from(document.querySelectorAll('[class*="nav"]')).map(el => el.className)
1704      );
1705      return;
1706    }
1707    
1708    console.log('Found navbar:', navbar.className);
1709    
1710    // Add CSS transition and initial styles with smoother easing
1711    navbar.style.transition = 'box-shadow 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)';
1712    navbar.style.boxShadow = 'none';
1713    
1714    // Force higher specificity by using !important in a style tag
1715    const styleTag = document.createElement('style');
1716    styleTag.innerHTML = `
1717      .navigation.shadow-active {
1718        box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1) !important;
1719      }
1720      .navigation {
1721        transition: box-shadow 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
1722      }
1723    `;
1724    document.head.appendChild(styleTag);
1725    
1726    console.log('Styles applied');
1727    
1728    let isScrolled = false;
1729    let ticking = false;
1730    
1731    function updateShadow() {
1732      const scrollY = window.pageYOffset || document.documentElement.scrollTop;
1733      
1734      if (scrollY > 10 && !isScrolled) {
1735        isScrolled = true;
1736        navbar.classList.add('shadow-active');
1737        console.log('Shadow added at scroll:', scrollY);
1738        
1739        // Fallback direct style application
1740        navbar.style.boxShadow = '0 2px 20px rgba(0, 0, 0, 0.1)';
1741        
1742      } else if (scrollY <= 10 && isScrolled) {
1743        isScrolled = false;
1744        navbar.classList.remove('shadow-active');
1745        console.log('Shadow removed at scroll:', scrollY);
1746        
1747        // Fallback direct style application
1748        navbar.style.boxShadow = 'none';
1749      }
1750      
1751      ticking = false;
1752    }
1753    
1754    function onScroll() {
1755      if (!ticking) {
1756        requestAnimationFrame(updateShadow);
1757        ticking = true;
1758      }
1759    }
1760    
1761    // Attach scroll listener
1762    window.addEventListener('scroll', onScroll, { passive: true });
1763    
1764    // Initial check
1765    updateShadow();
1766    
1767    console.log('Shadow effect initialized successfully');
1768  }
1769  
1770  // Wait for DOM to be ready
1771  if (document.readyState === 'loading') {
1772    document.addEventListener('DOMContentLoaded', initShadowEffect);
1773  } else {
1774    initShadowEffect();
1775  }
1776  
1777  // Also try after a short delay in case of timing issues
1778  setTimeout(initShadowEffect, 100);
1779  
1780})();
1781</script>
1781
1782
1783<!-- Save UTMs to Local Storage (FIXED VERSION) -->
1784<script>
1785(function () {
1786  const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
1787  const params = new URLSearchParams(window.location.search);
1788
1789  // Store UTM parameters directly in localStorage (no sessionStorage needed)
1790  utmKeys.forEach(key => {
1791    const value = params.get(key);
1792    if (value) {
1793      localStorage.setItem(key, value);
1794      console.log(`UTM ${key} saved to localStorage:`, value);
1795    }
1796  });
1797
1798  // Populate form fields after they're loaded
1799  function fillFormUTMs() {
1800    let filledCount = 0;
1801    utmKeys.forEach(key => {
1802      const input = document.querySelector(`input[name="${key}"]`);
1803      const value = localStorage.getItem(key);
1804      if (input && value) {
1805        input.value = value;
1806        filledCount++;
1807        console.log(`Filled form field ${key} with:`, value);
1808      }
1809    });
1810    console.log(`Filled ${filledCount} UTM form fields`);
1811    return filledCount > 0; // Return true if any fields were filled
1812  }
1813
1814  // Try immediately on DOM ready, then retry every 200ms until successful or max retries
1815  document.addEventListener('DOMContentLoaded', function () {
1816    console.log('UTM script: DOM loaded, attempting to fill form fields');
1817    let attempts = 0;
1818    const maxAttempts = 20;
1819
1820    const interval = setInterval(() => {
1821      const anyFilled = fillFormUTMs();
1822      attempts++;
1823
1824      if (anyFilled || attempts >= maxAttempts) {
1825        clearInterval(interval);
1826        if (anyFilled) {
1827          console.log('UTM script: Successfully filled form fields');
1828        } else {
1829          console.log('UTM script: No UTM form fields found after', attempts, 'attempts');
1830        }
1831      }
1832    }, 200);
1833  });
1834})();
1835</script>
1835
1836
1837<!-- INSTAGRAM EMBED SCRIPT --><!-- ====================================== -->
1838<!-- EXTERNAL LIBRARIES (Load First) -->
1839<!-- ====================================== -->
1840
1841<!-- GSAP Animation Library -->
1842<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
vendor: 1 bytes, line 1842
1842
1843<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
1843
1844
1845<!-- Text Animation Library -->
1846<script src="https://cdn.jsdelivr.net/gh/timothydesign/script/split-type.js"></script>
1846
1847
1848<!-- Swiper Slider Library -->
1849<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
1849
1850
1851<!-- Vimeo Player API -->
1852<script src="https://player.vimeo.com/api/player.js"></script>
1852
1853
1854<!-- ====================================== -->
1855<!-- CORE SITE FUNCTIONALITY -->
1856<!-- ====================================== -->
1857
1858<script>
1859// Main site initialization - streamlined for homepage
1860class SiteManager {
1861    constructor() {
1862        this.isDesktop = window.innerWidth >= 992;
1863        this.isMobile = window.innerWidth <= 768;
1864        this.isInitialized = false;
1865        
1866        this.init();
1867    }
1868    
1869    init() {
1870        if (this.isInitialized) return;
1871        
1872        if (document.readyState === 'loading') {
1873            document.addEventListener('DOMContentLoaded', () => this.initializeAll());
1874        } else {
1875            this.initializeAll();
1876        }
1877    }
1878    
1879    initializeAll() {
1880        console.log('🚀 Initializing homepage...');
1881        
1882        if (!this.checkDependencies()) {
1883            console.error('❌ Required libraries not loaded');
1884            return;
1885        }
1886        
1887        // Initialize only what this page needs
1888        this.initializePerformance();
1889        this.initializeModals();
1890        this.initializeAnimations();
1891        this.initializeNavigation();
1892        this.initializeSliders();
1893        this.initializeInteractions();
1894        this.initializeAccessibility();
1895        
1896        this.isInitialized = true;
1897        console.log('✅ Homepage initialization complete');
1898    }
1899    
1900    checkDependencies() {
1901        const required = [
1902            { name: 'GSAP', check: () => typeof gsap !== 'undefined' },
1903            { name: 'ScrollTrigger', check: () => typeof ScrollTrigger !== 'undefined' },
1904            { name: 'SplitType', check: () => typeof SplitType !== 'undefined' },
1905            { name: 'Swiper', check: () => typeof Swiper !== 'undefined' },
1906            { name: 'Vimeo', check: () => typeof Vimeo !== 'undefined' }
1907        ];
1908        
1909        const missing = required.filter(dep => !dep.check());
1910        if (missing.length > 0) {
1911            console.error('Missing dependencies:', missing.map(d => d.name));
1912            return false;
1913        }
1914        
1915        gsap.registerPlugin(ScrollTrigger);
1916        return true;
1917    }
1918    
1919    initializePerformance() {
1920        console.log('⚡ Initializing performance optimizations...');
1921        PerformanceOptimizer.init();
1922    }
1923    
1924    initializeModals() {
1925        console.log('🎬 Initializing modals...');
1926        VimeoLightbox.init();
1927    }
1928    
1929    initializeAnimations() {
1930        console.log('✨ Initializing animations...');
1931        AnimationManager.init();
1932    }
1933    
1934    initializeNavigation() {
1935        console.log('🧭 Initializing navigation...');
1936        NavigationManager.init();
1937    }
1938    
1939    initializeSliders() {
1940        console.log('🎠 Initializing sliders...');
1941        SliderManager.init();
1942    }
1943    
1944    initializeInteractions() {
1945        console.log('🎯 Initializing interactions...');
1946        InteractionManager.init();
1947    }
1948    
1949    initializeAccessibility() {
1950        console.log('♿ Initializing accessibility...');
1951        AccessibilityManager.init();
1952    }
1953}
1954
1955// Auto-initialize when script loads
1956window.addEventListener('load', () => {
1957    window.siteManager = new SiteManager();
1958});
1959</script>
1959
1960
1961<!-- ====================================== -->
1962<!-- PERFORMANCE OPTIMIZATION -->
1963<!-- ====================================== -->
1964
1965<script>
1966class PerformanceOptimizer {
1967    static init() {
1968        this.optimizeImages();
1969        this.optimizeVideos();
1970        this.optimizeScripts();
1971        this.fixCommonErrors();
1972        this.fixModalIssues(); // Added for your specific modal conflict
1973    }
1974    
1975    static optimizeImages() {
1976        document.querySelectorAll('img:not([width]):not([height])').forEach(img => {
1977            if (img.complete && img.naturalWidth > 0) {
1978                img.setAttribute('width', img.naturalWidth);
1979                img.setAttribute('height', img.naturalHeight);
1980            }
1981        });
1982        
1983        document.querySelectorAll('img').forEach(img => {
1984            const rect = img.getBoundingClientRect();
1985            if (rect.top > window.innerHeight && !img.hasAttribute('loading')) {
1986                img.loading = 'lazy';
1987            }
1988        });
1989        
1990        document.querySelectorAll('img[sizes="100vw"]').forEach(img => {
1991            const displayWidth = img.clientWidth;
1992            if (displayWidth > 0) {
1993                img.sizes = `(max-width: 767px) ${displayWidth}px, 800px`;
1994            }
1995        });
1996    }
1997    
1998    static optimizeVideos() {
1999        if (window.innerWidth < 768) {
2000            document.querySelectorAll('video.video-element').forEach(video => {
2001                if (!video.hasAttribute('preload') || video.getAttribute('preload') !== 'none') {
2002                    video.setAttribute('preload', 'none');
2003                }
2004            });
2005        }
2006        
2007        document.querySelectorAll('iframe[src*="vimeo.com"]').forEach(iframe => {
2008            if (iframe.src.indexOf('autoplay=1') === -1) {
2009                const rect = iframe.getBoundingClientRect();
2010                if (rect.top > window.innerHeight) {
2011                    const newSrc = iframe.src + (iframe.src.includes('?') ? '&' : '?') + 'dnt=1&controls=1';
2012                    iframe.setAttribute('loading', 'lazy');
2013                    iframe.src = newSrc;
2014                }
2015            }
2016        });
2017    }
2018    
2019    static optimizeScripts() {
2020        const nonCriticalPatterns = ['facebook.net', 'fbevents.js'];
2021        document.querySelectorAll('script[src]').forEach(script => {
2022            if (nonCriticalPatterns.some(pattern => script.src.includes(pattern)) && 
2023                !script.hasAttribute('defer') && !script.hasAttribute('async')) {
2024                script.setAttribute('defer', '');
2025            }
2026        });
2027    }
2028    
2029    static fixCommonErrors() {
2030        const originalClosest = Element.prototype.closest;
2031        Element.prototype.closest = function(selector) {
2032            try {
2033                return originalClosest.call(this, selector);
2034            } catch (e) {
2035                console.warn('Closest selector error:', selector, e);
2036                return null;
2037            }
2038        };
2039    }
2040    
2041    // Fix the modal conflict you have
2042    static fixModalIssues() {
2043        const videoModal = document.querySelector('.video-modal');
2044        if (videoModal) {
2045            console.log('Disabling conflicting video modal');
2046            // Force the conflicting modal to stay hidden
2047            videoModal.style.visibility = 'hidden !important';
2048            videoModal.style.opacity = '0 !important';
2049            videoModal.style.display = 'none !important';
2050            videoModal.style.pointerEvents = 'none';
2051            
2052            // Remove any event listeners that might interfere
2053            const modalTriggers = document.querySelectorAll('#open-modal, .close-modal');
2054            modalTriggers.forEach(trigger => {
2055                if (trigger) {
2056                    const newTrigger = trigger.cloneNode(true);
2057                    trigger.parentNode.replaceChild(newTrigger, trigger);
2058                }
2059            });
2060            
2061            // Release any body scroll lock
2062            if (document.body.style.overflow === 'hidden') {
2063                document.body.style.overflow = '';
2064                document.body.style.position = '';
2065                document.body.style.top = '';
2066                document.body.style.width = '';
2067            }
2068            
2069            console.log('Conflicting modal disabled');
2070        }
2071    }
2072}
2073</script>
2073
2074
2075<!-- ====================================== -->
2076<!-- VIMEO LIGHTBOX (OSMO) -->
2077<!-- ====================================== -->
2078
2079<script>
2080class VimeoLightbox {
2081    static init() {
2082        console.log('🎬 Initializing Osmo Vimeo lightbox...');
2083        
2084        // Wait a bit to ensure DOM is fully ready
2085        setTimeout(() => {
2086            this.initAdvancedLightbox();
2087            this.setupMobileAutoplay();
2088            this.addDebugFunctions();
2089        }, 100);
2090    }
2091    
2092    static addDebugFunctions() {
2093        // Add debug function to window for testing
2094        window.debugOsmo = () => {
2095            const lightbox = document.querySelector('[data-vimeo-lightbox-init]');
2096            const openButtons = document.querySelectorAll('[data-vimeo-lightbox-control="open"]');
2097            
2098            console.log('=== OSMO DEBUG ===');
2099            console.log('Lightbox found:', !!lightbox);
2100            console.log('Open buttons found:', openButtons.length);
2101            console.log('Vimeo Player available:', typeof Vimeo !== 'undefined');
2102            
2103            if (openButtons.length > 0) {
2104                console.log('First button video ID:', openButtons[0].getAttribute('data-vimeo-lightbox-id'));
2105                console.log('First button element:', openButtons[0]);
2106            }
2107            
2108            if (lightbox) {
2109                console.log('Lightbox attributes:', {
2110                    activated: lightbox.getAttribute('data-vimeo-activated'),
2111                    playing: lightbox.getAttribute('data-vimeo-playing'),
2112                    loaded: lightbox.getAttribute('data-vimeo-loaded'),
2113                    muted: lightbox.getAttribute('data-vimeo-muted')
2114                });
2115            }
2116        };
2117        
2118        console.log('Debug function added: window.debugOsmo()');
2119    }
2120    
2121    static initAdvancedLightbox() {
2122        const lightbox = document.querySelector('[data-vimeo-lightbox-init]');
2123        if (!lightbox) {
2124            console.warn('Osmo lightbox container not found');
2125            return;
2126        }
2127
2128        const openButtons = document.querySelectorAll('[data-vimeo-lightbox-control="open"]');
2129        const closeButtons = document.querySelectorAll('[data-vimeo-lightbox-control="close"]');
2130        const iframe = lightbox.querySelector('iframe');
2131        const placeholder = lightbox.querySelector('.vimeo-lightbox__placeholder');
2132        const calcEl = lightbox.querySelector('.vimeo-lightbox__calc');
2133        const wrapEl = lightbox.querySelector('.vimeo-lightbox__calc-wrap');
2134        const playerContainer = lightbox.querySelector('[data-vimeo-lightbox-player]');
2135
2136        // Debug logging
2137        console.log('Osmo elements found:', {
2138            lightbox: !!lightbox,
2139            openButtons: openButtons.length,
2140            closeButtons: closeButtons.length,
2141            iframe: !!iframe,
2142            placeholder: !!placeholder,
2143            calcEl: !!calcEl,
2144            wrapEl: !!wrapEl,
2145            playerContainer: !!playerContainer
2146        });
2147
2148        // Check for required elements
2149        if (!iframe || !playerContainer || !calcEl || !wrapEl) {
2150            console.error('Missing required Osmo lightbox elements');
2151            return;
2152        }
2153
2154        let player = null;
2155        let currentVideoID = null;
2156        let videoAspectRatio = null;
2157        let globalMuted = lightbox.getAttribute('data-vimeo-muted') === 'true';
2158        const isTouch = ('ontouchstart' in window) || navigator.maxTouchPoints > 0;
2159        const playedOnce = new Set();
2160
2161        // Utility functions
2162        const formatTime = (s) => {
2163            const m = Math.floor(s / 60);
2164            const sec = Math.floor(s % 60).toString().padStart(2, '0');
2165            return `${m}:${sec}`;
2166        };
2167
2168        const clampWrapSize = (ar) => {
2169            const w = calcEl.offsetWidth;
2170            const h = calcEl.offsetHeight;
2171            wrapEl.style.maxWidth = Math.min(w, h / ar) + 'px';
2172        };
2173
2174        const adjustCoverSizing = () => {
2175            if (!videoAspectRatio) return;
2176            const cH = playerContainer.offsetHeight;
2177            const cW = playerContainer.offsetWidth;
2178            const r = cH / cW;
2179            const wEl = lightbox.querySelector('.vimeo-lightbox__iframe');
2180            if (r > videoAspectRatio) {
2181                wEl.style.width = (r / videoAspectRatio * 100) + '%';
2182                wEl.style.height = '100%';
2183            } else {
2184                wEl.style.height = (videoAspectRatio / r * 100) + '%';
2185                wEl.style.width = '100%';
2186            }
2187        };
2188
2189        const closeLightbox = () => {
2190            lightbox.setAttribute('data-vimeo-activated', 'false');
2191            if (player) {
2192                player.pause();
2193                lightbox.setAttribute('data-vimeo-playing', 'false');
2194            }
2195        };
2196
2197        // Event listeners
2198        document.addEventListener('keydown', e => {
2199            if (e.key === 'Escape') closeLightbox();
2200        });
2201        closeButtons.forEach(btn => btn.addEventListener('click', closeLightbox));
2202
2203        // Setup player events (condensed for brevity - full implementation as before)
2204        const setupPlayerEvents = () => {
2205            player.on('play', () => lightbox.setAttribute('data-vimeo-loaded', 'true'));
2206            player.on('ended', closeLightbox);
2207
2208            const durEl = lightbox.querySelector('[data-vimeo-duration]');
2209            player.getDuration().then(d => {
2210                if (durEl) durEl.textContent = formatTime(d);
2211                lightbox.querySelectorAll('[data-vimeo-control="timeline"],progress')
2212                    .forEach(el => el.max = d);
2213            });
2214
2215            const tl = lightbox.querySelector('[data-vimeo-control="timeline"]');
2216            const pr = lightbox.querySelector('progress');
2217            player.on('timeupdate', data => {
2218                if (tl) tl.value = data.seconds;
2219                if (pr) pr.value = data.seconds;
2220                if (durEl) durEl.textContent = formatTime(Math.trunc(data.seconds));
2221            });
2222
2223            if (tl) {
2224                ['input', 'change'].forEach(evt =>
2225                    tl.addEventListener(evt, e => {
2226                        const v = e.target.value;
2227                        player.setCurrentTime(v);
2228                        if (pr) pr.value = v;
2229                    })
2230                );
2231            }
2232
2233            // Hover controls - improved
2234            let hoverTimer;
2235            
2236            const showControls = () => {
2237                lightbox.setAttribute('data-vimeo-hover', 'true');
2238                clearTimeout(hoverTimer);
2239            };
2240            
2241            const hideControlsDelayed = () => {
2242                clearTimeout(hoverTimer);
2243                hoverTimer = setTimeout(() => {
2244                    lightbox.setAttribute('data-vimeo-hover', 'false');
2245                }, 2000); // Reduced from 3000ms to 2000ms
2246            };
2247            
2248            const hideControlsImmediate = () => {
2249                clearTimeout(hoverTimer);
2250                lightbox.setAttribute('data-vimeo-hover', 'false');
2251            };
2252            
2253            // Show controls on mouse movement
2254            playerContainer.addEventListener('mousemove', showControls);
2255            playerContainer.addEventListener('mouseenter', showControls);
2256            
2257            // Hide controls when mouse stops moving
2258            playerContainer.addEventListener('mousemove', hideControlsDelayed);
2259            
2260            // Hide controls immediately when mouse leaves
2261            playerContainer.addEventListener('mouseleave', hideControlsImmediate);
2262            
2263            // Also hide controls when clicking outside player area
2264            lightbox.addEventListener('click', (e) => {
2265                if (e.target === lightbox || e.target.classList.contains('vimeo-lightbox__bg')) {
2266                    hideControlsImmediate();
2267                }
2268            });
2269
2270            // Fullscreen functionality (keeping existing implementation)
2271            const fsBtn = lightbox.querySelector('[data-vimeo-control="fullscreen"]');
2272            if (fsBtn) {
2273                const isFS = () => document.fullscreenElement || document.webkitFullscreenElement;
2274                if (!(document.fullscreenEnabled || document.webkitFullscreenEnabled)) {
2275                    fsBtn.style.display = 'none';
2276                }
2277                fsBtn.addEventListener('click', () => {
2278                    if (isFS()) {
2279                        lightbox.setAttribute('data-vimeo-fullscreen', 'false');
2280                        (document.exitFullscreen || document.webkitExitFullscreen).call(document);
2281                    } else {
2282                        lightbox.setAttribute('data-vimeo-fullscreen', 'true');
2283                        (playerContainer.requestFullscreen || playerContainer.webkitRequestFullscreen)
2284                            .call(playerContainer);
2285                    }
2286                });
2287                ['fullscreenchange', 'webkitfullscreenchange'].forEach(evt =>
2288                    document.addEventListener(evt, () =>
2289                        lightbox.setAttribute('data-vimeo-fullscreen', isFS() ? 'true' : 'false')
2290                    ));
2291            }
2292        };
2293
2294        // Rest of the Vimeo implementation (keeping the full functionality)
2295        const runSizing = async () => {
2296            const mode = lightbox.getAttribute('data-vimeo-update-size');
2297            const w = await player.getVideoWidth();
2298            const h = await player.getVideoHeight();
2299            const ar = h / w;
2300            const bef = lightbox.querySelector('.vimeo-lightbox__before');
2301
2302            if (mode === 'true') {
2303                if (bef) bef.style.paddingTop = (ar * 100) + '%';
2304                clampWrapSize(ar);
2305            } else if (mode === 'cover') {
2306                videoAspectRatio = ar;
2307                if (bef) bef.style.paddingTop = '0%';
2308                adjustCoverSizing();
2309            } else {
2310                clampWrapSize(ar);
2311            }
2312        };
2313
2314        window.addEventListener('resize', () => {
2315            if (player) runSizing();
2316        });
2317
2318        const openLightbox = async (id, placeholderBtn) => {
2319            console.log('Opening Osmo lightbox with video ID:', id);
2320            
2321            // Force hide any conflicting modals
2322            const conflictingModal = document.querySelector('.video-modal');
2323            if (conflictingModal) {
2324                conflictingModal.style.display = 'none';
2325                conflictingModal.style.visibility = 'hidden';
2326            }
2327            
2328            lightbox.setAttribute('data-vimeo-activated', 'loading');
2329            lightbox.setAttribute('data-vimeo-loaded', 'false');
2330
2331            if (player && id !== currentVideoID) {
2332                try {
2333                    player.pause();
2334                    await player.unload();
2335                } catch (e) {
2336                    console.warn('Error unloading previous video:', e);
2337                }
2338                lightbox.setAttribute('data-vimeo-playing', 'false');
2339                currentVideoID = null;
2340            }
2341
2342            if (placeholderBtn && placeholder) {
2343                ['src', 'srcset', 'sizes', 'alt', 'width'].forEach(attr => {
2344                    const val = placeholderBtn.getAttribute(attr);
2345                    if (val != null) placeholder.setAttribute(attr, val);
2346                });
2347            }
2348
2349            if (!player) {
2350                console.log('Initializing new Vimeo player...');
2351                // Handle hash parameters for private videos
2352                const separator = id.includes('?') ? '&' : '?';
2353                const videoUrl = `https://player.vimeo.com/video/${id}${separator}
2353api=1&background=1&autoplay=0&loop=0&muted=0`;
2354                iframe.src = videoUrl;
2355                
2356                try {
2357                    player = new Vimeo.Player(iframe);
2358                    setupPlayerEvents();
2359                    currentVideoID = id;
2360                    await runSizing();
2361                    console.log('Vimeo player initialized successfully');
2362                } catch (error) {
2363                    console.error('Error initializing Vimeo player:', error);
2364                    return;
2365                }
2366            } else if (id !== currentVideoID) {
2367                console.log('Loading new video...');
2368                try {
2369                    currentVideoID = id;
2370                    await player.loadVideo(id);
2371                    await runSizing();
2372                } catch (error) {
2373                    console.error('Error loading video:', error);
2374                    return;
2375                }
2376            }
2377
2378            lightbox.setAttribute('data-vimeo-activated', 'true');
2379            console.log('Lightbox activated, attempting to play...');
2380
2381            // Auto-play logic with better error handling
2382            try {
2383                if (!isTouch) {
2384                    await player.setVolume(globalMuted ? 0 : 1);
2385                    lightbox.setAttribute('data-vimeo-playing', 'true');
2386                    setTimeout(async () => {
2387                        try {
2388                            await player.play();
2389                            console.log('Video playing successfully');
2390                        } catch (playError) {
2391                            console.warn('Autoplay failed, user interaction required:', playError);
2392                        }
2393                    }, 50);
2394                } else if (playedOnce.has(currentVideoID)) {
2395                    await player.setVolume(globalMuted ? 0 : 1);
2396                    lightbox.setAttribute('data-vimeo-playing', 'true');
2397                    await player.play();
2398                }
2399            } catch (error) {
2400                console.error('Error during video playback setup:', error);
2401            }
2402        };
2403
2404        // Control event listeners
2405        lightbox.querySelector('[data-vimeo-control="play"]')?.addEventListener('click', () => {
2406            if (isTouch) {
2407                if (!playedOnce.has(currentVideoID)) {
2408                    player.setVolume(0).then(() => {
2409                        lightbox.setAttribute('data-vimeo-playing', 'true');
2410                        player.play();
2411                        if (!globalMuted) {
2412                            setTimeout(() => {
2413                                player.setVolume(1);
2414                                lightbox.setAttribute('data-vimeo-muted', 'false');
2415                            }, 100);
2416                        }
2417                        playedOnce.add(currentVideoID);
2418                    });
2419                } else {
2420                    player.setVolume(globalMuted ? 0 : 1).then(() => {
2421                        lightbox.setAttribute('data-vimeo-playing', 'true');
2422                        player.play();
2423                    });
2424                }
2425            } else {
2426                player.setVolume(globalMuted ? 0 : 1).then(() => {
2427                    lightbox.setAttribute('data-vimeo-playing', 'true');
2428                    setTimeout(() => player.play(), 50);
2429                });
2430            }
2431        });
2432
2433        lightbox.querySelector('[data-vimeo-control="pause"]')?.addEventListener('click', () => {
2434            player.pause();
2435            lightbox.setAttribute('data-vimeo-playing', 'false');
2436        });
2437
2438        lightbox.querySelector('[data-vimeo-control="mute"]')?.addEventListener('click', () => {
2439            globalMuted = !globalMuted;
2440            player.setVolume(globalMuted ? 0 : 1).then(() =>
2441                lightbox.setAttribute('data-vimeo-muted', globalMuted ? 'true' : 'false')
2442            );
2443        });
2444
2445        // Wire up open buttons with better error handling
2446        openButtons.forEach((btn, index) => {
2447            console.log(`Setting up open button ${index + 1}:`, btn);
2448            btn.addEventListener('click', (e) => {
2449                e.preventDefault();
2450                e.stopPropagation();
2451                
2452                const vid = btn.getAttribute('data-vimeo-lightbox-id');
2453                const img = btn.querySelector('[data-vimeo-lightbox-placeholder]');
2454                
2455                console.log('Open button clicked, video ID:', vid);
2456                
2457                if (!vid) {
2458                    console.error('No video ID found on button');
2459                    return;
2460                }
2461                
2462                openLightbox(vid, img);
2463            });
2464        });
2465
2466        console.log('Osmo lightbox setup complete');
2467    }
2468    
2469    static setupMobileAutoplay() {
2470        const lightbox = document.querySelector('[data-vimeo-lightbox-init]');
2471        if (!lightbox) return;
2472
2473        lightbox.setAttribute('data-vimeo-muted', 'true');
2474
2475        const waitForPlayer = setInterval(() => {
2476            if (window.player && typeof window.player.play === 'function') {
2477                clearInterval(waitForPlayer);
2478                const realOpenLightbox = window.openLightbox;
2479                window.openLightbox = async function (id, placeholderBtn) {
2480                    await realOpenLightbox(id, placeholderBtn);
2481                    window.player.setVolume(0).then(() => {
2482                        lightbox.setAttribute('data-vimeo-playing', 'true');
2483                        window.player.play();
2484                    });
2485                };
2486            }
2487        }, 100);
2488    }
2489}
2490</script>
2490
2491
2492<!-- ====================================== -->
2493<!-- NAVIGATION SYSTEM -->
2494<!-- ====================================== -->
2495
2496<script>
2497class NavigationManager {
2498    static init() {
2499        this.initScrollTransition();
2500    }
2501    
2502    static initScrollTransition() {
2503        if (window.innerWidth < 992) {
2504            console.log('Navbar transition disabled on mobile/tablet devices');
2505            return;
2506        }
2507
2508        const navbar = document.querySelector('.navbar2_component');
2509        if (!navbar) return;
2510
2511        const logo = navbar.querySelector('.navbar2_logo-link svg');
2512        const navLinks = navbar.querySelectorAll('.navbar2_link');
2513        const navButton = navbar.querySelector('.button.is-navbar2-button, .button.is-icon.nav');
2514        const menuButton = navbar.querySelector('.navbar2_menu-button');
2515        const menuLines = navbar.querySelectorAll('.menu-icon2_line-top, .menu-icon2_line-middle-inner, .menu-icon2_line-bottom');
2516        // Updated selector for the Services dropdown text
2517        const dropdownText = navbar.querySelector('.dropdown-4 .text-block-36');
2518        const dropdownChevron = navbar.querySelector('.dropdown-4 .dropdown-chevron svg');
2519
2520        // Set initial state
2521        gsap.set(navbar, {
2522            backgroundColor: 'rgba(240, 239, 236, 0)',
2523            backdropFilter: 'blur(0px)'
2524        });
2525
2526        gsap.set([logo, navLinks, menuButton, menuLines, dropdownText, dropdownChevron], {
2527            color: '#f0efec',
2528            borderColor: '#f0efec'
2529        });
2530
2531        gsap.set(navButton, {
2532            color: '#f0efec',
2533            borderColor: '#f0efec'
2534        });
2535
2536        let isScrolled = false;
2537        let tl = null;
2538
2539        const handleScroll = () => {
2540            if (window.innerWidth < 992) return;
2541
2542            const scrollY = window.scrollY;
2543
2544            if (scrollY > 10 && !isScrolled) {
2545                isScrolled = true;
2546                navbar.classList.add('scrolled');
2547
2548                if (tl) tl.kill();
2549                tl = gsap.timeline();
2550
2551                tl.to(navbar, {
2552                    backgroundColor: 'rgba(240, 239, 236, 0.95)',
2553                    backdropFilter: 'blur(10px)',
2554                    boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
2555                    duration: 0.3,
2556                    ease: 'power2.out'
2557                })
2558                .to([logo, navLinks, menuButton, menuLines, dropdownText, dropdownChevron], {
2559                    color: '#000000',
2560                    borderColor: '#000000',
2561                    duration: 0.3,
2562                    ease: 'power2.out'
2563                }, '<')
2564                .to(navButton, {
2565                    color: '#5c8aae',
2566                    borderColor: '#5c8aae',
2567                    duration: 0.3,
2568                    ease: 'power2.out'
2569                }, '<');
2570            } else if (scrollY <= 10 && isScrolled) {
2571                isScrolled = false;
2572                navbar.classList.remove('scrolled');
2573
2574                if (tl) tl.kill();
2575                tl = gsap.timeline();
2576
2577                tl.to(navbar, {
2578                    backgroundColor: 'rgba(240, 239, 236, 0)',
2579                    backdropFilter: 'blur(0px)',
2580                    boxShadow: '0 2px 20px rgba(0, 0, 0, 0)',
2581                    duration: 0.3,
2582                    ease: 'power2.out'
2583                })
2584                .to([logo, navLinks, menuButton, menuLines, dropdownText, dropdownChevron], {
2585                    color: '#f0efec',
2586                    borderColor: '#f0efec',
2587                    duration: 0.3,
2588                    ease: 'power2.out'
2589                }, '<')
2590                .to(navButton, {
2591                    color: '#f0efec',
2592                    borderColor: '#f0efec',
2593                    duration: 0.3,
2594                    ease: 'power2.out'
2595                }, '<');
2596            }
2597        };
2598
2599        let scrollTimer = null;
2600        window.addEventListener('scroll', () => {
2601            if (window.innerWidth < 992) return;
2602            if (scrollTimer !== null) clearTimeout(scrollTimer);
2603            scrollTimer = setTimeout(handleScroll, 10);
2604        });
2605
2606        handleScroll();
2607
2608        // Add styles
2609        const style = document.createElement('style');
2610        style.textContent = `
2611            @media (min-width: 992px) {
2612                .navbar2_link, .button.is-navbar2-button, .button.is-icon.nav, .dropdown-4 .text-block-36 {
2613                    transition: all 0.2s ease !important;
2614                }
2615                .navbar2_component { transition: none !important; }
2616                .navbar2_logo-link svg path { fill: currentColor; }
2617                .dropdown-4 svg path { fill: currentColor; }
2618                .navbar2_component.scrolled .navbar2_link:hover { color: #ffffff !important; }
2619                .navbar2_component:not(.scrolled) .navbar2_link:hover { color: #ffffff !important; }
2620                .navbar2_component.scrolled .button.is-navbar2-button:hover,
2621                .navbar2_component.scrolled .button.is-icon.nav:hover {
2622                    background-color: #5c8aae !important; color: #ffffff !important; border-color: #5c8aae !important;
2623                }
2624                .navbar2_component:not(.scrolled) .button.is-navbar2-button:hover,
2625                .navbar2_component:not(.scrolled) .button.is-icon.nav:hover {
2626                    background-color: #ffffff !important; color: #000000 !important; border-color: #ffffff !important;
2627                }
2628            }
2629        `;
2630        document.head.appendChild(style);
2631    }
2632}
2633</script>
2633
2634
2635<!-- ====================================== -->
2636<!-- ANIMATION SYSTEM -->
2637<!-- ====================================== -->
2638
2639<script>
2640class AnimationManager {
2641    static init() {
2642        this.initTextAnimations();
2643        this.initScrollAnimations();
2644        this.initHoverAnimations();
2645    }
2646    
2647    static initTextAnimations() {
2648        window.addEventListener('load', () => {
2649            setTimeout(() => {
2650                try {
2651                    const h1Elements = document.querySelectorAll('.animate-h1');
2652                    if (h1Elements.length === 0) return;
2653
2654                    const splitText = new SplitType(".animate-h1", {
2655                        types: "words",
2656                        tagName: "span"
2657                    });
2658
2659                    h1Elements.forEach((el) => {
2660                        const words = el.querySelectorAll(".word");
2661                        if (words.length === 0) return;
2662
2663                        gsap.set(el, { visibility: "visible" });
2664
2665                        let tl = gsap.timeline({
2666                            scrollTrigger: {
2667                                trigger: el,
2668                                start: window.innerWidth >= 1920 ? "top 150%" : "top 90%",
2669                                end: window.innerWidth >= 1920 ? "top 120%" : "top 70%",
2670                                toggleActions: "play none none reset"
2671                            }
2672                        });
2673
2674                        tl.from(words, {
2675                            opacity: 0,
2676                            yPercent: 20,
2677                            duration: 0.4,
2678                            ease: "power1.out",
2679                            stagger: { amount: 0.5 }
2680                        });
2681
2682                        const rect = el.getBoundingClientRect();
2683                        const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
2684                        const viewportWidth = window.innerWidth || document.documentElement.clientWidth;
2685                        const threshold = viewportWidth >= 1920 ? 1.5 : 0.9;
2686
2687                        if (rect.top >= 0 && rect.top <= viewportHeight * threshold) {
2688                            tl.play();
2689                        }
2690                    });
2691                } catch (error) {
2692                    console.error("Error in text animation setup:", error);
2693                }
2694            }, 300);
2695        });
2696    }
2697    
2698    static initScrollAnimations() {
2699        const animateElements = document.querySelectorAll(".animate-on-scroll");
2700        if (animateElements.length === 0) return;
2701
2702        animateElements.forEach((element) => {
2703            gsap.set(element, {
2704                opacity: 0,
2705                y: 30,
2706            });
2707
2708            gsap.to(element, {
2709                scrollTrigger: {
2710                    trigger: element,
2711                    start: "top 85%",
2712                    end: "top 50%",
2713                    toggleActions: "play none none none",
2714                },
2715                opacity: 1,
2716                y: 0,
2717                duration: 1.2,
2718                ease: "power2.out",
2719            });
2720        });
2721    }
2722    
2723    static initHoverAnimations() {
2724        const scaleElements = document.querySelectorAll('.scale');
2725        if (scaleElements.length === 0) return;
2726
2727        scaleElements.forEach(element => {
2728            element.addEventListener('mouseenter', () => {
2729                gsap.to(element, {
2730                    scale: 1.02,
2731                    duration: 0.3,
2732                    ease: "power2.out"
2733                });
2734            });
2735
2736            element.addEventListener('mouseleave', () => {
2737                gsap.to(element, {
2738                    scale: 1,
2739                    duration: 0.3,
2740                    ease: "power2.out"
2741                });
2742            });
2743        });
2744    }
2745}
2746</script>
2746
2747
2748<!-- ====================================== -->
2749<!-- SLIDER SYSTEM -->
2750<!-- ====================================== -->
2751
2752<script>
2753class SliderManager {
2754    static init() {
2755        this.initProjectSlider();
2756        this.initRegularSlider();
2757    }
2758    
2759    static initProjectSlider() {
2760        const swiperElements = document.querySelectorAll('.swiper.is-projects');
2761        if (swiperElements.length === 0) return;
2762
2763        const swiper = new Swiper('.swiper.is-projects', {
2764            slidesPerView: 'auto',
2765            spaceBetween: 30,
2766            loop: true,
2767            keyboard: {
2768                enabled: true,
2769                onlyInViewport: true
2770            },
2771            pagination: {
2772                el: '.swiper-bullets.is-projects',
2773                clickable: true,
2774                bulletClass: 'swiper-bullet',
2775                bulletActiveClass: 'swiper-bullet-active',
2776                renderBullet: function (index, className) {
2777                    return `
2778                        <span class="${className}" 
2779                            style="display: inline-block; 
2780                            width: 10px; height: 10px; 
2781                            background: #CCCCCC; 
2782                            border-radius: 50%; 
2783                            margin: 0 4px;
2784                            cursor: pointer;
2785                            transition: background-color 0.3s ease;">
2786                        </span>
2787                    `;
2788                }
2789            },
2790            navigation: {
2791                nextEl: '.slider-arrow.is-projects.next',
2792                prevEl: '.slider-arrow.is-projects.prev'
2793            }
2794        });
2795
2796        document.querySelectorAll('.slider-arrow.is-projects').forEach(arrow => {
2797            arrow.addEventListener('click', e => e.preventDefault());
2798        });
2799
2800        const style = document.createElement('style');
2801        style.textContent = `
2802            .swiper-bullets.is-projects {
2803                display: flex; align-items: center; justify-content: left;
2804            }
2805            .swiper-bullet-active { background-color: #5c8aae !important; }
2806        `;
2807        document.head.appendChild(style);
2808    }
2809    
2810    static initRegularSlider() {
2811        const swiperNotProjects = document.querySelector('.swiper:not(.is-projects)');
2812        if (!swiperNotProjects) return;
2813
2814        const swiper = new Swiper('.swiper:not(.is-projects)', {
2815            slidesPerView: 1,
2816            spaceBetween: 30,
2817            loop: true,
2818            pagination: {
2819                el: '.swiper-bullets:not(.is-projects)',
2820                clickable: true,
2821                bulletClass: 'swiper-bullet',
2822                bulletActiveClass: 'swiper-bullet-active'
2823            },
2824            navigation: {
2825                nextEl: '.arrow-container-right',
2826                prevEl: '.arrow-container-left'
2827            },
2828            keyboard: {
2829                enabled: true,
2830                onlyInViewport: true
2831            }
2832        });
2833    }
2834}
2835</script>
2835
2836
2837<!-- ====================================== -->
2838<!-- INTERACTION SYSTEM -->
2839<!-- ====================================== -->
2840
2841<script>
2842class InteractionManager {
2843    static init() {
2844        this.initTypewriter();
2845        this.initProjectHovers();
2846        this.initProjectTypeSelection();
2847    }
2848    
2849    static initTypewriter() {
2850        const typeTextElement = document.querySelector('.type-text');
2851        if (!typeTextElement) return;
2852
2853        const words = ['Everyday', 'Design', 'Furniture', 'Expectations'];
2854        const isMobile = window.innerWidth <= 768;
2855
2856        if (isMobile && typeTextElement.parentElement) {
2857            typeTextElement.parentElement.classList.add('type-text-container');
2858        }
2859
2860        const config = {
2861            typeSpeed: 120,
2862            deleteSpeed: isMobile ? 40 : 60,
2863            pauseTime: 2000,
2864            deleteDelay: isMobile ? 300 : 500,
2865            // New config for extended "Everyday" duration
2866            extendedPauseTime: 5000, // 2.5x longer than normal pauseTime
2867            firstWordIndex: 0 // Index of "Everyday" in the words array
2868        };
2869
2870        new TypewriterEffect(typeTextElement, words, config);
2871    }
2872    
2873    static initProjectHovers() {
2874        const buttons = document.querySelectorAll('.project-button');
2875        if (buttons.length === 0) return;
2876
2877        gsap.set('.project-button', {
2878            display: 'none',
2879            opacity: 0,
2880            scale: 0.8,
2881            y: 20
2882        });
2883
2884        document.querySelectorAll('.project-link-container').forEach(container => {
2885            const button = container.querySelector('.project-button');
2886            if (!button) return;
2887
2888            let isHovering = false;
2889
2890            const tl = gsap.timeline({ paused: true });
2891            tl.set(button, { display: 'flex' })
2892              .to(button, {
2893                opacity: 1,
2894                scale: 1,
2895                y: 0,
2896                duration: 0.5,
2897                ease: 'back.out(1.7)',
2898                clearProps: 'transform'
2899              });
2900
2901            container.addEventListener('mousemove', (e) => {
2902                const rect = container.getBoundingClientRect();
2903                const isInBounds = (
2904                    e.clientX >= rect.left && e.clientX <= rect.right &&
2905                    e.clientY >= rect.top && e.clientY <= rect.bottom
2906                );
2907
2908                if (isInBounds && !isHovering) {
2909                    isHovering = true;
2910                    tl.play();
2911                }
2912            });
2913
2914            container.addEventListener('mouseleave', (e) => {
2915                const rect = container.getBoundingClientRect();
2916                const isStillInBounds = (
2917                    e.clientX >= rect.left && e.clientX <= rect.right &&
2918                    e.clientY >= rect.top && e.clientY <= rect.bottom
2919                );
2920
2921                if (!isStillInBounds) {
2922                    isHovering = false;
2923                    tl.reverse().then(() => {
2924                        if (!isHovering) {
2925                            gsap.set(button, { display: 'none' });
2926                        }
2927                    });
2928                }
2929            });
2930        });
2931    }
2932    
2933    static initProjectTypeSelection() {
2934        const projectLinks = document.querySelectorAll('.project-type.scale');
2935        if (projectLinks.length === 0) return;
2936
2937        projectLinks.forEach(link => {
2938            link.addEventListener('click', function(e) {
2939                e.preventDefault();
2940                const projectType = this.getAttribute('data-project');
2941                localStorage.setItem('selectedProject', projectType);
2942                window.location.href = '/start-my-project';
2943            });
2944        });
2945    }
2946}
2947
2948// Typewriter Effect Class
2949class TypewriterEffect {
2950    constructor(element, words, options = {}) {
2951        this.element = element;
2952        this.words = words;
2953        this.currentWordIndex = 0;
2954        this.currentText = '';
2955        this.isDeleting = false;
2956        this.isMobile = window.innerWidth <= 768;
2957        
2958        this.typeSpeed = options.typeSpeed || 100;
2959        this.deleteSpeed = options.deleteSpeed || 50;
2960        this.pauseTime = options.pauseTime || 2000;
2961        this.deleteDelay = options.deleteDelay || 1000;
2962        
2963        // Extended pause configuration
2964        this.extendedPauseTime = options.extendedPauseTime || (this.pauseTime * 2.5);
2965        this.firstWordIndex = options.firstWordIndex || 0;
2966        
2967        if (this.isMobile) {
2968            this.setupMobileOptimization();
2969        }
2970        
2971				this.currentText = '';
2972				this.element.textContent = '';
2973    		this.type(); // Immediately begin typing
2974
2975    }
2976    
2977    setupMobileOptimization() {
2978        const longestWord = this.words.reduce((a, b) => a.length > b.length ? a : b);
2979        
2980        const measurer = document.createElement('div');
2981        measurer.style.cssText = `
2982            visibility: hidden; position: absolute; top: -9999px; left: -9999px; 
2983            white-space: nowrap; font-size: ${window.getComputedStyle(this.element).fontSize};
2984            font-family: ${window.getComputedStyle(this.element).fontFamily};
2985            font-weight: ${window.getComputedStyle(this.element).fontWeight};
2986            line-height: ${window.getComputedStyle(this.element).lineHeight};
2987        `;
2988        
2989        document.body.appendChild(measurer);
2990        
2991        let maxWidth = 0;
2992        let maxHeight = 0;
2993        
2994        this.words.forEach(word => {
2995            measurer.textContent = word;
2996            maxWidth = Math.max(maxWidth, measurer.offsetWidth);
2997            maxHeight = Math.max(maxHeight, measurer.offsetHeight);
2998        });
2999        
3000        document.body.removeChild(measurer);
3001        
3002        const containerWidth = this.element.parentElement.offsetWidth;
3003        
3004        if (maxWidth < containerWidth) {
3005            this.element.style.minWidth = maxWidth + 'px';
3006        }
3007        this.element.style.minHeight = maxHeight + 'px';
3008        this.element.style.transition = 'none';
3009        this.element.style.display = 'inline-block';
3010        this.element.style.verticalAlign = 'top';
3011        
3012        this.addMobileStyles();
3013    }
3014    
3015    addMobileStyles() {
3016        const styleId = 'typewriter-mobile-styles';
3017        if (document.getElementById(styleId)) return;
3018        
3019        const style = document.createElement('style');
3020        style.id = styleId;
3021        style.textContent = `
3022            @media (max-width: 768px) {
3023                .type-text {
3024                    display: inline-block !important; word-break: keep-all;
3025                    overflow-wrap: normal; white-space: nowrap; vertical-align: top;
3026                    position: relative; transform: translateZ(0); backface-visibility: hidden;
3027                }
3028                .type-text-container {
3029                    padding: 2px 4px; overflow: hidden; position: relative; min-height: 1.5em;
3030                }
3031                .type-text-container * {
3032                    -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
3033                    text-rendering: optimizeSpeed;
3034                }
3035            }
3036            @media (max-width: 480px) {
3037                .type-text {
3038                    font-size: 0.95em; transform: translateZ(0) scale(0.95); transform-origin: left center;
3039                }
3040            }
3041        `;
3042        document.head.appendChild(style);
3043    }
3044    
3045    type() {
3046        const currentWord = this.words[this.currentWordIndex];
3047        
3048        if (this.isDeleting) {
3049            this.currentText = currentWord.substring(0, this.currentText.length - 1);
3050        } else {
3051            this.currentText = currentWord.substring(0, this.currentText.length + 1);
3052        }
3053        
3054        if (this.isMobile) {
3055            requestAnimationFrame(() => {
3056                this.element.textContent = this.currentText;
3057            });
3058        } else {
3059            this.element.textContent = this.currentText;
3060        }
3061        
3062        let timeout = this.isDeleting ? this.deleteSpeed : this.typeSpeed;
3063        timeout += Math.random() * 50 - 25;
3064        
3065        if (!this.isDeleting && this.currentText === currentWord) {
3066            // Use extended pause time for "Everyday" (first word), normal pause for others
3067            timeout = this.currentWordIndex === this.firstWordIndex ? this.extendedPauseTime : this.pauseTime;
3068            this.isDeleting = true;
3069        } else if (this.isDeleting && this.currentText === '') {
3070            this.isDeleting = false;
3071            this.currentWordIndex = (this.currentWordIndex + 1) % this.words.length;
3072            timeout = this.deleteDelay;
3073        }
3074        
3075        setTimeout(() => this.type(), timeout);
3076    }
3077}
3078</script>
3078
3079
3080<!-- ====================================== -->
3081<!-- ACCESSIBILITY SYSTEM -->
3082<!-- ====================================== -->
3083
3084<script>
3085class AccessibilityManager {
3086    static init() {
3087        this.addVisuallyHiddenStyles();
3088        this.fixSwiperAriaRoles();
3089    }
3090    
3091    static addVisuallyHiddenStyles() {
3092        const style = document.createElement('style');
3093        style.textContent = `
3094            .visually-hidden {
3095                position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
3096                overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
3097            }
3098        `;
3099        document.head.appendChild(style);
3100    }
3101    
3102    static fixSwiperAriaRoles() {
3103        const swiperWrappers = document.querySelectorAll('.swiper-wrapper.w-dyn-items');
3104        if (swiperWrappers.length === 0) return;
3105
3106        swiperWrappers.forEach(wrapper => {
3107            wrapper.removeAttribute('role');
3108            wrapper.setAttribute('role', 'region');
3109            wrapper.setAttribute('aria-roledescription', 'carousel');
3110
3111            const slides = wrapper.querySelectorAll('.swiper-slide.w-dyn-item');
3112
3113            slides.forEach((slide, index) => {
3114                slide.setAttribute('role', 'group');
3115                slide.setAttribute('aria-roledescription', 'slide');
3116
3117                const totalSlides = slides.length;
3118                slide.setAttribute('aria-label', `Slide ${index + 1} of ${totalSlides}`);
3119
3120                const projectLink = slide.querySelector('.project-link-container');
3121                if (projectLink && projectLink.hasAttribute('href')) {
3122                    const href = projectLink.getAttribute('href');
3123                    const projectTitle = this.slugToReadableText(href);
3124
3125                    projectLink.setAttribute('aria-label', `View ${projectTitle} Project`);
3126
3127                    if (!projectLink.textContent.trim()) {
3128                        const hiddenText = document.createElement('span');
3129                        hiddenText.className = 'visually-hidden';
3130                        hiddenText.textContent = `View ${projectTitle} Project`;
3131                        projectLink.appendChild(hiddenText);
3132                    }
3133                }
3134            });
3135        });
3136    }
3137    
3138    static slugToReadableText(slug) {
3139        if (!slug) return '';
3140        slug = slug.replace(/^\/project\//, '').replace(/^\/|\/$/g, '');
3141        return slug.split('-')
3142            .map(word => word.charAt(0).toUpperCase() + word.slice(1))
3143            .join(' ');
3144    }
3145}
3146</script>
3146<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":"689cb5f2042a429d90d8222df848b51f","r":1,"spa":2}' crossorigin="anonymous"></script>
3146
3147</body></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.