/* ==========================================================================
   visarta.css — desktop
   ==========================================================================

   Acesta este CSS-ul principal al temei. Se citeste de sus in jos si NU are
   nicio regula de lastime in el: tot ce scrie aici se aplica pe ecran mare.
   Corecturile pentru ecrane mici sunt in visarta-mob.css, pe trepte de
   max-width, si se incarca dupa acest fisier.

   Ordinea din fisier (de sus in jos)
   ----------------------------------
     abstracts/_tokens.scss   variabilele: culori, fonturi, spatii, raze
     base/                    fonturi, reset, tipografie, formulare, butoane
     layout/                  container, grid, section, header, footer
     components/              nav, card, tab, pager, article, swiper etc.
     sections/                fiecare secțiune din Page Builder
     utilities/               clase ajutatoare

   Fiecare bucata are un banner cu numele ei, ca sa gasesti repede zona.

   Valorile nu se scriu direct, se iau din variabilele de la inceput:
   --color-primary, --space-6, --radius-lg, --fs-lg si asa mai departe.
   Daca schimbi o culoare acolo, se schimba in tot site-ul.

   CSS-ul de la Swiper si GLightbox e separat, in assets/css/vendor/, si se
   incarca inaintea acestui fisier ca regulile temei sa aiba ultimul cuvant.
   ========================================================================== */

@charset "UTF-8";
/*
 * Front-end bundle. The @use order IS the cascade order (ITCSS-lite):
 * tokens → base → layout → components → sections → utilities. No @layer:
 * unlayered vendor CSS would outrank layered theme rules.
 *
 * Vendor CSS (Swiper, GLightbox) is imported in src/js/main.js BEFORE this
 * file, so every rule below wins the cascade over vendor defaults.
 */
/* ==========================================================================
   abstracts/_tokens.scss
   ========================================================================== */
/*
 * The alias layer. theme.json is the single source of truth; everything below
 * only gives its --wp--preset--* variables short, stable names. Re-brand a
 * project by editing theme.json, decouple one value by re-pointing it here.
 * This is the only file allowed to hold literal colours and sizes.
 */
:root {
  /* ---- Colors (aliases over theme.json settings.color.palette) ---- */
  --color-primary: var(--wp--preset--color--primary);
  --color-primary-dark: var(--wp--preset--color--primary-dark);
  --color-blue-900: var(--wp--preset--color--blue-900); /* hero band, deep ground */
  --color-blue-300: var(--wp--preset--color--blue-300); /* links on a navy ground */
  --color-blue-50: var(--wp--preset--color--blue-50); /* form and map card ground */
  --color-secondary: var(--wp--preset--color--secondary); /* navy 900, also the footer ground */
  --color-navy-700: var(--wp--preset--color--navy-700); /* navigation labels, footer bottom bar */
  --color-accent: var(--wp--preset--color--accent); /* the red of every overline */
  --color-accent-soft: var(--wp--preset--color--accent-soft); /* hero subtitle, active footer links */
  --color-text: var(--wp--preset--color--text);
  --color-text-muted: var(--wp--preset--color--text-muted);
  --color-text-subtle: var(--wp--preset--color--text-subtle); /* captions, placeholders, footnotes */
  --color-surface: var(--wp--preset--color--surface);
  --color-surface-alt: var(--wp--preset--color--surface-alt);
  --color-surface-muted: var(--wp--preset--color--surface-muted);
  --color-border: var(--wp--preset--color--border);
  --color-success: var(--wp--preset--color--success);
  --color-error: var(--wp--preset--color--error);
  --color-on-primary: #fff; /* Sass-only: text on primary buttons */
  --color-on-dark: var(--wp--preset--color--border); /* Sass-only: body copy on a navy ground (grey 100) */
  --color-focus: var(--color-primary); /* Sass-only: focus ring, re-pointed by inverted scopes */
  --color-accent-text: var(--color-accent); /* Sass-only: the .eyebrow colour, re-pointed by inverted scopes */
  --color-backdrop: rgb(26 43 74 / 55%); /* Sass-only: dialog ::backdrop scrim */
  /* ---- Typography (theme.json fontFamilies / fontSizes, fluid clamp() computed by WP) ---- */
  --font-sans: var(--wp--preset--font-family--sans); /* Manrope */
  --font-display: var(--wp--preset--font-family--display); /* Roboto, section headings only */
  --font-heading: var(--font-sans);
  --font-mono: var(--wp--preset--font-family--mono);
  /*
   * Sass-only: the script face of the home hero's welcome line. Not a preset —
   * it is one decorative line, never a font the editor should be able to pick.
   */
  --font-script: 'Playball', 'Segoe Script', cursive;
  --fs-xs: var(--wp--preset--font-size--x-small); /* 14  overline, label */
  --fs-sm: var(--wp--preset--font-size--small); /* 15  navigation, medium button */
  --fs-base: var(--wp--preset--font-size--medium); /* 16  body */
  --fs-lg: var(--wp--preset--font-size--large); /* 18  body large */
  --fs-xl: var(--wp--preset--font-size--x-large); /* 20  body XL, h6 */
  --fs-2xl: var(--wp--preset--font-size--xx-large); /* 24  h5 */
  --fs-3xl: var(--wp--preset--font-size--xxx-large); /* 40  form heading */
  --fs-4xl: var(--wp--preset--font-size--xxxx-large); /* 48  section heading */
  --fs-5xl: var(--wp--preset--font-size--xxxxx-large); /* 52  section heading, large */
  --fs-6xl: var(--wp--preset--font-size--xxxxxx-large); /* 64  hero */
  /*
   * Sass-only: the design's H4, 32px. theme.json's scale steps 24 → 40, and
   * this size is only ever a section title — never one the editor can pick —
   * so it stays out of the preset list rather than renumbering every slug
   * above it, which would break the has-*-font-size classes in saved content.
   */
  --fs-h4: clamp(1.625rem, 3vw, 2rem);
  --lh-tight: 1.1;
  --lh-snug: 1.3;
  --lh-base: 1.625;
  --lh-loose: 1.7;
  --fw-regular: 400;
  --fw-medium: 600;
  --fw-semibold: 600;
  --fw-bold: 700;
  --fw-extrabold: 800;
  /* Tracking is a ratio of the font size, so one token holds at every step. */
  --ls-overline: 0.21em;
  --ls-wide: 0.013em;
  --ls-tight: -0.031em;
  --ls-tight-sm: -0.025em;
  /* ---- Spacing, 4px base (theme.json settings.spacing.spacingSizes) ---- */
  --space-1: var(--wp--preset--spacing--1); /* 0.25rem */
  --space-2: var(--wp--preset--spacing--2); /* 0.5rem */
  --space-3: var(--wp--preset--spacing--3); /* 0.75rem */
  --space-4: var(--wp--preset--spacing--4); /* 1rem */
  --space-5: var(--wp--preset--spacing--5); /* 1.25rem */
  --space-6: var(--wp--preset--spacing--6); /* 1.5rem */
  --space-7: var(--wp--preset--spacing--7); /* 1.75rem */
  --space-8: var(--wp--preset--spacing--8); /* 2rem */
  --space-10: var(--wp--preset--spacing--10); /* 2.5rem */
  --space-12: var(--wp--preset--spacing--12); /* 3rem */
  --space-15: var(--wp--preset--spacing--15); /* 3.75rem */
  --space-16: var(--wp--preset--spacing--16); /* 4rem */
  --space-20: var(--wp--preset--spacing--20); /* 5rem */
  --space-30: var(--wp--preset--spacing--30); /* 7.5rem */
  --space-40: var(--wp--preset--spacing--40); /* 10rem */
  /*
   * Sass-only. The design bands are 160px tall on desktop; they collapse to
   * something usable on a phone rather than keeping a tenth of the viewport.
   */
  --space-section: clamp(3.5rem, 8vw, 10rem);
  --space-section-sm: clamp(2.5rem, 5vw, 6rem);
  /* ---- Layout (theme.json settings.layout) ---- */
  --container-narrow: var(--wp--style--global--content-size); /* 720px  prose */
  --container: var(--wp--style--global--wide-size); /* 1280px default */
  --container-wide: 1440px;
  --container-gutter: var(--space-5);
  --header-height: 100px; /* header-scroll.js updates at runtime */
  /* ---- Shape / elevation / motion / stacking (Sass-only) ---- */
  --radius-sm: 12px;
  --radius: 20px; /* inputs, small controls */
  --radius-lg: 28px; /* cards */
  --radius-xl: 40px; /* the hero and footer corners */
  --radius-full: 999px;
  --shadow-sm: 0 1px 2px rgb(26 43 74 / 6%);
  --shadow: 0 4px 12px rgb(26 43 74 / 8%);
  --shadow-lg: 0 12px 32px rgb(26 43 74 / 12%);
  --ease: cubic-bezier(0.2, 0.7, 0.2, 1);
  --duration: 200ms;
  --duration-slow: 500ms;
  --z-header: 100;
  --z-overlay: 200;
  --z-modal: 300;
  /* ---- Breakpoints exported for JS: getComputedStyle(html).getPropertyValue('--bp-lg') ---- */
  --bp-sm: 576px;
  --bp-md: 768px;
  --bp-lg: 1024px;

  /* Pragul la care navigatia trece din sertar in bara orizontala. Nu e
     --bp-lg: bara are nevoie de 1158px ca sa incapa pe un rand, deci
     schimbarea se face la 1200px (treapta din visarta-mob.css). nav.js
     citeste exact aceasta valoare, ca sa nu se desincronizeze de CSS. */
  --bp-nav: 1200px;
  --bp-xl: 1280px;
  --bp-2xl: 1536px;
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --duration: 0ms;
    --duration-slow: 0ms;
  }
}
/* ==========================================================================
   base/_fonts.scss
   ========================================================================== */
/*
 * Self-hosted webfonts. The design calls for Manrope 400-800 throughout and
 * Roboto ExtraBold for the section headings; both are served from the theme
 * rather than Google's CDN, which keeps the site free of third-party requests.
 *
 * Two subsets each: latin plus latin-ext, because Romanian needs ă (U+0103),
 * ș (U+0219) and ț (U+021B), none of which live in the latin subset. The
 * unicode-range values are Google's own, so a browser downloads latin-ext only
 * when a page actually uses one of those glyphs.
 *
 * Vite rewrites these url()s and emits the files into dist/assets with a
 * content hash, so the paths below are build-time only.
 */
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("../fonts/manrope-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("../fonts/manrope-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Roboto";
  font-style: normal;
  font-weight: 800;
  font-stretch: 100%;
  font-display: swap;
  src: url("../fonts/roboto-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Roboto";
  font-style: normal;
  font-weight: 800;
  font-stretch: 100%;
  font-display: swap;
  src: url("../fonts/roboto-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/*
 * Playball, the script face of the home hero's welcome line. One weight, one
 * style — it is decorative and never sets body copy. latin-ext comes along
 * because the line is an editable field: "Bine ați venit" has to render even
 * though the design's own wording has no diacritics.
 */
@font-face {
  font-family: "Playball";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/playball-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Playball";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/playball-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* ==========================================================================
   base/_reset.scss
   ========================================================================== */
/*
 * A modern, minimal reset. Block margins are removed here and re-introduced
 * deliberately by .flow / .entry-content, so vertical rhythm has one owner.
 */
*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  scroll-padding-top: var(--header-height); /* header-scroll.js keeps this exact */
  text-size-adjust: 100%;
}

/*
 * A column shell keeps the footer at the bottom of short pages (see
 * .site-main). Front-end only: the editor never loads this file.
 */
body {
  display: flex;
  flex-direction: column;
  min-height: 100dvh;
  margin: 0;
  overflow-x: clip; /* .alignfull is 100vw wide; clip, not hidden, keeps position: sticky working */
}

h1,
h2,
h3,
h4,
h5,
h6,
p,
figure,
blockquote,
dl,
dd,
pre {
  margin: 0;
}

h1,
h2,
h3,
h4,
h5,
h6,
p {
  overflow-wrap: break-word;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

img,
video {
  height: auto;
}

input,
button,
textarea,
select {
  font: inherit;
  color: inherit;
}

button {
  cursor: pointer;
}

/* Anchor targets must clear the sticky header. */
:target {
  scroll-margin-top: var(--header-height);
}

/*
 * One focus treatment for the whole theme; zero specificity so components can
 * refine it without fighting the cascade.
 */
:where(a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])):focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
/* ==========================================================================
   base/_typography.scss
   ========================================================================== */
/*
 * Prose defaults. Shared with the block editor (editor.scss), where WordPress
 * rewrites `body` to the editor canvas, so no front-end-only selectors here.
 */
body {
  background-color: var(--color-surface);
  color: var(--color-text);
  font-family: var(--font-sans);
  font-size: var(--fs-base);
  font-weight: var(--fw-regular);
  line-height: var(--lh-base);
}

h1,
h2,
h3,
h4,
h5,
h6 {
  color: var(--color-text);
  font-family: var(--font-heading);
  font-weight: var(--fw-extrabold);
  line-height: var(--lh-tight);
}

h1 {
  font-size: var(--fs-6xl);
  letter-spacing: var(--ls-tight);
}

/*
 * The one place the display family is used: section headings are Roboto
 * ExtraBold in the design, everything else is Manrope.
 */
h2 {
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  letter-spacing: var(--ls-tight-sm);
}

h3 {
  font-size: var(--fs-3xl);
}

h4 {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-tight-sm);
}

h5 {
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

h6 {
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

small {
  font-size: var(--fs-sm);
}

strong,
b {
  font-weight: var(--fw-bold);
}

code,
kbd,
samp,
pre {
  font-family: var(--font-mono);
  font-size: 0.9em;
}

pre {
  padding: var(--space-4);
  border-radius: var(--radius);
  background-color: var(--color-surface-alt);
  overflow-x: auto;
}

/*
 * A tinted box with a rule down its leading edge, and the trailing corners
 * rounded like a card. Restyled from the plain rule the base used to draw so the
 * editor preview and the front end show the same quotation.
 */
blockquote {
  padding: var(--space-10);
  border-inline-start: 3px solid var(--color-primary-dark);
  border-start-end-radius: var(--radius-lg);
  border-end-end-radius: var(--radius-lg);
  background-color: var(--color-blue-50);
  color: var(--color-text);
  font-size: var(--fs-xl);
  line-height: var(--lh-loose);
}

blockquote > :first-child {
  margin-block-start: 0;
}

/* The attribution under the quotation. */
blockquote cite {
  display: block;
  margin-block-start: var(--space-5);
  color: var(--color-primary-dark);
  font-size: var(--fs-xs);
  font-style: normal;
  font-weight: var(--fw-semibold);
  letter-spacing: var(--ls-wide);
}

hr {
  height: 0;
  margin-block: var(--space-8);
  border: 0;
  border-top: 1px solid var(--color-border);
}

table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
}

th,
td {
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--color-border);
  text-align: start;
}

th {
  font-weight: var(--fw-medium);
}

/* Two prose helpers used by section templates. */
.lead {
  color: var(--color-text-muted);
  font-size: var(--fs-xl);
  line-height: var(--lh-loose);
}

.eyebrow {
  color: var(--color-accent-text);
  font-size: var(--fs-xs);
  font-weight: var(--fw-extrabold);
  line-height: 1;
  letter-spacing: var(--ls-overline);
  text-transform: uppercase;
}

/*
 * Every overline in the design is preceded by a short rule, and the centred
 * ones are flanked by two. The rule takes the eyebrow's own colour.
 */
.eyebrow--ruled {
  display: flex;
  align-items: center;
  gap: var(--space-5);
}

.eyebrow--ruled::before {
  content: "";
  flex: none;
  width: 2rem;
  height: 2px;
  background-color: currentcolor;
}

.eyebrow--ruled-both {
  justify-content: center;
}

.eyebrow--ruled-both::after {
  content: "";
  flex: none;
  width: 2rem;
  height: 2px;
  background-color: currentcolor;
}

/* ==========================================================================
   base/_forms.scss
   ========================================================================== */
label {
  display: block;
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
}

input,
select,
textarea {
  width: 100%;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background-color: var(--color-surface);
  color: var(--color-text);
  font-size: var(--fs-base);
  transition: border-color var(--duration) var(--ease);
}

input:hover,
select:hover,
textarea:hover {
  border-color: var(--color-text-muted);
}

textarea {
  min-height: 8rem;
  resize: vertical;
}

::placeholder {
  color: var(--color-text-muted);
  opacity: 1;
}

/* Toggles and file pickers must keep their intrinsic size. */
input[type=checkbox],
input[type=radio],
input[type=file],
input[type=range],
input[type=color],
input[type=submit] {
  width: auto;
}

input[type=checkbox],
input[type=radio] {
  accent-color: var(--color-primary);
}

:disabled {
  cursor: not-allowed;
  opacity: 0.6;
}

/* Native validation feedback, only after the user has interacted. */
input:user-invalid,
select:user-invalid,
textarea:user-invalid {
  border-color: var(--color-error);
}

/* searchform.php: a single row that wraps when there is no room. */
.search-form {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: center;
}

/*
 * The label holds nothing but screen-reader text; display: contents keeps it
 * out of the flex row so the gap does not double.
 */
.search-form__label {
  display: contents;
}

.search-form__input {
  flex: 1 1 12rem;
}

.search-form__submit {
  flex: 0 0 auto;
}

/* ==========================================================================
   base/_buttons.scss
   ========================================================================== */
/*
 * .btn is the theme button; core's block button borrows the same visuals so
 * editor content and PHP templates look identical.
 */
.btn,
.wp-block-button__link,
.comment-form .submit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: 2.75rem;
  padding: var(--space-3) var(--space-5);
  border: 1px solid transparent;
  border-radius: var(--radius-full);
  background-color: var(--color-primary);
  color: var(--color-on-primary);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--duration) var(--ease), border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.btn:hover,
.wp-block-button__link:hover,
.comment-form .submit:hover {
  background-color: var(--color-primary-dark);
  color: var(--color-on-primary);
}

/*
 * The primary look is already the default; the modifier exists so templates
 * can be explicit and so restyling .btn cannot silently empty .btn--primary.
 */
.btn--primary {
  border-color: transparent;
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

.btn--primary:hover {
  background-color: var(--color-primary-dark);
}

.btn--secondary {
  border-color: var(--color-border);
  background-color: var(--color-surface-alt);
  color: var(--color-text);
}

.btn--secondary:hover {
  border-color: var(--color-text-muted);
  background-color: var(--color-surface-alt);
  color: var(--color-text);
}

.btn--ghost {
  border-color: currentcolor;
  background-color: transparent;
  color: var(--color-primary);
}

.btn--ghost:hover {
  background-color: transparent;
  color: var(--color-primary-dark);
}

.btn--sm {
  min-height: 2.25rem;
  padding: var(--space-2) var(--space-4);
  font-size: var(--fs-xs);
}

.btn--lg {
  min-height: 3.5rem;
  padding: var(--space-4) var(--space-6);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
}

/*
 * The design's large call to action: the label, then a white disc carrying the
 * chevron. .contact-info's submit paints the same badge with pseudo-elements
 * because a bare <input> cannot hold a child; anywhere the button is an <a>
 * the disc is a real element instead.
 */
.btn--disc {
  gap: var(--space-5);
  min-height: 3.5rem;
  padding: var(--space-1) var(--space-1) var(--space-1) var(--space-6);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
}

.btn__disc {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  border-radius: var(--radius-full);
  background-color: var(--color-surface);
  color: var(--color-primary);
}

.btn__disc .icon {
  width: 1.5rem;
  height: 1.5rem;
}

/*
 * The button row of template-parts/components/buttons.php: it holds .btn
 * elements, so it lives with them instead of in every section that uses it.
 */
.buttons {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}

/*
 * Outlined on a light ground: the design's quieter call to action. Unlike
 * .btn--ghost it takes the text colour rather than the primary blue, which is
 * what the pillar cards of the front page use.
 */
.btn--outline {
  border-color: var(--color-text);
  background-color: transparent;
  color: var(--color-text);
}

.btn--outline:hover {
  border-color: var(--color-primary);
  background-color: transparent;
  color: var(--color-primary);
}

/* ==========================================================================
   base/_wordpress.scss
   ========================================================================== */
/*
 * Glue for markup WordPress generates itself.
 *
 * Max-width alignments are NOT redefined here: WordPress already prints layout
 * rules for classic themes with a theme.json — e.g.
 * `.alignwide{max-width: var(--wp--style--global--wide-size);}`. Duplicating
 * them would only add bytes and a second source of truth.
 *
 * The float alignments are a different matter. Core prints them, but only as
 * child selectors of a layout container — `.is-layout-flow > .alignleft`,
 * `.is-layout-constrained > .alignleft`, `.wp-site-blocks > .alignleft` — and
 * this theme's prose wrappers carry none of those classes: they own their own
 * vertical rhythm, and adopting `is-layout-flow` would import core's margin
 * rules on top of it. So the two floats are declared below for the prose
 * wrappers, along with the negative-margin breakout core never prints.
 */
.screen-reader-text {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Editor captions. */
.wp-caption {
  max-width: 100%;
}

.wp-caption-text,
.gallery-caption,
figcaption {
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
  margin-block-start: var(--space-2);
}

/* Required by the theme review guidelines; the base only marks them softly. */
.sticky {
  border-color: var(--color-primary);
}

.bypostauthor > .comment-body {
  border-inline-start: 2px solid var(--color-primary);
}

/*
 * The single-entry region and its prose flow: .entry-content (pages, editor
 * content) and .entry__content (single posts) share one owner for vertical rhythm:
 * children inherit --flow-space, headings ask for more room. The value is set
 * on the container so the .flow utility (page.php uses both classes) and the
 * rule below cannot disagree.
 */
.entry {
  padding-block: var(--space-8) var(--space-8);
}

:is(.entry-content, .entry__content) {
  --flow-space: var(--space-6);
}

:is(.entry-content, .entry__content) > * + * {
  margin-block-start: var(--flow-space, var(--space-6));
}

:is(.entry-content, .entry__content) :is(h2, h3, h4, h5, h6) {
  --flow-space: var(--space-8);
}

:is(.entry-content, .entry__content) :is(ul, ol) {
  padding-inline-start: var(--space-6);
}

:is(.entry-content, .entry__content) :is(ul, ol) li + li {
  margin-block-start: var(--space-2);
}

/*
 * Breakout. The prose column is narrower than the wide size, so a wide or full
 * block has to be pulled out of it with negative inline margins. The width is
 * held in a custom property because the same value is needed twice. It reads the
 * global preset, not --container: .container--narrow re-points --container to
 * the 720px prose width, which would collapse the breakout to nothing.
 */
:is(.entry-content, .entry__content) .alignwide {
  --align-wide: min(var(--wp--style--global--wide-size, 1200px), 100vw - 2 * var(--container-gutter));
  width: var(--align-wide);
  max-width: none;
  margin-inline: calc(50% - var(--align-wide) / 2);
}

:is(.entry-content, .entry__content) .alignfull {
  width: 100vw;
  max-width: none;
  margin-inline: calc(50% - 50vw);
}

/*
 * Prose headings. The base h2 is a section heading — Roboto at 52px — which is
 * four times the body size inside an article. In prose the design steps the
 * headings down onto the sans family and the H4/h5/h6 sizes of the scale; the
 * article's own in-content heading is 28px in Figma, an off-scale one-off, so it
 * snaps to the 32px step rather than importing a size of its own.
 */
:is(.entry-content, .entry__content) h2 {
  font-family: var(--font-sans);
  font-size: var(--fs-h4);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

:is(.entry-content, .entry__content) h3 {
  font-size: var(--fs-2xl);
  letter-spacing: var(--ls-tight-sm);
}

:is(.entry-content, .entry__content) h4 {
  font-size: var(--fs-xl);
}

/*
 * The opening paragraph of an *article* carries the summary in the design: same
 * colour as the headings, a step up in size and bold. Keyed on the position
 * rather than on a class, so an article written in the editor gets it without
 * being told to — and scoped to the article layout, because the standard page
 * of the design opens on ordinary body copy.
 */
.entry--article .entry__content > p:first-child {
  color: var(--color-text);
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-loose);
}

/*
 * Body copy in an article is the muted slate of the design, not the heading
 * navy; the lead above is the exception.
 */
:is(.entry-content, .entry__content) p {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

.text-mic p {
  color: #2E4068;
  font-size: 15px;
  line-height: 1.667;
}

/*
 * Lists read as body copy, but numbered ones keep the heading colour: they are
 * the ordinances of a convocation, not commentary.
 */
:is(.entry-content, .entry__content) :is(ul, ol) {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

:is(.entry-content, .entry__content) ol {
  color: var(--color-text);
}

:is(.entry-content, .entry__content) ol li + li {
  margin-block-start: var(--space-4);
}

/* Images in prose take the card radius, and a caption sits centred under them. */
:is(.entry-content, .entry__content) :is(img, figure img) {
  border-radius: var(--radius-lg);
}

:is(.entry-content, .entry__content) figure {
  margin-inline: 0;
}

:is(.entry-content, .entry__content) figcaption {
  text-align: center;
}

/*
 * The float alignments core only prints under its own layout containers. Kept
 * to md and up: at phone width a 20rem float beside body copy leaves a column
 * too narrow to read, so the image simply stacks.
 */
:is(.entry-content, .entry__content) > :is(.alignleft, .alignright) {
  margin-block: 0;
}

:is(.entry-content, .entry__content) > .alignleft {
  float: left;
  width: 20rem;
  margin-inline: 0 var(--space-10);
}
:is(.entry-content, .entry__content) > .alignright {
  float: right;
  width: 20rem;
  margin-inline: var(--space-10) 0;
}
/*
 * A list following a float needs a formatting context of its own. A float
 * shortens the line boxes beside it, not the block boxes: without this the
 * list's own box — and with it the bullets — would sit underneath the image
 * while only the text wrapped around it.
 */
:is(.entry-content, .entry__content) > :is(.alignleft, .alignright) + :is(ul, ol) {
  display: flow-root;
}
/*
 * A heading must never wrap around a float — it starts a new part of the
 * article, so it clears whatever the paragraph above was flowing beside.
 */
:is(.entry-content, .entry__content) :is(h2, h3, h4) {
  clear: both;
}

.coloane-2 {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 30px;
}
.coloane-3 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 30px;
}

:root :where(.is-layout-constrained).coloane-2 > :first-child {margin-block-start: 24px;}
:root :where(.is-layout-constrained).coloane-3 > :first-child {margin-block-start: 24px;}

.is-style-card > :where(:not(.alignleft):not(.alignright):not(.alignfull)) {
    max-width: var(--wp--style--global--content-size);
    margin-left: 0 !important;
    margin-right: 0 !important;
}


/*
 * ---- the Card block style ----
 *
 * Registered on Group and Column in inc/blocks.php. The dot is a
 * pseudo-element rather than a block an editor has to place, and the box is a
 * two-column grid so the dot keeps its own column beside a title that wraps:
 * core renders a flow Group without an inner wrapper, so its children are the
 * grid's items and each one is pinned to the second column.
 */
.is-style-card {
  display: grid;
  grid-template-columns: 1.625rem minmax(0, 1fr);
  gap: var(--space-3) 0;
  align-content: start;
  padding: var(--space-6) var(--space-5);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
}

.is-style-card::before {
  content: "";
  grid-row: 1;
  grid-column: 1;
  width: 12px;
  height: 12px;
  border-radius: var(--radius-full);
  background-color: var(--color-accent);
  margin: 6px 0 0 0;
}

.is-style-card > * {
  grid-column: 2;
  /* The card owns its own rhythm; the prose flow's margin would double it. */
  margin-block: 0;
}

/* A title in a card is a card title, not a step down the prose scale. */
.is-style-card :is(h2, h3, h4, h5, h6) {
  font-family: var(--font-sans);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

.is-style-card p {
  color: var(--color-navy-700);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

/*
 * Cardurile construite din paginile subordonate (template-parts/content/
 * page-children.php) au titlul legatura. Fara regula asta ar iesi albastru si
 * subliniat, din stilul implicit al browserului: in grila design-ului titlul e
 * bleumarin, ca oriunde altundeva pe carduri. Sublinierea si culoarea revin la
 * hover si la focus, ca sa se vada ca se poate apasa.
 */
.page-children__title a {
  color: inherit;
  text-decoration: none;
}

.page-children__title a:hover,
.page-children__title a:focus-visible {
  color: var(--color-primary);
  text-decoration: underline;
}

/*
 * A doua grila: paginile asezate sub aceasta in meniul din antet, fara sa-i fie
 * copii in baza. Aceeasi casetă ca mai sus, ca randurile sa se citeasca la fel,
 * dar desenata in chenar in loc de plin — sunt alt registru, iar bulina rosie si
 * fundalul le-ar face sa para acelasi lucru.
 *
 * Coloana bulinei dispare cu totul, nu doar bulina: lasata goala, textul ar sta
 * retras cu 26px fata de marginea casetei si ar parea ca lipseste ceva.
 */
/*
 * Al doilea grup sta mai jos decat un rand obisnuit al grilei. Cu distanta
 * mostenita din `.entry-content`, aceeasi cu spatiul dintre carduri, cele doua
 * grile se citeau ca una singura careia i s-au schimbat culorile la sfarsit.
 *
 * Prin `--flow-space`, nu prin `margin`: distanta o pune `.flow > * + *`, care
 * e scrisa mai jos in fisier si la aceeasi specificitate, deci o margine pusa
 * aici ar fi pierdut cascada.
 */
.page-children--outline {
  --flow-space: var(--space-12);
}

.page-children--outline .is-style-card {
  grid-template-columns: minmax(0, 1fr);
  border-color: var(--color-blue-300);
  background-color: transparent;
}

.page-children--outline .is-style-card::before {
  content: none;
}

.page-children--outline .is-style-card > * {
  grid-column: 1;
}

/* ---- core layout blocks in prose ---- */
/*
 * Columns keep the card gutter of the design, and stack on a phone — core's own
 * breakpoint for that is 782px, which is close enough to the theme's md.
 */
:is(.entry-content, .entry__content) .wp-block-columns {
  gap: var(--space-6);
}

/* Images inside a column fill it, so a pair of them lines up. */
:is(.entry-content, .entry__content) .wp-block-column > .wp-block-image img {
  width: 100%;
}

img[src*="PDF"] {border-radius: 0 !important; width: 40px !important;}
.lista-pdf {
  gap: 50px !important;
  margin-bottom: 50px;
}
.lista-pdf .wp-block-column {
  position: relative;
  padding: 0 0 0 60px;
}
.lista-pdf figure {
  position: absolute; top: -5px; left: 0;
  
}
.lista-pdf figure {
  margin: 0 !important;
  margin-block-start: 0 !important;
}
.lista-pdf p {
  margin: 0 !important;
  margin-block-start: 0 !important;
}
.lista-pdf p > strong:first-child {display: none;}
.lista-pdf a {
    display: block;
    font-size: 16px;
    font-weight: 400;
    line-height: 1.2;
    text-align: left;
}

/* ==========================================================================
   layout/_container.scss
   ========================================================================== */
/*
 * The single horizontal frame. --container is a token so a scope can widen or
 * narrow the frame without a new class (see .container--narrow/--wide).
 */
.container {
  width: min(100% - 2 * var(--container-gutter), var(--container));
  margin-inline: auto;
}

.container--narrow {
  --container: var(--container-narrow);
}

.container--wide {
  --container: var(--container-wide);
}

/* ==========================================================================
   layout/_grid.scss
   ========================================================================== */
/*
 * Replaces the old .row/.col_NN float grid. Column count and gap are tokens,
 * so a section can override them inline without extra classes.
 */
.grid {
  display: grid;
  gap: var(--grid-gap, var(--space-6));
  grid-template-columns: repeat(var(--grid-cols, 1), minmax(0, 1fr));
}

.grid--2 {
  --grid-cols: 2;
}

.grid--3 {
  --grid-cols: 2;
}
.grid--3 {
  --grid-cols: 3;
}

.grid--4 {
  --grid-cols: 2;
}
.grid--4 {
  --grid-cols: 4;
}

.grid--auto {
  grid-template-columns: repeat(auto-fill, minmax(var(--grid-min, 18rem), 1fr));
}

/* The listing grid in index.php breathes a little more than a section grid. */
.post-grid {
  --grid-gap: var(--space-8);
}

/* ==========================================================================
   layout/_section.scss
   ========================================================================== */
/*
 * The vertical rhythm of the page. The ACF renderer prints
 * `<section class="section section--{slug} [section--bg-*] [section--space-*]">`.
 */
.section {
  padding-block: var(--space-section);
}

.section--space-compact {
  padding-block: var(--space-section-sm);
}

.section--space-none {
  padding-block: 0;
}

.section--bg-alt {
  background-color: var(--color-surface-alt);
}
.section--posts-archive {
  padding: 30px 0;
}

/*
 * Inverted scopes re-point the colour tokens instead of restyling children;
 * only one direction is re-pointed per rule, so no custom property cycles.
 * Every colour token a component consumes has to be re-pointed here — a new
 * one added to _tokens.scss and left out below inherits its light value and
 * pairs a light surface with white text.
 */
.section--bg-dark {
  --color-text: var(--color-on-primary);
  /*
   * Not var(--color-border) any more: that token is re-pointed below, which
   * would drag muted text down to 2.4:1 on this ground. See the fix report.
   */
  --color-text-muted: color-mix(in srgb, var(--color-secondary) 20%, white);
  --color-surface: var(--color-secondary);
  --color-surface-alt: color-mix(in srgb, var(--color-secondary) 85%, white);
  --color-border: color-mix(in srgb, var(--color-secondary) 70%, white);
  --color-focus: var(--color-on-primary);
  --color-accent-text: var(--color-on-primary);
  background-color: var(--color-secondary);
  color: var(--color-text);
}

.section--bg-primary {
  --color-text: var(--color-on-primary);
  --color-text-muted: var(--color-on-primary);
  --color-surface: var(--color-primary);
  --color-surface-alt: color-mix(in srgb, var(--color-primary) 85%, white);
  --color-border: color-mix(in srgb, var(--color-primary) 60%, white);
  --color-focus: var(--color-on-primary);
  --color-accent-text: var(--color-on-primary);
  background-color: var(--color-primary);
  color: var(--color-text);
  /*
   * The default primary button is invisible on its own colour, so inside this
   * scope it inverts: white ground, primary label. Only here — .btn--primary
   * keeps its normal look everywhere else. Core's block button borrows the same
   * visuals in base/_buttons.scss, so it inverts with it.
   */
}
.section--bg-primary .btn--primary,
.section--bg-primary .wp-block-button__link {
  background-color: var(--color-on-primary);
  color: var(--color-primary);
}
.section--bg-primary .btn--primary:hover,
.section--bg-primary .wp-block-button__link:hover {
  background-color: color-mix(in srgb, var(--color-on-primary) 85%, transparent);
  color: var(--color-primary);
}

/* theme.json colours links primary, which is unreadable on an inverted ground. */
.section--bg-dark a,
.section--bg-primary a {
  color: currentcolor;
}
.section--about-intro {padding-bottom: 0;}
.section--about-pillars-summary {padding-bottom: 0;}

/*
 * Pe Home, cele trei distante dintre casete, contact, evenimente si articole
 * sunt la 60% din spatiul obisnuit dintre sectiuni: fiecare jumatate (jos la
 * cea de sus, sus la cea de jos) se strange la fel. Raman pe loc spatiul de
 * deasupra casetelor si cel de sub articole, spre subsol. --space-section e
 * fluid, deci proportia se pastreaza si pe telefon.
 */
.home .section--about-pillars,
.home .section--contact-summary,
.home .section--events-slider {
  padding-block-end: calc(var(--space-section) * 0.6);
}

.home .section--contact-summary,
.home .section--events-slider,
.home .section--posts-archive {
  padding-block-start: calc(var(--space-section) * 0.6);
}

/* Butonul unic de sub casetele de pe Home (about-pillars.php). */
.about-pillars__actions {
  display: flex;
  justify-content: center;
  margin-block-start: var(--space-12);
}
.section--about-achievements {padding-top: 3rem;}

/*
 * The header of a section, from template-parts/components/section-header.php.
 * It belongs to the .section family, so it lives here rather than in one of
 * the sections/ partials that all share it.
 */
.section__header {
  max-width: 60ch;
  margin-block-end: var(--space-8);
}

.section__header--center {
  margin-inline: auto;
  text-align: center;
}

.section__title {
  font-size: var(--fs-2xl);
}

.section__intro {
  margin-block-start: var(--space-3);
  color: var(--color-text-muted);
}

/*
 * Page-level regions that share the section rhythm. .site-main takes the free
 * height of the body column, which is what pins the footer down.
 */
.site-main {
  flex: 1 0 auto;
}

.page-header {
  padding-block: var(--space-8);
  border-bottom: 1px solid var(--color-border);
  background-color: var(--color-surface-alt);
}

.page-header__title {
  font-size: var(--fs-3xl);
}

/* Optional hero image above the title, from the `hero_image` field. */
.page-header__media {
  margin-block-end: var(--space-6);
}

.page-header__image {
  width: 100%;
}

.page-header__description {
  max-width: var(--container-narrow);
  margin-block-start: var(--space-3);
  color: var(--color-text-muted);
}

.error-404,
.no-results {
  padding-block: var(--space-section);
}

.error-404__text,
.no-results__text {
  max-width: var(--container-narrow);
  margin-block: var(--space-4) var(--space-8);
  color: var(--color-text-muted);
}

/* ==========================================================================
   layout/_header.scss
   ========================================================================== */
/*
 * Sticky masthead. header-scroll.js adds .is-scrolled past the first pixel and
 * writes the measured height to --header-height for scroll-padding.
 * The offset clears the admin bar, which core makes sticky for logged-in users
 * and whose height it publishes as --wp-admin--admin-bar--height.
 */
.site-header {
  position: sticky;
  top: var(--wp-admin--admin-bar--height, 0px);
  z-index: var(--z-header);
  background-color: var(--color-surface);
  transition: box-shadow var(--duration) var(--ease);
}

/*
 * Distantele din antet sunt strimte pentru ca meniul sa incapa pe un rand:
 * cu 32px intre sigla, meniu si actiuni raman 913px pentru un meniu care
 * cere 783px — si nu mai incape nimic in plus. Vezi comentariul de la
 * .nav .menu, unde e socoteala intreaga.
 */
.site-header__inner {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding-block: var(--space-6);
  transition: padding-block var(--duration) var(--ease);
}

.site-header.is-scrolled {
  box-shadow: var(--shadow);
}

.site-header.is-scrolled .site-header__inner {
  padding-block: var(--space-3);
}

/*
 * Sigla isi ia doar latimea ei. Spatiul liber il ia navigatia, care se
 * centreaza in el (vezi .nav / .nav .menu mai jos), asa ca meniul sta la
 * mijlocul distantei dintre sigla si lupa, nu lipit de butoane.
 *
 * In sertar navigatia e `position: fixed`, deci iese din flux si nu mai e
 * element de flex: acolo nu mai are ce sa impinga actiunile la dreapta, si
 * de asta treapta max-width: 1200px din visarta-mob.css pune marginea
 * automata inapoi pe sigla.
 */
.site-branding {
  min-width: 0;
}

.site-title {
  color: var(--color-text);
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  text-decoration: none;
}

.custom-logo-link {
  display: block;
}

.custom-logo {
  width: auto;
  max-height: 2.4375rem; /* the 148x39 logo of the design, unscaled */
}

.site-header__actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

/*
 * The search control is a 52px square in the design, a size up from the shared
 * component default.
 */
.site-header__actions .search-toggle {
  width: 2.75rem;
  height: 2.75rem;
}

.site-header__actions .search-toggle .icon {
  --icon-size: 1.25rem;
}

/* The header CTA never wraps, however long its label. */
.site-header__cta {
  white-space: nowrap;
}

/* ==========================================================================
   layout/_footer.scss
   ========================================================================== */
/*
 * The footer is built from two parts: template-parts/footer/columns.php prints
 * the .site-footer__top band (nothing at all while the theme options are empty)
 * and template-parts/footer/bottom.php prints the .site-footer__bottom bar.
 */
.site-footer {
  border-top: 1px solid var(--color-border);
  background-color: var(--color-surface-alt);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

.site-footer__top {
  padding-block: var(--space-12);
}

/* Branding, the about text and the contact list stack in the first grid cell. */
.site-footer__brand {
  display: grid;
  gap: var(--space-4);
  align-content: start;
}

a:hover {color: var(--color-accent);}

/*
 * .flow owns the rhythm of the about text; these two only strip the browser
 * default margins of a leading or trailing list, which no reset covers here
 * (unlike .site-footer__column, whose lists are zeroed below).
 */
.site-footer__about > :first-child {
  margin-block-start: 0;
}

.site-footer__about > :last-child {
  margin-block-end: 0;
}

.site-footer__contact {
  display: grid;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-footer__map {
  display: block;
}

.site-footer__heading {
  margin-block: 0 var(--space-3);
  color: var(--color-text);
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
}

/* Column content is pasted rich text, most often a list of links. */
.site-footer__column :where(ul, ol) {
  display: grid;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-footer a {
  color: inherit;
  text-decoration: none;
}

/* Muted body text, but the site name still reads as branding. */
.site-footer__branding .site-title {
  color: var(--color-text);
}

.site-footer a:hover {
  color: var(--color-primary);
  text-decoration: underline;
}

.site-footer__bottom {
  padding-block: var(--space-6);
}

/*
 * The rule only applies when the upper band is there, so a footer reduced to
 * its bottom bar keeps the single border of .site-footer.
 */
.site-footer__top + .site-footer__bottom {
  border-top: 1px solid var(--color-border);
}

.site-footer__bottom-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
}

/* The footer menu (wp_nav_menu, location `footer`). */
.footer-menu {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-6);
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-footer__copyright {
  margin: 0;
}

/*
 * Lives in footer.php, floats above the page. The arrow is drawn in CSS so the
 * control needs no icon file.
 */
.back-to-top {
  position: fixed;
  inset-block-end: var(--space-6);
  inset-inline-end: var(--space-6);
  z-index: calc(var(--z-header) - 1); /* must stay under the open nav drawer */
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  background-color: var(--color-surface);
  box-shadow: var(--shadow);
  color: var(--color-text);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--duration) var(--ease), visibility var(--duration) var(--ease), color var(--duration) var(--ease);
}

.back-to-top::before {
  content: "";
  width: 0.5rem;
  height: 0.5rem;
  border-top: 2px solid currentcolor;
  border-right: 2px solid currentcolor;
  rotate: -45deg;
  translate: 0 0.1rem;
}

.back-to-top:hover {
  color: var(--color-primary);
}

.back-to-top.is-visible {
  opacity: 1;
  visibility: visible;
}

/*
 * ---- The design's footer: a navy slab with rounded top corners ----
 * Appended after the structural rules above. The colours are re-pointed the way
 * .section--bg-dark does it, so every child keeps consuming the same tokens
 * instead of being restyled one by one.
 */
.site-footer {
  --color-text: var(--color-on-dark);
  --color-text-muted: var(--color-text-subtle);
  --color-surface: var(--color-secondary);
  --color-surface-alt: var(--color-navy-700);
  --color-border: color-mix(in srgb, var(--color-navy-700) 70%, white);
  --color-focus: var(--color-on-primary);
  /*
   * The structural rule at the top of this file draws a hairline above the
   * footer. On a navy slab with rounded top corners that reads as a stray
   * light line, and --color-border is re-pointed here anyway.
   */
  border-top: 0;
  border-start-start-radius: var(--radius-xl);
  border-start-end-radius: var(--radius-xl);
  background-color: var(--color-secondary);
  color: var(--color-text);
  overflow: clip;
}

.site-footer__top {
  padding-block: var(--space-30) var(--space-20);
}

/*
 * Brand block first and wider, then the link columns. One column on a phone,
 * two from md, the full row from lg.
 */
.site-footer__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-12);
}
.site-footer__grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.site-footer__grid {
  /*
   * fr units are proportional weights, not widths: 362fr against 1fr gave the
   * brand 362 of 366 parts and left each column about 3px wide. The design's
   * brand block is 362px against roughly 211px per column, so the ratio is 1.7.
   */
}
.site-footer__grid {
  grid-template-columns: minmax(0, 1.7fr) repeat(4, minmax(0, 1fr));
}

.site-footer__brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-8);
}

.site-footer__about {
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

.site-footer__heading {
  margin-block: 0 var(--space-6);
  color: var(--color-on-primary);
  font-family: var(--font-sans);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
  letter-spacing: normal;
}

/*
 * Sitemap links: the design's blue-300 on navy, and the accent for the page you
 * are on. The list comes either from a WYSIWYG column or from the contact list.
 */
.site-footer__column :where(ul, ol) {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  margin: 0;
  padding: 0;
  list-style: none;
}

.site-footer__column a {
  color: var(--color-blue-300);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  letter-spacing: 0.0067em;
  text-decoration: none;
}
.site-footer__column .site-footer__contact a {
  font-weight: var(--fw-regular);
}

.site-footer__column a:hover {
  color: var(--color-on-primary);
}

.site-footer__column [aria-current=page],
.site-footer__column .current-menu-item > a {
  color: var(--color-accent);
}

.site-footer__contact {
  color: var(--color-on-primary);
}

.site-footer__column:nth-of-type(2) li:nth-of-type(2) a, 
.site-footer__column:nth-of-type(3) li:last-of-type a, 
.site-footer__column:nth-of-type(4) li:nth-of-type(1) a {
  color: var(--color-accent-text);
}

.site-footer__contact-item {
  --icon-size: 1.25rem;
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  font-size: var(--fs-sm);
  font-weight: var(--fw-regular);
  line-height: 1.27;
  letter-spacing: 0.0067em;
}

.site-footer__contact-item .icon {
  margin-block-start: 0.15em;
  color: var(--color-primary);
}
.site-footer__contact-item .icon--mail {
  color: #fff;
}
.site-footer__contact-item .icon--map-pin {
  color: var(--color-accent-text);
}

.site-footer__contact-item a {
  color: var(--color-on-primary);
  text-decoration: none;
}

.site-footer__contact-item a:hover {
  color: var(--color-blue-300);
}

/*
 * The social row of the brand block: bare glyphs in the primary, not the
 * bordered pills the component defaults to.
 */
.site-footer__social .social-links__link,
.social-links.site-footer__social .social-links__link {
  --icon-size: 2rem;
  width: auto;
  height: auto;
  border: 0;
  color: var(--color-primary);
}

.site-footer__social .social-links__link:hover {
  color: var(--color-blue-300);
}

/* ---- the bottom bar ---- */
/*
 * The bottom bar is set apart by its own ground in the design, so the divider
 * the structural rules add above it is redundant here.
 */
.site-footer__top + .site-footer__bottom {
  border-top: 0;
}

.site-footer__bottom {
  background-color: var(--color-navy-700);
}

.site-footer__bottom-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-5);
  padding-block: 0;
}

.site-footer__copyright,
.footer-menu {
  color: var(--color-text-subtle);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-wide);
}

.footer-menu {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-7);
  margin: 0;
  padding: 0;
  list-style: none;
}

.footer-menu a {
  color: inherit;
  text-decoration: none;
}

.footer-menu a:hover {
  color: var(--color-on-primary);
}

/* ==========================================================================
   components/_skip-link.scss
   ========================================================================== */
/*
 * header.php ships the link as .skip-link.screen-reader-text, so focus has to
 * undo the visually-hidden treatment rather than add to it.
 */
.skip-link:focus {
  position: fixed;
  inset-block-start: var(--space-2);
  inset-inline-start: var(--space-2);
  z-index: var(--z-modal);
  width: auto;
  height: auto;
  margin: 0;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-lg);
  clip-path: none;
  color: var(--color-primary);
  font-weight: var(--fw-medium);
  text-decoration: underline;
}

/* ==========================================================================
   components/_nav.scss
   ========================================================================== */
/*
 * Primary navigation. Mobile-first: a drawer that slides in from the end edge,
 * switching to an inline bar with hover/focus flyouts from `lg`.
 * nav.js toggles .is-open on .nav, html.nav-open, and li.is-open for submenus.
 */
/* ---- Hamburger (below lg only; sits after the header actions) ---- */
.nav-toggle {
  order: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px; /* with the 2px bars this makes a 7px pitch — the close translate */
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: none;
  color: var(--color-text);
  transition: border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.nav-toggle:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

/* The first child is the .screen-reader-text label, so the bars are 2…4. */
.nav-toggle__bar {
  width: 1.25rem;
  height: 2px;
  margin-inline: auto;
  background-color: currentcolor;
  transition: opacity var(--duration) var(--ease), rotate var(--duration) var(--ease), translate var(--duration) var(--ease);
}

.nav-toggle[aria-expanded=true] .nav-toggle__bar:nth-child(2) {
  rotate: 45deg;
  translate: 0 7px;
}

.nav-toggle[aria-expanded=true] .nav-toggle__bar:nth-child(3) {
  opacity: 0;
}

.nav-toggle[aria-expanded=true] .nav-toggle__bar:nth-child(4) {
  rotate: -45deg;
  translate: 0 -7px;
}

/* ---- Drawer ---- */
.nav {
  position: fixed;
  inset: calc(var(--header-height) + var(--wp-admin--admin-bar--height, 0px)) 0 0 auto;
  z-index: var(--z-overlay);
  width: min(20rem, 85vw);
  padding: var(--space-4);
  border-inline-start: 1px solid var(--color-border);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-lg);
  overflow-y: auto;
  visibility: hidden;
  translate: 100% 0;
  transition: translate var(--duration) var(--ease), visibility var(--duration) var(--ease);
}

.nav.is-open {
  visibility: visible;
  translate: 0 0;
}

/* The page must not scroll behind the open drawer. */
html.nav-open {
  overflow: hidden;
}

/*
 * Without JavaScript nothing can open the drawer, so it stops being one: the
 * menu returns to the flow with every submenu expanded.
 */
html:not(.js) .nav {
  position: static;
  visibility: visible;
  translate: none;
}

html:not(.js) .nav .sub-menu {
  display: block;
}

/* ---- Menu ---- */
.nav .menu {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  list-style: none;
}

.nav .menu a {
  display: block;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  color: var(--color-text);
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  text-decoration: none;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.nav .menu a:hover {
  background-color: #EBF5FD;
  color: var(--color-primary);
}

.nav .current-menu-item > a,
.nav .current-menu-ancestor > a,
.nav .current_page_item > a {
  color: var(--color-primary);
}

/* A parent item is a row: link, submenu button, and the submenu on its own line. */
.nav .menu-item-has-children {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}

.nav .menu-item-has-children > a {
  flex: 1 1 auto;
}

.nav .submenu-toggle {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border: 0;
  border-radius: var(--radius-sm);
  background: none;
  color: var(--color-text-muted);
}

/* The button holds endsoft_icon( 'chevron-down' ), which flips when open. */
.nav .submenu-toggle .icon {
  --icon-size: 1rem;
  transition: rotate var(--duration) var(--ease);
}

.nav .submenu-toggle[aria-expanded=true] .icon {
  rotate: 180deg;
}

.nav .sub-menu {
  display: none;
  flex: 1 0 100%;
  margin: 0;
  padding-inline-start: var(--space-4);
  list-style: none;
}

.nav li.is-open > .sub-menu {
  display: block;
}

/* ---- Inline navigation ---- */
.nav-toggle {
  display: none;
}
.nav {
  position: static;
  inset: auto;
  z-index: auto;
  flex: 1 1 auto;
  width: auto;
  padding: 0;
  border: 0;
  background: none;
  box-shadow: none;
  overflow: visible;
  visibility: visible;
  translate: none;
}
.nav .menu {
  flex-direction: row;
  align-items: center;
  gap: var(--space-1);
}
.nav .submenu-toggle {
  display: none;
}
.nav .sub-menu {
  position: absolute;
  inset-block-start: 100%;
  inset-inline-start: 0;
  z-index: var(--z-overlay);
  display: block;
  min-width: 13rem;
  padding: var(--space-2);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-lg);
  opacity: 0;
  visibility: hidden;
  translate: 0 var(--space-2);
  transition: opacity var(--duration) var(--ease), translate var(--duration) var(--ease), visibility var(--duration) var(--ease);
}
.nav .menu-item-has-children:hover > .sub-menu,
.nav .menu-item-has-children:focus-within > .sub-menu {
  opacity: 1;
  visibility: visible;
  translate: 0 0;
}
/*
 * ---- The design's inline bar: navy labels, wide item pitch ----
 * Appended after the mobile-first rules above so it wins without raising
 * specificity; the drawer below lg keeps its own colours. The selectors follow
 * core's nav markup — the walker adds no BEM classes of its own.
 */
/*
 * Socoteala randului. Containerul se opreste la 1280px, deci latimea barei nu
 * mai creste oricat de lat ar fi ecranul: sigla 148 + actiuni 154 + 2x16
 * spatiu lasa 946px pentru meniu, si atat ramane si la 2560px.
 *
 * Litera e cea din design, 15px. Intre capitole designul are 24px, dar cu
 * etichetele de acum („Autori/Membri”, „Drepturi gestionate”) cele sapte
 * capitole cereau asa 949px — cu 3px peste cei 946, si „Drepturi gestionate”
 * cadea pe al doilea rand. Cu 20px cer 925px: incap, cu 21px de rezerva.
 * O eticheta noua sau mai lunga poate consuma rezerva; atunci se rupe din nou.
 * Tot asa, randul incape numai pentru ca .submenu-toggle si-a pierdut
 * paddingul lateral mai jos.
 *
 * Sub 1600px nici asta nu mai ajunge, iar treapta max-width: 1600px din
 * visarta-mob.css string 15px la 14px si 20px la 8px. Sub 1200px meniul trece
 * de tot pe sertar — vezi --bp-nav.
 *
 * `justify-content: center` e centrarea ceruta: navigatia ia spatiul liber
 * (`flex: 1 1 auto` mai sus), iar capitolele stau la mijlocul lui, la egala
 * distanta de sigla si de lupa. In sertar se anuleaza, altfel ar centra pe
 * verticala o coloana de linkuri.
 */
.nav .menu {
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3) var(--space-5);
}
.nav .menu > .menu-item > a {
  color: var(--color-navy-700);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  letter-spacing: 0.0067em;
}
.nav .menu > .menu-item > a:hover,
.nav .menu > li.is-open > a {
  color: var(--color-primary);
}
/*
 * The design keeps a small chevron beside every item that has a dropdown.
 * The rules above hide .submenu-toggle at this width; it comes back as a
 * compact indicator rather than a CSS arrow, so it stays a real control for
 * keyboard and touch, where hover never fires.
 * The drawer rules let a parent item wrap so the submenu can sit on its own
 * line. Inline, that wrap is what pushes the chevron under the label.
 */
.nav .menu > .menu-item-has-children {
  flex-wrap: nowrap;
  gap: 2px;
}
.nav .menu > .menu-item-has-children > a {
  flex: 0 0 auto;
}
/*
 * Butonul isi pastreaza paddingul de buton in sertar, unde e o tinta de
 * 36px pentru deget. Inline e doar un indicator langa eticheta, iar cei
 * 12px de padding lateral din jurul iconitei de 16px inseamna 36px de gol
 * pe cele trei capitole cu submeniu — exact cat lipsea ca randul sa incapa.
 *
 * Paddingul pe verticala ramane: pe o tableta in landscape bara asta e ce
 * vede utilizatorul, iar hover-ul nu exista acolo, deci chevronul trebuie sa
 * ramana apasabil. 16x32px nu e cat recomanda WCAG, dar e de doua ori cat ar
 * fi fost iconita singura, si nu costa nimic in latime.
 */
.nav .menu > .menu-item-has-children > .submenu-toggle {
  display: inline-flex;
  width: auto;
  height: auto;
  padding-block: var(--space-2);
  padding-inline: 0;
  color: var(--color-navy-700);
}
.nav .menu > .menu-item-has-children > .submenu-toggle .icon {
  --icon-size: 1rem;
}
.nav .menu > .menu-item-has-children:hover > .submenu-toggle {
  color: var(--color-primary);
}
/* ==========================================================================
   components/_search-overlay.scss
   ========================================================================== */
/*
 * The trigger lives in the header actions, the overlay is a native <dialog>:
 * Escape, the focus trap and the inert background come from the platform.
 * search-overlay.js only calls showModal()/close().
 */
.search-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: none;
  color: var(--color-text);
  transition: border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.search-toggle:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

.search-toggle svg {
  width: 1.25rem;
  height: 1.25rem;
}

.search-overlay {
  width: min(100% - 2 * var(--container-gutter), 36rem);
  max-width: none;
  margin-block-start: 12vh;
  margin-inline: auto;
  padding: 0; /* padding would belong to the dialog box and swallow backdrop clicks */
  border: 0;
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-lg);
}

.search-overlay::backdrop {
  background-color: var(--color-backdrop);
}

/*
 * The close button is absolutely placed over the top-right corner of the
 * dialog, so the form starts below it instead of under it.
 */
.search-overlay .search-form {
  padding: var(--space-12) var(--space-6) var(--space-6);
}

.search-overlay__close {
  position: absolute;
  inset-block-start: var(--space-2);
  inset-inline-end: var(--space-2);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border: 0;
  border-radius: var(--radius-sm);
  background: none;
  color: var(--color-text-muted);
}

.search-overlay__close:hover {
  color: var(--color-text);
}

.search-overlay__close svg {
  width: 1rem;
  height: 1rem;
}

/* ==========================================================================
   components/_lang-switcher.scss
   ========================================================================== */
/*
 * template-parts/header/language-switcher.php, inside .site-header__actions.
 * Renders only when WPML or Polylang reports two or more languages, so these
 * rules are dormant on a single-language site.
 */
.lang-switcher {
  display: flex;
}

.lang-switcher__list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  list-style: none;
}

/*
 * The link's label is the language code, which the markup keeps lowercase so
 * the accessible name stays the plain code.
 */
.lang-switcher__link {
  display: inline-block;
  padding: var(--space-1) var(--space-2);
  border-radius: var(--radius-sm);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
  line-height: var(--lh-tight);
  text-decoration: none;
  text-transform: uppercase;
  transition: color var(--duration) var(--ease), background-color var(--duration) var(--ease);
}
.lang-switcher__link:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.lang-switcher__link:hover {
  color: var(--color-primary);
}

/*
 * The class and the attribute say the same thing; matching both keeps the rule
 * true if either one is dropped.
 */
.lang-switcher__link.is-active,
.lang-switcher__link[aria-current=page] {
  background-color: var(--color-surface-alt);
  color: var(--color-text);
  font-weight: var(--fw-medium);
}

/* ==========================================================================
   components/_card.scss
   ========================================================================== */
/* Post teaser used by template-parts/content/card.php and the cards section. */
.card {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
  overflow: hidden;
  transition: box-shadow var(--duration) var(--ease), translate var(--duration) var(--ease);
}

.card:hover {
  box-shadow: var(--shadow-lg);
  translate: 0 -2px;
}

.card__media {
  display: block;
  overflow: hidden;
}

.card__image {
  width: 100%;
  object-fit: cover;
  aspect-ratio: 1.5;
}

.card__body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-6);
}

.card__title {
  font-size: var(--fs-xl);
}

.card__link {
  color: inherit;
  text-decoration: none;
  transition: color var(--duration) var(--ease);
}

.card__link:hover {
  color: var(--color-primary);
}

.card__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-3);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

.card__excerpt {
  color: var(--color-text-muted);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  /* keeps cards in a row the same height */
}

/* ==========================================================================
   components/_post-card.scss
   ========================================================================== */
/*
 * Archive teaser from template-parts/content/card-post.php. Where .card leads
 * with the featured image, this one leads with the category pill: the design's
 * archive cards are text-first, and the image band is only as tall as the pill
 * sitting in it.
 */
.post-card {
  display: flex;
  flex-direction: column;
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-muted);
  overflow: hidden;
  transition: box-shadow var(--duration) var(--ease), translate var(--duration) var(--ease);
}

.post-card:hover {
  box-shadow: var(--shadow-lg);
  translate: 0 -2px;
}

/*
 * 71px in the design, which is the pill plus the 16px inset around it. Held as
 * a minimum rather than left to the pill: a search result can be a page, which
 * has no category to name, and without the floor its title would start higher
 * than the titles of the cards beside it.
 */
.post-card__top {
  flex: none;
  min-height: 4.4375rem;
  padding: var(--space-4);
}

.post-card__body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-5) var(--space-5) var(--space-6);
}

.post-card__head {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.post-card__title {
  font-family: var(--font-sans);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
  /*
   * Two lines is what the design's card height allows; a longer headline is
   * cut rather than pushing the meta row and the excerpt out of the card.
   */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}

.post-card__link {
  color: inherit;
  text-decoration: none;
  transition: color var(--duration) var(--ease);
}

.post-card__link:hover {
  color: var(--color-primary);
}

.post-card__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  color: var(--color-text);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

.post-card__meta-item {
  display: inline-flex;
  gap: var(--space-2);
  align-items: center;
}

.post-card__meta-item .icon {
  flex: none;
  width: 1.25rem;
  height: 1.25rem;
}

/* The date is the one accent-coloured thing on the card. */
.post-card__meta-item--date {
  color: var(--color-accent);
}

.post-card__excerpt {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: var(--lh-loose);
  /*
   * Pushes the read-more link to the foot of the card, so the links of a row
   * line up whatever each excerpt runs to.
   */
  flex: 1 1 auto;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

/*
 * A second route to the post the title already links to, so it is left out of
 * the tab order — the same arrangement .card uses for its image link.
 */
.post-card__more {
  display: inline-flex;
  gap: var(--space-1);
  align-items: center;
  align-self: flex-start;
  color: var(--color-text);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
  text-decoration: none;
  transition: color var(--duration) var(--ease), gap var(--duration) var(--ease);
}

.post-card:hover .post-card__more {
  gap: var(--space-2);
  color: var(--color-primary);
}

.post-card__more .icon {
  width: 1.5rem;
  height: 1.5rem;
}
.post-card__meta-item .icon--clock {color: var(--color-blue-300);}

/* ==========================================================================
   components/_tab.scss
   ========================================================================== */
/*
 * The pill of the design, in both the places it appears: a filter in the tab
 * row of the Posts archive section, and the category badge on a post card.
 */
.tab {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  background-color: var(--color-surface);
  color: var(--color-text-subtle);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-wide);
  text-align: center;
  text-decoration: none;
  transition: border-color var(--duration) var(--ease), background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
.tab:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.tab:hover {
  border-color: var(--color-blue-300);
  color: var(--color-blue-900);
}

/*
 * The design labels this one in blue-700, which the palette has no token for.
 * blue-900 is the nearest token and the colour the same design already gives
 * the pill on a card, so the two pills stay one thing.
 */
.tab--current {
  border-color: var(--color-blue-300);
  background-color: var(--color-blue-50);
  color: var(--color-blue-900);
  box-shadow: 0 6px 12px rgba(107, 179, 232, 0.2);
}

/* ==========================================================================
   components/_entry.scss
   ========================================================================== */
/*
 * template-parts/content/single.php: the single-post entry, its meta and the
 * prev/next pair printed by the_post_navigation(). The prose rhythm itself
 * lives in base/_wordpress.scss, the one owner of .entry-content/.entry__content.
 */
.entry__header {
  margin-block-end: var(--space-8);
}

.entry__title {
  font-size: var(--fs-4xl);
}

.entry__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-4);
  margin-block-start: var(--space-3);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

/*
 * endsoft_posted_on() prints .posted-on, .byline and .entry-date with no rules
 * of their own: their container owns the typography and the flex gap, so only
 * the links inside them need a treatment.
 */
.byline__author,
.entry__categories a {
  color: inherit;
  text-decoration: none;
}

.byline__author:hover,
.entry__categories a:hover {
  color: var(--color-primary);
  text-decoration: underline;
}

.entry__media {
  margin-block-end: var(--space-8);
}

.entry__image {
  width: 100%;
  border-radius: var(--radius-lg);
}

.entry__footer {
  margin-block-start: var(--space-8);
  padding-block-start: var(--space-6);
  border-top: 1px solid var(--color-border);
}

.entry__tags {
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

.entry__tags-label {
  font-weight: var(--fw-medium);
}

/* the_post_navigation(): .post-navigation > .nav-links > .nav-previous/.nav-next. */
.post-navigation {
  margin-block: var(--space-12);
  padding-block: var(--space-6);
  border-block: 1px solid var(--color-border);
}

.post-navigation .nav-links {
  display: grid;
  gap: var(--space-6);
}
.post-navigation .nav-links {
  grid-template-columns: 1fr 1fr;
}

.post-navigation .nav-next {
  text-align: end;
}

.post-navigation a {
  color: inherit;
  text-decoration: none;
}

.nav-subtitle {
  display: block;
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

.nav-title {
  font-weight: var(--fw-medium);
  transition: color var(--duration) var(--ease);
}

.post-navigation a:hover .nav-title {
  color: var(--color-primary);
}

/* ==========================================================================
   components/_article.scss
   ========================================================================== */
/*
 * template-parts/content/single-article.php: the news/events article. The
 * opening band is `.section--contact-hero`, which sections/_contact-hero.scss
 * owns — that partial is written as the band that opens any inner page, so only
 * the meta row under the title is new here.
 */
/*
 * The headline of an article runs longer than a page title, so the band's
 * 40rem cap would break it into four or five lines.
 */
.contact-hero--article {
  max-width: 56rem;
}

.article-hero__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-5);
  align-items: center;
  color: var(--color-on-primary);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

.article-hero__meta-item {
  display: inline-flex;
  gap: var(--space-2);
  align-items: center;
}

.article-hero__meta-item .icon {
  flex: none;
  width: 1.25rem;
  height: 1.25rem;
}

/*
 * On a card the date is the pure accent red; on this navy band that lands under
 * 3:1, so it takes the soft accent the band's own subtitle uses.
 */
.article-hero__meta-item--date {
  color: var(--color-accent-soft);
}

/* ---- the prose beside the sidebar ---- */
.article {
  display: grid;
  gap: var(--space-12);
  align-items: start;
}
.article {
  /* The design's 850/411 split. */
  grid-template-columns: minmax(0, 850fr) minmax(0, 411fr);
  gap: var(--space-16);
}

.article__main {
  min-width: 0;
}

.article__sidebar {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
  /* Follows the reader down the article, clear of the sticky header. */
}
.article__sidebar {
  position: sticky;
  top: calc(var(--header-height) + var(--space-5));
}

/* ---- the sidebar cards ---- */
.article-panel {
  padding: var(--space-10) var(--space-7);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
}

/* The share card puts its heading and the icons on one line. */
.article-panel--row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  align-items: center;
  justify-content: space-between;
}

.article-panel__title {
  font-family: var(--font-sans);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

.article-hero__meta-item .icon--clock {
  color: var(--color-blue-300);
}

/* ---- the numbered category list ---- */
/*
 * An <ol> without its markers: the 01, 02 … are spans, so they can sit in a
 * column of their own and take the row's colour.
 */
.article-cats {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-block-start: var(--space-6);
  margin-inline: 0;
  padding: 0;
  list-style: none;
}

.article-cats__link {
  display: flex;
  gap: var(--space-1);
  align-items: baseline;
  padding: var(--space-3) var(--space-6);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
  color: var(--color-text-subtle);
  text-decoration: none;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
.article-cats__link:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.article-cats__link:hover {
  background-color: var(--color-blue-50);
  color: var(--color-blue-900);
}

.article-cats__link--current {
  background-color: var(--color-blue-50);
  color: var(--color-primary-dark);
}

.article-cats__index {
  flex: none;
  width: 2.25rem;
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

.article-cats__label {
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

/* ---- share ---- */
.article-share {
  display: flex;
  gap: var(--space-5);
  margin: 0;
  padding: 0;
  list-style: none;
}

.article-share__link {
  display: inline-flex;
  color: var(--color-primary);
  transition: color var(--duration) var(--ease);
}
.article-share__link:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.article-share__link:hover {
  color: var(--color-primary-dark);
}

.article-share__link .icon {
  width: 2rem;
  height: 2rem;
}

/*
 * The article brings its own related-posts slider, so the entry needs no
 * bottom padding of its own under it.
 */
.entry--article {
  padding-block: var(--space-16) 0;
}

/* ==========================================================================
   components/_comments.scss
   ========================================================================== */
/*
 * comments.php plus the markup core prints itself: wp_list_comments() nests
 * .comment-list/.children, comment_form() prints .comment-form with
 * .comment-notes, .logged-in-as and an <input type="submit" class="submit">.
 */
.comments {
  padding-block: var(--space-12);
  border-top: 1px solid var(--color-border);
  background-color: var(--color-surface-alt);
}

.comments__title {
  font-size: var(--fs-2xl);
}

/*
 * .comments__post-title (the quoted post title inside the heading) inherits the
 * heading on purpose; it exists so a project can restyle just that fragment.
 */
.comments__closed {
  color: var(--color-text-muted);
}

.comment-list {
  margin-block: var(--space-8);
  padding: 0;
  list-style: none;
}

.comment-list > li + li {
  margin-block-start: var(--space-6);
}

.comment-list .children {
  margin-block-start: var(--space-6);
  padding-inline-start: var(--space-6);
  border-inline-start: 1px solid var(--color-border);
  list-style: none;
}

.comment-body {
  padding: var(--space-6);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
}

.comment-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-3);
  align-items: center;
  margin-block-end: var(--space-3);
  font-size: var(--fs-sm);
}

.comment-author img {
  border-radius: var(--radius-full);
}

.comment-metadata {
  color: var(--color-text-muted);
}

.comment-meta a {
  color: inherit;
  text-decoration: none;
}

.comment-meta a:hover {
  color: var(--color-primary);
  text-decoration: underline;
}

.comment-content > * + * {
  margin-block-start: var(--space-4);
}

.reply {
  margin-block-start: var(--space-3);
  font-size: var(--fs-sm);
}

/* The reply form core moves into the thread must not inherit the list indent. */
.comment-respond {
  margin-block-start: var(--space-8);
}

.comment-reply-title {
  font-size: var(--fs-xl);
}

.comment-form {
  display: grid;
  gap: var(--space-4);
  margin-block-start: var(--space-6);
}

.comment-form p {
  margin: 0;
}

.comment-notes,
.logged-in-as {
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

.comment-form-cookies-consent {
  display: flex;
  gap: var(--space-2);
  align-items: baseline;
}

.comment-form-cookies-consent label {
  font-weight: var(--fw-regular);
}

/* ==========================================================================
   components/_icon.scss
   ========================================================================== */
/*
 * endsoft_icon() inlines assets/icons/*.svg with no width/height attributes, so
 * the size comes from here: 1em by default (it follows the text it sits next
 * to), overridable per context through --icon-size. Colour is `currentColor` in
 * the files themselves.
 */
.icon {
  display: inline-block;
  flex: none;
  width: var(--icon-size, 1em);
  height: var(--icon-size, 1em);
  vertical-align: middle;
}

/* ==========================================================================
   components/_social-links.scss
   ========================================================================== */
/* endsoft_social_links(): a row of icon links read from the theme options. */
.social-links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.social-links__link {
  --icon-size: 1.25rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  color: var(--color-text);
  text-decoration: none;
  transition: border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.social-links__link:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

/*
 * The .social-links__item list items carry no rules: the flex parent owns the
 * layout. Shown instead of the icon when a network has no SVG in assets/icons/.
 */
.social-links__text {
  font-size: var(--fs-sm);
}

/* ==========================================================================
   components/_accordion.scss
   ========================================================================== */
/*
 * FAQ items are native <details name="faq-{id}"> elements — the name attribute
 * gives exclusive open behaviour, so there is no accordion JS at all.
 */
.accordion {
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background-color: var(--color-surface);
}

.accordion + .accordion {
  margin-block-start: var(--space-3);
}

.accordion__summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-6);
  font-weight: var(--fw-medium);
  list-style: none; /* Firefox marker */
  cursor: pointer;
}

.accordion__summary::-webkit-details-marker {
  display: none; /* Safari marker */
}

.accordion__summary::after {
  content: "";
  flex: 0 0 auto;
  width: 0.5rem;
  height: 0.5rem;
  border-right: 2px solid currentcolor;
  border-bottom: 2px solid currentcolor;
  rotate: 45deg;
  translate: 0 -0.15rem;
  transition: rotate var(--duration) var(--ease);
}

.accordion[open] .accordion__summary::after {
  rotate: -135deg;
  translate: 0 0.15rem;
}

.accordion__content {
  padding: 0 var(--space-6) var(--space-6);
  color: var(--color-text-muted);
}

/* ==========================================================================
   components/_swiper.scss
   ========================================================================== */
/*
 * Swiper's own CSS is imported from src/js/main.js (before main.scss), so these
 * rules win the cascade. Everything is driven through Swiper's public custom
 * properties; the theme never loads Swiper's Sass.
 */
.slider {
  --swiper-theme-color: var(--color-accent-text);
  --swiper-navigation-size: 1rem;
  --swiper-pagination-bullet-inactive-color: var(--color-text-muted);
  --swiper-pagination-bullet-inactive-opacity: 0.35;
  position: relative;
}

/*
 * The arrows and the pagination are siblings of .swiper inside .slider.
 * Swiper 14 draws the arrow as an <svg> sized 100% of the button, so the
 * padding — not --swiper-navigation-size — is what keeps the glyph from
 * filling the whole circle.
 */
.slider .swiper-button-prev,
.slider .swiper-button-next {
  width: 2.75rem;
  height: 2.75rem;
  margin: 0;
  padding: 0.75rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  background-color: var(--color-surface);
  box-shadow: var(--shadow);
  color: var(--color-primary);
  translate: 0 -50%;
  transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.slider .swiper-button-prev {
  inset-inline-start: 0;
}

.slider .swiper-button-next {
  inset-inline-end: 0;
}

.slider .swiper-button-prev:hover,
.slider .swiper-button-next:hover {
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

.slider .swiper-button-disabled {
  opacity: 0.3;
}

.slider .swiper-pagination {
  position: static;
  margin-block-start: var(--space-4);
}

/*
 * A slider whose arrows sit in the section header rather than over the slides.
 * Both the events carousel and the posts slider are built that way, so the
 * disc lives here instead of in either section.
 *
 * The rules undo the absolute placement Swiper's own CSS — and the block above —
 * give the buttons. sliders.js finds them by looking inside
 * [data-slider-scope], which the section root carries, so moving them in the
 * markup costs nothing.
 */
.slider .slider-arrow {
  position: static;
  width: 3.5rem;
  height: 3.5rem;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: var(--radius-full);
  background-color: var(--color-primary);
  box-shadow: none;
  color: var(--color-on-primary);
  translate: none;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.slider .slider-arrow:hover {
  background-color: var(--color-primary-dark);
  color: var(--color-on-primary);
}

/*
 * Swiper sizes any <svg> inside the button to fill it; the design's glyph is
 * 24px in a 56px disc.
 */
.slider-arrow .icon {
  width: 1.5rem;
  height: 1.5rem;
}

/*
 * A solid grey disc rather than a faded blue one, which is how the design draws
 * the step that has nowhere left to go.
 */
.slider .slider-arrow.swiper-button-disabled {
  background-color: var(--color-border);
  color: var(--color-text);
  opacity: 1;
}

/* ==========================================================================
   components/_pager.scss
   ========================================================================== */
/*
 * The design's pager: a disc per page, and the steps either side of it as pills
 * with a label. Two kinds of markup wear it, because two kinds of query need
 * paging — core's `the_posts_pagination()` on a real archive, which prints
 * `.pagination > .nav-links`, and the theme's own `paginate_links()` call in the
 * Posts archive section, which prints a `.pager` of bare anchors. Both come out
 * as `.page-numbers`, so the rules below only differ in the wrapper.
 */
.pager,
.pagination .nav-links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-5);
  align-items: center;
  justify-content: center;
}

:is(.pager, .pagination .nav-links) .page-numbers {
  display: inline-flex;
  gap: var(--space-1);
  align-items: center;
  justify-content: center;
  min-width: 3rem;
  min-height: 3rem;
  padding: 0;
  border: 1px solid var(--color-text);
  border-radius: var(--radius-full);
  background-color: transparent;
  color: var(--color-text);
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  line-height: 1;
  text-decoration: none;
  transition: border-color var(--duration) var(--ease), background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
:is(.pager, .pagination .nav-links) .page-numbers:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

:is(.pager, .pagination .nav-links) a.page-numbers:hover {
  border-color: var(--color-primary);
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

:is(.pager, .pagination .nav-links) .page-numbers.current {
  border-color: var(--color-primary);
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

:is(.pager, .pagination .nav-links) .page-numbers.dots {
  border-color: transparent;
}

/* The two steps are pills with a label rather than discs with a digit. */
:is(.pager, .pagination .nav-links) :is(.prev, .next) {
  min-height: 2.75rem;
  padding-inline: var(--space-5);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  letter-spacing: var(--ls-wide);
}

/* Icon only: the label beside it is for screen readers. */
:is(.pager, .pagination .nav-links) .prev {
  padding-inline: var(--space-4);
}

:is(.pager, .pagination .nav-links) .page-numbers .icon {
  flex: none;
  width: 1rem;
  height: 1rem;
}

/*
 * The page numbers themselves are drawn by components/_pager.scss, which one
 * owner shares between core's `the_posts_pagination()` and the theme's own
 * `paginate_links()` call. All that is left here is the outer rhythm and
 * `wp_link_pages()`, which paginates a single post's content rather than a
 * query and so has nothing to do with the pager.
 */
/* ==========================================================================
   components/_pagination.scss
   ========================================================================== */
.pagination {
  margin-block-start: var(--space-12);
}

.page-links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: center;
  justify-content: center;
  margin-block-start: var(--space-8);
  font-size: var(--fs-sm);
}

.page-links a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.5rem;
  min-height: 2.5rem;
  padding-inline: var(--space-2);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  color: var(--color-text);
  font-size: var(--fs-sm);
  text-decoration: none;
  transition: border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.page-links a:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

/* ==========================================================================
   components/_search-results.scss
   ========================================================================== */
/*
 * search.php: the results page. The block is `.search-page` rather than
 * `.search-results`, which is a core body class — two meanings on one name
 * would be a trap the next time someone greps for it.
 *
 * The opening band is `.section--contact-hero` and the cards are `.post-card`,
 * so this partial only owns the line that names the query and the count under
 * it. The pager is components/_pager.scss.
 */
.search-page__header {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  align-items: flex-start;
}

.search-page__title {
  font-family: var(--font-sans);
  font-size: var(--fs-3xl);
  line-height: 1.15;
  letter-spacing: var(--ls-tight-sm);
}

/* The term the reader typed, picked out of the sentence around it. */
.search-page__query {
  color: var(--color-accent);
}

.search-page__count {
  color: var(--color-text-subtle);
  font-size: var(--fs-lg);
  line-height: var(--lh-loose);
}

.search-page__count strong {
  font-weight: var(--fw-bold);
}

.search-page__grid {
  margin-block-start: var(--space-15);
  align-items: stretch;
}

.search-page .pagination {
  margin-block-start: var(--space-15);
}

/*
 * Nothing matched. The design has no empty state, so the header stays — it
 * already reads "Au fost găsite 0 rezultate" — and a form to try again follows.
 */
.search-page__empty {
  max-width: 40rem;
  margin-block-start: var(--space-10);
}

.search-page__empty-text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: var(--lh-loose);
}

.search-page__empty .search-form {
  margin-block-start: var(--space-6);
}

/* ==========================================================================
   components/_breadcrumbs.scss
   ========================================================================== */
/* The fallback trail in inc/template-tags.php, and Yoast's, both use .breadcrumbs. */
.breadcrumbs {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-block-end: var(--space-2);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
}

.breadcrumbs p {
  margin: 0; /* Rank Math wraps its trail in a paragraph */
}

.breadcrumbs a {
  color: inherit;
  text-decoration: none;
}

.breadcrumbs a:hover {
  color: var(--color-primary);
  text-decoration: underline;
}

.breadcrumbs__separator {
  color: var(--color-border);
}

.breadcrumbs__current {
  color: var(--color-text);
}

/* ==========================================================================
   components/_reveal.scss
   ========================================================================== */
/*
 * Scroll-in animation, the replacement for AOS. reveal.js adds .is-visible with
 * an IntersectionObserver. Hiding is gated on html.js so content without
 * JavaScript — and in feed readers — is never invisible.
 */
[data-reveal] {
  transition: opacity var(--duration-slow) var(--ease), translate var(--duration-slow) var(--ease);
  transition-delay: var(--reveal-delay, 0s);
}

html.js [data-reveal]:not(.is-visible) {
  opacity: 0;
  translate: 0 1.5rem;
}

html.js [data-reveal=left]:not(.is-visible) {
  translate: -1.5rem 0;
}

html.js [data-reveal=fade]:not(.is-visible) {
  translate: none;
}

/* Paper has no scrolling, so nothing may still be waiting to be revealed. */
@media print {
  [data-reveal] {
    opacity: 1;
    translate: none;
  }
}
/*
 * Reduced motion: reveal.js marks everything visible immediately, and nothing
 * here may hide content in the meantime.
 */
@media (prefers-reduced-motion: reduce) {
  [data-reveal] {
    transition: none;
  }
  html.js [data-reveal]:not(.is-visible) {
    opacity: 1;
    translate: none;
  }
}
/* ==========================================================================
   sections/_hero.scss
   ========================================================================== */
/*
 * Text and image side by side from md. The section wrapper already owns the
 * vertical rhythm, so the hero only describes its own grid.
 */
.hero {
  display: grid;
  align-items: center;
  gap: var(--space-8);
}
.hero {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

/*
 * Without an image the text keeps a readable measure instead of stretching
 * across the whole container.
 */
.hero--no-image {
  max-width: var(--container-narrow);
}
.hero--no-image {
  grid-template-columns: minmax(0, 1fr);
}

.hero__content {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-4);
}

.hero__title {
  font-size: var(--fs-4xl);
  line-height: var(--lh-tight);
}

.hero__text {
  max-width: 60ch;
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
}

.hero__image {
  width: 100%;
  border-radius: var(--radius-lg);
}

/* ==========================================================================
   sections/_home-hero.scss
   ========================================================================== */
/*
 * The tall opening band of the front page. Like .section--contact-hero, the
 * ground and the clipping belong to the section wrapper: the band runs full
 * width while the text stays inside .container. Inert in the editor bundle,
 * which loads no layout/ partials and so has no .section rule to modify.
 *
 * Colturi drepte, fara rotunjire: eroul paginii de start merge dintr-o margine
 * in alta a ecranului. Doar eroul paginilor interioare (.section--contact-hero)
 * are colturile de jos rotunjite. `overflow: clip` rămâne — el ține fotografia
 * de fond în bandă.
 */
.section--home-hero {
  position: relative;
  background-color: var(--color-blue-900);
  color: var(--color-on-primary);
  overflow: clip;
  padding-block: 0;
}

.home-hero__backdrop {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

.home-hero__backdrop-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/*
 * A scrim over the photograph. The design puts white type straight onto a
 * bright cityscape, which leaves the headline at roughly 1.5:1 against the sky
 * — the gradient is what makes the same composition readable. Darkest at the
 * foot, where the quick links sit on the busiest part of the picture.
 */
.home-hero__backdrop::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: linear-gradient(to bottom, rgba(13, 59, 110, 0.45) 0%, rgba(13, 59, 110, 0.3) 35%, rgba(13, 59, 110, 0.72) 100%);
}

/* Above the backdrop, which is a sibling rather than a child. */
.home-hero {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--space-15);
  /*
   * 800px in the design. Capped against the viewport so the band cannot take
   * more than the screen on a short laptop or a phone in landscape. dvh rather
   * than vh: on a phone vh is the tallest the viewport ever gets, so the band
   * would overhang the screen until the address bar retracts.
   */
  min-height: min(50rem, 88dvh);
  padding-block: var(--space-16) var(--space-10);
}

.home-hero__text {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--space-5);
  align-items: center;
  justify-content: center;
  text-align: center;
}

/* The script welcome line. Its own face, loaded in base/_fonts.scss. */
.home-hero__script {
  color: var(--color-on-primary);
  font-family: var(--font-script);
  font-size: var(--fs-6xl);
  font-weight: var(--fw-regular);
  line-height: 0.94;
  /*
   * Playball's own forms are the character here; letter-spacing would fight
   * the way the script joins.
   */
  letter-spacing: normal;
  max-width: 250px;
}

.home-hero__title {
  color: var(--color-on-primary);
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight);
  text-transform: uppercase;
}

.home-hero__lede {
  max-width: 46rem;
  color: var(--color-on-primary);
  font-size: var(--fs-h4);
  line-height: 1.1875;
}

/* ---- the quick links along the foot of the band ---- */
.home-hero__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
  justify-content: center;
}

.home-hero__links-label {
  display: inline-flex;
  align-items: center;
  padding: var(--space-4) var(--space-3);
  border-radius: var(--radius-full);
  background-color: rgba(92, 112, 138, 0.74);
  color: var(--color-blue-50);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
}

/*
 * A glass pill over the photograph, used only here — the .tab pill of the
 * listings is opaque and sits on a light ground.
 */
.chip {
  display: inline-flex;
  gap: var(--space-2);
  align-items: center;
  justify-content: center;
  padding: var(--space-2) var(--space-4);
  border: 1px solid rgba(255, 255, 255, 0.4);
  border-radius: var(--radius-full);
  background-color: rgba(255, 255, 255, 0.1);
  color: var(--color-on-primary);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  text-decoration: none;
  backdrop-filter: blur(18.6px);
  transition: background-color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.chip:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.chip:hover {
  border-color: rgba(255, 255, 255, 0.7);
  background-color: rgba(255, 255, 255, 0.22);
  color: var(--color-on-primary);
}

/* ==========================================================================
   home — manifest
   ========================================================================== */
/*
 * Textul de prezentare dintre erou si cautare, intr-o singura coloana centrata.
 * Titlul centrat, cu o linie rosie scurta sub el; textul aliniat la stanga
 * intr-o coloana ingusta, pentru ca paragrafele lungi centrate se citesc greu;
 * motto-ul inchide sectiunea, centrat, sub o linie subtire.
 */
.home-manifesto {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
  max-width: 52rem;
  margin-inline: auto;
}

.home-manifesto__head {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  align-items: center;
  text-align: center;
}

.home-manifesto__title {
  font-family: var(--font-display);
  font-size: var(--fs-4xl);
  line-height: 1.15;
  letter-spacing: var(--ls-tight);
  text-wrap: balance;
}

.home-manifesto__title::after {
  content: "";
  display: block;
  width: 4rem;
  height: 3px;
  margin: var(--space-6) auto 0;
  border-radius: var(--radius-full);
  background-color: var(--color-accent);
}

.home-manifesto__body {
  --flow-space: var(--space-5);
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: var(--lh-loose);
}

/* Paragraful albastru e deschiderea: un pas mai mare. */
.home-manifesto__lead {
  color: var(--color-primary);
  font-size: var(--fs-xl);
  line-height: 1.6;
}

.home-manifesto__subtitle {
  color: var(--color-text);
  font-family: var(--font-display);
  font-size: var(--fs-xl);
  line-height: var(--lh-snug);
}

.home-manifesto__motto {
  padding-block-start: var(--space-8);
  border-block-start: 1px solid var(--color-border);
  color: var(--color-primary);
  font-family: var(--font-display);
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  line-height: 1.25;
  text-align: center;
  text-wrap: balance;
}

/* ==========================================================================
   sections/_member-search.scss
   ========================================================================== */
/*
 * The blue band of member searches. The row is given `background: primary` in
 * its section settings, which is what re-points the colour tokens for an
 * inverted scope in layout/_section.scss; the ground is then darkened to the
 * design's blue, one step below --color-primary. Doing it the other way round
 * — painting the ground here without the setting — would leave the type, the
 * focus ring and the placeholder on their light-ground values.
 */
.section--home-hero + .section--member-search {
  /* Straight under the hero, the band's own top padding is all the air needed. */
  margin-block-start: 0;
}

.section--member-search {
  background-color: var(--color-primary-dark);
  padding-block: var(--space-8);
}

/*
 * Titlul și casetele stau pe un rând până sub 1200px — cerință de design.
 *
 * `nowrap` e ce o ține: într-un flex cu `wrap`, un element care nu mai încape
 * trece pe rândul următor *înainte* să i se ceară să se strângă, oricâtă
 * libertate i-ai da prin `min-width: 0`. Cu `nowrap`, rândul se strânge în loc
 * să se rupă, iar pastilele cedează câțiva pixeli — util mai ales în Firefox,
 * care calculează lățimea dată de atributul `size` puțin mai lat decât Chrome.
 *
 * Sub 1200px (visarta-mob.css) revine `wrap` și banda se stivuiește.
 */
.member-search {
  display: flex;
  flex-wrap: nowrap;
  gap: var(--space-6) var(--space-10);
  align-items: center;
  justify-content: space-between;
}

.member-search__intro {
  display: flex;
  /*
   * Titlul nu cedeaza: cand rândul se strange, pastilele sunt cele care dau
   * inapoi cativa pixeli. Altfel „Caută membru VISARTA” s-ar rupe pe trei
   * randuri inainte ca vreo pastila sa se miste.
   */
  flex: 0 0 auto;
  flex-direction: column;
  gap: var(--space-1);
  /* ...dar nici nu iese din ecran: sub 340px subtitlul singur e mai lat decat
     pagina, si o facea sa se deruleze lateral. Cu `min-width: 0` se rupe pe
     doua randuri in loc sa impinga. */
  min-width: 0;
}

.member-search__title {
  color: var(--color-on-primary);
  font-family: var(--font-display);
  font-size: var(--fs-h4);
  line-height: 1.25;
}

/*
 * Rosul accent, cerut explicit: asa e in design. Pe albastrul benzii raportul
 * de contrast e in jur de 1.5:1, sub minimul AA, deci e o alegere de aspect
 * asumata — de aceea sta scris aici, ca sa nu fie „corectat” inapoi la o
 * nuanta deschisa de cineva care vede doar cifra de contrast.
 */
.member-search__text {
  color: var(--color-accent-soft);
  font-size: var(--fs-lg);
  line-height: var(--lh-loose);
  font-weight: 700;
}

/*
 * Caseta a ramas singura in banda (cea pentru straini e acum o optiune stinsa
 * in dropdown, nu un al doilea camp), asa ca ia tot spatiul liber de langa
 * titlu in loc sa se opreasca la latimea data de `size`.
 */
.member-search__forms {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: nowrap;
  gap: var(--space-4);
  align-items: center;
  /* Vezi .member-search__form: grupul trebuie sa poata ceda si el, altfel
     minimul lui automat tine randul si banda se rupe oricum. */
  min-width: 0;
}

.member-search__forms > .member-search__form {
  flex: 1 1 auto;
}

/*
 * Pe pagina registrului casetele stau intr-o coloana, cu o nota mica sub ele
 * (template-parts/members/search-band.php). Coloana preia rolul pe care
 * .member-search__forms il are pe Home: ia spatiul liber de langa titlu si
 * poate ceda, ca banda sa ramana pe un rand.
 */
.member-search__main {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--space-2);
  min-width: 0;
}

/*
 * Balonul unei optiuni din lista (data-hint pe <option>, desenat de
 * fancy-select.js): pe /membri/, explicatia lui „RAF*”. Sta in dreapta
 * optiunii, pe bleumarin, si apare la mouse over — sau la atingere pe telefon,
 * unde browserul aplica :hover la tap. Sub 768px coboara sub optiune
 * (visarta-mob.css), fiindca in dreapta nu mai are loc.
 */
.fancy-select__option.has-hint {
  position: relative;
}

.fancy-select__hint {
  position: absolute;
  inset-block-start: 50%;
  inset-inline-start: calc(100% + var(--space-4));
  z-index: 1;
  width: 20rem;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-sm);
  background-color: var(--color-secondary);
  box-shadow: var(--shadow-lg);
  color: var(--color-on-primary);
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  line-height: var(--lh-snug);
  white-space: normal;
  opacity: 0;
  visibility: hidden;
  translate: -0.25rem -50%;
  pointer-events: none;
  transition: opacity var(--duration) var(--ease), translate var(--duration) var(--ease), visibility var(--duration) var(--ease);
}

/* Sageata spre optiune. */
.fancy-select__hint::before {
  content: "";
  position: absolute;
  inset-block-start: 50%;
  inset-inline-end: 100%;
  border: 6px solid transparent;
  border-inline-end-color: var(--color-secondary);
  translate: 0 -50%;
}

.fancy-select__option.has-hint:hover .fancy-select__hint {
  opacity: 1;
  visibility: visible;
  translate: 0 -50%;
}

/*
 * A pill holding the field and its submit disc, the way the large buttons of
 * the design do: the input carries no border of its own, the pill does.
 */
.member-search__form {
  display: flex;
  gap: var(--space-2);
  align-items: center;
  /*
   * `min-width: 0` e ce ține banda pe un rând: fără el pastila nu coboară sub
   * lățimea dictată de atributul `size` al câmpului, iar rândul se rupe. Cu el,
   * pastilele cedează câțiva pixeli — cât să încapă — în loc să treacă intrarea
   * pe rândul următor. Contează mai ales pentru că Firefox calculează `size`
   * puțin mai lat decât Chrome: acolo rândul se rupea primul.
   *
   * Sub 1200px regula se anulează (vezi visarta-mob.css) și banda se stivuiește
   * cum trebuie.
   */
  min-width: 0;
  /* Mai aerisita decat inainte: domeniul e acum un chip alb inauntru, iar
     lipit de marginea pastilei ar fi parut un buton scapat peste ea. */
  padding: var(--space-2);
  border: 1px solid var(--color-on-primary);
  border-radius: var(--radius-full);
}

/*
 * Latimea vine din atributul `size`, pe care template-ul il pune din lungimea
 * placeholderului: asa fiecare pastila e cat textul ei, ca in design, unde
 * cele doua au 333px si 453px. O baza fixa in rem le facea egale si prea
 * strâmte, iar textul lung se pierdea. Se poate strange (min-width: 0), ca pe
 * ecran ingust pastilele sa incapa sau sa treaca pe rândul urmator.
 */
.member-search__input {
  flex: 0 1 auto;
  min-width: 0;
  padding: 0 0 0 20px;
  border: 0;
  background-color: transparent;
  color: var(--color-on-primary);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
  /* The pill draws the focus ring instead, so the field can sit flush in it. */
  outline: none;
}

.member-search__input::placeholder {
  color: var(--color-on-primary);
  font-weight: var(--fw-bold);
  opacity: 0.85;
}

/*
 * X-ul de golire pe care browserul il pune singur intr-un <input type="search">.
 * Al lui e negru, desenat pentru un camp pe hartie alba — aici, pe fundal
 * albastru, aproape nu se vedea. Se scoate si se deseneaza la loc din iconita
 * `close` a temei, prin masca, deci ia culoarea textului de langa el.
 *
 * Numai WebKit si Chromium au pseudo-elementul asta; Firefox nu pune niciun X,
 * deci acolo nu e nimic de corectat.
 */
.member-search__input::-webkit-search-cancel-button {
  width: 0.875rem;
  height: 0.875rem;
  margin-inline-start: var(--space-2);
  background-color: currentcolor;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='5.5' y1='5.5' x2='18.5' y2='18.5'/%3E%3Cline x1='18.5' y1='5.5' x2='5.5' y2='18.5'/%3E%3C/g%3E%3C/svg%3E") center / contain no-repeat;
  cursor: pointer;
  appearance: none;
}

/*
 * Unde se cauta, in capul pastilei. E un <select> obisnuit, dezbracat de rama,
 * de fundal si de sageata browserului, cu una desenata in loc: asa arata a
 * parte din pastila, nu a al doilea formular lipit langa ea.
 *
 * Fara latime fixa. Un <select> se face cat cea mai lunga optiune a lui, deci
 * cu o latime impusa eticheta scurta ramanea singura intr-o caseta goala si se
 * citea ca o cutie separata. Lasat sa se stranga pe text, sta lipit de sageata
 * si arata a cuvant apasabil.
 */
.member-search__scope {
  flex: 0 0 auto;
  /* Regula de formular de mai sus da `width: 100%` oricarui select; aici latimea
     trebuie sa vina din text, altfel campul de cautare ramane fara loc. */
  width: auto;
  margin-inline-end: var(--space-2);
  padding: 0 var(--space-4) 0 0;
  border: 0;
  border-radius: 0;
  background-color: transparent;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right var(--space-2) center;
  background-size: 0.75rem;
  color: var(--color-on-primary);
  font-family: inherit;
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
  text-overflow: ellipsis;
  cursor: pointer;
  appearance: none;
  outline: none;
}

/*
 * Plasa de siguranta, pentru cand JS-ul nu porneste si ramane selectul gol.
 * Lista deschisa o deseneaza sistemul, si mostenea scrisul alb al pastilei:
 * iesea alb pe alb, adica o optiune invizibila. Fundalul trebuie scris odata
 * cu culoarea, altfel Windows tot pe al lui il foloseste.
 */
.member-search__scope option {
  background-color: var(--wp--preset--color--surface);
  color: var(--wp--preset--color--text);
}

/* ==========================================================================
   components/_fancy-select.scss
   ==========================================================================
   Selectul imbracat: butonul si panoul desenate de src/js/modules/fancy-select.js
   peste un <select> obisnuit, care ramane controlul real al formularului.

   Fara JS nu apare nimic din toate astea: modulul pune el `.is-enhanced`, iar
   pana atunci selectul se vede si merge ca inainte.
   ========================================================================== */
.fancy-select {
  position: relative;
  display: inline-flex;
  /* Numele domeniului nu cedeaza: cand randul se strange, campul de cautare e
     cel care da inapoi — el are un placeholder scurt si un `size` generos, pe
     cand numele taiat cu trei puncte lasa cititorul fara sa stie unde cauta.
     Pe telefon regula se rastoarna (vezi visarta-mob.css), fiindca acolo chipul
     e pe randul lui si chiar nu mai are unde. */
  flex: 0 0 auto;
  min-width: 0;
}

/* Taiat cu trei puncte cand nu incape, nu rupt pe doua randuri. */
.fancy-select__label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Ascuns, dar tot in formular: el e ce se trimite. */
.fancy-select.is-enhanced > select {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.fancy-select__button {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  /* Numele domeniului e lung; pe un ecran ingust trebuie sa poata ceda, altfel
     impinge pastila afara din pagina. */
  min-width: 0;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  line-height: 1;
  letter-spacing: inherit;
  white-space: nowrap;
  cursor: pointer;
}

/*
 * In banda albastra, domeniul e un chip alb: scris albastru pe hartie alba,
 * intors fata de restul pastilei. Asa se vede ca e de apasat — pana acum era
 * alb pe albastru, ca placeholderul de langa el, si se citea ca o eticheta.
 */
/*
 * Eticheta din capul pastilei. Nu mai e ascunsa pentru cititoarele de ecran:
 * spune cu voce tare ce inseamna chipul de langa ea, iar fara ea numele
 * domeniului se citea ca o simpla pastila colorata.
 */
.member-search__scope-label {
  flex: 0 0 auto;
  padding-inline-start: var(--space-4);
  color: var(--color-on-primary);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
  white-space: nowrap;
  cursor: pointer;
}

.member-search__form .fancy-select__button {
  padding: var(--space-3) var(--space-5);
  border-radius: var(--radius-full);
  background-color: var(--wp--preset--color--surface);
  color: var(--color-primary);
  font-weight: var(--fw-bold);
}

/*
 * Caseta de pe Home (template-parts/sections/member-search.php): etichetele ei
 * sunt scurte („Autori români”), iar chipul strans pe ele parea un buton mic
 * pierdut in pastila. Cu 40% mai lat decat textul, sageata la capatul din dreapta.
 * Pe /membri/ etichetele lungi il fac oricum lat, deci regula nu e pusa acolo.
 */
.member-search__form--scope .fancy-select__button {
  justify-content: space-between;
  min-width: 14.5rem;
}

.member-search__form .fancy-select__button:hover {
  background-color: var(--wp--preset--color--surface-alt);
}

/* Sageata, din acelasi desen ca la selectul gol. */
.fancy-select__button::after {
  content: "";
  flex: 0 0 auto;
  width: 0.75rem;
  height: 0.75rem;
  background-color: currentcolor;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center / contain no-repeat;
  transition: rotate var(--duration) var(--ease);
}

.fancy-select.is-open .fancy-select__button::after {
  rotate: 180deg;
}

/*
 * Panoul, pe hartie alba ca orice alta lista a site-ului.
 *
 * Tokenii se pun la loc pe el, nu se mostenesc: banda albastra ii rastoarna
 * (`.section--bg-primary` face `--color-surface` sa fie chiar albastrul si
 * `--color-text` sa fie alb), iar panoul ar fi iesit albastru cu scris alb pe
 * el. Odata repuse aici, si optiunile dinauntru se coloreaza normal.
 */
.fancy-select__list {
  --color-text: var(--wp--preset--color--text);
  --color-surface: var(--wp--preset--color--surface);
  --color-surface-alt: var(--wp--preset--color--surface-alt);

  position: absolute;
  inset-block-start: calc(100% + var(--space-3));
  inset-inline-start: 0;
  z-index: var(--z-overlay);
  min-width: 100%;
  margin: 0;
  padding: var(--space-2);
  border-radius: var(--radius);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-lg);
  list-style: none;
}

.fancy-select__option {
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-sm);
  color: var(--color-text);
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
  line-height: 1.4;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.fancy-select__option:hover {
  background-color: var(--color-surface-alt);
  color: var(--color-primary);
}

.fancy-select__option.is-selected {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

/* Se vede, dar nu se poate alege: lista aceea nu exista inca. */
.fancy-select__option.is-disabled,
.fancy-select__option.is-disabled:hover {
  background-color: transparent;
  color: var(--wp--preset--color--text-subtle);
  cursor: not-allowed;
}

/*
 * Campul n-are contur propriu, deci semnul de focus sta pe pastila din jurul
 * lui. Nu un contur, insa: in banda albastra `--color-focus` e alb, iar un inel
 * alb la 2px in afara unei rame tot albe arata a chenar dublu — adica a
 * greseala, nu a indiciu.
 *
 * O umbra interioara in schimb ingroasa chiar rama pastilei: se vede ca acolo
 * scrii, si nu misca nimic in pagina, cum ar fi facut o rama de 2px.
 */
.member-search__form:focus-within {
  box-shadow: inset 0 0 0 1px var(--color-on-primary);
}

/*
 * Discul cu lupa: alb, cu lupa navy — exact ca in design.
 *
 * Alb se scrie aici pe numele lui, nu prin --color-surface: setarea
 * `background: primary` a rândului repointeaza --color-surface catre albastrul
 * primar, deci discul ar ieși albastru pe albastru, iar lupa (tot albastra)
 * ar aparea doar la hover, cand fundalul se deschide. --color-on-primary si
 * --color-navy-700 nu sunt repointate de scope, deci raman ce spun.
 */
.member-search__submit {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  padding: 0;
  border: 0;
  border-radius: var(--radius-full);
  background-color: var(--color-on-primary);
  color: var(--color-navy-700);
  cursor: pointer;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
.member-search__submit:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.member-search__submit:hover {
  background-color: var(--color-blue-50);
  color: var(--color-blue-900);
}

.member-search__submit .icon {
  width: 1.25rem;
  height: 1.25rem;
}

/* ==========================================================================
   sections/_contact-hero.scss
   ========================================================================== */
/*
 * The deep band that opens an inner page. The ground, the clipping and the
 * rounded bottom corners belong to the section wrapper rather than to .contact-hero,
 * because the band runs full width while the text stays inside .container.
 *
 * This is the one place a section partial styles its own `.section--*` scope:
 * the ground IS the section. It is inert in the editor bundle, which loads no
 * layout/ partials and so has no .section rule to modify.
 */
.section--contact-hero {
  position: relative;
  background-color: var(--color-blue-900);
  color: var(--color-on-primary);
  overflow: clip;
  /*
   * The band is shallower than a content section: about 70px of air above and
   * below the text in the design, against the 160px of a full section.
   */
  padding-block: clamp(2.5rem, 5vw, 4.375rem);
}

.contact-hero__backdrop {
  position: absolute;
  inset: 0;
  opacity: 0.3;
  pointer-events: none;
}

.contact-hero__backdrop-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Above the backdrop, which is a sibling rather than a child. */
.contact-hero {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-5);
  max-width: initial;
}

.contact-hero__trail {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-extrabold);
  line-height: 1;
  letter-spacing: var(--ls-overline);
  text-transform: uppercase;
}

.contact-hero__trail-link {
  color: var(--color-on-primary);
  text-decoration: none;
}
.contact-hero__trail-link:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.contact-hero__trail-link:hover {
  text-decoration: underline;
}

.contact-hero__trail-separator {
  display: inline-flex;
  color: var(--color-on-primary);
  /* The tracking of the trail would otherwise push the icon off the gap. */
  letter-spacing: normal;
}

.contact-hero__trail-separator .icon {
  --icon-size: 1.25rem;
}

.contact-hero__trail-current {
  color: var(--color-accent-soft);
}

.contact-hero__title {
  color: var(--color-on-primary);
  font-size: var(--fs-6xl);
  line-height: 1.0625;
  letter-spacing: var(--ls-tight);
}

.contact-hero__text {
  color: var(--color-accent-soft);
  font-size: var(--fs-xl);
  line-height: var(--lh-loose);
}

/* ==========================================================================
   sections/_contact-info.scss
   ========================================================================== */
/*
 * Contact cards on the left, the form card on the right. The columns are
 * declared here rather than borrowed from .grid--2: sections/_index.scss is
 * forwarded into editor.scss, which loads no layout/ partials, and .grid--2 is
 * hard-wired to 1fr 1fr. The design's split is 519/721, so it needs its own
 * ratio; --contact-info-split keeps that a one-value change.
 */
.contact-info {
  display: grid;
  gap: var(--space-12);
  align-items: start;
  /*
   * Not md: the form beside the text at 768px leaves each side about 340px,
   * which is too narrow for a five-field form.
   */
}
.contact-info {
  grid-template-columns: var(--contact-info-split, minmax(0, 519fr) minmax(0, 721fr));
}

/*
 * The map section below supplies the air between the two, exactly as in the
 * design; a full section's bottom padding would double it.
 */
.section--contact-info {
  padding-block-end: 0;
}

/*
 * The base gap is the tight one between the eyebrow and the title; the blocks
 * that need the wider 40px rhythm add the difference themselves.
 */
.contact-info__intro {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-5);
}

.contact-info__title {
  font-family: var(--font-display);
  font-size: var(--fs-4xl);
  line-height: 1.208;
  letter-spacing: var(--ls-tight-sm);
}

.contact-info__text {
  max-width: 32rem;
  margin-block-start: var(--space-1);
  color: var(--color-navy-700);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

/* ---- the cards ---- */
.contact-info__cards {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-4);
  width: 100%;
  /*
   * The list reset and the wider rhythm above the cards, in one declaration:
   * a separate margin-block-start would be overridden by `margin: 0`.
   */
  margin: var(--space-5) 0 0;
  padding: 0;
  list-style: none;
  /* Only from here is there room for two cards side by side. */
}
.contact-info__cards {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.contact-info__card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
  padding: var(--space-5) var(--space-4);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
}
.contact-info__card {
  grid-column: span 2;
}

.contact-info__card--half {
  grid-column: span 1;
}

.contact-info__card-icon {
  --icon-size: 2rem;
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 3.25rem;
  height: 3.25rem;
  border-radius: var(--radius-full);
  /*
   * The design tints the disc with the primary at 18%, which keeps it in step
   * with the palette instead of freezing one more literal colour.
   */
  background-color: color-mix(in srgb, var(--color-primary) 18%, transparent);
  color: var(--color-primary);
}

.contact-info__card-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  min-width: 0;
}

.contact-info__card-label {
  color: var(--color-text);
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

.contact-info__card-value {
  color: var(--color-text-muted);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  overflow-wrap: anywhere;
}

a.contact-info__card-value {
  text-decoration: none;
}
a.contact-info__card-value:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

a.contact-info__card-value:hover {
  color: var(--color-primary);
  text-decoration: underline;
}

/* ---- the social row ---- */
.contact-info__socials {
  margin-block-start: var(--space-5);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-7);
}

.contact-info__socials-title {
  color: var(--color-text);
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

/*
 * The design shows bare glyphs in the primary, not the bordered pills the
 * component defaults to elsewhere.
 */
.contact-info__socials .social-links {
  gap: var(--space-5);
}

.contact-info__socials .social-links__link {
  --icon-size: 2rem;
  width: auto;
  height: auto;
  border: 0;
  color: var(--color-primary);
}

.contact-info__socials .social-links__link:hover {
  color: var(--color-primary-dark);
}

/* ---- the form card ---- */
.contact-info__form {
  padding: var(--space-15) var(--space-6);
  border-radius: var(--radius-lg);
  background-color: var(--color-blue-50);
  /*
   * The design's 3rem inline padding, once there is room for it. On a 320px
   * screen it puts the card's automatic minimum width (the form's min-content
   * plus 2 x 3rem) past the container, which overflows the page.
   */
}
.contact-info__form {
  padding-inline: var(--space-12);
}

.contact-info__form-title {
  margin-block-end: var(--space-15);
  color: var(--color-text);
  font-family: var(--font-sans);
  font-size: var(--fs-3xl);
  line-height: 1.15;
  letter-spacing: -0.018em;
  text-align: center;
}

.contact-info__form-note {
  max-width: 27rem;
  margin-block-start: var(--space-5);
  margin-inline: auto;
  color: var(--color-text-subtle);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-wide);
  text-align: center;
}

/*
 * ---- Contact Form 7 inside the card ----
 * Scoped to the section so the shared .form-embed, and with it the Form
 * section, is untouched. The plugin ships its own stylesheet with fixed
 * colours and no button visuals at all.
 */
/*
 * The form template groups the inputs, so the rhythm is one gap rather than a
 * margin per paragraph. The `p` rule stays as the fallback for a form template
 * that has not been restructured.
 */
.contact-info .form-fields {
  display: grid;
  gap: var(--space-5);
}

.contact-info .form-embed p {
  margin-block-end: var(--space-5);
}

/*
 * wpcf7_autop still wraps the label inside each field block in a paragraph.
 * The gap above owns the rhythm, so that paragraph must not add to it.
 */
.contact-info .form-field p,
.contact-info .form-consent p,
.contact-info .form-submit p {
  margin: 0;
}

.contact-info .form-submit p {
  line-height: 0;
}

.contact-info .form-embed label {
  display: block;
}

.contact-info .form-consent {
  margin-block: var(--space-5);
}

/*
 * The design pairs Telefon and Email on one row. Each field is its own block in
 * the form template — without that, autop merges the pair into a single
 * paragraph and the grid has one child to place instead of two.
 */
.contact-info .form-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-5);
}
.contact-info .form-row {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.contact-info .form-field {
  min-width: 0;
}

.contact-info .form-embed input:not([type=submit], [type=checkbox], [type=radio]),
.contact-info .form-embed textarea {
  width: 100%;
  background-color: var(--color-surface);
}

.contact-info .form-embed textarea {
  min-height: 8.0625rem;
}

/* The consent line: the checkbox and its label sit on one row. */
.contact-info .form-consent .wpcf7-list-item {
  margin: 0;
}

.contact-info .form-consent .wpcf7-list-item-label {
  color: var(--color-text);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

.contact-info .form-consent input[type=checkbox] {
  width: 1.5rem;
  height: 1.5rem;
  margin-inline-end: var(--space-2);
  border-radius: var(--radius-sm);
  vertical-align: text-bottom;
}

/*
 * base/_buttons.scss styles .btn, .wp-block-button__link and .comment-form
 * .submit only, so a bare .wpcf7-submit would fall through to the input look
 * from base/_forms.scss. The form template wraps it so the trailing disc of the
 * design can live on a pseudo-element, which an <input> cannot carry.
 */
.contact-info .form-submit {
  position: relative;
  display: block;
  border-radius: var(--radius-full);
  background-color: var(--color-primary);
  transition: background-color var(--duration) var(--ease);
  height: 57px;
}

.contact-info .form-submit:hover {
  background-color: var(--color-primary-dark);
}

.contact-info .form-submit input[type=submit] {
  /*
   * Block, not the inline-block an input defaults to: inline boxes sit on the
   * line's baseline, and the descender space under it made the 56px pill of the
   * design render several pixels taller.
   */
  display: block;
  width: 100%;
  height: 3.5rem;
  padding: var(--space-3) var(--space-16) var(--space-3) var(--space-6);
  border: 0;
  border-radius: inherit;
  background-color: transparent;
  color: var(--color-on-primary);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-wide);
  text-align: start;
  cursor: pointer;
}
.contact-info .form-submit input[type=submit]:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

/*
 * The trailing badge of the design takes two layers: a white disc, and the
 * chevron on top of it. One pseudo-element cannot do both — masking the white
 * background with the glyph shape yields a white chevron and no disc.
 */
.contact-info .form-submit::before,
.contact-info .form-submit::after {
  content: "";
  position: absolute;
  inset-inline-end: var(--space-1);
  inset-block-start: 50%;
  width: 3rem;
  height: 3rem;
  translate: 0 -50%;
  pointer-events: none;
}

.contact-info .form-submit::before {
  border-radius: var(--radius-full);
  background-color: var(--color-surface);
}

/*
 * The glyph is the exported Figma chevron, tinted through a mask so it follows
 * the palette instead of shipping a second, recoloured copy of the file.
 */
.contact-info .form-submit::after {
  background-color: var(--color-primary);
  mask-image: url("../icons/chevron-right-circle.svg");
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: 1.5rem;
}

/*
 * The plugin's #00a0d2 border and 2em margins ignore the theme; the status
 * colours come from the tokens instead. The selector has to out-specify
 * `.wpcf7 form .wpcf7-response-output`.
 */
.contact-info .wpcf7 form .wpcf7-response-output {
  margin: var(--space-5) 0 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background-color: var(--color-surface);
}

.contact-info .wpcf7 form.sent .wpcf7-response-output {
  border-color: var(--color-success);
}

.contact-info .wpcf7 form.failed .wpcf7-response-output,
.contact-info .wpcf7 form.aborted .wpcf7-response-output,
.contact-info .wpcf7 form.spam .wpcf7-response-output,
.contact-info .wpcf7 form.invalid .wpcf7-response-output,
.contact-info .wpcf7 form.unaccepted .wpcf7-response-output {
  border-color: var(--color-error);
}

.contact-info .wpcf7-not-valid-tip {
  margin-block-start: var(--space-1);
  color: var(--color-error);
  font-size: var(--fs-xs);
}

.contact-info .wpcf7-spinner {
  margin-inline-start: var(--space-3);
}

/* ==========================================================================
   sections/_contact-map.scss
   ========================================================================== */
/*
 * The embedded map beside a details card. Own grid rather than .grid--2 for the
 * same reason as the other contact sections: sections/_index.scss is forwarded
 * into editor.scss, which loads no layout/ partials.
 */
.contact-map {
  display: grid;
  gap: var(--space-15);
}

.contact-map__header {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-5);
  text-align: center;
}

.contact-map__title {
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight-sm);
}

.contact-map__text {
  max-width: 46rem;
  margin-block-start: var(--space-1);
  color: var(--color-text-subtle);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

.contact-map__body {
  display: grid;
  gap: var(--space-6);
  align-items: stretch;
  /* The design's 845/411 split; below this the map sits above the card. */
}
.contact-map__body {
  grid-template-columns: var(--contact-map-split, minmax(0, 845fr) minmax(0, 411fr));
}

/* ---- the map ---- */
.contact-map__embed {
  border-radius: var(--radius-lg);
  background-color: var(--color-blue-50);
  overflow: clip;
  /*
   * Below sm the ratio alone would leave the map under 18rem tall, so the box
   * takes a flat height there. It has to be a height and not a min-height
   * sitting beside the ratio: that pair transfers the floor back into a
   * minimum width (18rem x 845/466 = 522px), which sizes the section's grid
   * column and puts the whole page into horizontal scroll on a narrow screen.
   */
  height: 18rem;
  /*
   * A ratio rather than the design's fixed 466px, so the embed keeps its shape
   * once there is room for it.
   */
}
.contact-map__embed {
  height: auto;
  aspect-ratio: 845/466;
}
.contact-map__embed {
  aspect-ratio: auto;
  min-height: 29.125rem;
}

.contact-map__embed iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

/* ---- the details card ---- */
.contact-map__card {
  display: flex;
  padding: var(--space-5) var(--space-5) var(--space-8);
  border-radius: var(--radius-lg);
  background-color: var(--color-blue-50);
}

.contact-map__panel {
  display: flex;
  flex: 1;
  flex-direction: column;
  justify-content: center;
  gap: var(--space-7);
  padding: var(--space-8) var(--space-7);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
}

.contact-map__card-title {
  font-family: var(--font-sans);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

.contact-map__rows {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  margin: 0;
}

.contact-map__row {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.contact-map__row-label {
  color: var(--color-text);
  font-size: var(--fs-base);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-wide);
}

.contact-map__row-value {
  margin: 0;
  color: var(--color-text);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

/* ---- the schedule, a card inside the card ---- */
.contact-map__schedule {
  display: flex;
  flex-direction: column;
  gap: var(--space-7);
  padding: var(--space-8) var(--space-7);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
}

.contact-map__schedule-title {
  font-family: var(--font-sans);
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
  letter-spacing: normal;
}

.contact-map__rows--ruled {
  gap: var(--space-4);
}

/* A hairline between the slots, never above the first one. */
.contact-map__rows--ruled .contact-map__row + .contact-map__row {
  padding-block-start: var(--space-4);
  border-block-start: 1px solid var(--color-border);
}

.contact-map__rows--ruled .contact-map__row-label {
  color: var(--color-text-subtle);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-snug);
}

.contact-map__rows--ruled .contact-map__row-value {
  font-weight: var(--fw-bold);
}
.page-id-10 .contact-map__row:nth-of-type(3), 
.page-id-10 .contact-map__row:nth-of-type(4) {
  display: none;
}

/* ==========================================================================
   sections/_contact-summary.scss
   ========================================================================== */
/*
 * The front page's mirror of the contact block. It borrows `.contact-info` for
 * the grid and every inner style, so all this partial owns is the design's own
 * column ratio here — 411/721 against the 519/721 of the Contact page, where
 * the second column holds a form rather than the office panel.
 */
.contact-summary {
 /* --contact-info-split: minmax(0, 411fr) minmax(0, 721fr);*/

  /*
   * Cele doua coloane se termina la aceeasi linie, ca in design: panoul din
   * dreapta se intinde cat coloana de text, chiar daca are mai putin de spus.
   * Doar aici — pe pagina Contact, coloana a doua e formularul si isi tine
   * inaltimea proprie.
   */
  align-items: stretch;
}

/* Panoul si cardul de program cresc pana jos, in loc sa lase gol sub ele. */
.contact-summary .contact-map__card,
.contact-summary .contact-map__panel {
  height: 100%;
}

.contact-summary .contact-map__schedule {
  flex: 1 1 auto;
}

.home .contact-info__cards li:nth-of-type(3) {
  display: none;
}
.home .contact-info__card--half {grid-column: span 2;}

/*
 * `.section--contact-info` drops its bottom padding because the map section
 * supplies the air below it on the Contact page. Nothing follows this one that
 * way, so the section keeps the full rhythm — which is the default, and the
 * reason this layout has a slug of its own rather than reusing contact_info.
 */
/* ==========================================================================
   sections/_rich-text.scss
   ========================================================================== */
/*
 * Prose in the narrow column: .flow gives the rhythm and base/_wordpress.scss
 * the element styles, so only the embedded media needs a shape here.
 */
.rich-text {
  --flow-space: var(--space-6);
}

.rich-text img {
  height: auto;
  border-radius: var(--radius);
}

/* ==========================================================================
   sections/_text-image.scss
   ========================================================================== */
/*
 * The columns come from .grid--2; this partial only aligns them and mirrors
 * the order when the image belongs on the left.
 */
.text-image {
  align-items: center;
}

.text-image__content {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-4);
}

.text-image__title {
  font-size: var(--fs-2xl);
}

.text-image__image {
  width: 100%;
  border-radius: var(--radius-lg);
}

/*
 * Reordering only makes sense where there are two columns; below md the text
 * stays first in reading order.
 */
.text-image--image-left .text-image__content {
  order: 2;
}
.text-image--image-left .text-image__media {
  order: 1;
  height: 100%;
}
/* ==========================================================================
   sections/_cards.scss
   ========================================================================== */
.cards {
  margin: 0;
  padding: 0;
  list-style: none;
}

/*
 * The surface, border and hover come from components/_card.scss; a content
 * card only adds its own padding and inner rhythm.
 */
.cards .card {
  gap: var(--space-3);
  padding: var(--space-6);
}

.card__icon {
  width: var(--space-12);
  height: auto;
  border-radius: var(--radius);
}

.cards .card__title {
  font-size: var(--fs-lg);
}

.cards .card__title a {
  color: inherit;
  text-decoration: none;
  transition: color var(--duration) var(--ease);
}

.cards .card__title a:hover {
  color: var(--color-accent-text);
}

.card__text {
  margin: 0;
  color: var(--color-text-muted);
}

/* Pushed to the bottom so the links of a row line up whatever the text length. */
.cards .card__link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  margin-block-start: auto;
  color: var(--color-accent-text);
  font-weight: var(--fw-medium);
  text-decoration: none;
}

.cards .card__link .icon {
  transition: translate var(--duration) var(--ease);
}

.cards .card__link:hover .icon {
  translate: 0.25rem 0;
}

/*
 * ---- the feature variant ----
 *
 * The front page's pillar card. The surface, border and hover still come from
 * components/_card.scss; this only recentres the tile and grows the icon.
 */
.cards--feature .card {
  gap: var(--space-5);
  align-items: center;
  padding: var(--space-8) var(--space-10);
  border-color: var(--color-surface-muted);
  background-color: color-mix(in srgb, var(--color-border) 73%, transparent);
  text-align: center;
}

/* A named theme icon rather than an uploaded image, so it follows the palette. */
.card__glyph {
  display: inline-flex;
  color: var(--color-accent);
}

.cards--feature .card__glyph .icon {
  width: 4.5rem;
  height: 4.5rem;
}

.cards--feature .card__title {
  font-family: var(--font-display);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

/*
 * The short rule the design draws under every pillar title. A pseudo-element
 * rather than a divider in the markup: it is decoration, not content.
 */
.cards--feature .card__title::after {
  content: "";
  display: block;
  width: 3.75rem;
  height: 1px;
  margin: var(--space-6) auto 0;
  background-color: var(--color-text-subtle);
}

.cards--feature .card__text {
  color: var(--color-navy-700);
  line-height: var(--lh-base);
}

/*
 * Pushed to the foot of the tile so the buttons of a row line up whatever each
 * card's text runs to.
 */
.cards--feature .card__button {
  margin-block-start: auto;
}

.cards--feature .card__button .icon {
  width: 1.5rem;
  height: 1.5rem;
}

/* ==========================================================================
   sections/_gallery.scss
   ========================================================================== */
/*
 * One item markup for both the grid and the slider, so the ratio and the hover
 * are described once.
 */
.gallery__item {
  display: block;
  border-radius: var(--radius);
  overflow: hidden;
}
.gallery__item:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.gallery__item img {
  width: 100%;
  object-fit: cover;
  transition: scale var(--duration) var(--ease);
  aspect-ratio: 1.3333333333;
}

.gallery__item:hover img {
  scale: 1.03;
}

/* ==========================================================================
   sections/_faq.scss
   ========================================================================== */
/*
 * The accordion itself is components/_accordion.scss; the FAQ section is the
 * only place that renders one, so its summary details live here.
 */
.accordion-group {
  max-width: var(--container-narrow);
  margin-inline: auto;
}

/*
 * The summary carries a real chevron icon, which makes the CSS caret of the
 * component redundant.
 */
.accordion-group .accordion__summary::after {
  content: none;
}

.accordion__question {
  margin: 0;
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
}

.accordion__summary .icon {
  flex: 0 0 auto;
  transition: rotate var(--duration) var(--ease);
}

.accordion[open] .accordion__summary .icon {
  rotate: 180deg;
}

/* ==========================================================================
   sections/_cta.scss
   ========================================================================== */
/* Centred and narrow; the ground comes from the section's background setting. */
.cta {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-4);
  max-width: 60ch;
  margin-inline: auto;
  text-align: center;
}

.cta__title {
  font-size: var(--fs-3xl);
}

.cta__text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
}

/* ==========================================================================
   sections/_form.scss
   ========================================================================== */
/*
 * The form plugin owns the markup; the theme only frames it and makes the
 * fields fill the column.
 */
.form-embed {
  --flow-space: var(--space-4);
}

.form-embed p {
  margin-block-end: var(--space-4);
}

.form-embed label {
  display: block;
  margin-block-end: var(--space-1);
  font-weight: var(--fw-medium);
}

.form-embed input:not([type=submit], [type=button], [type=checkbox], [type=radio]),
.form-embed select,
.form-embed textarea {
  width: 100%;
}

/* ==========================================================================
   sections/_latest-posts.scss
   ========================================================================== */
/*
 * The teasers are template-parts/content/card.php, styled by
 * components/_card.scss; the section only tunes the listing inside a page.
 */
.section--latest-posts .post-grid {
  --grid-gap: var(--space-6);
}

.section--latest-posts .card__title {
  font-size: var(--fs-lg);
}

/* ==========================================================================
   sections/_posts-archive.scss
   ========================================================================== */
/*
 * The filterable post list. Own grid rather than .grid--* for the same reason
 * as the contact sections: sections/_index.scss is forwarded into editor.scss,
 * which loads no layout/ partials.
 */
.posts-archive {
  display: grid;
  gap: var(--space-15);
}

/* ---- the filter row ---- */
.posts-archive__tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: center;
  justify-content: center;
}

/* ---- the title beside the count ---- */
.posts-archive__head {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-6);
  align-items: flex-end;
  justify-content: space-between;
  /*
   * The shared .section__header caps its width at 60ch and adds a margin under
   * itself; this header spans the grid and the row gap owns the rhythm.
   */
  max-width: none;
  margin-block-end: 0;
}

/*
 * The eyebrow and the title, which travel together whether the count or the
 * slider arrows sit opposite them.
 */
.posts-archive__heading {
  display: flex;
  flex: 1 1 18rem;
  flex-direction: column;
  gap: var(--space-5);
}

.posts-archive__title {
  font-family: var(--font-sans);
  font-size: var(--fs-h4);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

.posts-archive__count {
  color: var(--color-text-subtle);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

/* ---- the cards ---- */
.posts-archive__grid {
  /* The design's rows of three, with the cards of a row the same height. */
  align-items: stretch;
}

.posts-archive__empty {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
}

/*
 * ---- the slider variant ----
 *
 * Block flow rather than the grid above, and that is load-bearing: Swiper sizes
 * every .swiper-slide at 100% of the .swiper, so the .swiper needs a definite
 * width to resolve against. A content-sized box — a grid item in an `auto`
 * track — gives it none, and the browser breaks the resulting loop by clamping
 * the slides at 2^25 px. Same reasoning as the events carousel.
 */
.posts-archive--slider {
  display: block;
}

.posts-archive--slider > * + * {
  margin-block-start: var(--space-15);
}

.posts-archive__nav {
  display: flex;
  gap: var(--space-4);
  align-items: center;
}

/*
 * The cards of a view stand the same height, so a short headline does not leave
 * its card shorter than the one beside it.
 */
.posts-archive__viewport .swiper-slide {
  display: flex;
  height: auto;
}

.posts-archive__viewport .post-card {
  flex: 1 1 auto;
}

/* ==========================================================================
   sections/_events-slider.scss
   ========================================================================== */
/*
 * The events carousel: a section header with the arrows in it, then one event
 * per slide as an image beside a block of text.
 *
 * The band opens with the design's rounded top corners, the same shape the hero
 * and the footer carry. Only visible when the row is given a background.
 */
.section--events-slider {
  background-color: transparent;
}

/*
 * Plain block flow, and that is load-bearing. Swiper sizes every .swiper-slide
 * at 100% of the .swiper, so the .swiper needs a definite width to resolve
 * against. A content-sized box gives it none — a grid item in an `auto` track,
 * or a flex item on its auto flex-basis, takes its width from its content while
 * the content takes its width from the box, and the browser breaks that loop by
 * clamping the slides at 2^25 px. A block child of a block simply inherits the
 * parent's width, which is how the gallery section's slider is arranged too.
 * The rhythm is a margin rather than a gap for the same reason.
 */
.events-slider > * + * {
  margin-block-start: var(--space-15);
}

/* ---- the header ---- */
.events-slider__head {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-6) var(--space-10);
  align-items: flex-end;
  justify-content: space-between;
}

.events-slider__intro {
  display: flex;
  flex: 1 1 18rem;
  flex-direction: column;
  gap: var(--space-5);
}

.events-slider__title {
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight);
}

.events-slider__nav {
  display: flex;
  gap: var(--space-4);
  align-items: center;
}

/* ---- the slide ---- */
/*
 * autoHeight measures the active slide, so the slides must not be stretched to
 * a common height by the flex row Swiper lays them out in.
 */
.events-slider__viewport .swiper-slide {
  height: auto;
}

.events-slide {
  display: grid;
  gap: var(--space-8);
  align-items: center;
}
.events-slide {
  /*
   * Side by side from here, but the design's 519px text column would leave
   * the image under 400px wide at this width — narrower than the text beside
   * it. The column earns its full width only once there is room for both.
   */
  grid-template-columns: minmax(0, 1fr) minmax(0, 26rem);
  gap: var(--space-10);
}
.events-slide {
  /* The design's split: the image takes the free space, the text stops at 519px. */
  grid-template-columns: minmax(0, 1fr) minmax(0, 32.4375rem);
  gap: var(--space-15);
}

.events-slide__media {
  display: block;
  border-radius: var(--radius-lg);
  overflow: hidden;
}

/*
 * The ratio lives on the image, with height auto: a percentage height against
 * the auto-height link around it, or a min-height beside the ratio, makes the
 * width and the height depend on each other — inside the slide's grid that
 * resolves as a runaway, and the browser clamps the image at 2^25 px wide.
 * width + ratio + height:auto has one direction only.
 */
.events-slide__image {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
  aspect-ratio: 1.5;
}
.events-slide__image {
  /* Taller standing beside the text column than it is on its own. */
  aspect-ratio: 1.3333333333;
}

.events-slide__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  align-items: flex-start;
}

.events-slide__date {
  /* .eyebrow already sets the accent colour, the weight and the tracking. */
  margin: 0;
}

.events-slide__title {
  font-family: var(--font-display);
  font-size: var(--fs-4xl);
  line-height: 1.2;
  letter-spacing: var(--ls-tight);
}

.events-slide__link {
  color: inherit;
  text-decoration: none;
  transition: color var(--duration) var(--ease);
}

.events-slide__link:hover {
  color: var(--color-primary);
}

.events-slide__text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: var(--lh-loose);
}

.events-slide__more {
  margin-block-start: var(--space-2);
}

/* ==========================================================================
   despre noi — intro
   ========================================================================== */

.about-intro {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  align-items: center;
  text-align: center;
}

.about-intro__title {
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight);
}

.about-intro__text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

/* Pastila de sub text. Are aceeasi haina ca pastila selectata din listele de
   articole (.tab--current), pentru ca in design e acelasi element. */
.about-intro__badge {
  margin-block-start: var(--space-5);
  padding: var(--space-3) var(--space-5);
  border: 1px solid var(--color-blue-300);
  border-radius: var(--radius-full);
  background-color: var(--color-blue-50);
  color: var(--color-blue-900);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-wide);
}

/* ==========================================================================
   despre noi — cardul cu insigna (istoric + valori)
   ==========================================================================
   Un card alb cu un cerc de iconita calare pe muchia de sus. Designul
   foloseste exact acelasi card in istoric si in valori; istoricul adauga doar
   numarul palid din spate si sageata care arata spre urmatorul.
   ========================================================================== */

.badge-card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  height: 100%;
  filter: drop-shadow(0 35px 31px rgb(13 59 110 / 3%)) drop-shadow(5px 1px 11px rgb(13 59 110 / 4%));
}

/* Numarul de ordine, desenat mare si palid in spatele insignei. Nu se scrie in
   admin: se numara automat reperele. */
.badge-card__index {
  position: absolute;
  inset-block-start: -0.42em;
  inset-inline-start: 50%;
  z-index: 0;
  color: var(--color-accent);
  font-size: 7.5rem;
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: var(--ls-tight);
  opacity: 0.2;
  translate: -50% 0;
  pointer-events: none;
}

/* Cercul cu iconita. Marginea alba de 4px il decupeaza din cardul de dedesubt,
   iar marginea negativa il face sa calareasca muchia. */
.badge-card__badge {
  position: relative;
  z-index: 2;
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 7.5rem;
  height: 7.5rem;
  margin-block-end: -5.125rem;
  border: 4px solid var(--color-surface);
  border-radius: var(--radius-full);
  background-color: var(--color-surface);
  color: var(--color-accent);
}

.badge-card__badge .icon {
  width: 3.5rem;
  height: 3.5rem;
}

.badge-card__body {
  position: relative;
  z-index: 1;
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--space-3);
  align-items: center;
  width: 100%;
  padding: 5.0625rem var(--space-7) var(--space-10);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
  text-align: center;
}

.badge-card__title {
  font-family: var(--font-sans);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

/* Anul, pe rândul lui deasupra titlului. */
.badge-card__kicker {
  display: block;
}

.badge-card__text {
  color: var(--color-text-muted);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}

/* Sageata roșie care vine de la reperul anterior. Sta la stanga cardului si
   iese peste cel dinainte, nu peste cel de dupa: cardul ei e mai tarziu in
   pagina, deci sageata se deseneaza deasupra vecinului, nu sub el. Varful cade
   la 17% in cardul propriu, coada la 22% inainte de el — distantele din design,
   oglindite. */
.badge-card__arrow {
  position: absolute;
  inset-block-start: 6rem;
  inset-inline-end: 83%;
  z-index: 3;
  width: 39%;
  height: auto;
  color: var(--color-accent);
  pointer-events: none;
}

/* ==========================================================================
   despre noi — istoric
   ========================================================================== */

/* Panoul albastru pal pe care sta toata cronologia. */
.about-history {
  display: flex;
  flex-direction: column;
  gap: var(--space-15);
  padding: var(--space-16) var(--space-10) var(--space-20);
  border-radius: var(--radius-xl);
  background-color: var(--color-blue-50);
}

.about-history__head {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  align-items: center;
  max-width: 45rem;
  margin-inline: auto;
  text-align: center;
}

.about-history__title {
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight);
}

.about-history__text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

/* Trei repere pe rand. Distanta mare intre rânduri lasa loc numarului palid,
   care iese in sus din card. */
.about-history__list {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-20) var(--space-6);
  margin: 0;
  padding: 0;
  list-style: none;
}

.about-history__item {
  display: flex;
}

/* In istoric insigna e un simplu punct albastru, mai mic decat iconitele din
   valori. */
.about-history .badge-card__badge {
  color: var(--color-primary);
}

.about-history .badge-card__badge .icon {
  width: 2.4375rem;
  height: 2.375rem;
}

/* ==========================================================================
   despre noi — valori
   ==========================================================================
   O banda cu fotografie, titlul alb peste ea, si cardurile care calaresc
   muchia de jos a benzii. Doua valori masurate din design: inaltimea benzii si
   cat de mult intra cardurile peste ea.
   ========================================================================== */

.section--about-values {
  /* Inaltimea benzii si cat de sus incep cardurile in ea, ambele masurate din
     design: banda 615px, insigna primului card la 429px, deci 186px de
     suprapunere. */
  --about-values-band: 38.4375rem;
  --about-values-overlap: 11.625rem;

  position: relative;
  padding-block: 0;
  overflow: clip;
}

/* Navy-ul sta in banda, nu in secțiune: in design fotografia e la 30% peste
   navy, iar sub muchia benzii pagina redevine alba. Asa cardurile calaresc
   marginea dintre fotografie si pagina, nu doua nuante de albastru. Fundalul
   ramane si cand nu s-a ales nicio fotografie, ca titlul alb sa aiba pe ce sta. */
.about-values__backdrop {
  position: absolute;
  inset-block-start: 0;
  inset-inline: 0;
  height: var(--about-values-band);
  background-color: var(--color-blue-900);
  pointer-events: none;
}

.about-values__backdrop-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Voalul care ține titlul alb si supratitlul rosu lizibile peste fotografie.
   In design fotografia sta la 30% peste navy, adica exact un voal navy de 70%;
   se inchide spre poalele benzii, ca sa se lege cu fundalul secțiunii. */
.about-values__backdrop::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: linear-gradient(to bottom, rgb(13 59 110 / 70%) 0%, rgb(13 59 110 / 70%) 55%, rgb(13 59 110 / 88%) 100%);
}

.about-values {
  position: relative;
}

/* Titlul sta in banda, lipit de partea ei de jos, ca sa lase cardurile sa
   intre peste. */
.about-values__head {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  align-items: center;
  justify-content: flex-end;
  min-height: calc(var(--about-values-band) - var(--about-values-overlap));
  padding-block-end: var(--space-12);
  text-align: center;
}

.about-values__title {
  color: var(--color-on-primary);
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight);
}

.about-values__list {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-6);
  margin: 0;
  padding: 0 0 var(--space-20);
  list-style: none;
}

.about-values__item {
  display: flex;
}

/* ==========================================================================
   despre noi — realizari
   ==========================================================================
   Introducerea si primul card pe coloana din stanga, restul cardurilor
   alaturi, pe dreapta — impartirea din design.
   ========================================================================== */

.about-achievements {
  display: grid;
  grid-template-columns: minmax(0, 565fr) minmax(0, 655fr);
  gap: var(--space-15);
  align-items: start;
}

.about-achievements__lead {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
}

.about-achievements__head {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  align-items: flex-start;
}

.about-achievements__title {
  font-family: var(--font-display);
  font-size: var(--fs-5xl);
  line-height: 1.115;
  letter-spacing: var(--ls-tight);
}

/* Bleu, nu gri: in design textul introductiv al realizarilor e singurul
   paragraf colorat al paginii, ca sa lege titlul de cardurile de dedesubt. */
.about-achievements__text {
  color: var(--color-primary-dark);
  font-size: var(--fs-lg);
  line-height: 1.667;
}

.about-achievements__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-6);
  align-items: start;
}

/* Cardul de realizare: acelasi corp ca stilul de bloc "Card" din pagini, dar
   cu un disc roșu de 64px in loc de bulina, si iconita deasupra textului. */
.achievement {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  padding: var(--space-8) var(--space-6);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
}

.achievement__icon {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 4rem;
  height: 4rem;
  border-radius: var(--radius-full);
  background-color: var(--color-accent);
  color: var(--color-on-primary);
}

.achievement__icon .icon {
  width: 2.625rem;
  height: 2.625rem;
}

.achievement__title {
  font-family: var(--font-sans);
  font-size: var(--fs-2xl);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

.achievement__text {
  color: var(--color-text-muted);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
}


/* ==========================================================================
   pagina 404
   ==========================================================================
   Pagina nu trece prin Page Builder: continutul vine din grupul "Pagina 404"
   din Theme Options. Banda de sus e hero-ul paginilor interioare, iar blocul
   de contact de jos e sectiunea oglindita de pe prima pagina, deci aici stau
   doar cele patru blocuri proprii.
   ========================================================================== */

/* Ritmul paginii e de 120px intre blocuri, nu cel obisnuit al sectiunilor:
   designul tine cele patru blocuri proprii mai stranse decat o pagina de
   continut. Blocul de contact ramane pe spatiul standard, ca sa arate exact
   ca pe prima pagina. */
.section--error-404-intro,
.section--error-404-steps,
.section--error-404-help,
.section--error-404-links {
  padding-block: var(--space-15);
}

/* Cele doua blocuri centrate — intro si "Nu gasiti un document?" — au aceeasi
   asezare si aceeasi latime; difera doar culoarea primului rand. */
.error-404-intro,
.error-404-help {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  align-items: center;
  max-width: 66rem;
  margin-inline: auto;
  text-align: center;
}

.error-404-intro__title {
  color: var(--color-accent);
  font-size: var(--fs-h4);
  font-weight: var(--fw-extrabold);
  line-height: 1.25;
  letter-spacing: var(--ls-tight-sm);
}

.error-404-intro__text {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-extrabold);
  line-height: var(--lh-snug);
}

.error-404-help__title {
  font-family: var(--font-sans);
  font-size: var(--fs-3xl);
  font-weight: var(--fw-extrabold);
  line-height: 1.15;
  letter-spacing: var(--ls-tight);
}

.error-404-help__text {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-extrabold);
  line-height: var(--lh-snug);
}

/* Adresa de e-mail si telefonul sunt singurele accente colorate din bloc. */
.error-404-help__text a {
  color: var(--color-primary);
  text-decoration: underline;
}

/* "Ce puteti face": titlul e la fel de mare ca "Nu gasiti un document?", nu la
   marimea implicita a titlurilor de sectiune. */
.section--error-404-steps .section__header {
  max-width: none;
  margin-block-end: var(--space-10);
}

.section--error-404-steps .section__title {
  font-size: var(--fs-3xl);
  font-weight: var(--fw-extrabold);
  line-height: 1.15;
  letter-spacing: var(--ls-tight);
}

/* "Ce puteti face": cardurile palide pe un rand, numerotate de lista insasi. */
.error-404-steps {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--space-6);
  align-items: stretch;
  margin: 0;
  padding: 0;
  list-style: none;
  counter-reset: error-404-step;
}

.error-404-steps__item {
  display: flex;
  gap: var(--space-3);
  height: 100%;
  padding: var(--space-8) var(--space-6);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
  counter-increment: error-404-step;
}

/* Numarul se deseneaza din contorul listei: editorul nu il scrie, iar
   reordonarea randurilor in admin renumeroteaza singura. */
.error-404-steps__item::before {
  content: counter(error-404-step) ".";
  flex: none;
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

.error-404-steps__text {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}

/* Legaturile din pasi mostenesc culoarea textului: cardul e deja compact si
   un al doilea albastru l-ar rupe in bucati. */
.error-404-steps__text a {
  color: inherit;
  text-decoration: underline;
}

/* Cele trei coloane de scurtaturi. */
.error-404-links {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-15);
  align-items: start;
}

.error-404-links .section__header {
  margin-block-end: var(--space-12);
}

.error-404-links .section__title {
  font-family: var(--font-display);
  font-size: clamp(1.75rem, 2.6vw, 2.25rem);
  line-height: 1.6;
  letter-spacing: var(--ls-tight);
}

.error-404-links__list {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}

/* Cardul de link: acelasi corp palid ca celelalte carduri, dar pe un singur
   rand. Ancora e tot cardul, ca bulina sa nu devina o a doua oprire de tab. */
.link-card {
  display: flex;
  gap: var(--space-4);
  align-items: center;
  padding: var(--space-4);
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
  color: inherit;
  text-decoration: none;
  transition: border-color 0.2s ease, background-color 0.2s ease;
}

.link-card:hover,
.link-card:focus-visible {
  border-color: var(--color-primary);
  background-color: var(--color-blue-50);
}

.link-card__dot {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: var(--radius-full);
  background-color: color-mix(in srgb, var(--color-primary) 16%, var(--color-surface));
  color: var(--color-primary);
}

.link-card__dot .icon {
  width: 2rem;
  height: 2rem;
}

.link-card__label {
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-tight-sm);
}


/* ==========================================================================
   utilities/_utilities.scss
   ========================================================================== */
/*
 * Last layer, deliberately tiny: anything that grows past a handful of helpers
 * belongs in a component.
 */
.text-center {
  text-align: center;
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.flow > * + * {
  margin-block-start: var(--flow-space, var(--space-4));
}

.stack {
  display: flex;
  flex-direction: column;
  gap: var(--stack-gap, var(--space-4));
}

.mt-2 {
  margin-block-start: var(--space-2);
}

.mt-4 {
  margin-block-start: var(--space-4);
}

.mt-8 {
  margin-block-start: var(--space-8);
}

.mb-2 {
  margin-block-end: var(--space-2);
}

.mb-4 {
  margin-block-end: var(--space-4);
}

.mb-8 {
  margin-block-end: var(--space-8);
}

/* ==========================================================================
   main.scss
   ========================================================================== */

/* ==========================================================================
   Pagina de membru
   ==========================================================================

   Zonele paginii curg una sub alta intr-un singur .member, cu 120px intre ele —
   distanta din design (in Figma, ultima caseta de Informatii se termina la
   y=1267 si titlul „Drepturi gestionate" incepe la y=1387). Banda de deschidere
   e .section--contact-hero, refolosita, si nu are nimic in plus aici.
   ========================================================================== */
.entry--member {
  padding-block: var(--space-section);
}

.member {
  display: flex;
  flex-direction: column;
  gap: 7.5rem; /* 120px, distanta dintre zone din design */
}

/*
 * Titlul unei zone. Aceeasi treapta ca la .section--error-404-steps: designul
 * deseneaza 46px de inaltime, adica 40px cu line-height 1.15.
 */
.member-zone__title {
  color: var(--color-secondary);
  font-size: var(--fs-3xl);
  font-weight: var(--fw-extrabold);
  line-height: 1.15;
  letter-spacing: var(--ls-tight);
}

/* „Prezentare" e cu o treapta mai mare: 58px in design, fata de 46px. */
.member-zone__title--lead {
  font-size: var(--fs-4xl);
  line-height: 1.2;
}

/* Linia mica de sub titlu (Figma: titlul se termina la 46, subtitlul incepe la 70). */
.member-zone__intro {
  margin-block-start: var(--space-6); /* 24px */
  color: var(--color-text-subtle);
  font-size: var(--fs-lg);
}

/* Titlu (sau subtitlu) -> continut: 40px in design. */
.member-zone__body {
  margin-block-start: var(--space-10); /* 40px */
}

/* ---- Prezentare: textul la stanga, portretul la dreapta ---- */
.member-intro {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 246px; /* portretul e 246px in design */
  column-gap: 3.875rem; /* 62px: imaginea la x=1037, textul 975 lat */
  align-items: start;
}

.member-portrait {
  display: block;
  position: relative;
  overflow: hidden;
  border-radius: 22px; /* raza portretului din design */
  aspect-ratio: 1;
}

.member-portrait img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/*
 * Portret lipsa: fundalul palid si silueta la 14% opacitate, ocupand 74.66% din
 * caseta — exact proportiile din design.
 */
.member-portrait--empty {
  display: grid;
  place-items: center;
  background-color: var(--color-blue-50);
}

.member-portrait__placeholder {
  width: 74.66%;
  height: auto;
  opacity: 0.14;
}

/* ---- Casetele: aceeasi componenta la Informatii si la Drepturi ---- */
.member-boxes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-6); /* 24px pe ambele axe, ca in design */
}

/*
 * Caseta din design: bara roșie doar pe stanga, colturile rotunjite doar pe
 * dreapta. Designul o deseneaza pe un singur rand, cu elipsa; aici textul curge
 * pe mai multe randuri si 79px devine min-height — o eticheta romaneasca lunga
 * plus valoarea nu incap pe un rand la lațimi mici, iar o elipsa ar ascunde date.
 */
.member-box {
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--space-2);
  align-items: center;
  min-height: 4.9375rem; /* 79px */
  padding: var(--space-6) var(--space-5); /* 24px 20px */
  border-inline-start: 2px solid var(--color-accent);
  border-start-end-radius: var(--radius-lg);
  border-end-end-radius: var(--radius-lg);
  background-color: var(--color-surface-alt);
  color: var(--color-secondary);
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  line-height: 1.25; /* 24px text pe un rand de 30px; niciun --lh-* nu pica pe 1.25 */
  letter-spacing: -0.0083em; /* -0.1992px la 24px */
}

/* ---- Mentiunile obligatorii: singurul text rosu al paginii ---- */
.member-notice {
  max-width: 75ch;
  color: var(--color-accent);
  font-size: var(--fs-lg);
  line-height: var(--lh-base);
}

/* ---- Portofoliu lucrari: doua imagini pe rand, cu sagetile pe margini ---- */
.member-portfolio {
  position: relative;
}

.member-portfolio__item {
  display: block;
  overflow: hidden;
  border-radius: var(--radius-lg);
  aspect-ratio: 630 / 365; /* proportia din design */
}

.member-portfolio__item img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/*
 * Sagetile stau centrate pe marginile galeriei si ies 28px in afara ei, ca in
 * design (discurile de 56px la x=-28 si x=1280 pentru o galerie de 1280).
 * .slider .slider-arrow le pune position: static, deci se resuprascrie aici.
 */
.member-portfolio .slider-arrow {
  position: absolute;
  z-index: 2;
  top: 50%;
  translate: 0 -50%;
}

.member-portfolio .swiper-button-prev {
  inset-inline-start: -1.75rem; /* 28px */
}

.member-portfolio .swiper-button-next {
  inset-inline-end: -1.75rem; /* 28px */
}

/* ==========================================================================
   Cele mai recente proiecte
   ==========================================================================

   Textul si sagetile stau in coloana din stanga, cardurile curg spre dreapta si
   ies din container pana la marginea ecranului — al treilea card se taie acolo,
   exact ca in design (rândul incepe la x=631 si se termina la 1911, dincolo de
   cadrul de 1600). --member-bleed e distanta dintre marginea containerului si
   marginea ecranului; overflow: hidden pe banda o impiedica sa dea scroll
   orizontal paginii.
   ========================================================================== */
.section--member-projects {
  --member-bleed: max(var(--container-gutter), (100vw - var(--container)) / 2);

  overflow: hidden;
}

.member-projects {
  display: grid;
  grid-template-columns: 25.6875rem minmax(0, 1fr); /* 411px, coloana de text din design */
  column-gap: var(--space-15); /* 60px */
  align-items: start;
}

.member-projects__title {
  margin-block-start: var(--space-5);
  color: var(--color-secondary);
  font-size: var(--fs-4xl);
  font-weight: var(--fw-extrabold);
  line-height: 1.15;
  letter-spacing: var(--ls-tight);
}

/* Sagetile stau sub titlu, in coloana din stanga (Figma: 480:4132, la y=190). */
.member-projects__nav {
  display: flex;
  gap: var(--space-4); /* 16px: butoanele la x=0 si x=72, cu 56px lățime */
  margin-block-start: var(--space-10);
}

.member-projects__viewport {
  /*
   * Lățime explicită, nu margine negativă pe un `width: auto`. `.swiper-wrapper`
   * e flex cu slide-uri flex-shrink: 0, deci fără un procent explicit elementul
   * de grid s-ar întinde până la min-content-ul conținutului — suma
   * slide-urilor — în loc să se oprească la mărimea track-ului, chiar cu
   * justify-self: stretch și min-width: 0 (Swiper ar vedea atunci un container
   * deja la fel de lat ca tot rândul și ar dezactiva săgețile). calc(100% + …)
   * cere explicit track-ul plus bleed-ul, ca rândul să pornească lipit de
   * coloana de text și să iasă doar la dreapta, spre marginea ecranului.
   */
  width: calc(100% + var(--member-bleed));
}

/*
 * Lățime fixa de slide, ca sliderul sa se taie in marginea ecranului in loc sa
 * impartă spatiul disponibil. 410px e cardul din design; 80vw ii ia locul pe
 * ecranele pe care nu incape.
 */
.member-projects .swiper-slide {
  width: min(25.625rem, 80vw); /* 410px */
  height: auto;
}

/* ---- Cardul de proiect ---- */
.project-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
  border: 1px solid var(--color-surface-muted);
  border-radius: var(--radius-lg); /* raza cardului din design, 28px */
  background-color: var(--color-surface-alt);
}

.project-card__media {
  display: block;
  aspect-ratio: 410 / 320; /* poza e 320px inalta intr-un card de 410px in design */
}

.project-card__image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.project-card__body {
  display: flex;
  gap: 1.5625rem; /* 25px, distanta text -> disc din design */
  align-items: start;
  padding: var(--space-5) var(--space-5) var(--space-6); /* 20px 20px 24px */
}

.project-card__text {
  display: flex;
  flex: 1 0 0;
  flex-direction: column;
  gap: var(--space-3); /* 12px */
  min-width: 0;
}

.project-card__title {
  color: var(--color-secondary);
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  line-height: 1.25; /* 24px text pe un rand de 30px; niciun --lh-* nu pica pe 1.25 */
  letter-spacing: -0.0083em; /* -0.1992px la 24px */
}

.project-card__link {
  color: inherit;
  text-decoration: none;
}

.project-card__link:hover {
  color: var(--color-primary);
}

.project-card__place {
  display: flex;
  gap: 0.625rem; /* 10px */
  align-items: center;
  color: var(--color-secondary);
  font-size: var(--fs-lg);
  line-height: 1.6667;
}

.project-card__place .icon {
  flex: none;
  width: 1.5rem;
  height: 1.5rem;
  color: var(--color-primary);
}

/*
 * Discul cu sageata. Decorativ: cardul intreg e deja linkul, iar :hover pe card
 * il coloreaza, ca sa se vada ca e o singura tinta.
 */
.project-card__disc {
  display: grid;
  flex: none;
  place-items: center;
  width: 3rem; /* 48px */
  height: 3rem;
  border-radius: var(--radius-full);
  background-color: var(--color-secondary);
  color: var(--color-on-primary);
  text-decoration: none;
  transition: background-color var(--duration) var(--ease);
}

.project-card:hover .project-card__disc {
  background-color: var(--color-primary);
}

.project-card__disc .icon {
  width: 1.25rem; /* 20px */
  height: 1.25rem;
}

/* ==========================================================================
   Pagina unei expozitii
   ==========================================================================

   Aproape totul e refolosit: banda e .section--contact-hero, randul de meta e
   .article-hero__meta, galeria e .gallery cu .gallery__item din secțiunea
   Galerie. Aici stau doar ritmul coloanei si linkul de intoarcere.
   ========================================================================== */
.entry--project {
  padding-block: var(--space-section);
}

.project {
  display: flex;
  flex-direction: column;
  gap: var(--space-16); /* 64px intre descriere, galerie si intoarcere */
  max-width: var(--container);
}

.project__back {
  margin-block-start: var(--space-4);
}

/* ==========================================================================
   Registru membri — pagina /membri/
   ==========================================================================

   Lista vine din pluginul Registru Membri; forma e a temei, prin
   registru-membri/lista.php. Clasele .registru__* sunt ale acelui template.
   ========================================================================== */

/* Banda de cautare sta lipita de hero, ca si pe pagina de start. */
.section--contact-hero + .section--member-search {
  margin-block-start: 0;
}

/* A doua caseta e desenata, dar inactiva: registrul de straini nu exista inca. */
.member-search__form--inactive {
  opacity: 0.72;
  cursor: not-allowed;
  display: none;
}

.member-search__form--inactive .member-search__input,
.member-search__form--inactive .member-search__submit {
  pointer-events: none;
}

.section--registru {
  padding-block: var(--space-16) var(--space-15);
  margin-bottom: 100px;
}

.registru {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}

/* ---------- Titlul si numaratoarea ---------- */

.registru__header {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-4);
}

.registru__heading {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.registru__title {
  margin: 0;
  color: var(--color-secondary);
  font-family: var(--font-display);
  font-size: var(--fs-h4);
  font-weight: 800;
  line-height: 1.2;
}

.registru__count {
  margin: 0;
  color: var(--color-text-muted);
  font-size: var(--fs-base);
}

/*
 * Numaratoarea de deasupra listei (page-templates/membri.php): „678 autori |
 * 596 membri”, centrata, aceeasi oricare domeniu e deschis. Numerele in fontul
 * titlurilor, despartite de o linie verticala; nota de dedesubt, centrata.
 */
.registru-stats {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-block-end: var(--space-12);
  text-align: center;
  margin-top: -30px;
}

.registru-stats__row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  margin: 0;
}

.registru-stats__item {
  display: inline-flex;
  gap: var(--space-3);
  align-items: baseline;
  padding-inline: var(--space-8);
}

.registru-stats__item + .registru-stats__item {
  border-inline-start: 1px solid var(--color-border);
}

.registru-stats__number {
  color: var(--color-primary);
  font-family: var(--font-display);
  font-size: var(--fs-3xl);
  font-weight: var(--fw-extrabold);
  line-height: 1;
  letter-spacing: var(--ls-tight);
}

.registru-stats__label {
  color: var(--color-secondary);
  font-size: var(--fs-xl);
  font-weight: var(--fw-semibold);
}

/*
 * Numărul listei deschise — autori sau membri — e roșu, în chenar roșu. Chenarul
 * transparent stă pe amândouă, ca la comutare nimic să nu se miște; linia de
 * despărțire dintre ele nu mai e nevoie, chenarul le desparte.
 */
.registru-stats__row {
  gap: var(--space-4);
}

.registru-stats__item,
.registru-stats__item + .registru-stats__item {
  padding-block: var(--space-2);
  border: 1px solid transparent;
  border-radius: 10px;
}

.registru-stats__item.is-active {
  border-color: var(--color-accent);
}

.registru-stats__item.is-active .registru-stats__number,
.registru-stats__item.is-active .registru-stats__label {
  color: var(--color-accent);
}

.registru-stats .registru__note {
  margin-block-start: var(--space-5);
}

/* Nota mica de sub numaratoare (page-templates/membri.php). */
.registru__note {
  margin-block-start: var(--space-6);
  color: var(--color-text-muted);
  font-size: var(--fs-xs);
  line-height: var(--lh-snug);
}
.registru__note-data {font-weight: 700;}

.registru__term {
  color: var(--color-accent);
  font-weight: 600;
  white-space: nowrap;
}

/*
 * Iesirea din filtru, in coltul din dreapta al antetului. Chenar rosu subtire,
 * nu buton plin: e o cale de intoarcere, nu actiunea principala a paginii —
 * aceea e cautarea din banda de deasupra.
 */
.registru__reset {
  flex: 0 0 auto;
  padding: var(--space-2) var(--space-5);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-full);
  color: var(--color-accent);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  line-height: 1.4;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.registru__reset:hover,
.registru__reset:focus-visible {
  background-color: var(--color-accent);
  color: var(--color-on-primary);
}

/* ---------- Alfabetul ---------- */

/*
 * Alfabetul intreg incape pe un rand la latimea containerului; `space-between`
 * il intinde pe toata latimea, ca in design, in loc sa-l ingramadeasca la stanga.
 */
.registru__alphabet {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2) var(--space-1);
  margin-block: var(--space-2) var(--space-1);
}

.registru__letter {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2rem;
  height: 2rem;
  border-radius: 50%;
  color: var(--color-secondary);
  font-size: var(--fs-lg);
  font-weight: 700;
  line-height: 1;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease;
}

.registru__letter--all {
  min-width: auto;
  padding-inline: var(--space-4);
  border: 1px solid var(--color-blue-300);
  border-radius: 999px;
  color: var(--color-primary);
  font-size: var(--fs-sm);
}

a.registru__letter:hover,
a.registru__letter:focus-visible {
  background-color: var(--color-blue-50);
  color: var(--color-primary);
  text-decoration: none;
}

.registru__letter.is-active,
a.registru__letter.is-active:hover {
  background-color: var(--color-accent);
  color: #fff;
}

.registru__letter--all.is-active {
  border-color: var(--color-accent);
}

/* Literele fara niciun membru raman vizibile, dar sterse: harta listei se vede intreaga. */
.registru__letter.is-empty {
  color: #b9c9dc;
  cursor: default;
}

/* ---------- Cardul listei ---------- */

/* ==========================================================================
   registru — documente de descarcat (template-parts/members/documente.php)
   ==========================================================================
   Fiecare document e un card cu aceeasi haina ca .registru__card de deasupra:
   chenar subtire, colturi de 14px, umbra moale. In stanga iconita de fisier
   cu tipul scris pe ea, in dreapta un disc de descarcare. Doua pe rand pe
   ecran mare, unul sub altul sub 768px (visarta-mob.css). */
.registru-docs {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  margin-block-start: var(--space-16);
}

.registru-docs__intro {
  max-width: 60ch;
  color: var(--color-text);
  font-size: var(--fs-lg);
  line-height: var(--lh-base);
}

.registru-docs__list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-4);
  margin: 0;
  padding: 0;
  list-style: none;
}

.registru-docs__list > li {
  display: flex;
}

/* Un card pe rând: listele lungi de situații se citesc de sus în jos. */
.registru-docs--single .registru-docs__list {
  grid-template-columns: minmax(0, 1fr);
}

.registru-docs__item {
  display: flex;
  flex: 1 1 auto;
  gap: var(--space-5);
  align-items: center;
  padding: var(--space-5) var(--space-6);
  border: 1px solid var(--color-border);
  border-radius: 14px;
  background-color: var(--color-surface);
  box-shadow: 0 9px 15px rgb(26 43 74 / 7%);
  color: var(--color-text);
  text-decoration: none;
  transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease), translate var(--duration) var(--ease);
}

a.registru-docs__item:hover {
  border-color: var(--color-blue-300);
  box-shadow: var(--shadow-lg);
  color: var(--color-text);
  translate: 0 -2px;
}

a.registru-docs__item:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

/* Fara fisier: ramane in lista, dar stins si fara reactie. */
.registru-docs__item--unavailable {
  box-shadow: none;
  opacity: 0.6;
  cursor: not-allowed;
}

/* Iconita de fisier pe un patrat rosu-pal, cu tipul pe o eticheta rosie. */
.registru-docs__badge {
  position: relative;
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 3.5rem;
  height: 3.5rem;
  border-radius: 12px;
  background-color: color-mix(in srgb, var(--color-accent) 9%, var(--color-surface));
  color: var(--color-accent);
}

.registru-docs__badge .icon {
  --icon-size: 2.25rem;
}

.registru-docs__type {
  position: absolute;
  inset-block-end: 0.6rem;
  inset-inline-start: 0.35rem;
  padding: 0.1rem 0.3rem;
  border-radius: 4px;
  background-color: var(--color-accent);
  color: var(--color-on-primary);
  font-size: 0.625rem;
  font-weight: var(--fw-extrabold);
  line-height: 1.2;
  letter-spacing: 0.04em;
}

.registru-docs__text {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--space-1);
  min-width: 0;
}

.registru-docs__title {
  color: var(--color-secondary);
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  line-height: var(--lh-snug);
}

a.registru-docs__item:hover .registru-docs__title {
  color: var(--color-primary);
}

.registru-docs__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--space-3);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
  line-height: var(--lh-snug);
}

.registru-docs__size {
  color: var(--color-text-subtle);
}

/* Discul de descarcare: albastru, ca sagetile cardului de lista. */
.registru-docs__action {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: var(--radius-full);
  background-color: var(--color-blue-50);
  color: var(--color-primary);
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.registru-docs__action .icon {
  --icon-size: 1.25rem;
}

a.registru-docs__item:hover .registru-docs__action {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

.registru-docs__note {
  color: var(--color-text-muted);
  font-size: var(--fs-xs);
  line-height: var(--lh-snug);
}

/* Butonul albastru centrat de sub documente (page-templates/membri.php). */
.registru__actions {
  display: flex;
  justify-content: center;
  margin-block-start: var(--space-12);
}

.registru__card {
  overflow: hidden;
  border: 1px solid var(--color-border);
  border-radius: 14px;
  background-color: var(--color-surface);
  box-shadow: 0 9px 15px rgb(26 43 74 / 7%);
}

/*
 * Capul cardului e <summary>: apasarea lui desface tabelul, fara JavaScript,
 * ca la intrebarile frecvente. Sageata e iconita temei, intoarsa cand e
 * deschis; triunghiul implicit al browserului se scoate din doua locuri, unul
 * pentru Firefox si altul pentru Safari.
 *
 * Linia de sub cap ramane numai cand tabelul e deschis: inchis, ar fi o dunga
 * lipita de marginea de jos a cardului.
 */
.registru__card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-5) var(--space-6);
  list-style: none;
  cursor: pointer;
}

.registru__card-head::-webkit-details-marker {
  display: none;
}

.registru__card[open] .registru__card-head {
  border-block-end: 1px solid var(--color-border);
}

.registru__card-head:hover .registru__card-title {
  color: var(--color-primary);
}

.registru__card-head .icon {
  --icon-size: 1.75rem;

  flex: 0 0 auto;
  color: var(--color-primary);
  stroke-width: 3;
  transition: rotate var(--duration) var(--ease);
}

.registru__card[open] .registru__card-head .icon {
  rotate: 180deg;
}

.registru__card-head:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: -2px;
}

.registru__card-title {
  margin: 0;
  color: var(--color-secondary);
  font-size: var(--fs-xl);
  font-weight: 700;
  line-height: 1.2;
}

.registru__empty {
  margin: 0;
  padding: var(--space-10) var(--space-6);
  color: var(--color-text-muted);
  text-align: center;
}

.registru__scroll {
  overflow-x: auto;
}

.registru__table {
  width: 100%;
  border-collapse: collapse;
  text-align: start;
}

.registru__th {
  padding: var(--space-4) var(--space-6);
  border-block-end: 1px solid var(--color-border);
  background-color: var(--color-surface-alt);
  color: var(--color-text-subtle);
  font-size: var(--fs-sm);
  font-weight: 500;
  text-align: start;
  white-space: nowrap;
}

.registru__sort {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  color: inherit;
  text-decoration: none;
}

.registru__sort:hover,
.registru__sort:focus-visible {
  color: var(--color-primary);
}

/* Sageata dubla din design: doua triunghiuri, cel activ se inchide la culoare. */
.registru__sort-icon {
  display: inline-flex;
  flex-direction: column;
  gap: 2px;
}

.registru__sort-icon::before,
.registru__sort-icon::after {
  content: '';
  display: block;
  width: 0;
  height: 0;
  border-inline: 3px solid transparent;
}

.registru__sort-icon::before {
  border-block-end: 4px solid currentcolor;
}

.registru__sort-icon::after {
  border-block-start: 4px solid currentcolor;
}

.registru__th.is-sorted {
  color: var(--color-secondary);
}

.registru__cell {
  padding: var(--space-3) var(--space-6);
  border-block-end: 1px solid var(--color-border);
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
  vertical-align: middle;
}

.registru__row:last-child .registru__cell {
  border-block-end: 0;
}

.registru__row:hover .registru__cell {
  background-color: var(--color-surface-alt);
}

/*
 * Numele si calitatea stau una sub alta, dar celula ramane celula de tabel:
 * un `display: flex` pe <td> il scoate din modelul tabelului, iar coloanele
 * celelalte se desprind de antet.
 */
.registru__name {
  display: block;
  color: var(--color-primary);
  font-size: var(--fs-base);
  font-weight: 700;
  text-decoration: none;
}

/*
 * Numele care chiar duce undeva — adică are pagină de profil — e roșu, în
 * accentul site-ului. Așa se vede dintr-o privire, pe o listă de sute de
 * rânduri, cine are fișă de prezentare și cine e doar în registru.
 */
a.registru__name {
  color: var(--color-accent);
}

a.registru__name:hover,
a.registru__name:focus-visible {
  color: color-mix(in srgb, var(--color-accent) 85%, black);
  text-decoration: underline;
}

.registru__role {
  display: none;
  margin-block-start: 2px;
  color: var(--color-text-subtle);
  font-size: var(--fs-xs);
}

/* Numărul de ordine: îngust, cifre de aceeași lățime, ca să stea una sub alta. */
.registru__th--nr,
.registru__cell--nr {
  width: 1%;
  color: var(--color-text-subtle);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.registru__cell--year,
.registru__cell--date {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* ---------- Pastila de specialitate ---------- */

.registru__badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: 0.25rem 0.7rem;
  border-radius: 999px;
  font-size: var(--fs-xs);
  font-weight: 600;
  line-height: 1.6;
  white-space: nowrap;
}

.registru__dot {
  width: 0.4rem;
  height: 0.4rem;
  border-radius: 50%;
  background-color: currentcolor;
}

.registru__badge--green {
  background-color: #e8f6ec;
  color: #15803d;
}

.registru__badge--blue {
  background-color: #e6f4fe;
  color: #0b6fb5;
}

.registru__badge--navy {
  background-color: #e9edf5;
  color: #2e4068;
}

.registru__badge--violet {
  background-color: #f0ebfa;
  color: #5b3ba8;
}

.registru__badge--teal {
  background-color: #e4f5f3;
  color: #0b7c72;
}

.registru__badge--amber {
  background-color: #fdf3e3;
  color: #96450a;
}

/* ---------- Subsolul cardului ---------- */

.registru__foot {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-5) var(--space-6);
  border-block-start: 1px solid var(--color-border);
}

.registru__pagination {
  grid-column: 2;
}

.registru__pagination ul {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.registru__pagination li {
  margin: 0;
  margin-block-start: var(--space-2);
}

.registru__pagination .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.25rem;
  height: 2.25rem;
  padding-inline: 0.5rem;
  border: 1px solid var(--color-border);
  border-radius: 50%;
  color: var(--color-text-muted);
  font-size: var(--fs-sm);
  text-decoration: none;
  transition: border-color 0.15s ease, color 0.15s ease;
}

.registru__pagination a.page-numbers:hover,
.registru__pagination a.page-numbers:focus-visible {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

.registru__pagination .page-numbers.current {
  border-color: var(--color-primary);
  background-color: var(--color-primary);
  color: #fff;
  font-weight: 700;
}

.registru__pagination .page-numbers.dots {
  border-color: transparent;
}

.registru__perpage {
  display: flex;
  grid-column: 3;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-2);
  color: var(--color-text-subtle);
  font-size: var(--fs-sm);
}

/* Selectul temei este `width: 100%`; aici trebuie sa fie cat numarul din el. */
.registru__perpage select {
  width: auto;
  min-width: 4.25rem;
  padding: 0.2rem 0.5rem;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  background-color: var(--color-surface);
  color: var(--color-text);
  font: inherit;
}

.registru__perpage-total {
  white-space: nowrap;
}

/* ---------- Rubrica „VISARTA vă poate reprezenta” ---------- */

.section--reprezentare {
  padding-block: var(--space-8) var(--space-16);
  margin-bottom: 100px;
}

/* Coloanele din design: ilustratia ceva mai lata decat textul. */
.reprezentare {
  --grid-gap: var(--space-16);

  grid-template-columns: 1.1fr 1fr;
}

.reprezentare__media {
  margin: 0;
}

.reprezentare__image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 20px;
}

.reprezentare__content {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-5);
}

.reprezentare__title {
  margin: 0;
  color: var(--color-secondary);
  font-size: var(--fs-4xl);
  font-weight: var(--fw-extrabold);
  line-height: 1.1;
}

.reprezentare__text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: 1.65;
}

.reprezentare__text p {
  margin-block: 0 var(--space-4);
}

.reprezentare__text p:last-child {
  margin-block-end: 0;
}

.reprezentare__list {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  margin: 0;
  padding: 0;
  list-style: none;
}

.reprezentare__item {
  display: flex;
  gap: var(--space-3);
  align-items: flex-start;
  margin: 0;
}

/* Bifa sta pe linia de baza a primului rand, nu centrata pe tot randul. */
.reprezentare__check {
  display: inline-flex;
  flex: none;
  margin-block-start: 0.2em;
  color: var(--color-primary);
}

.reprezentare__check svg {
  width: 1.25rem;
  height: 1.25rem;
}

.reprezentare__item-text {
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  line-height: 1.5;
}

.reprezentare__item-text strong {
  color: var(--color-secondary);
  font-weight: var(--fw-bold);
}

.reprezentare__actions {
  margin: var(--space-3) 0 0;
}

/* Fara ilustratie, textul nu mai sta intr-o jumatate de pagina. */
.reprezentare--no-image {
  grid-template-columns: minmax(0, 1fr);
}

/* ---------- Coloana „Membri”: Da / Nu ---------- */

.registru__cell--membru {
  white-space: nowrap;
}

/* „Da” iese în evidență în albastrul site-ului; „Nu” rămâne text obișnuit,
   ca ochiul să prindă dintr-o privire cine e membru. */
.registru__flag--yes {
  color: var(--color-primary);
  font-weight: var(--fw-bold);
}

.registru__flag--no {
  color: var(--color-text);
  font-weight: var(--fw-regular);
}

/* ---------- Comutatorul „Toți autorii / Doar membri” ---------- */

/*
 * Două butoane-radio lipite, în felul grupurilor vechi de Bootstrap: cel activ
 * pare apăsat, cu fundal plin și o umbră interioară. Radio-urile rămân radio-uri
 * — doar ascunse vizual — deci tastatura și cititoarele de ecran le găsesc.
 */
/*
 * Comutatorul e o pastila cu chenar, iar chenarul tine culoarea listei
 * deschise: rosu pe „Lista autorilor”, albastru pe „Lista membrilor”. Culoarea
 * inconjoara amandoua butoanele, nu doar pe cel apasat, ca sa se citeasca drept
 * un singur comutator si sa se vada de departe pe ce lista esti.
 *
 * Chenarul sta pe <form>, nu pe <fieldset>: fieldset-ul ramane fara al lui,
 * altfel s-ar vedea doua cutii una in alta. Cei 3px de padding lasa pastila
 * apasata sa nu atinga chenarul.
 */
.registru__filter {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-block-start: var(--space-1);
  padding: 0px;
  border: 1px solid var(--color-accent);
  border-radius: 100px;
  background-color: var(--color-surface);
}
.registru__filter {display: none;}
.registru__filter--membri {
  border-color: var(--color-primary);
}

.registru__switch {
  display: inline-flex;
  margin: 0;
  padding: 0;
  overflow: hidden;
  border: 0;
  border-radius: 100px;
  background-color: transparent;
}

.registru__switch-option {
  display: block;
  margin: 0;
}

/* Fara linie despartitoare: intre doua pastile rotunde ar taia curba. */
.registru__switch-option + .registru__switch-option .registru__switch-text {
  border-inline-start: 0;
  border-radius: 0 100px 100px 0;
}

/* Ascuns, dar tot focusabil: nu display:none. */
.registru__switch-input {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.registru__switch-text {
  display: block;
  padding: 0.45rem 1.4rem;
  border-radius: 100px 0 0 100px;
  color: var(--color-text-muted);
  font-size: var(--fs-lg);
  font-weight: var(--fw-extrabold);
  text-transform: uppercase;
  line-height: 1.5;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}

.registru__switch-text:hover {
  background-color: var(--color-surface-alt);
}

/* Apăsat: gri pe „Toți autorii”, albastrul site-ului pe „Doar membri”. */
.registru__switch-input:checked + .registru__switch-text {
  background-color: var(--color-accent);
  box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.12);
  color: var(--color-surface);
=
}

.registru__switch-option--membri .registru__switch-input:checked + .registru__switch-text {
  background-color: var(--color-primary);
}

.registru__switch-input:focus-visible + .registru__switch-text {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Liniuța din celulele fără date: se vede, dar nu concurează cu datele reale. */
.registru__dash {
  color: var(--color-text-subtle);
}

/* ---------- Pagina curentă, în meniu ---------- */

/*
 * Capitolul în care te afli, marcat cu roșul accent — și itemul din submeniu,
 * și părintele lui din bara de sus. Roșu, nu albastrul de hover: hover
 * înseamnă „poți apăsa”, marcajul înseamnă „aici ești”.
 *
 * WordPress marchează singur paginile și categoriile, dar nu și capitolul unui
 * articol sau al unui profil de membru — aceleași clase le pune acolo
 * endsoft_mark_menu_chapter(), din inc/template-functions.php.
 *
 * Blocul stă la sfârșitul fișierului fiindcă regulile barei de desktop, scrise
 * mai sus, au aceeași specificitate și altfel i-ar șterge culoarea.
 */
.nav .menu .current-menu-item > a,
.nav .menu .current-menu-parent > a,
.nav .menu .current-menu-ancestor > a,
.nav .menu .current_page_item > a,
.nav .menu .current_page_ancestor > a {
 /* background-color: var(--color-surface-alt);*/
  color: var(--color-accent-text);
}

/* Chevronul părintelui ține pasul cu eticheta lui. */
.nav .menu > .current-menu-parent > .submenu-toggle,
.nav .menu > .current-menu-ancestor > .submenu-toggle,
.nav .menu > .current_page_ancestor > .submenu-toggle {
  color: var(--color-accent-text);
}

/*
 * Chrome pictează cu bleul lui propriu câmpurile pe care le completează
 * automat, iar pastila albă a benzii de căutare devine dintr-odată albastră.
 * `background-color` e ignorat acolo; umbra interioară e singura care ține.
 */
.member-search__input:-webkit-autofill,
.member-search__input:-webkit-autofill:hover,
.member-search__input:-webkit-autofill:focus,
.member-search__input:-webkit-autofill:active {
  -webkit-box-shadow: inset 0 0 0 100px var(--color-surface);
  -webkit-text-fill-color: var(--color-text);
  caret-color: var(--color-text);
}

/*
 * Numerele de telefon ale unui card stau unul lângă altul, nu unul sub altul:
 * sunt două adrese de contact de același fel, nu două rânduri ale aceleiași.
 * Se duc pe rândul următor doar când nu mai încap.
 */
.contact-info__card-value--list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-5);
}

.contact-info__card-link {
  color: inherit;
  text-decoration: none;
}

.contact-info__card-link:hover,
.contact-info__card-link:focus-visible {
  color: var(--color-primary);
  text-decoration: underline;
}
/*
 * Coada sertarului de pe telefon: linkurile care altfel trăiesc doar în subsol.
 * Ascunse pe desktop (vezi visarta-mob.css, unde se aprind), pentru că acolo
 * bara de sus n-are loc de ele, iar subsolul e la o derulare distanță.
 */
/*
 * Selectorul are nevoie de `.nav` in fata: lista poarta si clasa `.menu`, iar
 * `.nav .menu { display: flex }` de mai sus e mai specific decat `.nav__extra`
 * singur — fara asta, linkurile se vad si in bara de desktop.
 */
.nav .nav__extra {
  display: none;
}
/* ---------- Banda registrului: „Caută ▶” și popup-ul cu listele ---------- */

/*
 * Titlul benzii e chiar butonul care deschide alegerea listei
 * (template-parts/members/search-band.php). Arată ca titlul de dinainte, doar
 * că are în dreapta triunghiul roșu, cu chenar alb, care spune că se deschide ceva.
 */
.member-search__scope-toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  line-height: inherit;
  cursor: pointer;
}

.member-search__scope-icon {
  flex: 0 0 auto;
  fill: var(--color-accent);
  overflow: visible;
  transition: transform var(--duration) var(--ease);
}

.member-search__scope-toggle:hover .member-search__scope-icon,
.member-search__scope-toggle:focus-visible .member-search__scope-icon {
  transform: translateX(3px);
}

.member-search__scope-toggle:focus-visible {
  outline: 2px solid var(--color-on-primary);
  outline-offset: 4px;
  border-radius: 4px;
}

/*
 * Popup-ul: un `popover` nativ, centrat pe ecran, cu fundalul paginii întunecat.
 * Stă în DOM în banda albastră, care își redefinește culorile de text pentru
 * fundal închis; de aceea culorile de aici se iau direct din paleta WordPress.
 */
.registru-domenii {
  --color-text: var(--wp--preset--color--text);
  --color-surface: var(--wp--preset--color--surface);
  --color-surface-alt: var(--wp--preset--color--surface-alt);

  position: fixed;
  inset: 0;
  width: min(30rem, calc(100vw - 2rem));
  height: fit-content;
  max-height: calc(100vh - 2rem);
  margin: auto;
  padding: var(--space-8) var(--space-6) var(--space-6);
  overflow-y: auto;
  border: 0;
  border-radius: var(--radius-lg);
  background-color: var(--color-surface);
  box-shadow: var(--shadow-lg);
  color: var(--color-text);
}

.registru-domenii::backdrop {
  background-color: rgb(26 43 74 / 55%);
}

.registru-domenii__close {
  position: absolute;
  inset-block-start: var(--space-4);
  inset-inline-end: var(--space-4);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background-color: var(--color-surface-alt);
  color: var(--color-text);
  cursor: pointer;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

.registru-domenii__close .icon {
  width: 1.1rem;
  height: 1.1rem;
}

.registru-domenii__close:hover,
.registru-domenii__close:focus-visible {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

.registru-domenii__title {
  margin: 0 var(--space-10) var(--space-4) var(--space-4);
  color: var(--color-text);
  font-family: var(--font-display);
  font-size: var(--fs-h5, var(--fs-lg));
  font-weight: var(--fw-bold);
  line-height: 1.25;
}

.registru-domenii__list {
  display: grid;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  list-style: none;
}

.registru-domenii__option {
  display: block;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-sm);
  color: var(--color-text);
  font-size: var(--fs-base);
  font-weight: var(--fw-medium);
  line-height: 1.4;
  text-decoration: none;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}

a.registru-domenii__option:hover,
a.registru-domenii__option:focus-visible {
  background-color: var(--color-surface-alt);
  color: var(--color-primary);
}

.registru-domenii__option.is-selected,
.registru-domenii__option.is-selected:hover {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

/* Se vede, dar nu se poate alege: lista aceea nu există încă. */
.registru-domenii__option.is-disabled {
  color: var(--wp--preset--color--text-subtle);
  cursor: not-allowed;
}

/* Explicația pentru „RAF*”, sub opțiune: în popup e loc, nu mai trebuie balon. */
.registru-domenii__hint {
  display: block;
  margin-block-start: var(--space-1);
  font-size: var(--fs-xs);
  font-weight: var(--fw-regular);
  line-height: var(--lh-snug);
}

/* Pe o opțiune activă nota e mai stinsă decât numele listei; pe cea aleasă, albă. */
a.registru-domenii__option:not(.is-selected) .registru-domenii__hint {
  color: var(--color-text-muted);
}

/*
 * Documentele PDF dintr-o pagină clasică (endsoft_pdf_cards() în
 * inc/template-functions.php) stau în .entry-content, care dă listelor
 * padding și paragrafelor marimea textului de articol. Aici trebuie să arate
 * exact ca pe /membri/, deci regulile acelea se anulează în bloc.
 */
:is(.entry-content, .entry__content) .registru-docs {
  margin-block-start: var(--space-8);
}

:is(.entry-content, .entry__content) .registru-docs__list {
  padding-inline-start: 0;
  color: inherit;
  font-size: inherit;
  line-height: inherit;
}

:is(.entry-content, .entry__content) .registru-docs__list li + li {
  margin-block-start: 0;
}

:is(.entry-content, .entry__content) .registru-docs__intro {
  color: var(--color-text);
  font-size: var(--fs-lg);
  line-height: var(--lh-base);
}

:is(.entry-content, .entry__content) .registru-docs__note {
  color: var(--color-text-muted);
  font-size: var(--fs-xs);
  line-height: var(--lh-snug);
}

/* ==========================================================================
   Noutăți — primul articol, evidențiat (.prim-articol)
   ========================================================================== */
/*
 * Cel mai recent articol din grila de articole (posts-archive.php) ocupă două
 * casete și e desenat pe albastrul închis al site-ului, cu eticheta roșie
 * „Cel mai recent”. Rezumatul e mai lung (70 de cuvinte, nu 30) și mai mare,
 * ca să umple lățimea. Sub 768px grila are o coloană și caseta revine la una
 * (visarta-mob.css).
 */
/*
 * Rezumatul nu creste odata cu randul: langa caseta inalta a primului articol,
 * cardurile vecine si-ar fi aratat tot textul in loc de trei randuri.
 * "Mai mult" sta tot jos, impins de margine, nu de rezumat.
 */
.posts-archive__grid .post-card__excerpt {
  flex: 0 1 auto;
}

.posts-archive__grid .post-card__more {
  margin-block-start: auto;
}

.post-card.prim-articol {
  grid-column: span 2;
  position: relative;
  background:
    radial-gradient(120% 140% at 100% 0%, rgb(255 255 255 / 12%) 0%, transparent 55%),
    linear-gradient(135deg, var(--color-primary-dark) 0%, var(--color-primary) 100%);
  box-shadow: var(--shadow-lg);
  color: var(--color-on-primary);
}



.prim-articol .post-card__top {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
}

/* Pastila categoriei, pe fundal închis: albă, transparentă. */
.prim-articol .post-card__category {
  border-color: rgb(255 255 255 / 35%);
  background-color: rgb(255 255 255 / 10%);
  color: var(--color-on-primary);
}

.prim-articol__badge {
  display: inline-flex;
  align-items: center;
  padding: 0.65rem 1.2rem;
  border-radius: var(--radius-full);
  background-color: var(--color-accent);
  color: var(--color-on-primary);
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  white-space: nowrap;
}

.prim-articol .post-card__body {
  gap: var(--space-4);
  padding: var(--space-5) var(--space-8) var(--space-8);
}

.prim-articol .post-card__title {
  font-size: var(--fs-3xl);
  -webkit-line-clamp: 3;
}

.prim-articol .post-card__link,
.prim-articol .post-card__link:hover {
  color: var(--color-on-primary);
}

.prim-articol .post-card__link:hover {
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 4px;
}

.prim-articol .post-card__meta {
  color: rgb(255 255 255 / 85%);
}

.prim-articol .post-card__meta-item--date {
  color: var(--color-on-primary);
  font-weight: var(--fw-bold);
}

.prim-articol .post-card__meta-item .icon,
.prim-articol .post-card__meta-item .icon--clock {
  color: var(--color-blue-300);
}

.prim-articol .post-card__excerpt {
  color: rgb(255 255 255 / 88%);
  font-size: var(--fs-xl);
  line-height: 1.6;
  -webkit-line-clamp: 5;
}

.prim-articol .post-card__more,
.post-card.prim-articol:hover .post-card__more {
  align-self: flex-start;
  padding: 0.85rem 1.4rem;
  border-radius: var(--radius-full);
  background-color: var(--color-on-primary);
  color: var(--color-primary-dark);
}

.post-card.prim-articol:hover .post-card__more {
  color: var(--color-primary);
}

/*
 * Casetele cu numere de deasupra listei sunt și butoane: fiecare deschide lista
 * ei (page-templates/membri.php). Fără subliniere; la mouse se conturează, ca
 * cititorul să vadă că se poate apăsa. Cea a listei deschise rămâne roșie.
 */
a.registru-stats__item {
  color: inherit;
  text-decoration: none;
  cursor: pointer;
  transition: border-color var(--duration) var(--ease), background-color var(--duration) var(--ease);
}

a.registru-stats__item:not(.is-active):hover {
  border-color: var(--color-primary);
  background-color: var(--color-surface-alt);
}

a.registru-stats__item:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 3px;
}

a.registru-stats__item.is-active {
  cursor: default;
}
