1<!--easy.cache.engine.26.08.19.2--><!DOCTYPE html><html lang="en"><head><link rel=preconnect href="https://fonts.googleapis.com"><link rel=preconnect href="https://fonts.gstatic.com" crossorigin><title>Projects</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta name="description" content="Are you looking for Architects in Twickenham? View our Portfolio of recent Work here. We offer architectural services for new builds, home extensions and loft conversions."/><link rel="canonical" href="https://www.trimblearchitect.uk/blog"/><meta property="og:title" content="Projects"/><meta property="og:description" content="Are you looking for Architects in Twickenham? View our Portfolio of recent Work here. We offer architectural services for new builds, home extensions and loft conversions."/><meta property="og:type" content="website"/><meta property="og:url" content="https://www.trimblearchitect.uk/blog"/><meta property="og:image" content="https://www.easysites.uk/filestore/editor/2115136394/trimblepic.jpg"/><meta property="og:locale" content="en_GB"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"><link rel="manifest" href="/manifest.webmanifest"><link rel="icon" href="https://0nline.uk/s3/easyfav/trimblearchitectuk.jpg" type="image/x-icon"/><link rel="apple-touch-icon" href="https://0nline.uk/s3/easyfav/trimblearchitectuk.jpg"/><!--[if IE]>
1<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
1<![endif]--><link rel="stylesheet" type="text/css" href="//s3-eu-west-1.amazonaws.com/easysites/blog/min.easy-blog.css"/><style>#container article .news_article img {� object-fit: cover;� height: 250px;� width: 100%;� }� � #container .med-ada {� display: flex;� align-items: center;� flex-direction: row;� flex-wrap: wrap;� }� #container .med-ada p {� border: 3px solid rgb(247, 142, 0);� padding: 0.5rem;� margin: 0.5rem;� font-weight: 600;� � }� � � #container #header_can {� background: white;� box-shadow: 0 0 5px 0 rgba(56, 56, 56, 0.5);� }� � #container #navigation a {� color: #FF8F00;� }� #container header h1, header .company-branding span {� display: none;� }� #container header> .header_logo, #container header .company-branding > .header_logo { 2 max-width: 200px; 3 margin: 0; 4} 5#container .header_logo img { 6 max-height: 100%; 7 max-width: 100%; 8 z-index: 1; 9} 10header:before { 11 content: ""; 12 display: block; 13 position: absolute; 14 top: 0; 15 bottom: 0; 16 left: -80%; 17 right: 30%; 18 background: #ff8f00; 19 transform: skewX(-20deg); 20 z-index: 0; 21 box-shadow: 0 0 5px 0px black; 22} 23.blog-feed-container { 24 display: block; 25} 26#container header #header_contact h4 { 27 filter: invert(1); 28} 29#container header #header_contact { 30 margin-left: calc(68% + 1rem); 31 margin-right: 0; 32} 33article p, article li { 34 color: black; 35 font-family: 'Muli'; 36 font-weight: 400; 37 font-size: 16px; 38} 39article h1, article h2, article h3, article h4, article h5, .para-title { 40 text-transform: uppercase; 41 font-family: 'Muli'; 42 letter-spacing: 2px; 43 font-weight: 700; 44} 45article a { 46 color: #ff8f00; 47 text-decoration: none!important; 48} 49#container #nav-toggle { 50 background: linear-gradient(to right, orange 0%, orange 100%); 51 background-size: 50px 2px; 52 background-repeat: no-repeat; 53 background-position: center center; 54} 55#container #nav-toggle:before, #container #nav-toggle:after { 56 background: orange; 57} 58#banner-wrapper i.icon.ion-android-add { 59 position: absolute; 60 top: 0; 61 bottom: 0; 62 right: 0; 63 background: black; 64 padding: 5px 20px; 65} 66#banner-wrapper { 67 text-align: right; 68} 69#banner-wrapper h1, .un22732 #banner-wrapper p { 70 text-transform: uppercase; 71 font-family: 'Muli'; 72 color: #ff8f00; 73 letter-spacing: .25rem; 74 font-size: 36px; 75 padding-bottom: 0; 76} 77.un22732 #banner-wrapper p { 78 font-weight: 700; 79 margin: 0; 80 81} 82.un22732 #banner-wrapper h1 { 83 font-weight: 600; 84 color: white; 85 font-size: 22px; 86} 87.un22732 #banner-wrapper h1 span { 88 margin-bottom: 5rem; 89 font-weight: 500; 90} 91#banner-wrapper h1 span, span.span-1 { 92 display: block; 93 font-size: 22px; 94} 95#banner-wrapper p, #banner-wrapper span.span-2 { 96 margin-top: 0; 97 margin-bottom: 5rem; 98 text-transform: uppercase; 99 font-size: 18px; 100 display: block; 101 letter-spacing: 0.2rem; 102 font-weight: 400; 103} 104.un22734 #banner-wrapper p { 105 margin-top: 1rem; 106} 107#banner-wrapper p span { 108 display: block; 109} 110#banner-wrapper a.co-ord-button { 111 background: #ff8f00; 112 padding: 15px 70px 15px 25px; 113 position: relative; 114 font-size: 18px; 115 font-weight: 300; 116} 117#banner-wrapper a.co-ord-button:hover { 118 color: white; 119 font-weight: 600; 120} 121 122 123 124 125 126 127#overlay-section { 128 align-content: baseline; 129 align-items: stretch; 130 transition: height .6s ease-in-out; 131 overflow: hidden; 132 padding-top: 0; 133 padding-bottom: 0; 134} 135#overlay-section > .two-third { 136position: relative; 137} 138#overlay-section > .third, #overlay-section > .two-third { 139 max-width: none; 140 padding: 0 2rem; 141} 142#overlay-section .column { 143 margin-bottom: 0; 144 margin-top: 0; 145} 146#overlay-section .column.half.text-left { 147 width: 100% !important; 148} 149#overlay-section .column.half.button-right { 150 width: 10%; 151 padding: 0; 152 right: 0; 153 bottom: 0; 154} 155#overlay-section .overlay-list { 156 background: rgba(0, 0, 0, 0.8); 157 height: 100%; 158 overflow: hidden; 159 position: relative; 160} 161#overlay-section .overlay-list ul { 162 display: inline-flex; 163 list-style: none; 164 margin: 0; 165 padding: 0; 166 transition: margin 1s ease-in-out; 167 white-space: nowrap 168} 169#overlay-section .overlay-list ul li:not([class*="overlay"]) { 170 transition: background .15s ease-in-out; 171} 172#overlay-section .overlay-list ul li:not([class]):hover { 173 background: rgba(0,0,0,0.4) 174} 175#overlay-section .overlay-list ul li.active { 176 background: #FF8F00; 177} 178#overlay-section .overlay-list ul li[class*="overlay"] {
179 align-items: center; 180 background: #FF8F00; 181 color: #000; 182 cursor: pointer; 183 display: flex; 184 font-size: 22px; 185 height: 100%; 186 opacity: 0; 187 padding: 0 1.25rem; 188 transition: opacity .25s ease-in-out, visibility .25s ease-in-out; 189 visibility: hidden; 190} 191#overlay-section .overlay-list ul li.overlay-prev { 192 left: 0; 193 position: absolute; 194} 195#overlay-section .overlay-list ul li.overlay-next { 196 position: absolute; 197 right: 0; 198} 199#overlay-section .overlay-list ul li.visible { 200 opacity: 1; 201 visibility: visible; 202} 203#overlay-section .overlay-list ul li a { 204 align-items: center; 205 color: #fff; 206 cursor: pointer; 207 display: flex; 208 height: 100%; 209 padding: .75rem 1.25rem; 210} 211#overlay-section .overlay-list ul li.active a { 212 color: #000; 213 font-weight: 700; 214 font-size: 18px; 215} 216#overlay-section .overlay-wrap { 217 background-image: url(https://www.easysites.uk/filestore/editor/2115136394/bigstock__d_model_of_the_house_2404619620200220140959.jpg); 218 height: 100%; 219 padding: 2rem 1.25rem; 220 position: relative; 221 z-index: 2; 222 object-fit: contain; 223 background-position: center; 224 min-height: 552px; 225} 226.overlay-wrap:before { 227 content: ""; 228 display: flex; 229 position: absolute; 230 background: rgba(255, 165, 0, 0.9); 231 top: 0; 232 right: 0; 233 left: 0; 234 bottom: 0; 235 z-index: -1; 236} 237#overlay-section a.is-btn.is-btn-ghost2.is-upper.plus-button { 238 position: absolute; 239 background: rgba(0, 0, 0, 0.7); 240 z-index: 3; 241 bottom: 0; 242 right: 0; 243 margin: 0; 244} 245.overlay-content.clearfix { 246 z-index: 3; 247} 248#overlay-section .overlay-content:not(:first-child) { 249 display: none; 250} 251#overlay-section h3 { 252 font-size: 25px; 253} 254#overlay-section p { 255 font-size: 16px; 256} 257#overlay-section h3, #overlay-section p { 258 color: #000; 259} 260#overlay-section a.is-btn.is-btn-ghost2.is-upper.plus-button:hover { 261 background: #000; 262} 263#overlay-section a.is-btn.is-btn-ghost2.is-upper.plus-button:before { 264 border: rgba(0, 0, 0, 0.1) solid 4px; 265} 266#overlay-section a.is-btn.is-btn-ghost2.is-upper.plus-button:hover:before { 267 content: ""; 268 animation-name: ripple; 269 border-color: #000; 270} 271#overlay-section a.button { 272 color: white; 273 padding: 10px 20px; 274 background: rgba(0, 0, 0, 0.7); 275 position: absolute; 276 right: 0; 277 bottom: 0; 278 transition: .5s ease; 279} 280#overlay-section a.button:hover { 281 background: black; 282 border: 3px solid black; 283 padding: 15px 25px; 284} 285figure.container { 286 max-width: 1080px; 287 width: 100%; 288 position: relative; 289 transition: .5s ease; 290 z-index: 0; 291} 292figure.container:hover { 293 background: black; 294 z-index: 2; 295} 296figure.container:after { 297 box-shadow: 0 0 0 0 transparent inset; 298 content: ""; 299 position: absolute; 300 top: 0; 301 bottom: 0; 302 left: 0; 303 right: 0; 304 transition: .5s ease; 305 z-index: 1; 306} 307.surrounding-locations p { 308 display: inline-block; 309 padding: 5px 10px; 310 background: transparent; 311 border: 3px solid #ff8f00; 312 text-transform: uppercase; 313 letter-spacing: 1px; 314 margin-bottom: 0; 315} 316figure.container:hover:after { 317 box-shadow: 0 0 0 5px #ff8f00 inset; 318} 319figure.container:hover figcaption { 320 opacity: 1; 321} 322figure.container figcaption { 323 transition: .5s ease; 324 opacity: 1; 325 position: absolute; 326 z-index: 1; 327 backface-visibility: hidden; 328 bottom: 0; 329 left: 0; 330 right: 0; 331} 332figure.container:hover img { 333 opacity: 0.4; 334} 335figure.container img { 336 margin: 0; 337 opacity: 1; 338 display: block; 339 width: 100% !important; 340 height: 275px; 341 transition: .5s ease; 342 backface-visibility: hidden; 343} 344figure.container:hover p { 345 padding-bottom: 25%; 346 padding-right: 20px; 347} 348figure.container p { 349 color: #FF8F00; 350 font-size: 18px; 351 padding: 10px 18px; 352 margin: 0; 353 padding-right: 30px; 354 text-transform: uppercase; 355 line-height: 1.4; 356 background: rgba(0, 0, 0, 0.8); 357 font-weight: 600; 358 transition: .5s ease; 359} 360figure.container p span { 361 line-height: inherit; 362 font-size: 16px; 363 display: block; 364 color: white; 365 font-weight: 500; 366} 367figure.container a.button { 368 color: #fffe; 369 background: rgba(0, 0, 0, 0); 370 padding: 5px 15px; 371 position: absolute; 372 bottom: 0; 373 right: 0; 374 transition: 0.5s ease; 375 z-index: 3; 376} 377figure.container:hover a.button { 378 background: #FF8F00; 379 color: black; 380} 381figure.container i.icon.ion-android-add { 382 font-size: 18px; 383} 384i.icon.ion-android-add { 385 font-size: 24px; 386} 387.photo-signature { 388 position: relative; 389 z-index: 1; 390 margin-bottom: 15%; 391} 392.photo-signature:before { 393 content: ""; 394 display: block; 395 position: absolute; 396 top: 0; 397 left: 70px; 398 bottom: 0; 399 right: 0; 400 background: #ff8f00; 401 z-index: 0; 402 transform: translate(0%, 20%); 403} 404.photo-signature img { 405 position: relative; 406 box-shadow: 0 0 0 5px #ff8f00; 407 max-width: 85%; 408} 409.title { 410 position: relative; 411} 412.title:before { 413 content: ""; 414 display: block; 415 position: absolute; 416 border-left: 5px solid rgba(255, 143, 0, 0.7); 417 height: 100%; 418 width: 10%; 419 top: -5px; 420 border-top: 5px solid rgba(255, 143, 0, 0.7); 421 border-bottom: 5px solid rgba(255, 143, 0, 0.7); 422} 423.title-position { 424 padding: 0.4rem 0.4rem 0.4rem 1rem; 425 font-size: 25px; 426} 427 428article .column.half.about-us-home { 429 order: 1; 430} 431.other-services { 432 margin: 0 2rem; 433} 434figure.testimonials-container { 435 max-width: 1080px; 436 width: 100%; 437 position: relative; 438 transition: .5s ease; 439 z-index: 0; 440 overflow: hidden; 441} 442figure.testimonials-container:hover { 443 border: 5px solid #FF8F00; 444 background: black; 445 transform: scale(1.05); 446 z-index: 2; 447} 448figure.testimonials-container:hover figcaption { 449 opacity: 1;
450} 451.about-us-home.column.two-third { 452 padding-bottom: 2rem; 453} 454figure.testimonials-container figcaption { 455 transition: .5s ease; 456 opacity: 1; 457 position: absolute; 458 z-index: 1; 459 backface-visibility: hidden; 460 bottom: 0; 461 left: 0; 462 right: 0; 463 overflow: auto; 464 width: 100%; 465 height: 100%; 466 transition: background .5s ease; 467} 468 469figure.testimonials-container:hover img { 470 opacity: 0.4; 471} 472 473figure.testimonials-container span.quote-name { 474 line-height: inherit; 475 font-size: 16px; 476 display: block; 477 color: white; 478 font-weight: 500; 479} 480figure.testimonials-container span.quote-loc { 481 font-size: 13px; 482 color: rgba(255, 255, 255, 0.5); 483} 484figure.boxtext { 485 width: 100%; 486 overflow: hidden; 487 position: relative; 488} 489figure.boxtext figcaption { 490 position: relative; 491 left: 0; 492 right: 0; 493 width: 100%; 494 height: 100%; 495 color: black; 496 font-size: .85em; 497 font-weight: 400; 498 z-index: 1; 499 max-height: 160px; 500 transition: 1s ease; 501} 502p.quote-details { 503 color: #ff8f00; 504 text-transform: uppercase; 505 font-size: 18px; 506 padding: 20px; 507 display: block; 508 margin: 0; 509 line-height: 1.4; 510 letter-spacing: .1rem; 511 font-weight: 600; 512 background: rgba(0, 0, 0, 0.8); 513 width: 100%; 514 z-index: 2; 515 position: relative; 516 transition: background .1s ease; 517} 518span.quote-name { 519 color: white; 520 display: block; 521 font-size: 16px; 522 font-weight: 500; 523 padding: 5px 0; 524} 525span.quote-loc { 526 color: rgba(255, 255, 255, 0.5); 527 font-weighT: 300; 528 font-size: 14px; 529 display: block; 530} 531p.full-quote { 532 padding: 20px; 533 margin: 0; 534 background: rgba(255, 143, 0, 0.8); 535 position: relative; 536 transform: translateY(-320px); 537 visibility: hidden; 538 transition: transform 1s ease, opacity 1s ease, visibility 2s ease; 539 opacity: 0; 540 z-index: 0; 541} 542.box-overlay { 543 position: absolute; 544 left: 0; 545 top: 0; 546 right: 0; 547 bottom: 0; 548} 549#container figure .box-overlay img { 550 width: 100%; 551 height: 100%; 552 object-fit: cover; 553 transform: translateY(-350px); 554 overflow: hidden; 555 visibility: hidden; 556 opacity: 0; 557 transition: transform .5s ease, visibility 2s ease, opacity 1s ease; 558} 559#container form:not(#pu-container form) { 560 background: rgba(17, 17, 17, 1); 561} 562#container fieldset label:not(#pu-container fieldset label) { 563 color: white; 564} 565#container fieldset label:after { 566 color: white; 567} 568.row.clearfix.get-in-touch { 569 align-items: center; 570} 571.contact-box i { 572 color: #ff8f00; 573} 574.contact-box a { 575 color: black; 576 text-decoration: none !important; 577} 578.contact-box a:hover { 579 color: white; 580 font-weight: 600 !important; 581} 582.contact-box { 583 padding: 20px; 584 z-index: 1; 585} 586.row.clearfix.get-in-touch .column.two-third { 587 padding: 0; 588 margin-bottom: -40px; 589} 590#container fieldset button.submit { 591 background: #ff8f00; 592} 593#container fieldset button.submit:hover { 594 filter: brightness(120%); 595} 596.spacer:before { 597 content: ""; 598 display: block; 599 border-top: 2px solid rgba(255, 143, 0, 0.2); 600 width: 100%; 601 height: 40%; 602 position: absolute; 603 left: 75%; 604 border-left: 2px solid rgba(255, 143, 0, 0.2); 605 top: 40%; 606} 607.spacer:after { 608 content: ""; 609 display: block; 610 border-bottom: 2px solid rgba(255, 143, 0, 0.2); 611 width: 100%; 612 height: 40%; 613 position: absolute; 614 right: 15%; 615 border-right: 2px solid rgba(255, 143, 0, 0.2); 616 bottom: 40%; 617} 618.spacer p:before { 619 content: ""; 620 display: block; 621 border-top: 2px solid rgba(255, 143, 0, 0.2); 622 width: 100%; 623 height: 40%; 624 position: absolute; 625 left: 87%; 626 top: 35%; 627} 628.spacer p:after { 629 content: ""; 630 display: block; 631 border-bottom: 2px solid rgba(255, 143, 0, 0.2); 632 width: 100%; 633 height: 40%; 634 position: absolute; 635 right: 27%; 636 bottom: 35%; 637} 638 639 640 641.blog-post .gallery-carousel .slick-slide div { 642 text-align: center; 643 transition: all 300ms ease; 644 height: 220px; 645 margin: 10px; 646 display: flex; 647 align-items: center; 648 padding: 0.5rem 0.75rem; 649 justify-content: center; 650 flex-flow: row wrap; 651 position: relative; 652} 653 654.blog-post .gallery-carousel .slick-center div { 655 -moz-transform: scale(1.08); 656 -webkit-transform: scale(1.08); 657 opacity: 1;
658 transform: scale(1.08); 659} 660 661.blog-post .gallery-carousel .slick-slide h4 { 662 flex: 1 0 100%; 663 padding: 0; 664 color: rgba(0, 0, 0, 0.3); 665 z-index: 1; 666 font-size: 19px; 667 line-height: 1.2; 668 font-weight: 400; 669 letter-spacing: 0; 670 margin-top: -70px; 671} 672.blog-post .gallery-carousel .slick-center h4 { 673 color: black; 674 font-size: 21px; 675} 676 677.blog-post .gallery-carousel .slick-slide div:before { 678 content: ""; 679 display: block; 680 height: 100%; 681 width: 100%; 682 position: absolute; 683 background: white; 684 z-index: 1; 685 opacity: 0.9; 686} 687.blog-post .gallery-carousel .slick-center div:before { 688 background: #ff8f00; 689} 690.blog-post .gallery-carousel .slick-slide div:after { 691 content: ""; 692 display: block; 693 height: 100%; 694 width: 100%; 695 position: absolute; 696 background-image: url(https://www.easysites.uk/filestore/editor/5230397041/BigStock/800bigstock-Angry-Couple-Argue-In-Therapy--30867067920200207095118.jpg); 697 background-size: cover; 698} 699 700.blog-post .gallery-carousel .slick-arrow { 701 top: 50%; 702 filter: invert(1); 703 transform: translateY(-50%); 704} 705.blog-post .gallery-carousel .slick-prev { 706 left: 0; 707} 708.blog-post .gallery-carousel .slick-arrow:before, .blog-post .gallery-carousel .slick-arrow:after { 709 background: none !important; 710} 711.blog-post .gallery-carousel .slick-dots { 712 bottom: -30px; 713} 714.blog-post .gallery-carousel .slick-dots li { 715 background: #ddd; 716} 717.blog-post .gallery-carousel .slick-dots li.slick-active, .blog-post .gallery-carousel .slick-dots li:hover { 718 background: orange; 719} 720 721.blog-post section h1 { 722 position: absolute; 723 top: 50%; 724 left: 50%; 725 z-index: 2; 726 -webkit-transform: translate(-50%, -50%); 727 transform: translate(-50%, -50%); 728 color: #fff; 729 text-align: center; 730 white-space: nowrap; 731} 732.blog-post #section04 a span { 733 position: absolute; 734 top: 0; 735 left: 50%; 736 width: 24px; 737 height: 24px; 738 margin-left: -12px; 739 border-left: 5px solid #fff; 740 border-bottom: 5px solid #fff; 741 -webkit-transform: rotate(-45deg); 742 transform: rotate(-45deg); 743 -webkit-animation: sdb04 2s infinite; 744 animation: sdb04 2s infinite; 745 box-sizing: border-box; 746} 747.blog-post .demo a { 748 position: absolute; 749 bottom: 20px; 750 left: 50%; 751 z-index: 2; 752 display: inline-block; 753 -webkit-transform: translate(0, -50%); 754 transform: translate(0, -50%); 755 color: #fff; 756 letter-spacing: .1em; 757 text-decoration: none; 758 transition: opacity .3s; 759} 760.blog-post .demo a:hover { 761 opacity: .5; 762} 763.gallery-carousel .slick-slide div { 764 text-align: center; 765 transition: all 300ms ease; 766 height: 150px; 767 margin: 10px; 768 display: flex; 769 align-items: center; 770 padding: 0 0.6rem; 771 justify-content: center; 772 flex-flow: row wrap; 773 position: relative; 774} 775.gallery-carousel .slick-center div { 776 -moz-transform: scale(1.08); 777 -webkit-transform: scale(1.08); 778 opacity: 1; 779 transform: scale(1.08); 780} 781.gallery-carousel .slick-slide h4 { 782 flex: 1 0 100%; 783 padding: 0; 784 color: rgba(0, 0, 0, 0.3); 785 z-index: 1; 786 font-size: 21px; 787 line-height: 1; 788 font-weight: 400; 789 letter-spacing: 0; 790} 791.gallery-carousel .slick-center h4 { 792 color: black; 793 font-size: 24px; 794} 795.gallery-carousel .slick-slide div:before { 796 content: ""; 797 display: block; 798 height: 100%; 799 width: 100%; 800 position: absolute; 801 background: white; 802 z-index: 1; 803 opacity: 0.9; 804} 805.gallery-carousel .slick-center div:before { 806 background: #ff8f00; 807} 808.gallery-carousel .slick-slide div:after { 809 content: ""; 810 display: block; 811 height: 100%; 812 width: 100%; 813 position: absolute; 814 background-image: url(https://www.easysites.uk/filestore/editor/5230397041/BigStock/800bigstock-Angry-Couple-Argue-In-Therapy--30867067920200207095118.jpg); 815 background-size: cover; 816} 817.gallery-carousel .slick-arrow { 818 top: 50%; 819 filter: invert(1); 820 transform: translateY(-50%); 821} 822.gallery-carousel .slick-prev { 823 left: 0; 824} 825.gallery-carousel .slick-arrow:before, .gallery-carousel .slick-arrow:after { 826 background: none !important; 827} 828.gallery-carousel .slick-dots { 829 bottom: -30px; 830} 831.gallery-carousel .slick-dots li { 832 background: #ddd; 833} 834.gallery-carousel .slick-dots li.slick-active, .gallery-carousel .slick-dots li:hover { 835 background: orange; 836} 837 838section h1 { 839 position: absolute; 840 top: 50%; 841 left: 50%; 842 z-index: 2; 843 -webkit-transform: translate(-50%, -50%); 844 transform: translate(-50%, -50%); 845 color: #fff; 846 text-align: center; 847 white-space: nowrap; 848} 849#section04 a span { 850 position: absolute; 851 top: 0; 852 left: 50%; 853 width: 24px; 854 height: 24px; 855 margin-left: -12px; 856 border-left: 5px solid #fff; 857 border-bottom: 5px solid #fff; 858 -webkit-transform: rotate(-45deg); 859 transform: rotate(-45deg); 860 -webkit-animation: sdb04 2s infinite; 861 animation: sdb04 2s infinite; 862 box-sizing: border-box; 863} 864.demo a { 865 position: absolute; 866 bottom: 20px; 867 left: 50%; 868 z-index: 2; 869 display: inline-block; 870 -webkit-transform: translate(0, -50%); 871 transform: translate(0, -50%); 872 color: #fff; 873 letter-spacing: .1em; 874 text-decoration: none; 875 transition: opacity .3s; 876} 877.demo a:hover { 878 opacity: .5; 879} 880@-webkit-keyframes sdb04 { 881 0% { 882 -webkit-transform: rotate(-45deg) translate(0, 0); 883 } 884 20% { 885 -webkit-transform: rotate(-45deg) translate(-10px, 10px); 886 } 887 40% { 888 -webkit-transform: rotate(-45deg) translate(0, 0); 889 } 890} 891@keyframes sdb04 { 892 0% { 893 transform: rotate(-45deg) translate(0, 0); 894 } 895 20% { 896 transform: rotate(-45deg) translate(-10px, 10px); 897 } 898 40% { 899 transform: rotate(-45deg) translate(0, 0); 900 } 901} 902.contact-redirect a { 903 color: white; 904 text-decoration: none !important; 905 padding: 15px 45px 15px 25px; 906 text-transform: uppercase; 907 background: black; 908 font-weight: 500; 909 position: absolute; 910 bottom: 50px; 911} 912.contact-redirect i.icon.ion-android-add { 913 font-size: 18px; 914 position: relative; 915 padding: 8px 15px; 916 bottom: 0; 917 right: 0; 918 top: 0; 919} 920.black-contact-box.column.half { 921 background: #222; 922 padding: 2rem; 923 margin-bottom: 0; 924} 925.black-contact-box.column.half:before { 926 content: ""; 927 display: block; 928 position: absolute; 929 bottom: 48.5%; 930 left: 0; 931 right: 0; 932 background: #222; 933 height: 330px; 934 z-index: -1; 935} 936 .un22732 .column.half.experience, .un22732 .column.half.RIBA { 937 background: #f3f3f3; 938 margin: 0.5rem 1rem; 939 position: relative; 940 padding: 15px 20px 0 20px; 941 width: auto; 942 display: inline-block; 943 float: left; 944} 945.un22732 .column.half.experience:before, .un22732 .column.half.RIBA:before { 946 width: 0; 947 height: 0; 948 border-style: solid; 949 border-width: 0 0 25px 25px; 950 border-color: transparent transparent #ff8f00 transparent; 951 content: ""; 952 display: block; 953 top: 0; 954 position: absolute; 955 left: 0; 956} 957.un22732 .column.half.experience:after, .un22732 .column.half.RIBA:after { 958 content: ""; 959 display: block; 960 position: absolute; 961 width: 0; 962 height: 0; 963 border-style: solid; 964 border-width: 25px 25px 0 0; 965 border-color: #fff transparent transparent transparent; 966 top: 0; 967 left: 0; 968} 969.column.half.experience, .column.half.RIBA { 970 background: white; 971 margin: 0.5rem 1rem; 972 position: relative; 973 padding: 15px 20px 0 20px; 974 width: 50% 975} 976.column.half.experience:before, .column.half.RIBA:before { 977 width: 0; 978 height: 0; 979 border-style: solid; 980 border-width: 0 0 25px 25px; 981 border-color: transparent transparent #ff8f00 transparent; 982 content: ""; 983 display: block; 984 top: 0; 985 position: absolute; 986 left: 0; 987} 988.column.half.experience img, .column.half.RIBA img { 989 height: 96px; 990} 991.column.half.experience:after, .column.half.RIBA:after { 992 content: ""; 993 display: block; 994 position: absolute; 995 width: 0; 996 height: 0; 997 border-style: solid; 998 border-width: 25px 25px 0 0; 999 border-color: #222 transparent transparent transparent; 1000 top: 0; 1001 left: 0; 1002} 1003.orange-contact-box.column.half { 1004 height: 330px;
1005 background: url(https://www.trimblearchitect.uk/optimised/d_model_of_the_house_2404619620200220140959.webp); 1006 margin: 0; 1007 background-size: cover; 1008 padding: 2rem; 1009} 1010.orange-contact-box.column.half:before { 1011 content: ""; 1012 display: block; 1013 background: #ffae34; 1014 position: absolute; 1015 left: 0; 1016 right: 0; 1017 z-index: 0; 1018 height: 330px; 1019 opacity: 0.9; 1020 bottom: 0; 1021} 1022.contact-redirect a:hover { 1023 color: white; 1024 font-weight: 700 !important; 1025} 1026.logo-name { 1027 display: block; 1028} 1029.logo-name p { 1030 color: #ff8f00; 1031 font-size: 30px; 1032 text-transform: uppercase; 1033 letter-spacing: 5px; 1034 font-weight: 700; 1035 margin: 0; 1036} 1037.logo-name span { 1038 font-weight: 200; 1039} 1040.logo-info { 1041 padding-left: 2rem; 1042} 1043.logo-location p { 1044 color: white; 1045 text-transform: uppercase; 1046 letter-spacing: 2px; 1047 display: block; 1048 margin: 0; 1049} 1050.logo-location { 1051 margin-bottom: 1rem; 1052} 1053p.contact-heading { 1054 font-size: 26px; 1055 font-weight: 700; 1056 text-transform: uppercase; 1057 letter-spacing: 5px; 1058} 1059.contact-redirect p { 1060 z-index: 1; 1061 position: relative; 1062} 1063 font-weight: 700; 1064 text-transform: uppercase; 1065 letter-spacing: 5px; 1066} 1067.contact-redirect p { 1068 z-index: 1; 1069 position: relative; 1070} 1071.fourth-background a.button { 1072 padding: 10px 20px; 1073 background: rgba(0, 0, 0, 0.7); 1074 position: absolute; 1075 color: white; 1076 right: 0; 1077 bottom: 0; 1078} 1079.fourth-background { 1080 position: relative; 1081} 1082.fourth-background a.button:hover { 1083 color: white; 1084 background: black; 1085} 1086.timeline span { 1087 text-transform: uppercase; 1088 padding-right: 0.5rem; 1089 font-weight: 600; 1090 color: #ff8f00; 1091} 1092.timeline, .timeline-design { 1093 position: relative; 1094} 1095.timeline:before { 1096 content: ""; 1097 display: block; 1098 position: absolute; 1099 border-top: 5px solid rgba(255, 143, 0, 0.7); 1100 width: 100%; 1101 left: 0; 1102 top: 15px; 1103 z-index: 0; 1104} 1105.timeline-design:before { 1106 content: ""; 1107 display: block; 1108 border-top: 5px solid rgba(255, 143, 0, 0.7); 1109 border-bottom: 5px solid rgba(255, 143, 0, 0.7); 1110 border-left: 5px solid rgba(255, 143, 0, 0.7); 1111 height: 50px; 1112 width: 5%; 1113 position: absolute; 1114 top: -12px; 1115 left: 25%; 1116 z-index: 2; 1117 right: 0; 1118 bottom: 0; 1119} 1120p.timeline-heading { 1121 text-align: center; 1122 font-size: 21px; 1123 text-transform: uppercase; 1124 font-weight: 700; 1125 position: relative; 1126 z-index: 3; 1127} 1128.timeline-design:after { 1129 content: ""; 1130 display: block; 1131 position: absolute; 1132 background: white; 1133 width: 50%; 1134 top: 0; 1135 left: 25%; 1136 z-index: 1; 1137 right: -220%; 1138 bottom: 0; 1139 height: 50px; 1140} 1141p.contact-title { 1142 color: orange; 1143 text-transform: uppercase; 1144 letter-spacing: 2px; 1145 font-size: 21px; 1146 font-weight: 500; 1147} 1148p.contact-sub { 1149 display: block; 1150 line-height: 1.4; 1151 margin: 0.6rem 0; 1152 color: white; 1153 letter-spacing: 2px; 1154 font-weight: 600; 1155 text-transform: uppercase; 1156} 1157p.contact-feature { 1158 color: white; 1159 text-transform: uppercase; 1160 letter-spacing: 2px; 1161 line-height: 1.4; 1162 display: block; 1163 margin: 0; 1164} 1165.column.third.link-design a { 1166 color: white; 1167 text-decoration: none !important; 1168} 1169.column.third.link-design a:hover { 1170 font-weight: 700; 1171} 1172 1173#container article #news_feed #info_panel { 1174 display: none; 1175} 1176#container article #news_feed.news_article { 1177 margin: 0; 1178} 1179.column.half.portfolio-image { 1180 position: relative; 1181} 1182.column.half.portfolio-image img { 1183 position: relative; 1184 z-index: 1; 1185} 1186.landscape { 1187 position: absolute; 1188 bottom: -5%; 1189 right: 16%; 1190} 1191.portrait { 1192 position: absolute; 1193 bottom: -8%; 1194 right: 16%; 1195} 1196.column.half.portfolio-info { 1197 margin-top: 1rem; 1198} 1199.landscape:before, .portrait:before { 1200 content: ""; 1201 display: block; 1202 background: #ec7000; 1203 height: 25px; 1204 width: 30px; 1205 transform: skewX(-45deg); 1206 position: absolute; 1207 bottom: 15%; 1208 right: -6%; 1209 z-index: 0; 1210} 1211img.refurb-icon, img.commercial, img.listed, img.misc, img.conversions, img.new-build { 1212 height: 92px;
1213 position: relative; 1214 z-index: 1; 1215} 1216img.domestic-icon { 1217 height: 92px; 1218 position: relative; 1219 z-index: 1; 1220} 1221#container td { 1222 border: none; 1223 text-align: left; 1224 color: #111; 1225 font-size: 16px; 1226 padding: 10px 15px 10px 0; 1227 text-transform: uppercase; 1228 letter-spacing: 2px; 1229} 1230#container td:hover { 1231 background: none; 1232} 1233td span { 1234 color: orange; 1235 text-transform: uppercase; 1236 letter-spacing: 2px; 1237 font-weight: 600; 1238} 1239.category-redirect a, .similar-project a { 1240 background: rgba(0, 0, 0, 0.7); 1241 padding: 5px 20px; 1242 font-size: 21px; 1243 position: absolute; 1244 right: 0; 1245 top: 0; 1246 bottom: 0; 1247 color: white; 1248 height: 100%; 1249 display: flex; 1250 align-items: center; 1251} 1252.category-redirect, .similar-project { 1253 background: #ff8f00; 1254 padding: 10px 20px; 1255 text-transform: uppercase; 1256 letter-spacing: 2px; 1257 font-weight: 600; 1258 position: relative; 1259 margin: 0.5rem 0; 1260} 1261.category-redirect p, .similar-project p { 1262 margin: 0; 1263 width: 90%; 1264} 1265.category-redirect a:hover, .similar-project a:hover { 1266 color: white; 1267 background: black; 1268} 1269.directories { 1270 padding-top: 0; 1271} 1272#container .column.half.portfolio-image .image { 1273 position: relative; 1274 z-index: 1; 1275} 1276.row.clearfix.other-projects #slick-content { 1277 padding-top: 30px; 1278} 1279.row.clearfix.other-projects { 1280 padding-top: 50px; 1281} 1282.blog-post .gallery-carousel .slick-slide div img.image { 1283 height: 96px; 1284 z-index: 1; 1285 margin-top: -30px; 1286 width: auto; 1287} 1288a.portfolio-button { 1289 z-index: 1; 1290 color: white; 1291 background: rgba(0, 0, 0, 0.7); 1292 padding: 5px 15px; 1293 position: absolute; 1294 right: 0; 1295 bottom: 0; 1296} 1297a.portfolio-button:hover { 1298 background: black; 1299 color: white; 1300} 1301#news_feed.news_article .article_img { 1302 display: block; 1303} 1304.blog-feed-container #news_feed:not(.news_article) .blog-post:before { 1305 display: none; 1306} 1307#container .blog-feed-container #news_feed:not(.news_article) .blog-post:first-child { 1308 flex: 1 0 100%; 1309} 1310#container .blog-feed-container #news_feed:not(.news_article) .blog-post { 1311 margin: 1rem; 1312 display: table; 1313} 1314#container .blog-feed-container #news_feed:not(.news_article) .blog-post { 1315 align-content: center; 1316 background: #FFF; 1317 display: inline-table; 1318 flex: 1 0 100%; 1319 flex-flow: column wrap; 1320 justify-content: flex-end; 1321 margin: 1rem; 1322 min-height: auto; 1323 position: relative; 1324 vertical-align: baseline; 1325 max-width: 100%; 1326 box-shadow: 0 0 0 5px #ff8f00; 1327} 1328#container .blog-feed-container #news_feed:not(.news_article) h2:first-child { 1329 color: #ff8f00; 1330 font-size: 24px; 1331 font-weight: 400; 1332 letter-spacing: 0; 1333 line-height: 1.4; 1334 transition: color .3s ease-in-out; 1335 display: table-cell; 1336 position: absolute; 1337 padding: 0.75rem; 1338 background: rgba(0, 0, 0, 0.85); 1339 z-index: 1; 1340 width: 100%; 1341 bottom: -5px; 1342 left: 0; 1343 right: 0; 1344} 1345#container #news_feed:not(.news_article) .blog-post .article_img { 1346 height: auto; 1347 left: 0; 1348 top: 0; 1349 width: 100%; 1350 display: table-footer-group; 1351 right: 0; 1352 bottom: 0; 1353 position: relative; 1354} 1355#container #news_feed:not(.news_article) .blog-post img { 1356 height: 400px; 1357 line-height: 1; 1358 margin: 0; 1359 min-width: 100%; 1360 object-fit: cover; 1361 overflow: hidden; 1362 position: initial; 1363} 1364#container article #news_feed #more_information p { 1365 visibility: hidden; 1366} 1367#more_information a:after { 1368 display: none; 1369} 1370#container .blog-feed-container #news_feed:not(.news_article) .blog-post:after { 1371 content: ""; 1372 display: block; 1373 position: absolute; 1374 top: 0; 1375 bottom: 0; 1376 left: 0; 1377 right: 0; 1378 background: hsla(0, 0%, 0%, 0.5); 1379 transition: opacity .25s ease-in-out; 1380 opacity: 0; 1381} 1382#container .blog-feed-container #news_feed:not(.news_article) .blog-post:hover:after { 1383 opacity: 1; 1384} 1385#container article #news_feed #more_information a { 1386 z-index: 5; 1387} 1388#container .blog-feed-container aside .sidebar_links li a { 1389 background: #ff8f00; 1390 border: 0; 1391 border-radius: 0; 1392 color: black; 1393 font-weight: 500; 1394 letter-spacing: 1px; 1395 margin: .4rem 0; 1396 padding: .2rem .6rem; 1397 transition: background .25s ease-in-out, color .15s ease-in-out; 1398 text-transform: uppercase; 1399} 1400#container .blog-feed-container aside .sidebar_links li a:hover, .blog-feed-container aside .sidebar_links li a.selected-cat { 1401 background: black; 1402 color: orange; 1403} 1404#container .blog-feed-container .sidebar_links .sidebar_heading:before { 1405 color: #000; 1406 content: "Take A Look At our projects"; 1407 display: block; 1408 font-family: 'Muli'; 1409 font-weight: 600; 1410 font-size: 32px; 1411 letter-spacing: 2px; 1412 line-height: 1.4; 1413 padding-bottom: 1.2rem; 1414 text-transform: uppercase; 1415} 1416#container .blog-feed-container aside .sidebar_links li a:active, .blog-feed-container aside .sidebar_links li a.selected-cat { 1417 background: black; 1418 color: #ff8f00; 1419} 1420#container #banner_can { 1421 display: none; 1422}
1423.blog-section:not(.body-portfolio):not(.un22886) .sidebar_container.sidebar_links { 1424 display: none; 1425} 1426.blog-feed-container .sidebar_content { 1427 margin-top: 4rem; 1428} 1429.content li { 1430 list-style: none; 1431} 1432 1433 1434 1435 1436@media (min-width: 23rem) { 1437 #container header #header_contact { 1438 margin-left: calc(72% + 1rem); 1439} 1440} 1441 1442 1443@media (min-width: 28rem) { 1444.title span { 1445 display: inline-block; 1446} 1447.column.half.experience, .column.half.RIBA { 1448 width: auto; 1449 float: left; 1450} 1451} 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463@media (min-width: 30rem) { 1464.other-services .column.fourth { 1465 max-width: 50%; 1466 padding: 0 0.75rem; 1467} 1468.other-services { 1469 margin: 0 1rem; 1470} 1471#container header #header_contact { 1472 margin-left: calc(83% + 1rem); 1473} 1474.landscape, .portrait { 1475 right: 27%; 1476} 1477} 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487@media (min-width: 35rem) { 1488.landscape, .portrait { 1489 right: 37%; 1490} 1491} 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501@media (min-width: 40rem) { 1502#overlay-section .overlay-wrap { 1503 min-height: 370px; 1504} 1505#overlay-section .column.half.text-left { 1506 width: 80% !important; 1507} 1508article .row > .half { 1509 max-width: calc(35rem); 1510 flex: 1 0 100%; 1511} 1512.other-services .column.fourth { 1513 flex: 1 0 50%; 1514} 1515figure.testimonials-container .column.third { 1516 flex: 1 0 33%; 1517 max-width: calc(40rem / 3); 1518} 1519header:before { 1520 right: 40%; 1521} 1522#container header #header_contact { 1523 margin-left: calc(40% + 1rem); 1524} 1525.header_logo { 1526 margin: 1.25rem 0; 1527 margin-right: 1.5rem; 1528} 1529.row.clearfix.get-in-touch { 1530 align-items: center; 1531 padding: 0 0 0 3rem; 1532} 1533.row.clearfix.get-in-touch .column.two-third { 1534 padding: 0; 1535 margin: 0; 1536 max-width: 100%; 1537 z-index: 0; 1538} 1539.row.clearfix.get-in-touch .column.third { 1540 z-index: 2; 1541 margin-left: 1rem; 1542} 1543.contact-box { 1544 margin-right: 1rem; 1545} 1546.fourth-background a.button { 1547 padding: 10px 20px; 1548 background: rgba(0, 0, 0, 0.7); 1549 position: absolute; 1550 color: white; 1551 right: 0; 1552 bottom: 0; 1553} 1554.fourth-background { 1555 height: 90%; 1556} 1557.timeline:before { 1558 width: 100%; 1559} 1560.timeline-design:before { 1561 left: 37%; 1562} 1563.timeline-design:after { 1564 width: 25%; 1565 left: 37%; 1566} 1567.logo-location { 1568 margin-bottom: 0; 1569} 1570.row.clearfix.contact .column.third { 1571 max-width: calc(35rem / 3); 1572} 1573#article_snippet > .row > .half { 1574 width:100%; 1575} 1576.landscape, .portrait { 1577 right: 40%; 1578} 1579#container .blog-feed-container #news_feed:not(.news_article) .blog-post { 1580 flex: 1 0 40%; 1581 margin: 0.5rem; 1582} 1583} 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606@media (min-width: 50rem) { 1607article .row > .half { 1608 max-width: calc(45rem); 1609 flex: 1 0 100%; 1610} 1611article .column.half.about-us-home { 1612 padding-left: 0; 1613 padding-right: 0; 1614} 1615 1616.other-services .column.fourth { 1617 max-width: calc(45rem / 4); 1618 flex: 1 0 25%; 1619} 1620.other-services { 1621 margin: 0; 1622} 1623.row.clearfix.testimonials .column.third { 1624 flex: 1 0 33%; 1625 max-width: calc(45rem / 3); 1626} 1627figure.testimonials-container img { 1628 min-height: 500px; 1629 max-height: none; 1630} 1631span.quote-name { 1632 display: block; 1633} 1634p.quote-details { 1635 display: block; 1636} 1637.row.clearfix.about-us .column.third, .row.clearfix.about-us .about-us-home.column.two-third { 1638 max-width: calc(45rem / 2); 1639 flex: 1 0 50%; 1640} 1641.photo-signature:before { 1642 left: 0; 1643 transform: translate(10%, 20%); 1644} 1645.photo-signature img { 1646 max-width: 100%; 1647} 1648header:before { 1649 right: 60%; 1650} 1651#container header #header_contact { 1652 margin-left: calc(50% + 1rem); 1653} 1654.timeline:before { 1655 width: 111%; 1656} 1657.timeline-design:before { 1658 left: 19%; 1659} 1660.timeline-design:after { 1661 left: 19%; 1662 width: 65%; 1663} 1664figure.boxtext:hover .quote-details { 1665 background: black; 1666} 1667figure.boxtext:hover .full-quote { 1668 transform: translateY(0); 1669 visibility: visible; 1670 opacity: 1; 1671} 1672figure.boxtext figcaption { 1673 max-height: 200px; 1674} 1675figure.boxtext:hover figcaption { 1676 max-height: 100%; 1677 padding-bottom: 3rem; 1678} 1679.row.clearfix.test { 1680 padding-bottom: 0; 1681} 1682.un22732 .embed-responsive.embed-responsive-16by9 { 1683 padding-bottom: 20%; 1684 transform: scale(1.1); 1685} 1686.row.clearfix.contact .column.third { 1687 max-width: calc(45rem / 3); 1688} 1689.column.third.indent, .column.two-third.indent { 1690 padding-left: 4rem; 1691} 1692#article_snippet > .row > .half { 1693 width: 50%; 1694} 1695#container .column.half.portfolio-image .image { 1696width: 90%; 1697} 1698.landscape, .portrait { 1699 right: 28%; 1700} 1701#container .blog-feed-container #news_feed:not(.news_article) .blog-post { 1702 flex: 1 0 30%; 1703 max-width: 30%; 1704 margin: 0.75rem 1705} 1706} 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732@media (min-width: 60rem) { 1733 #overlay-section > .third { 1734 max-width: calc(950px / 3); 1735 } 1736 1737 #overlay-section > .two-third { 1738 max-width: calc(890px / 3 * 2); 1739 } 1740 1741 #overlay-section > .column:first-child { 1742 padding-right: 0; 1743 } 1744 #overlay-section > .column:first-child + .column { 1745 padding-left: 0; 1746 } 1747 #overlay-section .overlay-list ul { 1748 flex-flow: row wrap; 1749 } 1750 #overlay-section .overlay-list ul li { 1751 flex: 1 0 100%; 1752 } 1753 #overlay-section .overlay-list ul li[class*="overlay"] { 1754 display: none; 1755 } 1756 #overlay-section .overlay-list ul li a { 1757 padding: 1.5rem 2rem; 1758 } 1759#overlay-section .column.half { 1760 width: 80%; 1761} 1762#overlay-section .overlay-wrap { 1763 min-height: 460px; 1764} 1765.row > .half:first-child { 1766 padding-left: 0; 1767 padding-right: 1rem; 1768} 1769article .row > .half { 1770 max-width: calc(55rem / 2); 1771} 1772.other-services .column.fourth { 1773 max-width: calc(55rem / 4); 1774} 1775.row.clearfix.testimonials .column.third { 1776 max-width: calc(55rem / 3); 1777 flex: 1 0 33%; 1778} 1779figure.testimonials-container img { 1780 max-height: 400px; 1781} 1782.row.clearfix.about-us .column.third { 1783 max-width: calc(55rem / 3); 1784 flex: 1 0 33%; 1785} 1786.row.clearfix.about-us .about-us-home.column.two-third { 1787 max-width: calc(55rem / 3 * 2); 1788 flex: 1 0 66%; 1789} 1790header > .header_logo, header .company-branding > .header_logo { 1791 margin: 1rem 0; 1792} 1793header:before { 1794 right: 70%; 1795} 1796#container header #header_contact h4 { 1797 filter: invert(0); 1798} 1799#container header #header_contact { 1800 margin-left: 0; 1801} 1802#container .header_logo img { 1803 z-index: 2; 1804} 1805header:before { 1806 z-index: 2; 1807} 1808.contact-box { 1809 margin-right: 1rem; 1810} 1811.black-contact-box.column.half { 1812 background: #222; 1813 padding: 2rem; 1814 margin-bottom: 0px; 1815} 1816.logo-location { 1817 padding-bottom: 1rem; 1818} 1819.row.clearfix.contact .column.third { 1820 max-width: calc(55rem / 3); 1821} 1822article .black-contact-box.column.half:before { 1823right: 50%; 1824height: 100%; 1825} 1826article .orange-contact-box.column.half:before { 1827left: 50%; 1828height: 100%; 1829} 1830.directories { 1831 padding-top: 1rem; 1832} 1833.black-contact-box.column.half:before { 1834left: 0; 1835right: 0; 1836top: 0;
1837bottom: 0; 1838height: auto; 1839} 1840.orange-contact-box.column.half:before { 1841 left: 0%; 1842 height: 40%; 1843} 1844} 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855@media (min-width: 80rem) { 1856 #overlay-section > .third { 1857 max-width: calc(1000px / 3); 1858 } 1859 1860 #overlay-section > .two-third { 1861 max-width: calc(1300px / 3 * 2); 1862 } 1863article .row > .half { 1864 max-width: calc(75rem / 2); 1865} 1866.other-services .column.fourth { 1867 max-width: calc(75rem / 4); 1868} 1869.row.clearfix.testimonials .column.third { 1870 max-width: calc(75rem / 3); 1871 flex: 1 0 33%; 1872} 1873.row.clearfix.about-us .column.third { 1874 max-width: calc(75rem / 3); 1875 flex: 1 0 33%; 1876} 1877.row.clearfix.about-us .about-us-home.column.two-third { 1878 max-width: calc(75rem / 3 * 2); 1879 flex: 1 0 66%; 1880} 1881header:before { 1882 right: 80%; 1883} 1884.timeline-design:before { 1885 left: 29%; 1886} 1887.timeline-design:after { 1888 width: 45%; 1889 left: 29%; 1890} 1891.row.clearfix.contact .column.third { 1892 max-width: calc(75rem / 3); 1893} 1894} 1895 1896.QA-Q { 1897width: 35%; 1898background: #ff8f00; 1899padding:1rem; 1900border-top-left-radius: 7px; 1901border-top-right-radius: 7px; 1902border-bottom-right-radius: 7px; 1903} 1904 1905.QA-A { 1906margin-top: 1rem; 1907float: right; 1908width: 75%; 1909background: lightgrey; 1910padding:1rem; 1911border-top-left-radius: 7px; 1912border-top-right-radius: 7px; 1913border-bottom-left-radius: 7px; 1914} 1915 1916.QA-Q:after { 1917content: ''; 1918 position: absolute; 1919 bottom: 0; 1920 left: 0; 1921 width: 0; 1922 height: 0; 1923 border: 20px solid transparent; 1924 border-top-color: #ff8f00; 1925 border-bottom: 0; 1926 border-left: 0; 1927 margin-bottom: -20px; 1928} 1929 1930.QA-A:after { 1931content: ''; 1932 position: absolute; 1933 bottom: 0; 1934 right: 0; 1935 width: 0; 1936 height: 0; 1937 border: 20px solid transparent; 1938 border-top-color: lightgrey; 1939 border-bottom: 0; 1940 border-right: 0; 1941 margin-left: -10px; 1942 margin-bottom: -20px; 1943} 1944 1945 1946.QA-Q h5 { 1947padding:0;} 1948 1949.QA-A p { 1950color: #222; 1951} 1952 1953#content_container td.heading { 1954font-weight: bold; 1955 text-transform: uppercase; 1956letter-spacing: 1px; 1957width: 20%; 1958padding-left: 1rem; 1959} 1960 1961#container td { 1962text-transform: none; 1963letter-spacing: 0; 1964font-family: 'Muli'; 1965} 1966 1967#content_container tr.alt { 1968background: #f5f5f5; 1969} 1970 1971.accordion { 1972 background-color: #ff8f00; 1973 color: #444; 1974 cursor: pointer; 1975 padding: 18px; 1976 width: 100%; 1977 border: none; 1978 text-align: left; 1979 outline: none; 1980 font-size: 15px; 1981 transition: 0.4s; 1982 text-transform: uppercase; 1983 font-family: 'Muli'; 1984 letter-spacing: 2px; 1985} 1986 1987.accordion.active, .accordion:hover { 1988 background-color: rgb(34 34 34); 1989color: white; 1990} 1991 1992.panel { 1993 padding: 0 18px; 1994 display: none; 1995 background-color: white; 1996 overflow: hidden; 1997} 1998 1999.accordion h5 { 2000font-size: 18px; 2001} 2002 2003.accordion:hover h5, .accordion.active h5 { 2004color: #ff8f00; 2005} 2006 2007article h5 { 2008font-size: 18px; 2009} 2010 2011article div.column.fifth { 2012padding: 0.5rem; 2013} 2014 2015body .list { 2016display: table; 2017} 2018body .list i { 2019color: rgb(255, 177, 101); 2020margin-right: 8px; 2021} 2022 2023 2024@media (min-width: 40rem) { 2025.blog-section .blog-feed-container article .row>.half { 2026 width: 100%; 2027} 2028} 2029@media (min-width: 50rem) { 2030.blog-section .blog-feed-container article .row>.half { 2031 width: 100%; 2032} 2033} 2034@media (min-width: 60rem) { 2035.blog-section .blog-feed-container article .row>.half { 2036 width: 100%; 2037} 2038#container #nav ul li { 2039 display: inline-block; 2040 width: 220px; 2041} 2042#container #nav > li:not(.nav_placeholder) > ul { 2043 width: 440px; 2044 display: flex; 2045 flex-direction: row; 2046 flex-wrap: wrap; 2047} 2048 2049} 2050@media (min-width: 80rem) { 2051.blog-section .blog-feed-container article .row>.half { 2052 width: 50%; 2053} 2054} 2055 2056.slick-slide { 2057 pointer-events: none; 2058} 2059.slick-track .slick-center{ 2060 pointer-events: inherit; 2061} 2062 2063@media (max-width: 640px){ 2064#container .flatconbox{ 2065 padding: 0; 2066} 2067} 2068 2069@media (max-width: 700px) { 2070body .row img.prightimage, body .row img.pmobile-sizes{ 2071width: 100% !important; 2072height: 50vw !important; 2073object-fit: cover; 2074} 2075} 2076 2077body .row .prightimage { 2078 width: 40%; 2079 height: auto; 2080 float: right; 2081 margin-left: 2rem; 2082 min-width: 17rem; 2083 object-fit: contain; 2084 margin-top: 1rem; 2085 margin-bottom: 1rem;} 2086 2087.orangepoint li::marker { 2088color: rgb(255 143 0 / 70%); 2089} 2090 2091 2092 2093.blog-feed-container #news_feed ul { 2094 margin-left: 40px; 2095} 2096 2097 2098#content_container .faq-01 .content li { 2099 list-style: disc; 2100 margin-left: 35px; 2101 2102} 2103 2104body .product-content ul { 2105 border-left: 2px solid rgb(247, 142, 0); 2106} 2107 2108 2109 2110blog-section #news_feed .article_img img { 2111 height: 300px; 2112 object-fit: cover; 2113 2114 2115.blog-section .blog-feed-container #news_feed ul { 2116 padding-left: 20px; 2117} 2118 2119.area-links { 2120 display: flex; 2121 flex-wrap: wrap; 2122 justify-content: center; 2123} 2124 2125.area-links .area-link { 2126 display: inline-block; 2127 margin: 5px 10px; 2128 background: transparent; 2129 color: black; 2130 border: 3px solid rgb(255, 143, 0); 2131 padding: 0 10px 4px 10px; 2132 font-weight: 500; 2133 font-size: 16px; 2134 text-transform: uppercase; 2135 letter-spacing: 1px; 2136 text-decoration: none; 2137} 2138 2139.area-links .area-link::before { 2140 content: "\f1ff"; 2141 font-family: "Ionicons"; 2142 font-size: 24px; 2143 color: rgb(255, 143, 0); 2144 margin-right: 5px; 2145 text-transform: none; 2146 letter-spacing: 0; 2147}</style><link href="https://fonts.googleapis.com/css?family=Oswald:400,500&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Varela+Round&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Muli:300,400,500,800&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Work+Sans&display=swap" rel="stylesheet">
vendor: 63 bytes, line 2147
2147<script async src="https://www.googletagmanager.com/gtag/js?id=
2147AW-18293186738
vendor: 11 bytes, line 2147
2147"></script>
2147<script>window.dataLayer = window.dataLayer || []; 2148 function gtag(){dataLayer.push(arguments);} 2149 gtag('js', new Date()); 2150 gtag('set', 'allow_enhanced_conversions', true); 2151 gtag('config', 'AW-18293186738'); 2152 document.addEventListener('submit', function(e) { 2153 var f = e.target, em = f.querySelector('[name="email_address"]'); 2154 if (em && em.value) { 2155 try { sessionStorage.setItem('user_email', em.value.trim().toLowerCase()); } catch(x) {} 2156 } 2157 });</script>
2157<script type="application/ld+json">{ 2158 "@context": "http://schema.org", 2159 "@type": "LocalBusiness", 2160 "name" : "Trimble Architects", 2161 "address" : { 2162 "@type" : "PostalAddress", 2163 "streetAddress" : "36 York Street, Twickenham", 2164 "addressRegion" : "Middlesex", 2165 "addressCountry" : "United Kingdom", 2166 "postalCode" : "TW1 3LJ" 2167 }, 2168 "logo": "https://www.easysites.uk/filestore/editor/2115136394/500tezrtrimbletextblackartboard1.png", 2169 "image": "https://www.easysites.uk/filestore/editor/2115136394/trimblepic.jpg", 2170 "url" : "https://www.trimblearchitect.uk/blog" 2171 2172 ,"openingHoursSpecification": 2173 [{ 2174 "@type": "OpeningHoursSpecification", 2175 "dayOfWeek": [ 2176 "Monday" 2177 ], 2178 "opens": "9:00", 2179 "closes": "17:00" 2180 },{ 2181 "@type": "OpeningHoursSpecification", 2182 "dayOfWeek": [ 2183 "Tuesday" 2184 ], 2185 "opens": "9:00", 2186 "closes": "17:00" 2187 },{ 2188 "@type": "OpeningHoursSpecification", 2189 "dayOfWeek": [ 2190 "Wednesday" 2191 ], 2192 "opens": "9:00", 2193 "closes": "17:00" 2194 },{ 2195 "@type": "OpeningHoursSpecification", 2196 "dayOfWeek": [ 2197 "Thursday" 2198 ], 2199 "opens": "9:00", 2200 "closes": "17:00" 2201 },{ 2202 "@type": "OpeningHoursSpecification", 2203 "dayOfWeek": [ 2204 "Friday" 2205 ], 2206 "opens": "9:00", 2207 "closes": "17:00" 2208 }] }</script>
2208</head><body class="un40117 body-index blog-section"><div id="container"><div id="header_can"><header><a href="/" class="header_logo" title="Home"><img alt="Trimble Architects" src="https://www.easysites.uk/filestore/editor/2115136394/500tezrtrimbletextblackartboard1.png"> </a><h1>Trimble Architects</h1><h3>RIBA Architectural Services</h3><div id="header_contact"><h4 class="mobile"><span>Mobile Number:</span><strong><a class="phone-call" href="tel:07785711635">07785711635</a></strong></h4></div></header></div><div id="navigation_can"><div id="navigation"><ul id="nav"><li><a class="btn_" title="Home" target="_self" href="/">Home</a></li><li><a title="About Us" class="nav_drop btn_" target="_self" href="//www.trimblearchitect.uk/local-architect-firm">About Us</a><ul><li><a class="btn_" title="FAQ" target="_self" href="//www.trimblearchitect.uk/frequently-asked-questions">FAQ</a></li><li><a class="btn_" title="Projects" target="_self" href="https://www.trimblearchitect.uk/blog/category/projects">Projects</a></li><li><a class="btn_" title="Articles" target="_self" href="https://www.trimblearchitect.uk/blog/category/articles">Articles</a></li><li><a class="btn_" title="Areas" target="_self" href="//www.trimblearchitect.uk/local-london-architects">Areas</a></li></ul></li><li><a title="Our Services" class="nav_drop btn_" target="_self" href="//www.trimblearchitect.uk/architectural-services">Our Services</a><ul><li><a class="btn_" title="Commercial Property Development" target="_self" href="//www.trimblearchitect.uk/commercial-property-development">Commercial Property Development</a></li><li><a class="btn_" title="Construction Risk Assessment" target="_self" href="//www.trimblearchitect.uk/construction-risk-assessment">Construction Risk Assessment</a></li><li><a class="btn_" title="Structural Surveys" target="_self" href="//www.trimblearchitect.uk/structural-surveyor">Structural Surveys</a></li><li><a class="btn_" title="Party Wall Agreement Surveyor" target="_self" href="//www.trimblearchitect.uk/party-wall-agreements">Party Wall Agreement Surveyor</a></li><li><a class="btn_" title="Project Management" target="_self" href="//www.trimblearchitect.uk/project-management">Project Management</a></li><li><a class="btn_" title="Disabled Adaptations" target="_self" href="//www.trimblearchitect.uk/disabled-adaptations">Disabled Adaptations</a></li><li><a class="btn_" title="Refurbishment" target="_self" href="//www.trimblearchitect.uk/refurbishment-architect">Refurbishment</a></li><li><a class="btn_" title="New Build House" target="_self" href="//www.trimblearchitect.uk/new-build-house-architect">New Build House</a></li><li><a class="btn_" title="Property Conversions" target="_self" href="//www.trimblearchitect.uk/property-conversions-architect">Property Conversions</a></li><li><a class="btn_" title="Extensions" target="_self" href="//www.trimblearchitect.uk/extensions-architect">Extensions</a></li><li><a class="btn_" title="Loft Conversions" target="_self" href="//www.trimblearchitect.uk/loft-conversions-architect">Loft Conversions</a></li><li><a class="btn_" title="Architectural Drawings" target="_self" href="//www.trimblearchitect.uk/architectural-drawings">Architectural Drawings</a></li><li><a class="btn_" title="Residential Extensions" target="_self" href="//www.trimblearchitect.uk/residential-extensions">Residential Extensions</a></li><li><a class="btn_" title="Single Storey Extension" target="_self" href="//www.trimblearchitect.uk/single-storey-extension">Single Storey Extension</a></li><li><a class="btn_" title="Wrap Around Extension" target="_self" href="//www.trimblearchitect.uk/wrap-around-extension">Wrap Around Extension</a></li><li><a class="btn_" title="Flat Conversions" target="_self" href="//www.trimblearchitect.uk/flat-conversions">Flat Conversions</a></li><li><a class="btn_" title="Building Regulations Drawings" target="_self" href="//www.trimblearchitect.uk/building-regulations-drawings">Building Regulations Drawings</a></li><li><a class="btn_" title="Change of Use Extensions" target="_self" href="//www.trimblearchitect.uk/change-of-use-extensions">Change of Use Extensions</a></li><li><a class="btn_" title="Kitchen Extensions" target="_self" href="//www.trimblear
2208chitect.uk/kitchen-extensions">Kitchen Extensions</a></li><li><a class="btn_" title="Double Storey Extensions" target="_self" href="//www.trimblearchitect.uk/double-storey-extensions">Double Storey Extensions</a></li><li><a class="btn_" title="Basement Conversions" target="_self" href="//www.trimblearchitect.uk/basement-conversions">Basement Conversions</a></li><li><a class="btn_" title="Residential Architect" target="_self" href="//www.trimblearchitect.uk/residential-architect">Residential Architect</a></li></ul></li><li class="nav_placeholder"><a title="Planning Permission" class="nav_drop btn_">Planning Permission</a><ul><li><a class="btn_" title="Planning Permission Consultants" target="_self" href="//www.trimblearchitect.uk/planning-permission-advice">Planning Permission Consultants</a></li><li><a class="btn_" title="Listed Buildings" target="_self" href="//www.trimblearchitect.uk/listed-buildings-planning-permission">Listed Buildings</a></li></ul></li><li data-contact><a class="btn_" title="Contact" target="_self" href="//www.trimblearchitect.uk/contact-us">Contact</a></li></ul></div></div><div id="no-banner"><div class="nobanner"></div></div><div id="content_can"><div id="content_container" data-s="" data-g="none"><div class="blog-feed-container"><aside><div class="sidebar_container sidebar_search"><div class="sidebar_heading"><h2>Search Posts</h2></div><div class="sidebar_content"><p>Please enter a query below to search through the current blog posts.</p><form action="https://www.easysites.uk/websites/blog/search/blog_search.php" method="post" enctype="multipart/form-data"><input type="hidden" name="website_address" value="trimblearchitect.uk"> <input type="hidden" name="return_address" value="//www.trimblearchitect.uk/blog/category/projects"> <input name="search_post" style="width:95%;" type="text" placeholder="Search..." id="search_post" value="" pattern=".{3,}" required title="Please enter a search term with more than 3 characters"></p><input type="submit" name="Search" value="Search"/> </form></div></div><div class="sidebar_container sidebar_links"><div class="sidebar_heading"><h2>Categories</h2></div><div class="sidebar_content"><ul><li><a href="//www.trimblearchitect.uk/blog/category/architects" title="Architects">Architects</a></li><li><a href="//www.trimblearchitect.uk/blog/category/articles" title="Articles">Articles</a></li><li><a href="//www.trimblearchitect.uk/blog/category/commercial-extentions" title="Commercial Extentions">Commercial Extentions</a></li><li><a href="//www.trimblearchitect.uk/blog/category/domestic-extensions" title="Domestic Extensions">Domestic Extensions</a></li><li><a href="//www.trimblearchitect.uk/blog/category/future-projects" title="Future Projects">Future Projects</a></li><li><a href="//www.trimblearchitect.uk/blog/category/listed-buildings" title="Listed Buildings">Listed Buildings</a></li><li><a href="//www.trimblearchitect.uk/blog/category/misc-projects" title="Misc Projects">Misc Projects</a></li><li><a href="//www.trimblearchitect.uk/blog/category/new-build-houses" title="New Build Houses">New Build Houses</a></li><li><a class="selected-cat" href="//www.trimblearchitect.uk/blog/category/projects" title="Projects">Projects</a></li><li><a href="//www.trimblearchitect.uk/blog/category/property-conversions" title="Property Conversions">Property Conversions</a></li><li><a href="//www.trimblearchitect.uk/blog/category/total-refurbishment" title="Total Refurbishment">Total Refurbishment</a></li></ul></div></div></aside><article><div id="news_feed"><div class="blog-post"><h2>Extension to Leisure Centre in Hounslow</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T16:44:15+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/hcc-3d.jpg" title="Extension to Leisure Centre in Hounslow" alt="Extension to Leisure Centre in Hounslow" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A planned project for an extension to an existing Leisure Centre in Hounslow Project future Projects Location Hounslow Budget - Other future projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T16:44:15+00:00">26-11-2020</time> <a href="/extension-to-leisure-centre-in-hounslow" title="Extension to Leisure Centre in Hounslow">Read More</a></p></div></div><div class="blog-post"><h2>An Office Extension in Twickenham</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T16:41:28+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/thegreen-3d.jpg" title="An Office Extension in Twickenham" alt="An Office Extension in Twickenham" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A planned project for an office extension in Twickenham, Hounslow Project future Projects Location Twickenham, hounslow Budget - Other future projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T16:41:28+00:00">26-11-2020</time> <a href="/an-office-extension-in-twickenham" title="An Office Extension in Twickenham">Read More</a></p></div></div><div class="blog-post"><h2>A Car Dealership in Maidenhead</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T16:32:55+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/landrover-maidenhead3d.jpg" title="A Car Dealership in Maidenhead" alt="A Car Dealership in Maidenhead" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A planned project for a Land Rover Dealership in Maidenhead Project future Projects Location Maidenhead, Merseyside Budget - Other future projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T16:32:55+00:00">26-11-2020</time> <a href="/a-car-dealership-in-maidenhead" title="A Car Dealership in Maidenhead">Read More</a></p></div></div><div class="blog-post"><h2>A Community-Religious Centre in Southall</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T16:28:00+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/assami-3d.jpg" title="A Community-Religious Centre in Southall" alt="A Community-Religious Centre in Southall" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A planned project for a community/religious centre. Project future projects Location southall, ealing Budget - Other future projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T16:28:00+00:00">26-11-2020</time> <a href="/a-community-religious-centre-in-southall" title="A Community-Religious Centre in Southall">Read More</a></p></div></div><div class="blog-post"><h2>A Loft Conversion in Teddington</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T16:15:52+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/A Loft Conversion in Teddington.jpg" title="A Loft Conversion in Teddington" alt="A Loft Conversion in Teddington" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Loft conversion on detached residential property to add living space. Project Loft conversion Location Teddington, Richmond Upon Thames Budget £60,000 Other Loft Conversion Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T16:15:52+00:00">26-11-2020</time> <a href="/a-loft-conversion-in-teddington" title="A Loft Conversion in Teddington">Read More</a></p></div></div><div class="blog-post"><h2>A Private House in Twickenham</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T16:01:58+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/20191216_083919.jpg" title="A Private House in Twickenham" alt="A Private House in Twickenham" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Extension on back of the property to add space for a new openspace kitchen and dining area. Project Domestic Extension Location Twickenham, Hounslow Budget £60,000 Other domestic Extension Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T16:01:58+00:00">26-11-2020</time> <a href="/a-private-house-in-twickenham" title="A Private House in Twickenham">Read More</a></p></div></div><div class="blog-post"><h2>A Private House in Isleworth</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-11-26T15:52:05+00:00">26-11-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/20200109_
2208094237.jpg" title="A Private House in Isleworth" alt="A Private House in Isleworth" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Extension and alteration of residential property to install new features such as marble stone flooring and stairs. Project Extension/Alteration Location Isleworth, Hounslow Budget £60,000 Other Domestic Extension Projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-11-26T15:52:05+00:00">26-11-2020</time> <a href="/a-private-house-in-isleworth" title="A Private House in Isleworth">Read More</a></p></div></div><div class="blog-post"><h2>New Build in Hounslow</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:38:09+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/hounslow_
2208new_build.jpeg" title="New Build in Hounslow" alt="New Build in Hounslow" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>3 new build town houses Project new build Location hounslow, london Budget £300,000 Other new build projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:38:09+00:00">11-03-2020</time> <a href="/new-build-in-hounslow" title="New Build in Hounslow">Read More</a></p></div></div><div class="blog-post"><h2>Urban Infill in Holloway</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:37:45+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/tavistockterrace.jpg" title="Urban Infill in Holloway" alt="Urban Infill in Holloway" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A new house which is sandwiched into a gap in a Georgian terrace Project new build Location holloway, north london Budget £125,000 Other new build projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:37:45+00:00">11-03-2020</time> <a href="/urban-infill-in-holloway" title="Urban Infill in Holloway">Read More</a></p></div></div><div class="blog-post"><h2>New Build in Winchester</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:37:33+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/winchester_new_building.jpg" title="New Build in Winchester" alt="New Build in Winchester" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Four houses for the local Housing Association Project new build Location winchester, hampshire Budget £400,000 Other new build projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:37:33+00:00">11-03-2020</time> <a href="/new-build-in-winchester" title="New Build in Winchester">Read More</a></p></div></div><div class="blog-post"><h2>New Build in Weybridge</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:35:37+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/weybridge_new_build.jpg" title="New Build in Weybridge" alt="New Build in Weybridge" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Two new developer houses Project new build Location weybridge, surrey Budget £500,000 Other new build projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:35:37+00:00">11-03-2020</time> <a href="/new-build-in-weybridge" title="New Build in Weybridge">Read More</a></p></div></div><div class="blog-post"><h2>New Build in Southgate</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:35:07+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/southgatenewbuild.jpg" title="New Build in Southgate" alt="New Build in Southgate" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A very tight urban site that is half sunk into the ground Project new build Location southgate, north london Budget n/a Other new build projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:35:07+00:00">11-03-2020</time> <a href="/new-build-in-southgate" title="New Build in Southgate">Read More</a></p></div></div><div class="blog-post"><h2>New Build in Islington</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:34:42+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/newbuildislingtob.jpg" title="New Build in Islington" alt="New Build in Islington" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A very tight urban site that is half sunk into the ground Project new build Location islington, north london Budget £100,000 Other new build projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:34:42+00:00">11-03-2020</time> <a href="/new-build-in-islington" title="New Build in Islington">Read More</a></p></div></div><div class="blog-post"><h2>Property Conversion in Thirsk</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:33:20+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/thirskpropertyconversion.jpg" title="Property Conversion in Thirsk" alt="Property Conversion in Thirsk" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>An old malting building converted to a furniture factory and showroom Project property conversion Location thirsk, north yorkshire Budget n/a Other property conversion Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:33:20+00:00">11-03-2020</time> <a href="/property-conversion-in-thirsk" title="Property Conversion in Thirsk">Read More</a></p></div></div><div class="blog-post"><h2>Property Conversion in Finsbury Park</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:33:04+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/finsburyparkrdpropertyconversion.jpg" title="Property Conversion in Finsbury Park" alt="Property Conversion in Finsbury Park" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A four storey house converted to three flats with rear extension Project property conversion Location finsbury park, london Budget £125,000 Other property conversion Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:33:04+00:00">11-03-2020</time> <a href="/property-conversion-in-finsbury-park" title="Property Conversion in Finsbury Park">Read More</a></p></div></div><div class="blog-post"><h2>Property Conversion in Cannonbury</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:32:38+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/sothebyrdcannonburyproperty.jpg" title="Property Conversion in Cannonbury" alt="Property Conversion in Cannonbury" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A four storey house in North London converted into two flats Project property conversion Location cannonbury, north london Budget £75,000 Other property conversion Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:32:38+00:00">11-03-2020</time> <a href="/property-conversion-in-cannonbury" title="Property Conversion in Cannonbury">Read More</a></p></div></div><div class="blog-post"><h2>Property Conversion London City Border</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:31:48+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/cityborders.jpg" title="Property Conversion London City Border" alt="Property Conversion London City Border" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A conversion of a four storey property to two separate flats Project property conversion Location London city border Budget £75,000 Other property conversion Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:31:48+00:00">11-03-2020</time> <a href="/property-conversion-london-city-border" title="Property Conversion London City Border">Read More</a></p></div></div><div class="blog-post"><h2>Rebuild Existing Lifeboat House in Filey</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:30:43+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/lifeboathouse.jpg" title="Rebuild Existing Lifeboat House in Filey" alt="Rebuild Existing Lifeboat House in Filey" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>
2208Re-building of an existing Lifeboat House Project MISCELLANEOUS Location Filey, north yorkshire Budget £500,000 Other miscellaneous projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:30:43+00:00">11-03-2020</time> <a href="/rebuild-existing-lifeboat-house-in-filey" title="Rebuild Existing Lifeboat House in Filey">Read More</a></p></div></div><div class="blog-post"><h2>Sikh Temple Refurb in Birmingham</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:30:26+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/sikhtemplemisc.jpg" title="Sikh Temple Refurb in Birmingham" alt="Sikh Temple Refurb in Birmingham" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A refurbishment of a sikh temple which was given a new marble and granite facing Project MISCELLANEOUS Location Saltey, birmingham Budget n/a Other miscellaneous projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:30:26+00:00">11-03-2020</time> <a href="/sikh-temple-refurb-in-birmingham" title="Sikh Temple Refurb in Birmingham">Read More</a></p></div></div><div class="blog-post"><h2>Hotel Refurb in Dublin</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:30:05+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/dublin_worklistedbuilding.jpg" title="Hotel Refurb in Dublin" alt="Hotel Refurb in Dublin" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Stone applied to bedrooms and public areas in a new 260 room hotel Project miscellaneous Location dublin, ireland Budget n/a Other miscellaneous projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:30:05+00:00">11-03-2020</time> <a href="/hotel-refurb-in-dublin" title="Hotel Refurb in Dublin">Read More</a></p></div></div><div class="blog-post"><h2>Office Block Refurbishment</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:29:52+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/officebuildingmisccoventgarden.jpg" title="Office Block Refurbishment" alt="Office Block Refurbishment" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A refurbishment of a 1960s office block with a new entrance courtyard Project MISCELLANEOUS Location covent garden,london Budget £100,000 Other miscellaneous projects Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:29:52+00:00">11-03-2020</time> <a href="/office-block-refurbishment" title="Office Block Refurbishment">Read More</a></p></div></div><div class="blog-post"><h2>Listed Building at Gate House Richmond</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:28:46+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/gate_houselistedbuilding.jpeg" title="Listed Building at Gate House Richmond" alt="Listed Building at Gate House Richmond" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Complete refurbishment of one half of the Gate House to Ham House Project listed building Location Gate House, richmond Budget £60,000 Other listed buildings Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:28:46+00:00">11-03-2020</time> <a href="/listed-building-at-gate-house-richmond" title="Listed Building at Gate House Richmond">Read More</a></p></div></div><div class="blog-post"><h2>Listed Building in Dover</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:28:28+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/dover_listed building20200313101420.jpeg" title="Listed Building in Dover" alt="Listed Building in Dover" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Refurb and conversion facing the harbour & beneath the iconic Cliffs of Dover Project listed building Location dover Budget £200,000 Other listed buildings Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:28:28+00:00">11-03-2020</time> <a href="/listed-building-in-dover" title="Listed Building in Dover">Read More</a></p></div></div><div class="blog-post"><h2>Listed Building in Kendal</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:28:14+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/kendallistedbuildin.jpg" title="Listed Building in Kendal" alt="Listed Building in Kendal" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Restoration of a [Grade II] house in the Lake District Project listed building Location kendal, lake district Budget n/a Other listed buildings Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:28:14+00:00">11-03-2020</time> <a href="/listed-building-in-kendal" title="Listed Building in Kendal">Read More</a></p></div></div><div class="blog-post"><h2>Listed Building in Chippenham</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:27:59+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/listedbuildinggreencottage.jpg" title="Listed Building in Chippenham" alt="Listed Building in Chippenham" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Restoration of a Grade II arts and crafts house and barn conversion in Wiltshire Project Listed building Location chippenham Budget n/A Other listed buildings Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:27:59+00:00">11-03-2020</time> <a href="/listed-building-in-chippenham" title="Listed Building in Chippenham">Read More</a></p></div></div><div class="blog-post"><h2>Listed Building in Richmond</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:27:46+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/listed_new_richmond.jpg" title="Listed Building in Richmond" alt="Listed Building in Richmond" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Alterations to former Church Hall [Grade II] now office space Project Listed building Location richmond, London Budget n/A Other listed buildings Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:27:46+00:00">11-03-2020</time> <a href="/listed-building-in-richmond" title="Listed Building in Richmond">Read More</a></p></div></div><div class="blog-post"><h2>Commercial Extension in Fulham</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:27:16+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/fulhamhighst.jpg" title="Commercial Extension in Fulham" alt="Commercial Extension in Fulham" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>An extension to an existing 1950s office block Project commercial Extension Location Fulham, London Budget £150,000 Other commercial Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:27:16+00:00">11-03-2020</time> <a href="/commercial-extension-in-fulham" title="Commercial Extension in Fulham">Read More</a></p></div></div><div class="blog-post"><h2>Commercial Extension in Kentish Town</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:25:58+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/kentish_towncommericial.jpg" title="Commercial Extension in Kentish Town" alt="Commercial Extension in Kentish Town" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A office extension on industrial estate Project commercial Extension Location kentish town, London Budget £75,000 Other commercial Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:25:58+00:00">11-03-2020</time> <a href="/commercial-extension-in-kentish-town" title="Commercial Extension in Kentish Town">Read More</a></p></div></div><div class="blog-post"><h2>Total Refurbishment in Weybridge</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:25:25+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/refurbweybridge.jpg" title="Total Refurbishment in Weybridge" alt="Total Refurbishment in Weybridge" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A complete makeover & extension of 1930's Arts & Craft House Project Total refurbishment Location weybridge, London Budget £400,000 Other refurbishments Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:25:25+00:00">11-03-2020</time> <a href="/total-refurbishment-in-weybridge" title="Total Refurbishment in Weybridge">Read More</a></p></div></div><div class="blog-post"><h2>Total Refurbishment in Islington</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:25:03+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/islingtonrefurb.jpg" title="Total Refurbishment in Islington" alt="Total Refurbishment in Islington" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A complete make-over of a two floor maisonette Project total refurbishment Location islington, london Budget £75,000 Other refurbishments Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:25:03+00:00">11-03-2020</time> <a href="/total-refurbishment-in-islington" title="Total Refurbishment in Islington">Read More</a></p></div></div><div class="blog-post"><h2>Total Refurbishment in Great Saughton</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:24:42+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/refurbgtstaughton.jpg" title="Total Refurbishment in Great Saughton" alt="Total Refurbishment in Great Saughton" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>The conversion of a Victorian school in Cambridgeshire to a family home. Project total refurbishment Location great saughton, cambridgeshire Budget £100,000 Other refurbishments Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:24:42+00:00">11-03-2020</time> <a href="/total-refurbishment-in-great-saughton" title="Total Refurbishment in Great Saughton">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Hillingdon</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:23:10+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensionhillingdon.jpg" title="Domestic Extension in Hillingdon" alt="Domestic Extension in Hillingdon" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Side extension to a Victoria Villa Project Domestic Extension Location Finchley, North London Budget £100,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:23:10+00:00">11-03-2020</time> <a href="/domestic-extension-in-hillingdon" title="Domestic Extension in Hillingdon">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Strawberry Hill</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:22:26+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensionstrawberry-hill-dom-ext.jpg" title="Domestic Extension in Strawberry Hill" alt="Domestic Extension in Strawberry Hill" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A side extension of a 1930 house. Project Domestic Extension Location strawberry hill, twickenham Budget £50,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:22:26+00:00">11-03
2208-2020</time> <a href="/domestic-extension-in-strawberry-hill" title="Domestic Extension in Strawberry Hill">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension and Refurb</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:22:02+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensionandrefurb.jpg" title="Domestic Extension and Refurb" alt="Domestic Extension and Refurb" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>An end terrace extension and refurb Project Domestic Extension Location twickenham, London Budget £250,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:22:02+00:00">11-03-2020</time> <a href="/domestic-extension-and-refurb" title="Domestic Extension and Refurb">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Chiswick</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:21:33+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensionchiswick.jpeg" title="Domestic Extension in Chiswick" alt="Domestic Extension in Chiswick" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>House refurbishment with a kitchen, dining room extension in a Conservation area. Project Domestic Extension Location bedford park, chiswick Budget £200,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:21:33+00:00">11-03-2020</time> <a href="/domestic-extension-in-chiswick" title="Domestic Extension in Chiswick">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Thames Ditton</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:21:16+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensionthames.jpeg" title="Domestic Extension in Thames Ditton" alt="Domestic Extension in Thames Ditton" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>"Extension added to the rear of the house to add space for a dining table within the kitchen" Project Domestic Extension Location thames ditton, London Budget £70,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:21:16+00:00">11-03-2020</time> <a href="/domestic-extension-in-thames-ditton" title="Domestic Extension in Thames Ditton">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Twickenham</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:21:05+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/twickenham-extention.jpg" title="Domestic Extension in Twickenham" alt="Domestic Extension in Twickenham" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>An extension built on the back of a victoria terrace to increase space for a dining room Project Domestic Extension Location Twickenham, London Budget £25,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:21:05+00:00">11-03-2020</time> <a href="/domestic-extension-in-twickenham" title="Domestic Extension in Twickenham">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Teddington</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:20:55+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domestic-teddington-small.jpg" title="Domestic Extension in Teddington" alt="Domestic Extension in Teddington" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>Rear extension to arts & crafts house Project Domestic Extension Location Teddington, London Budget £90,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:20:55+00:00">11-03-2020</time> <a href="/domestic-extension-in-teddington" title="Domestic Extension in Teddington">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Guildford</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:20:45+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensionguildford.jpg" title="Domestic Extension in Guildford" alt="Domestic Extension in Guildford" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A extension to a 1930's Arts and Crafts house Project Domestic Extension Location guildford, London Budget £200,000 Other Domestic Extensions Similar Project? Get In Touch</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:20:45+00:00">11-03-2020</time> <a href="/domestic-extension-in-guildford" title="Domestic Extension in Guildford">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Kingston</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:20:06+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensioninkingston.jpg" title="Domestic Extension in Kingston" alt="Domestic Extension in Kingston" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A garage and dining room extension to the side of the house. Project Domestic Extension Location KINGSTON, London Budget £600,000 Other Domestic Extensions Similar Project? Get In Touch ...</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:20:06+00:00">11-03-2020</time> <a href="/domestic-extension-in-kingston" title="Domestic Extension in Kingston">Read More</a></p></div></div><div class="blog-post"><h2>Domestic Extension in Finchley</h2><div id='info_panel'><ul><li><strong>Posted by:</strong></li><li>Admin</li><li><strong>Tags:</strong></li><li></li><li><strong>Posted date:</strong></li><li><time datetime="2020-03-11T09:18:08+00:00">11-03-2020</time></li></ul></div><div class="article_img"><img src="https://www.easysites.uk/filestore/editor/2115136394/Blog Images/domesticextensioninfinchley.jpg" title="Domestic Extension in Finchley" alt="Domestic Extension in Finchley" onerror="this.parentNode.className='article-noimage';this.style.display='none';"></div><div id="article_snippet"><p>A dining room extension at the back of the house which gives more room for living space Project Domestic Extension Location Finchley, North London Budget £25,000 Other Domestic Extensions Similar Project? Get In Touch ...</p></div><div id="more_information"><p><strong>Posted by:</strong>Admin<strong> on:</strong><time datetime="2020-03-11T09:18:08+00:00">11-03-2020</time> <a href="/domestic-extension-in-finchley" title="Domestic Extension in Finchley">Read More</a></p></div></div></div></div></article></div></div></div><div id="footer_can"><footer><div id="footer_links"><ul><li><a class="btn_" title="Home" target="_self" href="/">Home</a></li><li><a class="btn_" title="FAQ" target="_self" href="//www.trimblear
2208chitect.uk/frequently-asked-questions">FAQ</a></li><li><a class="btn_" title="Projects" target="_self" href="https://www.trimblearchitect.uk/blog/category/projects">Projects</a></li><li><a class="btn_" title="Articles" target="_self" href="https://www.trimblearchitect.uk/blog/category/articles">Articles</a></li><li><a class="btn_" title="Areas" target="_self" href="//www.trimblearchitect.uk/local-london-architects">Areas</a></li><li><a class="btn_" title="Commercial Property Development" target="_self" href="//www.trimblearchitect.uk/commercial-property-development">Commercial Property Development</a></li><li><a class="btn_" title="Construction Risk Assessment" target="_self" href="//www.trimblearchitect.uk/construction-risk-assessment">Construction Risk Assessment</a></li><li><a class="btn_" title="Structural Surveys" target="_self" href="//www.trimblearchitect.uk/structural-surveyor">Structural Surveys</a></li><li><a class="btn_" title="Party Wall Agreement Surveyor" target="_self" href="//www.trimblearchitect.uk/party-wall-agreements">Party Wall Agreement Surveyor</a></li><li><a class="btn_" title="Project Management" target="_self" href="//www.trimblearchitect.uk/project-management">Project Management</a></li><li><a class="btn_" title="Disabled Adaptations" target="_self" href="//www.trimblearchitect.uk/disabled-adaptations">Disabled Adaptations</a></li><li><a class="btn_" title="Refurbishment" target="_self" href="//www.trimblearchitect.uk/refurbishment-architect">Refurbishment</a></li><li><a class="btn_" title="New Build House" target="_self" href="//www.trimblearchitect.uk/new-build-house-architect">New Build House</a></li><li><a class="btn_" title="Property Conversions" target="_self" href="//www.trimblearchitect.uk/property-conversions-architect">Property Conversions</a></li><li><a class="btn_" title="Extensions" target="_self" href="//www.trimblearchitect.uk/extensions-architect">Extensions</a></li><li><a class="btn_" title="Loft Conversions" target="_self" href="//www.trimblearchitect.uk/loft-conversions-architect">Loft Conversions</a></li><li><a class="btn_" title="Architectural Drawings" target="_self" href="//www.trimblearchitect.uk/architectural-drawings">Architectural Drawings</a></li><li><a class="btn_" title="Residential Extensions" target="_self" href="//www.trimblearchitect.uk/residential-extensions">Residential Extensions</a></li><li><a class="btn_" title="Single Storey Extension" target="_self" href="//www.trimblearchitect.uk/single-storey-extension">Single Storey Extension</a></li><li><a class="btn_" title="Wrap Around Extension" target="_self" href="//www.trimblearchitect.uk/wrap-around-extension">Wrap Around Extension</a></li><li><a class="btn_" title="Flat Conversions" target="_self" href="//www.trimblearchitect.uk/flat-conversions">Flat Conversions</a></li><li><a class="btn_" title="Building Regulations Drawings" target="_self" href="//www.trimblearchitect.uk/building-regulations-drawings">Building Regulations Drawings</a></li><li><a class="btn_" title="Change of Use Extensions" target="_self" href="//www.trimblearchitect.uk/change-of-use-extensions">Change of Use Extensions</a></li><li><a class="btn_" title="Kitchen Extensions" target="_self" href="//www.trimblearchitect.uk/kitchen-extensions">Kitchen Extensions</a></li><li><a class="btn_" title="Double Storey Extensions" target="_self" href="//www.trimblearchitect.uk/double-storey-extensions">Double Storey Extensions</a></li><li><a class="btn_" title="Basement Conversions" target="_self" href="//www.trimblearchitect.uk/basement-conversions">Basement Conversions</a></li><li><a class="btn_" title="Residential Architect" target="_self" href="//www.trimblearchitect.uk/residential-architect">Residential Architect</a></li><li><a class="btn_" title="Planning Permission Consultants" target="_self" href="//www.trimblearchitect.uk/planning-permission-advice">Planning Permission Consultants</a></li><li><a class="btn_" title="Listed Buildings" target="_self" href="//www.trimblearchitect.uk/listed-buildings-planning-permission">Listed Buildings</a></li><li><a class="btn_" title="Contact" target="_self" href="//www.trimblear
2208chitect.uk/contact-us">Contact</a></li><li><a href="/privacy-policy" title="Privacy Policy">Privacy Policy</a></li><li><a href="/cookie-policy" title="Cookie Policy">Cookie Policy</a></li><li><a href="/terms-and-conditions" title="Terms and Conditions">Terms and Conditions</a></li><li><a href="/sitemap" title="sitemap">Sitemap</a></li></ul></div><div id="copy"><p><span class="copyright">Copyright © 2026</span><span class="company"> Trimble Architects</span></p></div></footer></div></div>
2208<script>var responsiveNav = (function (E, y) { 2209 var K = !!E.getComputedStyle; 2210 if (!E.getComputedStyle) { 2211 E.getComputedStyle = function (a) { 2212 this.el = a; 2213 this.getPropertyValue = function (b) { 2214 var c = /(\-([a-z]){1})/g; 2215 if (b === "float") { 2216 b = "styleFloat" 2217 } 2218 if (c.test(b)) { 2219 b = b.replace(c, function () { 2220 return arguments[2].toUpperCase() 2221 }) 2222 } 2223 return a.currentStyle[b] ? a.currentStyle[b] : null 2224 }; 2225 return this 2226 } 2227 } 2228 var F, A, H, J = y.documentElement, 2229 I = y.getElementsByTagName("head")[0], 2230 t = y.createElement("style"), 2231 u = false, 2232 x = function (b, d, c, e) { 2233 if ("addEventListener" in b) { 2234 try { 2235 b.addEventListener(d, c, e) 2236 } catch (a) { 2237 if (typeof c === "object" && c.handleEvent) { 2238 b.addEventListener(d, function (f) { 2239 c.handleEvent.call(c, f) 2240 }, e) 2241 } else { 2242 throw a 2243 } 2244 } 2245 } else { 2246 if ("attachEvent" in b) { 2247 if (typeof c === "object" && c.handleEvent) { 2248 b.attachEvent("on" + d, function () { 2249 c.handleEvent.call(c) 2250 }) 2251 } else { 2252 b.attachEvent("on" + d, c) 2253 } 2254 } 2255 } 2256 }, 2257 w = function (b, d, c, e) { 2258 if ("removeEventListener" in b) { 2259 try { 2260 b.removeEventListener(d, c, e) 2261 } catch (a) { 2262 if (typeof c === "object" && c.handleEvent) { 2263 b.removeEventListener(d, function (f) { 2264 c.handleEvent.call(c, f) 2265 }, e) 2266 } else { 2267 throw a 2268 } 2269 } 2270 } else { 2271 if ("detachEvent" in b) { 2272 if (typeof c === "object" && c.handleEvent) { 2273 b.detachEvent("on" + d, function () { 2274 c.handleEvent.call(c) 2275 }) 2276 } else { 2277 b.detachEvent("on" + d, c) 2278 } 2279 } 2280 } 2281 }, 2282 G = function (a) { 2283 var b = a.firstChild; 2284 while (b !== null && b.nodeType !== 1) { 2285 b = b.nextSibling 2286 } 2287 return b 2288 }, 2289 v = function (a, c) { 2290 for (var b in c) { 2291 a.setAttribute(b, c[b]) 2292 } 2293 }, 2294 C = function (a, b) { 2295 a.className += " " + b; 2296 a.className = a.className.replace(/(^\s*)|(\s*$)/g, "") 2297 }, 2298 z = function (a, c) { 2299 var b = new RegExp("(\\s|^)" + c + "(\\s|$)"); 2300 a.className = a.className.replace(b, " ").replace(/(^\s*)|(\s*$)/g, "") 2301 }, 2302 B = function (a, c) { 2303 var b; 2304 this.options = { 2305 animate: true, 2306 transition: 400, 2307 label: "Navigation", 2308 insert: "after", 2309 customToggle: "", 2310 openPos: "relative", 2311 jsClass: "js", 2312 init: function () { }, 2313 open: function () { }, 2314 close: function () { } 2315 }; 2316 for (b in c) { 2317 this.options[b] = c[b] 2318 } 2319 C(J, this.options.jsClass); 2320 this.wrapperEl = a.replace("#", ""); 2321 if (y.getElementById(this.wrapperEl)) { 2322 this.wrapper = y.getElementById(this.wrapperEl) 2323 } else { 2324 throw new Error("The nav element you are trying to select doesn't exist") 2325 } 2326 this.wrapper.inner = G(this.wrapper); 2327 A = this.options; 2328 F = this.wrapper; 2329 this._init(this) 2330 }; 2331 B.prototype = { 2332 destroy: function () { 2333 this._removeStyles(); 2334 z(F, "closed"); 2335 z(F, "opened"); 2336 F.removeAttribute("style"); 2337 F.removeAttribute("aria-hidden"); 2338 F = null; 2339 L = null; 2340 w(E, "load", this, false); 2341 w(E, "resize", this, false); 2342 w(H, "mousedown", this, false); 2343 w(H, "touchstart", this, false); 2344 w(H, "touchend", this, false); 2345 w(H, "keyup", this, false); 2346 w(H, "click", this, false); 2347 if (!A.customToggle) { 2348 H.parentNode.removeChild(H) 2349 } else { 2350 H.removeAttribute("aria-hidden") 2351 } 2352 }, 2353 toggle: function () { 2354 if (!u) { 2355 z(F, "closed"); 2356 C(F, "opened"); 2357 F.style.position = A.openPos; 2358 v(F, { 2359 "aria-hidden": "false" 2360 }); 2361 setNavFocusable(F, true); 2362 u = true; 2363 A.open() 2364 } else { 2365 z(F, "opened"); 2366 C(F, "closed"); 2367 v(F, { 2368 "aria-hidden": "true" 2369 }); 2370 setNavFocusable(F, false); 2371 if (A.animate) { 2372 setTimeout(function () { 2373 F.style.position = "absolute" 2374 }, A.transition + 10) 2375 } else { 2376 F.style.position = "absolute" 2377 } 2378 u = false;
2379 A.close() 2380 } 2381 }, 2382 handleEvent: function (a) { 2383 var b = a || E.event; 2384 switch (b.type) { 2385 case "mousedown": 2386 this._onmousedown(b); 2387 break; 2388 case "touchstart": 2389 this._ontouchstart(b); 2390 break; 2391 case "touchend": 2392 this._ontouchend(b); 2393 break; 2394 case "keyup": 2395 this._onkeyup(b); 2396 break; 2397 case "click": 2398 this._onclick(b); 2399 break; 2400 case "load": 2401 this._transitions(b); 2402 this._resize(b); 2403 break; 2404 case "resize": 2405 this._resize(b); 2406 break 2407 } 2408 }, 2409 _init: function () { 2410 C(F, "closed"); 2411 this._createToggle(); 2412 x(E, "load", this, false); 2413 x(E, "resize", this, false); 2414 x(H, "mousedown", this, false); 2415 x(H, "touchstart", this, false); 2416 x(H, "touchend", this, false); 2417 x(H, "keyup", this, false); 2418 x(H, "click", this, false) 2419 }, 2420 _createStyles: function () { 2421 if (!t.parentNode) { 2422 I.appendChild(t) 2423 } 2424 }, 2425 _removeStyles: function () { 2426 if (t.parentNode) { 2427 t.parentNode.removeChild(t) 2428 } 2429 }, 2430 _createToggle: function () { 2431 if (!A.customToggle) { 2432 var a = y.createElement("a"); 2433 a.innerHTML = A.label; 2434 v(a, { 2435 href: "#", 2436 id: "nav-toggle" 2437 }); 2438 if (A.insert === "after") { 2439 F.parentNode.insertBefore(a, F.nextSibling) 2440 } else { 2441 F.parentNode.insertBefore(a, F) 2442 } 2443 H = y.getElementById("nav-toggle") 2444 } else { 2445 var b = A.customToggle.replace("#", ""); 2446 if (y.getElementById(b)) { 2447 H = y.getElementById(b) 2448 } else { 2449 throw new Error("The custom nav toggle you are trying to select doesn't exist") 2450 } 2451 } 2452 }, 2453 _preventDefault: function (a) { 2454 if (a.preventDefault) { 2455 a.preventDefault(); 2456 a.stopPropagation() 2457 } else { 2458 a.returnValue = false 2459 } 2460 }, 2461 _onmousedown: function (a) { 2462 var b = a || E.event; 2463 if (!(b.which === 3 || b.button === 2)) { 2464 this._preventDefault(a); 2465 this.toggle(a) 2466 } 2467 }, 2468 _ontouchstart: function (a) { 2469 H.onmousedown = null; 2470 this._preventDefault(a); 2471 this.toggle(a) 2472 }, 2473 _ontouchend: function () { 2474 var a = this; 2475 F.addEventListener("click", a._preventDefault, true); 2476 setTimeout(function () { 2477 F.removeEventListener("click", a._preventDefault, true) 2478 }, A.transition) 2479 }, 2480 _onkeyup: function (a) { 2481 var b = a || E.event; 2482 if (b.keyCode === 13) { 2483 this.toggle(a) 2484 } 2485 }, 2486 _onclick: function (a) { 2487 this._preventDefault(a) 2488 }, 2489 _transitions: function () { 2490 if (A.animate) { 2491 var b = F.style, 2492 a = "max-height " + A.transition + "ms"; 2493 b.WebkitTransition = a; 2494 b.MozTransition = a; 2495 b.OTransition = a; 2496 b.transition = a 2497 } 2498 }, 2499 _calcHeight: function () { 2500 var a = F.inner.offsetHeight, 2501 b = "#" + this.wrapperEl + ".opened{max-height:" + a + "px}"; 2502 if (K) { 2503 t.innerHTML = b; 2504 b = "" 2505 } 2506 }, 2507 _resize: function () { 2508 if (E.getComputedStyle(H, null).getPropertyValue("display") !== "none") { 2509 v(H, { 2510 "aria-hidden": "false" 2511 }); 2512 if (F.className.match(/(^|\s)closed(\s|$)/)) { 2513 v(F, { 2514 "aria-hidden": "true" 2515 }); 2516 F.style.position = "absolute"; 2517 setNavFocusable(F, false) 2518 } 2519 this._createStyles(); 2520 this._calcHeight() 2521 } else { 2522 v(H, { 2523 "aria-hidden": "true" 2524 }); 2525 v(F, { 2526 "aria-hidden": "false" 2527 }); 2528 F.style.position = A.openPos; 2529 setNavFocusable(F, true); 2530 this._removeStyles() 2531 } 2532 A.init() 2533 } 2534 }; 2535 var L; 2536 2537 function D(a, b) { 2538 if (!L) { 2539 L = new B(a, b) 2540 } 2541 return L 2542 } 2543 return D 2544 })(window, document); 2545 2546 function setNavFocusable(container, makeFocusable) { 2547 // Any selector of focusable elements in your menu 2548 var focusable = container.querySelectorAll("a"); 2549 2550 focusable.forEach(function (el) { 2551 if (makeFocusable) { 2552 el.removeAttribute("tabindex"); 2553 } else { 2554 el.setAttribute("tabindex", "-1"); 2555 } 2556 }); 2557 }</script>
2557<!--[if lte IE 9]>
2557<script src="https://0nline.uk/s3/easysites/responsive/responsiveIE-min.js"></script>
2557<script src="https://0nline.uk/s3/easysites/ie/ieFix-min.js"></script>
2557<![endif]-->
2557<script>var navigation = responsiveNav("#navigation"); (function () { function getScript(url, success, failure) { var script = document.createElement('script'); script.src = url; var head = document.getElementsByTagName('head')[0], done = false; script.onload = script.onreadystatechange = function () { if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { done = true; success(); script.onload = script.onreadystatechange = null; head.removeChild(script); } }; script.onerror = function () { if (typeof failure === 'function') { failure(); } }; head.appendChild(script); } getScript('https://www.easysites.uk/websites/js/masterSeven.js', function () { getScript('https://www.easysites.uk/websites/themes/18/theme.js', function () { var referrer = document.referrer; var pathname = window.location.pathname; var url = window.location.href; var useragent = navigator.userAgent; var browserid = 9882453; var isMobile = false; if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.
2557substr(0, 4))) isMobile = true; var userIP = '000'; var adwords = false; var both = referrer + '§' + pathname + '§' + url + '§' + useragent + '§' + userIP + '§' + isMobile + '§' + browserid + '§' + adwords; var dataString = 'data=' + both; $.ajax({ type: "POST", url: "/statistics/theCollectorv2.php", data: dataString, cache: false, success: function (data) { } }); // Track phone call clicks $('.phone-call').on('click', function (e) { var websiteId = 9882453; trackContactClick(websiteId, 'phone'); }); // Track WhatsApp clicks $('.whatsapp-widget').on('click', function (e) { var websiteId = 9882453; trackContactClick(websiteId, 'whatsapp'); }); function trackContactClick(websiteId, contactType) { // Create the data string with the format: websiteId§contactType var dataString = 'data=' + websiteId + '§' + contactType; // Send the tracking data $.ajax({ type: "POST", url: "/statistics/callCollector.php", data: dataString, cache: false, success: function (data) { // Success - no action needed }, error: function (xhr, status, error) { // Optional: Silently log errors to console console.error("Contact tracking error:", error); } }); } window.onbeforeunload = function (event) { xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "/statistics/theCollectorv2.php", true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); var currentPage = TimeMe.currentPageName; var task = 'pageTime'; var browserid = 9882453; var send = task + '|' + browserid + '|' + currentPage + '|' + timeSpentOnPage; xmlhttp.send(send); }; function applyAnimation(i) { var e = 0; i.find(".is-animated").each(function () { "done" != $(this).data("animated") && (e> 0 && $(this).css("animation-delay", e + "s"), e += .2, $(this).removeClass("fadeOut"), $(this).hasClass("is-pulse") && $(this).addClass("pulse"), $(this).hasClass("is-bounceIn") && $(this).addClass("bounceIn"), $(this).hasClass("is-fadeIn") && $(this).addClass("fadeIn"), $(this).hasClass("is-fadeInDown") && $(this).addClass("fadeInDown"), $(this).hasClass("is-fadeInLeft") && $(this).addClass("fadeInLeft"), $(this).hasClass("is-fadeInRight") && $(this).addClass("fadeInRight"), $(this).hasClass("is-fadeInUp") && $(this).addClass("fadeInUp"), $(this).hasClass("is-flipInX") && $(this).addClass("flipInX"), $(this).hasClass("is-flipInY") && $(this).addClass("flipInY"), $(this).hasClass("is-slideInUp") && $(this).addClass("slideInUp"), $(this).hasClass("is-slideInDown") && $(this).addClass("slideInDown"), $(this).hasClass("is-slideInLeft") && $(this).addClass("slideInLeft"), $(this).hasClass("is-slideInRight") && $(this).addClass("slideInRight"), $(this).hasClass("is-zoomIn") && $(this).addClass("zoomIn"), $(this).hasClass("once") && $(this).data("animated", "done")) 2558 }) 2559 } 2560 2561 function removeAnimation(i) { 2562 i.find(".is-animated").each(function () { 2563 $(this).removeClass("pulse"), $(this).removeClass("bounceIn"), $(this).removeClass("fadeIn"), $(this).removeClass("fadeInDown"), $(this).removeClass("fadeInLeft"), $(this).removeClass("fadeInRight"), $(this).removeClass("fadeInUp"), $(this).removeClass("flipInX"), $(this).removeClass("flipInY"), $(this).removeClass("slideInUp"), $(this).removeClass("slideInDown"), $(this).removeClass("slideInLeft"), $(this).removeClass("slideInRight"), $(this).removeClass("zoomIn"), $(this).hasClass("once") || $(this).addClass("fadeOut") 2564 }) 2565 } 2566 2567 function applyAnimationSection(i) { 2568 var e = 0; 2569 i.hasClass("is-animated") && "done" != i.data("animated") && (e > 0 && i.css("animation-delay", e + "s"), e += .2, i.removeClass("fadeOut"), i.hasClass("is-pulse") && i.addClass("pulse"), i.hasClass("is-bounceIn") && i.addClass("bounceIn"), i.hasClass("is-fadeIn") && i.addClass("fadeIn"), i.hasClass("is-fadeInDown") && i.addClass("fadeInDown"), i.hasClass("is-fadeInLeft") && i.addClass("fadeInLeft"), i.hasClass("is-fadeInRight") && i.addClass("fadeInRight"), i.hasClass("is-fadeInUp") && i.addClass("fadeInUp"), i.hasClass("is-flipInX") && i.addClass("flipInX"), i.hasClass("is-flipInY") && i.addClass("flipInY"), i.hasClass("is-slideInUp") && i.addClass("slideInUp"), i.hasClass("is-slideInDown") && i.addClass("slideInDown"), i.hasClass("is-slideInLeft") && i.addClass("slideInLeft"), i.hasClass("is-slideInRight") && i.addClass("slideInRight"), i.hasClass("is-zoomIn") && i.addClass("zoomIn"), i.hasClass("once") && i.data("animated", "done")), i.find(".is-box.is-animated").each(function () { 2570 "done" != $(this).data("animated") && (e > 0 && $(this).css("animation-delay", e + "s"), e += .2, $(this).removeClass("fadeOut"), $(this).hasClass("is-pulse") && $(this).addClass("pulse"), $(this).hasClass("is-bounceIn") && $(this).addClass("bounceIn"), $(this).hasClass("is-fadeIn") && $(this).addClass("fadeIn"), $(this).hasClass("is-fadeInDown") && $(this).addClass("fadeInDown"), $(this).hasClass("is-fadeInLeft") && $(this).addClass("fadeInLeft"), $(this).hasClass("is-fadeInRight") && $(this).addClass("fadeInRight"), $(this).hasClass("is-fadeInUp") && $(this).addClass("fadeInUp"), $(this).hasClass("is-flipInX") && $(this).addClass("flipInX"), $(this).hasClass("is-flipInY") && $(this).addClass("flipInY"), $(this).hasClass("is-slideInUp") && $(this).addClass("slideInUp"), $(this).hasClass("is-slideInDown") && $(this).addClass("slideInDown"), $(this).hasClass("is-slideInLeft") && $(this).addClass("slideInLeft"), $(this).hasClass("is-slideInRight") && $(this).addClass("slideInRight"), $(this).hasClass("is-zoomIn") && $(this).addClass("zoomIn"), $(this).hasClass("once") && $(this).data("animated", "done")) 2571 }) 2572 } 2573 2574 function removeAnimationSection(i) { 2575 i.hasClass("is-animated") && (i.removeClass("pulse"), i.removeClass("bounceIn"), i.removeClass("fadeIn"), i.removeClass("fadeInDown"), i.removeClass("fadeInLeft"), i.removeClass("fadeInRight"), i.removeClass("fadeInUp"), i.removeClass("flipInX"), i.removeClass("flipInY"), i.removeClass("slideInUp"), i.removeClass("slideInDown"), i.removeClass("slideInLeft"), i.removeClass("slideInRight"), i.removeClass("zoomIn"), i.hasClass("once") || i.addClass("fadeOut")), i.find(".is-animated").each(function () { 2576 $(this).removeClass("pulse"), $(this).removeClass("bounceIn"), $(this).removeClass("fadeIn"), $(this).removeClass("fadeInDown"), $(this).removeClass("fadeInLeft"), $(this).removeClass("fadeInRight"), $(this).removeClass("fadeInUp"), $(this).removeClass("flipInX"), $(this).removeClass("flipInY"), $(this).removeClass("slideInUp"), $(this).removeClass("slideInDown"), $(this).removeClass("slideInLeft"), $(this).removeClass("slideInRight"), $(this).removeClass("zoomIn"), $(this).hasClass("once") || $(this).addClass("fadeOut") 2577 }) 2578 } 2579 2580 function playAllVideoBg() { 2581 jQuery(".is_video_bg").each(function () { 2582 var i = jQuery(this).find(".screen").attr("id"); 2583 $("#" + i).data("youtubePlayer").onYouTubePlayerAPIReady() 2584 }) 2585 } 2586 2587 function loadScript(i, e) { 2588 var s = document.createElement("script"); 2589 s.type = "text/javascript", s.readyState ? s.onreadystatechange = function () { 2590 "loaded" != s.readyState && "complete" != s.readyState || (s.onreadystatechange = null, e()) 2591 } : s.onload = function () { 2592 e() 2593 }, s.src = i, document.body.appendChild(s) 2594 } 2595 $(document).ready(function (i) { 2596 $(".is-arrow-down a").click(function (i) { 2597 return $(this).parents(".is-section").nextAll("div:not(.is-hidden
2597)").html() && $("html,body").animate({ 2598 scrollTop: $(this).parents(".is-section").nextAll("div:not(.is-hidden)").offset().top - parseInt($(".is-wrapper").css("padding-top")) 2599 }, 800), i.preventDefault(), i.stopImmediatePropagation(), !1 2600 }), $(".is-wrapper > div:first-child").find(".is-scale-animated").addClass("is-appeared"), $(".is-scale-animated").appear(), $(".is-scale-animated").on("appear", function () { 2601 $(this).addClass("is-appeared") 2602 }), $(".is-scale-animated").on("disappear", function () { 2603 $(this).removeClass("is-appeared") 2604 }), $(".is-animated").each(function () { 2605 $(this).addClass("animated"), $(this).addClass("fadeOut") 2606 }), $(".is-section").appear(), $(".is-section").each(function () { 2607 $(this).is(":appeared") && applyAnimationSection($(this)) 2608 }), 0 == $(window).scrollTop() && setTimeout(applyAnimationSection($(".is-section").first()), 2e3), $(".is-section").on("appear", function () { 2609 applyAnimationSection($(this)) 2610 }), $(".is-section").on("disappear", function () { 2611 removeAnimationSection($(this)) 2612 }), $(".is-container").appear(), $(".is-container").each(function () { 2613 $(this).is(":appeared") && applyAnimation($(this)) 2614 }), 0 == $(window).scrollTop() && $(".is-section").first().find(".is-container").each(function () { 2615 setTimeout(applyAnimation($(this)), 2e3) 2616 }), $(".is-container").on("appear", function () { 2617 applyAnimation($(this)) 2618 }), $(".is-container").on("disappear", function () { 2619 removeAnimation($(this)) 2620 }) 2621 }), 2622 function (i) { 2623 function e() { 2624 n = !1; 2625 for (var e = 0, s = t.length; e <s; e++) { var o = i(t[e]).filter(function () { return i(this).is(":appeared") }); if (o.trigger("appear", [o]), r[e]) { var a = r[e].not(o); a.trigger("disappear", [a]) } r[e] = o } } function s(i) { t.push(i), r.push() } var t = [], o = !1, n = !1, a = { interval: 250, force_process: !1 }, l = i(window), r = []; i.expr[":"].appeared = function (e) { var s = i(e); if (!s.is(":visible")) return !1; var t = l.scrollLeft(), o = l.scrollTop(), n = s.offset(), a = n.left, r = n.top; return r + s.height()>= o && r - (s.data("appear-top-offset") || 0) <= o + l.height() - 200 && a + s.width()>= t && a - (s.data("appear-left-offset") || 0) <= t + l.width() 2626 }, i.fn.extend({ 2627 appear: function (t) { 2628 var l = i.extend({}, a, t || {}), 2629 r = this.selector || this; 2630 if (!o) { 2631 var d = function () { 2632 n || (n = !0, setTimeout(e, l.interval)) 2633 }; 2634 i(window).scroll(d).resize(d), o = !0 2635 } 2636 return l.force_process && setTimeout(e, l.interval), s(r), i(r) 2637 } 2638 }), i.extend({ 2639 force_appear: function () { 2640 return !!o && (e(), !0) 2641 } 2642 }) 2643 }("undefined" != typeof module ? require("jquery") : jQuery), 2644 function (i) { 2645 "use strict"; 2646 "function" == typeof define && define.amd ? define(["jquery"], i) : "undefined" != typeof exports ? module.exports = i(require("jquery")) : i(jQuery) 2647 }(function (i) { 2648 "use strict"; 2649 var e = window.Slick || {}; 2650 (e = function () { 2651 var e = 0; 2652 return function (s, t) { 2653 var o, n = this; 2654 n.defaults = { 2655 accessibility: !0, 2656 adaptiveHeight: !1, 2657 appendArrows: i(s), 2658 appendDots: i(s), 2659 arrows: !0, 2660 asNavFor: null, 2661 prevArrow: '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>', 2662 nextArrow: '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>', 2663 autoplay: !1, 2664 autoplaySpeed: 3e3, 2665 centerMode: !1, 2666 centerPadding: "50px", 2667 cssEase: "ease", 2668 customPaging: function (i, e) { 2669 return '<button type="button" data-role="none" role="button" aria-required="false" tabindex="0">' + (e + 1) + "</button>" 2670 }, 2671 dots: !1, 2672 dotsClass: "slick-dots", 2673 draggable: !0, 2674 easing: "linear", 2675 edgeFriction: .35, 2676 fade: !1, 2677 focusOnSelect: !1, 2678 infinite: !0, 2679 initialSlide: 0, 2680 lazyLoad: "ondemand", 2681 mobileFirst: !1, 2682 pauseOnHover: !0, 2683 pauseOnDotsHover: !1, 2684 respondTo: "window", 2685 responsive: null, 2686 rows: 1, 2687 rtl: !1, 2688 slide: "", 2689 slidesPerRow: 1, 2690 slidesToShow: 1, 2691 slidesToScroll: 1, 2692 speed: 500, 2693 swipe: !0, 2694 swipeToSlide: !1, 2695 touchMove: !0, 2696 touchThreshold: 5, 2697 useCSS: !0, 2698 useTransform: !1, 2699 variableWidth: !1, 2700 vertical: !1, 2701 verticalSwiping: !1, 2702 waitForAnimate: !0, 2703 zIndex: 1e3 2704 }, n.initials = { 2705 animating: !1, 2706 dragging: !1, 2707 autoPlayTimer: null, 2708 currentDirection: 0, 2709 currentLeft: null, 2710 currentSlide: 0, 2711 direction: 1, 2712 $dots: null, 2713 listWidth: null, 2714 listHeight: null, 2715 loadIndex: 0, 2716 $nextArrow: null, 2717 $prevArrow: null, 2718 slideCount: null, 2719 slideWidth: null, 2720 $slideTrack: null, 2721 $slides: null, 2722 sliding: !1, 2723 slideOffset: 0, 2724 swipeLeft: null, 2725 $list: null, 2726 touchObject: {}, 2727 transformsEnabled: !1, 2728 unslicked: !1 2729 }, i.extend(n, n.initials), n.activeBreakpoint = null, n.animType = null, n.animProp = null, n.breakpoints = [], n.breakpointSettings = [], n.cssTransitions = !1, n.hidden = "hidden", n.paused = !1, n.positionProp = null, n.respondTo = null, n.rowCount = 1, n.shouldClick = !0, n.$slider = i(s), n.$slidesCache = null, n.transformType = null, n.transitionType = null, n.visibilityChange = "visibilitychange", n.windowWidth = 0, n.windowTimer = null, o = i(s).data("slick") || {}, n.options = i.extend({}, n.defaults, o, t), n.currentSlide = n.options.initialSlide, n.originalSettings = n.options, void 0 !== document.mozHidden ? (n.hidden = "mozHidden", n.visibilityChange = "mozvisibilitychange") : void 0 !== document.webkitHidden && (n.hidden = "webkitHidden", n.visibilityChange = "webkitvisibilitychange"), n.autoPlay = i.proxy(n.autoPlay, n), n.autoPlayClear = i.proxy(n.autoPlayClear, n), n.changeSlide = i.proxy(n.changeSlide, n), n.clickHandler = i.proxy(n.clickHandler, n), n.selectHandler = i.proxy(n.selectHandler, n), n.setPosition = i.proxy(n.setPosition, n), n.swipeHandler = i.proxy(n.swipeHandler, n), n.dragHandler = i.proxy(n.dragHandler, n), n.keyHandler = i.proxy(n.keyHandler, n), n.autoPlayIterator = i.proxy(n.autoPlayIterator, n), n.instanceUid = e++, n.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/, n.registerBreakpoints(), n.init(!0), n.checkResponsive(!0) 2730 } 2731 }()).prototype.addSlide = e.prototype.slickAdd = function (e, s, t) { 2732 var o = this; 2733 if ("boolean" == typeof s) t = s, s = null; 2734 else if (0 > s || s >= o.slideCount) return !1; 2735 o.unload(), "number" == typeof s ? 0 === s && 0 === o.$slides.length ? i(e).appendTo(o.$slideTrack) : t ? i(e).insertBefore(o.$slides.eq(s)) : i(e).insertAfter(o.$slides.eq(s)) : !0 === t ? i(e).prependTo(o.$slideTrack) : i(e).appendTo(o.$slideTrack), o.$slides = o.$slideTrack.children(this.options.slide), o.$slideTrack.children(this.options.slide).detach(), o.$slideTrack.append(o.$slides), o.$slides.each(function (e, s) { 2736 i(s).attr("data-slick-index", e) 2737 }), o.$slidesCache = o.$slides, o.reinit() 2738 }, e.prototype.animateHeight = function () { 2739 var i = this; 2740 if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { 2741 var e = i.$slides.eq(i.currentSlide).outerHeight(!0); 2742 i.$list.animate({ 2743 height: e 2744 }, i.options.speed) 2745 } 2746 }, e.prototype.animateSlide = function (e, s) { 2747 var t = {}, 2748 o = this; 2749 o.animateHeight(), !0 === o.options.rtl && !1 === o.options.vertical && (e = -e), !1 === o.transformsEnabled ? !1 === o.options.vertical ? o.$slideTrack.animate({ 2750 left: e 2751 }, o.options.speed, o.options.easing, s) : o.$slideTrack.animate({ 2752 top: e 2753 }, o.options.speed, o.options.easing, s) : !1 === o.cssTransitions ? (!0 === o.options.rtl && (o.currentLeft = -o.currentLeft), i({ 2754 animStart: o.currentLeft 2755 }).animate({ 2756 animStart: e
2757 }, { 2758 duration: o.options.speed, 2759 easing: o.options.easing, 2760 step: function (i) { 2761 i = Math.ceil(i), !1 === o.options.vertical ? (t[o.animType] = "translate(" + i + "px, 0px)", o.$slideTrack.css(t)) : (t[o.animType] = "translate(0px," + i + "px)", o.$slideTrack.css(t)) 2762 }, 2763 complete: function () { 2764 s && s.call() 2765 } 2766 })) : (o.applyTransition(), e = Math.ceil(e), !1 === o.options.vertical ? t[o.animType] = "translate3d(" + e + "px, 0px, 0px)" : t[o.animType] = "translate3d(0px," + e + "px, 0px)", o.$slideTrack.css(t), s && setTimeout(function () { 2767 o.disableTransition(), s.call() 2768 }, o.options.speed)) 2769 }, e.prototype.asNavFor = function (e) { 2770 var s = this, 2771 t = s.options.asNavFor; 2772 t && null !== t && (t = i(t).not(s.$slider)), null !== t && "object" == typeof t && t.each(function () { 2773 var s = i(this).slick("getSlick"); 2774 s.unslicked || s.slideHandler(e, !0) 2775 }) 2776 }, e.prototype.applyTransition = function (i) { 2777 var e = this, 2778 s = {}; 2779 !1 === e.options.fade ? s[e.transitionType] = e.transformType + " " + e.options.speed + "ms " + e.options.cssEase : s[e.transitionType] = "opacity " + e.options.speed + "ms " + e.options.cssEase, !1 === e.options.fade ? e.$slideTrack.css(s) : e.$slides.eq(i).css(s) 2780 }, e.prototype.autoPlay = function () { 2781 var i = this; 2782 i.autoPlayTimer && clearInterval(i.autoPlayTimer), i.slideCount > i.options.slidesToShow && !0 !== i.paused && (i.autoPlayTimer = setInterval(i.autoPlayIterator, i.options.autoplaySpeed)) 2783 }, e.prototype.autoPlayClear = function () { 2784 var i = this; 2785 i.autoPlayTimer && clearInterval(i.autoPlayTimer) 2786 }, e.prototype.autoPlayIterator = function () { 2787 var i = this; 2788 !1 === i.options.infinite ? 1 === i.direction ? (i.currentSlide + 1 === i.slideCount - 1 && (i.direction = 0), i.slideHandler(i.currentSlide + i.options.slidesToScroll)) : (i.currentSlide - 1 == 0 && (i.direction = 1), i.slideHandler(i.currentSlide - i.options.slidesToScroll)) : i.slideHandler(i.currentSlide + i.options.slidesToScroll) 2789 }, e.prototype.buildArrows = function () { 2790 var e = this; 2791 !0 === e.options.arrows && (e.$prevArrow = i(e.options.prevArrow).addClass("slick-arrow"), e.$nextArrow = i(e.options.nextArrow).addClass("slick-arrow"), e.slideCount > e.options.slidesToShow ? (e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.prependTo(e.options.appendArrows), e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.appendTo(e.options.appendArrows), !0 !== e.options.infinite && e.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({ 2792 "aria-disabled": "true", 2793 tabindex: "-1" 2794 })) 2795 }, e.prototype.buildDots = function () { 2796 var e, s, t = this; 2797 if (!0 === t.options.dots && t.slideCount > t.options.slidesToShow) { 2798 for (s = '<ul class="' + t.options.dotsClass + '">', e = 0; e <= t.getDotCount(); e += 1) s += "<li>" + t.options.customPaging.call(this, t, e) + "</li>"; 2799 s += "</ul>", t.$dots = i(s).appendTo(t.options.appendDots), t.$dots.find("li").first().addClass("slick-active").attr("aria-hidden", "false") 2800 } 2801 }, e.prototype.buildOut = function () { 2802 var e = this; 2803 e.$slides = e.$slider.children(e.options.slide + ":not(.slick-cloned)").addClass("slick-slide"), e.slideCount = e.$slides.length, e.$slides.each(function (e, s) { 2804 i(s).attr("data-slick-index", e).data("originalStyling", i(s).attr("style") || "") 2805 }), e.$slider.addClass("slick-slider"), e.$slideTrack = 0 === e.slideCount ? i('<div class="slick-track"/>').appendTo(e.$slider) : e.$slides.wrapAll('<div class="slick-track"/>').parent(), e.$list = e.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(), e.$slideTrack.css("opacity", 0), (!0 === e.options.centerMode || !0 === e.options.swipeToSlide) && (e.options.slidesToScroll = 1), i("img[data-lazy]", e.$slider).not("[src]").addClass("slick-loading"), e.setupInfinite(), e.buildArrows(), e.buildDots(), e.updateDots(), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), !0 === e.options.draggable && e.$list.addClass("draggable") 2806 }, e.prototype.buildRows = function () { 2807 var i, e, s, t, o, n, a, l = this; 2808 if (t = document.createDocumentFragment(), n = l.$slider.children(), l.options.rows > 1) { 2809 for (a = l.options.slidesPerRow * l.options.rows, o = Math.ceil(n.length / a), i = 0; o > i; i++) { 2810 var r = document.createElement("div"); 2811 for (e = 0; e < l.options.rows; e++) { 2812 var d = document.createElement("div"); 2813 for (s = 0; s < l.options.slidesPerRow; s++) { 2814 var c = i * a + (e * l.options.slidesPerRow + s); 2815 n.get(c) && d.appendChild(n.get(c)) 2816 } 2817 r.appendChild(d) 2818 } 2819 t.appendChild(r) 2820 } 2821 l.$slider.html(t), l.$slider.children().children().children().css({ 2822 width: 100 / l.options.slidesPerRow + "%", 2823 display: "inline-block" 2824 }) 2825 } 2826 }, e.prototype.checkResponsive = function (e, s) { 2827 var t, o, n, a = this, 2828 l = !1, 2829 r = a.$slider.width(), 2830 d = window.innerWidth || i(window).width(); 2831 if ("window" === a.respondTo ? n = d : "slider" === a.respondTo ? n = r : "min" === a.respondTo && (n = Math.min(d, r)), a.options.responsive && a.options.responsive.length && null !== a.options.responsive) { 2832 o = null; 2833 for (t in a.breakpoints) a.breakpoints.hasOwnProperty(t) && (!1 === a.originalSettings.mobileFirst ? n <a.breakpoints[t] && (o = a.breakpoints[t]) : n> a.breakpoints[t] && (o = a.breakpoints[t])); 2834 null !== o ? null !== a.activeBreakpoint ? (o !== a.activeBreakpoint || s) && (a.activeBreakpoint = o, "unslick" === a.breakpointSettings[o] ? a.unslick(o) : (a.options = i.extend({}, a.originalSettings, a.breakpointSettings[o]), !0 === e && (a.currentSlide = a.options.initialSlide), a.refresh(e)), l = o) : (a.activeBreakpoint = o, "unslick" === a.breakpointSettings[o] ? a.unslick(o) : (a.options = i.extend({}, a.originalSettings, a.breakpointSettings[o]), !0 === e && (a.currentSlide = a.options.initialSlide), a.refresh(e)), l = o) : null !== a.activeBreakpoint && (a.activeBreakpoint = null, a.options = a.originalSettings, !0 === e && (a.currentSlide = a.options.initialSlide), a.refresh(e), l = o), e || !1 === l || a.$slider.trigger("breakpoint", [a, l]) 2835 } 2836 }, e.prototype.changeSlide = function (e, s) { 2837 var t, o, n, a = this, 2838 l = i(e.target); 2839 switch (l.is("a") && e.preventDefault(), l.is("li") || (l = l.closest("li")), n = a.slideCount % a.options.slidesToScroll != 0, t = n ? 0 : (a.slideCount - a.
2839currentSlide) % a.options.slidesToScroll, e.data.message) { 2840 case "previous": 2841 o = 0 === t ? a.options.slidesToScroll : a.options.slidesToShow - t, a.slideCount > a.options.slidesToShow && a.slideHandler(a.currentSlide - o, !1, s); 2842 break; 2843 case "next": 2844 o = 0 === t ? a.options.slidesToScroll : t, a.slideCount > a.options.slidesToShow && a.slideHandler(a.currentSlide + o, !1, s); 2845 break; 2846 case "index": 2847 var r = 0 === e.data.index ? 0 : e.data.index || l.index() * a.options.slidesToScroll; 2848 a.slideHandler(a.checkNavigable(r), !1, s), l.children().trigger("focus"); 2849 break; 2850 default: 2851 return 2852 } 2853 }, e.prototype.checkNavigable = function (i) { 2854 var e, s; 2855 if (e = this.getNavigableIndexes(), s = 0, i > e[e.length - 1]) i = e[e.length - 1]; 2856 else 2857 for (var t in e) { 2858 if (i <e[t]) { i = s; break } s = e[t] } return i }, e.prototype.cleanUpEvents = function () { var e = this; e.options.dots && null !== e.$dots && (i("li", e.$dots).off("click.slick", e.changeSlide), !0 === e.options.pauseOnDotsHover && !0 === e.options.autoplay && i("li", e.$dots).off("mouseenter.slick", i.proxy(e.setPaused, e, !0)).off("mouseleave.slick", i.proxy(e.setPaused, e, !1))), !0 === e.options.arrows && e.slideCount> e.options.slidesToShow && (e.$prevArrow && e.$prevArrow.off("click.slick", e.changeSlide), e.$nextArrow && e.$nextArrow.off("click.slick", e.changeSlide)), e.$list.off("touchstart.slick mousedown.slick", e.swipeHandler), e.$list.off("touchmove.slick mousemove.slick", e.swipeHandler), e.$list.off("touchend.slick mouseup.slick", e.swipeHandler), e.$list.off("touchcancel.slick mouseleave.
2858slick", e.swipeHandler), e.$list.off("click.slick", e.clickHandler), i(document).off(e.visibilityChange, e.visibility), e.$list.off("mouseenter.slick", i.proxy(e.setPaused, e, !0)), e.$list.off("mouseleave.slick", i.proxy(e.setPaused, e, !1)), !0 === e.options.accessibility && e.$list.off("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().off("click.slick", e.selectHandler), i(window).off("orientationchange.slick.slick-" + e.instanceUid, e.orientationChange), i(window).off("resize.slick.slick-" + e.instanceUid, e.resize), i("[draggable!=true]", e.$slideTrack).off("dragstart", e.preventDefault), i(window).off("load.slick.slick-" + e.instanceUid, e.setPosition), i(document).off("ready.slick.slick-" + e.instanceUid, e.setPosition) 2859 }, e.prototype.cleanUpRows = function () { 2860 var i, e = this; 2861 e.options.rows > 1 && ((i = e.$slides.children().children()).removeAttr("style"), e.$slider.html(i)) 2862 }, e.prototype.clickHandler = function (i) { 2863 !1 === this.shouldClick && (i.stopImmediatePropagation(), i.stopPropagation(), i.preventDefault()) 2864 }, e.prototype.destroy = function (e) { 2865 var s = this; 2866 s.autoPlayClear(), s.touchObject = {}, s.cleanUpEvents(), i(".slick-cloned", s.$slider).detach(), s.$dots && s.$dots.remove(), s.$prevArrow && s.$prevArrow.length && (s.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), s.htmlExpr.test(s.options.prevArrow) && s.$prevArrow.remove()), s.$nextArrow && s.$nextArrow.length && (s.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), s.htmlExpr.test(s.options.nextArrow) && s.$nextArrow.remove()), s.$slides && (s.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function () { 2867 i(this).attr("style", i(this).data("originalStyling")) 2868 }), s.$slideTrack.children(this.options.slide).detach(), s.$slideTrack.detach(), s.$list.detach(), s.$slider.append(s.$slides)), s.cleanUpRows(), s.$slider.removeClass("slick-slider"), s.$slider.removeClass("slick-initialized"), s.unslicked = !0, e || s.$slider.trigger("destroy", [s]) 2869 }, e.prototype.disableTransition = function (i) { 2870 var e = this, 2871 s = {}; 2872 s[e.transitionType] = "", !1 === e.options.fade ? e.$slideTrack.css(s) : e.$slides.eq(i).css(s) 2873 }, e.prototype.fadeSlide = function (i, e) { 2874 var s = this; 2875 !1 === s.cssTransitions ? (s.$slides.eq(i).css({ 2876 zIndex: s.options.zIndex 2877 }), s.$slides.eq(i).animate({ 2878 opacity: 1 2879 }, s.options.speed, s.options.easing, e)) : (s.applyTransition(i), s.$slides.eq(i).css({ 2880 opacity: 1, 2881 zIndex: s.options.zIndex 2882 }), e && setTimeout(function () { 2883 s.disableTransition(i), e.call() 2884 }, s.options.speed)) 2885 }, e.prototype.fadeSlideOut = function (i) { 2886 var e = this; 2887 !1 === e.cssTransitions ? e.$slides.eq(i).animate({ 2888 opacity: 0, 2889 zIndex: e.options.zIndex - 2 2890 }, e.options.speed, e.options.easing) : (e.applyTransition(i), e.$slides.eq(i).css({ 2891 opacity: 0, 2892 zIndex: e.options.zIndex - 2 2893 })) 2894 }, e.prototype.filterSlides = e.prototype.slickFilter = function (i) { 2895 var e = this; 2896 null !== i && (e.$slidesCache = e.$slides, e.unload(), e.$slideTrack.children(this.options.slide).detach(), e.$slidesCache.filter(i).appendTo(e.$slideTrack), e.reinit()) 2897 }, e.prototype.getCurrent = e.prototype.slickCurrentSlide = function () { 2898 return this.currentSlide 2899 }, e.prototype.getDotCount = function () { 2900 var i = this, 2901 e = 0, 2902 s = 0, 2903 t = 0; 2904 if (!0 === i.options.infinite) 2905 for (; e < i.slideCount;) ++t, e = s + i.options.slidesToScroll, s += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; 2906 else if (!0 === i.options.centerMode) t = i.slideCount; 2907 else 2908 for (; e < i.slideCount;) ++t, e = s + i.options.slidesToScroll, s += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; return t - 1 }, e.prototype.getLeft = function (i) { var e, s, t, o = this, n = 0; return o.slideOffset = 0, s = o.$slides.first().outerHeight(!0), !0 === o.options.infinite ? (o.slideCount>
2908 o.options.slidesToShow && (o.slideOffset = o.slideWidth * o.options.slidesToShow * -1, n = s * o.options.slidesToShow * -1), o.slideCount % o.options.slidesToScroll != 0 && i + o.options.slidesToScroll > o.slideCount && o.slideCount > o.options.slidesToShow && (i > o.slideCount ? (o.slideOffset = (o.options.slidesToShow - (i - o.slideCount)) * o.slideWidth * -1, n = (o.options.slidesToShow - (i - o.slideCount)) * s * -1) : (o.slideOffset = o.slideCount % o.options.slidesToScroll * o.slideWidth * -1, n = o.slideCount % o.options.slidesToScroll * s * -1))) : i + o.options.slidesToShow > o.slideCount && (o.slideOffset = (i + o.options.slidesToShow - o.slideCount) * o.slideWidth, n = (i + o.options.slidesToShow - o.slideCount) * s), o.slideCount <= o.options.slidesToShow && (o.slideOffset = 0, n = 0), !0 === o.options.centerMode && !0 === o.options.infinite ? o.slideOffset += o.slideWidth * Math.floor(o.options.slidesToShow / 2) - o.slideWidth : !0 === o.options.centerMode && (o.slideOffset = 0, o.slideOffset += o.slideWidth * Math.floor(o.options.slidesToShow / 2)), e = !1 === o.options.vertical ? i * o.slideWidth * -1 + o.slideOffset : i * s * -1 + n, !0 === o.options.variableWidth && (t = o.slideCount <= o.options.slidesToShow || !1 === o.options.infinite ? o.$slideTrack.children(".slick-slide").eq(i) : o.$slideTrack.children(".slick-slide").eq(i + o.options.slidesToShow), e = !0 === o.options.rtl ? t[0] ? -1 * (o.$slideTrack.width() - t[0].offsetLeft - t.width()) : 0 : t[0] ? -1 * t[0].offsetLeft : 0, !0 === o.options.centerMode && (t = o.slideCount <= o.options.slidesToShow || !1 === o.options.infinite ? o.$slideTrack.children(".slick-slide").eq(i) : o.$slideTrack.children(".slick-slide").eq(i + o.options.slidesToShow + 1), e = !0 === o.options.rtl ? t[0] ? -1 * (o.$slideTrack.width() - t[0].offsetLeft - t.width()) : 0 : t[0] ? -1 * t[0].offsetLeft : 0, e += (o.$list.width() - t.outerWidth()) / 2)), e }, e.prototype.getOption = e.prototype.slickGetOption = function (i) { return this.options[i] }, e.prototype.getNavigableIndexes = function () { var i, e = this, s = 0, t = 0, o = []; for (!1 === e.options.infinite ? i = e.slideCount : (s = -1 * e.options.slidesToScroll, t = -1 * e.options.slidesToScroll, i = 2 * e.slideCount); i> s;) o.push(s), s = t + e.options.slidesToScroll, t += e.options.slidesToScroll <= e.options.slidesToShow ? e.options.slidesToScroll : e.options.slidesToShow; return o }, e.prototype.getSlick = function () { return this }, e.prototype.getSlideCount = function () { var e, s, t = this; return s = !0 === t.options.centerMode ? t.slideWidth * Math.floor(t.options.slidesToShow / 2) : 0, !0 === t.options.swipeToSlide ? (t.$slideTrack.find(".slick-slide").each(function (o, n) { return n.offsetLeft - s + i(n).outerWidth() / 2> -1 * t.swipeLeft ? (e = n, !1) : void 0 2909 }), Math.abs(i(e).attr("data-slick-index") - t.currentSlide) || 1) : t.options.slidesToScroll 2910 }, e.prototype.goTo = e.prototype.slickGoTo = function (i, e) { 2911 this.changeSlide({ 2912 data: { 2913 message: "index", 2914 index: parseInt(i) 2915 } 2916 }, e) 2917 }, e.prototype.init = function (e) { 2918 var s = this; 2919 i(s.$slider).hasClass("slick-initialized") || (i(s.$slider).addClass("slick-initialized"), s.buildRows(), s.buildOut(), s.setProps(), s.startLoad(), s.loadSlider(), s.initializeEvents(), s.updateArrows(), s.updateDots()), e && s.$slider.trigger("init", [s]), !0 === s.options.accessibility && s.initADA() 2920 }, e.prototype.initArrowEvents = function () { 2921 var i = this; 2922 !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.on("click.slick", { 2923 message: "previous" 2924 }, i.changeSlide), i.$nextArrow.on("click.slick", { 2925 message: "next" 2926 }, i.changeSlide)) 2927 }, e.prototype.initDotEvents = function () { 2928 var e = this; 2929 !0 === e.options.dots && e.slideCount > e.options.slidesToShow && i("li", e.$dots).on("click.slick", { 2930 message: "index" 2931 }, e.changeSlide), !0 === e.options.dots && !0 === e.options.pauseOnDotsHover && !0 === e.options.autoplay && i("li", e.$dots).on("mouseenter.slick", i.proxy(e.setPaused, e, !0)).on("mouseleave.
2931slick", i.proxy(e.setPaused, e, !1)) 2932 }, e.prototype.initializeEvents = function () { 2933 var e = this; 2934 e.initArrowEvents(), e.initDotEvents(), e.$list.on("touchstart.slick mousedown.slick", { 2935 action: "start" 2936 }, e.swipeHandler), e.$list.on("touchmove.slick mousemove.slick", { 2937 action: "move" 2938 }, e.swipeHandler), e.$list.on("touchend.slick mouseup.slick", { 2939 action: "end" 2940 }, e.swipeHandler), e.$list.on("touchcancel.slick mouseleave.slick", { 2941 action: "end" 2942 }, e.swipeHandler), e.$list.on("click.slick", e.clickHandler), i(document).on(e.visibilityChange, i.proxy(e.visibility, e)), e.$list.on("mouseenter.slick", i.proxy(e.setPaused, e, !0)), e.$list.on("mouseleave.slick", i.proxy(e.setPaused, e, !1)), !0 === e.options.accessibility && e.$list.on("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), i(window).on("orientationchange.slick.slick-" + e.instanceUid, i.proxy(e.orientationChange, e)), i(window).on("resize.slick.slick-" + e.instanceUid, i.proxy(e.resize, e)), i("[draggable!=true]", e.$slideTrack).on("dragstart", e.preventDefault), i(window).on("load.slick.slick-" + e.instanceUid, e.setPosition), i(document).on("ready.slick.slick-" + e.instanceUid, e.setPosition) 2943 }, e.prototype.initUI = function () { 2944 var i = this; 2945 !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.show(), i.$nextArrow.show()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.show(), !0 === i.options.autoplay && i.autoPlay() 2946 }, e.prototype.keyHandler = function (i) { 2947 var e = this; 2948 i.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === i.keyCode && !0 === e.options.accessibility ? e.changeSlide({ 2949 data: { 2950 message: "previous" 2951 } 2952 }) : 39 === i.keyCode && !0 === e.options.accessibility && e.changeSlide({ 2953 data: { 2954 message: "next" 2955 } 2956 })) 2957 }, e.prototype.lazyLoad = function () { 2958 function e(e) { 2959 i("img[data-lazy]", e).each(function () { 2960 var e = i(this), 2961 s = i(this).attr("data-lazy"), 2962 t = document.createElement("img"); 2963 t.onload = function () { 2964 e.animate({ 2965 opacity: 0 2966 }, 100, function () { 2967 e.attr("src", s).animate({ 2968 opacity: 1 2969 }, 200, function () { 2970 e.removeAttr("data-lazy").removeClass("slick-loading") 2971 }) 2972 }) 2973 }, t.src = s 2974 }) 2975 } 2976 var s, t, o, n = this; 2977 !0 === n.options.centerMode ? !0 === n.options.infinite ? (t = n.currentSlide + (n.options.slidesToShow / 2 + 1), o = t + n.options.slidesToShow + 2) : (t = Math.max(0, n.currentSlide - (n.options.slidesToShow / 2 + 1)), o = n.options.slidesToShow / 2 + 1 + 2 + n.currentSlide) : (t = n.options.infinite ? n.options.slidesToShow + n.currentSlide : n.currentSlide, o = t + n.options.slidesToShow, !0 === n.options.fade && (t > 0 && t--, o <= n.slideCount && o++)), e(n.$slider.find(".slick-slide").slice(t, o)), n.slideCount <= n.options.slidesToShow ? (s = n.$slider.find(".slick-slide"), e(s)) : n.currentSlide>= n.slideCount - n.options.slidesToShow ? (s = n.$slider.find(".slick-cloned").slice(0, n.options.slidesToShow), e(s)) : 0 === n.currentSlide && (s = n.$slider.find(".slick-cloned").slice(-1 * n.options.slidesToShow), e(s)) 2978 }, e.prototype.loadSlider = function () { 2979 var i = this; 2980 i.setPosition(), i.$slideTrack.css({ 2981 opacity: 1 2982 }), i.$slider.removeClass("slick-loading"), i.initUI(), "progressive" === i.options.lazyLoad && i.progressiveLazyLoad() 2983 }, e.prototype.next = e.prototype.slickNext = function () { 2984 this.changeSlide({ 2985 data: { 2986 message: "next" 2987 } 2988 }) 2989 }, e.prototype.orientationChange = function () { 2990 var i = this; 2991 i.checkResponsive(), i.setPosition() 2992 }, e.prototype.pause = e.prototype.slickPause = function () { 2993 var i = this; 2994 i.autoPlayClear(), i.paused = !0 2995 }, e.prototype.play = e.prototype.slickPlay = function () { 2996 var i = this; 2997 i.paused = !1, i.autoPlay() 2998 }, e.prototype.postSlide = function (i) { 2999 var e = this; 3000 e.$slider.trigger("afterChange", [e, i]), e.animating = !1, e.setPosition(), e.swipeLeft = null, !0 === e.options.autoplay && !1 === e.paused && e.autoPlay(), !0 === e.options.accessibility && e.initADA() 3001 }, e.prototype.prev = e.prototype.slickPrev = function () { 3002 this.changeSlide({ 3003 data: { 3004 message: "previous" 3005 } 3006 }) 3007 }, e.prototype.preventDefault = function (i) { 3008 i.preventDefault() 3009 }, e.prototype.progressiveLazyLoad = function () { 3010 var e, s = this; 3011 i("img[data-lazy]", s.$slider).length > 0 && ((e = i("img[data-lazy]", s.$slider).first()).attr("src", null), e.attr("src", e.attr("data-lazy")).removeClass("slick-loading").load(function () { 3012 e.removeAttr("data-lazy"), s.progressiveLazyLoad(), !0 === s.options.adaptiveHeight && s.setPosition() 3013 }).error(function () { 3014 e.removeAttr("data-lazy"), s.progressiveLazyLoad() 3015 })) 3016 }, e.prototype.refresh = function (e) { 3017 var s, t, o = this; 3018 t = o.slideCount - o.options.slidesToShow, o.options.infinite || (o.slideCount <= o.options.slidesToShow ? o.currentSlide = 0 : o.currentSlide> t && (o.currentSlide = t)), s = o.currentSlide, o.destroy(!0), i.extend(o, o.initials, { 3019 currentSlide: s 3020 }), o.init(), e || o.changeSlide({ 3021 data: { 3022 message: "index", 3023 index: s 3024 } 3025 }, !1) 3026 }, e.prototype.registerBreakpoints = function () { 3027 var e, s, t, o = this, 3028 n = o.options.responsive || null; 3029 if ("array" === i.type(n) && n.length) { 3030 o.respondTo = o.options.respondTo || "window"; 3031 for (e in n) 3032 if (t = o.breakpoints.length - 1, s = n[e].breakpoint, n.hasOwnProperty(e)) { 3033 for (; t >= 0;) o.breakpoints[t] && o.breakpoints[t] === s && o.breakpoints.splice(t, 1), t--; 3034 o.breakpoints.push(s), o.breakpointSettings[s] = n[e].settings 3035 } o.breakpoints.sort(function (i, e) { 3036 return o.options.mobileFirst ? i - e : e - i 3037 }) 3038 } 3039 }, e.prototype.reinit = function () { 3040 var e = this; 3041 e.$slides = e.$slideTrack.children(e.options.slide).addClass("slick-slide"), e.slideCount = e.$slides.length, e.currentSlide >= e.slideCount && 0 !== e.currentSlide && (e.currentSlide = e.currentSlide - e.options.slidesToScroll), e.slideCount <= e.options.slidesToShow && (e.currentSlide = 0), e.registerBreakpoints(), e.setProps(), e.setupInfinite(), e.buildArrows(), e.updateArrows(), e.initArrowEvents(), e.buildDots(), e.updateDots(), e.initDotEvents(), e.checkResponsive(!1, !0), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), e.setSlideClasses(0), e.setPosition(), e.$slider.trigger("reInit", [e]), !0 === e.options.autoplay && e.focusHandler() 3042 }, e.prototype.resize = function () { 3043 var e = this; 3044 i(window).width() !== e.windowWidth && (clearTimeout(e.windowDelay), e.windowDelay = window.setTimeout(function () { 3045 e.windowWidth = i(window).width(), e.checkResponsive(), e.unslicked || e.setPosition() 3046 }, 50)) 3047 }, e.prototype.removeSlide = e.prototype.slickRemove = function (i, e, s) { 3048 var t = this; 3049 return "boolean" == typeof i ? (e = i, i = !0 === e ? 0 : t.slideCount - 1) : i = !0 === e ? --i : i, !(t.slideCount <1 || 0> i || i > t.slideCount - 1) && (t.unload(), !0 === s ? t.$slideTrack.children().remove() : t.$slideTrack.children(this.options.slide).eq(i).remove(), t.$slides = t.$slideTrack.children(this.options.slide), t.$slideTrack.children(this.options.slide).detach(), t.$slideTrack.append(t.$slides), t.$slidesCache = t.$slides, void t.reinit()) 3050 }, e.prototype.setCSS = function (i) { 3051 var e, s, t = this, 3052 o = {}; 3053 !0 === t.options.rtl && (i = -i), e = "left" == t.positionProp ? Math.ceil(i) + "px" : "0px", s = "top" == t.positionProp ? Math.ceil(i) + "px" : "0px", o[t.positionProp] = i, !1 === t.transformsEnabled ? t.$slideTrack.css(o) : (o = {}, !1 === t.cssTransitions ? (o[t.animType] = "translate(" + e + ", " + s + ")", t.$slideTrack.css(o)) : (o[t.animType] = "translate3d(" + e + ", " + s + ", 0px)", t.$slideTrack.css(o))) 3054 }, e.prototype.setDimensions = function () { 3055 var i = this; 3056 !1 === i.options.vertical ? !0 === i.options.centerMode && i.$list.css({ 3057 padding: "0px " + i.options.centerPadding 3058 }) : (i.$list.height(i.$slides.first().outerHeight(!0) * i.options.slidesToShow), !0 === i.options.centerMode && i.$list.css({ 3059 padding: i.options.centerPadding + " 0px" 3060 })), i.listWidth = i.$list.width(), i.listHeight = i.$list.height(), !1 === i.options.vertical && !1 === i.options.variableWidth ? (i.slideWidth = Math.ceil(i.listWidth / i.options.slidesToShow), i.$slideTrack.width(Math.ceil(i.slideWidth * i.$slideTrack.children(".slick-slide").length))) : !0 === i.options.variableWidth ? i.$slideTrack.width(5e3 * i.slideCount) : (i.slideWidth = Math.ceil(i.listWidth), i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0) * i.$slideTrack.children(".slick-slide").length))); 3061 var e = i.$slides.first().outerWidth(!0) - i.$slides.first().width(); 3062 !1 === i.options.variableWidth && i.$slideTrack.children(".slick-slide").width(i.slideWidth - e) 3063 }, e.prototype.setFade = function () { 3064 var e, s = this; 3065 s.$slides.each(function (t, o) { 3066 e = s.slideWidth * t * -1, !0 === s.options.rtl ? i(o).css({ 3067 position: "relative", 3068 right: e, 3069 top: 0, 3070 zIndex: s.options.zIndex - 2, 3071 opacity: 0 3072 }) : i(o).css({ 3073 position: "relative", 3074 left: e, 3075 top: 0, 3076 zIndex: s.options.zIndex - 2, 3077 opacity: 0 3078 }) 3079 }), s.$slides.eq(s.currentSlide).css({ 3080 zIndex: s.options.zIndex - 1, 3081 opacity: 1 3082 }) 3083 }, e.prototype.setHeight = function () { 3084 var i = this; 3085 if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { 3086 var e = i.$slides.eq(i.currentSlide).outerHeight(!0); 3087 i.$list.css("height", e) 3088 } 3089 }, e.prototype.setOption = e.prototype.slickSetOption = function (e, s, t) { 3090 var o, n, a = this; 3091 if ("responsive" === e && "array" === i.type(s)) 3092 for (n in s) 3093 if ("array" !== i.type(a.options.responsive)) a.options.responsive = [s[n]]; 3094 else { 3095 for (o = a.options.responsive.length - 1; o >= 0;) a.options.responsive[o].breakpoint === s[n].breakpoint && a.options.responsive.splice(o, 1), o--; 3096 a.options.responsive.push(s[n]) 3097 } 3098 else a.options[e] = s; 3099 !0 === t && (a.unload(), a.reinit()) 3100 }, e.prototype.setPosition = function () { 3101 var i = this; 3102 i.setDimensions(), i.setHeight(), !1 === i.options.fade ? i.setCSS(i.getLeft(i.currentSlide)) : i.setFade(), i.$slider.trigger("setPosition", [i]) 3103 }, e.prototype.setProps = function () { 3104 var i = this, 3105 e = document.body.style; 3106 i.positionProp = !0 === i.options.vertical ? "top" : "left", "top" === i.positionProp ? i.$slider.addClass("slick-vertical") : i.$slider.removeClass("slick-vertical"), (void 0 !== e.WebkitTransition || void 0 !== e.MozTransition || void 0 !== e.msTransition) && !0 === i.options.useCSS && (i.cssTransitions = !0), i.options.fade && ("number" == typeof i.options.zIndex ? i.options.zIndex <3 && (i.options.zIndex = 3) : i.options.zIndex = i.defaults.zIndex), void 0 !== e.OTransform && (i.animType = "OTransform", i.transformType = "-o-transform", i.transitionType = "OTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.MozTransform && (i.animType = "MozTransform", i.transformType = "-moz-transform", i.transitionType = "MozTransition", void 0 === e.perspectiveProperty && void 0 === e.MozPerspective && (i.animType = !1)), void 0 !== e.webkitTransform && (i.animType = "
3106webkitTransform", i.transformType = "-webkit-transform", i.transitionType = "webkitTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.msTransform && (i.animType = "msTransform", i.transformType = "-ms-transform", i.transitionType = "msTransition", void 0 === e.msTransform && (i.animType = !1)), void 0 !== e.transform && !1 !== i.animType && (i.animType = "transform", i.transformType = "transform", i.transitionType = "transition"), i.transformsEnabled = i.options.useTransform && null !== i.animType && !1 !== i.animType }, e.prototype.setSlideClasses = function (i) { var e, s, t, o, n = this; s = n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"), n.$slides.eq(i).addClass("slick-current"), !0 === n.options.centerMode ? (e = Math.floor(n.options.slidesToShow / 2), !0 === n.options.infinite && (i>= e && i <= n.slideCount - 1 - e ? n.$slides.slice(i - e, i + e + 1).addClass("slick-active").attr("aria-hidden", "false") : (t = n.options.slidesToShow + i, s.slice(t - e + 1, t + e + 2).addClass("slick-active").attr("aria-hidden", "false")), 0 === i ? s.eq(s.length - 1 - n.options.slidesToShow).addClass("slick-center") : i === n.slideCount - 1 && s.eq(n.options.slidesToShow).addClass("slick-center")), n.$slides.eq(i).addClass("slick-center")) : i>= 0 && i <= n.slideCount - n.options.slidesToShow ? n.$slides.slice(i, i + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : s.length <= n.options.slidesToShow ? s.addClass("slick-active").attr("aria-hidden", "false") : (o = n.slideCount % n.options.slidesToShow, t = !0 === n.options.infinite ? n.options.slidesToShow + i : i, n.options.slidesToShow == n.options.slidesToScroll && n.slideCount - i <n.options.slidesToShow ? s.slice(t - (n.options.slidesToShow - o), t + o).addClass("slick-active").attr("aria-hidden", "false") : s.slice(t, t + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false")), "ondemand" === n.options.lazyLoad && n.lazyLoad() }, e.prototype.setupInfinite = function () { var e, s, t, o = this; if (!0 === o.options.fade && (o.options.centerMode = !1), !0 === o.options.infinite && !1 === o.options.fade && (s = null, o.slideCount> o.options.slidesToShow)) { 3107 for (t = !0 === o.options.centerMode ? o.options.slidesToShow + 1 : o.options.slidesToShow, e = o.slideCount; e > o.slideCount - t; e -= 1) s = e - 1, i(o.$slides[s]).clone(!0).attr("id", "").attr("data-slick-index", s - o.slideCount).prependTo(o.$slideTrack).addClass("slick-cloned"); 3108 for (e = 0; t > e; e += 1) s = e, i(o.$slides[s]).clone(!0).attr("id", "").attr("data-slick-index", s + o.slideCount).appendTo(o.$slideTrack).addClass("slick-cloned"); 3109 o.$slideTrack.find(".slick-cloned").find("[id]").each(function () { 3110 i(this).attr("id", "") 3111 }) 3112 } 3113 }, e.prototype.setPaused = function (i) { 3114 var e = this; 3115 !0 === e.options.autoplay && !0 === e.options.pauseOnHover && (e.paused = i, i ? e.autoPlayClear() : e.autoPlay()) 3116 }, e.prototype.selectHandler = function (e) { 3117 var s = this, 3118 t = i(e.target).is(".slick-slide") ? i(e.target) : i(e.target).parents(".slick-slide"), 3119 o = parseInt(t.attr("data-slick-index")); 3120 return o || (o = 0), s.slideCount <= s.options.slidesToShow ? (s.setSlideClasses(o), void s.asNavFor(o)) : void s.slideHandler(o) 3121 }, e.prototype.slideHandler = function (i, e, s) { 3122 var t, o, n, a, l = null, 3123 r = this; 3124 return e = e || !1, !0 === r.animating && !0 === r.options.waitForAnimate || !0 === r.options.fade && r.currentSlide === i || r.slideCount <= r.options.slidesToShow ? void 0 : (!1 === e && r.asNavFor(i), t = i, l = r.getLeft(t), a = r.getLeft(r.currentSlide), r.currentLeft = null === r.swipeLeft ? a : r.swipeLeft, !1 === r.options.infinite && !1 === r.options.centerMode && (0> i || i > r.getDotCount() * r.options.slidesToScroll) ? void (!1 === r.options.fade && (t = r.currentSlide, !0 !== s ? r.animateSlide(a, function () { 3125 r.postSlide(t) 3126 }) : r.postSlide(t))) : !1 === r.options.infinite && !0 === r.options.centerMode && (0 > i || i > r.slideCount - r.options.slidesToScroll) ? void (!1 === r.options.fade && (t = r.currentSlide, !0 !== s ? r.animateSlide(a, function () { 3127 r.postSlide(t) 3128 }) : r.postSlide(t))) : (!0 === r.options.autoplay && clearInterval(r.autoPlayTimer), o = 0 > t ? r.slideCount % r.options.slidesToScroll != 0 ? r.slideCount - r.slideCount % r.options.slidesToScroll : r.slideCount + t : t >= r.slideCount ? r.slideCount % r.options.slidesToScroll != 0 ? 0 : t - r.slideCount : t, r.animating = !0, r.$slider.trigger("beforeChange", [r, r.currentSlide, o]), n = r.currentSlide, r.currentSlide = o, r.setSlideClasses(r.currentSlide), r.updateDots(), r.updateArrows(), !0 === r.options.fade ? (!0 !== s ? (r.fadeSlideOut(n), r.fadeSlide(o, function () { 3129 r.postSlide(o) 3130 })) : r.postSlide(o), void r.animateHeight()) : void (!0 !== s ? r.animateSlide(l, function () { 3131 r.postSlide(o) 3132 }) : r.postSlide(o)))) 3133 }, e.prototype.startLoad = function () { 3134 var i = this; 3135 !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.hide(), i.$nextArrow.hide()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.hide(), i.$slider.addClass("slick-loading") 3136 }, e.prototype.swipeDirection = function () { 3137 var i, e, s, t, o = this; 3138 return i = o.touchObject.startX - o.touchObject.curX, e = o.touchObject.startY - o.touchObject.curY, s = Math.atan2(e, i), 0 > (t = Math.round(180 * s / Math.PI)) && (t = 360 - Math.abs(t)), 45 >= t && t >= 0 ? !1 === o.options.rtl ? "left" : "right" : 360 >= t && t >= 315 ? !1 === o.options.rtl ? "left" : "right" : t >= 135 && 225 >= t ? !1 === o.options.rtl ? "right" : "left" : !0 === o.options.verticalSwiping ? t >= 35 && 135 >= t ? "left" : "right" : "vertical" 3139 }, e.prototype.swipeEnd = function (i) { 3140 var e, s = this; 3141 if (s.dragging = !1, s.shouldClick = !(s.touchObject.swipeLength > 10), void 0 === s.touchObject.curX) return !1; 3142 if (!0 === s.touchObject.edgeHit && s.$slider.trigger("edge", [s, s.swipeDirection()]), s.touchObject.swipeLength >= s.touchObject.minSwipe) switch (s.swipeDirection()) {
3143 case "left": 3144 e = s.options.swipeToSlide ? s.checkNavigable(s.currentSlide + s.getSlideCount()) : s.currentSlide + s.getSlideCount(), s.slideHandler(e), s.currentDirection = 0, s.touchObject = {}, s.$slider.trigger("swipe", [s, "left"]); 3145 break; 3146 case "right": 3147 e = s.options.swipeToSlide ? s.checkNavigable(s.currentSlide - s.getSlideCount()) : s.currentSlide - s.getSlideCount(), s.slideHandler(e), s.currentDirection = 1, s.touchObject = {}, s.$slider.trigger("swipe", [s, "right"]) 3148 } else s.touchObject.startX !== s.touchObject.curX && (s.slideHandler(s.currentSlide), s.touchObject = {}) 3149 }, e.prototype.swipeHandler = function (i) { 3150 var e = this; 3151 if (!(!1 === e.options.swipe || "ontouchend" in document && !1 === e.options.swipe || !1 === e.options.draggable && -1 !== i.type.indexOf("mouse"))) switch (e.touchObject.fingerCount = i.originalEvent && void 0 !== i.originalEvent.touches ? i.originalEvent.touches.length : 1, e.touchObject.minSwipe = e.listWidth / e.options.touchThreshold, !0 === e.options.verticalSwiping && (e.touchObject.minSwipe = e.listHeight / e.options.touchThreshold), i.data.action) { 3152 case "start": 3153 e.swipeStart(i); 3154 break; 3155 case "move": 3156 e.swipeMove(i); 3157 break; 3158 case "end": 3159 e.swipeEnd(i) 3160 } 3161 }, e.prototype.swipeMove = function (i) { 3162 var e, s, t, o, n, a = this; 3163 return n = void 0 !== i.originalEvent ? i.originalEvent.touches : null, !(!a.dragging || n && 1 !== n.length) && (e = a.getLeft(a.currentSlide), a.touchObject.curX = void 0 !== n ? n[0].pageX : i.clientX, a.touchObject.curY = void 0 !== n ? n[0].pageY : i.clientY, a.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(a.touchObject.curX - a.touchObject.startX, 2))), !0 === a.options.verticalSwiping && (a.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(a.touchObject.curY - a.touchObject.startY, 2)))), s = a.swipeDirection(), "vertical" !== s ? (void 0 !== i.originalEvent && a.touchObject.swipeLength > 4 && i.preventDefault(), o = (!1 === a.options.rtl ? 1 : -1) * (a.touchObject.curX > a.touchObject.startX ? 1 : -1), !0 === a.options.verticalSwiping && (o = a.touchObject.curY > a.touchObject.startY ? 1 : -1), t = a.touchObject.swipeLength, a.touchObject.edgeHit = !1, !1 === a.options.infinite && (0 === a.currentSlide && "right" === s || a.currentSlide >= a.getDotCount() && "left" === s) && (t = a.touchObject.swipeLength * a.options.edgeFriction, a.touchObject.edgeHit = !0), !1 === a.options.vertical ? a.swipeLeft = e + t * o : a.swipeLeft = e + t * (a.$list.height() / a.listWidth) * o, !0 === a.options.verticalSwiping && (a.swipeLeft = e + t * o), !0 !== a.options.fade && !1 !== a.options.touchMove && (!0 === a.animating ? (a.swipeLeft = null, !1) : void a.setCSS(a.swipeLeft))) : void 0) 3164 }, e.prototype.swipeStart = function (i) { 3165 var e, s = this; 3166 return 1 !== s.touchObject.fingerCount || s.slideCount <= s.options.slidesToShow ? (s.touchObject = {}, !1) : (void 0 !== i.originalEvent && void 0 !== i.originalEvent.touches && (e = i.originalEvent.touches[0]), s.touchObject.startX = s.touchObject.curX = void 0 !== e ? e.pageX : i.clientX, s.touchObject.startY = s.touchObject.curY = void 0 !== e ? e.pageY : i.clientY, void (s.dragging = !0)) }, e.prototype.unfilterSlides = e.prototype.slickUnfilter = function () { var i = this; null !== i.$slidesCache && (i.unload(), i.$slideTrack.children(this.options.slide).detach(), i.$slidesCache.appendTo(i.$slideTrack), i.reinit()) }, e.prototype.unload = function () { var e = this; i(".slick-cloned", e.$slider).remove(), e.$dots && e.$dots.remove(), e.$prevArrow && e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.remove(), e.$nextArrow && e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.remove(), e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "") }, e.prototype.unslick = function (i) { var e = this; e.$slider.trigger("unslick", [e, i]), e.destroy() }, e.prototype.updateArrows = function () { var i = this; Math.floor(i.options.slidesToShow / 2), !0 === i.options.arrows && i.slideCount> i.options.slidesToShow && !i.options.infinite && (i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), 0 === i.currentSlide ? (i.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - i.options.slidesToShow && !1 === i.options.centerMode ? (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - 1 && !0 === i.options.centerMode && (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"))) 3167 }, e.prototype.updateDots = function () { 3168 var i = this; 3169 null !== i.$dots && (i.$dots.find("li").removeClass("slick-active").attr("aria-hidden", "true"), i.$dots.find("li").eq(Math.floor(i.currentSlide / i.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden", "false")) 3170 }, e.prototype.visibility = function () { 3171 var i = this; 3172 document[i.hidden] ? (i.paused = !0, i.autoPlayClear()) : !0 === i.options.autoplay && (i.paused = !1, i.autoPlay()) 3173 }, e.prototype.initADA = function () { 3174 var e = this; 3175 e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({ 3176 "aria-hidden": "true", 3177 tabindex: "-1" 3178 }).find("a, input, button, select").attr({ 3179 tabindex: "-1" 3180 }), e.$slideTrack.attr("role", "listbox"), e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function (s) { 3181 i(this).attr({ 3182 role: "option", 3183 "aria-describedby": "slick-slide" + e.instanceUid + s 3184 }) 3185 }), null !== e.$dots && e.$dots.attr("role", "tablist").find("li").each(function (s) { 3186 i(this).attr({ 3187 role: "presentation", 3188 "aria-selected": "false", 3189 "aria-controls": "navigation" + e.instanceUid + s, 3190 id: "slick-slide" + e.instanceUid + s 3191 }) 3192 }).first().attr("aria-selected", "true").end().find("button").attr("role", "button").end().closest("div").attr("role", "toolbar"), e.activateADA() 3193 }, e.prototype.activateADA = function () { 3194 this.$slideTrack.find(".slick-active").attr({ 3195 "aria-hidden": "false" 3196 }).find("a, input, button, select").attr({ 3197 tabindex: "0" 3198 }) 3199 }
3199, e.prototype.focusHandler = function () { 3200 var e = this; 3201 e.$slider.on("focus.slick blur.slick", "*", function (s) { 3202 s.stopImmediatePropagation(); 3203 var t = i(this); 3204 setTimeout(function () { 3205 e.isPlay && (t.is(":focus") ? (e.autoPlayClear(), e.paused = !0) : (e.paused = !1, e.autoPlay())) 3206 }, 0) 3207 }) 3208 }, i.fn.slick = function () { 3209 var i, s, t = this, 3210 o = arguments[0], 3211 n = Array.prototype.slice.call(arguments, 1), 3212 a = t.length; 3213 for (i = 0; a > i; i++) 3214 if ("object" == typeof o || void 0 === o ? t[i].slick = new e(t[i], o) : s = t[i].slick[o].apply(t[i].slick, n), void 0 !== s) return s; 3215 return t 3216 } 3217 }), 3218 function (i) { 3219 i.youtubePlayer = function (e, s) { 3220 var t = { 3221 vid: [] 3222 }; 3223 this.settings = {}; 3224 var o, n, a = i(e), 3225 e = e, 3226 l = { 3227 autoplay: 0, 3228 autohide: 1, 3229 modestbranding: 0, 3230 rel: 0, 3231 showinfo: 0, 3232 controls: 0, 3233 disablekb: 1, 3234 enablejsapi: 0, 3235 iv_load_policy: 3 3236 }; 3237 this.init = function () { 3238 this.settings = i.extend({}, t, s), n = 0, loadScript("https://www.youtube.com/player_api", function () { 3239 $(window).on("load resize", function () { 3240 a.data("youtubePlayer").vidRescale() 3241 }); 3242 try { 3243 a.data("youtubePlayer").onYouTubePlayerAPIReady() 3244 } catch (i) { } 3245 }) 3246 }, this.onYouTubePlayerAPIReady = function () { 3247 o = new YT.Player(a.attr("id"), { 3248 events: { 3249 onReady: function () { 3250 o.loadVideoById(a.data("youtubePlayer").settings.vid[n]), o.mute() 3251 }, 3252 onStateChange: function (i) { 3253 1 === i.data ? $("#" + a.attr("id")).addClass("active") : 2 === i.data && ($("#" + a.attr("id")).removeClass("active"), (n += 1) > a.data("youtubePlayer").settings.vid.length - 1 && (n = 0), o.loadVideoById(a.data("youtubePlayer").settings.vid[n]), o.seekTo(a.data("youtubePlayer").settings.vid[n].startSeconds)) 3254 } 3255 }, 3256 playerVars: l 3257 }), a.data("youtubePlayer").vidRescale() 3258 }, this.vidRescale = function () { 3259 var i = $(window).width() + 200, 3260 e = $(window).height() + 200; 3261 i / e > 16 / 9 ? (o.setSize(i, i / 16 * 9), $(".is_video_bg .screen").css({ 3262 left: "0px" 3263 })) : (o.setSize(e / 9 * 16, e), $(".is_video_bg .screen").css({ 3264 left: -($(".is_video_bg .screen").outerWidth() - i) / 2 3265 })) 3266 }, this.init() 3267 }, i.fn.youtubePlayer = function (e) { 3268 return this.each(function () { 3269 if (void 0 == i(this).data("youtubePlayer")) { 3270 var s = new i.youtubePlayer(this, e); 3271 i(this).data("youtubePlayer", s) 3272 } 3273 }) 3274 } 3275 }(jQuery); 3276 // cookie 3277 3278 function close() { 3279 var e = document.getElementById("notification-bottom"); 3280 e.parentNode.removeChild(e), document.cookie = "cookie=1; path=/" 3281 } 3282 3283 function pageInit() { 3284 $('<div id="notification-bottom"><p>We use cookies to provide you with a better user experience. By continuing to use this website, you consent to our use of cookies in accordance with our <a href="/cookie-policy">cookie policy</a>.</p><a id="closeBtn" class="btn btn-primary cookie-consent-close">Close</a></div>').hide().appendTo($("body")).fadeIn(200); 3285 var e = document.getElementById("closeBtn"); 3286 e.addEventListener ? e.addEventListener("click", close, !1) : e.attachEvent ? e.attachEvent("onclick", close) : e.onclick = close 3287 } 3288 document.cookie.match(/^(.*;)?\s*cookie\s*=\s*[^;]+(.*)?$/) || pageInit(); 3289 3290 (function(){'use strict';function initialise(root){var track=root.querySelector('.accreditations-carousel-01__track');var toggle=root.querySelector('[data-accreditations-carousel-01-toggle]');if(!track||track.getAttribute('data-accreditations-carousel-01-ready')==='true')return;if(!window.jQuery||!window.jQuery.fn||!window.jQuery.fn.slick)return;var reducedMotion=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;var desktopSlides=parseInt(root.getAttribute('data-accreditations-carousel-01-slides'),10);if(desktopSlides<3||desktopSlides>5)desktopSlides=3;track.setAttribute('data-accreditations-carousel-01-ready','true');window.jQuery(track).slick({slidesToShow:desktopSlides,slidesToScroll:1,autoplay:!reducedMotion,autoplaySpeed:0,speed:8000,cssEase:'linear',arrows:!1,dots:!1,infinite:!0,pauseOnHover:!1,swipe:!0,responsive:[{breakpoint:960,settings:{slidesToShow:2}},{breakpoint:640,settings:{slidesToShow:1}}]});if(!toggle)return;function setMotionState(paused){toggle.setAttribute('aria-pressed',String(paused));toggle.setAttribute('aria-label',paused?'Start carousel motion':'Pause carousel motion');toggle.setAttribute('title',paused?'Start carousel motion':'Pause carousel motion');toggle.querySelector('path').setAttribute('d',paused?'M8 5l11 7-11 7z':'M7 5v14M17 5v14');toggle.querySelector('path').setAttribute('fill',paused?'currentColor':'none')} 3291setMotionState(reducedMotion);toggle.addEventListener('click',function(){var paused=toggle.getAttribute('aria-pressed')!=='true';window.jQuery(track).slick(paused?'slickPause':'slickPlay');setMotionState(paused)})} 3292function initialiseAll(){var roots=document.querySelectorAll('[data-accreditations-carousel-01]');for(var index=0;
3292index<roots.length;index++){initialise(roots[index])}} 3293if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initialiseAll)}else{initialiseAll()}})();(function(){'use strict';function setPosition(comparison,handle,clientX){var bounds=comparison.getBoundingClientRect();var position=bounds.width?((clientX-bounds.left)/bounds.width)*100:50;position=Math.max(0,Math.min(100,position));comparison.style.setProperty('--before-after-projects-01-position',position+'%');handle.setAttribute('aria-valuenow',String(Math.round(position)))} 3294function initialiseComparison(comparison){var handle=comparison.querySelector('[data-before-after-projects-01-handle]');if(!handle||handle.getAttribute('data-before-after-projects-01-ready')==='true')return;handle.setAttribute('data-before-after-projects-01-ready','true');handle.addEventListener('pointerdown',function(event){event.preventDefault();handle.setPointerCapture(event.pointerId);setPosition(comparison,handle,event.clientX)});handle.addEventListener('pointermove',function(event){if(handle.hasPointerCapture(event.pointerId)){setPosition(comparison,handle,event.clientX)}});handle.addEventListener('pointerup',function(event){if(handle.hasPointerCapture(event.pointerId)){handle.releasePointerCapture(event.pointerId)}});handle.addEventListener('pointercancel',function(event){if(handle.hasPointerCapture(event.pointerId)){handle.releasePointerCapture(event.pointerId)}});handle.addEventListener('keydown',function(event){var current=Number(handle.getAttribute('aria-valuenow'));if(isNaN(current))current=50;var next=current;if(event.key==='ArrowLeft'||event.key==='ArrowDown')next-=5;if(event.key==='ArrowRight'||event.key==='ArrowUp')next+=5;if(event.key==='Home')next=0;if(event.key==='End')next=100;if(next===current)return;event.preventDefault();var bounds=comparison.getBoundingClientRect();setPosition(comparison,handle,bounds.left+(bounds.width*Math.max(0,Math.min(100,next))/100))})} 3295function initialise(){var comparisons=document.querySelectorAll('[data-before-after-projects-01-comparison]');for(var index=0;index<comparisons.length;index++){initialiseComparison(comparisons[index])}} 3296if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initialise)}else{initialise()}})();$(document).ready(function(){var btn=document.getElementsByClassName("description-toggle");var html=document.documentElement;for(var i=0;i<btn.length;i++){var button=btn[i];var set=button.nextElementSibling;if(!set||button.getAttribute("data-faq-toggle-init")==="1"){continue} 3297button.setAttribute("data-faq-toggle-init","1");button.setAttribute("aria-expanded","false");set.style.maxHeight="0px";if(html&&html.classList.contains("js")){var startIcon=button.querySelector(".icon");set.classList.add("hide-content");if(startIcon){startIcon.classList.remove("ion-chevron-up");startIcon.classList.add("ion-chevron-down")}} 3298button.addEventListener("click",function(){var content=this.nextElementSibling;var icon=this.querySelector(".icon");if(!content){return} 3299content.classList.toggle("toggled");if(content.style.maxHeight!=="0px"){content.style.maxHeight="0px";this.setAttribute("aria-expanded","false");if(icon){icon.classList.remove("ion-chevron-up");icon.classList.add("ion-chevron-down")}}else{content.style.maxHeight=content.scrollHeight+"px";this.setAttribute("aria-expanded","true");if(icon){icon.classList.add("ion-chevron-up");icon.classList.remove("ion-chevron-down")}}})}});(function(){function updateToggles(root){var cards=root.querySelectorAll('.google-reviews__card');for(var i=0;i<cards.length;i++){var quote=cards[i].querySelector('.google-reviews__quote');var toggle=cards[i].querySelector('.google-reviews__toggle');if(!quote||!toggle)continue;if(quote.classList.contains('is-expanded')){toggle.classList.remove('is-hidden');continue} if(quote.scrollHeight>quote.clientHeight+1){toggle.classList.remove('is-hidden')}else{toggle.classList.add('is-hidden')}}} 3300function findAncestorWithClass(node,className,boundary){while(node&&node!==boundary){if(node.classList&&node.classList.contains(className))return node;node=node.parentNode} 3301return null} 3302function bindReadMore(root){root.addEventListener('click',function(event){var toggle=findAncestorWithClass(event.target,'google-reviews__toggle',root);if(!toggle)return;var card=findAncestorWithClass(toggle,'google-reviews__card',root);var quote=card?card.querySelector('.google-reviews__quote'):null;if(!quote)return;var expanded=quote.classList.toggle('is-expanded');toggle.textContent=expanded?'Read less':'Read more';var track=root.querySelector('.google-reviews__track');if(track&&window.jQuery&&window.jQuery.fn&&window.jQuery.fn.slick){window.jQuery(track).slick('setPosition')}})} 3303function initSlider(root){var track=root.querySelector('.google-reviews__track');if(!track||!window.jQuery||!window.jQuery.fn||!window.jQuery.fn.slick)return;var $track=window.jQuery(track);if($track.hasClass('slick-initialized')){updateToggles(root);return} 3304$track.on('init setPosition breakpoint',function(){updateToggles(root)});$track.slick({slidesToShow:3,slidesToScroll:1,dots:!1,arrows:!0,infinite:!0,responsive:[{breakpoint:1024,settings:{slidesToShow:2,slidesToScroll:1}},{breakpoint:700,settings:{slidesToShow:1,slidesToScroll:1}}]})} 3305var roots=document.querySelectorAll('.google-reviews');for(var i=0;i<roots.length;i++){if(!roots[i].__googleReviewsInitialised){roots[i].__googleReviewsInitialised=!0;bindReadMore(roots[i]);initSlider(roots[i]);updateToggles(roots[i])}} 3306if(document.fonts&&document.fonts.ready&&document.fonts.ready.then){document.fonts.ready.then(function(){for(var i=0;i<roots.length;i++){updateToggles(roots[i])}})}})() $('body').on('click', 'a[href*="#"]:not([href="#"])', function (e) {� if (location.pathname.replace(/^\//, '')
3306== this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {� var target = $(this.hash);� target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');� if (target.length) {� event.preventDefault();� $('html, body').stop().animate({� scrollTop: target.offset().top - 60� }, 1000, function() {� var $target = $(target);� $target.focus();� if ($target.is(":focus")) {� return false;� } else {� $target.attr('tabindex','-1');� $target.focus();� }� });� }� }� });� � var keys = {37: 1, 38: 1, 39: 1, 40: 1};� function preventDefault(e) {� e = e || window.event;� if (e.preventDefault)� e.preventDefault();� e.returnValue = false;� }� � function preventDefaultForScrollKeys(e) {� if (keys[e.keyCode]) {� preventDefault(e);� return false;� }� }� � function disableScroll() {� if (window.addEventListener) // older FF� window.addEventListener('DOMMouseScroll', preventDefault, false);� window.onwheel = preventDefault; // modern standard� window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE� window.ontouchmove = preventDefault; // mobile� document.onkeydown = preventDefaultForScrollKeys;� }� � function enableScroll() {� if (window.removeEventListener)� window.removeEventListener('DOMMouseScroll', preventDefault, false);� window.onmousewheel = document.onmousewheel = null;� window.onwheel = null;� window.ontouchmove = null;� document.onkeydown = null;� }� � $.fn.scrollLimit = function() {� return this.on( 'wheel', function ( e ) {� var $this = $(this);� if (0> e.originalEvent.deltaY) { 3307 3308 return ($this.scrollTop() > 0); 3309 } else { 3310 3311 return ($this[0].scrollHeight > $this.innerHeight() + $this.scrollTop()); 3312 } 3313 }); 3314}; 3315 3316$('#nav').scrollLimit() 3317 3318$('#nav-toggle').on('mousedown touchstart', function (e) { 3319 if (e.which !== 3) { 3320 var state = ($(this).prev().hasClass('closed')) ? 'auto' : 'hidden'; 3321 var offset = window.innerWidth - document.documentElement.clientWidth; 3322 if (state === 'hidden') { 3323 $('body').addClass('nav-active').css({ 3324 'overflow-y': state, 3325 'padding-right': offset, 3326 }); 3327 } else { 3328 $('body').removeClass('nav-active').removeAttr('style') 3329 } 3330 } 3331}); 3332 3333// Section for updating specific sections based on whether criteria is met on load. 3334(function() { 3335 3336 function changeNavPosition() { 3337 // Set height of placeholder fields 3338 if (document.documentElement.classList.contains('js')) { 3339 var height = document.getElementById('header_can').offsetHeight; 3340 var navHeight = document.getElementById('nav-toggle').offsetHeight; 3341 var style = document.createElement('style'); 3342 style.id = 'y9gxb3'; 3343 var css = document.createTextNode('#nav-toggle, #nav-toggle.js-is-sticky { top: '+ ((height / 2) - (navHeight / 2)) +'px !important } @media (min-width: 60rem) { #nav > li { height: '+ height +'px; } }'); 3344 style.appendChild(css); 3345 document.body.appendChild(style) 3346 } 3347 } 3348 3349 // Set phone numbers to data attributes 3350 const numbers = document.getElementById('header_can').getElementsByClassName('phone-call') 3351 for (var i = 0; numbers.length > i; i++) { 3352 numbers[i].setAttribute('data-call', '') 3353 } 3354 3355 // Set height on load 3356 changeNavPosition() 3357 3358 // Check if an email address has been included in the first custom field 3359 let emailCheck = false; 3360 const custom = document.getElementById('header_can').querySelectorAll('[class^=custom]') 3361 if (custom.length > 0) { 3362 for (var i = 0; custom.length > i; i++) { 3363 let field = custom[i].getElementsByTagName('span')[0] 3364 let text = field.textContent.toLowerCase() 3365 if (text.includes('mail')) { 3366 emailCheck = true; 3367 custom[i].classList.add('contact') 3368 } 3369 if (!emailCheck) { 3370 let strong = custom[i].getElementsByTagName('strong')[0] 3371 let number = strong.textContent.replace(' ', '') 3372 if (!isNaN(number)) { 3373 // Add custom label class to show the custom label 3374 field.classList.add('custom-label') 3375 3376 // Check if field is a landline or mobile 3377 if (number.substring(0, 2) === '07') { 3378 custom[i].classList.add('mobile') 3379 } else { 3380 custom[i].classList.add('phone') 3381 } 3382 3383 // Create link for phone number that doesn't have a link 3384 var link = document.createElement('a') 3385 link.classList.add('phone-call') 3386 link.href = 'tel:' + number; 3387 3388 while(strong.hasChildNodes()) { 3389 link.appendChild(strong.firstChild) 3390 } 3391 strong.appendChild(link) 3392 } 3393 } 3394 } 3395 } 3396 3397 // Load Stickybits 3398 var bits = 'https://cdnjs.cloudflare.com/ajax/libs/stickybits/3.7.2/jquery.stickybits.min.js'; 3399 $.ajaxSetup({ 3400 cache: true 3401 }); 3402 $.getScript(bits, function() { 3403 $('#header_can, #navigation > ul').stickybits();
3404 $('#nav-toggle').stickybits({useStickyClasses: true}); 3405 }); 3406 3407})(); 3408 3409$('.gallery-carousel').slick({ 3410 centerMode: true, 3411 centerPadding: '25px', 3412 slidesToShow: 5, 3413 responsive: [ 3414 { 3415 breakpoint: 1200, 3416 settings: { 3417 arrows: true, 3418 dots: true, 3419 centerMode: true, 3420 centerPadding: '15px', 3421 slidesToShow: 3 3422 } 3423 }, 3424 { 3425 breakpoint: 640, 3426 settings: { 3427 arrows: true, 3428 dots: false, 3429 centerMode: true, 3430 centerPadding: '15px', 3431 slidesToShow: 1 3432 } 3433 } 3434 ] 3435}); 3436 3437(function () { 3438 3439 // Image section toggle 3440 $('.overlay-list a').on('click', function () { 3441 let parent = $(this).parent() 3442 let index = parent.index() - 1 3443 // Height 3444 let oldHeight = $('#overlay-section').css('height', '').outerHeight() 3445 // List 3446 $('.overlay-list').find('.active').removeAttr('class') 3447 parent.addClass('active') 3448 // Content 3449 $('.overlay-content').hide() 3450 $('.overlay-content').eq(index).show() 3451 let height = $('#overlay-section').outerHeight() 3452 $('#overlay-section').css('height', oldHeight) 3453 setTimeout(function () { 3454 $('#overlay-section').css('height', height) 3455 }, 1) 3456 }); 3457 // Show heading slider 3458 var parent = $('.overlay-list') 3459 var child = parent.find('ul') 3460 if (child.width() > parent.width()) { 3461 $('.overlay-next').addClass('visible') 3462 } 3463 }()); 3464 (function () { 3465 jQuery.expr.filters.offscreen = function(el) { 3466 var rect = el.getBoundingClientRect(); 3467 var index = $(el).data('index') 3468 if (index === 0) { 3469 // Go left 3470 return rect.x < 0 || rect.y <0; } else {� // Go right� return (� (rect.x + rect.width)> el.parentElement.parentElement.clientWidth || 3471 (rect.y + rect.height) > window.innerHeight 3472 ); 3473 } 3474 }; 3475 3476 function css_time_to_milliseconds(time_string) { 3477 var num = parseFloat(time_string, 10), 3478 unit = time_string.match(/m?s/), 3479 milliseconds; 3480 if (unit) { 3481 unit = unit[0]; 3482 } 3483 switch (unit) { 3484 case "s": // seconds 3485 milliseconds = num * 1000; 3486 break; 3487 case "ms": // milliseconds 3488 milliseconds = num; 3489 break; 3490 default: 3491 milliseconds = 0; 3492 break; 3493 } 3494 return milliseconds; 3495 } 3496 // Set constant values 3497 const el = $('.overlay-list ul') 3498 const els = el.find('li:not(.overlay-toggle)') 3499 const width = el.width() 3500 $('.overlay-toggle').on('click', function () { 3501 let $this = $(this) // Cache this 3502 // Show slide left toggle 3503 if (!$('.overlay-prev').hasClass('visible')) { 3504 $('.overlay-prev').addClass('visible') 3505 } 3506 // Set num values 3507 let count = 0; 3508 let index = $this.index() 3509 let w = 0; 3510 for (var i = 0; i <els.length; i++) {� let child = $(els[i])� child.data('index', index)� let check = child.is(':offscreen')� if (index === 0) w = 0;� if (check) {� // Set start/end point for sliding� let x = (index !== 0) ? $this.outerWidth() : 0;� // Remove width from calc if element is last?� if (els.length - 1 === i) {� let ii = i - 1;� w = w - $(els[ii]).outerWidth();� }� // Store value� let value = w - x� // Slide the elements� el.css('margin-left', '-' + value + 'px')� // Apply timeout to account for margin transition� let seconds = css_time_to_milliseconds(el.css('transition-duration'))� setTimeout(function () {� // Check if last element is in view� if (!el.find('li').eq(-2).is(':offscreen') || (els.length - 1 === i)) {� $this.removeClass('visible')� }� }, seconds);� break;� } else {� // Set width to slide� w += child.width()� }� }� if (index === 0) {� // Go left� if (count> 0) { 3511 count--; 3512 } else { 3513 $this.removeClass('visible') 3514 $('.overlay-next').addClass('visible') 3515 } 3516 } else { 3517 // Go right 3518 count++; 3519 } 3520 }); 3521 }()) 3522 3523var acc = document.getElementsByClassName("accordion"); 3524var i;
3525 3526for (i = 0; i < acc.length; i++) { 3527 acc[i].addEventListener("click", function() { 3528 this.classList.toggle("active"); 3529 var panel = this.nextElementSibling; 3530 if (panel.style.display === "block") { 3531 panel.style.display = "none"; 3532 } else { 3533 panel.style.display = "block"; 3534 } 3535 }); 3536} }) 3537 }); 3538 })();</script>
3538<a href="#" id="scroll" class="scrollup">Scroll</a></div><link href="//www.trimblearchitect.uk/includes/css/master.css?v=1787680890" rel="preload" as="style"/><link href="//www.trimblearchitect.uk/includes/css/master.css?v=1787680890" rel="stylesheet"/><div class="floating-widgets"><a href="https://wa.me/447785711635" class="widget whatsapp-widget" target="_blank" aria-label="Chat with us on WhatsApp"><img src="https://0nline.uk/website/whatsapp/green.png" alt="WhatsApp"/> </a></div>
3538<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"54fb2e8878b94bcb8e0b1af95256a123","r":1,"spa":2}' crossorigin="anonymous"></script>
3538 3539</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.