/*
Theme Name: Heart Child Theme
Theme URI: https://heart.axiomthemes.com/
Description: Heart is a Premium WordPress theme that has built-in support for popular Page Builders, slider with swipe gestures, and is SEO- and Retina-ready. The unique system of inheritance and override options allows setting up individual parameters for different sections of your site and supported plugins.
Author: AxiomThemes
Author URI: https://axiomthemes.com/
Version: 1.13.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, e-commerce, portfolio, grid-layout, one-column, two-columns, three-columns, four-columns, left-sidebar, right-sidebar, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-image-header, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, sticky-post, theme-options, threaded-comments, translation-ready, block-styles, wide-blocks
Text Domain: heart
Template: heart
*/


/* =Child-Theme customization starts here
------------------------------------------------------------ */


/* ==========================================================================
   MEGA MENU - white boxed panel, 3 columns
   Applies only to a top-level <li class="trx_addons_stretch_window_boxed">
   that does NOT also carry a columns-N class (see note at the end).

   Column map (percentages resolve against the boxed panel width, which
   menu.js sets inline, so the columns track the content width):
     0 ..... 22%   column 1 : section label (li.megamenu-label)
     25% ... 52%   column 2 : level-2 items, in normal flow
     56% .. 100%   column 3 : level-3 items of the hovered item
   ========================================================================== */

/* --- A. Colours (all widths) ---------------------------------------------
   The theme styles submenus with `color: var(--theme-color-extra_*)`, several
   with !important, and defines those properties on .scheme_dark (the header
   widget) - which is why this dropdown is black. Redefining the properties
   here re-points every one of those rules without overriding them.        */
.sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul {
  --mm-green: #1F764D;
  --mm-lime:  #8CC63F;
  --mm-ink:   #000000;
  --mm-line:  #DDDDDD;

  --theme-color-extra_bg_color: #FFFFFF;
  --theme-color-extra_text:     var(--mm-ink);    /* level-2 default */
  --theme-color-extra_hover:    var(--mm-green);  /* hover / sfHover / current */
  --theme-color-extra_bd_color: var(--mm-line);
  --theme-color-extra_light:    var(--mm-green);
  --theme-color-extra_dark:     var(--mm-green);
  --theme-color-extra_link:     var(--mm-lime);

  box-shadow: none;
  /* width / left / right / transform are set inline by menu.js - never set them here */
}

/* Full-window bleed. menu.js copies the panel's computed background onto this
   span as an inline style, so !important is required to win. */
.sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed > ul > .sc_layouts_menu_stretch_bg {
  background-color: #FFFFFF !important;
  border-top:    1px solid #DDDDDD;
  border-bottom: 1px solid #DDDDDD;
  box-shadow: 0 10px 22px -14px rgba(0, 0, 0, .18);
}

/* --- B. Geometry (desktop only; the theme collapses mega menus below 1280) */
@media (min-width: 1280px) {

  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul {
    --mm-pad-top:     48px;
    --mm-pad-bottom:  52px;
    --mm-label-width: 22%;
    --mm-list-left:   25%;
    --mm-list-right:  48%;   /* column 2 ends at 52% */
    --mm-col3-left:   56%;
    --mm-gap-bridge:  90px;

    padding: var(--mm-pad-top) 0 var(--mm-pad-bottom);
    min-height: 380px;       /* room for the tallest level-3 list */
  }

  /* B1. Column 2 - the level-2 list.
     `position: static` is the key declaration: it stops the <li> being a
     containing block, so the level-3 <ul> positions against the panel instead
     of against the item. It also makes trx_addons_shift_submenu() take its
     `submenu_centered` branch (menu.js:983), so no inline left/right is
     written and these rules survive. */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li {
    position: static;
    display: block;
    float: none;
    width: auto;
    margin-left:  var(--mm-list-left);
    margin-right: var(--mm-list-right);
    border-bottom: 1px solid var(--mm-line);
  }
  /* :last-of-type, not :last-child - menu.js appends a <span> as the last child */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li:last-of-type {
    border-bottom: 0;
  }
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li > a {
    padding: 15px 30px 15px 0;
    font-size: 17px;
    line-height: 1.4em;
    font-weight: 500;
    transition: color .2s ease;
  }
  /* The chevron only exists on items with children (menu.css:289) - re-anchor it */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li.menu-item-has-children > a:after {
    top: 50%;
    right: 2px;
    font-size: 12px;
    transform: translateY(-50%);
  }
  /* Hover bridge over the 52%-56% gap. It is a pseudo of the <a>, so it stays a
     descendant of the <li> and mouseleave never fires while crossing.
     Delete this rule and set --mm-col3-left: 52% if you prefer no gap. */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li.menu-item-has-children > a:before {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: 100%;
    width: var(--mm-gap-bridge);
  }

  /* B2. Column 1 - the section label (a real menu item, so Polylang can
     translate it). Add a Custom Link as the first child of the mega item,
     with the CSS class `megamenu-label` and no children of its own. */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li.megamenu-label {
    position: absolute;
    /* Full height + flex centring rather than translateY(-50%), which would
       land on half pixels and soften the text. The flyout is absolutely
       positioned and never adds to the panel height, so this stays centred
       against the item list whichever item is hovered. */
    top: 0;
    bottom: 0;
    left: 0;
    width: var(--mm-label-width);
    display: flex;
    align-items: center;
    margin: 0;
    border: 0;
    pointer-events: none;
    --theme-color-extra_text:  var(--mm-green);
    --theme-color-extra_hover: var(--mm-green);
  }
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li.megamenu-label > a {
    padding: 12px 0;
    font-size: 22px;
    line-height: 1.25em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .02em;
    cursor: default;
  }
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li.megamenu-label > a:after,
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul > li.megamenu-label > a:before {
    display: none !important;
  }

  /* B3. Column 3 - the level-3 list, rendered inside the same white panel.
     Three selectors because menu.js adds .submenu_left on very wide viewports
     (menu.js:952-971) and menu.css:376-385 then mirrors the flyout. */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul,
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul.submenu_left,
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul.sc_layouts_submenu.submenu_left {
    left:  var(--mm-col3-left);
    right: 0;
    /* !important is required: trx_addons_shift_submenu() writes an inline
       `top` whenever row_offset + par_offset + ul_height > viewport height
       (menu.js:1041-1052). Making this column full-height tipped that sum
       over, so the last items ("Events", "Tools") were pushed ~390px above
       the panel and looked like nothing happened on hover.
       left/right are deliberately left overridable - the horizontal branch
       (menu.js:1007-1023) never fires here, and leaving it able to act means
       a genuine viewport overflow could still be corrected. */
    top: 0 !important;
    bottom: auto !important;
    width: auto;
    max-width: none;
    min-height: 100%;             /* spans the panel, so there is no hover gap */
    margin: 0;
    padding: var(--mm-pad-top) 0 var(--mm-pad-bottom);
    box-shadow: none;
    background-color: transparent;
    --theme-color-extra_text:  var(--mm-green);
    --theme-color-extra_hover: var(--mm-lime);
  }
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul > li {
    position: static;
    display: block;
    float: none;
    width: auto;
    margin: 0;
    border: 0;
  }
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul > li > a {
    padding: 9px 0;
    font-size: 16px;
    line-height: 1.4em;
    font-weight: 400;
    transition: color .2s ease;
  }
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul li.menu-item-has-children > a:after {
    display: none;
  }
  /* Only three levels are supported; a fourth would stack on top of the third */
  .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed:not([class*="columns-"]) > ul ul ul {
    display: none !important;
  }

  /* B4. Neutralise the theme's sub-item hover effect inside this panel */
  .menu_hover_zoom_line .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed li > a > span:after {
    display: none !important;
  }
  .menu_hover_zoom_line .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed li > a:hover > span,
  .menu_hover_zoom_line .sc_layouts_menu_nav > li.trx_addons_stretch_window_boxed li.sfHover > a > span {
    padding-left: 0;
  }
}


/* ==========================================================================
   BLOGGER CARD - "Classic with image below"
   Matches the XD news card: bordered white plate, green title, body copy,
   a "Citeste" link with a chevron, and the photo full-bleed along the bottom.

   The wrapper class is built in
   trx_addons/components/shortcodes/blogger/tpl.default-item.php:144 as
   sc_blogger_item_{type}_{template}, so this scopes to the template registered
   in heart-child/functions.php and leaves every other Blogger layout alone.
   ========================================================================== */
/* Palette on the widget wrapper so both the cards and the slider arrows can
   use it - the arrows live outside the items, so tokens defined on an item
   would not reach them. */
.sc_blogger.sc_blogger_default_classic_image_below {
  --card-pad:   30px;
  --card-green: #1F764D;
  --card-lime:  #8CC63F;
  --card-ink:   #000000;
  --card-muted: #B7C9BD;
}

.sc_blogger_item_default_classic_image_below {
  background-color: #FFFFFF;
  box-sizing: border-box;
  padding: var(--card-pad);
  /* the featured image is pulled out to the card edges below, so clip anything
     that would otherwise sit on top of the border */
  overflow: hidden;
}

/* The whole card is one header zone (see functions.php): reset the spacing the
   theme gives that zone, since here it holds the entire card body. */
.sc_blogger_item_default_classic_image_below .sc_blogger_item_header {
  margin: 0;
  padding: 0;
}

/* Cards in a row must be the same height, so the title is capped at 4 lines
   and always takes 4 lines' room - a two-line title leaves space under it
   rather than pulling the excerpt, link and photo up. The min-height is
   4 x the line-height below; keep the two in step. */
.sc_blogger_item_default_classic_image_below .sc_blogger_item_title {
  margin: 0 0 .6em;
  font-size: 22px;
  line-height: 1.3;
  font-weight: 700;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 4;
  line-clamp: 4;
  overflow: hidden;
  min-height: calc(4 * 1.3em);
}
.sc_blogger_item_default_classic_image_below .sc_blogger_item_title,
.sc_blogger_item_default_classic_image_below .sc_blogger_item_title a {
  color: var(--card-green);
}
.sc_blogger_item_default_classic_image_below .sc_blogger_item_title a:hover {
  color: var(--card-lime);
}

/* Same idea for the excerpt: at most 3 lines, and always 3 lines' room
   (3 x the line-height below), so a short excerpt does not shorten its card. */
.sc_blogger_item_default_classic_image_below .sc_blogger_item_excerpt {
  margin: 0 0 1.1em;
  color: var(--card-ink);
  font-size: 16px;
  line-height: 1.55;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  overflow: hidden;
  min-height: calc(3 * 1.55em);
}

/* "Citeste" link.
   The markup is <a class="item_more_link"><span class="link_text">..</span>
   <span class="link_icon"></span></a>, and the theme deliberately hides the
   label and shows only an arrow glyph:
     heart/skins/default/plugins/trx_addons/trx_addons.css:27905
       .link_text { text-indent: -110px; visibility: hidden; }
     ...:27894
       .link_icon:before { content: "\e9a4"; font-family: "fontello"; }
   The design wants the opposite - visible text with a chevron before it - so
   the label is restored and the theme's arrow span is dropped. */
/* These selectors are deliberately long. The theme's rules are 4 classes deep
   (.sc_blogger .sc_blogger_item_button .item_more_link .link_text), so a
   shorter selector loses on specificity no matter how late the file loads.
   Chaining the two classes the widget wrapper carries gets us to 5 without
   resorting to !important. */
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button {
  margin: 0;
}
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button .item_more_link {
  display: inline-flex;
  align-items: center;
  padding: 0;
  border: 0;
  background: none;
  color: var(--card-green);
  font-size: 16px;
  font-weight: 600;
  text-decoration: none;
  overflow: visible;   /* theme sets overflow:hidden, which clips the label */
  transition: color .2s ease;
}
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button .item_more_link:hover {
  color: var(--card-lime);
  background: none;
}
/* Restore the label: the theme parks it 110px to the left, invisible and at
   zero opacity, and only reveals it on hover (trx_addons.css:27905, :27919). */
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button .item_more_link .link_text {
  visibility: visible;
  opacity: 1;
  text-indent: 0;
  margin: 0;
  color: inherit;
}
/* The theme's hover rules (:27919-27928) still fire and add margin-right:9px to
   the label, which would make the text jump 9px on hover now that it is always
   visible. Hold it at 0 for both hover targets. */
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button .item_more_link:hover .link_text,
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item:hover .sc_blogger_item_button .item_more_link .link_text {
  margin-right: 0;
}
/* Drop the theme's trailing arrow glyph - the design has one chevron, on the left */
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button .item_more_link .link_icon {
  display: none;
}
/* Chevron drawn from borders rather than an icon font: no dependency on which
   glyph set is loaded, and it inherits the link colour on hover. As a ::before
   on a flex container it is the first flex item, so it sits left of the text. */
.sc_blogger.sc_blogger_default_classic_image_below .sc_blogger_item_button .item_more_link:before {
  content: '';
  flex: 0 0 auto;
  width: 7px;
  height: 7px;
  margin-right: 12px;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
  transform: rotate(45deg);
}

/* Photo last, bleeding to the card edges. The negative margins mirror
   --card-pad, so changing the padding keeps the image flush. */
.sc_blogger_item_default_classic_image_below .sc_blogger_item_featured {
  margin: 24px calc(-1 * var(--card-pad)) calc(-1 * var(--card-pad));
}
.sc_blogger_item_default_classic_image_below .sc_blogger_item_featured img {
  display: block;
  width: 100%;
  height: auto;
}

/* --- Slider arrows ------------------------------------------------------
   The theme draws them as white discs:
     trx_addons.css:588-598  50px box, border-radius 50%
     trx_addons.css:664-671  background from --theme-color-alter_bg_color
   and the plugin pins the pair to the top right:
     slider.css:1292-1303    position:absolute; top:-5em; right:0
   The design wants bare green arrows on the left.                          */

/* Move the pair to the left edge (theme rule is 3 classes, this is 5) */
.sc_blogger.sc_blogger_default_classic_image_below .sc_item_slider.slider_outer_controls_top > .slider_controls_wrap {
  left: 0;
  right: auto;
  top: -60px;
}
/* On tablet and below the left edge is already occupied - the section's
   "READ ALL" button sits there - so the pair goes back to the right, which is
   where the plugin puts it by default (slider.css:1292-1303).

   1023px is the theme's own tablet breakpoint: it is where trx_addons starts
   honouring the `.sc-tablet_*` element classes (content.responsive.css:107). */
@media (max-width: 1023px) {
  .sc_blogger.sc_blogger_default_classic_image_below .sc_item_slider.slider_outer_controls_top > .slider_controls_wrap {
    left: auto;
    right: 0;
  }
}

/* Gap between the two arrows (theme default is 0.5em) */
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top > .slider_controls_wrap > a + a {
  margin-left: 22px;
}

.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_prev,
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_next {
  width: 46px;
  height: 46px;
  line-height: 46px;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: var(--card-lime);
  transition: color .2s ease;
  font-weight: 700;
}

/* The glyph carries its own font-size (trx_addons.css:699-703), so it has to be
   sized on the pseudo-element - font-size on the <a> has no effect on it. */
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_prev:before,
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_next:before {
  font-size: 48px;
  line-height: inherit;
}

/* Hover goes white, not dark green: dark green is the section background, so
   the arrow disappeared into it. */
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_prev:hover,
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_next:hover {
  background: none;
  color: #FFFFFF;
}

/* Disabled state (Loop is off, so swiper really does set this class).
   The doubled class is deliberate: the rules above are already 5 classes, and
   a single .swiper-button-disabled would tie or lose and never show. */
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_prev.swiper-button-disabled,
.sc_blogger.sc_blogger_default_classic_image_below .slider_outer_controls_top .slider_controls_wrap > a.slider_next.swiper-button-disabled {
  color: var(--card-muted);
  opacity: 1;
  cursor: default;
}


/* ==========================================================================
   PHOTO STRIP - Slider widget + its Controller as the XD's gallery
   (Infrastructure page). Opt-in: add the CSS class `photo_strip` to a
   trx_widget_slider whose Controller is on, position Bottom, style Default
   (tools/style-photo-strips.php did it for the ten galleries on the
   Infrastructure page and its Romanian twin).

   The XD: the big picture (the current slide) boxed like the text above it,
   and under it a full-bleed strip of near-square thumbnails from a small
   left gutter, a fifth cut off at the right edge, a bare lime arrow over
   the right edge. Clicking a thumb changes the big picture - that part is
   the plugin's (slider.js:508, 565-597).

   The widget sits in a boxed inner section with Elementor's Overflow: hidden
   (the script). The strip breaks out of the box with viewport-unit margins;
   the 100vw-under-the-scrollbar excess that would otherwise add a
   horizontal scrollbar is clipped by that section.

   Plugin markup (plugin.media.php:734-741, 1078-1200):
     .slider_outer_wrap.slider_outer_wrap_controller_pos_bottom
       .slider_outer > .slider_container            the big picture
       .sc_slider_controller.sc_slider_controller_horizontal[data-controls=1]
         .slider_outer.slider_style_controller
           .slider_container.slider_controller_container   thumbs: .slider-slide.slider-slide-bg
           .slider_controls_wrap.slider_controller_arrows_wrap > a.slider_prev, a.slider_next
   ========================================================================== */

/* --- The big picture --------------------------------------------------- */
.photo_strip .slider_outer_wrap > .slider_outer .slider-slide img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
}

/* --- The strip ----------------------------------------------------------
   Breaks out of the boxed section: from a 2.5vw gutter to the viewport's
   right edge. The theme pads the controller 60/57px for its arrows
   (trx_addons.css:1059-1061); here the arrows sit over the tiles. */
.photo_strip .sc_slider_controller_horizontal {
  margin: 24px calc(50% - 50vw) 0 calc(50% - 50vw + 2.5vw);
  padding: 0;
}
/* Clips the previous thumb on the left; the next ones run to the edge. */
.photo_strip .sc_slider_controller .slider_outer {
  overflow: hidden;
}
/* Swiper is told 4 per view (parseInt: slider.js:35, no "four and a bit"),
   so the container is narrower than the strip and the plugin's overflow
   shows the fifth thumb in the rest. 88.2% of 97.5vw = 86vw. The plugin
   gives the container a fixed height from --sc-slider-controller-height
   (slider.css:1409-1415, 3 classes - hence 4 here), max-height 10em below
   1280px (slider.responsive.css:32) and overflow hidden; swiper gives the
   slides height 100%. The width is !important because the plugin clamps
   every slider to its closest .elementor-widget on resize and writes that
   width inline (slider.js:806-820) - here the widget is the boxed column,
   narrower than the strip. */
.photo_strip .slider_outer_wrap .sc_slider_controller .slider_controller_container {
  width: 88.2% !important;
  height: auto;
  max-height: none;
  overflow: visible;
}
.photo_strip .slider_outer_wrap .sc_slider_controller .slider_controller_container .swiper-slide {
  height: auto;
}
/* Thumbs: the plugin lays each out as a flex row with padding and a white
   background, active one tinted with a 3px bar on top (slider.css:1457-1485,
   1679-1687; theme trx_addons.css:1183-1193; 4 classes, hence 4 here). Here:
   a tile, and nothing marks the active one - the XD marks nothing. */
.photo_strip .slider_outer_wrap .sc_slider_controller .slider-slide {
  display: block;
  padding: 0;
  min-height: 0;
  aspect-ratio: 313 / 288;
  background-color: transparent;
  background-size: cover;
  background-position: center;
  border-radius: 4px;
}
.photo_strip .slider_outer_wrap .sc_slider_controller .slider-slide.swiper-slide-active {
  background-color: transparent;
}
.photo_strip .slider_outer_wrap .sc_slider_controller .slider-slide.swiper-slide-active:after {
  display: none;
}

/* --- Arrows -------------------------------------------------------------
   The XD arrow is a bare, bold lime "->", over the right edge of the strip;
   the same mirrored on the left when there is something to go back to.
   Loop is off (the script), so swiper marks the arrow at either end
   `swiper-button-disabled` and it is hidden.

   The theme draws the controller's arrows as full-height 60px boxes hung
   outside the strip with a fontello chevron:
     slider.css:1562-1580     4em wide, top 0 / bottom 0, glyph centred
     trx_addons.css:1067-1082 width 60px, left -60px / right -57px, glyphs
     slider.css:1397          opacity 1 (no hover reveal for controllers)
   Those are 3-4 classes; every rule here is 4-5 and loads later. The
   controls wrap is a sibling of the container inside an outer that spans
   the whole strip, so plain left/right offsets place the arrows. The glyph
   is dropped and the arrow drawn as an inline SVG on the pseudo-element,
   so it is the XD's shape and weight regardless of the icon font. */
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev,
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next {
  top: 50%;
  bottom: auto;
  z-index: 2;           /* the swiper container is z-index 1; the arrows sit over it */
  width: 48px;
  height: 48px;
  line-height: 48px;
  margin: -24px 0 0;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  background: none;
  transition: opacity .2s ease, transform .2s ease;
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next {
  right: 3.5%;
  left: auto;
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev {
  left: 14px;
  right: auto;
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev:before,
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next:before {
  content: '';
  display: block;
  position: static;
  top: auto;
  left: auto;
  transform: none;      /* the theme centres its glyph with translate(-50%,-50%) (slider.css:1574-1580) */
  width: 48px;
  height: 48px;
  margin: 0;
  background: no-repeat center / 44px 44px;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35));   /* readable over a light photo */
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next:before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 12h15M12 5l7 7-7 7' fill='none' stroke='%238CC63F' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev:before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 12H6M12 5l-7 7 7 7' fill='none' stroke='%238CC63F' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next:hover {
  background: none;
  transform: translateX(3px);
}
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev:hover {
  background: none;
  transform: translateX(-3px);
}
/* At either end swiper disables the arrow: gone, not greyed - there is
   nothing that way. visibility, not opacity: the plugin holds the
   controller's arrows at opacity 1 (slider.css:1397). */
.photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.swiper-button-disabled {
  visibility: hidden;
  pointer-events: none;
}

/* 3 per view (widget tablet setting): a wider container keeps the peek about
   half a tile. 1023px is the theme's tablet breakpoint. */
@media (max-width: 1023px) {
  .photo_strip .slider_outer_wrap .sc_slider_controller .slider_controller_container {
    width: 90%;
  }
}
/* 2 per view; the section's 20px mobile padding is gutter enough. Below
   480px the plugin hides controllers altogether (slider.responsive.css:168,
   height 0 + overflow hidden); this gallery keeps its strip. */
@media (max-width: 767px) {
  .photo_strip .slider_outer_wrap .sc_slider_controller {
    height: auto;
    overflow: visible;
  }
  .photo_strip .sc_slider_controller_horizontal {
    margin-left: calc(50% - 50vw + 20px);
  }
  .photo_strip .slider_outer_wrap .sc_slider_controller .slider_controller_container {
    width: 86%;
  }
  .photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev,
  .photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next {
    width: 36px;
    height: 36px;
    line-height: 36px;
    margin-top: -18px;
  }
  .photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_prev:before,
  .photo_strip .sc_slider_controller .slider_outer_controls_side .slider_controls_wrap > a.slider_next:before {
    width: 36px;
    height: 36px;
    background-size: 32px 32px;
  }
}

/* ==========================================================================
   FOOTPRINT TILES - Skills widget as photo tiles (XD "16 ani de conservare")
   Opt-in: add the CSS class `footprint-tiles` to the widget in
   Elementor -> Advanced -> CSS Classes. Elementor puts custom classes on its
   own wrapper, so this scopes from there and leaves every other Skills widget
   on the site untouched.

   Markup (tpl.counter.php:74-130):
     .sc_skills_column > .sc_skills_item_wrap
                          > .sc_skills_item > .sc_skills_image + .sc_skills_total
                          + .sc_skills_item_title      <- sibling of the item
   The image is turned into the tile background and the number and label are
   stacked over it, bottom left.
   ========================================================================== */
.footprint-tiles {
  --tile-radius:    10px;
  --tile-gap:       10px;
  /* One shared height with flexible widths - that is how the design works.
     An aspect-ratio per tile would give each a different height, since the
     widths differ. */
  --tile-height:    340px;
  --tile-pad:       20px;
  /* The design is a six-column grid and each tile spans a whole number of
     columns, so the widths are written as sixths rather than round numbers.
     The spans must total 6. The gutter comes out of each column's padding and
     is pulled back by the wrap's negative margin, so the widths can add up to
     exactly 100% without overflowing.

     Default row: 1 + 1 + 1 + 3 */
  --tile-col:        calc(100% / 6);
  --tile-width:      var(--tile-col);              /* span 1 */
  --tile-width-last: calc(var(--tile-col) * 3);    /* span 3 */
  --tile-shade:     rgba(0, 0, 0, .55);
}

/* Row: keep the theme's own column system rather than forcing flex onto it.
   trx_addons.front.css:2707-2736 lays these out as inline-blocks with a
   percentage width and padding-right for the gutter, and the wrap pulls that
   gutter back with a negative right margin. Overriding it with flex made the
   columns size to their text, then to nothing - only the widths need to
   change here. */
.footprint-tiles .sc_skills_counter_simple .sc_skills_columns {
  margin-right: calc(-1 * var(--tile-gap));
}
.footprint-tiles .sc_skills_counter_simple .sc_skills_column {
  width: var(--tile-width);
  max-width: none;
  padding-right: var(--tile-gap);
  padding-bottom: 0;
  vertical-align: top;
}
.footprint-tiles .sc_skills_counter_simple .sc_skills_column:last-child {
  width: var(--tile-width-last);
}

/* The tile itself */
.footprint-tiles .sc_skills_counter_simple .sc_skills_item_wrap {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;   /* text sits at the bottom */
  height: var(--tile-height);
  max-width: none;
  padding: 0;
  border-radius: var(--tile-radius);
  overflow: hidden;
}

/* Image becomes the background. The theme renders it as a 4.83em circle
   (skills.css:127-135); this fills the tile instead. */
.footprint-tiles .sc_skills_counter_simple .sc_skills_image {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 0;      /* photo at the back, shade above it, text on top */
  margin: 0;
  text-align: left;
}
.footprint-tiles .sc_skills_counter_simple .sc_skills_image img {
  width: 100%;
  height: 100%;
  border-radius: 0;
  object-fit: cover;
  display: block;
}

/* Shade behind the text so white stays legible on bright photos */
.footprint-tiles .sc_skills_counter_simple .sc_skills_item_wrap:after {
  content: '';
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1;
  height: 62%;
  background: linear-gradient(to top, var(--tile-shade), rgba(0, 0, 0, 0));
  pointer-events: none;
}

/* Number and label, stacked over the photo */
/* .sc_skills_item must stay unpositioned: the image is a child of it and is
   absolutely positioned against the tile. Making the item relative turned it
   into the image's containing block, so the photo filled only the number's
   line at the bottom of the tile. Position the text elements themselves. */
.footprint-tiles .sc_skills_counter_simple .sc_skills_item,
.footprint-tiles .sc_skills_counter_simple .sc_skills_item_title {
  padding-right: var(--tile-pad);
  padding-left: var(--tile-pad);
  text-align: left;
}
.footprint-tiles .sc_skills_counter_simple .sc_skills_total,
.footprint-tiles .sc_skills_counter_simple .sc_skills_item_title {
  position: relative;
  z-index: 2;
}
.footprint-tiles .sc_skills_counter_simple .sc_skills_total {
  color: #FFFFFF;
  font-size: 30px;
  line-height: 1.1em;
  font-weight: 700;
  letter-spacing: 0;
  /* the odometer renders each digit as its own inline span, which would
     otherwise wrap mid-number in a narrow tile ("254 8") */
  white-space: nowrap;
}
.footprint-tiles .sc_skills_counter_simple .sc_skills_item + .sc_skills_item_title {
  margin-top: 4px;
  padding-bottom: var(--tile-pad);
  color: #FFFFFF;
  font-size: 15px;
  line-height: 1.25em;
  font-weight: 700;
}
/* The entrance animation must not run on .sc_skills_item ------------------
   The theme adds `animated-item` to every .sc_skills_item and, once it
   scrolls into view, runs the `heart-fadeinup` keyframes on it. That
   animation's transform makes .sc_skills_item a containing block for
   absolutely positioned descendants even though it computes to
   position: static - and the photo is a child of it. Measured on the live
   page: the image box goes 175x340 -> 175x41 for the second the animation
   runs, i.e. it shrinks to the number line at the bottom of the tile.
   Before that the same element is held at opacity 0 / visibility hidden,
   so the tile is a blank white box with the shade gradient on it.

   Here the photo IS the tile, so there is nothing left worth animating on
   the item - switching the animation off removes the flash. This is scoped
   to the footprint tiles; every other Skills widget keeps its entrance. */
.footprint-tiles .sc_skills_counter_simple .sc_skills_item.animated-item,
.footprint-tiles .sc_skills_counter_simple .sc_skills_item.elementor-invisible,
.footprint-tiles .sc_skills_counter_simple .sc_skills_item.trx_addons_invisible {
  animation: none !important;
  transform: none !important;
  opacity: 1 !important;
  visibility: visible !important;
}

/* The theme adds a divider line between columns - not wanted between tiles */
.footprint-tiles .sc_skills_counter_simple .sc_skills_column + .sc_skills_column:before {
  display: none;
}

/* --- Variant: three tiles, 1 + 3 + 2 --------------------------------------
   Add `large-middle-tile` next to `footprint-tiles` on the widget.
   Same six-column grid, different spans: the wide tile moves to the middle
   and the last one takes the remaining two columns.

   Only the width tokens are redefined - the base rules read them from the
   element they are set on, and this selector is more specific, so the base
   :last-child rule picks up the 2-column value on its own. The one new rule
   is for the middle tile, which the default row has no equivalent of. */
.footprint-tiles.large-middle-tile {
  --tile-width:      var(--tile-col);              /* span 1 */
  --tile-width-mid:  calc(var(--tile-col) * 3);    /* span 3 */
  --tile-width-last: calc(var(--tile-col) * 2);    /* span 2 */
}
.footprint-tiles.large-middle-tile .sc_skills_counter_simple .sc_skills_column:nth-child(2) {
  width: var(--tile-width-mid);
}

/* Stack into two rows on small screens rather than squeezing four tiles */
@media (max-width: 767px) {
  .footprint-tiles {
    --tile-height: 240px;
  }
  .footprint-tiles .sc_skills_counter_simple .sc_skills_column,
  .footprint-tiles .sc_skills_counter_simple .sc_skills_column:last-child {
    width: 50%;
    padding-bottom: var(--tile-gap);
  }
  /* The three-tile row stacks one per row instead. Halves would leave the
     first tile alone on its line, because the full-width middle tile always
     wraps and these are inline-blocks with no way to reorder. */
  .footprint-tiles.large-middle-tile .sc_skills_counter_simple .sc_skills_column,
  .footprint-tiles.large-middle-tile .sc_skills_counter_simple .sc_skills_column:last-child {
    width: 100%;
  }
}


/* ==========================================================================
   MAILCHIMP SUBSCRIBE FORM - XD "Abonează-te la newsletter"

   The id comes from the theme, not from the plugin: the form's own settings
   have css = 0, and Heart ships eleven presets in
   skins/default/plugins/mailchimp-for-wp/mailchimp-for-wp.css (:1009 is the
   "Style 10" block). Everything below overrides that preset.

   Three things the preset does that the design does not want:
     - .mc4wp-form-fields:before paints a fontello envelope inside the field;
     - the button is a 50x50 square with `color: transparent` and a fontello
       arrow drawn over it, which hides the real "Abonare" label - the label
       is already correct in the form, it was only ever invisible;
     - the input carries a box-shadow.

   Selectors repeat .mc4wp-form (`#style-10.mc4wp-form.mc4wp-form`) to carry
   one class more than the preset without naming the form id, so these win
   whichever order the two stylesheets end up in. The preset marks its
   colours !important, so the overrides for those must be too.
   ========================================================================== */
#style-10.mc4wp-form {
  --mc-height:     50px;
  /* XD: button is ~36% of the form. clamp() keeps "Abonare" from being
     cramped in a narrow column or absurd in a wide one. */
  --mc-btn-width:  clamp(120px, 36%, 180px);
  --mc-lime:       #8CC63F;   /* CTA green, as on "Donează" */
  --mc-dark-green: #1F764D;   /* hover, per the XD button states */
  --mc-white:      #FFFFFF;
}

/* Plain field - no envelope glyph */
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields:before {
  display: none;
}

#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=email] {
  width: calc(100% - var(--mc-btn-width));
  height: var(--mc-height);
  padding: 0 1.1em;             /* the 3.4em left pad only existed for the glyph */
  font-size: 16px;
  line-height: var(--mc-height);
  border: none;
  border-radius: 0;
  background-color: var(--mc-white) !important;
  box-shadow: none !important;
}

/* Button: show the label, drop the arrow */
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit] {
  width: var(--mc-btn-width);
  height: var(--mc-height);
  line-height: var(--mc-height);
  padding: 0 1em !important;
  font-family: var(--theme-font-button_font-family);
  font-size: 16px;
  font-weight: var(--theme-font-button_font-weight);
  white-space: nowrap;
  border-radius: 0;
  color: var(--mc-white) !important;
  background-color: var(--mc-lime) !important;
  border-color: var(--mc-lime) !important;
}
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button:before,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit]:before {
  content: none;
}
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button:hover,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button:active,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button:focus,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit]:hover,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit]:active,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit]:focus {
  color: var(--mc-white) !important;
  background-color: var(--mc-dark-green) !important;
  border-color: var(--mc-dark-green) !important;
}
/* The preset re-hides the label on disabled+hover; keep it readable */
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button[disabled],
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button[disabled]:hover,
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit][disabled],
#style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit][disabled]:hover {
  color: var(--mc-white) !important;
  background-color: var(--mc-lime) !important;
  border-color: var(--mc-lime) !important;
}

/* GDPR consent row - white on the photo, as in the design */
#style-10.mc4wp-form.mc4wp-form label {
  margin: 20px 0 0;
  color: var(--mc-white);
  font-size: 14px;
  line-height: 1.45em;
}
#style-10.mc4wp-form.mc4wp-form input[type=checkbox] + label a {
  color: var(--mc-white);
  border-bottom-color: var(--mc-white);
  text-decoration: underline;
}
/* Filled white square. The tick is fontello "\e9f6" from the skin's global
   checkbox rules (style.css:3379); it needs a dark colour to read on white. */
#style-10.mc4wp-form.mc4wp-form input[type=checkbox] + label:before {
  border-radius: 0;
  border-color: var(--mc-white) !important;
  background-color: var(--mc-white);
  color: var(--mc-dark-green);
}

/* Too narrow for two columns - put the button on its own line */
@media (max-width: 479px) {
  #style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=email] {
    width: 100%;
  }
  #style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields button,
  #style-10.mc4wp-form.mc4wp-form .mc4wp-form-fields input[type=submit] {
    position: static;
    width: 100%;
    margin-top: 10px;
  }
}

/* ==========================================================================
   BUTTON COLOURS - XD CTA states, lime -> dark green

   The theme paints every button from the colour scheme:
     base   background: var(--theme-color-text_link)
     hover  background: var(--theme-color-text_hover)
     label  color:      var(--theme-color-inverse_link)
   (skins/default/css/style.css:1504 and :1673)

   Those two roles also drive ordinary text links, and on the four dark
   schemes both text_hover and inverse_link are #FFFFFF - white links on a
   dark background is right for text, but it makes a hovered button white on
   white, which is what happened to DONATE and the hero button. The roles
   cannot be split: one pair serves links and buttons alike.

   So buttons are pinned here instead, to the states the XD file specifies -
   lime, dark green on hover, white label - in every scheme. Text links keep
   their per-scheme behaviour.

   Selectors mirror the theme's two lists exactly, so they carry the same
   specificity and win on order (heart-child/style.css is enqueued after the
   skin). Buttons carrying an explicit .color_style_* class are left alone:
   that class is a deliberate per-button override in Elementor. */
:root {
  --carp-lime:       #8CC63F;
  --carp-dark-green: #1F764D;
  --carp-white:      #FFFFFF;
  --carp-hr-gap:     8px;   /* space above and below every <hr> */

  /* Filter pills. Defined here, not on .pill-tabs, because two different
     widgets wear them: the Elementor Tabs widget and the Blogger widget's
     filter tabs on the jobs list. --tab-ink resolves per element, so it still
     picks up the colour scheme of whatever section it lands in. */
  --tab-radius:     999px;
  --tab-gap:        12px;
  --tab-pad-y:      10px;
  --tab-pad-x:      24px;
  --tab-min-h:      40px;
  /* Long labels wrap to a second line instead of stretching the pill, as
     "Cercetare și monitorizarea impactului" does in the design. */
  --tab-max-w:      220px;
  --tab-line:       #DDDDDD;
  --tab-ink:        var(--theme-color-text);
  --tab-active-bg:  var(--carp-dark-green);
  --tab-active-ink: var(--carp-white);

  /* Post tags + share row, under the cover image on a single post. The pills
     there are the filter-pill shape at a smaller size, so only the colours,
     the radius and the hairline are shared with --tab-* above. */
  --tag-pad-y:      6px;
  --tag-pad-x:      16px;
  --tag-gap:        10px;
  --tag-row-space:  28px;   /* above the row, and again above its rule */
  --tag-row-gap:    20px;   /* tags to share, when they wrap onto two rows */
  --tag-icon-size:  38px;
  --tag-icon-gap:   14px;
}

form button:not(.components-button),
input[type=button],
input[type=reset],
input[type=submit],
.theme_button,
.post_item .more-link,
.wp-block-button__link,
.sc_button:not(.sc_button_simple),
.sc_form button,
.sc_portfolio_preview_show .post_readmore {
  color: var(--carp-white);
  border-color: var(--carp-lime);
  background-color: var(--carp-lime);
}

form button:not(.components-button):hover,
form button:not(.components-button):focus,
input[type=submit]:hover,
input[type=submit]:focus,
input[type=reset]:hover,
input[type=reset]:focus,
input[type=button]:hover,
input[type=button]:focus,
.theme_button:hover,
.theme_button:focus,
.post_item .more-link:hover,
.comments_wrap .form-submit input[type=submit]:hover,
.comments_wrap .form-submit input[type=submit]:focus,
.wp-block-button:not(.is-style-outline) .wp-block-button__link:hover,
.wp-block-button:not(.is-style-outline) .wp-block-button__link:focus,
.sc_button_default:hover,
.sc_button_default:focus,
.sc_button:not(.sc_button_simple):not(.sc_button_bordered):not(.sc_button_bg_image):hover,
.sc_button:not(.sc_button_simple):not(.sc_button_bordered):not(.sc_button_bg_image):focus,
.sc_form button:hover,
.sc_form button:focus,
.sc_portfolio_preview_show .post_readmore:hover,
.sc_portfolio_preview_show .post_readmore:focus {
  color: var(--carp-white);
  border-color: var(--carp-dark-green);
  background-color: var(--carp-dark-green);
}


/* ==========================================================================
   TEAM - "List" layout as the XD portrait grid

   The template already emits the right order - photo, name, subtitle,
   excerpt (heart/skins/default/trx_addons/components/cpt/team/
   tpl.list-item.php). Only the CSS puts the photo beside the text: the theme
   makes the card a horizontal flex row with the photo locked to 48%
   (trx_addons.css:18944). Everything here stacks it instead and restyles the
   text to the design: name, country in green above a rule, then the bio.

   Set the widget's Columns to 5 to match the design; this block does not
   touch the column count, which is the widget's own setting.

   Selectors lead with .sc_team.sc_team_list - one class more than the
   theme's - so they also outrank the repeats in __responsive.css, which is
   enqueued after the child stylesheet.
   ========================================================================== */
.sc_team.sc_team_list {
  /* The photos are cropped to a consistent landscape frame so the names line
     up across a row whatever the source image is. The thumb the template
     requests is 570x696 portrait, so this crops it - raise the ratio if you
     would rather keep more of the picture. */
  --team-thumb-ratio:  5 / 4;
  --team-thumb-radius: 6px;
}

/* Photo on top, not beside */
.sc_team.sc_team_list .sc_team_item.has-post-thumbnail {
  display: block;
}
.sc_team.sc_team_list .sc_team_item.has-post-thumbnail .post_featured {
  max-width: none;
  margin: 0;
}
.sc_team.sc_team_list .sc_team_item.has-post-thumbnail .sc_team_item_info {
  padding: 0;
}

.sc_team.sc_team_list .sc_team_item .post_featured {
  aspect-ratio: var(--team-thumb-ratio);
  overflow: hidden;               /* clips the 1.05 hover zoom to the corners */
  border-radius: var(--team-thumb-radius);
}
.sc_team.sc_team_list .sc_team_item .post_featured img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Name */
.sc_team.sc_team_list .sc_team_item_title,
.sc_team.sc_team_list .sc_item_columns .sc_team_item_title {
  margin: 16px 0 0;
  font-size: 16px;
  line-height: 1.3em;
  font-weight: 700;
  color: var(--theme-color-text_dark);
}

/* Country - green, uppercase, with the rule under it */
.sc_team.sc_team_list .sc_team_item_subtitle {
  margin-top: 5px;
  padding-bottom: 9px;
  border-bottom: 1px solid var(--theme-color-bd_color);
  font-size: 13px;
  line-height: 1.3em;
  font-weight: 600;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: var(--theme-color-text_link);
}

/* Bio */
.sc_team.sc_team_list .sc_team_item_content,
.sc_team.sc_team_list .sc_item_columns .sc_team_item_content {
  margin: 13px 0 0;
  font-size: 14px;
  line-height: 1.5em;
  color: var(--theme-color-text);
}

.sc_team.sc_team_list .sc_team_item_socials {
  margin-top: 13px;
}


/* ==========================================================================
   PILL TABS - Elementor Tabs widget as the XD filter pills
   Opt-in: add the CSS class `pill-tabs` to the Tabs widget in
   Elementor -> Advanced -> CSS Classes. Opt-in rather than global because
   the theme's own tab skins work the same way (.tabs_style_1/2/3 in
   skins/default/plugins/elementor/elementor.css) and because the demo Tabs
   widget on the Church page should keep the stock look.

   Why the stock widget crams 16 tabs onto one line: Elementor lays the
   titles out as `display: table-cell`
   (elementor/assets/css/widget-tabs.min.css) so they share one table row and
   cannot wrap, and `.elementor-tabs-wrapper` has `overflow: hidden`, which
   would clip them even if they did. A wrapping flex row fixes both.

   The active tab's long horizontal rules are two 999em-wide pseudo-elements
   on the title; they need !important because Elementor's selectors for them
   carry one class more than is available here.
   ========================================================================== */
/* Pill tokens live on :root - shared with the jobs list filters. */

.pill-tabs.elementor-widget-tabs .elementor-tabs-wrapper {
  display: flex;
  flex-wrap: wrap;
  gap: var(--tab-gap);
  overflow: visible;
  /* Each pill sizes to its own label, as in the design. Without this the
     flex default (stretch) grows every pill in a row to match the tallest,
     so one two-line label would make its whole row 58px instead of 40. */
  align-items: flex-start;
}

.pill-tabs.elementor-widget-tabs .elementor-tab-desktop-title,
.pill-tabs.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-height: var(--tab-min-h);
  max-width: var(--tab-max-w);
  padding: var(--tab-pad-y) var(--tab-pad-x);
  border: 1px solid var(--tab-line);
  border-radius: var(--tab-radius);
  background-color: #FFFFFF;
  color: var(--tab-ink);
  font-family: var(--theme-font-p_font-family);
  font-size: 14px;
  line-height: 1.3em;
  font-weight: 500;
  text-align: center;
  white-space: normal;
  transition: color .25s ease, border-color .25s ease, background-color .25s ease;
}

/* Both hooks: Elementor's JS adds .elementor-active on click, but the markup
   ships with only aria-selected set, so the first pill would be unstyled
   until the script runs. */
.pill-tabs.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active,
.pill-tabs.elementor-widget-tabs .elementor-tab-desktop-title[aria-selected="true"],
.pill-tabs.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active,
.pill-tabs.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title[aria-selected="true"] {
  border-style: solid;
  border-color: var(--tab-active-bg);
  background-color: var(--tab-active-bg);
  color: var(--tab-active-ink);
}

.pill-tabs.elementor-widget-tabs .elementor-tab-desktop-title:not(.elementor-active):not([aria-selected="true"]):hover {
  border-color: var(--tab-active-bg);
  color: var(--tab-active-bg);
}

/* The 999em rules either side of the active tab */
.pill-tabs.elementor-widget-tabs .elementor-tab-desktop-title:before,
.pill-tabs.elementor-widget-tabs .elementor-tab-desktop-title:after {
  display: none !important;
}

/* No box around the panel - the design has the copy sitting on the page */
.pill-tabs.elementor-widget-tabs .elementor-tabs-content-wrapper,
.pill-tabs.elementor-widget-tabs .elementor-tab-content,
.pill-tabs.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content {
  border: none;
}
.pill-tabs.elementor-widget-tabs .elementor-tab-content {
  padding: 24px 0 0;
}

/* Pills wrap on their own, so keep them on small screens instead of letting
   Elementor swap in its accordion-style stack of mobile titles. The tab
   script binds to .elementor-tab-title, so these stay clickable. */
@media (max-width: 767px) {
  .pill-tabs.elementor-widget-tabs .elementor-tabs-wrapper {
    display: flex;
  }
  .pill-tabs.elementor-widget-tabs .elementor-tab-mobile-title {
    display: none;
  }
  .pill-tabs.elementor-widget-tabs .elementor-tab-content {
    padding: 20px 0 0;
  }
}

/* ==========================================================================
   HORIZONTAL RULES - a row separator, not a section break

   The theme gives every <hr> `margin: 6.7857em 0 !important`
   (skins/default/css/style.css:679) - about 122px at 18px - which is spacing
   for a chapter break. Everywhere <hr> is actually used on this site it
   separates consecutive rows, so the gap is set site-wide here.

   `body hr` rather than `hr`: the theme sets this twice, both !important -
   style.css:686 and again as `hr,.vc_separator{margin:3em 0!important}` at
   __responsive.css:3. That second sheet is enqueued after the child one, so
   a bare `hr` selector ties on specificity and loses on order. One extra
   type selector settles it wherever the rule comes from.
   ========================================================================== */
body hr {
  margin-top: var(--carp-hr-gap) !important;
  margin-bottom: var(--carp-hr-gap) !important;
}

/* A paragraph's margin and the rule's margin are adjacent siblings, so they
   collapse to the larger of the two - the paragraph's ~1.4em wins and the
   gap above stays wide however small --carp-hr-gap gets. Only the margins
   facing a rule are dropped, so ordinary prose keeps its paragraph spacing;
   a blanket `p { margin: 0 }` would flatten every post and text editor on
   the site. */
p:has(+ hr) {
  margin-bottom: 0;
}
hr + p {
  margin-top: 0;
}


/* ==========================================================================
   ICONS "Accent 2" - the XD value cards

   Markup (rendered):
     .sc_icons.sc_icons_accent2 > .trx_addons_columns_wrap
       > .trx_addons_column-1_3 > .sc_icons_item
           > .sc_icons_icon
           + .sc_icons_item_details > .sc_icons_item_title
                                    + .sc_icons_item_description

   The theme's version (trx_addons.css:15998) is a pale card that turns a
   single accent colour on hover, with the description always showing. The
   design instead alternates two greens like a checkerboard, keeps only the
   icon and the title visible, and reveals the description on hover against
   a light green.

   The alternation keys off the COLUMN, not .sc_icons_item, because each item
   is wrapped in its own column div and only the columns are siblings.
   ========================================================================== */
.sc_icons.sc_icons_accent2 {
  --icon-dark:   #1F764D;
  --icon-lime:   #8CC63F;
  --icon-hover:  #D9F2B7;
  --icon-white:  #FFFFFF;
  --icon-gap-x:  30px;
  --icon-gap-y:  15px;
  --icon-card-h: 320px;
  --icon-pad:    28px;
  --icon-radius: 8px;

  /* The widget's own "Icon size" control adds .sc_icons_size_small|medium|large
     to the wrapper, and the theme sizes icons off those classes at exactly the
     specificity used below - so our rules win on source order alone and the
     control does nothing. The token has to react to the class instead.
     Medium is the design's 46px; small and large keep the theme's own
     2.6em / 3.6em / 4.6em ratios around it. */
  --icon-size:   46px;
}
.sc_icons.sc_icons_accent2.sc_icons_size_small {
  --icon-size: 33px;
}
.sc_icons.sc_icons_accent2.sc_icons_size_large {
  --icon-size: 59px;
}

/* Teal palette - the visitor-centre cards in the XD design.

   Add the class `icons_teal` to the widget in Elementor (Advanced > CSS
   Classes). Elementor puts that class on the .elementor-element wrapper,
   not on .sc_icons itself, so the first selector matches a descendant; the
   second covers the class landing directly on the widget (a shortcode
   `class=` attribute, or a future template that passes it through).

   Only the three palette tokens change - card backgrounds, icon colours,
   titles, chevrons and the hover swap all read from them already, so
   nothing else has to be restated. --icon-hover is #D9F2B7 rotated onto
   the teal hue at the same lightness, so the hover tile lifts exactly as
   far off its card as it does in the green palette. */
.icons_teal .sc_icons.sc_icons_accent2,
.sc_icons.sc_icons_accent2.icons_teal {
  --icon-dark:  #006F62;
  --icon-lime:  #00C3B6;
  --icon-hover: #B6F2ED;
}

/* The column system builds both gutters from padding on the column
   (trx_addons/css/__styles.css): padding-right for the horizontal one,
   pulled back by a negative margin on the wrap so the row still spans the
   full width, and padding-bottom via .columns_padding_bottom. Both are
   30px there; the design wants half that vertically, so the two are split
   into separate tokens. */
.sc_icons.sc_icons_accent2 .trx_addons_columns_wrap {
  margin-right: calc(-1 * var(--icon-gap-x));
}
.sc_icons.sc_icons_accent2 .trx_addons_columns_wrap > [class*="trx_addons_column-"] {
  padding-right: var(--icon-gap-x);
  padding-bottom: var(--icon-gap-y);
}

/* Card: icon pinned top, text block pinned bottom. When the description
   opens it grows downward from the title, pushing the title up inside the
   same card - which is how the hovered card reads in the design. */
.sc_icons.sc_icons_accent2 .sc_icons_item {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: var(--icon-card-h);
  padding: var(--icon-pad);
  border-radius: var(--icon-radius);
  background-color: var(--icon-lime);
  box-shadow: none;
  transition: background-color .3s ease-out;
}
.sc_icons.sc_icons_accent2 .trx_addons_columns_wrap > *:nth-child(even) .sc_icons_item {
  background-color: var(--icon-dark);
}
.sc_icons.sc_icons_accent2 .sc_icons_item:hover,
.sc_icons.sc_icons_accent2 .trx_addons_columns_wrap > *:nth-child(even) .sc_icons_item:hover {
  background-color: var(--icon-hover);
  box-shadow: none;
}

/* Icon: reversed against its card, dark green once the card goes light */
.sc_icons.sc_icons_accent2 .sc_icons_icon {
  color: var(--icon-dark);
}
.sc_icons.sc_icons_accent2 .trx_addons_columns_wrap > *:nth-child(even) .sc_icons_icon {
  color: var(--icon-lime);
}
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_icon,
.sc_icons.sc_icons_accent2 .trx_addons_columns_wrap > *:nth-child(even) .sc_icons_item:hover .sc_icons_icon {
  color: var(--icon-dark);
}
.sc_icons.sc_icons_accent2 .sc_icons_icon:before,
.sc_icons.sc_icons_accent2 .sc_icons_icon > span:before {
  font-size: var(--icon-size);
}
.sc_icons.sc_icons_accent2 .sc_icon_type_svg svg,
.sc_icons.sc_icons_accent2 .sc_icon_type_svg object {
  width: var(--icon-size);
  height: var(--icon-size);
}

/* The theme pushes the text down with a 4.4em margin; space-between does it */
.sc_icons.sc_icons_accent2 .sc_icons_icon + .sc_icons_item_details,
.sc_icons.sc_icons_accent2 .sc_icons_image + .sc_icons_item_details {
  margin-top: 0;
}

.sc_icons.sc_icons_accent2 .sc_icons_item_title,
.sc_icons.sc_icons_accent2 .sc_icons_item_title a {
  color: var(--icon-white);
  font-size: 22px;
  line-height: 1.25em;
  font-weight: 700;
}
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_item_title,
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_item_title a {
  color: var(--icon-dark);
}

/* Description: hidden until hover.
   grid-template-rows 0fr -> 1fr animates to the text's own height, so there
   is no magic max-height to keep in sync with the copy. The child needs
   overflow: hidden and min-height: 0 for the row to be able to shrink. */
.sc_icons.sc_icons_accent2 .sc_icons_item_description,
.sc_icons.sc_icons_accent2 .sc_icons_item_title + .sc_icons_item_description {
  display: grid;
  grid-template-rows: 0fr;
  margin-top: 0;
  opacity: 0;
  color: var(--icon-dark);
  font-size: 14px;
  line-height: 1.45em;
  transition: grid-template-rows .3s ease, opacity .25s ease, margin-top .3s ease;
}
.sc_icons.sc_icons_accent2 .sc_icons_item_description > * {
  overflow: hidden;
  min-height: 0;
}
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_item_description,
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_item_title + .sc_icons_item_description {
  grid-template-rows: 1fr;
  margin-top: .7em;
  opacity: 1;
  color: var(--icon-dark);
}

/* No title to hang the reveal on: a card that is only an icon and a
   description keeps the description visible. The template drops the <h4>
   when the title is empty, so on those cards the description is the first
   child of .sc_icons_item_details - titled cards never match. Its colour
   follows the title's treatment - white on the green tile, dark green once
   the tile lightens on hover - since here it is the card's headline text. */
.sc_icons.sc_icons_accent2 .sc_icons_item_details > .sc_icons_item_description:first-child {
  grid-template-rows: 1fr;
  opacity: 1;
  color: var(--icon-white);
}
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_item_details > .sc_icons_item_description:first-child {
  margin-top: 0;
  color: var(--icon-dark);
}


/* Link chevron.

   Markup is <a class="sc_icons_item_more_link"><span class="link_text">
   <span class="link_icon"></span></a>, last child of .sc_icons_item_details
   (tpl.default.php:158-163). The glyph lives in the .link_icon:before, so the
   icon changes there - font-size on the <a> does not reach it.

   \e836 is `icon-right`, the angle/chevron in the theme's fontello set; the
   theme's own default is \e9a4 (`icon-path-3443`), a solid arrow.

   Colours follow the title deliberately: white on the card, dark green once
   the card lightens on hover, so title and chevron read as one block on both
   the lime and the dark tiles. */
.sc_icons.sc_icons_accent2 .sc_icons_item .sc_icons_item_more_link {
  color: var(--icon-white);
  margin-top: .9em;
}
.sc_icons.sc_icons_accent2 .sc_icons_item:hover .sc_icons_item_more_link,
.sc_icons.sc_icons_accent2 .sc_icons_item .sc_icons_item_more_link:hover {
  color: var(--icon-dark);
}
.sc_icons.sc_icons_accent2 .sc_icons_item .sc_icons_item_more_link .link_icon:before {
  content: "\e836";
  font-size: 20px;
}

/* "Mai multe" / "View more" always shown. The theme slides .link_text in
   from text-indent:-110px on hover only (trx_addons.css:14086); here it sits
   beside the chevron at rest too, and takes the same colour change.
   Regular weight: the theme sets 700 on the whole link. */
.sc_icons.sc_icons_accent2 .sc_icons_item .sc_icons_item_more_link .link_text {
  font-weight: 400;
  opacity: 1;
  visibility: visible;
  text-indent: 0;
  margin-right: 6px;
}

/* Bottom of the card. The card is a flex column with space-between, so the
   details block already hugs the bottom whenever an icon sits above it - but a
   tile with no icon has details as its only child, and space-between then
   leaves it at the top (which is why the first tile's chevron sat under the
   title, mid-card). margin-top:auto pins it in both cases. */
.sc_icons.sc_icons_accent2 .sc_icons_item_details {
  margin-top: auto;
}

/* ==========================================================================
   TEAM BIO CARD - Elementor "Minimalist" (Link in Bio) styled as the team card
   Opt-in: add the CSS class `team-bio-card` to the widget.

   Field mapping - fill these in and nothing else:
     Identity image (style: Cover)  -> the portrait
     Bio > Heading                  -> name
     Bio > Title                    -> country
     Bio > Description              -> the short biography

   Elementor's widget (assets/css/widget-link-in-bio.min.css) is a 360px
   centred "link tree" card. Nearly all of it is driven by --e-link-in-bio-*
   custom properties, so most of this block just re-points those rather than
   overriding rules - the same trick as the mega menu. Only the handful of
   things with no variable behind them (text alignment, the portrait's crop,
   the rule under the country) are written as rules.

   The selector accepts the class either on the layout element itself, which
   is where this widget puts its own CSS Classes control, or on an ancestor,
   which is where Elementor puts the generic one - it is not obvious from the
   panel which control ends up where.
   ========================================================================== */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) {
  /* Fill the column instead of a fixed 360px card */
  --e-link-in-bio-container-width: 100%;
  --e-link-in-bio-content-width:   100%;
  --e-link-in-bio-content-align-h: stretch;
  --e-link-in-bio-content-align-v: flex-start;

  /* No card padding: the portrait runs to the card's edges. The widget's own
     rule widens the cover image by the inline gutter and pulls it back with a
     negative margin, so zeroing the gutter lines it up on its own. */
  --e-link-in-bio-gutter-block-start: 0px;
  --e-link-in-bio-gutter-block-end:   0px;
  --e-link-in-bio-gutter-inline:      0px;

  /* max-height on the portrait; the crop is set by aspect-ratio below */
  --e-link-in-bio-identity-image-cover-height: none;

  --e-link-in-bio-heading-color:     var(--theme-color-text_dark);
  --e-link-in-bio-title-color:       var(--carp-dark-green);
  --e-link-in-bio-description-color: var(--theme-color-text);

  --e-link-in-bio-icon-color: var(--carp-dark-green);
  --e-link-in-bio-icon-size:  18px;
  --e-link-in-bio-icon-gap:   10px 14px;

  --e-link-in-bio-ctas-background-color: var(--carp-lime);
  --e-link-in-bio-ctas-text-color:       var(--carp-white);
  --e-link-in-bio-ctas-border-radius:    0;
  --e-link-in-bio-ctas-gap:              10px;

  /* Same crop and corners as the sc_team_list cards */
  --team-thumb-ratio:  5 / 4;
  --team-thumb-radius: 6px;
}

/* Left-aligned, and in the site's own font rather than the widget's Poppins */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__content {
  font-family: inherit;
  text-align: left;
}

/* Portrait: a fixed crop so names line up across a row whatever the source
   image is. The element is a flex container and the img is flex:1 1 100%
   with object-fit: cover, so it only needs a height to fill. */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__identity {
  margin-block-end: 16px;
}
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__identity-image-cover {
  aspect-ratio: var(--team-thumb-ratio);
  border-radius: var(--team-thumb-radius);
}
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__identity-image-cover .e-link-in-bio__identity-image-element {
  width: 100%;
  height: 100%;
}

/* Name */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__heading {
  font-size: 16px;
  line-height: 1.3em;
  font-weight: 700;
}

/* Country - green, uppercase, with the rule under it */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__title {
  margin-block-start: 5px;
  padding-block-end: 9px;
  border-bottom: 1px solid var(--theme-color-bd_color);
  font-size: 13px;
  line-height: 1.3em;
  font-weight: 600;
  letter-spacing: .02em;
  text-transform: uppercase;
}

/* Biography */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__description {
  margin-block-start: 13px;
  font-size: 14px;
  line-height: 1.5em;
  font-weight: 400;
}

/* The widget ships with one icon and one CTA already in their repeaters, so
   both render whether or not anything was entered. Neither is in the team
   design - hidden here rather than deleted per widget, which would have to
   be repeated for every team member. Drop these two rules if a card ever
   does need them. */
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__icons,
:is(.team-bio-card.e-link-in-bio, .team-bio-card .e-link-in-bio) .e-link-in-bio__ctas {
  display: none;
}


/* ==========================================================================
   JOBS LIST - Blogger widget with the `jobs_list` template

   Markup: .sc_blogger_default_jobs_list
             > .sc_item_filters_wrap > .sc_item_filters > ul.sc_item_filters_tabs
             > .sc_blogger_columns_wrap > … > .sc_blogger_item
                 > .sc_blogger_item_header
                     > .sc_blogger_item_title
                     + .sc_blogger_item_excerpt
                     + .sc_blogger_item_button > a.item_more_link

   The filter tabs wear the same pills as the Elementor Tabs widget; both read
   the --tab-* tokens from :root. Different markup, so the rules cannot be
   shared, but the values are.
   ========================================================================== */
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--tab-gap);
  align-items: flex-start;   /* each pill sizes to its own label */
  /* The plugin reads "Filters titles position: Left" as "put the TITLE left",
     and its parent is justify-content: space-between - so the tabs get pushed
     to the other end by
     `.sc_item_filters_align_left .sc_item_filters_tabs { justify-content:
     flex-end }` (trx_addons/css/__styles.css). With no filters title in use
     that just right-aligns the pills. flex-grow lets the list use the full
     row instead of shrinking to its widest line. */
  justify-content: flex-start;
  flex: 1 1 auto;
  /* The same align_left rule also caps the list at max-width: 80%, to leave
     room for the title it assumes is there. There is no title, so the pills
     get the whole container. */
  max-width: none;
  margin: 0;
  padding: 0;
  list-style: none;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs > li {
  margin: 0;
  padding: 0;
  list-style: none;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs > li:before {
  display: none;   /* the theme puts a bullet on list items */
}
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs > li > a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-height: var(--tab-min-h);
  max-width: var(--tab-max-w);
  padding: var(--tab-pad-y) var(--tab-pad-x);
  border: 1px solid var(--tab-line);
  border-radius: var(--tab-radius);
  background-color: var(--carp-white);
  color: var(--tab-ink);
  font-family: var(--theme-font-p_font-family);
  font-size: 14px;
  line-height: 1.3em;
  font-weight: 500;
  text-align: center;
  white-space: normal;
  transition: color .25s ease, border-color .25s ease, background-color .25s ease;
}
/* The AJAX swap moves `active` between the anchors and
   `sc_item_filters_tabs_active` between the list items, so match both. */
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs > li > a.active,
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs > li.sc_item_filters_tabs_active > a {
  border-color: var(--tab-active-bg);
  background-color: var(--tab-active-bg);
  color: var(--tab-active-ink);
}
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_tabs > li > a:not(.active):hover {
  border-color: var(--tab-active-bg);
  color: var(--tab-active-bg);
}

/* Widths, per XD: the filter row spans its section container in full, while
   the positions below it occupy the left three quarters. `.sc_blogger_content`
   is the wrapper the template emits when columns = 1 (tpl.default.php:139) -
   with more than one column it would be `.sc_blogger_columns_wrap` instead. */
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters_wrap,
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters {
  width: 100%;
  max-width: none;
}
/* `.sc_item_filters_align_left` also draws a 2px rule under the whole filter
   block (__styles.css). The list below already separates itself with a
   hairline above each position, so the heavy line is redundant. */
.sc_blogger.sc_blogger_default_jobs_list .sc_item_filters {
  border-bottom: none;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_content {
  width: 75%;
  margin-left: auto;
  margin-right: auto;   /* the spare quarter splits evenly on both sides */
}
@media (max-width: 1023px) {
  /* Three quarters of a tablet column is too narrow to read a job in */
  .sc_blogger.sc_blogger_default_jobs_list .sc_blogger_content {
    width: 100%;
  }
}

/* The list itself: a rule above every position, so the group reads as rows */
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item {
  padding-top: 34px;
  border-top: 1px solid var(--theme-color-bd_color);
}
/* A domain with no positions (heart_child_jobs_list_empty()): one row in the
   same frame, in the excerpt's size */
.sc_blogger.sc_blogger_default_jobs_list .jobs_list_empty {
  margin: 0;
  padding-top: 34px;
  border-top: 1px solid var(--theme-color-bd_color);
  font-size: 16px;
  line-height: 1.6em;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_title {
  margin: 0 0 14px;
  font-size: 26px;
  line-height: 1.25em;
  font-weight: 700;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_excerpt {
  margin: 0;
  font-size: 16px;
  line-height: 1.6em;
}
/* "Mai multe detalii" is a filled button here, unlike the underlined link the
   news cards use - so the theme's text-link treatment is replaced outright. */
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_button {
  margin-top: 24px;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_button .item_more_link {
  display: inline-flex;
  align-items: center;
  padding: 14px 28px;
  border: none;
  border-radius: 0;
  background-color: var(--carp-lime);
  color: var(--carp-white);
  font-family: var(--theme-font-button_font-family);
  font-size: 15px;
  font-weight: var(--theme-font-button_font-weight);
  line-height: 1.2em;
  transition: background-color .25s ease;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_button .item_more_link:hover {
  background-color: var(--carp-dark-green);
  color: var(--carp-white);
}
/* The theme hides this label and slides it out on hover (trx_addons.css:27905
   sets visibility: hidden, opacity: 0 and text-indent: -110px) because its
   read-more is an icon that expands. Here the label is the button, so all
   three have to be undone or the button renders as an empty coloured box. */
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_button .item_more_link .link_text {
  visibility: visible;
  opacity: 1;
  text-indent: 0;
  margin: 0;
  color: inherit;
  border: none;
}
/* The theme's hover rules (:27919-27928) also add margin-right: 9px to the
   label - the room its sliding icon needs. Here that widens the button by
   9px whenever the row is hovered. Same fix as the news cards above: hold it
   at 0 for all three hover targets the theme uses. */
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item:hover .sc_blogger_item_button .item_more_link .link_text,
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_body:hover .sc_blogger_item_button .item_more_link .link_text,
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_button .item_more_link:hover .link_text {
  margin-right: 0;
}
.sc_blogger.sc_blogger_default_jobs_list .sc_blogger_item_button .item_more_link .link_icon {
  display: none;
}


/* ==========================================================================
   JOB APPLICATION FORM
   Appended to every job by heart_child_job_application_form(); the uploader
   markup (.codedropz-*, .dnd-*) comes from the Drag and Drop Multiple File
   Upload addon.
   ========================================================================== */
.job-application {
  --form-field-bg:     #F4F4F4;
  --form-field-radius: 999px;
  --form-field-h:      52px;
  --form-gap:          16px;
  --form-drop-line:    #C9C9C9;
}
.job-application__title {
  margin: 0 0 26px;
  font-size: 26px;
  line-height: 1.25em;
  font-weight: 700;
}
.job-application__fields {
  display: flex;
  flex-direction: column;
  gap: var(--form-gap);
}
.job-application .wpcf7-form-control-wrap {
  display: block;
}
.job-application input[type=text],
.job-application input[type=tel],
.job-application input[type=email] {
  width: 100%;
  height: var(--form-field-h);
  padding: 0 26px;
  border: none;
  border-radius: var(--form-field-radius);
  background-color: var(--form-field-bg);
  font-size: 16px;
  line-height: var(--form-field-h);
}
/* The volunteer form's domain select: the same pill as the inputs, with its
   own chevron.

   The theme hides every native <select> and has skin.js wrap it in
   <div class="select_container">, which paints its own chevron in :before /
   :after and restyles the select through `.select_container select` - a
   `background` shorthand and a `padding-right: 3em !important`, from a
   stylesheet enqueued AFTER this one. So the rules below address the wrapped
   select (two classes, which outranks the theme's one), the background and
   padding-right repeat the theme's !important since specificity cannot beat
   that, and the wrapper's two glyph pseudos are switched off. The bare
   `select` selector is there for the instant before skin.js has run, so
   nothing jumps. */
.job-application__label {
  display: block;
  margin: 6px 0 -4px;
  font-size: 15px;
  line-height: 1.4em;
  color: var(--theme-color-text);
}
.job-application select,
.job-application .select_container select {
  width: 100%;
  height: var(--form-field-h);
  padding: 0 26px;
  padding-right: 52px !important;
  border: none;
  border-radius: var(--form-field-radius);
  background: var(--form-field-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E") no-repeat right 24px center !important;
  font-size: 16px;
  line-height: var(--form-field-h);
  color: var(--theme-color-text);
  -webkit-appearance: none;
  appearance: none;
  cursor: pointer;
}
.job-application select:focus,
.job-application .select_container select:focus {
  background-color: var(--form-field-bg) !important;   /* theme sets a focus bg !important too */
  outline: 2px solid var(--carp-lime);
  outline-offset: -2px;
}
.job-application .select_container:before,
.job-application .select_container:after {
  display: none;
}
/* The closing notes under the job and volunteer forms' button */
.job-application__notes {
  margin-top: 32px;
  font-size: 13px;
  line-height: 1.45em;
  color: var(--theme-color-text);
}
.job-application__notes p {
  margin: 0 0 12px;
}
.job-application__notes p:last-child {
  margin-bottom: 0;
}
.job-application__notes a {
  color: var(--carp-lime);
}
.job-application__notes a:hover {
  color: var(--carp-dark-green);
}
.job-application input::placeholder {
  color: var(--theme-color-text);
  opacity: 1;
}

/* Drop zone */
.job-application .codedropz-upload-container {
  margin-top: var(--form-gap);
  padding: 44px 20px;
  border: 2px dashed var(--form-drop-line);
  border-radius: 6px;
  background-color: transparent;
  text-align: center;
}
.job-application .codedropz-upload-handler {
  border: none;
  padding: 0;
}
.job-application .codedropz-upload-inner {
  font-size: 16px;
  line-height: 1.5em;
  color: var(--theme-color-text_dark);
}
.job-application .codedropz-upload-inner .codedropz-btn-wrap a {
  color: var(--carp-dark-green);
}
/* Dragging a file over it */
.job-application .codedropz-upload-container.codedropz-dragover {
  border-color: var(--carp-lime);
  background-color: rgba(140, 198, 63, .06);
}
.job-application__hint {
  margin: 10px 0 0;
  font-size: 14px;
  line-height: 1.4em;
  color: var(--theme-color-text);
  text-align: center;
}

/* One row per file: name, size, progress, remove */
.job-application .dnd-upload-status {
  margin-top: 14px;
}
.job-application .dnd-upload-details {
  font-size: 15px;
}
.job-application .dnd-progress-bar span {
  background-color: var(--carp-lime);
}
.job-application .dnd-icon-remove {
  color: var(--theme-color-text);
}
.job-application .dnd-icon-remove:hover {
  color: var(--carp-dark-green);
}

.job-application__actions {
  margin-top: 28px;
  text-align: center;
}
/* The skin wraps every submit in <span class="wpcf7-submit-style"> and appends
   <span class="submit-style-in"> carrying a paper-plane glyph (skin.js:526),
   and colours it through `.wpcf7 .wpcf7-submit` - two classes, which outranks
   the plain input[type=submit] in the button block above. Hence the repeated
   class here, and the icon goes since the design has none. */
/* The submit button is two elements, not one. skin.js:526 wraps every
   .wpcf7-submit in <span class="wpcf7-submit-style"> and appends
   <span class="submit-style-in">; the theme then makes the real input
   transparent (contact-form-7.css:183) and paints the visible button on that
   trailing span, which also carries a paper-plane glyph in its :before and
   64px of left padding on the input to clear it.
   So the colour goes on the span, not the input - hiding the span removes the
   button altogether. The theme's own selectors are three classes deep and its
   stylesheet is enqueued AFTER the child one, hence the repeated class. */
.job-application.job-application .wpcf7-submit-style .submit-style-in {
  background-color: var(--carp-lime);
  color: var(--carp-white);
}
.job-application.job-application .wpcf7-submit-style:hover .submit-style-in,
.job-application.job-application .wpcf7-submit-style:focus .submit-style-in,
.job-application.job-application .wpcf7-submit-style:hover .wpcf7-submit + .submit-style-in,
.job-application.job-application .wpcf7-submit-style:focus .wpcf7-submit + .submit-style-in {
  background-color: var(--carp-dark-green);
  color: var(--carp-white);
}
/* No icon in the design, so the glyph goes and the label re-centres */
.job-application.job-application .wpcf7-submit-style .submit-style-in:before {
  display: none;
}
.job-application.job-application .wpcf7-submit-style .wpcf7-submit {
  padding: 17px 40px !important;   /* theme sets 64px on the left, !important */
  color: var(--carp-white);
}
/* Fallback for before skin.js has wrapped it (or if that changes) */
.job-application.job-application .wpcf7-submit {
  padding: 17px 40px;
  border: none;
  border-radius: 0;
  color: var(--carp-white);
}

/* CF7's own validation text.

   trx_addons hides every per-field message outright
   (`span.wpcf7-not-valid-tip { display: none }`, __styles-full.css) and the
   theme only puts it back for its own `.form-style-N` markup, which this form
   does not use. The result was a form that refused to submit while showing
   nothing but "One or more fields have an error" - the real message ("upload
   both the CV and the cover letter") was in the DOM but invisible.
   Two classes beat the plugin's tag+class, so no !important is needed. */
.job-application .wpcf7-not-valid-tip {
  display: block;
  margin-top: 8px;
  color: #FF5B4A;
}
.job-application .wpcf7-not-valid-tip,
.job-application .wpcf7-response-output {
  font-size: 14px;
  line-height: 1.4em;
}
/* The uploader's message belongs under the drop zone, level with the hint */
.job-application .wpcf7-form-control-wrap[data-name="cv-files"] .wpcf7-not-valid-tip {
  margin-top: 12px;
  text-align: center;
}

@media (max-width: 767px) {
  .job-application .codedropz-upload-container {
    padding: 28px 14px;
  }
  /* The label is long enough that the button outgrew the form: 40px of padding
     each side plus `white-space: nowrap` gave the input an intrinsic width of
     397px inside a 335px form. `width: 100%` alone did nothing about it - the
     wrapper span is inline-block, so it shrink-wrapped to that 397px and the
     input's 100% resolved against the overflowing parent. The wrapper has to be
     block-level first, and the label has to be allowed to wrap. */
  .job-application__actions .wpcf7-submit-style {
    display: block;
    width: 100%;
  }
  .job-application__actions .wpcf7-submit,
  .job-application.job-application .wpcf7-submit-style .wpcf7-submit {
    width: 100%;
    white-space: normal;
    padding-left: 16px !important;    /* theme sets the padding !important */
    padding-right: 16px !important;
  }
}

/* A job page borrows the theme's blog single template, which brings blog
   furniture with it. None of it belongs on a job posting. Comments are also
   closed in PHP so nothing is merely hidden while still accepting input.
   Volunteer positions (.single-voluntariat) render through the same template
   and get the same treatment. */
body.single-cpt_team .author_info,
body.single-cpt_team .nav-links-single,
body.single-cpt_team .comments_wrap,
body.single-voluntariat .author_info,
body.single-voluntariat .nav-links-single,
body.single-voluntariat .comments_wrap {
  display: none;
}
/* The title block comes with the blog byline attached ("12 hours ago", author,
   share). A job posting is not authored content, so the meta goes and the
   heading keeps its spacing. */
body.single-cpt_team .post_header_wrap .post_meta,
body.single-voluntariat .post_header_wrap .post_meta {
  display: none;
}
body.single-cpt_team .post_header_wrap .post_title,
body.single-voluntariat .post_header_wrap .post_title {
  margin-bottom: 0;
}


/* ==========================================================================
   CONTACT FORM (main) - CF7 form #5, rebuilt to the XD design

   Single column of pill fields, a rounded message box, a GDPR consent line
   and a lime submit. Deliberately parallel to the JOB APPLICATION FORM block
   above: same field metrics, same submit treatment, same reason for the
   validation-tip rule. The two blocks are kept separate rather than merged
   because the job form's submit needs a doubled-class selector that would not
   survive being folded into a shared :is() list.
   ========================================================================== */
.contact-form {
  --form-field-bg:     #F4F4F4;
  --form-field-radius: 999px;
  --form-field-h:      52px;
  --form-gap:          16px;
  --form-area-radius:  26px;
  --form-area-h:       300px;
}
.contact-form__fields {
  display: flex;
  flex-direction: column;
  gap: var(--form-gap);
}
.contact-form .wpcf7-form-control-wrap {
  display: block;
}
.contact-form input[type=text],
.contact-form input[type=tel],
.contact-form input[type=email] {
  width: 100%;
  height: var(--form-field-h);
  padding: 0 26px;
  border: none;
  border-radius: var(--form-field-radius);
  background-color: var(--form-field-bg);
  font-size: 16px;
  line-height: var(--form-field-h);
}
/* `.wpcf7 textarea { height: 20.9em }` in the theme's contact-form-7.css has
   the same weight and, on pages that enqueue it late (the donation page), wins;
   the extra class keeps the height ours. */
.contact-form textarea.wpcf7-textarea {
  display: block;
  width: 100%;
  height: var(--form-area-h);
  padding: 18px 26px;
  border: none;
  border-radius: var(--form-area-radius);
  background-color: var(--form-field-bg);
  font-size: 16px;
  line-height: 1.6em;
  resize: vertical;
}
.contact-form input::placeholder,
.contact-form textarea::placeholder {
  color: var(--theme-color-text);
  opacity: 1;
}

/* Consent line. The theme draws its own tick on a :before and hides the real
   box (style.css:3379); the design wants a plain square, so the input is shown
   and the decoration dropped. */
.contact-form__consent {
  margin-top: 22px;
}
.contact-form__consent .wpcf7-list-item {
  margin: 0;
}
.contact-form__consent label {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 15px;
  line-height: 1.5em;
  font-weight: 400;
  cursor: pointer;
}
.contact-form__consent input[type=checkbox] {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin: 3px 0 0;
  padding: 0;
  border: 1px solid var(--theme-color-bd_color);
  border-radius: 2px;
  background-color: var(--carp-white);
  appearance: auto;
  opacity: 1;
  position: static;
}
.contact-form__consent input[type=checkbox]:before,
.contact-form__consent input[type=checkbox]:after {
  display: none;
}
.contact-form__consent a {
  color: inherit;
  text-decoration: underline;
}
.contact-form__consent a:hover {
  color: var(--carp-dark-green);
}

/* Submit. As on the job form, skin.js:526 wraps the input and appends
   <span class="submit-style-in"> - that span is the visible button, the input
   itself is transparent, so the colour goes on the span and the paper-plane
   glyph in its :before is dropped. */
.contact-form__actions {
  margin-top: 28px;
}
.contact-form.contact-form .wpcf7-submit-style .submit-style-in {
  background-color: var(--carp-lime);
  color: var(--carp-white);
}
.contact-form.contact-form .wpcf7-submit-style:hover .submit-style-in,
.contact-form.contact-form .wpcf7-submit-style:focus .submit-style-in {
  background-color: var(--carp-dark-green);
  color: var(--carp-white);
}
.contact-form.contact-form .wpcf7-submit-style .submit-style-in:before {
  display: none;
}
.contact-form.contact-form .wpcf7-submit-style .wpcf7-submit {
  padding: 17px 40px !important;   /* theme sets 64px on the left, !important */
  color: var(--carp-white);
}
.contact-form.contact-form .wpcf7-submit {
  padding: 17px 40px;
  border: none;
  border-radius: 0;
  color: var(--carp-white);
}

/* trx_addons hides every per-field message (see the job form block for the
   full story); without this the form refuses to submit and says only "One or
   more fields have an error". */
.contact-form .wpcf7-not-valid-tip {
  display: block;
  margin-top: 8px;
  color: #FF5B4A;
}
.contact-form .wpcf7-not-valid-tip,
.contact-form .wpcf7-response-output {
  font-size: 14px;
  line-height: 1.4em;
}

@media (max-width: 767px) {
  .contact-form {
    --form-area-h: 220px;
  }
  .contact-form__actions .wpcf7-submit {
    width: 100%;
  }
}

/* The donor variant (tools/setup-donor-contact-form.php): the same form under
   the Filantrop / Moștenire / Partener corporate tabs of the donation pages,
   with the Careers fields. It sits inside a tab, so the message box is
   shorter and the form keeps its distance from the tab text above. */
.contact-form--donor {
  --form-area-h: 180px;
}
.donor_contact {
  margin-top: 32px;
}

/* The map beside the form. trx_addons sizes it with `.sc_googlemap > iframe
   { height: 100% }` (googlemap.css:19), but Complianz wraps the iframe in a
   .cmplz-placeholder-parent div to block it until consent, so the child
   selector misses and the iframe drops to the browser's default 150px.
   Before consent the same wrapper is the placeholder, and complianz.js gives
   it the placeholder image's aspect ratio (`.cmplz-placeholder-N { height }`,
   about 420px here), so it is held to the widget's height too. */
.sc_googlemap > .cmplz-placeholder-parent {
  height: 100%;
}
.sc_googlemap > .cmplz-placeholder-parent > iframe {
  width: 100%;
  height: 100%;
}


/* ==========================================================================
   LANGUAGE SWITCHER (header)

   The element is the theme's own `trx_sc_layouts_language`, overridden in
   skins/default/trx_addons/components/cpt/layouts/shortcodes/language/tpl.default.php
   to read Polylang and to render both languages side by side ("EN  RO")
   instead of as a dropdown.

   The template marks the active language `current-menu-item`. The theme does
   colour that (style.css:6867) but a header rule overrides it back to black,
   so the colour is restated here - together with the weight, because two
   two-letter codes side by side need more than a hue shift to read as
   "this one is active".

   Everything is line-height: 1. Left to the theme's menu line-height the row
   grows to 52px and the two languages fall out of line with each other.
   ========================================================================== */
.sc_layouts_language .sc_layouts_language_inline {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;   /* the theme's menu nav wraps; two codes must stay on one line */
  white-space: nowrap;
  line-height: 1;
  gap: .75em;          /* the only thing separating the two languages */
}

.sc_layouts_language .sc_layouts_language_inline > li.menu-item {
  display: flex;
  align-items: center;
  float: none;
  margin: 0;
  padding: 0;
  line-height: 1;
}

.sc_layouts_language .sc_layouts_language_inline > li.menu-item > a {
  padding: 0;
  font-weight: 400;   /* the theme's menu weight is 600, heavier than this needs */
}

.sc_layouts_language .sc_layouts_language_inline > li.current-menu-item > a,
.sc_layouts_language .sc_layouts_language_inline > li.current-menu-item > a:hover {
  /* !important because the header's own menu colour rule is itself !important
     (style.css:6862-6872) and would otherwise repaint this back to black. */
  color: var(--theme-color-text_link) !important;
  font-weight: 600;
}

/* The right-hand header column now carries three items (search, language,
   burger) where the theme planned for two, and
   `.sc_layouts_column_align_right .sc_layouts_item` puts 1.2em between each.
   Halving it below the tablet breakpoint keeps all three comfortably inside a
   360-405px viewport.

   Note when checking this: headless Chrome at `--window-size=420` lays the
   page out at ~489 CSS px, so max-width queries do not fire and the burger
   looks clipped. Measure in a genuinely narrow viewport instead - at 405px
   the row is 390px wide with all three items inside it. */
@media (max-width: 767px) {
  .sc_layouts_column_align_right .elementor-widget-trx_sc_layouts_language.sc_layouts_item {
    margin-left: .5em !important;   /* theme rule is .sc_x .sc_item:not():not() - 4 classes */
  }
  .sc_layouts_language .menu-item-title {
    font-size: 13px;
  }
  .sc_layouts_language .sc_layouts_language_inline {
    gap: .5em;
  }
}


/* ==========================================================================
   HEADER: no transparent overlay below desktop

   With "Header position: over", the theme runs the header transparent over the
   hero until the page is scrolled:

     style.css:5530-5533
     .header_position_over:not(.trx_addons_page_scrolled) .top_panel
       .sc_layouts_row[class*=scheme_] { background-color: transparent; }

   That works over a wide hero but not on a phone, where the logo, menu and
   language sit on whatever part of the photo happens to be behind them. Below
   the theme's tablet breakpoint the row keeps the background its own colour
   scheme gives it - the same one it fades to on scroll - so the header is a
   solid bar from the start.

   `background-color` rather than `background`, so a row that sets a gradient or
   image of its own is left alone. The leading `body` is what wins the cascade:
   it makes this 0,5,1 against the theme's 0,5,0, which matters because the
   child stylesheet is enqueued BEFORE the parent's and would otherwise lose on
   source order. No !important needed.
   ========================================================================== */
@media (max-width: 1023px) {
  body.header_position_over:not(.trx_addons_page_scrolled) .top_panel .sc_layouts_row[class*="scheme_"],
  body.header_position_over .top_panel .sc_layouts_row[class*="scheme_"]:not(.sc_layouts_row_fixed_on) {
    background-color: var(--theme-color-bg_color);
  }
}


/* ==========================================================================
   MENU DROPDOWNS: white panel, dark grey text

   The theme paints every dropdown from its "extra" palette - the dark half of
   the colour scheme:

     style.css:6901   background-color: var(--theme-color-extra_bg_color)  #0F0F0F
     style.css:6911   color: var(--theme-color-extra_text) !important      #BDBDBD
     style.css:6918   :hover -> var(--theme-color-extra_hover) !important  #FFFFFF

   Rather than restate those rules - two of them !important, and there are more
   like them for the panel menu - redefine the three tokens they read, scoped to
   the submenus. Custom properties inherit, so everything inside a dropdown
   follows automatically and the theme keeps its own selectors.

   `> li ul` limits this to submenu panels: the root <ul> of a menu is not a
   dropdown and keeps its own background. The dropdowns already carry a
   1px 1px 2px rgba(0,0,0,.2) shadow, so a white panel still separates from the
   page without adding a border.
   ========================================================================== */
.sc_layouts_menu_nav > li ul:not(.sc_item_filters_tabs) {
  --theme-color-extra_bg_color: #FFFFFF !important;
  --theme-color-extra_bg_hover: #F4F4F4 !important;
  --theme-color-extra_text:     #4A4A4A !important;   /* was #BDBDBD - the dropdown body   */
  --theme-color-extra_dark:     #1F1F1F !important;   /* was #FFFFFF - invisible on white  */
  --theme-color-extra_light:    #757575 !important;   /* was #afafaf - too pale on white   */
  --theme-color-extra_bd_color: #E6E6E6 !important;   /* was #353535 - a black divider     */
  --theme-color-extra_bd_hover: #CFCFCF !important;
  /* Fixed rather than var(--theme-color-text_link): inside the dark-scheme
     header row that token is the pale #8CC63F, which is weak on white. */
  --theme-color-extra_hover:    #1F764D !important;   /* was #FFFFFF - invisible on white  */
}


/* ==========================================================================
   MOBILE MENU: white panel, black and grey text, like the dropdowns

   templates/header-navi-mobile.php hard-codes `scheme_dark` on the panel, and
   every colour in it is read from the scheme's alter_* tokens (style.css,
   from line 9953): alter_bg_color for the panel, alter_text for the links,
   alter_dark for the open/current ones, the close cross, the social icons and
   the line above them. Same move as the dropdowns above: redefine the tokens
   on the panel, as the page's light scheme has them, with the background
   white like the desktop dropdown rather than the scheme's #F9F9F9.
   `.menu_mobile.scheme_dark` outweighs the theme's `.scheme_dark`, so no
   !important is needed.
   ========================================================================== */
.menu_mobile.scheme_dark {
  --theme-color-alter_bg_color: #FFFFFF;   /* was #161616 */
  --theme-color-alter_bg_hover: #F4F4F4;
  --theme-color-alter_bd_color: #E6E6E6;
  --theme-color-alter_text:     #4A4A4A;   /* was #D2D3D5 - the dropdowns' grey */
  --theme-color-alter_light:    #757575;
  --theme-color-alter_dark:     #000000;   /* was #FFFFFF */
  --theme-color-alter_link:     #1F764D;
  --theme-color-alter_hover:    #1F764D;
  --theme-color-text:           #707070;
  --theme-color-text_dark:      #000000;
  --theme-color-text_link:      #1F764D;
  --theme-color-text_light:     #757575;
  --theme-color-bg_color:       #FFFFFF;
  --theme-color-bd_color:       #E6E6E6;
}
/* Top level black, the levels below grey (alter_text), as on desktop */
.menu_mobile .menu_mobile_nav_area > ul > .menu-item > a {
  color: #000000;
}
/* Hover and the current page in the brand green, like the dropdowns' hover */
.menu_mobile .menu_mobile_inner a:hover,
.menu_mobile .menu_mobile_inner .current-menu-item > a,
.menu_mobile .menu_mobile_nav_area > ul > .menu-item > a:hover,
.menu_mobile .menu_mobile_nav_area > ul > .current-menu-item > a,
.menu_mobile .menu_mobile_nav_area > ul > .current-menu-ancestor > a {
  color: #1F764D;
}
/* The mega menu's section labels ("CE FACEM", "DESPRE NOI"…) are column
   headings on desktop and `href="#"` items here: they repeat the parent the
   visitor has just opened and lead nowhere. */
.menu_mobile .menu_mobile_nav_area .megamenu-label {
  display: none;
}


/* ==========================================================================
   IN-PAGE ANCHOR TARGETS

   Give an Elementor section a CSS ID and link to it with `#that-id` and the
   browser scrolls to it - `scroll-behavior: smooth` is already active on
   <html>, so no JS and no plugin is involved.

   What that misses is the sticky header: the row is `position: fixed`, so it
   is out of flow and the anchor lands underneath it, hiding the first ~79px
   of the section. scroll-margin-top reserves that space at the top of the
   target.

   The height is the theme's own --fixed-rows-height, which trx_addons keeps
   updated in JS (trx_addons.front.js) with the fixed rows PLUS the admin bar,
   so it stays right when logged in, and at breakpoints where the header is a
   different height. The fallback 0px covers the moment before that JS runs.

   Scoped to elements that carry an id rather than a blanket [id] so it only
   affects things that can actually be scroll targets.
   ========================================================================== */
.elementor-section[id],
.elementor-container[id],
.e-con[id],
.elementor-widget[id],
.elementor-element[id] {
  scroll-margin-top: calc(var(--fixed-rows-height, 0px) + 24px);
}


/* ==========================================================================
   HAND-WRITTEN TABLES (Elementor "HTML" widget)

   The skin styles every table on a page as a data table
   (skins/default/css/style.css): th gets a black background and white 19px
   text, td gets the grey body colour at 16px, odd rows get zebra striping,
   and __custom.css puts the H5 font on th only - so labels and values do not
   even share a family. A table written by hand in an HTML widget is already
   styled inline by whoever wrote it, so all of that chrome fights the markup.
   That is what turned the species fact sheet into black label cells with
   centred grey values instead of the flat two-column list in the design.

   Hand the table back to its own inline styles. The theme selectors are
   table:not(:where([class*="tribe-events"])) th|td - :where() contributes no
   specificity, so they weigh (0,0,2) and one class is enough to beat them.

   text-align has to be stated rather than just unset: the Elementor column
   around this widget is set to centre, and text-align inherits.
   ========================================================================== */
/* The cells stay transparent so the table paints one flat white panel
   behind them - the section this sits in is the theme's #F8F8F8. */
.elementor-widget-html table {
  background-color: #FFFFFF;
}
.elementor-widget-html table th,
.elementor-widget-html table td {
  background-color: transparent;
  color: inherit;
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
  letter-spacing: normal;
  text-align: left;
}
.elementor-widget-html table th {
  font-weight: 700;
}
/* Zebra striping: (0,1,3) in the skin, so this needs the extra class too */
.elementor-widget-html table > tbody > tr:nth-child(2n+1) > td {
  background-color: transparent;
}


/* ==========================================================================
   ICONS "Accent" - the XD project cards

   Markup (rendered):
     .sc_icons.sc_icons_accent > .trx_addons_columns_wrap
       > .trx_addons_column-1_2 > .sc_icons_item.sc_icons_item_linked.with_more
           > .sc_icons_icon.sc_icon_type_images > img.sc_icon_as_image
           + .sc_icons_item_details > .sc_icons_item_title
                                    + .sc_icons_item_more_link
                                    + .sc_icons_item_link

   The theme stacks that: picture on top, title under it, then a "Mai multe"
   link whose label is indented out of an overflow:hidden box and only slides
   in on hover. The design uses the uploaded picture AS the card - a rounded
   square with the title and the link over its bottom-left corner, in white,
   both permanently visible.

   The picture is pulled out of flow and pushed behind the text with
   z-index: -1 rather than being restated as a real background-image, so the
   <img> keeps its alt text, its lazy loading and its srcset. A negative
   z-index paints it above the card's own background but below in-flow
   content, which is exactly the layer this needs.

   .sc_icons_item_details deliberately stays IN flow. The whole-card link
   (.sc_icons_item_link) is absolutely positioned by the theme and resolves
   against its nearest positioned ancestor - that has to stay .sc_icons_item,
   or only the caption strip at the bottom would be clickable.
   ========================================================================== */
.sc_icons.sc_icons_accent {
  --acc-gap:    30px;
  --acc-pad:    24px;
  --acc-radius: 8px;
  --acc-ratio:  1 / 1;   /* the uploads are 459x464, so nothing is cropped */
  /* Reaches ~110px up the card, which covers the whole caption band -
     the title's top edge sits about 75px above the bottom. A negative
     spread thins an inset shadow rather than softening it, so the
     falloff here comes from the blur alone. */
  --acc-shadow: inset 0 -110px 70px 0 rgba(0, 0, 0, .6);
}

/* Tall variant - the "Ce facem" cards on the homepage.

   Add the class `icons_tall` to the widget in Elementor (Advanced > CSS
   Classes); same two-selector hook as the accent2 `icons_teal` palette,
   because Elementor puts the class on the .elementor-element wrapper.

   In the XD the five homepage cards are portrait, ~200x300, so the ratio
   is 2:3 rather than the square the two-column cards use. object-fit
   already crops the 459x464 uploads to that, trimming the sides. The
   shadow reaches further up to match: the longest title here ("Suport
   pentru dezvoltarea economiei locale") wraps to three lines, which with
   the link and the padding puts the caption's top edge ~140px above the
   bottom. */
.icons_tall .sc_icons.sc_icons_accent,
.sc_icons.sc_icons_accent.icons_tall {
  --acc-ratio:  2 / 3;
  --acc-shadow: inset 0 -150px 80px 0 rgba(0, 0, 0, .6);
}

/* Gutters. The theme zeroes both the wrap margin and the column padding for
   this layout, because its own cards are held apart by their 3.4em padding -
   which is the first thing the design drops. Same negative-margin trick as
   the accent2 cards: padding on the column, pulled back on the wrap so the
   row still spans the full width. */
.sc_icons.sc_icons_accent .trx_addons_columns_wrap {
  margin-right: calc(-1 * var(--acc-gap));
}
.sc_icons.sc_icons_accent .trx_addons_columns_wrap > [class*="trx_addons_column-"] {
  padding-right: var(--acc-gap);
  padding-bottom: var(--acc-gap);
}
/* ...except that a grid whose items fit one desktop row (the five "Ce facem"
   cards) is marked `columns_in_single_row`, and for that the theme zeroes the
   columns' bottom padding with rules weightier than the one above, and later
   (__plugins.css, and __responsive.css below 1280px). Below 1280px the cards
   wrap anyway (2 per row on tablets, 1 on phones), and the rows touched. A flex
   row-gap only opens between wrapped rows, so the single desktop row and the
   space under the grid are unchanged. */
.sc_icons.sc_icons_accent .trx_addons_columns_wrap.columns_in_single_row {
  row-gap: var(--acc-gap);
}

.sc_icons.sc_icons_accent .sc_icons_item {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  aspect-ratio: var(--acc-ratio);
  padding: var(--acc-pad);
  border-radius: var(--acc-radius);
  overflow: hidden;
  background-color: transparent;
  /* Required, not cosmetic. The picture below sits at z-index: -1, and a
     negative z-index escapes to the nearest ancestor stacking context - if
     that is not this card, the picture lands behind that ancestor's opaque
     background and vanishes. The card only forms one on its own while the
     theme's heart-fadeinup entrance animation is holding a translateY on it,
     so without this the cards paint for the length of the animation and then
     disappear. isolate pins the context for good, whatever the animation is
     doing. */
  isolation: isolate;
}
/* The theme fills the card with the link colour on hover and drops a shadow;
   there is no hover state for these in the design. */
.sc_icons.sc_icons_accent .sc_icons_item:hover {
  background-color: transparent;
  box-shadow: none;
}

/* The picture becomes the card face */
.sc_icons.sc_icons_accent .sc_icons_icon {
  position: absolute;
  z-index: -1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  margin: 0;
}
.sc_icons.sc_icons_accent .sc_icons_icon .sc_icon_as_image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* The inner shadow along the bottom edge, which is what keeps the white
   caption readable over a pale picture (the Bursele illustration is the
   worst case).

   It cannot go on .sc_icons_item: an inset shadow paints with the element's
   own background, and the picture - a negative z-index child - paints on top
   of that layer, so it would be hidden. It goes on a pseudo of the picture's
   own wrapper instead. That wrapper carries z-index: -1, which makes it a
   stacking context, so the pseudo paints above the <img> it contains while
   the whole wrapper stays below the in-flow caption. The item's overflow
   clips it to the rounded corners. */
.sc_icons.sc_icons_accent .sc_icons_icon:after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  box-shadow: var(--acc-shadow);
  pointer-events: none;
}
.sc_icons.sc_icons_accent .sc_icons_icon + .sc_icons_item_details {
  margin-top: 0;
}

.sc_icons.sc_icons_accent .sc_icons_item_title,
.sc_icons.sc_icons_accent .sc_icons_item_title a,
.sc_icons.sc_icons_accent .sc_icons_item:hover .sc_icons_item_title,
.sc_icons.sc_icons_accent .sc_icons_item:hover .sc_icons_item_title a {
  color: #FFFFFF;
  font-size: 22px;
  line-height: 1.25em;
  font-weight: 700;
}

/* "Mai multe". The label is permanently visible here, and the chevron reads
   before it - row-reverse flips the painted order without the template's
   <span> order having to change. \e836 is the same fontello chevron the
   accent2 cards use; the theme's default is \e9a4, a solid arrow. */
.sc_icons.sc_icons_accent .sc_icons_item .sc_icons_item_more_link,
.sc_icons.sc_icons_accent .sc_icons_item:hover .sc_icons_item_more_link {
  display: inline-flex;
  flex-direction: row-reverse;
  align-items: center;
  gap: 6px;
  margin-top: .5em;
  overflow: visible;
  color: #FFFFFF;
  font-size: 14px;
  line-height: 1.4em;
  font-weight: 400;
}
.sc_icons.sc_icons_accent .sc_icons_item .sc_icons_item_more_link .link_text {
  margin-right: 0;
  text-indent: 0;
  visibility: visible;
  opacity: 1;
}
.sc_icons.sc_icons_accent .sc_icons_item .sc_icons_item_more_link .link_icon {
  width: auto;
  height: auto;
  line-height: 1;
}
.sc_icons.sc_icons_accent .sc_icons_item .sc_icons_item_more_link .link_icon:before {
  content: "\e836";
  font-size: 14px;
}


/* ==========================================================================
   ELEMENTOR TOGGLE - the XD "Cum poți ajuta?" dropdowns

   Markup (rendered):
     .elementor-widget-toggle > .elementor-widget-container > .elementor-toggle
       > .elementor-toggle-item
           > .elementor-tab-title[role="button"]
               > .elementor-toggle-icon.elementor-toggle-icon-right
               + a.elementor-toggle-title
           + .elementor-tab-content.elementor-clearfix

   Elementor draws this as a plain list: a single hairline under each row
   (.elementor-tab-title { border-block-end }) and another under the open
   panel, with the chevron floated right. The design instead makes every item
   a bordered white box with rounded corners, the chevron centred against the
   title, and the panel opening inside that same box.

   So the border moves up to .elementor-toggle-item and is taken off the row
   and the panel. Those two carry the widget's own Style-tab values, which
   Elementor writes at (0,4,0) - `.elementor-30426 .elementor-element
   .elementor-element-bb543c6 .elementor-tab-title` - so the chain below goes
   through .elementor-widget-container to land at (0,5,0) and win outright,
   rather than leaning on load order.

   The chevron is centred by making the row a flex line. Elementor floats it
   right, which pins it to the first line and drifts off-centre as soon as a
   title wraps to two lines - which two of these three do. `order` puts it
   after the title without the template's span order having to change.
   ========================================================================== */
.elementor-widget-toggle {
  --tog-border: #8CC63F;
  --tog-radius: 4px;
  --tog-pad-x:  24px;
  --tog-pad-y:  20px;
}

/* The box. Item spacing stays on the widget's own "Space Between" control. */
.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item {
  border: 1px solid var(--tog-border);
  border-radius: var(--tog-radius);
  background-color: #FFFFFF;
  overflow: hidden;
  transition: box-shadow .2s ease-out;
}
/* Hover thickens the border. Growing border-width from 1px to 2px would
   reflow the box and nudge the title a pixel, so the second pixel is drawn
   as an inset shadow just inside the existing border instead - same result,
   nothing moves. It follows the border radius on its own. */
.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item:hover {
  box-shadow: inset 0 0 0 1px var(--tog-border);
}

.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-title {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: var(--tog-pad-y) var(--tog-pad-x);
  border: none;
  line-height: 1.3;
}
.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-title.elementor-active {
  padding-bottom: calc(var(--tog-pad-y) - 6px);
  border: none;
}

.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-toggle-title {
  order: 1;
  flex: 1 1 auto;
  color: var(--theme-color-text_dark);
  font-size: 16px;
  font-weight: 700;
}

/* float: none and width: auto undo the theme-independent Elementor defaults
   (.elementor-toggle-icon { width: 1em } / .-icon-right { float: right }). */
.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-toggle-icon {
  order: 2;
  flex: 0 0 auto;
  float: none;
  width: auto;
  color: var(--tog-border);
  font-size: 18px;
  line-height: 1;
}

/* The panel opens inside the box, so it keeps the row's side padding and
   drops the hairline Elementor puts under it. */
.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-content {
  padding: 0 var(--tog-pad-x) var(--tog-pad-y);
  border: none;
}


/* ==========================================================================
   TOGGLE AS A BUTTON + the Formular 230 embed

   The XD "Redirecționează pentru natură" page shows this toggle as a green
   button rather than a bordered row: clicking it opens the formular230.ro
   form full width underneath. Add the class `toggle_button` to the widget in
   Elementor (Advanced > CSS Classes) to get that variant; toggles without it
   keep the bordered-box look above.

   The chain repeats .elementor-widget-toggle so this lands one class above
   the boxed rules it has to undo, instead of relying on source order.

   The iframe sizing lives here, NOT in the widget's Content field. That
   field is a TinyMCE editor: it wraps a pasted <style> block in a <p> and
   inserts a literal <br /> after every line inside it, which makes the CSS
   parser discard everything after the first rule - including the height, so
   the frame collapses to the browser default 150px.
   ========================================================================== */
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item,
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item:hover {
  border: none;
  border-radius: 0;
  background-color: transparent;
  overflow: visible;
  box-shadow: none;
  /* The row below is inline-flex, so it is an inline-level box and centres
     the same way text does. */
  text-align: center;
}

/* The row becomes the button, so it shrinks to its text instead of spanning
   the column. Align it with the widget's own Alignment control, or wrap it
   in a centred column if the design wants it off the left edge. */
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-title,
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-title.elementor-active {
  display: inline-flex;
  padding: 14px 28px;
  border: none;
  border-radius: 4px;
  background-color: var(--tog-border);
  transition: background-color .2s ease-out;
}
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-title:hover {
  background-color: #7AB233;
}
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-toggle-title {
  color: #FFFFFF;
}
/* No chevron on the button in the design */
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-toggle-icon {
  display: none;
}
/* The panel is the embed, so it runs the full width with no side padding */
.toggle_button.elementor-widget-toggle .elementor-widget-container .elementor-toggle .elementor-toggle-item .elementor-tab-content {
  padding: 24px 0 0;
  text-align: start;   /* centring is for the button, not the panel */
}

/* The embed itself. Cross-origin, so it cannot report its own height and has
   to be given one; narrower viewports wrap the copy over more lines, so the
   frame gets TALLER as the screen gets smaller. These fit the current
   "campaign closed" notice and want raising once the form is back. */
.f230-embed {
  width: 100%;
  border-radius: 8px;
  overflow: hidden;
}
.f230-embed iframe {
  display: block;
  width: 100%;
  height: 1400px;
  border: 0;
}
@media (max-width: 1024px) { .f230-embed iframe { height: 1500px; } }
@media (max-width: 767px)  { .f230-embed iframe { height: 1700px; } }
@media (max-width: 479px)  { .f230-embed iframe { height: 1900px; } }


/* ==========================================================================
   NUMBERED STEPS - the XD "Cum redirecționezi" panel

   Add the class `steps_list` to a Text Editor widget (Advanced > CSS
   Classes) whose content is a plain <ol>. The panel itself - background,
   padding, radius - is a Section setting, not CSS.

   The numbers come from a CSS counter rather than being typed, so inserting
   or reordering a step renumbers the rest on its own. The <li> carries a
   left padding and the number is absolutely positioned into it, which keeps
   every step's text on one column no matter how many lines it runs to.

   The nested bullets deliberately do NOT hang: in the design a wrapped
   "Pasul 3" line returns to the same left edge as its bullet, so the marker
   is inline content (a ::before) rather than a list-marker.
   ========================================================================== */
.steps_list {
  --steps-num-size:   28px;
  --steps-num-color:  #3C3C3B;
  --steps-indent:     56px;
  --steps-gap:        20px;
}

.steps_list .elementor-widget-container ol {
  list-style: none;
  counter-reset: step;
  margin: 0;
  padding: 0;
}
.steps_list .elementor-widget-container ol > li {
  counter-increment: step;
  position: relative;
  margin: 0;
  padding-left: var(--steps-indent);
}
.steps_list .elementor-widget-container ol > li + li {
  margin-top: var(--steps-gap);
}
.steps_list .elementor-widget-container ol > li:before {
  content: counter(step) ".";
  position: absolute;
  left: 0;
  top: -.15em;            /* optical: sits the digit against the first line */
  color: var(--steps-num-color);
  font-size: var(--steps-num-size);
  font-weight: 700;
  line-height: 1.2;
}

/* Paragraphs inside a step are separate lines of one block, not spaced
   paragraphs - the design runs them tight together. */
.steps_list .elementor-widget-container ol > li p {
  margin: 0;
}
.steps_list .elementor-widget-container ol > li p + p {
  margin-top: .25em;
}

.steps_list .elementor-widget-container ol > li ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.steps_list .elementor-widget-container ol > li ul > li {
  margin: 0;
  padding: 0;
}
.steps_list .elementor-widget-container ol > li ul > li:before {
  content: "• ";
}

/* ==========================================================================
   SINGLE POST HEADER - centred title

   There is no theme option for this: title alignment is baked into whichever
   `single_style` is active, and style-6 leaves the header left
   (templates/single-styles/style-6.css centres only the featured image and the
   audio player). The styles that DO centre - 2, 5, 7 - also move the title into
   a banner above the cover image, which is not the layout the design asks for.

   Scoped to blog posts: job pages borrow the same template
   (heart_child_job_single_template) and keep their left-aligned heading.
   ========================================================================== */
body.single-post .post_header_single {
  text-align: center;
}

/* ==========================================================================
   POST TAGS + SHARE ROW - the strip under the cover image (XD article page)

   Markup from heart_child_post_tags_share():

     .post_tags_share
       .post_tags_share__tags   > a (one per tag, no separator)
       .post_tags_share__share
         .post_tags_share__label
         .socials_share.socials_type_block > .social_items > a.social_item
                                              > .social_icon > .icon-*

   The row is a direct child of <article>, between .post_header_wrap and
   .post_content, so it already sits in the content column.
   ========================================================================== */
.post_tags_share {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--tag-row-gap);
  margin: var(--tag-row-space) 0;
  padding-bottom: var(--tag-row-space);
  border-bottom: 1px solid var(--tab-line);
}

.post_tags_share__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--tag-gap);
  /* Take the free space so the share block stays pinned right even when there
     are no tags at all. */
  flex: 1 1 auto;
}

/* Tag pills. The filter-pill shape from elsewhere on the site, always in the
   "active" colours - a tag here is a link, not a state - and smaller, hence
   its own --tag-* sizing. */
.post_tags_share__tags a {
  display: inline-flex;
  align-items: center;
  padding: var(--tag-pad-y) var(--tag-pad-x);
  border: none;
  border-radius: var(--tab-radius);
  background-color: var(--tab-active-bg);
  color: var(--tab-active-ink);
  font-size: 0.7647rem;   /* 13/17 */
  line-height: 1.2em;
  text-decoration: none;
  transition: background-color .2s ease;
}
.post_tags_share__tags a:hover,
.post_tags_share__tags a:focus {
  background-color: var(--carp-lime);
  color: var(--tab-active-ink);
}

.post_tags_share__share {
  display: flex;
  align-items: center;
  gap: var(--tag-icon-gap);
  flex: 0 0 auto;
}

.post_tags_share__label {
  color: var(--theme-color-text_light);
  font-size: 0.7647rem;   /* 13/17 */
  font-weight: 600;
  letter-spacing: 1px;
  text-transform: uppercase;
}

/* The plugin lays the icons out inline with its own margins; a flex row with a
   gap is what the design shows. */
.post_tags_share .socials_share .social_items {
  display: flex;
  align-items: center;
  gap: var(--tag-icon-gap);
}
.post_tags_share .socials_share .social_item {
  margin: 0;
}

/* Outlined circles instead of the theme's filled discs. The rule that fills
   them is `.socials_share.socials_type_block .social_icon` plus a hover pair
   in skins/default/css/style.css:1691 - both two classes deep, so the extra
   .post_tags_share here is enough to win without !important. */
.post_tags_share .socials_share.socials_type_block .social_icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--tag-icon-size);
  height: var(--tag-icon-size);
  margin: 0;
  border: 1px solid var(--tab-line);
  border-radius: 50%;
  background-color: transparent;
  color: var(--theme-color-text_dark);
  font-size: 0.9412rem;   /* 16/17 */
  line-height: 1;
  transition: border-color .2s ease, background-color .2s ease, color .2s ease;
}
.post_tags_share .socials_share.socials_type_block .social_icon:hover,
.post_tags_share .socials_share.socials_type_block .social_icon:focus,
.post_tags_share .socials_share.socials_type_block .social_item:hover .social_icon {
  border-color: var(--carp-dark-green);
  background-color: var(--carp-dark-green);
  color: var(--carp-white);
}

/* Tags and share stack on their own rows once they stop fitting side by side.
   1023px is the theme's tablet breakpoint, used elsewhere in this file. */
@media (max-width: 1023px) {
  .post_tags_share {
    align-items: flex-start;
  }
}

/* ==========================================================================
   NEWS ARCHIVE - the "Noutăți" / "News" pages (XD "Vești din Munții Făgăraș")

   Both pages are Elementor: a stretched hero section, then a listing section
   holding a heading, the [carpathia_news_search] box and one Blogger widget.

   The Blogger widget renders BOTH the filter pills and the grid, in one AJAX
   container - which is why there is a single widget rather than a separate
   "featured post" one. Its tabs only ever re-render their own widget, so a
   second widget could not be driven by the same pills. The featured post is
   therefore the first grid cell, widened here.
   ========================================================================== */
:root {
  --news-hero-max:   680px;   /* how far the standfirst runs before wrapping */
  --news-gap:        30px;
}

/* --- hero ---------------------------------------------------------------
   The section carries the photo, overlay and padding from Elementor; this
   only handles the type, which the design sets left-aligned over the image. */
.news_hero__title .elementor-heading-title {
  font-size: 3.2941rem;    /* 56/17 */
  line-height: 1.15em;
  margin: 0 0 0.35em;
}
.news_hero__standfirst {
  max-width: var(--news-hero-max);
}
.news_hero__standfirst p {
  margin: 0;
  font-size: 1.0588rem;    /* 18/17 */
  line-height: 1.5em;
}
@media (max-width: 767px) {
  .news_hero__title .elementor-heading-title { font-size: 2.2353rem; }
}

/* --- heading and search on one row --------------------------------------
   The three widgets are siblings in the column's widget-wrap, so the wrap
   becomes the flex row: heading takes the free space, the search sits at the
   end, and the Blogger widget is forced onto its own full-width line. */
/* The row is selected by what it CONTAINS, not by a class on the section:
   Elementor registers `_css_classes` in includes/widgets/common-base.php, so
   only widgets can carry a custom class - a class set on a section or column
   is silently dropped. `:has()` gets us the widget's parent instead.

   Where :has() is unsupported the three widgets simply stack, which is a
   readable fallback rather than a broken layout. */
.news_archive .elementor-widget-wrap:has(> .news_listing) {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--news-gap);
}
/* Elementor sets `.elementor-widget-wrap > .elementor-element { width: 100% }`,
   which puts every widget on its own row - so the width has to be released
   here or the heading and the search box can never share a line. */
.news_archive .elementor-widget-wrap:has(> .news_listing) > .elementor-widget-heading {
  flex: 1 1 auto;
  width: auto;
  margin: 0;
}
.news_archive .elementor-widget-wrap:has(> .news_listing) > .news_search_wrap {
  flex: 0 0 auto;
  width: auto;
  margin: 0;
}
.news_archive .elementor-widget-wrap:has(> .news_listing) > .news_listing {
  flex: 0 0 100%;
  width: 100%;
  margin: 0;
}

/* --- search box ---------------------------------------------------------- */
.news_search {
  width: fit-content;
  position: relative;
  display: flex;
  align-items: center;
}
/* `input.` and not just the class: the skin styles `input[type="search"]`,
   which outranks a lone class and would leave the box borderless. */
.news_search input.news_search__field {
  width: 260px;
  max-width: 100%;
  padding: 10px 44px 10px 18px;
  border: 1px solid var(--tab-line);
  border-radius: var(--tab-radius);
  background: var(--carp-white);
  font-size: 0.8235rem;    /* 14/17 */
  line-height: 1.2em;
}
.news_search input.news_search__field:focus {
  border-color: var(--carp-dark-green);
  outline: none;
}
/* The button sits inside the field's right padding.
   Selector is deeper than it looks like it needs to be: the skin paints every
   `form button` with the lime CTA background, which otherwise turns this into
   a green block. */
.news_search .news_search__submit,
.news_listing_section .news_search .news_search__submit {
  position: absolute;
  right: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: none;
  color: var(--theme-color-text_dark);
  cursor: pointer;
  transition: color .2s ease;
}
.news_search .news_search__submit:hover,
.news_search .news_search__submit:focus,
.news_listing_section .news_search .news_search__submit:hover,
.news_listing_section .news_search .news_search__submit:focus {
  color: var(--carp-dark-green);
  background: none;
}

/* --- filter pills -------------------------------------------------------
   Same shape as the jobs-list filters above; those rules cannot be shared
   because the wrappers differ, but the --tab-* tokens are.

   The news and stories archives DO share these: different cards, identical
   pill bar. One rule set rather than a copy, so the two cannot drift. */
:is(.news_listing, .stories_listing) .sc_item_filters {
  margin-bottom: var(--news-gap);
}
:is(.news_listing, .stories_listing) .sc_item_filters_tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--tab-gap);
  align-items: flex-start;   /* each pill sizes to its own label */
  justify-content: flex-start;
  max-width: none;
  margin: 0;
  padding: 0;
  list-style: none;
}
:is(.news_listing, .stories_listing) .sc_item_filters_tabs > li {
  margin: 0;
  padding: 0;
}
:is(.news_listing, .stories_listing) .sc_item_filters_tabs > li:before {
  display: none;             /* the skin puts a bullet on every list item */
}
:is(.news_listing, .stories_listing) .sc_item_filters_tabs > li > a {
  display: inline-flex;
  align-items: center;
  min-height: var(--tab-min-h);
  max-width: var(--tab-max-w);
  padding: var(--tab-pad-y) var(--tab-pad-x);
  border: 1px solid var(--tab-line);
  border-radius: var(--tab-radius);
  color: var(--tab-ink);
  font-size: 0.8235rem;      /* 14/17 */
  line-height: 1.2em;
  text-decoration: none;
  transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}
/* trx_addons marks the active tab on the <a> and, mid-AJAX, on the <li>. */
:is(.news_listing, .stories_listing) .sc_item_filters_tabs > li > a.active,
:is(.news_listing, .stories_listing) .sc_item_filters_tabs > li.sc_item_filters_tabs_active > a {
  border-color: var(--tab-active-bg);
  background-color: var(--tab-active-bg);
  color: var(--tab-active-ink);
}
:is(.news_listing, .stories_listing) .sc_item_filters_tabs > li > a:not(.active):hover {
  border-color: var(--carp-dark-green);
  color: var(--carp-dark-green);
}

/* --- the grid: first post full width, the rest in three ------------------
   The widened cell is :first-child, not a fixed post id, so it follows
   whatever the active filter and page put first.

   Excluded on .notices_listing. The announcements archive reuses this whole
   block for its pills, cards and dates by carrying both classes, but its design
   has a uniform three-column grid with no featured post - so it opts out here
   rather than needing a second block to undo four rules. */
.news_listing:not(.notices_listing) .trx_addons_columns_wrap > .trx_addons_column-1_3:first-child {
  flex: 0 0 100%;
  width: 100%;
  max-width: 100%;
}
/* Featured cell: the same stacked order as every other card - image first,
   then date, headline and excerpt beneath it - only wider.
   The photo is cropped to a banner ratio: at full container width an
   uncropped 890x664 thumbnail would stand about 900px tall and push the rest
   of the archive off the first screen. */
/* The WRAPPER has to be widened too, not just the image. The skin leaves
   `.post_featured` as an inline-block sized to the thumbnail's own width
   (890px, from heart-thumb-square), so `width:100%` on the <img> resolves
   against 890px and the photo stops well short of the cell - which reads as a
   second, empty column beside it. */
.news_listing:not(.notices_listing) .trx_addons_columns_wrap > .trx_addons_column-1_3:first-child .sc_blogger_item_featured {
  display: block;
  width: 100%;
  max-width: 100%;
}
.news_listing:not(.notices_listing) .trx_addons_columns_wrap > .trx_addons_column-1_3:first-child .sc_blogger_item_featured img {
  width: 100%;
  aspect-ratio: 16 / 7;
  object-fit: cover;
}
.news_listing:not(.notices_listing) .trx_addons_columns_wrap > .trx_addons_column-1_3:first-child .sc_blogger_item_title {
  font-size: 1.4706rem;   /* 25/17 - the h3 step */
}
/* The featured excerpt would otherwise run the full page width as one long
   line; the design keeps it to a readable measure. */
.news_listing:not(.notices_listing) .trx_addons_columns_wrap > .trx_addons_column-1_3:first-child .sc_blogger_item_excerpt {
  max-width: 46em;
}

/* --- published date ------------------------------------------------------
   Class comes from the renderer: "sc_blogger_item_meta post_{$zone}", so the
   'meta_date' zone lands as `post_meta_date`. The "Publicat în" label in front
   of it is added in PHP - see heart_child_news_date_label(). */
.news_listing .sc_blogger_item_meta.post_meta_date {
  margin: 0 0 0.35em;
}
.news_listing .sc_blogger_item_meta.post_meta_date .post_meta_item,
.news_listing .sc_blogger_item_meta.post_meta_date a {
  color: var(--theme-color-text_light);
  font-size: 0.7647rem;   /* 13/17 */
  line-height: 1.3em;
  border: none;
}

/* --- the theme's page padding ------------------------------------------
   `.page_content_wrap` is padded on every page, which leaves a white band
   above a stretched hero. Scoped to the body class from
   heart_child_news_archive_body_class() so no other page flattens. */
.news_archive .page_content_wrap {
  padding-top: 0;
}

/* --- "Mai multe" link ----------------------------------------------------
   Markup is <a class="item_more_link"><span class="link_text">Mai multe</span>
   <span class="link_icon"></span></a>. The skin deliberately hides the label
   and shows only an arrow glyph:
     heart/skins/default/plugins/trx_addons/trx_addons.css:27905
       .link_text { text-indent: -110px; visibility: hidden; }
     ...:27894
       .link_icon:before { content: "\e9a4"; font-family: "fontello"; }
   The design wants the opposite - visible green label with a chevron in front
   - so the label is restored and the arrow span dropped. Same treatment as the
   "Citeste" link further up this file; the rules cannot be shared because the
   two Blogger layouts have different wrapper classes.

   The selectors are long on purpose: the skin's own rules are four classes
   deep, so chaining the two classes on the widget wrapper reaches five and
   wins without !important.

   Colours come from the :root tokens, NOT the --card-* ones used by the
   "Citeste" block - those are scoped to that widget wrapper and would resolve
   to nothing here. */
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button {
  margin: 0;
}
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button .item_more_link {
  display: inline-flex;
  align-items: center;
  padding: 0;
  border: 0;
  background: none;
  color: var(--carp-dark-green);
  font-size: 0.8235rem;   /* 14/17 */
  font-weight: 600;
  text-decoration: none;
  overflow: visible;      /* the skin sets overflow:hidden, which clips the label */
  transition: color .2s ease;
}
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button .item_more_link:hover {
  color: var(--carp-lime);
  background: none;
}
/* Restore the label the skin parks 110px to the left, invisible. */
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button .item_more_link .link_text {
  visibility: visible;
  opacity: 1;
  text-indent: 0;
  margin: 0;
  color: inherit;
}
/* The skin's hover rules still fire and add margin-right:9px to the label,
   which would shift the text sideways on hover now that it is always shown. */
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button .item_more_link:hover .link_text,
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item:hover .sc_blogger_item_button .item_more_link .link_text {
  margin-right: 0;
}
/* Drop the skin's trailing arrow glyph - the design has one chevron, on the left. */
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button .item_more_link .link_icon {
  display: none;
}
/* Chevron drawn from borders rather than an icon font: no dependency on which
   glyph set is loaded, and it inherits the link colour on hover. As a ::before
   on a flex container it is the first flex item, so it sits left of the text. */
.sc_blogger.sc_blogger_default_news_card .sc_blogger_item_button .item_more_link:before {
  content: '';
  flex: 0 0 auto;
  width: 6px;
  height: 6px;
  margin-right: 10px;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
  transform: rotate(45deg);
}

/* ==========================================================================
   RELATED BLOCK - "Ultimele ... adăugate" under a single post

   One block, four sections: news, announcements, PoveȘtiri and Rapoarte. Only
   the heading row is styled here - the cards are the news_card template
   carrying the archives' own classes, so everything from the image down is
   already covered by the NEWS ARCHIVE rules above and nothing is repeated.

   Scoped to .carp_related, which every section carries; each also carries its
   own class (.news_related, .notices_related, ...) purely as a hook, in case one
   of them ever needs to differ.
   ========================================================================== */

/* Heading left, "see all" pinned right, on one baseline.
   Same recipe as the news archive's heading/search row, without the :has()
   indirection - that was only needed because Elementor drops a class set on a
   section, and this markup comes from PHP. */
.carp_related .carp_related__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.5rem var(--news-gap);
  margin-bottom: var(--news-gap);
}
.carp_related .carp_related__title {
  flex: 1 1 auto;
  margin: 0;
}
.carp_related .carp_related__all {
  flex: 0 0 auto;
}

/* The same border-drawn chevron link as the cards' "Mai multe", so the two read
   as one family. Not shared with those selectors: they are five classes deep in
   order to out-specify the skin, and this link has no skin rule to beat. */
.carp_related .carp_related__all {
  display: inline-flex;
  align-items: center;
  color: var(--carp-dark-green);
  font-size: 0.8235rem;   /* 14/17 */
  font-weight: 600;
  text-decoration: none;
  transition: color .2s ease;
}
.carp_related .carp_related__all:hover,
.carp_related .carp_related__all:focus {
  color: var(--carp-lime);
}
.carp_related .carp_related__all:before {
  content: '';
  flex: 0 0 auto;
  width: 6px;
  height: 6px;
  margin-right: 10px;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
  transform: rotate(45deg);
}

/* Card titles one step down from the section heading.
   The renderer emits them as h5, but the theme sizes h5 the same as the h3 this
   block's own heading uses, so a card title came out as large as "Latest news"
   above it - and news headlines are long enough to run six or more lines at
   that size. 20/17 sits a step under the widened news-archive card (25/17) and
   the story tile (24/17), keeping the house scale.

   Scoped to .carp_related so the archives keep the sizes they were designed
   with; only the related block changes. */
.carp_related .sc_blogger_item_title {
  font-size: 1.1765rem;   /* 20/17 */
  line-height: 1.3;
}

/* On a narrow screen the link wraps under the heading and sits left, rather
   than being pushed to a lonely right edge. */
@media (max-width: 479px) {
  .carp_related .carp_related__title {
    flex: 0 0 100%;
  }
}

/* ==========================================================================
   STORIES ARCHIVE - PoveȘtiri din Munții Făgăraș
   ==========================================================================
   Two pieces the other archives do not have: a full-bleed green band carrying
   the newest issue above the year tabs, and a grid of photo tiles with the
   issue name and a button centred over the image.

   The pill bar is shared with the news archive - see "filter pills" above.
   ========================================================================== */

/* --- the featured band ---------------------------------------------------
   Full-bleed out of Elementor's content column. The section is already
   stretched, but the widget inside it still sits in the padded column, so the
   band paints itself edge to edge and re-pads its own content. */
.stories_featured {
  background-color: var(--carp-dark-green);
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  padding: 3.5rem calc(50vw - 50%);
}
.stories_featured__inner {
  display: flex;
  gap: 3.5rem;
  align-items: center;
  max-width: 1170px;
  margin: 0 auto;
}
/* The cover is a portrait-ish magazine render; letting it take half the band
   and cropping to a wide ratio keeps the band a predictable height whatever
   the issue's artwork happens to be. */
.stories_featured__cover {
  flex: 0 0 56%;
  display: block;
  line-height: 0;
}
.stories_featured__cover img {
  width: 100%;
  height: auto;
  display: block;
}
.stories_featured__body {
  flex: 1 1 auto;
  color: #FFFFFF;
}
.stories_featured__title {
  color: #FFFFFF;
  font-size: 1.8824rem;   /* 32/17 */
  line-height: 1.25;
  margin: 0 0 1rem;
}
.stories_featured__text {
  color: #FFFFFF;
  opacity: 0.9;
  font-size: 0.8235rem;   /* 14/17 - the design sets this small against the cover */
  line-height: 1.6;
  margin: 0 0 1.75rem;
}
/* The band is already dark green, so the button is the lighter accent rather
   than the usual dark-on-light. */
.stories_featured__button {
  display: inline-block;
  padding: 0.75em 2em;
  border-radius: 3px;
  background-color: #6CB33F;
  color: #FFFFFF;
  font-weight: 600;
  text-decoration: none;
  transition: background-color 0.2s ease;
}
.stories_featured__button:hover,
.stories_featured__button:focus {
  background-color: #FFFFFF;
  color: var(--carp-dark-green);
}

@media (max-width: 767px) {
  .stories_featured__inner {
    display: block;
  }
  .stories_featured__cover {
    margin-bottom: 1.75rem;
  }
  .stories_featured__title {
    font-size: 1.4706rem;
  }
}

/* --- the tiles -----------------------------------------------------------
   Unlike the news cards these carry nothing outside the image: the title and
   the button sit over the photo, in the plugin's middle-centre overlay zone
   (div.post_info_mc, from the 'mc' key in the story_card layout). */
/* The WRAPPER has to be forced to block and full width, exactly as the news
   featured cell does: the skin leaves `.post_featured` an inline-block sized to
   the thumbnail's own width (890px, from heart-thumb-square), so inside a
   quarter-width column the image overflows and the overlay lands off the tile.

   The ratio lives on the wrapper, not the image, so the tile keeps its shape
   whatever size WordPress hands back. */
.stories_listing .sc_blogger_item_featured {
  position: relative;
  display: block;
  width: 100%;
  max-width: 100%;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  border-radius: 2px;
}
.stories_listing .sc_blogger_item_featured img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.4s ease;
}
.stories_listing .sc_blogger_item:hover .sc_blogger_item_featured img {
  transform: scale(1.04);
}
/* The skin's own hover mask would sit between the photo and the overlay. */
.stories_listing .sc_blogger_item_featured .mask {
  display: none;
}
/* A scrim, because the covers are photographs and white text over an
   unpredictable image is otherwise unreadable. */
.stories_listing .sc_blogger_item_featured:after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0, 0, 0, 0.15) 0%, rgba(0, 0, 0, 0.45) 100%);
  pointer-events: none;
}
/* The overlay fills the tile and centres its contents.
   `transform: none` is the load-bearing line. The skin centres this zone the
   classic way - top/left 50% plus translate(-50%, -50%) - so simply stretching
   it to the four edges leaves the translate in place, and the box gets shifted
   up and left by half its own size: it renders as a half-size rectangle in the
   tile's top-left corner, with the title and button inside it. The longhands
   are spelled out rather than `inset` for the same reason - the skin sets its
   own longhands, which beat a shorthand at equal specificity. */
.stories_listing .sc_blogger_item_featured > .post_info_mc {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  transform: none;
  width: auto;
  height: auto;
  max-width: none;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.25rem;
  margin: 0;
  padding: 1.25rem;
  text-align: center;
  pointer-events: none;   /* the full-tile link underneath stays clickable */
}
.stories_listing .sc_blogger_item_featured > .post_info_mc .sc_blogger_item_title {
  margin: 0;
  font-size: 1.4118rem;   /* 24/17 */
  line-height: 1.2;
  color: #FFFFFF;
}
.stories_listing .sc_blogger_item_featured > .post_info_mc .sc_blogger_item_title a {
  color: #FFFFFF;
  text-decoration: none;
}
/* The outline button from the design.
   The renderer emits a.item_more_link > span.link_text (+ an empty
   span.link_icon), NOT the sc_button markup the other widgets use - so the
   selectors below are the more-link ones, and the skin's trick of hiding the
   label with a negative text-indent has to be undone here too. */
/* The label needs the SAME specificity trick the "Citeste" link above needed:
   the skin hides it with `.sc_blogger .sc_blogger_item_button .item_more_link
   .link_text { text-indent:-110px; visibility:hidden }`, four classes deep, so
   a four-class selector of ours only ties. Chaining the two classes the widget
   wrapper carries gets to five without !important. */
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item_button {
  margin: 0;
}
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item_button .item_more_link {
  pointer-events: auto;
  display: inline-block;
  padding: 0.6em 1.6em;
  border: 1px solid rgba(255, 255, 255, 0.9);
  border-radius: 2px;
  background: transparent;
  color: #FFFFFF;
  font-size: 0.8235rem;
  line-height: 1.4;
  text-indent: 0;
  text-decoration: none;
  transition: background-color 0.2s ease, color 0.2s ease;
}
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item_button .item_more_link .link_text {
  visibility: visible;
  opacity: 1;
  text-indent: 0;
  margin: 0;
  color: inherit;
}
/* The skin's hover rules add margin-right to the label, which would make the
   text jump now that it is always visible. */
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item_button .item_more_link:hover .link_text,
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item:hover .sc_blogger_item_button .item_more_link .link_text {
  margin: 0;
}
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item_button .item_more_link .link_icon {
  display: none;
}
.sc_blogger.sc_blogger_default_story_card .sc_blogger_item_button .item_more_link:hover {
  background-color: #FFFFFF;
  color: var(--carp-dark-green);
}
/* Two overlay links the renderer lays over the tile: the plugin's own
   .post_link and the theme's aria-hidden .link. Both go to the same PDF. */
.stories_listing .sc_blogger_item_featured > .post_link,
.stories_listing .sc_blogger_item_featured > .link {
  position: absolute;
  inset: 0;
  z-index: 1;
}

/* Four across, per the design. The plugin's columns are inline-block with a
   negative-margin gutter, so the gap is set on the child's padding. */
.stories_listing .trx_addons_columns_wrap > .trx_addons_column-1_4 {
  margin-bottom: var(--news-gap);
}

@media (max-width: 1023px) {
  .stories_listing .sc_blogger_item_featured > .post_info_mc .sc_blogger_item_title {
    font-size: 1.1765rem;
  }
}


/* ==========================================================================
   FOOTER - the XD footer, bottom half of layout "Footer Main" (#18430)

   Built by tools/build-footer.php as two sections classed .footer_main and
   .footer_bottom; the newsletter and press bands above them are hand-made
   and untouched. Everything below is scoped to those two classes so nothing
   leaks into the bands. Colours and type live here, not in widget settings.

   Markup: .footer_main  > col .footer_logo / .footer_follow / .footer_socials
                               / .footer_credits
                         > 4 cols .widget.wp-widget-nav_menu (h5.widget_title +
                           ul.menu) - Elementor's wrapper for the WordPress
                           Navigation Menu widget, not the sidebar's .widget_nav_menu
                         > col .footer_cta_text / .footer_donate (trx_sc_button)
           .footer_bottom > .footer_copyright + .footer_legal (.widget_nav_menu)
   ========================================================================== */

.footer_main,
.footer_bottom {
  color: var(--carp-white);
}

/* Logo + "follow us" + socials */
.footer_main .footer_logo {
  margin-bottom: 28px;
}
.footer_main .footer_follow {
  margin-bottom: 18px;
  font-size: 15px;
  line-height: 1.5;
}
.footer_main .footer_follow p {
  margin: 0;
}
/* Elementor's Social Icons: its per-item colour settings are left alone and
   the circle is painted here, so the four read as one set. */
.footer_main .footer_socials .elementor-social-icons-wrapper {
  display: flex;
  justify-content: flex-start;
  gap: 12px;
}
.footer_main .footer_socials .elementor-social-icon {
  width: 40px;
  height: 40px;
  margin: 0;
  background-color: var(--carp-lime);
  color: var(--carp-white);
  transition: background-color .25s ease;
}
.footer_main .footer_socials .elementor-social-icon:hover {
  background-color: var(--carp-dark-green);
}
.footer_main .footer_socials .elementor-social-icon i,
.footer_main .footer_socials .elementor-social-icon svg {
  color: var(--carp-white);
  fill: var(--carp-white);
  font-size: 16px;
  width: 16px;
  height: 16px;
}

/* The photo credits under the socials (tools/add-footer-photo-credits.php):
   small print, a step back from the white text around it. */
.footer_main .footer_credits {
  margin-top: 28px;
  font-size: 12px;
  line-height: 1.5;
  color: rgba(255, 255, 255, .7);
}
.footer_main .footer_credits p {
  margin: 0;
}

/* The four link columns: lime uppercase heading, white links. The theme
   gives widget lists a marker and an indent; both go. */
.footer_main .wp-widget-nav_menu .widget_title {
  margin: 0 0 14px;
  color: var(--carp-lime);
  font-size: 13px;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.footer_main .wp-widget-nav_menu ul.menu,
.footer_main .wp-widget-nav_menu ul.menu li {
  margin: 0;
  padding: 0;
  list-style: none;
}
.footer_main .wp-widget-nav_menu ul.menu li:before,
.footer_main .wp-widget-nav_menu ul.menu li a:before {   /* the theme's 6px dot sits on the link */
  display: none;
}
.footer_main .wp-widget-nav_menu ul.menu li + li {
  margin-top: 8px;
}
.footer_main .wp-widget-nav_menu ul.menu li a {
  color: var(--carp-white);
  font-size: 14px;
  line-height: 1.5;
  text-decoration: none;
  transition: color .2s ease;
}
.footer_main .wp-widget-nav_menu ul.menu li a:hover {
  color: var(--carp-lime);
}
/* The last column has no heading in the XD; keep its list level with the
   others' lists by giving it the room a heading would take. */
.footer_main .wp-widget-nav_menu .widget_title:empty {
  display: none;
}

/* The call to action */
.footer_main .footer_cta_text {
  margin-bottom: 22px;
  font-size: 15px;
  line-height: 1.5;
}
.footer_main .footer_cta_text p {
  margin: 0;
}
/* Same button as the header and the jobs list */
.footer_main .footer_donate .sc_button {
  display: inline-flex;
  align-items: center;
  padding: 14px 32px;
  border: none;
  border-radius: 0;
  background-color: var(--carp-lime);
  color: var(--carp-white);
  font-family: var(--theme-font-button_font-family);
  font-size: 15px;
  font-weight: var(--theme-font-button_font-weight);
  line-height: 1.2em;
  letter-spacing: 0;
  text-transform: none;
  transition: background-color .25s ease;
}
.footer_main .footer_donate .sc_button:hover {
  background-color: var(--carp-dark-green);
  color: var(--carp-white);
}

/* Bottom bar: copyright | legal links, one line */
.footer_bottom > .elementor-container > .elementor-column > .elementor-widget-wrap {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 0;
  padding: 22px 15px;   /* lines the copyright up with the logo above (measured) */
  border-top: 1px solid rgba(255, 255, 255, .15);
}
.footer_bottom .elementor-widget {
  width: auto;
  margin: 0;
}
.footer_bottom .footer_copyright,
.footer_bottom .footer_legal ul.menu li a {
  color: rgba(255, 255, 255, .8);
  font-size: 13px;
  line-height: 1.5;
}
.footer_bottom .footer_copyright p {
  margin: 0;
}
.footer_bottom .footer_legal .widget_title {
  display: none;
}
.footer_bottom .footer_legal ul.menu {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 24px;
  margin: 0 0 0 20px;
  padding: 0 0 0 20px;
  list-style: none;
  border-left: 1px solid rgba(255, 255, 255, .4);   /* the "|" in the XD */
}
.footer_bottom .footer_legal ul.menu li {
  margin: 0;
  padding: 0;
  list-style: none;
}
.footer_bottom .footer_legal ul.menu li:before,
.footer_bottom .footer_legal ul.menu li a:before {
  display: none;
}
.footer_bottom .footer_legal ul.menu li a {
  text-decoration: none;
  transition: color .2s ease;
}
.footer_bottom .footer_legal ul.menu li a:hover {
  color: var(--carp-lime);
}

/* Below the desktop layout the six columns wrap (100 / 50 / 50 / 50 / 50 / 100,
   set on the columns by the build script) - give the stacked blocks air. */
@media (max-width: 1024px) {
  .footer_main .elementor-column > .elementor-widget-wrap {
    padding-bottom: 32px;
  }
  .footer_main .elementor-column:last-child > .elementor-widget-wrap {
    padding-bottom: 0;
  }
}
@media (max-width: 767px) {
  .footer_bottom .footer_legal ul.menu {
    margin-left: 0;
    padding-left: 0;
    border-left: 0;
    width: 100%;
  }
}

/* ==========================================================================
   FOOTER PRESS STRIP - "Featured in:" and the logos that loop under it

   Built by tools/build-press-slider.php as one section classed .footer_press,
   in both footer layouts (#18430 en, #36391 ro). The band used to be a
   headings row plus five columns of logos; it is now the heading and a strip
   of thirteen logos that never stops.

   The motion is here rather than in a slider widget: the theme's Swiper steps
   from slide to slide and its pause is not settable from these shortcodes, so
   a continuous glide is a marquee instead. The markup is one row of logos
   twice over, and the animation moves the pair by exactly half its width -
   at the end of the cycle the second copy stands where the first began, so
   the reset is invisible and the loop never seams.

   Markup: .press_marquee > .press_marquee_inner
             > .press_marquee_track x2 (the second aria-hidden, the clone)
               > a / span .press_marquee_item + --<slug> > img
   ========================================================================== */

.footer_press .press_marquee {
  overflow: hidden;
  /* Fade the logos out at both edges so they do not butt against the page. */
  -webkit-mask-image: linear-gradient(to right, transparent, #000 60px, #000 calc(100% - 60px), transparent);
          mask-image: linear-gradient(to right, transparent, #000 60px, #000 calc(100% - 60px), transparent);
}
.footer_press .press_marquee_inner {
  display: flex;
  width: max-content;
  animation: press_marquee 60s linear infinite;
}
/* Hover pauses the strip: without it a logo slides out from under the cursor
   and the links are next to unclickable. */
.footer_press .press_marquee:hover .press_marquee_inner,
.footer_press .press_marquee:focus-within .press_marquee_inner {
  animation-play-state: paused;
}
@keyframes press_marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

.footer_press .press_marquee_track {
  display: flex;
  align-items: center;
  gap: 64px;
  padding-right: 64px;   /* the same gap again, between the row and its clone */
}

.footer_press .press_marquee_item {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
}
/* The logos run from 7:1 wordmarks to square marks, so they are capped by box
   rather than set to one height: each fills what it can of 150x44 and keeps
   its own proportions.

   The height is stated, not auto: the Pro TV logo is an SVG with a viewBox and
   no width/height of its own, and with both dimensions auto Chrome lays it out
   at zero. One fixed dimension resolves the other from the ratio, and
   object-fit keeps every logo inside its box either way. */
.footer_press .press_marquee_item img {
  display: block;
  width: auto;
  height: 44px;
  max-width: 150px;
  object-fit: contain;
  opacity: 0.4;
  transition: opacity .3s ease;
}
.footer_press a.press_marquee_item:hover img,
.footer_press a.press_marquee_item:focus-visible img {
  opacity: 1;
}

/* One logo sized on its own, and trimmed in place.

   The cap above is cut for wordmarks. The Bambi award is not one: it is an
   emblem, and at the common 44px height it came out 59px wide against the
   wordmarks' 150, with the lettering inside the wreath unreadable.

   The file also carries its own padding, which is why it read high even
   with the row centring it: the mark is flush against the top edge of the
   163x121 canvas and leaves 17.8% of the height empty at the bottom, and
   14.1% / 17.1% of the width empty at the left and right (measured by
   rendering the SVG at 400px and reading its ink bounds). The negative
   margins take that dead space back out, so what the row centres and what
   the 64px gap measures from is the mark itself - the same thing
   press_logo_trim() does to the PNGs on import, which this one skipped by
   coming straight from the media library.

   Net of the padding the mark shows at 95x84, the size Andrei marked up on
   the footer. Every item carries a press_marquee_item--<slug> class, so any
   other logo that needs this can be tuned the same way. */
.footer_press .press_marquee_item--bambi img {
  height: 102px;
  max-width: 140px;
  margin: 0 -23px -18px -19px;
}

/* The heading keeps the type of the band it replaces. */
.footer_press .sc_item_title {
  margin-bottom: 40px;
}

@media (max-width: 767px) {
  .footer_press .press_marquee_track {
    gap: 40px;
    padding-right: 40px;
  }
  .footer_press .press_marquee_item img {
    height: 36px;
    max-width: 120px;
  }
  /* the same trim, at the height the smaller row wants */
  .footer_press .press_marquee_item--bambi img {
    height: 83px;
    max-width: 115px;
    margin: 0 -19px -15px -16px;
  }
  .footer_press .sc_item_title {
    margin-bottom: 28px;
  }
}

/* Motion is decoration here: with it turned off the strip becomes a plain
   centred set of logos, all thirteen visible and still. */
@media (prefers-reduced-motion: reduce) {
  .footer_press .press_marquee_inner {
    animation: none;
    width: 100%;
  }
  .footer_press .press_marquee_track {
    flex-wrap: wrap;
    justify-content: center;
    row-gap: 28px;
  }
  .footer_press .press_marquee_track[aria-hidden="true"] {
    display: none;
  }
  .footer_press .press_marquee_item img {
    opacity: 1;
  }
}

/* ==========================================================================
   PROJECT PAGES - the completed projects brought over from the old site

   Built by tools/import-old-projects.php in the house style (slideshow hero,
   trx_sc_title sections, text-editor copy), so most of a page is the theme's
   own styling. Only the pieces those pages have that no other page does are
   styled here, each hooked on a class the script sets:

     .project_section       every content section - green titles
     .project_logos         inner row of funder logos above "Scopul proiectului"
     .project_item          one numbered item: "A.1" | title + text
     .project_downloads     the list of PDFs under "Documente"
     .project_news_wrap     the news_card Blogger for the project's category
     .project_smallprint    the hub's funding small print

   plus #toc_menu, the in-page navigation trx_addons builds from the Anchor
   widget in each section, shown here as a fixed left list (body.project_page,
   set by heart_child_project_body_class()).

   Colours come from the :root tokens above.
   ========================================================================== */

/* --- section titles in the primary green ---------------------------------- */
.project_section .sc_title .sc_item_title {
  color: var(--carp-dark-green);
}

/* --- funder logos --------------------------------------------------------
   Old site: three 1/3 columns with the logo in the first. Here: one column per
   logo, sized down and left-aligned so a lone logo does not stretch. */
.project_logos {
  margin-bottom: 1.5rem;
}
.project_logos .elementor-widget-image {
  text-align: left;
}
.project_logos .elementor-widget-image img {
  max-height: 80px;
  width: auto;
}

/* --- numbered items ------------------------------------------------------
   The label ("A.1", "3") sits in a narrow column beside the text, which the
   script sets at 16/84; a rule above each item separates the list, as the old
   page had. The label is the heading face in the site green. */
.project_item {
  border-top: 1px solid #d9d9d9;
  padding-top: 1.25rem;
  margin-top: 1.25rem;
}
.project_item .project_item__label .elementor-heading-title {
  color: var(--carp-dark-green);
  margin: 0;
  line-height: 1.2;
}
.project_item .elementor-widget-text-editor h4 {
  margin: 0 0 0.6em;
  font-size: 1rem;
  line-height: 1.4;
}
.project_item .elementor-widget-text-editor p:last-child {
  margin-bottom: 0;
}
@media (max-width: 767px) {
  .project_item .elementor-column {
    width: 100%;
  }
  .project_item .project_item__label {
    margin-bottom: 0.5rem;
  }
}

/* --- documents -----------------------------------------------------------
   The old page drew a PDF icon per row; here a chevron like the "see all"
   link of the related block, so the list reads as the site's own. */
ul.project_downloads {
  list-style: none;
  margin: 0;
  padding: 0;
}
ul.project_downloads li {
  padding: 0.75rem 0;
  border-bottom: 1px solid #dbdbdb;
}
ul.project_downloads li:before {
  display: none;
}
ul.project_downloads a {
  display: inline-flex;
  align-items: flex-start;
  color: var(--carp-dark-green);
  font-weight: 600;
  text-decoration: none;
  transition: color .2s ease;
}
ul.project_downloads a:hover,
ul.project_downloads a:focus {
  color: var(--carp-lime);
}
ul.project_downloads a:before {
  content: '';
  flex: 0 0 auto;
  width: 6px;
  height: 6px;
  margin: 0.55em 10px 0 0;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
  transform: rotate(45deg);
}

/* --- news ----------------------------------------------------------------
   Cards are the news_card template carrying the archives' classes, so the
   date, "Mai multe" link and the uniform three-column grid come from the
   NEWS ARCHIVE block. Titles a step under the section heading, as in the
   related block. */
/* The title widget has no bottom margin of its own; the grid and the document
   list need a step down from it. */
.project_news_wrap,
.project_downloads_wrap {
  margin-top: 1.5rem;
}
.project_news_wrap .sc_blogger_item_title {
  font-size: 1.1765rem;   /* 20/17 */
  line-height: 1.3;
}
.project_news_all {
  margin-top: 1.5rem;
}

/* --- galleries (LIFE CARPATHIA's Galerie media) --------------------------
   Elementor's Image Gallery widget, three columns, lightbox on. The caption
   above each is an <h4> in the text-editor before it. */
.project_gallery {
  margin-top: 0.5rem;
  margin-bottom: 2rem;
}
/* WordPress lays the figures out as floats with a side margin only, which
   gives gaps between columns and none between rows; a grid gives one gap. */
.project_gallery .gallery {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin: 0;
}
.project_gallery .gallery .gallery-item {
  /* WordPress prints #gallery-N .gallery-item { width: 33%; margin-top: 10px }
     inline - id rules - so min-width (which beats width) fills the cell and
     the margin needs !important; Elementor caps the item at 33.33% too. */
  min-width: 100%;
  max-width: none;
  margin: 0 !important;
  padding: 0;
  float: none;
}
.project_gallery .gallery .gallery-icon,
.project_gallery .gallery .gallery-icon a {
  display: block;
  padding: 0;
  margin: 0;
  line-height: 0;
}
/* No captions: what the attachments carry is camera junk ("hdr", "sdr") and
   one photo credit; the lightbox still shows the title. The widget setting
   gallery_display_caption=none does the same on a rebuilt page. */
.project_gallery .gallery .gallery-caption {
  display: none;
}
/* ...and not in the lightbox either: its footer shows the attachment title
   ("DSCN8125"). The lightbox is an Elementor kit setting shared by every
   gallery on the site, so it is hidden here per page rather than turned off
   for all. */
body.project_page .elementor-lightbox .elementor-slideshow__footer {
  display: none;
}
@media (max-width: 767px) {
  .project_gallery .gallery {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
.project_gallery .gallery-item img {
  border: 0 !important;   /* the same inline id rule draws a 2px grey border */
  border-radius: 0;
  aspect-ratio: 3 / 2;   /* the tag carries width/height attributes: height must be auto for this to apply */
  height: auto;
  object-fit: cover;
  width: 100%;
}
.project_section .elementor-widget-text-editor h4 {
  margin-top: 1.6em;
}
.project_section .elementor-widget-text-editor h4:first-child {
  margin-top: 0;
}

/* --- small print ---------------------------------------------------------- */
.project_smallprint {
  color: var(--theme-color-text_light);
  font-size: 0.8235rem;   /* 14/17 */
  line-height: 1.5;
}

/* --- in-page navigation: the sticky left list ---------------------------
   trx_addons appends <div id="toc_menu"> to <body> with one .toc_menu_item per
   Anchor widget - an .toc_menu_icon (a dot) and a .toc_menu_description (the
   title, positioned off-screen and slid in on hover). The theme keeps the
   whole thing display:none unless its own side panel is on.

   js/project-nav.js moves the menu into .project_nav_rail, an absolutely
   positioned strip inside the page's Elementor wrapper that starts where the
   hero ends and runs to the end of the content (the script measures both).
   Inside it the menu is sticky, so it appears beside the first section, just
   under the cover, holds under the header while scrolling and stops with the
   last section - what the old site's "fastnav" did, plus the stick. Scroll
   and highlight behaviour are the plugin's own (anchor.js).

   No hover styling on purpose: the skin slides these labels in from off-screen
   on hover (it designed them as tooltips for its dots), which is why every
   property the hover rule touches is pinned here in both states.

   Hidden below 1280px: the 3/4 content column leaves ~260px each side at
   1400, and the list would sit on the copy any narrower. */
body.project_page .elementor[data-elementor-type="wp-page"] {
  position: relative;   /* the rail is positioned against the page wrapper */
}
body.project_page .project_nav_rail {
  position: absolute;
  left: clamp(16px, 2.5vw, 40px);
  width: 190px;
  z-index: 100;   /* under the header (the theme's sticky header is 1000+) */
  pointer-events: none;   /* the strip is invisible; only the list takes clicks */
}
body.project_page #toc_menu {
  display: block;
  position: sticky;
  top: 140px;   /* under the sticky header */
  left: auto;
  width: auto;
  margin: 0;
  padding-top: 40px;   /* same step down from the cover as the first section's logos */
  pointer-events: auto;
}
body.project_page #toc_menu .toc_menu_item {
  margin: 0 0 0.6em;
}
body.project_page #toc_menu .toc_menu_item:last-child {
  margin-bottom: 0;
}
body.project_page #toc_menu .toc_menu_icon {
  display: none;
}
body.project_page #toc_menu .toc_menu_description,
body.project_page #toc_menu .toc_menu_item:hover .toc_menu_description {
  position: static;
  display: flex;
  align-items: flex-start;
  top: auto;
  right: auto;
  opacity: 1;
  white-space: normal;
  margin: 0;
  color: var(--theme-color-text_light);
  font-size: 0.8235rem;   /* 14/17 */
  line-height: 1.35;
  text-decoration: none;
  transition: none;
}
body.project_page #toc_menu .toc_menu_description:before {
  content: '';
  flex: 0 0 auto;
  width: 12px;
  height: 2px;
  margin: 0.55em 10px 0 0;
  background: currentColor;
}
body.project_page #toc_menu .toc_menu_item_active .toc_menu_description,
body.project_page #toc_menu .toc_menu_item_active:hover .toc_menu_description {
  color: var(--carp-dark-green);
}
body.project_page #toc_menu .toc_menu_item_active .toc_menu_description:before {
  width: 20px;
}
/* anchor.js marks every section that overlaps the viewport as active, so two
   entries can be green at once; only the LAST active one is shown as such. */
body.project_page #toc_menu .toc_menu_item_active:has(~ .toc_menu_item_active) .toc_menu_description {
  color: var(--theme-color-text_light);
}
body.project_page #toc_menu .toc_menu_item_active:has(~ .toc_menu_item_active) .toc_menu_description:before {
  width: 12px;
}
@media (max-width: 1279px) {
  body.project_page .project_nav_rail {
    display: none;
  }
}

/* ==========================================================================
   TITLE WIDGET SUBTITLE - sentence case
   The theme sets the Title widget's subtitle (.sc_item_subtitle, XD
   standfirst under a heading) in 14px bold uppercase with 1.8px tracking
   (__plugins.css). The site does not want the uppercase anywhere; size,
   weight and tracking stay the theme's. Same specificity, loaded later. */
.sc_item_subtitle {
  text-transform: none;
}

/* Community relations (en 30213 / ro 36257): the standfirst under each
   section heading reads as the first line of the description - same face,
   size and leading as the description (.sc_item_descr = body p), in black.
   Page-scoped because the same widget field is a number caption on the
   company page (28,570 ha / "of forest under full protection"), which keeps
   the theme's small bold style. The widgets set the grey through Elementor's
   Secondary colour, which Elementor emits per widget as
   `.elementor-30213 .elementor-element.elementor-element-xxx .sc_item_subtitle`
   (0,4,0); the .elementor-element hop below makes this (0,4,1) so it wins
   without !important. */
body.page-id-30213 .elementor-element .sc_title .sc_item_subtitle,
body.page-id-36257 .elementor-element .sc_title .sc_item_subtitle {
  font-family: var(--theme-font-p_font-family);
  font-size: var(--theme-font-p_font-size);
  font-weight: var(--theme-font-p_font-weight);
  line-height: var(--theme-font-p_line-height);
  letter-spacing: var(--theme-font-p_letter-spacing);
  opacity: 1;
  color: #000000;
}

/* ==========================================================================
   MAP SWAP - the project-area map opening into a detail map

   Set up by tools/style-map-swap.php, which puts the class `map_swap` on the
   image widget of both homepages (#23786 en, #29232 ro) and turns the
   trx_addons image effect off.

   That effect was "Swap": a curtains.js shader that blended the two maps
   through a displacement map picked at random on render
   (trx_addons/addons/image-effects/image-effects.php:126-134). It is a warp,
   not a fade, which is what made the change feel abrupt - the mix() under it
   was already clean (image-effects.js:2181-2233). The addon's effect list has
   no fade and no zoom (image-effects.php:111-125), so the effect could not be
   dialled down; it came out and the change is done here instead.

   The second map is drawn as a layer over the first rather than as a second
   <img>, because the widget renders one image and the addon's JS was what
   used to inject the other. It is decorative - the map that carries the alt
   text is the one in the markup. The layer is in the page from the start at
   opacity 0, so the file is fetched on load and the first hover does not
   flash. The url() is root-relative on purpose: it has to survive the move
   off carpathia.coc.

   WHAT THE MOVE IS

   The green patch on the Romania map opens out into the detail map of the
   same ground: the detail grows out of the patch while the Romania map pushes
   in towards it and fades. Both layers therefore turn about that patch, whose
   place was measured off harta-proiect-A4.png rather than guessed - the green
   pixels sit in x 323..407, y 271..327 of 723x511, so their centre is
   50.5% x 58.5%. The base map fills the box exactly (both are 1.415), which
   makes that the box's 50.5% x 58.5% as well, and is why one transform-origin
   serves both layers.

   The detail map starts at 0.16. At that scale the project outline inside it
   (x 78..687, y 162..532 of 800x715) covers the same area on screen as the
   green patch does on the map underneath. The two shapes are not alike - 1.64
   against 1.48 - so they cannot agree on both axes, and matching the area is
   the fair compromise. Turning about the patch rather than about the outline's
   own centre leaves the outline some 3px out at the small end, which nobody
   can see and which keeps this to one number.

   FILLING THE SAME BOX

   `cover`, not `contain`. The two files are 723x511 and 800x715, and contained
   the detail map drew 498x445 inside a 630x445 box - plainly a smaller picture
   rather than a closer look at the same one. Filling means cropping, and the
   crop is anchored to the top on purpose: that keeps rows 0..565 and drops the
   bottom 21%, which is terrain and about a tenth of the labels. Centred it
   would keep rows 75..640 and slice the top third off the locator inset, which
   sits in rows 1..193. The project outline survives either way. A pair
   re-exported at one ratio, or simply a taller detail map, would let the crop
   go away without touching anything here.

   The addon only ever ran at >=1280px and only with WebGL (image-effects.css),
   so below that the second map was unreachable. This works at every width,
   and on touch, where js/map-swap.js sets .is-swapped on tap.
   ========================================================================== */

.map_swap .elementor-widget-container {
  position: relative;
  overflow: hidden;   /* the Romania map grows past the box on its way out */
}

/* Both layers turn about the green patch - see above. The growth is a long
   move, so it decelerates into place; the fade is shorter than it, which puts
   the detail map at full strength while it is still growing rather than
   arriving only at the end. */
.map_swap img,
.map_swap .elementor-widget-container::after {
  transform-origin: 50.5% 58.5%;
  transition: transform 1.4s ease-out, opacity .8s ease;
}

.map_swap img {
  display: block;
  width: 100%;
  height: auto;
  opacity: 1;
  transform: scale(1);
}
/* The detail map. `inset: 0` ties it to the box the base image sizes; `top`
   is the crop anchor - see above. */
.map_swap .elementor-widget-container::after {
  content: "";
  position: absolute;
  inset: 0;
  background: url(/wp-content/uploads/2026/08/Harta_zona_proiect_02_v2.webp) center top / cover no-repeat;
  opacity: 0;
  transform: scale(0.16);
}

/* The swap: the Romania map pushes in towards the patch and goes, the detail
   map opens out of it. */
.map_swap.is-swapped img {
  opacity: 0;
  transform: scale(1.3);
}
.map_swap.is-swapped .elementor-widget-container::after {
  opacity: 1;
  transform: scale(1);
}

/* Hover drives it on a mouse. Kept behind `hover: hover` so a tap on a phone
   does not leave the swapped state stuck on - touch is js/map-swap.js's job. */
@media (hover: hover) {
  .map_swap:hover img {
    opacity: 0;
    transform: scale(1.3);
  }
  .map_swap:hover .elementor-widget-container::after {
    opacity: 1;
    transform: scale(1);
  }
}

/* The travel is the decoration; the detail map is the content. With motion
   turned off the two still swap, they just cut instead of moving. */
@media (prefers-reduced-motion: reduce) {
  .map_swap img,
  .map_swap .elementor-widget-container::after {
    transition: none;
    transform: none;
  }
  .map_swap:hover img,
  .map_swap.is-swapped img,
  .map_swap:hover .elementor-widget-container::after,
  .map_swap.is-swapped .elementor-widget-container::after {
    transform: none;
  }
}

/* ==========================================================================
   PRIMARY STYLED LIST - green dot bullets for widgets tagged in Elementor

   Opt in with `primary-styled-list` in a widget's Advanced > CSS Classes.
   The content pages type their bullets as "• text" lines, so
   heart_child_primary_styled_lists() (functions.php) rebuilds those lines
   as a <ul> at render time; a list written as real HTML gets the same look.

   The colour is fixed rather than var(--theme-color-text_link): some of these
   sections use the sunny_dark scheme, where that property is another colour.
   ========================================================================== */
.primary-styled-list ul {
  list-style: none;
  margin: 0 0 1em;
  padding: 0;
}

.primary-styled-list ul:last-child {
  margin-bottom: 0;
}

.primary-styled-list ul li {
  position: relative;
  margin: 0 0 0.55em;
  padding-left: 1.6em;
}

.primary-styled-list ul li:last-child {
  margin-bottom: 0;
}

/* The dot sits on the first line's centre: top = (line-height - size) / 2,
   in em so it follows the widget's font size. */
.primary-styled-list ul li::before {
  content: "";
  position: absolute;
  left: 0.2em;
  top: 0.5em;                       /* browsers without the lh unit */
  top: calc((1lh - 0.55em) / 2);
  width: 0.55em;
  height: 0.55em;
  border-radius: 50%;
  background-color: #1F764D;
  /* box-shadow: 0 0 0 0.2em rgba(31, 118, 77, 0.18); */
}

/* ==========================================================================
   CTA BANNERS - the green "write to us" bands (tools/build-cta-banners.php)

   Each banner is a custom layout whose outer section carries `cta_banner`.
   Its text is the band's light dark-scheme text, but an email in it took the
   theme's link green, which nearly vanishes on the primary-green band - so
   links follow the text colour and are told apart by an underline.
   ========================================================================== */
.cta_banner .sc_item_descr a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

.cta_banner .sc_item_descr a:hover,
.cta_banner .sc_item_descr a:focus {
  color: #FFFFFF;
}

/* ==========================================================================
   DONATION PAGE - the "Donează prin SMS" band (tools/apply-donation-page-copy.php)

   The band is a green banner section, classed `donation_sms_banner`, under
   the "Ce ai vrea să existe…" list. The client wants it seen only with the
   Susținător tab open: the "Donez în calitate de" Tabs widget is classed
   `donor_tabs`, and Susținător is its first tab (data-tab="1"). The open tab
   is the one with aria-selected="true" - set in the markup for the first tab
   and moved by Elementor's tab script on click - so the band hides as soon
   as any other tab is open, with no script of our own. If the selector ever
   stops matching, the band simply stays visible.
   ========================================================================== */
body:has(.donor_tabs .elementor-tab-desktop-title[aria-selected="true"]:not([data-tab="1"])) .donation_sms_banner {
  display: none;
}

/* The VAT / "NATURA STOP" fine print under the call to action */
.donation_sms_banner .sc_item_descr small {
  display: block;
  font-size: 14px;
  line-height: 1.55em;
  opacity: 0.85;
}

/* ==========================================================================
   CAMPAIGN PAGES - vultures, beaver, invasive plants
   (tools/import-campaign-pages.php)

   Built like the project pages (.project_section, .project_logos above), so
   only what those pages lack is here:

     .campaign_hero_logo   the sponsor's logo under the vulture page's title
     .photo_strip_fit      a PHOTO STRIP whose pictures carry text (campaign
                           visuals, labelled plant photos): shown whole, not
                           cropped to 3:2
     .campaign_livecam     the vultures' live camera, a 16:9 frame
     .flip_cards           the plants: each card shows the plant and turns to
                           its description card on hover - or, on touch
                           screens, on tap (a small script in the widget
                           toggles aria-pressed)
     .campaign_partner_caption  "Campanie de informare realizată în
                           parteneriat cu", over the partner's logo
   ========================================================================== */
.campaign_hero_logo {
  margin-top: 1.5rem;
}
.campaign_hero_logo .elementor-widget-container,
.campaign_hero_logo {
  text-align: left;
}
.campaign_hero_logo img {
  max-height: 56px;
  width: auto;
}

/* The whole picture, letterboxed in the slide rather than cropped. */
.photo_strip.photo_strip_fit .slider_outer_wrap > .slider_outer .slider-slide img {
  aspect-ratio: auto;
  max-height: 80vh;
  object-fit: contain;
}

.campaign_livecam {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: 8px;
  background: #000;
}
.campaign_livecam video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

/* A carousel across the full width of the window (a section of its own; the
   gutter is on .flip_carousel below). The back of each card is
   text drawn into an 800px image, so the cards stay large enough to read it:
   3 in view on desktop (~430px at 1440, growing with the window), 2 on
   tablets, 1 on phones (Andrei,
   2026-10-22). The track is a horizontal scroll-snap row - swipe works
   natively on touch - and the arrows over its edges step one card (the
   script in the widget), hidden at either end like the photo strip's. */
.flip_carousel {
  /* Full width (Andrei, 2026-10-22): the section spans the window and the
     carousel keeps only a gutter - the photo strip's 2.5vw, but never under
     30px, where the text column starts on phones. */
  width: calc(100% - 2 * max(2.5vw, 30px));
  margin: 0 auto;
}
.flip_cards {
  --flip-gap: 24px;
  --flip-per-view: 3;
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: calc((100% - (var(--flip-per-view) - 1) * var(--flip-gap)) / var(--flip-per-view));
  gap: var(--flip-gap);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
}
.flip_cards::-webkit-scrollbar {
  display: none;
}
/* Mouse drag (the widget's script): a grab hand, no snapping or text
   selection while the cards are being pulled, and no dragging the images
   out as files. */
@media (hover: hover) {
  .flip_cards,
  .flip_cards .flip_card {
    cursor: grab;
  }
}
.flip_cards.is-dragging,
.flip_cards.is-dragging .flip_card {
  cursor: grabbing;
  scroll-snap-type: none;
  user-select: none;
}
.flip_cards img {
  -webkit-user-drag: none;
  user-select: none;
}
.flip_cards:focus-visible {
  outline: 3px solid var(--carp-dark-green);
  outline-offset: 4px;
}
@media (max-width: 1023px) {
  .flip_cards {
    --flip-gap: 20px;
    --flip-per-view: 2;
  }
}

/* The arrows sit over the cards, vertically centred - back over the left
   edge, next over the right - as on the PHOTO STRIP (Andrei, 2026-10-22),
   with the same shadow so they read over a picture. The nav layer covers
   the track but lets clicks through except on the arrows themselves. */
.flip_carousel {
  position: relative;
}
.flip_carousel__nav {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.flip_carousel__nav button {
  position: absolute;
  top: 50%;
  z-index: 2;
  width: 48px;
  height: 48px;
  margin-top: -24px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: no-repeat center / 44px 44px;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35));
  pointer-events: auto;
  cursor: pointer;
  transition: transform .2s ease;
}
.flip_carousel__prev {
  left: 14px;
}
.flip_carousel__next {
  right: 14px;
}
.flip_carousel__nav button:disabled {
  visibility: hidden;   /* nothing that way; keeps the other arrow in place */
}
.flip_carousel__next {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 12h15M12 5l7 7-7 7' fill='none' stroke='%238CC63F' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
}
.flip_carousel__prev {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 12H6M12 5l-7 7 7 7' fill='none' stroke='%238CC63F' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
}
.flip_carousel__next:hover {
  transform: translateX(3px);
}
.flip_carousel__prev:hover {
  transform: translateX(-3px);
}
.flip_carousel__nav button:focus-visible {
  outline: 3px solid var(--carp-dark-green);
  outline-offset: 2px;
}
.flip_card {
  position: relative;
  display: block;
  width: 100%;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: none;
  overflow: hidden;
  cursor: pointer;
  aspect-ratio: 1 / 1;
  scroll-snap-align: start;
}
.flip_card img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: opacity .3s ease;
}
.flip_card .flip_card__back {
  opacity: 0;
}
@media (hover: hover) {
  .flip_card:hover .flip_card__back,
  .flip_card:focus-visible .flip_card__back {
    opacity: 1;
  }
}
@media (hover: none) {
  .flip_card[aria-pressed="true"] .flip_card__back {
    opacity: 1;
  }
}
.flip_card:focus-visible {
  outline: 3px solid var(--carp-dark-green);
  outline-offset: -3px;   /* inside: the scrolling track clips anything outside */
}
@media (max-width: 767px) {
  .flip_cards {
    --flip-gap: 16px;
    --flip-per-view: 1;
  }
}
@media (prefers-reduced-motion: reduce) {
  .flip_card img {
    transition: none;
  }
}

.campaign_partner_caption p {
  margin-bottom: 0.75rem;
  font-weight: 600;
}

/* ==========================================================================
   SHOP - the product grid on the Shop pages ([carpathia_shop_products],
   tools/setup-shop-products.php, README section 21)

   Products from roadelemuntilor.ro on the grey band (#F7F7F7, set on the
   section in Elementor). Each card is one link to the product on the shop.
   ========================================================================== */
.shop_grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 56px 40px;
}

.shop_card {
  margin: 0;
  padding: 0;
}

.shop_card__link {
  display: flex;
  flex-direction: column;
  align-items: center;
  height: 100%;
  text-align: center;
  text-decoration: none;
}

.shop_card__link:focus-visible {
  outline: 2px solid #1F764D;
  outline-offset: 6px;
}

/* The photo box keeps the shop's thumbnail ratio (430x324), so nothing jumps
   while the remote images load. The photos are JPEGs on white; multiply melts
   the white into the band, close to the design's cut-out products.
   The image is taken out of the flow: an aspect-ratio box still grows to fit
   its content, and a square photo (the "Un munte de vise" pack) made its card
   taller than the rest of the row. */
.shop_card__media {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 430 / 324;
  margin-bottom: 26px;
}

.shop_card__media img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  mix-blend-mode: multiply;
  transition: transform .3s ease;
}

/* The soft floor shadow under each product, as in the design. */
/* .shop_card__media::after {
  content: "";
  position: absolute;
  left: 8%;
  right: 8%;
  bottom: -14px;
  height: 18px;
  background: radial-gradient(ellipse at center, rgba(0, 0, 0, .16) 0%, rgba(0, 0, 0, 0) 70%);
  pointer-events: none;
} */

.shop_card__link:hover .shop_card__media img {
  transform: translateY(-4px);
}

.shop_card__badge {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1;
  padding: 4px 12px;
  border-radius: 999px;
  background-color: #1F764D;
  color: #FFFFFF;
  font-family: var(--theme-font-button_font-family);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.4;
}

.shop_card--out .shop_card__media img {
  opacity: .55;
}

/* Cards in a row line up: the title is capped at 3 lines and always takes
   3 lines' room (3 x the line-height), and the button sits at the bottom. */
.sc_layouts_column .shop_card__title,
.shop_card__title {
  margin: 0 0 10px;
  color: #000000;
  font-family: var(--theme-font-h3_font-family);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.35;
  letter-spacing: 0;
  text-transform: none;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  overflow: hidden;
  min-height: calc(3 * 1.35em);
}

.shop_card__price {
  display: block;
  margin-bottom: 18px;
  color: #A8A8A8;
  font-family: var(--theme-font-h3_font-family);
  font-size: 20px;
  font-weight: 700;
  line-height: 1.3;
}

.shop_card__price del {
  margin-right: .3em;
  font-size: .75em;
  font-weight: 500;
}

.shop_card__button {
  display: inline-block;
  margin-top: auto;
  padding: 13px 38px;
  border-radius: 4px;
  background-color: #8CC63F;
  color: #FFFFFF;
  font-family: var(--theme-font-button_font-family);
  font-size: 16px;
  font-weight: 500;
  line-height: 1.4;
  transition: background-color .2s ease;
}

.shop_card__link:hover .shop_card__button,
.shop_card__link:focus-visible .shop_card__button {
  background-color: #1F764D;
}

@media (max-width: 1023px) {
  .shop_grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 44px 24px;
  }
}

@media (max-width: 479px) {
  .shop_grid {
    gap: 36px 16px;
  }
  .shop_card__price {
    font-size: 17px;
  }
  .shop_card__button {
    padding: 11px 22px;
    font-size: 15px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .shop_card__media img {
    transition: none;
  }
  .shop_card__link:hover .shop_card__media img {
    transform: none;
  }
}


/* ==========================================================================
   COOKIE CONSENT: "Manage consent" button
   ========================================================================== */

/* Once the banner is answered, Complianz leaves a white tab pinned to the
   bottom-right edge (35px of it off-screen, sliding up on hover), right under
   the scroll-to-top button, and hides it entirely below 768px. This turns it
   into a round brand-green cookie button bottom-left (16px in, so it clears
   the copyright line at the foot of the page), on every width, whose
   label slides out on hover/focus. The label stays the button's text, so
   screen readers still announce "Manage consent".
   banner-1-optin.css loads after this file and uses
   `#cmplz-manage-consent .cmplz-manage-consent`, hence the `body` prefix. */
body #cmplz-manage-consent .cmplz-manage-consent {
  display: inline-flex;
  align-items: center;
  position: fixed;
  z-index: 7999;
  left: 16px;
  right: auto;
  bottom: 36px;
  box-sizing: border-box;
  min-width: 0;
  max-width: 48px;
  height: 48px;
  margin: 0;
  padding: 0 0 0 48px;
  overflow: hidden;
  white-space: nowrap;
  border: 0;
  border-radius: 24px;
  background-color: #1F764D;
  color: #fff;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .25);
  font-family: var(--theme-font-button_font-family);
  font-size: 15px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  animation: carpathia_cookie_in .5s cubic-bezier(.34, 1.56, .64, 1) both;
  transition: max-width .35s ease, padding-right .35s ease, background-color .2s ease;
}
body #cmplz-manage-consent .cmplz-manage-consent.cmplz-dismissed {
  display: none;
}
body #cmplz-manage-consent .cmplz-manage-consent::before {
  content: "";
  position: absolute;
  top: 12px;
  left: 12px;
  width: 24px;
  height: 24px;
  background-color: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5'/%3E%3Cpath d='M8.5 8.5v.01M16 15.5v.01M12 12v.01M11 17v.01M7 14v.01'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5'/%3E%3Cpath d='M8.5 8.5v.01M16 15.5v.01M12 12v.01M11 17v.01M7 14v.01'/%3E%3C/svg%3E") center / contain no-repeat;
  transition: transform .5s ease;
}
body #cmplz-manage-consent .cmplz-manage-consent:hover,
body #cmplz-manage-consent .cmplz-manage-consent:focus-visible {
  max-width: 320px;
  padding-right: 20px;
  background-color: #185F3E;
  /* restated so the plugin's mc_slideIn hover animation (it moves `bottom`)
     does not take over; the same name means it does not replay */
  animation: carpathia_cookie_in .5s cubic-bezier(.34, 1.56, .64, 1) both;
}
/* The plugin starts mc_slideIn on :focus too, and a button keeps :focus after
   a mouse click: reopen the banner from it, answer, and it stayed focused -
   pinned to the bottom edge, bouncing back up on every hover. Same restated
   animation, without sliding the label out (that is for :focus-visible). */
body #cmplz-manage-consent .cmplz-manage-consent:focus {
  animation: carpathia_cookie_in .5s cubic-bezier(.34, 1.56, .64, 1) both;
}
body #cmplz-manage-consent .cmplz-manage-consent:hover::before,
body #cmplz-manage-consent .cmplz-manage-consent:focus-visible::before {
  transform: rotate(-25deg);
}
body #cmplz-manage-consent .cmplz-manage-consent:focus-visible {
  outline: 2px solid #8CC63F;
  outline-offset: 3px;
}

@keyframes carpathia_cookie_in {
  from { opacity: 0; transform: scale(.4); }
  to   { opacity: 1; transform: scale(1); }
}

/* The banner opens bottom-left (tools/setup-cookie-consent.php), over the
   button that reopens it; Complianz puts it 10px in, the button sits 16px in.
   Line their left edges up. Phones keep the plugin's own layout. */
@media (min-width: 768px) {
  body .cmplz-cookiebanner.cmplz-bottom-left {
    left: 16px;
    bottom: 16px;
  }
}

/* level with the scroll-to-top button, which sits lower on phones */
@media (max-width: 767px) {
  body #cmplz-manage-consent .cmplz-manage-consent {
    bottom: 16px;
  }
}

@media (prefers-reduced-motion: reduce) {
  body #cmplz-manage-consent .cmplz-manage-consent,
  body #cmplz-manage-consent .cmplz-manage-consent:hover,
  body #cmplz-manage-consent .cmplz-manage-consent:focus,
  body #cmplz-manage-consent .cmplz-manage-consent:focus-visible,
  body #cmplz-manage-consent .cmplz-manage-consent::before {
    animation: none;
    transition: none;
  }
}


/* ==========================================================================
   SCROLL TO TOP: round, the cookie button's twin
   ========================================================================== */

/* The theme draws it as a 2.7em square, so its size follows the root font
   (49px on desktop, 43px on phones). Fixed at 48px and round, with the same
   shadow, it mirrors the "Manage consent" cookie button on the other side;
   the theme's `bottom` already puts both at the same height. */
body .trx_addons_scroll_to_top.scroll_to_top_style_default {
  width: 48px;
  height: 48px;
  line-height: 48px;
  border-radius: 50%;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .25);
}


/* ==========================================================================
   SEARCH RESULTS: one picture size
   ========================================================================== */

/* Every result has a picture (heart_child_search_thumbnail_id in
   functions.php), mostly at the grid's 890 x 664 crop - but an image that was
   never given that crop arrives at another shape (a page's wide hero comes in
   at 890 x 484), and its row goes out of line. Same proportion for all,
   cropped to fill. */
.search-results .post_layout_classic .post_featured img {
  width: 100%;
  height: auto;
  aspect-ratio: 890 / 664;
  object-fit: cover;
}


/* ==========================================================================
   HOME HERO: video, title, button, scroll arrow (tools/build-home-hero.php)
   ========================================================================== */

/* Replaces the RevSlider hero on both home pages. The section (height: full,
   background video, overlay) is set in Elementor; this is the type and the
   corner link. Sizes follow the slider at 1920px, where it looked as
   designed: a 44px title, the outlined 18px button 25px under it. The slider
   scaled each level from its own grid, so at 1440 the title swelled to 85px
   over the button, and on phones the button met "Scroll down" - here the
   sizes only step down. */
.home-hero.elementor-section-height-full {
  min-height: 360px;
}
@supports (height: 100svh) {
  /* Phones: the visible screen, not the one behind the address bar */
  .home-hero.elementor-section-height-full {
    height: 100svh;
  }
}
/* The one column fills the hero at every width. Elementor lets columns wrap
   below 768px, and a wrapped column is only as tall as its content - the
   title then sat at the top and the scroll link landed on the button. */
.home-hero > .elementor-container {
  height: 100%;
  flex-wrap: nowrap;
  align-items: stretch;
}
.home-hero .home-hero__title .elementor-heading-title {
  font-family: Montserrat, sans-serif;
  font-size: 44px;
  line-height: 64px;
  font-weight: 700;
  letter-spacing: 0;
  color: #fff;
}

.home-hero .home-hero__button {
  margin-top: 25px;
}
.home-hero .home-hero__button .elementor-button {
  padding: 13px 40px;
  border: 1px solid #fff;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  font-family: Montserrat, sans-serif;
  font-size: 18px;
  line-height: 34px; /* + the 1px borders: the slider's 36px line */
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
  color: #fff;
  transition: background-color .3s ease, color .3s ease;
}
.home-hero .home-hero__button .elementor-button:hover,
.home-hero .home-hero__button .elementor-button:focus-visible {
  background: #fff;
  color: #1F764D;
}

/* The scroll-down arrow: the bottom right corner of the hero, on its own
   (the words are its aria-label only). The arrow is 12px, the link a 44px
   square around it so it is easy to tap. The column is
   stretched to the section's height, so its widget wrap (position: relative
   in Elementor) is the whole hero. The anchor it jumps to sits on the
   hero's bottom edge - the top of the next section. */
.home-hero .home-hero__corner {
  position: static;
  margin: 0;
}
.home-hero .home-hero__scroll {
  position: absolute;
  right: 54px;
  bottom: 50px;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  color: #fff;
}
.home-hero .home-hero__scroll:hover,
.home-hero .home-hero__scroll:focus-visible {
  color: #fff;
  opacity: .8;
}
.home-hero .home-hero__scroll svg {
  transition: transform .3s ease;
}
.home-hero .home-hero__scroll:hover svg {
  transform: translateY(3px);
}
.home-hero .home-hero__end {
  position: absolute;
  bottom: 0;
  left: 0;
}

@media (max-width: 1023px) {
  .home-hero .home-hero__title .elementor-heading-title {
    font-size: 40px;
    line-height: 52px;
  }
  .home-hero .home-hero__scroll {
    right: 24px;
    bottom: 30px;
  }
}
@media (max-width: 767px) {
  .home-hero .home-hero__title .elementor-heading-title {
    font-size: 34px;
    line-height: 42px;
  }
  .home-hero .home-hero__button .elementor-button {
    padding: 10px 32px;
    font-size: 16px;
  }
  .home-hero .home-hero__scroll {
    right: 8px;
    bottom: 14px;
  }
}
