/*
Theme Name: Porto Child
Theme URI: https://www.portotheme.com/wordpress/porto
Template: porto
Author: P-THEMES
Author URI: https://www.portotheme.com/
Description: Child theme for Porto
Version: 1.0.0
License: GNU General Public License version 3.0
License URI: http://www.gnu.org/licenses/gpl-3.0.html
Text Domain: porto
*/

#main:not(.home #main) {
  padding-top: 63px !important;
  padding-bottom: 63px !important;
}

.wishlist-title-container {
  display: none !important;
}

.wc-action-btn.button,
.woocommerce-Button {
  padding: 16px 24px !important;
}

.posts-container .porto-tb-meta.tb-meta-comments {
  display: none;
}

.vc_custom_heading a,
.vc_custom_heading a:focus,
.vc_custom_heading a:hover,
.vc_custom_heading a:visited {
  color: #0088cc !important;
}

.vc_custom_heading a:hover {
  color: #006da3 !important;
}

.widget_nav_menu li > a {
  color: white !important;
}

.widget_nav_menu > div > ul li {
  padding: 0 0 5px 15px !important;
}

#footer .porto-u-sub-heading,
#footer .porto-u-sub-heading a {
  color: #a8a8a8 !important;
}

.sticky-product {
  display: none !important;
}

/* footer liaa section responsive adjustments */
@media (max-width: 1250px) {
  #footer-liaa .wpb_column {
    width: 100% !important;
    margin-left: 0 !important;
  }

  #footer-liaa .wpb_column * {
    text-align: center !important;
  }

  .header-phone-details .porto-sicon-header {
    display: none;
  }

  .header-phone-details {
    margin-right: -0.875rem;
  }
}

/* product page buttons */
.ask-question-button {
  display: inline-block !important;
}

.wc-action-btn.button.ask-question-button,
.wc-action-btn.button.view-cart-btn {
  padding: 0 24px !important;
}

/* Delivery options styling (matches woo-files-uploads style) */
.delivery-container {
  width: 100%;
  padding: 1.25rem 0 1rem;
  border-bottom: 1px solid var(--porto-gray-2);
  margin-bottom: 1.25rem;
}

.delivery-label {
  display: block;
  font-weight: 700;
  font-size: 1em;
  line-height: 42px;
  padding: 0;
  margin: 0;
  color: var(--porto-heading-color);
  text-transform: uppercase;
}

.delivery-label i {
  margin-right: 0.5rem;
}

.delivery-box {
  padding: 20px;
  background: #f4f6fa;
}

.delivery-options-info {
  display: flex;
  flex-wrap: wrap;
  gap: 2rem;
}

.delivery-option {
  flex: 1;
  min-width: 200px;
}

.delivery-option h6 {
  font-weight: 700;
  text-transform: none;
  margin: 0 0 10px 0;
}

.delivery-option h6 i {
  margin-right: 0.4rem;
}

.delivery-option ul {
  margin: 0;
  padding-left: 1.2em;
}

.delivery-option li {
  margin-bottom: 4px;
}

.delivery-info {
  margin-top: 8px;
}

.delivery-info small {
  font-size: 13px;
  color: #646970;
}

@media (max-width: 767px) {
  .delivery-options-info {
    flex-direction: column;
    gap: 1rem;
  }
}

/* Price excluding VAT styling */
.price-excl-vat {
  margin-top: -0.5rem;
}

.price-excl-vat * {
  font: 400 1rem / 1 var(--porto-add-to-cart-ff, var(--porto-body-ff)),
  sans-serif;
  color: #737a80;
}

.single_variation_wrap .price-excl-vat {
  margin-top: 0.5rem;
}

.sticky-detail .price-excl-vat {
  display: none !important;
}

.related-products .price-excl-vat {
  display: none !important;
}

/* Cart/checkout variation attributes — label:value pair per line */
.shop_table dl.variation dt,
.shop_table dl.variation dd,
.shop_table dl.variation dd p {
  display: inline !important;
  margin: 0 !important;
}

.shop_table dl.variation dt {
  font-weight: 600 !important;
}

.shop_table dl.variation dd::after {
  content: "" !important;
  display: block !important;
}

/* Hide quantity selectors on shop and variation add to cart */
.shop_table .product-quantity,
.woocommerce-variation-add-to-cart .quantity,
.product-checkout-wrap .quantity {
  display: none !important;
}

/* WooCommerce Cart Page - Featured Box Styling Adjustments */
.woocommerce-cart.woocommerce-page .featured-box-primary .box-content {
  border-top-color: unset !important;
}

.woocommerce-cart.woocommerce-page .featured-box .box-content {
  border-top: unset !important;
}

.woocommerce-cart.woocommerce-page .featured-box {
  border: 2px solid var(--porto-gray-5);
  box-shadow: none !important;
}

.woocommerce-cart.woocommerce-page .woocommerce > .featured-box {
  border: none !important;
  box-shadow: none !important;
}

.woocommerce-cart.woocommerce-page .box-content h3 {
  margin-bottom: 13px;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 32px;
  font-size: 1rem !important;
  font: var(--porto-h3-fst, normal) var(--porto-h3-fw, 700) var(--porto-h3-fs, 1.8em) /
      var(--porto-h3-lh, 32px) var(--porto-h3-ff, var(--porto-body-ff)),
  sans-serif;
  color: var(--porto-h3-color, var(--porto-heading-color));
}

.woocommerce-cart.woocommerce-page .featured-box {
  margin-top: 0;
  margin-bottom: 30px !important;
}

/* Stripe payments styling adjustments */
#wc-stripe-payment-method-instructions-card {
  display: none !important;
}

#wc-stripe-upe-form,
.payment_box.payment_method_bacs {
  margin: 10px 0 5px;
}

.payment_box.payment_method_bacs {
  border: 1px solid rgb(230, 230, 230);
  border-radius: 5px;
  padding: 1rem;
}

/* Porto 7.9.5 (`scss/theme/shop/_checkout.scss`) добавил `.payment_methods .payment_box { margin-top: .75rem }` —
   описание способа оплаты на кассе отъехало от строки «Maksājums ar karti» на 12 px, а рамка банковского
   перевода получила 12 px сверху вместо наших 10 (правило выше). Возвращаем вид 7.8.4: селекторы на класс
   специфичнее, потому что в used-CSS (`wp-rocket-fixes`) правила дочерней темы стоят раньше правил Porto. */
.wc_payment_methods.payment_methods .payment_box {
  margin-top: 0;
}

.wc_payment_methods.payment_methods .payment_box.payment_method_bacs {
  margin-top: 10px;
}

/* Variable product - required asterisks on attribute labels */
.variations th.label label::after {
  content: " *" !important;
  color: #dc3545 !important;
  font-weight: bold !important;
}

/* Price breakdown styling (Design + Product) */
.price-breakdown {
  margin-bottom: 0.5rem;
}

.price-breakdown-row {
  font-size: 0.875rem;
  color: #737a80;
  line-height: 1.5;
}

.price-breakdown-row .woocommerce-Price-amount {
  font-size: 0.875rem;
  font-weight: 400;
}

.price-breakdown-label {
  display: inline-block;
  min-width: 75px;
  font-weight: 600;
}

.price-breakdown-separator {
  border-bottom: 1px dashed #ccc;
  margin: 0.75rem 0 1rem;
  max-width: 150px;
}

/* Variation price loading spinner (on WooCommerce's built-in blockUI) */
form.variations_form {
  position: relative;
}

form.variations_form:has(> .blockUI.blockOverlay)::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 45px;
  height: 45px;
  margin: -23px 0 0 -23px;
  border: 3px solid rgba(0, 0, 0, 0.15);
  border-top-color: var(--porto-heading-color);
  border-radius: 50%;
  animation: variation-spin 0.8s linear infinite;
  z-index: 1100;
}

@keyframes variation-spin {
  to {
    transform: rotate(360deg);
  }
}

/* Design details in order view */
.order_details .wc-item-meta strong {
  font-weight: 700 !important;
}

/* product tabs */
#product-tab .tab-content > h2:first-child {
  display: block !important;
}

/* Product description styling adjustments */
.woocommerce-product-details__short-description p,
.single-product .page-wrapper .product-summary-wrap .description p {
  font-size: 14px !important;
  font-weight: 400;
  letter-spacing: 0.005em !important;
  line-height: 1.9 !important;
}

/* Images carousel adjustments */
.vc_images_carousel .vc_carousel-indicators {
  bottom: -75px !important;
  padding-bottom: 40px !important;
}

.vc_images_carousel .vc_carousel-indicators li {
  background-color: #dddddd !important;
  border: 1px solid #dddddd !important;
}

.vc_images_carousel .vc_carousel-indicators .vc_active,
.vc_images_carousel .vc_carousel-indicators li:hover {
  background-color: var(--porto-primary-dark-5) !important;
  border: 1px solid var(--porto-primary-dark-5) !important;
}

.vc_images_carousel .vc_carousel-control {
  font-size: 63px !important;
  color: var(--porto-primary-dark-5) !important;
}

@media screen and (min-width: 768px) {
  .vc_images_carousel .vc_carousel-control .icon-next,
  .vc_images_carousel .vc_carousel-control .icon-prev {
    font-size: 63px !important;
    color: var(--porto-primary-dark-5) !important;
  }
}

/* Brand-blue search border on BOTH header search fields — 228b (mobile) and
   497b (desktop) — in every state, so it stays consistent. Notes:
   - The sticky header uses `.sticky-header` (not `.fixed-header`), so the sticky
     selectors don't rely on `.fixed-header`.
   - Porto's dynamic_style.css forces
     `#header.sticky-header .advanced-search-layout .searchform{border-color:#ccc
     !important}` (specificity 1,3,0), so each sticky selector adds
     `.searchform-popup` to reach 1,4,0 and win.
   - #0088cc fallback keeps it robust if the CSS variable is unavailable.
   - ⚠️ FRAGILE: the `wpb_custom_*` hashes are WPBakery element IDs derived from
     each search element's design settings. If those two header search elements
     are edited in the builder, the hashes change, these selectors stop matching,
     and the border silently reverts to Porto's grey. Re-check the header border
     (normal + sticky) after any builder edit, and update the hashes here. */
.fixed-header #header .wpb_custom_228b24f3e9b3aae1e082612febaffb35 .searchform,
#header .wpb_custom_228b24f3e9b3aae1e082612febaffb35 .searchform,
.fixed-header #header.sticky-header .wpb_custom_228b24f3e9b3aae1e082612febaffb35 .searchform,
#header.sticky-header .searchform-popup.wpb_custom_228b24f3e9b3aae1e082612febaffb35 .searchform,
.fixed-header #header .wpb_custom_497b20b7536b0c73fc579841b968dbde .searchform,
#header .wpb_custom_497b20b7536b0c73fc579841b968dbde .searchform,
.fixed-header #header.sticky-header .wpb_custom_497b20b7536b0c73fc579841b968dbde .searchform,
#header.sticky-header .searchform-popup.wpb_custom_497b20b7536b0c73fc579841b968dbde .searchform {
  border: 1px solid var(--porto-primary-color, #0088cc) !important;
}

/* Prevent iOS Safari auto-zoom on search input focus */
@media screen and (max-width: 767px) {
  .searchform input[type="text"] {
    font-size: 16px !important;
  }
}

body.home .page-content .btn-dark,
.single_add_to_cart_button {
  background-color: #0088cc !important;
  border-color: #0088cc !important;
  color: #ffffff !important;
}

body.home .page-content .btn-dark:hover,
body.home .page-content .btn-dark:focus,
body.home .page-content .btn-dark:active,
.single_add_to_cart_button:hover,
.single_add_to_cart_button:focus,
.single_add_to_cart_button:active {
  background-color: #0077b3 !important;
  border-color: #0077b3 !important;
}

.ask-question-button,
.wfu-select-btn {
  background-color: #212529 !important;
  border-color: #212529 #212529 rgb(10.2567567568, 11.5, 12.7432432432) !important;
  color: #FFF;
}

.ask-question-button:hover,
.ask-question-button:focus,
.ask-question-button:active,
.wfu-select-btn:hover,
.wfu-select-btn:focus,
.wfu-select-btn:active {
  border-color: rgb(55.7432432432, 62.5, 69.2567567568) rgb(55.7432432432, 62.5, 69.2567567568) #212529 !important;
  background-color: rgb(48.9202702703, 54.85, 60.7797297297) !important;
}

/* Category tiles on the homepage are circles, and the caption is overlaid on the
   image rather than placed under it. Near the bottom of a circle the available
   width is far smaller than the tile, so on phones long category names run past
   the circle's edge onto the page background and lose their backdrop. Padding
   makes them wrap earlier and the smaller type keeps each line short. Measured at
   414px across all three languages: four Latvian captions out of eight used to
   stick out, the worst by 96px. With this rule every caption clears the circle —
   the tightest line has 28px to spare in Russian, 37px in English, 38px in Latvian.
   Desktop is unaffected — there the tile is narrower but the caption already wraps
   inside the circle.

   :not(.product) matters. Product cards carry the same .tb-hover-content overlay in
   Porto grids on the shop and archive pages, and without the guard they picked up the
   20% padding too — measured on /produkcija/ at 414px. Category tiles are the only
   grid items without the .product class. */
@media (max-width: 767px) {
  .porto-posts-grid .porto-tb-item:not(.product) .tb-hover-content {
    padding-left: 20%;
    padding-right: 20%;
  }

  .porto-posts-grid .porto-tb-item:not(.product) .tb-hover-content h3.porto-heading,
  .porto-posts-grid .porto-tb-item:not(.product) .tb-hover-content h3.porto-heading a {
    font-size: 15px;
    line-height: 20px;
  }
}

/* List view on category pages: the text column is a flex item, so it keeps the
   default min-width:auto and refuses to shrink below its min-content width. The
   category line inside it uses .text-truncate (white-space:nowrap), so min-content
   equals the full un-wrapped category list — about 1000px. That pushes the whole
   column past the viewport and the product description runs off screen.
   min-width:0 lets the column shrink; letting the category line wrap keeps the
   full list readable instead of cutting it off with an ellipsis. */
.product-list-content {
  min-width: 0;
}

.product-list-content .tb-meta-product_cat {
  white-space: normal;
}

/* Floating contact buttons (fcb plugin) ship with z-index 99999 and paint over
   the off-canvas mini-cart — its dark overlay sits at 1004 and the panel with the
   order total at 1005. 1003 puts the buttons directly under the overlay: low enough
   to stay behind the whole cart layer, high enough that nothing else on the page
   slips in above them. Measured, not assumed: with the cart slid in,
   document.elementFromPoint over a contact button returns the cart's own content. */
.fcb-container {
  z-index: 1003 !important;
}

/* WPBakery inlines a <style> block inside the header (from the rows' css="" custom
   CSS); wpautop then wraps the whitespace around it in empty <p></p> that carry the
   theme's default paragraph margin and add dead space above/below the header. */
#header .container-fluid > p:empty {
  display: none !important;
}

/* Sticky header: pin the WHOLE header "as is" (all rows) and restore scroll-direction
   behaviour (hidden on scroll down, revealed on scroll up). custom-scripts.js toggles
   .porto-child-hidden by direction and sets --pch = header height; a spacer sibling
   reserves the height so content never jumps. Movement is via `top`, never
   `transform`, so the fixed mini-cart panel resolves against the viewport and opens. */
#header.sticky-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  /* Above the floating contact buttons (1003). Being fixed, #header forms a stacking
     context, so its child off-canvas mini-cart (overlay 1004 / panel 1005) is capped at
     the header's z-index in the root; keeping it below 1003 would let the contact
     buttons paint over the open cart. 1006 keeps the whole header — cart included —
     above them. */
  z-index: 1006;
  background: #fff;
  height: auto !important;
  transition: top 0.3s ease;
  /* subtle shadow to separate the pinned header from the page (as the theme did) */
  box-shadow: 0 0 3px 0 var(--porto-normal-bc);
}

#header.sticky-header.porto-child-hidden {
  /* !important so it always beats the admin-bar top:32px rule below (which has higher
     specificity); otherwise on desktop the header would never slide up out of view. */
  top: calc(-1 * var(--pch, 220px)) !important;
}

/* Sit below the WordPress admin bar for logged-in users (visitors have none). The
   admin bar is fixed only on desktop (>=783px); on mobile it scrolls with the page,
   so the pinned header stays at top:0 there. */
@media (min-width: 783px) {
  body.admin-bar #header.sticky-header {
    top: 32px;
  }
}

/* Undo Porto fixing only the menu row — it now flows inside the fixed #header. */
#header.sticky-header .header-main.sticky {
  position: static !important;
  top: auto !important;
}

/* Variant A — keep everything at its ORIGINAL size when pinned (consistent look).
   Porto shrinks the sticky logo (max-width: --porto-sticky-logo-mw = 80px); force the
   normal logo width so the pinned header matches the un-scrolled one. */
#header.sticky-header .logo {
  max-width: var(--porto-logo-mw) !important;
}

/* Hide the top language/social strip fully while pinned (no stray line). */
#header.sticky-header .container-fluid > .vc_row:has(.view-switcher) {
  display: none !important;
}

/* When pinned, trim the logo column's big vertical margin (1.6875rem, set per-template
   via WPBakery css="") so the sticky header is a bit more compact. Selector keys off
   the .logo child, so it works for all three language templates without hardcoding the
   per-template vc_custom class. */
#header.sticky-header .vc_column_container:has(.logo) {
  margin-top: 0.75rem !important;
  margin-bottom: 0.75rem !important;
}

/* Mobile pinned: even more compact, and keep the search field full-width. */
@media (max-width: 991px) {
  #header.sticky-header .vc_column_container:has(.logo) {
    margin-top: 0.35rem !important;
    margin-bottom: 0.35rem !important;
  }

  #header.sticky-header .searchform-popup.d-lg-none,
  #header.sticky-header .searchform-popup.d-lg-none .searchform {
    width: 100% !important;
    max-width: none !important;
  }
}

.porto-child-header-spacer {
  height: 0;
}

/* Cancel the shop sort/filter bar stickiness. Porto's themeSticky JS adds .sticky to
   `.shop-loop-before` and sets inline `position: fixed`, `top`, `opacity` — which pinned
   it under our fixed header. Force it back into the flow. Inline styles are beaten by
   !important. The `.shop-loop-before` scope leaves the single-product sticky summary
   (.product-summary-wrap) untouched. The JS also grows `.filter-placeholder` to reserve
   the bar's height — collapse it so no empty gap is left behind. */
.woocommerce .shop-loop-before.sticky {
  position: static !important;
  top: auto !important;
  opacity: 1 !important;
}

.filter-placeholder {
  height: 0 !important;
}

#header > div > div > div.vc_row.wpb_row.top-row.header-main-auto.mobile-custom-bg.no-padding.header-main.porto-inner-container.wpb_custom_034b39d9bc6c6b310d69e39f0ccf274f.sticky > div {
  padding-left: 0 !important;
  padding-right: 0 !important;
}

.onhot {
  display: none !important;
}

/* Карусель картинок WPBakery: до инициализации все слайды стоят столбиком, и когда JavaScript
   сворачивает их в один, вёрстка прыгает. Замерено на `/dizaina-izstrade/`: блок 372x1736 без JS
   против 372x248 после, CLS страницы 0.214 при пороге 0.1.

   Класс `vc_build` ставит сам WPBakery, когда карусель готова. До этого выводим лишние слайды из
   потока — высота блока становится равной одному слайду, то есть сразу правильной.

   Почему из потока, а не `display: none`, хотя это короче. У карусели в разметке всегда
   `data-auto-height="yes"`, а `vc_carousel.js` вызывает `resizeAction()` (строка 369) РАНЬШЕ, чем
   навешивает `vc_build` (строка 403). Внутри `resizeAction` он перебирает слайды, берёт
   максимальную высоту и проставляет её всем. У элемента с `display: none` jQuery отдаёт нулевую
   высоту, поэтому максимум собрался бы по одному видимому слайду, и на странице с картинками
   разной высоты остальные оказались бы срезаны.

   `position: absolute` плюс `visibility: hidden` этого не делает: элемент остаётся измеримым,
   `resizeAction` видит настоящие высоты, а место в потоке он не занимает.

   Выкладка в строку (`display: flex; flex-wrap: nowrap`) — приём Porto для своих каруселей — здесь
   тоже проверена и не годится: замер дал CLS 0.196 против 0.004, потому что колонка вокруг
   карусели всё равно схлопывается позже.

   Сдвиг есть и без плагина доставки CSS — он его не создаёт, а делает заметным, ускоряя первую
   отрисовку.

   Два ограничения, названные прямо, чтобы не искать их потом.

   Первое: правило рассчитано на горизонтальную карусель с одним слайдом в кадре. Режим и число
   слайдов задаются в редакторе и приезжают в разметку как `data-mode` и `data-per-view`; в
   вертикальном режиме собранная высота равна высоте слайда, умноженной на число в кадре, и
   зарезервированного места не хватит. На этом сайте карусель одна и она горизонтальная.

   Второе: правило попадает только в тот бандл, где карусель есть на странице-образце. Образец для
   шаблона «страница» — самая свежая опубликованная страница. Опубликуют новую страницу без
   карусели, пересоберут CSS — и правило тихо исчезнет из `page.css`, а скачок вернётся. Проверять
   после каждой пересборки:
   `grep -c 'vc_images_carousel:not(.vc_build)' wp-content/uploads/wp-rocket-fixes/page.css`. */

/* `position: relative` у ленты задаёт и сам js_composer
   (`assets/lib/vc/vc_carousel/css/vc_carousel.min.css`). Дублируем сознательно, но не по той
   причине, что напрашивается: если карусели нет на странице-образце, то не попадёт в бандл и наше
   правило — селектор у него тот же, судьба общая. Настоящая причина другая: правило ниже задаёт
   слайдам `position: absolute`, и без надёжной точки отсчёта они улетят к ближайшему позиционному
   предку выше по дереву. Опираться тут на чужое правило, которое может уехать со сменой версии
   js_composer или его минификацией, — лишний риск за ноль экономии. */
.vc_images_carousel:not(.vc_build) .vc_carousel-slideline-inner {
  position: relative;
}

.vc_images_carousel:not(.vc_build) .vc_carousel-slideline-inner > *:not(:first-child) {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  visibility: hidden;
}

/* Этап 3, Task 10. Первый слайд виден и до `vc_build`: js_composer прячет все слайды
   (`.vc_item { visibility: hidden }`) до конца своей сборки, и на месте карусели — пустой блок, пока не
   отработает скрипт; после сборки первый слайд стоит на том же месте и того же размера (правила выше),
   так что первый экран до и после сборки один и тот же. Селектор длиннее правила js_composer — в
   used-CSS правила дочерней темы стоят раньше. */
.vc_images_carousel:not(.vc_build) .vc_carousel-inner .vc_carousel-slideline .vc_carousel-slideline-inner > .vc_item:first-child {
  visibility: visible;
}

/* Этап 3, Task 10. Сдвиг вёрстки от автопрокрутки. `vc_carousel.js` листает ленту свойством `left`
   с переходом (`transition: left .5s`), а движение по `left` браузер считает сдвигом вёрстки: каждые
   5 секунд +0,123 к CLS на 412 px (лента 372×248 на весь кадр: доля площади 0,272 × доля пути 0,452).
   Движение через `translate` сдвигом не считается. `js/vc-carousel-translate.js` повторяет каждое
   значение `left` ленты в `translate` и ставит карусели класс `porto-child-translate`; с этим классом
   лента `position: static` — `left` перестаёт двигать её в вёрстке, двигает только `translate`
   (проценты у обоих — от ширины ленты, кадр тот же). Без скрипта класса нет и всё работает как в
   js_composer. Длинные селекторы — по той же причине, что выше. */
.vc_images_carousel.vc_build.porto-child-translate .vc_carousel-inner .vc_carousel-slideline .vc_carousel-slideline-inner {
  position: static;
}

.vc_images_carousel.vc_build.porto-child-translate .vc_carousel-inner .vc_carousel-slideline .vc_carousel-slideline-inner.vc_transition {
  transition-property: left, translate;
}

/* Porto 7.9.5 (`scss/theme/gui/_sections-wpb.scss`, в `css/theme_wpb.css`) добавил для рядов WPBakery
   «одинаковой высоты» с колонками по центру растяжку колонки (`align-self: stretch`) и flex-колонку
   внутри (`display: flex; flex-direction: column; justify-content: center`). Внутри flex-колонки
   отступы потомков больше не схлопываются: у героя главной (LV/RU/EN, от 768 px) нижний отступ
   последнего абзаца `porto-u-heading` (20 px) складывается с отступом самого заголовка (17 px), и
   кнопка «Apskatīt produktus» уезжает на 17 px ниже, а текстовый блок — на 9 px выше, чем в 7.8.4.
   Возвращаем вёрстку 7.8.4 (колонку центрирует `align-items-center` ряда, внутри — обычный блок).
   Селектор Porto плюс `.vc_row` — на класс специфичнее: в собранном used-CSS (`wp-rocket-fixes`)
   правила дочерней темы стоят раньше правил Porto, порядок подключения не спасает. Сверка — снимки
   `porto` против `base` (Task 1 этапа 3). */
@media (min-width: 768px) {
  .vc_row.vc_row-o-equal-height > .container > .align-items-center > .vc_column_container {
    align-self: auto;
  }

  .vc_row.vc_row-o-equal-height > .container > .align-items-center > .vc_column_container > .vc_column-inner {
    display: block;
  }
}
