Components
51
Accordion Items Article Selection Author Info Basic Carousel Basic Hero Basic Map Pull Out blog Contact Content Accordion Content Carousel Content Image Cta Cta Bar Cta Blocks Cta Collage Event Content Events Grid Example Find Firm Firm Search Firms By Town Gated Content Download Carousel Guides Hero History Hero Homepage Image Content Cta Image List Content Industries Job Content Job Listings Local Firm Carousel Our Firms Carousel pages Partners Partners Slider People Listing Post Carousel Post Feed Pullquote Wrap section Service List Split Content Stats Tax Guides Team Grid Title Logos Two Column Video Video Carousel Video Old

Service List

View example

Insurance

Moore France stands out for its insurance expertise, offering a wide range of services tailored to the specific needs of its customers. For individuals, the experienced team works closely together to identify home, auto, health and liability insurance needs.

Find out more

Audit

Moore France places auditing at the heart of its support for companies, providing a clear, independent view of their financial health. This approach enables us to validate the compliance of financial statements with accounting standards, and to identify areas for improvement in terms of management and internal control.

With a rigorous approach and an experienced team, Moore France provides pertinent recommendations for optimal risk management and compliance with accounting standards.

Find out more

Statutory auditors

As statutory auditors, Moore France's experts certify the regularity and fairness of companies' annual financial statements, ensuring the reliability of financial information for shareholders, investors, creditors and public authorities.

Moore France offers customized support to companies, thanks to its industry expertise and in-depth knowledge of accounting standards, ensuring the confidence and security essential for businesses of all sizes and sectors.

Find out more

Management consulting

Moore France offers management consulting services designed to help companies optimize their performance and make strategic decisions. As a trusted partner, Moore France provides global expertise to help managers effectively manage their organization in a constantly changing environment.

Find out more

Outsourcing

Outsourcing is an effective strategy for refocusing your business and optimizing your company's flexibility on certain tasks. It offers the advantage of benefiting from an external perspective to overcome tricky situations, and saves you money by minimizing the risks associated with hiring.

Find out more

Expertise-Comptable

Chartered accountancy is at the heart of Moore France's services, offering companies comprehensive support in managing their accounts and steering their business, tailored to all sizes of organization, from SMEs to large groups, associations and the self-employed.

Find out more

Taxation

Moore France offers a comprehensive range of tax services, tailored to the varied needs of our individual and corporate customers. Our expertise covers different areas of taxation, such as corporate, personal and local taxes.

Find out more

Foreign Desk

Moore France offers a unique and specialized service through its Foreign Desk, designed to support companies and individuals in their international projects.

Find out more

Asset management

We offer dedicated solutions for families, managers, shareholders and investors, helping them to manage, organize and pass on their wealth. Our services cover wealth audits, asset valuation, operational advice, wealth engineering, transmission, liquidation and sharing.

Find out more

Legal

Moore France offers a comprehensive range of legal services tailored to the needs of companies and individuals. Specializing in corporate, tax, commercial and employment law, the team of legal experts supports its customers in the creation, management and transformation of their businesses.

Find out more

M&A and Transmission

Our specialized M&A team can help you with all your sales, target searches and fund-raising operations in France and abroad.

We offer a complete service for the sale of businesses, including accurate valuation, active search for potential buyers and personalized follow-up through to closing.

Find out more

Social protection

Moore France offers social protection consulting services to optimize and manage company social security schemes, to ensure coverage for employees and solutions for managers, to optimize social charges, anticipate social risks and meet legal obligations.

Find out more

 

HR & Payroll

Moore France offers comprehensive payroll management and human resources consulting services, tailored to the specific needs of each company. Our expertise in payroll management ensures rigorous support in line with current regulations, enabling customers to concentrate on their core business.

Find out more

CSR

Moore France's CSR expertise is deployed through its sustainability auditing, regulatory compliance consulting and customized training services. A comprehensive, multidisciplinary approach to support companies in their transition to sustainable, responsible management.

Find out more

Risk Management

Moore France offers Risk Management consulting services to strengthen your internal controls and guarantee the control of financial, reputational, legal and operational risks.

With a personalized methodological approach, Moore France supports you in identifying, assessing and dealing with risks, while providing expertise in sector-specific compliance.

Find out more

There are no ACF fields assigned to this component.

				
 @import "../../resources/scss/util/variables";
@import "../../resources/scss/util/mixins";

.block-service-list {
  p {
    line-height: 1.5;
  }

  &__sidebar {
		@include section-sidebar;
	}

  &__tabs {
    margin: 0;
    position: sticky;
    top: 0;
    background-color: $white;
    z-index: 1;

    ul {
      @include list-unstyled;
      display: flex;
      flex-wrap: nowrap;
      align-items: center;
      overflow-x: auto;
      -ms-overflow-style: none;
      scrollbar-width: none;
      margin: 0;
      scroll-behavior: smooth;

      @include bp($lg) {
        padding: 0 80px 0 83px;
      }

      &::-webkit-scrollbar {
        display: none;
      }

      &:after {
        content: "";
        width: 100%;
        bottom: 0;
        right: 0;
        position: absolute;
        height: 1px;
        background-color: $border-grey;

        @include bp($lg) {
          width: calc(100% - 83px);
        }
      }
    }

    li {
      @include fluid-type(16, 18, 375, $max-container-size);
      flex-shrink: 0;
      padding: 20px 24px;
      white-space: nowrap;
      cursor: pointer;
      border-right: 1px solid $border-grey;

      &:not(.current):hover {
        background-color: #f2f2f2;
      }

      &.current {
        font-weight: 600;
        background-color: $primary-blue;
        color: $white;
      }
    }
  }

  &__content {
    & > section {
      display: none;
      padding-left: 16px;
      padding-right: 16px;
      grid-template-columns: repeat(12, 1fr);
      column-gap: $grid-gutter-width;

      @include bp($lg) {
        padding-left: 80px;
        padding-right: 80px;
      }

      &.current {
        display: grid;
      }

      & > div {
        &:nth-of-type(1) {
          grid-row: 1;
          grid-column: 1 / 13;
          padding: 25px 0 45px;

          @include bp($lg) {
            grid-column: 1 / 5;
            padding: 75px 0;
          }

          @include bp($xl) {
            grid-column: 2 / 6;
          }

          & > div {
            position: sticky;
            top: 105px;
          }
        }

        &:nth-of-type(2) {
          grid-row: 2;
          grid-column: 1 / 13;

          @include bp($lg) {
            grid-row: 1;
            grid-column: 6 / 13;
          }

          @include bp($xl) {
            grid-column: 7 / 13;
          }
        }
      }

      .h4 {
        font-weight: 400;

        & + p {
          margin-bottom: 28px;
        }
      }

      .btn {
        @include fluid-type(16, 18, 375, $max-container-size);
        border-color: $primary;

        &:before {
          border-top: 52px solid $primary;
        }
      }
    }
  }

  &__links {
    @include list-unstyled;
    margin: 0;
    display: flex;
    flex-direction: column;
    row-gap: 16px;

    @include bp($lg) {
      padding-top: 60px;
    }

    a {
      display: flex;
      align-items: flex-start;
      flex-direction: column;
      position: relative;
      border: 1px solid $border-grey;
      text-decoration: none;
      transition: background-color .3s;
      row-gap: 20px;
			min-height: 150px;

      @include bp($sm) {
        flex-direction: row;
				align-items: center;
      }

      &:hover {
        background-color: #f2f2f2;
      }

      & > span {
        height: 100%;
				padding: 0 24px 32px;

				@include bp($sm) {
					padding: 24px 24px 32px;
				}

				@include bp($lg) {
					padding: clamp(24px, 2vw, 35px);
				}
      }

      h5 {
        margin: 0 0 12px;
      }

      p {
        margin: 0;
      }
    }

		&-link--image {
			@include bp($sm) {
				padding-left: 150px;
			}
		}

		&-link-icon {
			padding: 24px 24px 0;

			@include bp($sm) {
				padding: 24px 24px 32px;
			}

			@include bp($lg) {
        padding: clamp(24px, 2vw, 35px);
      }

			svg {
				width: 80px;
				height: 80px;
				flex-shrink: 0;
			}
		}

		&-link-image {
			width: 100%;
			position: relative;
			height: 150px;

			@include bp($sm) {
				position: absolute;
				width: 150px;
				height: 100%;
			}
		}

  }
}
class ServiceList {
  constructor() {
    this.init();
  }

  init() {
    // Find all service-list blocks on the page
    this.blocks = document.querySelectorAll('.block-service-list');

    if (!this.blocks.length) return;

    // Set up tab click handlers
    this.setupTabClickHandlers();
  }

  setupTabClickHandlers() {
    this.blocks.forEach(block => {
      const tabs = block.querySelectorAll('.tab-link');
      const tabContents = block.querySelectorAll('.tab-content');

      tabs.forEach(tab => {
        tab.addEventListener('click', () => {
          // Remove current class from all tabs and contents
          tabs.forEach(t => t.classList.remove('current'));
          tabContents.forEach(c => c.classList.remove('current'));

          // Add current class to clicked tab
          tab.classList.add('current');

          // Scroll the selected tab into view (at the start of the container)
          const tabsContainer = block.querySelector('.block-service-list__tabs ul');
          if (tabsContainer) {
            tabsContainer.scrollLeft = tab.offsetLeft;
          }

          // Show the corresponding tab content
          const tabId = tab.getAttribute('data-tab');
          const tabContent = block.querySelector(`#${tabId}`);
          if (tabContent) {
            tabContent.classList.add('current');
          }
        });
      });
    });
  }
}

// Initialize the service list functionality when the DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
  new ServiceList();
});
{
  "$schema": "https://schemas.wp.org/trunk/block.json",
  "apiVersion": 2,
  "name": "strategiq/service-list",
  "title": "Service List",
  "description": "Example block to be used as a template",
  "category": "strategiq",
  "icon": "strategiq",
  "acf": {
      "mode": "preview",
      "renderTemplate": "block-service-list.php"
  },
  "supports": {
      "anchor": true,
      "align": false,
      "spacing": {
          "margin": [
              "top",
              "bottom"
          ],
          "padding": [
              "top",
              "bottom"
          ]
      }
  },
  "example": {
      "attributes": {
          "mode": "preview",
          "data": {
              "heading_type": "h2",
              "heading_text": "Example - Service List",
              "content": "This is some example content to represent what the content will look like"
          }
      }
  },
  "style": "file:../../assets/css/service-list/block-service-list.css",
  "viewScript": ["service-list"]
}
There are no readme files with this component.