/*
Theme Name: Overseas Talent
Theme URI: https://hypecreate.com
Author: Jonathan Uttankar
Description: A self-contained WordPress theme for Overseas Talent, an India-based nursing-recruitment agency placing Indian students into Germany's 3-year Ausbildung nursing program at PflegeFachSchule (PFSH) Hannover. Renders a complete site natively in PHP the moment it is activated.
Version: 1.0.0
Requires at least: 6.0
Requires PHP: 7.4
Author URI: https://hypecreate.com
Text Domain: otr
Tags: education, custom-menu, featured-images, threaded-comments, translation-ready

============================================
Palette: Deep Pine / Warm Terracotta / Ivory
Type: Fraunces (display) + Manrope (body)
============================================
*/

:root{
  --pine-900:#0F2B24;
  --pine-800:#153A30;
  --pine-700:#1D4B3D;
  --pine-600:#28624F;
  --terracotta:#D97B4C;
  --terracotta-dark:#C4632F;
  --gold-soft:#E7B968;
  --ivory:#FBF6EE;
  --ivory-deep:#F3EBDB;
  --paper:#FFFFFF;
  --ink:#1C221E;
  --ink-soft:#4A544D;
  --line:#E4DCC9;
  --shadow-lg: 0 30px 60px -20px rgba(15,43,36,0.35);
  --shadow-md: 0 14px 34px -12px rgba(15,43,36,0.22);
  --radius-lg: 26px;
  --radius-md: 16px;
  --radius-sm: 10px;
  --container: 1220px;
}

*,*::before,*::after{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
body{
  margin:0;
  font-family:'Manrope', sans-serif;
  color:var(--ink);
  background:var(--ivory);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
img{ max-width:100%; display:block; height:auto; }
a{ color:inherit; text-decoration:none; }
ul{ margin:0; padding:0; list-style:none; }
h1,h2,h3,h4{
  font-family:'Fraunces', serif;
  font-weight:600;
  line-height:1.12;
  margin:0 0 .5em;
  letter-spacing:-0.01em;
}
p{ margin:0 0 1em; color:var(--ink-soft); line-height:1.7; }
/* Elementor's own frontend.min.css sets .elementor-widget{margin-block-end:0}
   on every widget wrapper — a logical property that, per spec, competes
   directly with the physical `margin-bottom` above for the same edge, and
   (being on a class selector vs. these bare-element ones, and loaded after
   this stylesheet) wins the tie. Left alone, EVERY heading/paragraph inside
   an Elementor widget loses its own bottom margin, wherever nothing else
   supplies !important spacing to fall back on — Elementor's design intends
   spacing to come from the parent container's `gap` instead, which doesn't
   match how this theme's CSS is written (each element carries its own
   margin). Reassert with !important so our own spacing values win instead. */
h1,h2,h3,h4{ margin:0 0 .5em !important; }
p{ margin:0 0 1em !important; }
.container{ max-width:var(--container); margin:0 auto; padding:0 32px; }
section{ position:relative; }
/* WordPress's block-library CSS normally supplies these (see
   otr_dequeue_block_library_css()) — needed for the native block editor's
   own Align Left/Center/Right toolbar to have any visual effect at all. */
.has-text-align-center{ text-align:center; }
.has-text-align-left{ text-align:left; }
.has-text-align-right{ text-align:right; }
.em{ color:var(--terracotta); font-style:italic; }
.screen-reader-text{ position:absolute; left:-9999px; }

/* Buttons */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:10px;
  padding:16px 30px; border-radius:100px; font-weight:700; font-size:15px;
  font-family:'Manrope',sans-serif; cursor:pointer; border:none;
  transition:transform .25s ease, box-shadow .25s ease, background .25s ease;
  white-space:nowrap;
}
/* Tag-qualified (a/button only) so these never also match the Elementor
   Button widget's own wrapper <div>, which carries the same _css_classes for
   styling its inner .elementor-button link — see the dedicated Elementor
   Button widget bridge rules further down, which target that inner link
   directly. Without this qualifier the wrapper div picked up its own copy of
   the background/border, showing as a second rectangular outline around the
   real pill-shaped button. */
a.btn-primary, button.btn-primary{ background:var(--terracotta); color:#fff; box-shadow:0 12px 24px -8px rgba(217,123,76,.55); }
a.btn-primary:hover, button.btn-primary:hover{ background:var(--terracotta-dark); transform:translateY(-2px); color:#fff; }
a.btn-outline, button.btn-outline{ background:transparent; color:var(--paper); border:1.5px solid rgba(255,255,255,.55); }
a.btn-outline:hover, button.btn-outline:hover{ background:rgba(255,255,255,.12); transform:translateY(-2px); }
a.btn-dark-outline, button.btn-dark-outline{ background:transparent; color:var(--pine-900); border:1.5px solid var(--pine-900); }
a.btn-dark-outline:hover, button.btn-dark-outline:hover{ background:var(--pine-900); color:#fff; }
.btn-sm{ padding:11px 22px; font-size:13.5px; }
.btn[disabled]{ opacity:.65; cursor:not-allowed; transform:none !important; }

/* Eyebrow / kicker */
/* When Elementor renders this (the kicker widget carries class
   "elementor-widget"), its own frontend.min.css matches via
   .elementor-element:where(.e-con-full, .elementor-widget){align-items:
   var(--align-items); ...} — :where() always contributes zero specificity,
   so that selector's real specificity is just .elementor-element (1
   class), tying our own 1-class .kicker rule; Elementor's loads later, so
   it silently wins the tie and resets align-items to the unset custom
   property's initial value ("normal") instead of "center" — leaving the
   dash (::before) and the label text vertically misaligned. !important
   forces ours to win instead. */
.kicker{
  display:inline-flex !important; align-items:center !important; gap:8px;
  font-size:12.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase;
  color:var(--terracotta-dark);
  margin-bottom:16px !important;
}
.kicker::before{ content:''; width:22px; height:2px; background:var(--terracotta); display:inline-block; flex:none; }
/* Elementor's Heading widget renders the kicker as a <p>, which now also
   picks up the generic p{margin:0 0 1em !important} rule above — spacing
   here should come only from .kicker's own margin-bottom on the wrapper,
   not from the inner tag too. */
.kicker p, .kicker .elementor-heading-title{ margin:0 !important; }
.kicker.on-dark{ color:var(--gold-soft); }
.kicker.on-dark::before{ background:var(--gold-soft); }

/* ===== Topbar ===== */
.topbar{
  background:var(--pine-900); color:#DCEAE3;
  font-size:12.5px; font-weight:600;
}
.topbar .container{ display:flex; align-items:center; justify-content:space-between; padding-top:9px; padding-bottom:9px; gap:16px; }
.topbar-items{ display:flex; gap:26px; min-width:0; }
.topbar-items span{ display:inline-flex; align-items:center; gap:7px; opacity:.92; min-width:0; }
.topbar-items svg{ width:14px; height:14px; stroke:var(--gold-soft); flex:none; }
.topbar-right{ display:flex; gap:18px; align-items:center; flex:none; white-space:nowrap; }
.topbar-right a{ opacity:.85; }
.topbar-right a:hover{ opacity:1; color:var(--gold-soft); }

/* ===== Header ===== */
.site-header{
  position:sticky; top:0; z-index:100;
  border-bottom:1px solid var(--line);
  transition:box-shadow .3s ease;
}
.site-header::before{
  content:''; position:absolute; top:0; right:0; bottom:0; left:0; z-index:-1;
  background:rgba(251,246,238,.86);
  backdrop-filter:blur(14px);
}
.site-header.is-stuck{ box-shadow:0 8px 30px -12px rgba(15,43,36,.18); }
.nav-wrap{ display:flex; align-items:center; justify-content:space-between; padding:16px 32px; max-width:var(--container); margin:0 auto; }
.brand{ display:flex; align-items:center; gap:12px; }
.brand img{ max-height:var(--otr-logo-height, 64px); width:auto; }
.brand-link{ display:flex; align-items:center; gap:12px; }
.brand-mark{
  width:46px; height:46px; border-radius:12px;
  background:linear-gradient(155deg, var(--pine-700), var(--pine-900));
  display:flex; align-items:center; justify-content:center;
  color:var(--gold-soft); font-family:'Fraunces',serif; font-weight:600; font-size:19px;
  box-shadow: inset 0 0 0 1.5px rgba(231,185,104,.4);
  flex:none;
}
.brand-text{ line-height:1.15; }
.brand-text b{ font-family:'Fraunces',serif; font-size:19px; font-weight:600; color:var(--pine-900); display:block; }
.brand-text small{ font-size:10.5px; letter-spacing:.16em; color:var(--terracotta-dark); font-weight:700; }

.main-nav{ display:flex; align-items:center; gap:2px; }
.main-nav > li{ position:relative; }
.main-nav > li > a{
  display:flex; align-items:center; gap:5px; white-space:nowrap;
  padding:12px 16px; font-weight:600; font-size:14.5px; color:var(--pine-900);
  border-radius:8px; transition:color .2s;
}
.main-nav > li > a:hover{ color:var(--terracotta-dark); }
.main-nav svg{ width:13px; height:13px; margin-top:1px; }
.main-nav .dd-toggle{ background:none; border:none; padding:0; margin-left:2px; cursor:pointer; display:none; }

.dropdown, .main-nav .sub-menu{
  position:absolute; top:100%; left:0; margin-top:6px;
  background:var(--paper); border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md); min-width:250px; padding:10px;
  opacity:0; visibility:hidden; transform:translateY(6px);
  transition:all .2s ease; border:1px solid var(--line); z-index:50;
}
.main-nav li:hover .dropdown, .main-nav li:hover .sub-menu{ opacity:1; visibility:visible; transform:translateY(0); }
.dropdown a, .main-nav .sub-menu a{ display:block; padding:11px 14px; border-radius:8px; font-size:14px; font-weight:600; color:var(--ink); }
.dropdown a:hover, .main-nav .sub-menu a:hover{ background:var(--ivory-deep); color:var(--terracotta-dark); }
.dropdown a span{ display:block; font-size:12px; font-weight:500; color:var(--ink-soft); margin-top:2px; }
.main-nav .menu-item-has-children > a::after{ content:'▾'; font-size:11px; margin-left:5px; position:relative; top:-1px; }
.main-nav .menu-item-description{ display:block; font-size:12px; font-weight:500; color:var(--ink-soft); margin-top:2px; }

.nav-actions{ display:flex; align-items:center; gap:18px; }
.nav-phone{ display:flex; flex-direction:column; text-align:right; white-space:nowrap; }
.nav-phone small{ font-size:10.5px; color:var(--ink-soft); font-weight:600; }
.nav-phone strong{ font-size:14.5px; color:var(--pine-900); white-space:nowrap; }
.burger{ display:none; width:26px; height:20px; position:relative; cursor:pointer; background:none; border:none; padding:0; }
.burger span{ position:absolute; left:0; right:0; height:2px; background:var(--pine-900); border-radius:2px; transition:.3s; }
.burger span:nth-child(1){ top:0; } .burger span:nth-child(2){ top:9px; } .burger span:nth-child(3){ top:18px; }

/* Elementor Containers default to padding:10px on all sides (in addition to
   the 20px gap default reset further down this file). Reset to 0 here, as
   early as possible in this file, so every component's own !important
   padding declared below — .hero .container, .mini-card, .journey-panel,
   .callout, .info-card, .step, etc. — reliably wins the tie (same
   specificity, later source position) instead of this default.

   The plain `padding` shorthand only covers "full"-width containers, which
   render with no extra wrapper. "Boxed" containers (Elementor's default
   content-width setting, e.g. split-media/split-body) render an inner
   .e-con-inner div whose padding Elementor sources from the
   --padding-top/right/bottom/left custom properties (via
   --padding-block-start/end, --padding-inline-start/end) rather than the
   padding shorthand — so a plain `padding:0` reset on .e-con never reaches
   it. Zero those custom properties too so the inner wrapper inherits 0
   instead of Elementor's 10px fallback. */
.e-con{ padding:0 !important; --padding-top:0 !important; --padding-right:0 !important; --padding-bottom:0 !important; --padding-left:0 !important; }

/* Elementor Containers also default to a 20px flex/grid gap between their
   OWN direct children (not just the .e-con-inner gap reset below, which
   only covers "boxed" containers) — "full"-width containers with more than
   one direct child (e.g. a sec-head + a card grid, both direct children of
   a .container) apply this gap themselves, stacking on top of the child
   elements' own margin-bottom spacing instead of replacing it. Reset here;
   every intentional-gap component (.why-grid, .split, .steps, etc.) already
   carries its own !important gap declared later in this file. */
.e-con{ gap:0 !important; }

/* Elementor's own widget-image.min.css sets .elementor-widget-image img to
   display:inline-block (needed for its own alignment controls), which beats
   our global img{display:block} reset (style.css:51) on specificity. Left
   alone, an inline-block image with vertical-align:middle picks up a
   symmetric top/bottom "strut" gap from the surrounding line box — often
   40px+ of invisible height — in any image widget that isn't inside a
   container with an explicit fixed height. Force it back to block here. */
.elementor-widget-image img{ display:block !important; }

/* .container's own horizontal padding (defined earlier, above the .e-con
   reset) shares the same 1-class specificity as .e-con, so on Elementor
   pages the reset — being later in source — would otherwise win the tie
   and strip it. Reassert it here, after the reset, so it wins instead. */
.container{ padding:0 32px !important; }
/* Elementor's own frontend.min.css only auto-centers a .e-con that is a
   DIRECT child of .elementor-section-wrap / [data-elementor-id] — i.e. only
   truly top-level Elementor elements (:is(.elementor-section-wrap,
   [data-elementor-id]) > .e-con{--margin-left:auto; --margin-right:auto}).
   Every .container nested one level deeper (inside a .sec-pad, .journey,
   .why, etc. wrapper — which is every section since those got their own
   sec-pad wrapper) falls back to Elementor's base --margin-left:0, so our
   own `margin:0 auto` above loses the specificity tie and the whole
   section's content sits flush-left instead of centered. Force it here. */
.container{ margin-left:auto !important; margin-right:auto !important; }

/* ===== Hero ===== */
/* Elementor Containers default to flex-direction:column. align-items only
   controls the CROSS axis — in a column container that's horizontal, not
   vertical — so align-items:center alone was silently centering nothing
   visible (the child already spans full width) while leaving the actual
   vertical position at the flex default (flex-start), pinning content to
   the top of the 92vh box with all the extra height landing below it as
   empty space. Force flex-direction:row (matching plain CSS's own default,
   which is what this rule was written assuming) so align-items:center
   governs the vertical axis as intended. */
.hero{
  position:relative; min-height:92vh !important; display:flex !important; flex-direction:row !important; align-items:center !important;
  background:var(--pine-900); color:#fff; overflow:hidden;
  margin-bottom:0 !important;
}
.hero-bg{ position:absolute !important; top:0; right:0; bottom:0; left:0; margin:0 !important; }
.hero-bg img{ width:100%; height:100%; object-fit:cover; opacity:.55; border-radius:0 !important; margin:0 !important; }
.hero-bg::after{
  content:''; position:absolute; top:0; right:0; bottom:0; left:0;
  background:linear-gradient(100deg, rgba(15,43,36,.97) 15%, rgba(15,43,36,.75) 45%, rgba(15,43,36,.35) 78%);
}
.hero .container, .hero .container > .wp-block-group__inner-container, .hero .container > .e-con-inner{ position:relative; z-index:2; display:grid !important; grid-template-columns:1.15fr .85fr !important; gap:60px !important; align-items:center; padding-top:60px !important; padding-bottom:60px !important; }
.hero h1{ font-size:clamp(2.5rem, 4.6vw, 3.9rem); color:#fff; margin-bottom:22px !important; }
.hero p.lead{ font-size:18px; color:#D9E4DD; max-width:520px; margin-bottom:34px !important; }
/* margin-bottom needs !important too — .hero-ctas is an Elementor
   container, and Elementor's own base CSS sets --margin-bottom:0px (and
   maps it through to margin-block-end) on every .e-con by default, which
   otherwise wins this tie the same way padding/gap defaults have
   throughout this file. */
.hero-ctas, .hero-ctas > .wp-block-group__inner-container, .hero-ctas > .e-con-inner{ display:flex !important; flex-direction:row !important; gap:16px !important; flex-wrap:wrap; margin-bottom:44px !important; }
.hero-stats, .hero-stats > .wp-block-group__inner-container, .hero-stats > .e-con-inner{ display:flex !important; flex-direction:row !important; gap:34px !important; flex-wrap:wrap; }
.hero-stats b{ display:block; font-family:'Fraunces',serif; font-size:26px; color:var(--gold-soft); }
.hero-stats span{ font-size:12.5px; color:#C6D4CC; font-weight:600; }
/* Elementor's Text Editor widget always wraps content in a <p>, unlike the
   plain <div> the native markup used for these icon-adjacent label pairs —
   which pulls in the generic p{line-height:1.7; margin:0 0 1em} prose rule
   and roughly doubles their height. Reset both explicitly. */
.hero-stats p, .trust-item p{ margin:0 !important; line-height:1.3 !important; }

/* Native wp:button className variants — same "which button style" bridge
   already used for the theme's own <a class="btn ..."> markup and for
   Elementor's Button widget, just for a plain Gutenberg wp:button block. */
.wp-block-button.btn-primary .wp-block-button__link{ background:var(--terracotta) !important; color:#fff !important; border:none !important; box-shadow:0 12px 24px -8px rgba(217,123,76,.55); }
.wp-block-button.btn-primary .wp-block-button__link:hover{ background:var(--terracotta-dark) !important; }
.wp-block-button.btn-outline .wp-block-button__link{ background:transparent !important; color:var(--paper) !important; border:1.5px solid rgba(255,255,255,.55) !important; }
.wp-block-button.btn-outline .wp-block-button__link:hover{ background:rgba(255,255,255,.12) !important; }

/* Enquiry card in hero */
.enquiry-card{
  background:var(--paper); border-radius:var(--radius-lg); padding:32px;
  box-shadow:var(--shadow-lg); color:var(--ink);
}
.enquiry-card h3{ font-size:21px; margin-bottom:4px !important; }
.enquiry-card .sub{ font-size:13.5px; color:var(--ink-soft); margin-bottom:20px !important; }
.field{ margin-bottom:14px; }
.field label{ display:block; font-size:12px; font-weight:700; color:var(--pine-800); margin-bottom:6px; text-transform:uppercase; letter-spacing:.05em; }
.field input, .field select, .field textarea{
  width:100%; padding:13px 15px; border-radius:10px; border:1.5px solid var(--line);
  font-family:'Manrope',sans-serif; font-size:14.5px; background:var(--ivory); color:var(--ink);
}
.field input:focus, .field select:focus, .field textarea:focus{ outline:none; border-color:var(--terracotta); background:#fff; }
.enquiry-card .btn{ width:100%; margin-top:6px; }
.enquiry-note{ font-size:11.5px; color:var(--ink-soft); text-align:center; margin-top:12px; }
.form-msg{ font-size:13px; font-weight:600; margin-top:12px; text-align:center; display:none; }
.form-msg.show{ display:block; }
.form-msg.ok{ color:var(--pine-700); }
.form-msg.err{ color:#B23A2E; }

/* ===== Trust strip ===== */
.trust-strip{ background:var(--paper); border-bottom:1px solid var(--line); }
.trust-strip .container, .trust-strip .container > .wp-block-group__inner-container, .trust-strip .container > .e-con-inner{ display:flex !important; flex-direction:row !important; justify-content:space-between; padding:26px 32px !important; flex-wrap:wrap; gap:18px !important; }
.trust-item, .trust-item > .wp-block-group__inner-container, .trust-item > .e-con-inner{ display:flex !important; flex-direction:row !important; align-items:center; gap:12px !important; width:auto !important; flex:0 0 auto !important; }
.trust-item .ic{ width:42px; height:42px; border-radius:11px; background:var(--ivory-deep); display:flex; align-items:center; justify-content:center; flex:none; }
.trust-item .ic svg{ width:20px; height:20px; stroke:var(--pine-700); }
.trust-item b{ display:block; font-size:14px; color:var(--pine-900); }
.trust-item span{ font-size:12px; color:var(--ink-soft); }

/* ===== Section heading ===== */
.sec-head{ max-width:640px !important; margin-bottom:52px !important; }
.sec-head.center{ margin-left:auto !important; margin-right:auto !important; text-align:center; }
.sec-head h2{ font-size:clamp(1.9rem,3vw,2.6rem); color:var(--pine-900); }
/* .elementor-heading-title bump: same reason as .cta-band h2 above — this
   only used to matter for .sec-head instances still inside .entry-content
   (covered by that generic bridge rule), but story-heading/video-heading are
   extracted out to their own <section>, outside .entry-content entirely, so
   they need their own explicit protection against Elementor's
   .elementor-widget-heading .elementor-heading-title{color:var(--e-global-color-primary)}
   default. */
.sec-head .elementor-heading-title{ color:var(--pine-900) !important; }
/* Tag-scoped (h2, not just .elementor-heading-title) so this can't tie with
   .kicker .elementor-heading-title{font-family:'Manrope'...} elsewhere in
   this file — both are 2-class selectors and would otherwise depend on
   source order to decide which one wins for the kicker paragraph that also
   lives inside .sec-head. Needed for the same out-of-.entry-content reason
   as the color rule above: extracted story-heading/video-heading otherwise
   fall back to Elementor's default Roboto Kit font. */
.sec-head h2.elementor-heading-title{ font-family:'Fraunces', serif !important; font-weight:600; line-height:1.12; }
.sec-pad{ padding:96px 0 !important; }

/* Elementor Containers in flex mode default to a 20px gap between their
   direct children. That's fine for the grid-style card/column rows below
   (which set their own gap right back on top of this), but wrong for simple
   stacked-content containers — mini-card, split-body, journey-panel, and the
   page's own top-level section stack — where spacing is meant to come from
   each element's own margin (12px/20px/28px etc., not one uniform value).
   Reset to 0 here; every intentional-gap rule below carries its own
   !important gap to layer back on top of this default. */
:is(.entry-content, .editor-styles-wrapper) .e-con-inner{ gap:0 !important; }

/* When a wp:group block has no explicit "layout" attribute, Gutenberg (and,
   equivalently, Elementor when a Container isn't set to content_width:full)
   wraps its children in one extra "inner" div — .wp-block-group__inner-container
   or .e-con-inner. Every *-grid/-row class in this file targets both "the
   outer class itself" and "that inner wrapper", so whichever one is actually
   present gets the real column/flex layout — but that means BOTH ends up
   display:grid at once here, and since the outer only ever has that ONE
   inner div as its child, the inner wrapper gets squeezed into a single
   column/cell of the OUTER grid before it can lay out its own real content
   full-width. Force that lone inner wrapper to span the outer grid/flex
   completely, neutralising the redundant outer split so only the inner
   wrapper's own grid-template-columns actually does any column-splitting. */
:is(.entry-content, .editor-styles-wrapper) .wp-block-group > .wp-block-group__inner-container:only-child,
:is(.entry-content, .editor-styles-wrapper) .wp-block-group > .e-con-inner:only-child{
  grid-column:1 / -1 !important; grid-row:1 / -1 !important;
  width:100% !important; flex:1 1 100% !important;
}

/* ===== Why choose (feature cards) ===== */
.why{ background:var(--ivory); }
.why-grid, .why-grid > .wp-block-group__inner-container, .why-grid > .e-con-inner{ display:grid !important; grid-template-columns:repeat(3,1fr); gap:22px !important; }
.why-card{
  background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-md);
  padding:32px 28px; transition:transform .3s ease, box-shadow .3s ease;
}
.why-card:hover{ transform:translateY(-6px); box-shadow:var(--shadow-md); border-color:transparent; }
.why-card .ic{
  width:52px; height:52px; border-radius:14px; margin-bottom:20px !important;
  background:linear-gradient(155deg, var(--pine-700), var(--pine-900));
  display:flex; align-items:center; justify-content:center;
}
.why-card .ic svg{ width:24px; height:24px; stroke:var(--gold-soft); }
.why-card h3{ font-size:18px; color:var(--pine-900); margin-bottom:8px !important; }
.why-card p{ font-size:14.5px; margin:0 !important; }

/* Elementor Icon-Box widget bridge: same visual result when a .why-card /
   .info-card is built with Elementor instead of the theme's own markup. */
.why-card, .info-card{ text-align:left; }
/* Elementor's icon-box widget wraps icon+title+description in a flex column
   with its own default 15px gap, IN ADDITION to the icon's own margin-bottom
   set above/below — the two stack instead of one replacing the other,
   double-spacing the icon from its title. The margin alone already matches
   the design's spacing, so zero the widget's own gap. */
.why-card .elementor-icon-box-wrapper, .info-card .elementor-icon-box-wrapper{ gap:0 !important; }
/* Elementor's widget-icon-box.min.css sets
   .elementor-widget-icon-box.elementor-position-block-start
   .elementor-icon-box-wrapper{text-align:center} — 3-class specificity,
   beating the 1-class .why-card{text-align:left} above regardless of
   source order — because these widgets default to the "icon above text"
   position (block-start) unless a JSON "position" setting says otherwise.
   text-align is inherited, so the title/description center themselves
   even though the icon itself (given its own explicit fixed size/flex
   rules above) doesn't visibly follow that centering. Force left here,
   with enough specificity + !important to actually win. */
.why-card .elementor-icon-box-wrapper, .info-card .elementor-icon-box-wrapper{ text-align:left !important; }
/* Elementor's own widget-icon-box.min.css sets
   .elementor-widget-icon-box .elementor-icon-box-icon{display:inline-block}
   — same 2-class specificity as the rules below, loaded after this
   stylesheet, so it wins the tie and silently turns the flex centering
   back off. Without flex actually applying, the svg (an inline-level
   element) just sits at the top of the box instead of being centered,
   with every bit of the box's extra height collapsing below it. !important
   forces ours to win instead. */
.why-card .elementor-icon-box-icon{
  width:52px; height:52px; border-radius:14px; margin-bottom:20px !important;
  background:linear-gradient(155deg, var(--pine-700), var(--pine-900)) !important;
  display:flex !important; align-items:center !important; justify-content:center !important;
}
.why-card .elementor-icon-box-icon svg{ width:24px; height:24px; fill:var(--gold-soft) !important; }
.why-card .elementor-icon-box-title{ font-size:18px; color:var(--pine-900) !important; margin-bottom:8px !important; font-family:'Fraunces',serif; font-weight:600; }
.why-card .elementor-icon-box-description{ font-size:14.5px; color:var(--ink-soft) !important; margin:0 !important; }
.info-card .elementor-icon-box-icon{ margin-bottom:14px !important; width:auto; height:auto; background:none !important; display:inline-flex !important; align-items:center !important; justify-content:center !important; }
/* margin:0 here overrides the native-rendering .info-card svg{margin-bottom:
   14px} rule further down this file (meant for the plain, non-Elementor
   .ic svg pattern) — spacing between icon and title in the Elementor
   context already comes from the outer .elementor-icon-box-icon's own
   margin-bottom, so this second margin was stacking on top of it AND
   (since flex centering includes an item's margin box) pushing the icon
   off-center within its own span. */
.info-card .elementor-icon-box-icon svg{ width:26px; height:26px; fill:var(--terracotta-dark) !important; margin:0 !important; }
/* One layer deeper: Elementor wraps the svg itself in <span
   class="elementor-icon"> (its own default styling: display:inline-block,
   font-size:50px, line-height:1 — meant for icon-FONT glyphs, which those
   properties do center via the text baseline, but an <svg> is a block-level
   replaced element that ignores line-height centering entirely and just
   sits at the top of that span instead). On .why-card this was masked by
   coincidence — its icon box has a FIXED 52x52 size, and a centered flex
   item shrinks to fit its content rather than stretching, so the span
   happened to collapse to exactly the svg's own 24px and there was no room
   left over to be off-center in. .info-card's box is width/height:auto, so
   the span's own oversized natural height (~40px vs the svg's 26px) had
   nowhere to hide, and the svg sat pinned to the top of it. Fix at the
   source for both, rather than relying on the outer box accidentally
   absorbing it. */
/* height:auto on a flex item doesn't reliably shrink-to-content here — it
   still stretches to the align-items:center parent's cross-axis size in
   this case — so pin the span to the svg's own exact pixel size directly
   rather than fighting the flex algorithm further. */
.why-card .elementor-icon-box-icon .elementor-icon{
  display:flex !important; align-items:center !important; justify-content:center !important;
  width:24px !important; height:24px !important; font-size:0 !important; line-height:0 !important;
}
.info-card .elementor-icon-box-icon .elementor-icon{
  display:flex !important; align-items:center !important; justify-content:center !important;
  width:26px !important; height:26px !important; font-size:0 !important; line-height:0 !important;
}
.info-card.on-dark .elementor-icon-box-icon svg{ fill:var(--gold-soft) !important; }
.info-card .elementor-icon-box-title{ font-size:15.5px; color:var(--pine-900) !important; margin-bottom:6px !important; font-family:'Fraunces',serif; font-weight:600; }
.info-card.on-dark .elementor-icon-box-title{ color:#fff !important; }
.info-card .elementor-icon-box-description{ font-size:13.5px; margin:0 !important; color:var(--ink-soft) !important; }
.info-card.on-dark .elementor-icon-box-description{ color:#B7C7BE !important; }

/* Elementor's own default Kit typography (Roboto font, bright blue heading
   color) must never show through on plain Heading/Text-Editor widgets —
   they inherit the theme's Fraunces/Manrope palette exactly like native
   block content does. Body-text color already inherits correctly without an
   override (Elementor's text-editor widget doesn't force one); font-family
   does need forcing since Elementor's Kit default always sets it. */
.entry-content .elementor-heading-title{
  font-family:'Fraunces', serif !important;
  font-weight:600;
  line-height:1.12;
  color:var(--pine-900) !important;
}
.entry-content .elementor-widget-text-editor,
.entry-content .elementor-widget-text-editor p{ font-family:'Manrope', sans-serif !important; }
.journey-panel .elementor-heading-title{ color:#fff !important; }
.journey-panel .elementor-widget-text-editor,
.journey-panel .elementor-widget-text-editor p{ color:#C6D4CC !important; }
.hero .elementor-heading-title{ color:#fff !important; }
.hero .elementor-widget-text-editor,
.hero .elementor-widget-text-editor p{ color:#D9E4DD !important; }
.kicker .elementor-heading-title{
  color:var(--terracotta-dark) !important;
  font-family:'Manrope', sans-serif !important;
  font-weight:700 !important;
  font-size:12.5px !important;
  letter-spacing:.14em; text-transform:uppercase; line-height:normal;
}
.kicker.on-dark .elementor-heading-title{ color:var(--gold-soft) !important; }
.mini-card .elementor-heading-title{ color:#fff !important; font-size:24px !important; }

/* Elementor Button widget bridge: the real <a class="elementor-button"> link
   sits *inside* the wrapper div that carries our _css_classes (btn-primary /
   btn-outline / btn-dark-outline), so those classes never reach the actual
   link unless targeted as a descendant here — same visual result as the
   theme's own <a class="btn ..."> markup either way. */
.btn-primary .elementor-button,
.btn-outline .elementor-button,
.btn-dark-outline .elementor-button{
  display:inline-flex !important; align-items:center; justify-content:center; gap:10px;
  padding:16px 30px !important; border-radius:100px !important; font-weight:700 !important; font-size:15px !important;
  font-family:'Manrope',sans-serif !important; white-space:nowrap; width:auto !important;
}
.btn-primary .elementor-button{ background:var(--terracotta) !important; color:#fff !important; box-shadow:0 12px 24px -8px rgba(217,123,76,.55); }
.btn-primary .elementor-button:hover{ background:var(--terracotta-dark) !important; }
.btn-outline .elementor-button{ background:transparent !important; color:var(--paper) !important; border:1.5px solid rgba(255,255,255,.55) !important; }
.btn-outline .elementor-button:hover{ background:rgba(255,255,255,.12) !important; }
.btn-dark-outline .elementor-button{ background:transparent !important; color:var(--pine-900) !important; border:1.5px solid var(--pine-900) !important; }
.btn-dark-outline .elementor-button:hover{ background:var(--pine-900) !important; color:#fff !important; }

/* Elementor Icon-List widget bridge: used for .spec-list (Program Snapshot)
   and the .mini-card ul lists (Eligibility/Financial two-col-cta) instead of
   the theme's own CSS-only "::before" checkmark, so the check-icon color and
   list text need explicit overrides matching each context's design. */
.entry-content .elementor-icon-list-text{ font-family:'Manrope', sans-serif !important; }
.spec-list .elementor-icon-list-icon svg{ fill:var(--terracotta) !important; }
.spec-list .elementor-icon-list-text{ color:var(--ink-soft) !important; font-size:14.5px !important; }
.spec-list .elementor-icon-list-text b{ color:var(--ink) !important; }
.mini-card .elementor-icon-list-icon svg{ fill:var(--gold-soft) !important; }
.mini-card.tint .elementor-icon-list-icon svg{ fill:#fff !important; }
.mini-card .elementor-icon-list-text{ color:rgba(255,255,255,.9) !important; font-size:14px !important; }

/* ===== Program snapshot (split) ===== */
.split, .split > .e-con-inner{ display:grid !important; grid-template-columns:1fr 1fr; gap:70px !important; align-items:center !important; }
.split.reverse{ direction:rtl; } .split.reverse > *{ direction:ltr; }
.split-media{ position:relative; }
/* border-radius needs !important — Elementor's own frontend.min.css ships
   .elementor img{border-radius:0}, tying this rule's specificity exactly
   (1 class + 1 element each) and winning on source order since it loads
   after this stylesheet. */
.split-media img{ display:block !important; border-radius:var(--radius-lg) !important; box-shadow:var(--shadow-md); width:100%; aspect-ratio:4/3.4; object-fit:cover; }
.split-media .stat-chip{
  position:absolute; bottom:-24px; left:-24px; background:var(--paper);
  border-radius:var(--radius-md); box-shadow:var(--shadow-lg); padding:18px 22px;
  display:flex; gap:14px; align-items:center;
}
.split-media .stat-chip b{ font-family:'Fraunces',serif; font-size:24px; color:var(--pine-900); display:block; }
.split-media .stat-chip span{ font-size:12px; color:var(--ink-soft); }
.split-body h2{ color:var(--pine-900) !important; }
.spec-list{ margin-top:26px; display:flex; flex-direction:column; gap:14px; list-style:none; padding-left:0; }
.spec-list li{ display:flex; gap:14px; align-items:flex-start; font-size:14.5px; color:var(--ink-soft); }
.spec-list li::before{ content:'✓'; color:var(--terracotta); font-weight:700; flex:none; }
.spec-list li b{ color:var(--ink); }

/* ===== Journey / timeline ===== */
.journey{ background:var(--pine-900) !important; color:#fff; padding:96px 0 !important; margin-bottom:0 !important; }
.journey .sec-head h2, .journey .sec-head .elementor-heading-title{ color:#fff !important; }
.journey .sec-head p, .journey .sec-head .elementor-widget-text-editor p{ color:#C6D4CC !important; }

/* Reusable "dark full-bleed section" pattern (pine-900 bg, white heading,
   muted-sage body text) for any .sec-pad that needs the same on-dark
   treatment .journey uses above — e.g. the Career Outcomes section on the
   Nursing in Germany page. */
.sec-pad.on-dark{ background:var(--pine-900) !important; color:#fff; }
.sec-pad.on-dark .sec-head h2, .sec-pad.on-dark .sec-head .elementor-heading-title{ color:#fff !important; }
.sec-pad.on-dark .sec-head p, .sec-pad.on-dark .sec-head .elementor-widget-text-editor p{ color:#C6D4CC !important; }
/* .wp-block-group__inner-container is an extra wrapper Gutenberg sometimes
   inserts around a Group block's actual children — grid/flex rules must
   target whichever element really holds them. */
.steps, .steps > .wp-block-group__inner-container, .steps > .e-con-inner{ display:grid !important; grid-template-columns:repeat(6,1fr); gap:16px !important; counter-reset:step; }
.step{
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.12);
  border-radius:var(--radius-md) !important; padding:26px 20px !important; position:relative;
  counter-increment:step;
}
/* Elementor reserves ::before on every .e-con for its own background-overlay
   system (.e-con::before{content:var(--background-overlay); position:absolute;
   ...} in frontend.min.css) — same specificity as this rule, loaded after
   it, so it silently wins the tie, blanking out the step-number badge and
   (via position:absolute, which our rule never used to specify at all, so
   Elementor's value fell through even once content/size were fixed) pulling
   it out of normal flow so it no longer pushes the heading down. !important
   forces ours to win for every property Elementor's rule also sets. */
.step::before{
  content:counter(step) !important;
  position:static !important;
  font-family:'Fraunces',serif; font-size:15px; color:var(--pine-900); background:var(--gold-soft) !important;
  width:34px !important; height:34px !important; border-radius:50% !important; display:flex !important; align-items:center; justify-content:center;
  font-weight:700; margin-bottom:16px !important;
}
/* .journey. prefix (not just .step) bumps this to 2 classes + 1 element,
   beating .entry-content .elementor-heading-title{color:var(--pine-900)
   !important} (2 classes + 0 elements) — a general bridge rule added
   earlier to make Elementor headings inherit the theme's ink color, which
   otherwise silently wins this tie against plain-element selectors even
   though both sides use !important (specificity is still the tie-breaker
   between two !important rules). */
.journey .step h4{ color:#fff !important; font-size:15px; margin-bottom:6px !important; font-family:'Manrope',sans-serif; font-weight:700; }
.step p{ font-size:12.5px; color:#B7C7BE !important; margin:0 !important; line-height:1.55 !important; }
/* Connector arrows between steps, desktop 6-column layout only — hidden at
   the 3- and 2-column breakpoints below, where the grid wraps to multiple
   rows and a rightward arrow between cards would no longer read as "next
   step". */
.step:not(:last-child)::after{
  content:'→'; position:absolute; top:34px; right:-19px; z-index:1;
  color:var(--gold-soft); font-size:16px; font-weight:700; line-height:1;
}

/* ===== Partner spotlight ===== */
.partner{ background:var(--paper); }
.partner-gallery, .partner-gallery > .e-con-inner{ display:grid !important; grid-template-columns:1.3fr 1fr !important; grid-template-rows:1fr 1fr !important; gap:16px !important; height:460px !important; }
.partner-gallery > *{ min-height:0; min-width:0; overflow:hidden; }
.partner-gallery img{ width:100%; height:100%; object-fit:cover; border-radius:var(--radius-md) !important; }
.partner-gallery .big{ grid-row:span 2; }
.partner-gallery .elementor-widget-image,
.partner-gallery .elementor-widget-image .elementor-widget-container,
.partner-gallery .elementor-widget-image img{ width:100%; height:100%; }
.partner-gallery .elementor-widget-image img{ object-fit:cover; border-radius:var(--radius-md); }
.partner-badge{
  display:inline-flex; align-items:center; gap:10px; background:var(--ivory-deep);
  padding:10px 18px; border-radius:100px; font-size:13px; font-weight:700; color:var(--pine-800); margin-bottom:20px;
}
.partner-badge svg{ width:16px; height:16px; stroke:var(--terracotta-dark); }

/* ===== Testimonial / success story ===== */
.story{ background:var(--ivory-deep); }
.story-grid{ display:grid; grid-template-columns:.9fr 1.1fr; gap:0; border-radius:var(--radius-lg); overflow:hidden; box-shadow:var(--shadow-lg); }
.story-media{ position:relative; min-height:420px; }
.story-media img{ width:100%; height:100%; object-fit:cover; position:absolute; top:0; right:0; bottom:0; left:0; }
.story-body{ background:var(--pine-900); color:#fff; padding:56px; display:flex; flex-direction:column; justify-content:center; }
.story-body .quote-mark{ font-family:'Fraunces',serif; font-size:64px; color:var(--gold-soft); line-height:1; margin-bottom:10px; }
.story-body p.quote{ font-family:'Fraunces',serif; font-size:22px; font-style:italic; color:#fff; line-height:1.5; margin-bottom:26px !important; }
.story-person{ display:flex; align-items:center; gap:14px; }
.story-person .dot{ width:44px; height:44px; border-radius:50%; background:var(--terracotta); display:flex; align-items:center; justify-content:center; font-family:'Fraunces',serif; font-weight:700; color:#fff; overflow:hidden; }
.story-person .dot img{ width:100%; height:100%; object-fit:cover; }
.story-person b{ display:block; color:#fff; font-size:14.5px; }
.story-person span{ font-size:12.5px; color:#B7C7BE; }
.sample-tag{ display:inline-block; margin-top:22px; font-size:11px; color:#8FA79B; letter-spacing:.04em; }
.story-dots{ display:flex; gap:8px; margin-top:30px; }
.story-dots button{ width:9px; height:9px; border-radius:50%; background:rgba(255,255,255,.25); border:none; cursor:pointer; padding:0; }
.story-dots button.active{ background:var(--gold-soft); }

/* ===== Video stories slider ===== */
.video-slider{
  display:flex; gap:20px; overflow-x:auto; scroll-snap-type:x mandatory;
  padding-bottom:8px; margin:0 -4px; scrollbar-width:none;
}
.video-slider::-webkit-scrollbar{ display:none; }
.video-card{
  position:relative; flex:none; width:260px; aspect-ratio:9/16; scroll-snap-align:start;
  border-radius:var(--radius-lg); overflow:hidden; background:var(--pine-900);
  box-shadow:var(--shadow-md);
}
.video-card video{
  width:100%; height:100%; object-fit:cover; display:block; background:var(--pine-900);
}
.video-card::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(to top, rgba(15,43,36,.85) 0%, rgba(15,43,36,.15) 38%, rgba(15,43,36,0) 60%);
  transition:opacity .25s ease;
}
.video-card.playing::after{ opacity:0; }
.play-btn{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:60px; height:60px; border-radius:50%; border:none; cursor:pointer;
  background:rgba(255,255,255,.94); color:var(--pine-900);
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 8px 24px rgba(0,0,0,.35); transition:transform .2s ease, opacity .2s ease;
}
.play-btn svg{ width:22px; height:22px; margin-left:3px; }
.video-card:hover .play-btn{ transform:translate(-50%,-50%) scale(1.08); }
.video-card.playing .play-btn{ opacity:0; pointer-events:none; }
.video-meta{
  position:absolute; left:18px; right:18px; bottom:16px; color:#fff;
  transition:opacity .25s ease;
}
.video-card.playing .video-meta{ opacity:0; pointer-events:none; }
.video-meta b{ display:block; font-size:14.5px; }
.video-meta span{ display:block; font-size:12px; color:#C6D4CC; margin-top:2px; }
.slider-nav{ display:flex; gap:12px; justify-content:center; margin-top:28px; }
.slider-arrow{
  width:42px; height:42px; border-radius:50%; border:1px solid var(--line);
  background:var(--paper); color:var(--pine-900); cursor:pointer;
  display:flex; align-items:center; justify-content:center; transition:background .2s ease, color .2s ease;
}
.slider-arrow:hover{ background:var(--pine-900); color:#fff; border-color:var(--pine-900); }
.slider-arrow svg{ width:18px; height:18px; }

/* ===== Eligibility + Financial banners ===== */
.two-col-cta, .two-col-cta > .e-con-inner{ display:grid !important; grid-template-columns:1fr 1fr; gap:24px !important; }
.mini-card{
  border-radius:var(--radius-lg) !important; padding:44px !important; position:relative; overflow:hidden;
}
.mini-card.dark{ background:var(--pine-900); color:#fff; }
.mini-card.tint{ background:var(--terracotta); color:#fff; }
.mini-card h3, .mini-card .elementor-heading-title{ font-size:24px; color:#fff !important; margin-bottom:12px !important; }
.mini-card p, .mini-card .elementor-widget-text-editor p{ color:rgba(255,255,255,.82) !important; font-size:14.5px; margin-bottom:0 !important; }
.mini-card ul,
.mini-card .elementor-icon-list-items{ margin:20px 0 28px !important; display:flex; flex-direction:column; gap:10px; list-style:none; padding-left:0; }
.mini-card ul li{ display:flex; gap:10px; font-size:14px; color:rgba(255,255,255,.9); }
.mini-card ul li::before{ content:'✓'; color:var(--gold-soft); font-weight:700; flex:none; }
.mini-card.tint ul li::before{ color:#fff; }

/* ===== Blog preview / listing ===== */
.blog-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:24px; }
.blog-card{ background:var(--paper); border-radius:var(--radius-md); overflow:hidden; border:1px solid var(--line); transition:transform .3s, box-shadow .3s; }
.blog-card:hover{ transform:translateY(-6px); box-shadow:var(--shadow-md); }
.blog-card .thumb{ height:170px; background:linear-gradient(135deg, var(--pine-700), var(--pine-900)); display:flex; align-items:center; justify-content:center; overflow:hidden; }
.blog-card .thumb img{ width:100%; height:100%; object-fit:cover; }
.blog-card .thumb svg{ width:34px; height:34px; stroke:var(--gold-soft); opacity:.85; }
.blog-card .body{ padding:24px; }
.blog-card .tag{ font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.08em; color:var(--terracotta-dark); }
.blog-card h4{ font-size:16.5px; margin:10px 0 8px; color:var(--pine-900); line-height:1.4; }
.blog-card .read{ font-size:13px; font-weight:700; color:var(--pine-800); display:inline-flex; align-items:center; gap:6px; margin-top:6px; }
.blog-listing{ display:grid; grid-template-columns:repeat(2,1fr); gap:24px; }
.pagination-row{ display:flex; justify-content:center; gap:10px; margin-top:50px; }
.pagination-row a, .pagination-row span{ padding:10px 18px; border-radius:100px; border:1.5px solid var(--line); font-size:13.5px; font-weight:700; color:var(--pine-900); }
.pagination-row .current{ background:var(--pine-900); color:#fff; border-color:var(--pine-900); }

/* ===== Final CTA band ===== */
/* padding/text-align !important — this section is now Elementor-editable
   (a .e-con) on every page, so it's subject to the same Elementor-default
   tie-breaking pattern as every other container in this file. */
.cta-band{
  background:linear-gradient(120deg, var(--pine-900), var(--pine-700));
  color:#fff; text-align:center !important; padding:88px 0 !important; position:relative; overflow:hidden;
}
/* margin:auto here horizontally centers the block (it has an explicit
   max-width) — but the generic h1-h4/p !important margin rules added
   earlier in this file (needed to stop Elementor's widget-level
   margin-block-end:0 from zeroing out normal heading/paragraph spacing)
   otherwise win the tie and collapse this back to a plain 0-left-margin
   block, pulling the text out of alignment with the (correctly centered)
   buttons below it. Reassert with !important. */
/* .elementor-heading-title bump needed for the same reason documented above
   .journey .step h4 — .entry-content .elementor-heading-title{color:var(--pine-900)
   !important} (2 classes) otherwise wins the specificity tie against a plain
   element selector like this one. */
.cta-band h2, .cta-band .elementor-heading-title{ color:#fff !important; font-family:'Fraunces', serif !important; font-weight:600 !important; font-size:clamp(1.9rem,3.4vw,2.7rem); max-width:680px; margin:0 auto 16px !important; }
.cta-band p{ color:#CBDACF; font-family:'Manrope', sans-serif !important; max-width:520px; margin:0 auto 34px !important; }
.cta-band .btns, .cta-band .btns > .wp-block-group__inner-container, .cta-band .btns > .e-con-inner{ display:flex !important; gap:16px !important; justify-content:center !important; flex-wrap:wrap; }
.cta-band .elementor-widget-button{ margin-top:0 !important; }

/* ===== Footer ===== */
.site-footer{ background:var(--pine-900); color:#B7C7BE; padding-top:76px; }
.footer-grid{ display:grid; grid-template-columns:1.5fr 1fr 1fr 1.2fr; gap:40px; padding-bottom:50px; border-bottom:1px solid rgba(255,255,255,.1); }
.footer-brand p{ color:#9BB0A4; font-size:14px; max-width:280px; }
.footer-col h5{ color:#fff; font-family:'Manrope',sans-serif; font-size:13px; letter-spacing:.06em; text-transform:uppercase; margin-bottom:18px; }
.footer-col li{ margin-bottom:11px; font-size:14px; }
.footer-col a:hover{ color:var(--gold-soft); }
.footer-contact li{ display:flex; gap:10px; align-items:flex-start; font-size:14px; }
.footer-contact svg{ width:16px; height:16px; stroke:var(--gold-soft); margin-top:3px; flex:none; }
.social-row{ display:flex; gap:10px; margin-top:20px; }
.social-row a{ width:38px; height:38px; border-radius:50%; background:rgba(255,255,255,.08); display:flex; align-items:center; justify-content:center; }
.social-row svg{ width:16px; height:16px; stroke:#fff; }
.footer-bottom{ display:flex; justify-content:space-between; padding:24px 0; font-size:12.5px; color:#7E9488; flex-wrap:wrap; gap:10px; }
.footer-bottom a:hover{ color:var(--gold-soft); }

/* ===== Floating elements ===== */
.whatsapp-float{
  position:fixed; bottom:26px; right:26px; z-index:200;
  width:58px; height:58px; border-radius:50%; background:#25D366;
  display:flex; align-items:center; justify-content:center; box-shadow:0 14px 28px -8px rgba(37,211,102,.6);
}
.whatsapp-float svg{ width:28px; height:28px; fill:#fff; }
.mobile-sticky-cta{ display:none; }

/* ===== Inner page hero (small) ===== */
.page-hero{ background:var(--pine-900); color:#fff; padding:180px 0 90px; position:relative; overflow:hidden; }
.page-hero .container{ position:relative; z-index:2; }
.page-hero-bg{ position:absolute; top:0; right:0; bottom:0; left:0; }
.page-hero-bg img{ width:100%; height:100%; object-fit:cover; opacity:.28; }
.page-hero-bg::after{ content:''; position:absolute; top:0; right:0; bottom:0; left:0; background:linear-gradient(180deg, rgba(15,43,36,.55), rgba(15,43,36,.96)); }
.breadcrumb{ font-size:13px; color:#B7C7BE; margin-bottom:18px; }
.breadcrumb a:hover{ color:var(--gold-soft); }
.page-hero h1{ color:#fff; font-size:clamp(2.1rem,3.6vw,3.1rem); max-width:680px; }
.page-hero p{ color:#D9E4DD; max-width:560px; font-size:16.5px; }

/* Content page prose blocks */
.prose-block{ max-width:760px; }

/* :is(.entry-content, .editor-styles-wrapper) spans the full container; individual blocks control their own
   width so plain prose stays a comfortable reading measure while sections like
   Columns/Group can opt into "wide" (align:wide in the block editor). */
:is(.entry-content, .editor-styles-wrapper){ max-width:none; }
:is(.entry-content, .editor-styles-wrapper) > *{ max-width:760px; margin-left:auto; margin-right:auto; }
:is(.entry-content, .editor-styles-wrapper) > .alignwide{ max-width:1120px; }
:is(.entry-content, .editor-styles-wrapper) > .alignfull{ max-width:none; }
/* Elementor wraps all of a page's content in one `.elementor` div (no WP
   alignwide/alignfull classes involved) — let it span full width and leave
   each individual container's own Content Width setting (boxed/full) to
   control sizing from there, same as it would outside the_content(). */
:is(.entry-content, .editor-styles-wrapper) > .elementor{ max-width:none; }
/* Scoped to .prose-block and .editor-styles-wrapper only, same reasoning as
   the img rule above — every page template wraps its Elementor-editable
   content in .entry-content, so a broad :is(.entry-content, ...) selector
   here would overwrite every Elementor heading/paragraph/list widget's own
   font-size and spacing with generic blog-prose values sitewide (this is
   exactly what was silently shrinking headings like the Journey section's
   h2 from clamp(1.9rem,3vw,2.6rem) down to a flat 1.9rem). */
.prose-block h2, .editor-styles-wrapper h2{ color:var(--pine-900); font-size:1.9rem; margin-top:1.4em; }
.prose-block h3, .editor-styles-wrapper h3{ color:var(--pine-900); font-size:1.35rem; margin-top:1.2em; }
.prose-block h2:first-child, .prose-block h3:first-child,
:is(.entry-content, .editor-styles-wrapper) > *:first-child, .editor-styles-wrapper h2:first-child, .editor-styles-wrapper h3:first-child{ margin-top:0; }
.prose-block p, .editor-styles-wrapper p{ font-size:15.5px; }
.prose-block ul, .editor-styles-wrapper ul{ margin:0 0 1.2em; padding-left:0; list-style:none; }
.prose-block ul li, .editor-styles-wrapper ul:not(.spec-list):not(.mini-card ul) li{ display:flex; gap:12px; font-size:15px; color:var(--ink-soft); margin-bottom:10px; padding-left:0; }
.prose-block ul li::before, .editor-styles-wrapper ul:not(.spec-list):not(.mini-card ul) li::before{ content:'—'; color:var(--terracotta); flex:none; }
/* Elementor's Icon-List widget wraps items in <ul class="elementor-icon-list-items">
   rather than <ul class="spec-list">/<ul> inside .mini-card — the class lives on an
   ancestor div instead, so the :not(.spec-list):not(.mini-card ul) exclusion above
   never matches it, and both the theme's own dash AND Elementor's check icon were
   showing together. Explicitly suppress the dash for icon-list items in both contexts. */
.spec-list .elementor-icon-list-item::before,
.mini-card .elementor-icon-list-item::before{ content:none !important; }
/* Deliberately scoped to .prose-block (blog/page body copy) and
   .editor-styles-wrapper (the wp-admin block-editor canvas) only — NOT
   .entry-content. Every page template (Home, About, Nursing in Germany,
   Eligibility, Financial Support, Career Outcomes, Contact) wraps its
   Elementor-editable content in .entry-content, so a broader selector here
   would add unwanted 1.4em top/bottom margin to every structured image
   widget (split-media, partner-gallery, etc.) across the whole site, not
   just inline prose images. */
.prose-block img, .editor-styles-wrapper img{ border-radius:var(--radius-md); margin:1.4em 0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-image{ margin:1.4em 0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-image img{ margin:0; }
.callout{
  background:var(--ivory-deep) !important; border-left:4px solid var(--terracotta) !important;
  border-radius:0 var(--radius-sm) var(--radius-sm) 0 !important; padding:22px 26px !important; margin:26px 0 !important;
}
.callout p{ margin:0; font-size:14.5px; color:var(--ink); }

/* Core block compatibility (content authored in the block editor) */

/* Sane baseline for any Columns/Group/Gallery block an editor adds, since the
   generic wp-block-library stylesheet is dequeued in favour of this file. */
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns{ display:flex; flex-wrap:wrap; gap:2em; margin:0 0 1.75em; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-column{ flex:1; min-width:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-group{ margin:0 0 1.75em; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-gallery{ display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:16px; list-style:none; padding:0; margin:1.4em 0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-gallery figure{ margin:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-gallery img{ border-radius:var(--radius-md); width:100%; height:100%; object-fit:cover; aspect-ratio:4/3; }

/* Specific section patterns used by the seeded page content. */
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.split{ display:grid; grid-template-columns:1fr 1fr; gap:70px; align-items:center; margin-bottom:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.split .wp-block-column{ flex:none; width:auto; min-width:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.split .split-media img{ border-radius:var(--radius-lg); box-shadow:var(--shadow-md); width:100%; aspect-ratio:4/3.4; object-fit:cover; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.timeline-h{ display:flex; gap:0; margin:36px 0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.timeline-h .wp-block-column{ flex:1; }
.journey-panel{
  background:var(--pine-900) !important; border-radius:var(--radius-lg) !important; padding:56px 40px !important; margin:48px auto;
}
.journey-panel .kicker{ justify-content:center; }
.journey-panel h2{ color:#fff !important; text-align:center; }
.journey-panel p{ color:#C6D4CC !important; text-align:center; }
.journey-panel .wp-block-buttons{ justify-content:center; }
.journey-panel .wp-block-button__link{
  background:transparent !important; color:var(--paper) !important; border:1.5px solid rgba(255,255,255,.55) !important;
}
.journey-panel .wp-block-button__link:hover{ background:rgba(255,255,255,.12) !important; color:var(--paper) !important; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-group.steps{ margin:32px 0 0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.two-col-cta{ margin-bottom:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-columns.two-col-cta .wp-block-column{ flex:none; width:auto; min-width:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-group.value-grid{ margin-bottom:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-buttons{ display:flex; gap:16px; flex-wrap:wrap; margin:24px 0 0; list-style:none; padding-left:0; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-buttons .wp-block-button{ margin:0; }
/* Elementor equivalent of the .wp-block-buttons margin-top above — a
   standalone otr_block_button() call becomes a bare Elementor Button
   widget (elementor-widget-button), never wrapped in .wp-block-buttons at
   all, so that rule can't reach it and these buttons sat flush against
   whatever content came before them (a list, a paragraph) with no
   breathing room. Exclude .hero-ctas specifically: its two buttons are a
   row with their own already-correct gap/margin system, not a standalone
   single button that needs top spacing from preceding content. */
.elementor-widget-button{ margin-top:24px !important; }
.hero-ctas .elementor-widget-button{ margin-top:0 !important; }
/* .mini-card's own list already carries a correct margin-bottom:28px
   (.mini-card .elementor-icon-list-items above) providing all the spacing
   its button needs — the broad rule above would otherwise stack an extra
   24px on top of that (52px total vs the design's 28px). */
.mini-card .elementor-widget-button{ margin-top:0 !important; }
:is(.entry-content, .editor-styles-wrapper) .wp-block-button__link{
  display:inline-flex; align-items:center; justify-content:center; gap:10px;
  padding:16px 30px; border-radius:100px; font-weight:700; font-size:15px;
  font-family:'Manrope',sans-serif; border:1.5px solid var(--pine-900); color:var(--pine-900) !important;
  background:transparent; text-decoration:none; transition:background .25s ease, color .25s ease;
}
:is(.entry-content, .editor-styles-wrapper) .wp-block-button__link:hover{ background:var(--pine-900); color:#fff !important; }
:is(.entry-content, .editor-styles-wrapper) .kicker{ display:inline-flex; }

.timeline-h{ display:flex !important; flex-direction:row !important; gap:0; margin:36px 0; }
.timeline-h .tl-node{ flex:1; text-align:center; position:relative; padding:0 10px; }
.timeline-h .tl-node::before{ content:''; position:absolute; top:19px; left:-50%; width:100%; height:2px; background:var(--line); }
.timeline-h .tl-node:first-child::before{ display:none; }
.timeline-h .dot{ width:38px; height:38px; border-radius:50%; background:var(--paper); border:2px solid var(--terracotta); color:var(--terracotta-dark); font-weight:700; font-family:'Fraunces',serif; display:flex; align-items:center; justify-content:center; margin:0 auto 12px !important; position:relative; z-index:1; font-size:13px; }
.timeline-h b, .timeline-h strong, .timeline-h .tl-label{ display:block; font-size:13.5px; color:var(--pine-900); font-weight:700; margin:0; }
.timeline-h span, .timeline-h .tl-caption{ display:block; font-size:11.5px; color:var(--ink-soft); margin:0; }

.cards-3, .cards-3 > .wp-block-group__inner-container, .cards-3 > .e-con-inner{ display:grid !important; grid-template-columns:repeat(3,1fr); gap:20px !important; margin:30px 0; }
/* Used where a .cards-3 grid follows another block within the same
   sec-pad section (e.g. Nursing in Germany's "Program Structure" cards,
   directly under the split/text block above) and needs more breathing
   room than the default 30px top margin. */
.cards-3-spaced{ margin-top:70px !important; }
.info-card{ background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-md) !important; padding:26px !important; }
.info-card svg{ width:26px; height:26px; stroke:var(--terracotta-dark); margin-bottom:14px; }
.info-card h4{ font-size:15.5px; color:var(--pine-900); margin-bottom:6px !important; }
.info-card p{ font-size:13.5px; margin:0 !important; }
.info-card.on-dark{ background:rgba(255,255,255,.05); border-color:rgba(255,255,255,.12); }
.info-card.on-dark svg{ stroke:var(--gold-soft); }
.info-card.on-dark h4{ color:#fff; }
.info-card.on-dark p{ color:#B7C7BE; }

.value-grid, .value-grid > .wp-block-group__inner-container, .value-grid > .e-con-inner{ display:grid !important; grid-template-columns:repeat(2,1fr); gap:20px !important; counter-reset:otr-val; }
.value-item{ counter-increment:otr-val; }
.value-item, .value-item > .wp-block-group__inner-container{ display:flex; gap:16px; }
.value-item::before{ content:counter(otr-val, decimal-leading-zero) !important; position:static !important; font-family:'Fraunces',serif; font-size:30px; color:var(--terracotta); flex:none; }
.value-item h4{ font-size:15.5px; color:var(--pine-900); margin-bottom:5px !important; }
.value-item p{ font-size:13.5px; margin:0 !important; }

.team-photo-row{ display:grid; grid-template-columns:repeat(4,1fr); gap:16px; }
.team-photo-row img{ border-radius:var(--radius-md) !important; aspect-ratio:4/5; object-fit:cover; }

/* Contact page */
.contact-grid{ display:grid; grid-template-columns:1fr 1fr; gap:50px; }
.contact-card{ background:var(--paper); border-radius:var(--radius-lg); padding:44px; box-shadow:var(--shadow-md); border:1px solid var(--line); }
.contact-card h3{ font-size:22px; color:var(--pine-900); margin-bottom:4px !important; }
.contact-card .sub{ font-size:13.5px; margin-bottom:24px !important; }
.contact-card .btn{ width:100%; margin-top:6px; }
.contact-info-list{ display:flex; flex-direction:column; gap:24px; }
.contact-info-item{ display:flex; gap:16px; }
.contact-info-item .ic{ width:48px; height:48px; border-radius:12px; background:var(--ivory-deep); display:flex; align-items:center; justify-content:center; flex:none; }
.contact-info-item .ic svg{ width:21px; height:21px; stroke:var(--pine-700); }
.contact-info-item b{ display:block; font-size:14.5px; color:var(--pine-900); }
.contact-info-item span{ font-size:13.5px; color:var(--ink-soft); }
.map-frame{ margin-top:30px; border-radius:var(--radius-md); overflow:hidden; height:220px; background:var(--ivory-deep); display:flex; align-items:center; justify-content:center; }
.map-frame iframe{ width:100%; height:100%; border:0; }

.faq-list{ max-width:760px; margin:0 auto; }
.faq-item{ border-bottom:1px solid var(--line); padding:20px 0; cursor:pointer; }
.faq-item summary{ font-weight:700; font-size:15px; color:var(--pine-900); list-style:none; display:flex; justify-content:space-between; align-items:center; }
.faq-item summary::-webkit-details-marker{ display:none; }
.faq-item summary svg{ width:16px; height:16px; stroke:var(--terracotta); transition:transform .2s; flex:none; }
.faq-item[open] summary svg{ transform:rotate(45deg); }
.faq-item p{ margin-top:12px; font-size:14px; }

/* Blog single + comments + widgets */
.single-post-hero{ background:var(--pine-900); color:#fff; padding:170px 0 60px; }
.single-post-hero .meta{ color:#C6D4CC; font-size:13px; margin-bottom:14px; }
.single-post-hero h1{ color:#fff; max-width:800px; }
.post-content{ max-width:760px; margin:0 auto; }
.post-content img{ border-radius:var(--radius-md); margin:1.4em 0; }
.post-content h2{ color:var(--pine-900); font-size:1.7rem; margin-top:1.4em; }
.post-content h3{ color:var(--pine-900); font-size:1.3rem; margin-top:1.2em; }
.post-content blockquote{ border-left:4px solid var(--terracotta); background:var(--ivory-deep); padding:18px 24px; border-radius:0 var(--radius-sm) var(--radius-sm) 0; font-style:italic; margin:1.6em 0; }
.post-content a{ color:var(--terracotta-dark); text-decoration:underline; }
.post-tags{ display:flex; gap:10px; flex-wrap:wrap; margin-top:40px; }
.post-tags a{ background:var(--ivory-deep); padding:7px 14px; border-radius:100px; font-size:12.5px; font-weight:700; color:var(--pine-800); }
.comments-area{ max-width:760px; margin:50px auto 0; }
.comment-list{ list-style:none; margin:0 0 30px; padding:0; }
.comment-list .comment{ border-bottom:1px solid var(--line); padding:22px 0; }
.comment-author{ font-weight:700; color:var(--pine-900); font-size:14.5px; }
.comment-meta{ font-size:12px; color:var(--ink-soft); margin-bottom:8px; }
.comment-form input, .comment-form textarea{
  width:100%; padding:13px 15px; border-radius:10px; border:1.5px solid var(--line);
  font-family:'Manrope',sans-serif; font-size:14.5px; background:var(--ivory); margin-bottom:14px;
}
.widget-sidebar{ display:flex; flex-direction:column; gap:30px; }
.widget-box{ background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-md); padding:28px; }
.widget-box h4{ font-size:15px; color:var(--pine-900); margin-bottom:16px !important; }
.widget-box ul li{ margin-bottom:12px; font-size:14px; }
.widget-box ul li a:hover{ color:var(--terracotta-dark); }
.blog-layout{ display:grid; grid-template-columns:2.2fr 1fr; gap:50px; align-items:start; }

.error-404-wrap{ text-align:center; padding:180px 0 120px; }
.error-404-wrap .code{ font-family:'Fraunces',serif; font-size:120px; color:var(--pine-900); line-height:1; }

/* ===== Reveal-on-scroll ===== */
.reveal{ opacity:0; transform:translateY(24px); transition:opacity .7s ease, transform .7s ease; }
.reveal.in{ opacity:1; transform:translateY(0); }
/* No scroll-driven JS runs inside the block editor, so keep reveal blocks visible there. */
.editor-styles-wrapper .reveal{ opacity:1; transform:none; }
/* Same problem, Elementor's editor: main.js's IntersectionObserver never
   fires reliably inside Elementor's preview iframe (its own scroll
   container/re-parenting behavior doesn't trigger it the way a normal page
   scroll does), so .reveal elements were stuck at their initial opacity:0
   — invisible, and therefore unclickable/unselectable — every time a
   client opened Elementor to edit a section using this animation (i.e.
   nearly everywhere on the site). Elementor adds elementor-editor-active
   to <body> while editing; force full visibility there too. */
body.elementor-editor-active .reveal{ opacity:1 !important; transform:none !important; }

/* ===== Responsive ===== */
@media (max-width:1024px){
  .why-grid, .why-grid > .wp-block-group__inner-container, .why-grid > .e-con-inner{ grid-template-columns:repeat(2,1fr) !important; }
  .steps, .steps > .wp-block-group__inner-container, .steps > .e-con-inner{ grid-template-columns:repeat(3,1fr) !important; }
  .step::after{ display:none; }
  .hero .container, .hero .container > .wp-block-group__inner-container, .hero .container > .e-con-inner{ grid-template-columns:1fr !important; }
  .enquiry-card{ max-width:460px; }
  .split, .split > .e-con-inner{ grid-template-columns:1fr !important; gap:40px; }
  .split.reverse{ direction:ltr; }
  .story-grid{ grid-template-columns:1fr; }
  .story-media{ min-height:280px; }
  .footer-grid{ grid-template-columns:1fr 1fr; }
  .two-col-cta, .two-col-cta > .e-con-inner{ grid-template-columns:1fr !important; }
  .cards-3, .cards-3 > .wp-block-group__inner-container, .cards-3 > .e-con-inner{ grid-template-columns:1fr 1fr !important; }
  .team-photo-row{ grid-template-columns:repeat(2,1fr); }
  .blog-layout{ grid-template-columns:1fr; }
}
@media (max-width:760px){
  .video-card{ width:200px; }
  .topbar .topbar-items span:not(:first-child){ display:none; }
  .topbar .topbar-items span:first-child{ flex:1 1 auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .topbar-right{ gap:12px; }
  .main-nav{ display:none; }
  .nav-phone{ display:none; }
  .burger{ display:block; z-index:110; }
  .burger.active{ position:fixed; top:30px; right:32px; z-index:210; }
  .burger.active span{ background:#fff; }
  .burger.active span:nth-child(1){ transform:translateY(9px) rotate(45deg); }
  .burger.active span:nth-child(2){ opacity:0; }
  .burger.active span:nth-child(3){ transform:translateY(-9px) rotate(-45deg); }
  .main-nav.mobile-open{
    display:flex; flex-direction:column; position:fixed;
    top:0; right:0; bottom:0; left:0;
    background:var(--pine-900); padding:110px 32px 40px; z-index:105; gap:4px;
    overflow-y:auto;
  }
  .main-nav.mobile-open > li{ width:100%; border-bottom:1px solid rgba(255,255,255,.1); }
  .main-nav.mobile-open > li > a{ color:#fff; padding:18px 4px; font-size:17px; justify-content:space-between; }
  .main-nav.mobile-open .dropdown, .main-nav.mobile-open .sub-menu{
    position:static; opacity:1; visibility:visible; transform:none; box-shadow:none;
    background:transparent; border:none; padding:0 0 12px 12px; display:none;
  }
  .main-nav.mobile-open li.dd-open .dropdown, .main-nav.mobile-open li.dd-open .sub-menu{ display:block; }
  .main-nav.mobile-open .dropdown a, .main-nav.mobile-open .sub-menu a{ color:#C6D4CC; padding:10px 4px; }
  .main-nav.mobile-open .dropdown a span{ color:#8FA79B; }
  .why-grid, .why-grid > .wp-block-group__inner-container, .why-grid > .e-con-inner{ grid-template-columns:1fr !important; }
  .steps, .steps > .wp-block-group__inner-container, .steps > .e-con-inner{ grid-template-columns:1fr 1fr !important; }
  .partner-gallery{ grid-template-columns:1fr !important; grid-template-rows:auto !important; height:auto !important; }
  .partner-gallery .big{ grid-row:auto !important; height:260px; }
  .partner-gallery .big img{ height:260px; }
  .partner-gallery figure:not(.big) img{ height:180px; }
  .blog-grid, .contact-grid, .blog-listing,
  .value-grid, .value-grid > .wp-block-group__inner-container, .value-grid > .e-con-inner,
  .cards-3, .cards-3 > .wp-block-group__inner-container, .cards-3 > .e-con-inner{ grid-template-columns:1fr !important; }
  .footer-grid{ grid-template-columns:1fr; }
  .footer-bottom{ flex-direction:column; text-align:center; }
  .hero-stats, .hero-stats > .wp-block-group__inner-container, .hero-stats > .e-con-inner{ gap:22px !important; }
  .mobile-sticky-cta{
    display:flex; position:fixed; bottom:0; left:0; right:0; z-index:199;
    background:var(--paper); padding:12px 16px; box-shadow:0 -8px 24px rgba(0,0,0,.08);
    gap:10px;
  }
  .mobile-sticky-cta .btn{ flex:1; padding:14px 8px; font-size:13.5px; white-space:nowrap; }
  .whatsapp-float{ bottom:90px; width:50px; height:50px; }
  .whatsapp-float svg{ width:24px; height:24px; }
  body{ padding-bottom:78px; }
  .sec-pad{ padding:64px 0 !important; }
  .story-body{ padding:34px 26px; }
}
