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 & 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 & 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&e=1&st=pr1ipsce&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 & <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 & 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'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'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."</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'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'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."</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't be happier with our home!"</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't be happier with our "new" home! My husband and I were just commenting the other night how pleased we are and we are so glad we chose Story."</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't think you would be disappointed!"</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'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 & 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.