мы с тобой делали такой вот код

<style>
  /* Сброс и базовые стили */
  * {
    box-sizing: border-box;
  }
  body {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    background: #f9f9f9;
    margin: 0;
    padding: 0 12px 30px;
    color: #222;
    font-size: 14px;
    line-height: 1.4;
  }
  a {
    color: #0078D7;
    text-decoration: none;
  }
  a:hover {
    text-decoration: underline;
  }
  h1, h2 {
    margin: 0;
  }

  /* Заголовок каталога */
  header.catalog-header {
    max-width: 1200px;
    margin: 30px auto 10px;
    text-align: center;
  }
  header.catalog-header h1 {
    font-size: 1.8rem;
    margin-bottom: 6px;
    font-weight: 700;
    color: #004a99;
  }
  header.catalog-header p {
    font-size: 1rem;
    color: #444;
  }

  /* Навигация */
  nav.catalog-nav {
    max-width: 1200px;
    margin: 15px auto 20px;
    display: flex;
    justify-content: center;
    gap: 8px;
    flex-wrap: wrap;
  }
  nav.catalog-nav button {
    padding: 6px 14px;
    border: 1.5px solid #0078D7;
    background: white;
    color: #0078D7;
    font-weight: 600;
    border-radius: 20px;
    cursor: pointer;
    font-size: 13px;
    transition: background-color 0.3s, color 0.3s;
    user-select: none;
    line-height: 1.2;
  }
  nav.catalog-nav button.active,
  nav.catalog-nav button:hover {
    background-color: #0078D7;
    color: white;
  }

  /* Сетка карточек услуг с минимальными межколонными отступами */
  .services-grid {
    max-width: 1200px;
    margin: 0 auto;
    display: grid;
    gap: 8px 8px; /* минимальный gap: по вертикали и по горизонтали */
    grid-template-columns: repeat(5, 1fr);
  }

  @media (max-width: 600px) {
    .services-grid {
      grid-template-columns: repeat(2, 1fr);
    }
  }

  /* Карточка услуги */
  .service-card {
    background: white;
    border-radius: 8px;
    box-shadow: 0 1px 5px rgb(0 0 0 / 0.1);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    transition: box-shadow 0.3s ease;
    font-size: 13px;
  }
  .service-card:hover {
    box-shadow: 0 5px 20px rgb(0 0 0 / 0.15);
  }

  /* Фото без скругления */
  .service-card img {
    width: 100%;
    height: 120px;
    object-fit: cover;
    border-radius: 0;
  }

  .service-content {
    padding: 12px 14px 16px;
    flex: 1;
    display: flex;
    flex-direction: column;
  }

  /* Заголовок услуги — одна строка с многоточием */
  .service-title {
    font-size: 15px;
    font-weight: 700;
    color: #004a99;
    margin-bottom: 6px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Цена */
  .service-price {
    font-size: 14px;
    font-weight: 600;
    color: #00a651;
    margin-bottom: 8px;
    flex-shrink: 0;
  }

  /* Описание — максимум 4 строки с обрезкой */
  .service-description {
    color: #555;
    font-size: 13px;
    line-height: 1.3;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    margin-bottom: 10px;
  }

  /* Текстовая ссылка "Заказать" */
  .service-order {
    font-weight: 600;
    color: #0078D7;
    align-self: flex-start;
    cursor: pointer;
    user-select: none;
    padding: 0;
  }
  .service-order:hover {
    text-decoration: underline;
  }
</style>

<header class="catalog-header">
  <h1>Каталог услуг компьютерного мастера</h1>
  <p>Выберите нужную услугу и оформите заказ быстро и удобно</p>
</header>

<nav class="catalog-nav" aria-label="Навигация по категориям услуг">
  <button type="button" class="active" data-filter="all">Все</button>
  <button type="button" data-filter="repair">Ремонт</button>
  <button type="button" data-filter="setup">Настройка</button>
  <button type="button" data-filter="diagnostics">Диагностика</button>
</nav>

<section class="services-grid" aria-label="Список услуг">

  <article class="service-card" data-category="repair">
    <img src="https://images.unsplash.com/photo-1517433456452-f9633a875f6f?auto=format&fit=crop&w=400&q=80" alt="Ремонт ноутбука">
    <div class="service-content">
      <h2 class="service-title" title="Ремонт ноутбука">Ремонт ноутбука</h2>
      <div class="service-price">от 1500 ₽</div>
      <p class="service-description">Замена дисплея, клавиатуры, аккумулятора и другие виды ремонта ноутбуков.</p>
      <a href="#order" class="service-order">Заказать</a>
    </div>
  </article>

  <article class="service-card" data-category="setup">
    <img src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=400&q=80" alt="Настройка операционной системы">
    <div class="service-content">
      <h2 class="service-title" title="Настройка операционной системы">Настройка ОС</h2>
      <div class="service-price">от 800 ₽</div>
      <p class="service-description">Установка и конфигурация Windows, Linux, настройка драйверов и системы в целом.</p>
      <a href="#order" class="service-order">Заказать</a>
    </div>
  </article>

  <article class="service-card" data-category="diagnostics">
    <img src="https://images.unsplash.com/photo-1581092334311-fc27e620e382?auto=format&fit=crop&w=400&q=80" alt="Диагностика компьютера">
    <div class="service-content">
      <h2 class="service-title" title="Диагностика">Диагностика</h2>
      <div class="service-price">от 500 ₽</div>
      <p class="service-description">Проверка состояния оборудования для выявления неисправностей.</p>
      <a href="#order" class="service-order">Заказать</a>
    </div>
  </article>

  <!-- Добавьте другие услуги аналогично -->

</section>

<script>
  // Фильтрация услуг по категориям при клике на кнопки навигации
  document.querySelectorAll('nav.catalog-nav button').forEach(button => {
    button.addEventListener('click', () => {
      // Убираем активный класс у всех кнопок
      document.querySelectorAll('nav.catalog-nav button').forEach(btn => btn.classList.remove('active'));

      // Добавляем активный класс к выбранной кнопке
      button.classList.add('active');

      const filter = button.getAttribute('data-filter');
      const cards = document.querySelectorAll('.service-card');

      cards.forEach(card => {
        if (filter === 'all' || card.getAttribute('data-category') === filter) {
          card.style.display = '';
        } else {
          card.style.display = 'none';
        }
      });
    });
  });
</script>