/* Kupenov & Burova — custom brand overrides (loaded after the Webflow CSS) */

/* Header logo swap (Kupenov & Burova). The template's .logo had no size,
   so the SVG rendered at its intrinsic 123x40. We match that footprint:
   48px tall keeps the same ~123px width while giving the richer artwork
   (monogram + Lady Justice) room to read on the white sticky navbar. */
.kupenov-logo {
  height: 48px;
  width: auto;
  max-width: none;
  display: block;
}

@media screen and (max-width: 767px) {
  .kupenov-logo { height: 42px; }
}

@media screen and (max-width: 479px) {
  .kupenov-logo { height: 38px; }
}

/* ──────────────────────────────────────────────────────────────────
   Header contact cluster (.nav-right) — equal-width, precisely aligned.

   Both boxes share ONE geometry (measured with the live DM Sans font):
     text column 156px  +  gap 12px  +  icon 28px  =  196px content
     +  20px divider padding  =  216px per box  (mathematically equal)
   Numbers + email are 14px; the widest rendered line ("GR +30 699 528
   6570") is 149px, so the 156px column holds every line without wrap.
   Divider between the two boxes is a 1px box-shadow (adds no width, so
   the two boxes stay exactly equal) sitting 20px from each box's text.
   ────────────────────────────────────────────────────────────────── */
.nav-right { column-gap: 0; grid-column-gap: 0; }

.phone-content-split {                 /* phone box (first) */
  gap: 12px;
  align-items: center;
  padding: 14px 20px 14px 0;
  border-right: 0;
  box-shadow: 1px 0 0 #e6ecf0;         /* divider — no layout width */
}
.email-content-split {                 /* email box (last, mirrors phone) */
  padding: 14px 0 14px 20px;
  box-shadow: none;
}

.phone-content-left {                  /* identical text column in both boxes */
  width: 156px;
  flex-shrink: 0;
}
.phone-content-left .phone-text { white-space: nowrap; }

.phone-text { font-size: 14px; }       /* smaller numbers + email, consistent */
.phone-content-split .phone-link { line-height: 1.3; }
.phone-content-split .phone-link + .phone-link { margin-top: 3px; }

.phone-cc {                            /* BG / GR country tags */
  display: inline-block;
  margin-right: 7px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: #83809e;
}

/* Narrow headers can't hold two boxes. The nav grew from 6 items to 7 (+2
   dropdowns), and at 1024px the ORIGINAL 6-item nav already overflowed its
   container by 2px — so the email box drops out early to buy back its width
   for the menu. Phone box keeps its own divider only while it actually has a
   neighbour to be divided from.

   The cut moved from 1279 to 1439 when the language switcher landed. Measured
   at 1280: brand 180 + nav 594 + phone 188 + email 188 + switcher 112 = 1262
   in a 1235 container, i.e. 27px of overflow and a clipped EL. Dropping the
   email box frees 188 and leaves 161px of slack. The address is still in the
   footer and on /contact; a language switcher that runs off the edge is the
   worse failure. */
/* Cut moved again, 1439 -> 1599: at 1440 the email box returns and the GREEK nav
   — the widest of the three — put the switcher 22px past the viewport. Measured
   across en/bg/el at 992/1024/1200/1280/1440/1600. */
@media screen and (max-width: 1599px) {
  .email-content-split { display: none; }
  .phone-content-split { box-shadow: none; padding-right: 0; }
}

/* ──────────────────────────────────────────────────────────────────
   HEADER NAVIGATION — real Kupenov & Burova IA
   Markup is generated by build/build.py from build/ia.json; never hand-edit
   the <nav class="nav-menu"> block in the 43 page files.

   Width budget at 1280 (measured, DM Sans/Assistant live):
     container 1235 − brand 180 − nav-right 432 = 623px available
     7 labels 345 + 2 arrows + 6 gaps × 40  = 585px used      → 38px slack
   In the 992–1279 band the email box is hidden (above) and the gap tightens,
   which is what keeps the 7-item nav off the phone cluster.
   ────────────────────────────────────────────────────────────────── */
@media screen and (min-width: 992px) and (max-width: 1279px) {
  .nav-menu-wrap { column-gap: 26px; grid-column-gap: 26px; }
  .nav-brand-wrapper { padding-right: 24px; }
}

/* Manrope (the Cyrillic+Greek replacement for Assistant) sets wider than the
   original, which ate the header's entire slack — measured exactly 0px free at
   1280. The template widens the nav gap at 1280/1440; those values are pulled
   back so there is real headroom, which BG and EL will need: „Начало Услуги
   Контакти" runs longer than "Home Services Contact". */
@media screen and (min-width: 1280px) {
  .nav-menu-wrap { column-gap: 32px; grid-column-gap: 32px; }
}
@media screen and (min-width: 1440px) {
  .nav-menu-wrap { column-gap: 38px; grid-column-gap: 38px; }
}

/* Mega menu (Services, 2 columns) and compact menu (Team, 1 column).
   The template only shipped a 400px `.for-pages` panel, too narrow for
   keyword-bearing labels like "Trademark Registration". 3-class selectors
   beat the template's `.dropdown-list` / `.dropdown-list.for-pages`. */
@media screen and (min-width: 992px) {
  .dropdown-list.for-pages.is-mega { width: 560px; min-width: 560px; }
  .dropdown-list.for-pages.is-compact { width: 262px; min-width: 262px; left: -40px; }
}

/* ≤991 the navbar collapses into the drawer and Webflow makes the panel
   static + full-bleed; the desktop widths must not leak in. */
@media screen and (max-width: 991px) {
  .dropdown-list.for-pages.is-mega,
  .dropdown-list.for-pages.is-compact { width: auto; min-width: 0; left: auto; }
  .dropdown-list.for-pages.is-mega .dropdown-menu { grid-template-columns: 1fr 1fr; }
}

@media screen and (max-width: 479px) {
  .dropdown-list.for-pages.is-mega .dropdown-menu { grid-template-columns: 1fr; }
}

/* Dropdown toggle needs its own active state: Webflow only sets `w--current`
   on <a> elements, and the toggle is a <div>. build.py adds `is-active` when
   the current route is the hub or any child of it. */
.dropdown-toggle.is-active { color: #08003d; }

/* Hub link that closes each column ("All Legal Services", "Meet the Team"). */
.page-link.is-hub { margin-top: 2px; }
.page-link.is-hub .page-link-text {
  color: var(--color-primary);
  font-weight: 600;
}

/* The template styles `.page-link-text` only on :hover, so the dropdown item
   for the page you are actually on was indistinguishable from the rest.
   Webflow does set `w--current` on it — it just had nothing to hook onto. */
.page-link.w--current .page-link-text {
  color: #08003d;
  font-weight: 600;
}

/* ──────────────────────────────────────────────────────────────────
   HOMEPAGE HERO — make `.hero-area-title` tag-independent.

   The hero headline is one sentence across three display rows, which the
   template marked up as three separate <h1>s (3 H1s on the most important
   page). Row 1 is now the <h1> and rows 2-3 are <div>s.

   That swap is only pixel-safe because the template's sizing came from the
   BARE `h1` rule — color, font-family, margin and weight — while
   `.hero-area-title` set only text-transform/font-size/line-height. Those four
   properties move onto the class here, so <h1> and <div> render identically.
   Values copied exactly from the template's `h1` rule; font-size and
   line-height are deliberately NOT set (the class already owns them at every
   breakpoint, 60→100px).
   ────────────────────────────────────────────────────────────────── */
.hero-area-title {
  color: var(--color-primary);
  font-family: Prata, sans-serif;
  font-weight: 400;
  margin-top: 0;
  margin-bottom: 0;
}

/* ──────────────────────────────────────────────────────────────────
   Team grid — three lawyers, not four.

   The template's grid is 1fr×4 for four invented attorneys; the firm has
   three (Kupenov, Burova, Ekaterini), which left a ragged empty cell.
   Tablet keeps the template's 1fr 1fr, mobile its single column.
   Cards are now links to the individual profiles, which the template's
   cards were not — that internal linking feeds E-E-A-T on YMYL pages.
   ────────────────────────────────────────────────────────────────── */
@media screen and (min-width: 992px) {
  .attorney-grid { grid-template-columns: 1fr 1fr 1fr; }
}

.attorney-name-link { text-decoration: none; }
.attorney-name-link .attorney-name { transition: color .3s; }
.attorney-name-link:hover .attorney-name { color: var(--color-primary); }

/* ──────────────────────────────────────────────────────────────────
   Attorney profile heading (/team/*)

   Built on the blog-author template, whose title lockup is a flex ROW —
   "Richard" + "blogs" reading as one line. A lawyer profile wants the name
   as the H1 with the role stacked beneath it, so build.py marks the wrapper
   data-profile and swaps the second heading for `.is-role`.
   ────────────────────────────────────────────────────────────────── */
.blog-author-title-wrap[data-profile] {
  flex-direction: column;
  align-items: center;
  grid-column-gap: 0;
  grid-row-gap: 8px;
  gap: 8px;
}

.article-section-title.is-role {
  color: #83809e;
  letter-spacing: .02em;
  font-family: 'DM Sans', sans-serif;
  font-size: 19px;
  font-weight: 500;
  line-height: 1.4;
}

@media screen and (max-width: 767px) {
  .article-section-title.is-role { font-size: 16px; }
}

/* ──────────────────────────────────────────────────────────────────
   Article review state (/blog/*)

   These articles are published during the build phase, so the review
   warning is driven by outstanding `verify:` items rather than by draft
   status — publishing must not silently hide unconfirmed figures.
   Red, not amber: every mark is a legal figure nobody has checked yet.
   ────────────────────────────────────────────────────────────────── */
.review-banner {
  border: 2px solid #b91c1c;
  border-left-width: 8px;
  background: #fef2f2;
  color: #7f1d1d;
  border-radius: 6px;
  padding: 20px 24px;
  margin-bottom: 36px;
  font-family: 'DM Sans', sans-serif;
  font-size: 15px;
  line-height: 1.65;
}
.review-banner strong {
  display: block;
  margin-bottom: 8px;
  font-size: 17px;
  color: #b91c1c;
}
.review-banner p { margin: 0 0 10px; }
.review-banner ul { margin: 12px 0 0 20px; list-style: disc; }
.review-banner li { margin-bottom: 5px; }
.review-banner code {
  background: #fee2e2;
  padding: 1px 5px;
  border-radius: 3px;
  font-size: 13px;
}
.review-banner-clear { margin-top: 14px; font-size: 13.5px; opacity: .85; }

/* Inline marker on every unverified figure in the body copy. */
mark.needs-review {
  background: #fee2e2;
  color: #b91c1c;
  border-bottom: 2px solid #b91c1c;
  padding: 1px 6px;
  border-radius: 3px;
  font-weight: 600;
  font-size: .94em;
}

/* Markdown body: the template styles Webflow rich text, not raw <h2>/<ul>. */
.article-body h2 {
  font-size: 30px;
  line-height: 1.25;
  margin-top: 40px;
  margin-bottom: 14px;
}
.article-body p { margin-bottom: 18px; line-height: 1.7; }
.article-body ul { margin: 0 0 20px 22px; list-style: disc; }
.article-body li { margin-bottom: 8px; line-height: 1.65; }
.article-body strong { color: #08003d; font-weight: 600; }
.article-body a { color: var(--color-primary); text-decoration: underline; }

/* Listing marker for an article still carrying unverified figures. */
.blog-author-name.is-pending {
  color: #b91c1c;
  font-weight: 600;
}

/* ──────────────────────────────────────────────────────────────────
   Headshot placeholders (assets/brand/placeholder-person.svg)

   The template's photo classes carry NO sizing rules — layout came entirely
   from each PNG's intrinsic dimensions. An SVG has none, so the swap collapsed
   to 0x0. These reinstate the ORIGINAL aspect ratios so nothing shifts, and
   object-fit: cover means a real photo can be dropped in later at any size and
   crop identically.
     attorney / lawyer cards  410x450
     founder portrait         479x708
     hero headline pill       190x129
   ────────────────────────────────────────────────────────────────── */
.attorney-image,
.lawyer-image {
  display: block;
  width: 100%;
  aspect-ratio: 410 / 450;
  object-fit: cover;
}

.founder-image-main {
  display: block;
  width: 100%;
  aspect-ratio: 479 / 708;
  object-fit: cover;

  /* The original founder photo was not a rectangle — it was masked into an
     asymmetric shape that the decorative `.founder-image-shape` outline traces.
     A square placeholder broke that contour, so the mask is reproduced here.

     Radii measured off the original PNG's alpha channel (479x708): the opaque
     span starts at x=238 on row 0 and only reaches x=0 by y=247 (top-left
     curve), and the right edge falls from 478 to 250 between y=490 and the
     bottom (bottom-right curve). Top-right and bottom-left are square.
     Expressed as percentages so it holds at any rendered size. */
  border-radius: 50% 0 48% 0 / 35% 0 31% 0;
}

.hero-title-pill-image {
  display: block;
  width: 100%;
  aspect-ratio: 190 / 129;
  object-fit: cover;
}

/* ──────────────────────────────────────────────────────────────────
   /packages — four cards, not three SaaS tiers

   The template grid is 1fr 1fr 1fr, so four packages left one orphaned on
   its own row. 2x2 is the clean shape for four. Tablet already collapses to
   1fr 1fr and mobile to 1fr, so only the desktop rule needs overriding.

   Padding: `.pricing-card-header` has 40px but `.pricing-plan-block` only
   20px, and the button row had none at all — so body text ran closer to the
   border than the heading above it. Matched to 40px throughout.

   `.pricing-plan-text` shipped `line-height: 1`, which is fine for the
   template's one-word feature labels ("Robust customer data") but sets solid
   when a real sentence wraps.
   ────────────────────────────────────────────────────────────────── */
@media screen and (min-width: 992px) {
  .pricing-grid { grid-template-columns: 1fr 1fr; }
}

.pricing-plan-block {
  padding-left: 40px;
  padding-right: 40px;
}

.pricing-card .center-align {
  padding-left: 40px;
  padding-right: 40px;
}

.pricing-plan-text { line-height: 1.55; }

/* Check icon should sit on the first line of a wrapping item, not centre on
   the whole block. */
.pricing-plan-item { align-items: flex-start; }
.pricing-plan-item .check-icon { flex: none; margin-top: 0.3em; }

/* The "suited to…" line closes each card. */
.pricing-plan-item.is-note {
  margin-top: 4px;
  padding-top: 16px;
  border-top: 1px solid #e6ecf0;
}
.pricing-plan-item.is-note .pricing-plan-text { color: #83809e; font-size: 15px; }

@media screen and (max-width: 479px) {
  .pricing-plan-block,
  .pricing-card .center-align { padding-left: 24px; padding-right: 24px; }
}

/* ──────────────────────────────────────────────────────────────────
   /contact — offices, hours and the enquiry form.

   The Liberty Law template shipped no contact page at all, so none of this
   is styled by it: the only form styling available was the footer
   newsletter's and Webflow's bare .w-input. Built here from the brand tokens
   so it matches the rest of the site.
   ────────────────────────────────────────────────────────────────── */
.office-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-bottom: 56px;
}
@media screen and (max-width: 991px) { .office-grid { grid-template-columns: 1fr 1fr; } }
@media screen and (max-width: 640px)  { .office-grid { grid-template-columns: 1fr; } }

.office-card {
  border: 1px solid #e6ecf0;
  border-radius: 6px;
  padding: 28px 30px 30px;
  background: #fff;
}
.office-city {
  font-family: Prata, serif;
  font-size: 26px;
  line-height: 1.15;
  color: var(--color-primary);
}
.office-country {
  font-size: 13px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: #83809e;
  margin-top: 4px;
  margin-bottom: 16px;
}
.office-address { font-style: normal; display: block; margin-bottom: 16px; }
.office-address span { display: block; line-height: 1.6; color: #83809e; }

.office-contact { display: flex; flex-direction: column; gap: 6px; }
.office-link {
  color: var(--color-primary);
  text-decoration: none;
  line-height: 1.5;
  border-bottom: 1px solid transparent;
  align-self: flex-start;
}
.office-link:hover { border-bottom-color: var(--color-primary); }
.office-link.is-missing { color: #b91c1c; }

/* Opening hours */
.hours-list { max-width: 460px; margin-bottom: 56px; }
.hours-row {
  display: flex;
  justify-content: space-between;
  gap: 24px;
  padding: 13px 0;
  border-bottom: 1px solid #e6ecf0;
}
.hours-day  { color: var(--color-primary); font-weight: 500; }
.hours-time { color: #83809e; }

/* Enquiry form */
.contact-form-wrap { max-width: 760px; }
.contact-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
@media screen and (max-width: 640px) { .contact-field-row { grid-template-columns: 1fr; } }
.contact-field { margin-bottom: 20px; }
.contact-field .field-label {
  display: block;
  margin-bottom: 7px;
  font-size: 14px;
  font-weight: 500;
  color: var(--color-primary);
}
.contact-form .w-input,
.contact-form .w-select,
.contact-form textarea {
  width: 100%;
  border: 1px solid #d9e2e8;
  border-radius: 4px;
  padding: 12px 14px;
  font-family: 'DM Sans', sans-serif;
  font-size: 16px;
  color: var(--color-primary);
  background: #fff;
}
.contact-form textarea { resize: vertical; min-height: 140px; }
.contact-form .w-input:focus,
.contact-form .w-select:focus,
.contact-form textarea:focus { border-color: var(--color-primary); outline: none; }
.contact-form .w-input:disabled,
.contact-form .w-select:disabled,
.contact-form textarea:disabled { background: #f6f8fa; cursor: not-allowed; }

.contact-submit {
  background: var(--color-primary);
  color: #fff;
  border: 0;
  border-radius: 4px;
  padding: 14px 34px;
  font-family: 'DM Sans', sans-serif;
  font-size: 16px;
  font-weight: 600;
  cursor: pointer;
}
.contact-submit:disabled { background: #b3c2d1; cursor: not-allowed; }

.contact-form-note {
  margin-top: 16px;
  font-size: 15px;
  line-height: 1.6;
  color: #83809e;
}
.contact-form-note a { color: var(--color-primary); }

/* ──────────────────────────────────────────────────────────────────
   Hero city triptych — Sofia, Thessaloniki, Athens

   Replaces the template's photo-behind-a-fake-play-button panel. Three
   landmark photographs cropped side by side, in the same north-to-south
   order as the offices.

   The panel is not a rectangle: its silhouette is two rounded blocks offset
   diagonally, measured from the original mask's alpha channel (384x221) and
   reproduced as an SVG clipPath. userSpaceOnUse is safe because the element
   only ever renders at that size — max-width plus a pinned aspect-ratio, and
   the template hides the whole panel below 991px.

   Photos: Pexels (free for commercial use, no attribution required),
   downloaded and self-hosted rather than hot-linked. Credits kept for
   traceability, not because the licence asks for them:
     sofia.jpg         Alexander Nevsky Cathedral — Pexels 14525794, Andreas Ebner
     thessaloniki.jpg  the White Tower
     athens.jpg        the Parthenon — Pexels 15186548, Airam Dato-on
   ────────────────────────────────────────────────────────────────── */
.hero-cities {
  /* Explicit width, not 100%. Every ancestor up to .hero-area-video-wrap is
     shrink-to-fit, so a percentage width needs in-flow content to resolve
     against — and the slices are absolutely positioned. 384px is what the
     template's own panel measured. */
  width: 384px;
  aspect-ratio: 384 / 221;
  position: relative;
  clip-path: url(#hero-cities-clip);
  background: var(--color-primary);
}

/* Each city is a full-panel layer clipped to its own diagonal slice, rather
   than a grid column. Grid cannot produce non-rectangular tiles, and the
   diagonal has to be cut per layer so the three interlock exactly.

   Slice widths are NOT equal thirds. Because the panel's silhouette is a
   staircase, equal-width columns give the middle one ~40% more visible area
   than either outer one. The dividers below (x 142.5 and 244.3 at mid-height)
   equalise VISIBLE area to within 1px2 of 22,490 each. Geometry solved in
   web/hero_slices.py + web/build-hero-triptych.py:
     python3 build-hero-triptych.py hero-triptych.json
   Re-run that rather than hand-tuning any number in this block. */
.hero-city { position: absolute; inset: 0; }

.hero-city-img { position: absolute; display: block; object-fit: cover; }

/* Per-slice: the polygon, then the image placed so the landmark lands in the
   largest rectangle of its own aspect ratio that fits inside that polygon. */
/* generated by build-hero-triptych.py — do not hand-tune, re-run it */
.hero-city--sofia {
  clip-path: polygon(0.000% 0.000%, 42.836% 0.000%, 30.596% 100.000%, 0.000% 100.000%);
}
.hero-city--sofia .hero-city-img {
  left: -8.933%; top: -26.214%;
  width: 52.162%; height: 156.485%;
}
.hero-city--thessaloniki {
  clip-path: polygon(43.634% 0.000%, 69.337% 0.000%, 57.097% 100.000%, 31.395% 100.000%);
}
.hero-city--thessaloniki .hero-city-img {
  left: 30.990%; top: -16.406%;
  width: 38.802%; height: 116.406%;
}
.hero-city--athens {
  clip-path: polygon(70.136% 0.000%, 100.000% 0.000%, 100.000% 100.000%, 57.896% 100.000%);
}
.hero-city--athens .hero-city-img {
  left: 57.552%; top: 0.000%;
  width: 42.448%; height: 127.344%;
}

/* REPORT
  Sofia         slice bbox 166x221  landmark 133.0x111.4 at ( 31.4,  3.6)  clipped by the slice edge
  Thessaloniki  slice bbox 149x221  landmark 103.6x155.6 at (147.3, 22.4)  clipped by the slice edge
  Athens        slice bbox 163x221  landmark 153.2x115.4 at (230.8, 59.1)  clipped by the slice edge
*/
/* dividers c1=142.52 c2=244.29 slant=47 forward-slash gap=3 */

/* Three photographs from three photographers need something in common: a light
   brand wash plus a foot gradient that grounds each slice against the navy.

   The foot used to run to .85 over half the height because it was backing white
   label text. The labels are gone, so it is down to .55 over the bottom 38% —
   enough to seat the pictures, not so much that it eats a third of each one. */
.hero-city::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(to top, rgba(0, 55, 94, .55) 0%, rgba(0, 55, 94, 0) 38%),
    rgba(0, 62, 106, .1);
}

/* Sofia's slice ends at two different heights: left of x=85 it stops at the
   top block's edge (y 118), right of x=85 the bottom block overlaps the same
   column and it runs the full 221 to the panel foot.

   That must be ONE gradient, not two. Two layers — a 118px band for the top
   block plus a full-height one for the foot — put a .82-opaque edge against
   nothing at exactly y=118, and in the tail, where the picture carries on
   below, that landed as a hard tonal line. So the ramp spans the whole height
   with shaped stops, every one continuous, and no edge can appear at the step.
   Percentages are y/221: 53.39% is y 118, 67.87% is y 150.

   Softened alongside the generic foot now that the labels are gone; the shape
   is unchanged, the values are lower. */
.hero-city--sofia::after {
  background:
    linear-gradient(to bottom,
      rgba(0, 55, 94, 0)   0%,
      rgba(0, 55, 94, 0)   30.00%,
      rgba(0, 55, 94, .30) 47.00%,
      rgba(0, 55, 94, .48) 53.39%,
      rgba(0, 55, 94, .36) 67.87%,
      rgba(0, 55, 94, .55) 100%),
    rgba(0, 62, 106, .1);
}


/* ──────────────────────────────────────────────────────────────────
   TRILINGUAL CHROME — language switcher + untranslated notice.

   Blueprint §4 requires the switcher to link the EQUIVALENT page, not the
   home page; Header.astro builds each href from the current neutral route.
   Languages without copy yet are shown dimmed rather than hidden, so the set
   of languages the firm offers reads the same on every page.
   ────────────────────────────────────────────────────────────────── */
.lang-switcher {
  display: flex;
  align-items: center;
  gap: 2px;
  margin-left: 18px;
  padding-left: 18px;
  box-shadow: -1px 0 0 #e6ecf0;          /* divider — adds no layout width */
  flex-shrink: 0;
}

.lang-link {
  display: block;
  padding: 5px 7px;
  border-radius: 4px;
  font-family: 'DM Sans', sans-serif;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .04em;
  line-height: 1;
  color: #83809e;
  text-decoration: none;
  transition: color .2s, background-color .2s;
}

.lang-link:hover { color: var(--color-primary); background: #f2f6f9; }

.lang-link.is-current {
  color: #fff;
  background: var(--color-primary);
}

/* Not translated yet. Dimmed, not hidden — and never disabled: the page does
   exist, it just says so in that language and is kept out of the index. */
.lang-link.is-pending { opacity: .45; }
.lang-link.is-pending:hover { opacity: .75; }

/* The 992-1279 band cannot hold brand + a 7-item nav + phone + switcher once the
   labels are Bulgarian or Greek. Measured on /bg at 1024: the header ran 1072px
   into a 1024px viewport and pushed EL clean off the screen; English fits there,
   which is why this only shows up after translation.

   So in that band the phone box drops out as well as the email box, and the nav
   gap and switcher tighten. Losing the header phone number on a small laptop is
   a real cost — it is a conversion element for a law firm — but it is the lesser
   one: the numbers are still in the footer, on /contact, and in the mobile
   drawer, whereas a language switcher hanging off the edge of the page is
   broken on a site whose whole point is being trilingual. */
@media screen and (min-width: 992px) and (max-width: 1279px) {
  .phone-content-split { display: none; }
  .nav-menu-wrap { column-gap: 18px; grid-column-gap: 18px; }
  .lang-switcher { margin-left: 12px; padding-left: 12px; }
  .lang-link { padding: 5px 5px; font-size: 11px; }
}

.translation-notice {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 10px;
  align-items: baseline;
  margin: 0;
  padding: 10px 24px;
  background: #fff8e6;
  border-bottom: 1px solid #f0dfb0;
  font-family: 'DM Sans', sans-serif;
  font-size: 13px;
  line-height: 1.5;
  color: #6b5514;
}
.translation-notice strong { font-weight: 600; }

/* Bulgarian and Greek labels run longer than English — „Юридически услуги" and
   «Συμβουλευτικές Υπηρεσίες» both wrapped mid-item, which pushed the navbar to
   two lines. The nav is a single row by design; let it stay one. */
.navbar-link,
.dropdown-text { white-space: nowrap; }

/* A language with no version of this page at all — not merely untranslated.
   Rendered as text, never a link, so the switcher cannot dead-end. */
.lang-link.is-absent { opacity: .28; cursor: default; }

/* The 404 is a single static page served for every language — Cloudflare has no
   way to know which one the visitor wanted — so it says so in all three. */
.not-found-alt {
  font-family: 'Prata', serif;
  font-size: 1.25rem;
  line-height: 1.4;
  color: var(--color-primary);
  opacity: .72;
  margin-top: 6px;
}

/* ──────────────────────────────────────────────────────────────────
   HERO HEADLINE — Bulgarian and Greek need a smaller display size.

   The headline shares its row with the absolutely-positioned city panel, so it
   has no way to know the panel is there; the template's English ("Your
   Lawyers") simply happens to be short enough to clear it. „Вашите адвокати"
   is not, and ran UNDER the panel — at 1440 the final И was hidden behind it.

   Measured overrun against the panel's left edge, per viewport:
     992 -> 51px   1280 -> 61px   1440 -> 103px   1600 -> 103px   1920 -> 117px
   The scale needed to clear it with an 18px gap came out at 0.86-0.90 at every
   width, so a single 0.86 factor is applied against the template's own sizes
   (60 / 75 / 85 / 100px) at the template's own breakpoints.

   An earlier attempt at this set 5.6rem and made it WORSE — that is LARGER than
   the 75px the template uses at 1280, and it clipped the headline badly. Hence
   explicit px against measured values, verified after, rather than round rem.
   ────────────────────────────────────────────────────────────────── */
@media screen and (min-width: 992px) {
  html[lang="bg-BG"] .hero-area-title,
  html[lang="el-GR"] .hero-area-title { font-size: 52px; }
}
@media screen and (min-width: 1280px) {
  html[lang="bg-BG"] .hero-area-title,
  html[lang="el-GR"] .hero-area-title { font-size: 64px; }
}
@media screen and (min-width: 1440px) {
  html[lang="bg-BG"] .hero-area-title,
  html[lang="el-GR"] .hero-area-title { font-size: 73px; }
}
@media screen and (min-width: 1920px) {
  html[lang="bg-BG"] .hero-area-title,
  html[lang="el-GR"] .hero-area-title { font-size: 86px; }
}

/* ──────────────────────────────────────────────────────────────────
   HERO FIRST ROW — a real underline instead of the template's raster swash.

   The template drew it with Rectangle 2555.png, a flat PNG absolutely
   positioned behind the words. It is fixed-size artwork sitting under text
   that is not: it never matched the headline's width at any breakpoint, and it
   does not match it at all once the words are Bulgarian or Greek, so it read
   as a stray grey block rather than as an underline. Removed.

   text-decoration underlines the GLYPHS, so it tracks the words at every size
   and in every language for free — which is exactly what the PNG could not do.
   Applied only to the first row; rows two and three are not underlined.
   ────────────────────────────────────────────────────────────────── */
.hero-title-first-row .hero-area-title {
  text-decoration: underline;
  text-decoration-color: var(--color-primary);
  text-decoration-thickness: .055em;
  text-underline-offset: .14em;
  text-decoration-skip-ink: none;   /* a display face; skipping around the Y
                                       and the Cyrillic У breaks the line */
}

/* ──────────────────────────────────────────────────────────────────
   HERO PILL — the two jurisdictions.

   The template left this shape blank. Two ornaments were tried in it and both
   failed for the same reason: the pill is a TYPOGRAPHIC BEAT sitting inline
   inside 85px display type, so anything with internal detail — a meander, a
   fluted colonnade — competes with the loudest type on the page and collapses
   into a busy smudge. The answer was not a better drawing but a different kind
   of content.

   BG · GR is the two bars the firm actually practises at, and it earns the
   space by MEANING something rather than by decorating: it is specific to this
   firm instead of borrowed from antiquity, and it reads instantly at any size
   because it is two letterforms, not an illustration.

   Set in the headline's own serif, not the UI sans — the pill sits inside the
   sentence, and a sans chip would read as an interface element dropped into a
   display headline.

   Sized in cqw, so it follows the pill itself. The pill is a fixed 190x85
   above 992 and 150x62 below, and does NOT scale with the hero font-size or
   with language, so one container-relative rule covers every breakpoint and
   all three languages — no per-breakpoint table to drift out of sync.

   inline-size, not size: `container-type: size` needs BOTH axes definite, and
   the pill's height comes from flex stretch, so cqh resolved to 0 and the
   badge rendered at font-size 0. Width is definite, so cqw is safe.
   ────────────────────────────────────────────────────────────────── */
.hero-title-pill {
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  container-type: inline-size;
}

.hero-pill-badge {
  font-family: Prata, 'Noto Serif Display', serif;
  color: #fff;
  line-height: 1;
  letter-spacing: .06em;
  white-space: nowrap;
  font-size: 28px;                 /* fallback where cqw is unsupported */
  font-size: 15cqw;
}

/* The separator carries no meaning — it is a breath between the two codes, so
   it is held back rather than given the same weight as the letters. */
.hero-pill-sep {
  margin: 0 .34em;
  opacity: .5;
}

/* Footer logo. The template's `.logo` class carries NO sizing — the Liberty Law
   footer mark was an SVG whose small intrinsic size did the work. Swapping in a
   1203x448 PNG therefore rendered it at full size, 1203px wide inside the
   footer. Same trap the header logo hit. Sized explicitly, a little larger than
   the header's 48px because a footer lockup carries more weight. */
.kupenov-logo-footer {
  height: 56px;
  width: auto;
  max-width: 100%;
  display: block;
}

@media screen and (max-width: 991px) {
  .kupenov-logo-footer { height: 48px; }
}

@media screen and (max-width: 479px) {
  .kupenov-logo-footer { height: 42px; }
}
