/* =============================================================================
   Chiratae — presentation refinement layer
   -----------------------------------------------------------------------------
   Scope (deliberate):
     CHANGES  font-size / weight / tracking / leading, spacing, rhythm, layout,
              alignment, image framing (object-fit + crop), elevation, motion.
     CHANGES  NOTHING about font-family, colour, text content, or image assets.
   Loaded after the theme so it wins without editing any original file.
   ============================================================================= */

/* ---------------------------------------------------------------- 0. base -- */
html{
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  scroll-behavior:smooth;
}
body{ letter-spacing:.005em; }

/* consistent, quieter scrollbar */
::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-thumb{background:rgba(0,0,0,.22);border-radius:8px;border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.38);background-clip:content-box}

/* ------------------------------------------------------- 1. type hierarchy -- */
/* The theme ships h1 at 300 weight / h2 collapsed to 18px, so hierarchy reads
   flat. Rebuild the scale using size + weight + tracking only.               */

h1, .elementor-widget-heading h1.elementor-heading-title{
  font-size:clamp(2.9rem,5.6vw,5.1rem) !important;
  line-height:1.06 !important;
  letter-spacing:-.022em !important;
  text-wrap:balance;
  margin-bottom:.18em !important;
}
/* NOTE: this theme uses h2/h3 for CARD titles too (team member names, post
   titles). Applying the display scale to every h2 blows those up — a member name
   rendered at 48px inside a 280px card. Restrict it to section-level headings so
   the theme's own card sizing survives. */
h2:not(.elementor-tab-content *):not(.paoc-image-popup *):not(.overlaypoupup *):not(.elementor-inner-section *):not(.elementor-post *):not(.swiper-slide *):not(.qodef-e *):not(.elementor-widget-image-box *){
  font-size:clamp(1.85rem,3.5vw,3rem) !important;
  line-height:1.14 !important;
  letter-spacing:-.018em !important;
  text-wrap:balance;
}
h3:not(.elementor-tab-content *):not(.paoc-image-popup *):not(.overlaypoupup *):not(.elementor-inner-section *):not(.elementor-post *):not(.swiper-slide *):not(.qodef-e *):not(.elementor-widget-image-box *){
  font-size:clamp(1.3rem,2vw,1.85rem) !important;
  line-height:1.24 !important;
  letter-spacing:-.012em !important;
}
h4:not(.elementor-tab-content *):not(.paoc-image-popup *):not(.overlaypoupup *):not(.elementor-inner-section *):not(.elementor-post *):not(.swiper-slide *):not(.qodef-e *):not(.elementor-widget-image-box *){ font-size:clamp(1.08rem,1.4vw,1.3rem) !important; line-height:1.32 !important; }
h5,h6{ line-height:1.36 !important; letter-spacing:.02em !important; }

/* keep the announcement strip and nav out of the display scale */
header#masthead h1,header#masthead h2,header#masthead h3,header#masthead h4,
header h2, .ea11y-widget h2{
  font-size:inherit !important; line-height:inherit !important; letter-spacing:normal !important;
}

/* body copy: comfortable measure + leading */
p, .elementor-widget-text-editor, .elementor-text-editor{
  line-height:1.72 !important;
  letter-spacing:.004em;
}
.elementor-widget-text-editor p:last-child{ margin-bottom:0 }

/* small caps / eyebrow labels read better with tracking */
.elementor-widget-heading h5.elementor-heading-title,
.elementor-widget-heading h6.elementor-heading-title{
  letter-spacing:.16em !important;
  text-transform:uppercase;
  font-size:.78rem !important;
}

/* ----------------------------------------------------- 2. vertical rhythm -- */
/* Arbitrary spacer widgets are the main source of erratic gaps — clamp them. */
.elementor-widget-spacer .elementor-spacer-inner{
  height:clamp(12px,1.8vw,32px) !important;
}

/* a consistent section scale, without touching header/footer chrome */
.elementor-location-single .elementor-top-section,
.elementor-location-archive .elementor-top-section,
main .elementor-top-section,
.elementor-top-section{
  padding-top:clamp(24px,2.6vw,48px) !important;
  padding-bottom:clamp(24px,2.6vw,48px) !important;
}
/* heading-only sections collapse bottom padding so heading kisses content */
.elementor-top-section:has(> .elementor-container > .elementor-column
   > .elementor-widget-wrap > .elementor-widget-heading:only-child){
  padding-bottom:clamp(8px,.8vw,14px) !important;
}
header#masthead .elementor-top-section,
footer .elementor-top-section{
  padding-top:0 !important; padding-bottom:0 !important;
}
/* hero: generous top, tighter bottom */
.elementor-top-section:has(h1){
  padding-top:clamp(40px,5vw,80px) !important;
  padding-bottom:clamp(20px,2.2vw,38px) !important;
}

/* tighten widget stacking */
.elementor-widget:not(:last-child){ margin-bottom:10px }

/* --------------------------------------------------------------- 3. header -- */
header#masthead, body > header{
  position:sticky !important; top:0 !important; z-index:999 !important;
  backdrop-filter:saturate(180%) blur(12px);
  -webkit-backdrop-filter:saturate(180%) blur(12px);
  box-shadow:0 1px 0 rgba(0,0,0,.06);
  transition:box-shadow .3s ease;
}
header#masthead:hover{ box-shadow:0 4px 22px rgba(0,0,0,.07) }
/* give the bar breathing room and the logo a touch more presence */
header#masthead .elementor-top-section > .elementor-container{
  min-height:78px !important; align-items:center;
}
header#masthead .elementor-widget-image img{
  height:46px !important; width:auto !important; transition:opacity .25s ease;
}
header#masthead .elementor-widget-image img:hover{ opacity:.78 }

/* nav links: spacing, weight, and an underline affordance */
.elementor-nav-menu .elementor-item,
.elementor-navigation-menu .elementor-item{
  font-size:.875rem !important;
  font-weight:500 !important;
  letter-spacing:.012em !important;
  padding:10px 2px !important;
  margin-inline:clamp(7px,.85vw,15px);
  position:relative;
}
.elementor-nav-menu .elementor-item::after,
.elementor-navigation-menu .elementor-item::after{
  content:""; position:absolute; left:0; right:100%; bottom:4px; height:1.5px;
  background:currentColor; opacity:.85;
  transition:right .32s cubic-bezier(.22,.61,.36,1);
}
.elementor-nav-menu .elementor-item:hover::after,
.elementor-nav-menu .elementor-item.elementor-item-active::after{ right:0 }

/* ----------------------------------------------------------------- 4. hero -- */
.elementor-top-section:has(h1) .elementor-widget-heading{ max-width:min(1100px,92vw); margin-inline:auto }
.elementor-top-section:has(h1) .elementor-heading-title{ text-wrap:balance }

/* --------------------------------------------------------------- 5. images -- */
/* Never swap an asset — only frame it consistently. */
.elementor-widget-image img,
.elementor-image img,
.qodef-e-inner-holder img,
.qodef-e-inner img,
.swiper-slide img{
  border-radius:10px;
  transition:transform .55s cubic-bezier(.22,.61,.36,1), box-shadow .35s ease;
  will-change:transform;
}
/* logos and icons must stay square-edged and uncropped */
header#masthead img,
footer img,
img[src*="logo"], img[src*="Logo"], img[src*="icon"], img[src*="favicon"]{
  border-radius:0 !important; object-fit:contain !important; box-shadow:none !important;
}

/* portrait / card imagery: consistent crop + gentle lift */
/* The slider sizes its own slides via JS — don't impose a ratio on it, that
   collapses the layout. Just round the corners and keep the crop centred. */
.qodef-qi-image-slider .qodef-e-inner-holder{
  overflow:hidden;
  border-radius:10px;
}
.qodef-qi-image-slider .qodef-e-inner-holder img{
  object-fit:cover;
  object-position:center top;
}
/* image-box media does have a fixed box, so a consistent ratio is safe there */
.elementor-widget-image-box .elementor-image-box-img{
  overflow:hidden;
  border-radius:10px;
}
.elementor-widget-image-box .elementor-image-box-img img{
  width:100%;
  object-fit:cover;
}
.swiper-slide:hover img,
.elementor-widget-image-box:hover img{
  transform:scale(1.035);
  box-shadow:0 18px 44px rgba(0,0,0,.16);
}

/* ---------------------------------------------------------------- 6. cards -- */
.elementor-widget-image-box,
.qodef-e-inner,
.elementor-post,
article.elementor-post{
  border-radius:12px;
  overflow:hidden;
  transition:transform .38s cubic-bezier(.22,.61,.36,1), box-shadow .38s ease;
}
.elementor-widget-image-box:hover,
.elementor-post:hover,
article.elementor-post:hover{
  transform:translateY(-5px);
  box-shadow:0 20px 48px rgba(0,0,0,.13);
}
.elementor-post__title{ line-height:1.34 !important; letter-spacing:-.008em }
.elementor-post__excerpt p{ line-height:1.68 !important }

/* -------------------------------------------------------- 7. buttons/links -- */
.elementor-button,
.qodef-qi-button,
.qodef-button{
  border-radius:999px !important;
  padding-block:15px !important;
  padding-inline:34px !important;
  font-weight:600 !important;
  letter-spacing:.045em !important;
  font-size:.83rem !important;
  transition:transform .28s cubic-bezier(.22,.61,.36,1), box-shadow .28s ease, opacity .22s ease;
}
.elementor-button:hover,
.qodef-qi-button:hover,
.qodef-button:hover{
  transform:translateY(-2px);
  box-shadow:0 12px 26px rgba(0,0,0,.15);
}
a{ transition:opacity .22s ease }

/* --------------------------------------------------------------- 8. slider -- */
.swiper-slide{ height:auto }
.swiper-wrapper{ align-items:stretch }
.swiper-pagination-bullet{ transition:transform .25s ease }
.swiper-pagination-bullet-active{ transform:scale(1.35) }

/* ------------------------------------------------------------- 9. sections -- */
/* keep long prose readable rather than full-bleed */
.elementor-widget-text-editor{ max-width:74ch }
.elementor-widget-text-editor.elementor-align-center,
.elementor-align-center .elementor-widget-text-editor{ margin-inline:auto }

/* dividers and separators sit closer to the content they divide */
.elementor-widget-divider{ margin-block:clamp(14px,2vw,28px) }

/* --------------------------------------------------------------- 10. forms -- */
/* inert, but they should still look considered */
.wpcf7 input[type=text],.wpcf7 input[type=email],.wpcf7 input[type=tel],
.wpcf7 textarea,.wpcf7 select{
  border-radius:8px !important;
  padding:13px 15px !important;
  font-size:.94rem !important;
  transition:box-shadow .25s ease, border-color .25s ease;
}
.wpcf7 input:focus,.wpcf7 textarea:focus{
  outline:none !important;
  box-shadow:0 0 0 3px rgba(0,0,0,.09) !important;
}
.wpcf7 input[type=submit]{
  border-radius:999px !important;
  padding:14px 34px !important;
  letter-spacing:.045em !important;
  font-weight:600 !important;
}

/* ---------------------------------------------------------- 11. responsive -- */
@media (max-width:1024px){
  .elementor-top-section{ padding-top:clamp(30px,5vw,52px) !important; padding-bottom:clamp(30px,5vw,52px) !important }
  header#masthead .elementor-top-section > .elementor-container{ min-height:66px !important }
}
@media (max-width:640px){
  h1,.elementor-widget-heading h1.elementor-heading-title{ font-size:clamp(2.1rem,8.5vw,2.9rem) !important }
  h2,.elementor-widget-heading h2.elementor-heading-title{ font-size:clamp(1.5rem,6.2vw,2rem) !important }
  .elementor-widget-text-editor{ max-width:none }
  .elementor-button,.qodef-qi-button{ padding-inline:26px !important }
}
@media (prefers-reduced-motion:reduce){
  *{ animation-duration:.01ms !important; transition-duration:.01ms !important; scroll-behavior:auto !important }
}

/* ------------------------------------------------- 12. pre-existing defects -- */
/* A decorative SVG on /about-us/ ships at a hard-coded 1520px and pushes the
   page 250px wider than the viewport. Contain it and let it scale.           */
.line-container{ max-width:100% !important; overflow:hidden }
.line-container > div,
.line-container svg{ max-width:100% !important; height:auto }

/* belt-and-braces: nothing decorative should be able to widen the document */
html,body{ overflow-x:hidden }


/* -------------------------------------------------- 13. team & popup cards -- */
/* Member photos ship at differing intrinsic widths (280 / 301 / 310), so the
   grid reads ragged. Normalise the frame; the asset itself is untouched. */
.elementor-tab-content .paoc-image-popup img,
.elementor-tab-content .popupaoc-img,
.paoc-image-popup img.popupaoc-img{
  width:100% !important;
  height:auto !important;
  aspect-ratio:520/608;
  object-fit:cover !important;
  object-position:center top;
  border-radius:10px;
  display:block;
}
.elementor-tab-content .paoc-image-popup,
.elementor-tab-content .overlaypoupup{ width:100% }
.elementor-tab-content .paoc-popup-click{ display:block; width:100% }

/* even out the name/role block under each portrait */
.elementor-tab-content .elementor-inner-section{ margin-top:12px }
.elementor-tab-content .elementor-widget-heading .elementor-heading-title{
  line-height:1.28 !important;
  letter-spacing:.01em !important;
}

/* tab bar: give the switcher some presence */
.elementor-tabs .elementor-tab-title{
  letter-spacing:.09em !important;
  font-size:.76rem !important;
  padding-block:15px !important;
  transition:background-color .25s ease, opacity .25s ease;
}
.elementor-tabs .elementor-tab-content{ padding-top:clamp(26px,3vw,48px) !important }

/* =============================================================================
   14. REFINEMENT PASS — spacing, type scale, alignment, elevation, motion
   Still no font-family, no colour, no text, no image swaps.
   ============================================================================= */

/* ---- 14.1 body copy -------------------------------------------------------
   The theme ships body text at 13px / weight 300, which reads thin and small at
   desktop widths. Nudge size + weight for legibility; family is untouched.     */
body,
.elementor-widget-text-editor,
.elementor-widget-text-editor p,
.elementor-text-editor p,
.elementor-widget-theme-post-content p{
  font-size:clamp(15.5px,1.08vw,16px) !important;
  font-weight:400 !important;
  line-height:1.75 !important;
}
.elementor-widget-text-editor li,
.elementor-widget-theme-post-content li{
  font-size:clamp(15.5px,1.08vw,16px) !important;
  line-height:1.72 !important;
  margin-bottom:.45em;
}

/* ---- 14.2 alignment: one shared measure ----------------------------------
   Boxed containers currently resolve to 1300 / 1140 / 1120px, so successive
   sections don't line up. Pin the boxed variant to a single grid.             */
.elementor-section-boxed > .elementor-container{
  max-width:1280px !important;
  margin-inline:auto !important;
  padding-inline:clamp(20px,3vw,40px);
}
/* full-bleed sections keep their width but gain matching side gutters */
.elementor-section-full_width > .elementor-container{ padding-inline:clamp(20px,3vw,40px) }

/* ---- 14.3 grid gaps -------------------------------------------------------- */
.elementor-tab-content .elementor-container,
.elementor-widget-image-gallery .gallery{
  row-gap:clamp(28px,3vw,48px);
}
.elementor-column-gap-default > .elementor-column > .elementor-element-populated{
  padding:clamp(8px,.8vw,14px);
}

/* ---- 14.4 elevation -------------------------------------------------------
   Two-layer shadows (tight contact + soft ambient) read cleaner than one.      */
:root{
  --cv-sh-1:0 1px 2px rgba(0,0,0,.055), 0 4px 12px rgba(0,0,0,.055);
  --cv-sh-2:0 2px 6px rgba(0,0,0,.07),  0 14px 34px rgba(0,0,0,.10);
  --cv-sh-3:0 4px 10px rgba(0,0,0,.08), 0 24px 56px rgba(0,0,0,.14);
}
.qodef-qi-image-slider .qodef-e-inner-holder,
.elementor-tab-content .paoc-image-popup img,
.elementor-widget-image-box,
.elementor-post,
article.elementor-post{
  box-shadow:var(--cv-sh-1);
  transition:box-shadow .4s cubic-bezier(.22,.61,.36,1),
             transform .4s cubic-bezier(.22,.61,.36,1);
}
.qodef-qi-image-slider .qodef-e-inner-holder:hover,
.elementor-tab-content .paoc-image-popup:hover img,
.elementor-widget-image-box:hover,
.elementor-post:hover{
  box-shadow:var(--cv-sh-3);
  transform:translateY(-4px);
}
/* programme / feature imagery */
.elementor-widget-image img{ box-shadow:var(--cv-sh-1) }
.elementor-widget-image a:hover img,
.elementor-widget-image img:hover{ box-shadow:var(--cv-sh-2) }
/* never shadow a logo or icon */
header#masthead img, footer img,
img[src*="logo"], img[src*="Logo"], img[src*="icon"]{ box-shadow:none !important }

.elementor-tabs .elementor-tab-title.elementor-active{ box-shadow:var(--cv-sh-1) }

/* ---- 14.5 CTAs ------------------------------------------------------------
   The hero CTA is a plain anchor, not .elementor-button, so it missed the
   earlier button rules. Give underline-style links a real target area.         */
.qodef-qi-button, .elementor-button,
a.qodef-shortcode.qodef-m.qodef-qi-button{
  box-shadow:var(--cv-sh-1);
}
.qodef-qi-button:hover, .elementor-button:hover{ box-shadow:var(--cv-sh-2) }
.qodef-m-text{ letter-spacing:.14em !important; font-weight:600 !important }

/* ---- 14.6 entry animation -------------------------------------------------
   IMPORTANT: the hidden state is applied ONLY under html.cv-anim, which the
   script adds at runtime. With no JS (or if the script throws) nothing is ever
   hidden — the failure mode that left this mirror's sections invisible.        */
html.cv-anim .cv-r{
  opacity:0;
  transform:translateY(26px);
  will-change:opacity, transform;
}
html.cv-anim .cv-r.cv-in{
  opacity:1;
  transform:none;
  transition:opacity 1.05s cubic-bezier(.16,1,.3,1),
             transform 1.05s cubic-bezier(.16,1,.3,1);
  transition-delay:var(--cv-d,0ms);
}
@media (prefers-reduced-motion:reduce){
  html.cv-anim .cv-r{ opacity:1 !important; transform:none !important }
  html.cv-anim .cv-r.cv-in{ transition:none !important }
}
/* Swiper clones slides on the fly for its infinite-loop illusion (class
   "swiper-slide-duplicate"), creating new instances well after this page's
   one-time JS scan already ran -- confirmed live: the stranded count on the
   homepage carousel grew over time (24 -> 27 across two checks 8s apart),
   meaning Swiper keeps minting fresh duplicates our JS never sees, so no
   timing fix in JS can keep up. A duplicate is a loop-buffer copy, not
   content of its own; it should simply always be visible, independent of
   whichever reveal class it happens to carry. CSS-only, no JS dependency. */
html.cv-anim .swiper-slide-duplicate.cv-r{ opacity:1 !important; transform:none !important }

/* =============================================================================
   15. COMPANIES SEARCH — pairs with the existing category-tab filter
   The tab filter already works natively (Bootstrap tab-panes). This layers a
   text search across ALL panes on top of it, deduplicating companies that
   appear in more than one category. No new colour introduced beyond the
   existing --red / neutral tokens already used sitewide.
   ============================================================================= */
.cv-search-wrap{ margin-bottom:22px }
.cv-search-input{
  width:100%; box-sizing:border-box;
  padding:13px 16px; font-size:.92rem; font-family:var(--font-body, inherit);
  border:1px solid rgba(0,0,0,.14); border-radius:8px;
  background:#fff; color:#17181c;
  transition:border-color .2s ease, box-shadow .2s ease;
}
.cv-search-input:focus{
  outline:none; border-color:#B0232F;
  box-shadow:0 0 0 3px rgba(176,35,47,.12);
}
.cv-search-input::placeholder{ color:#8a8d93 }
.cv-search-empty{
  margin:16px 2px 0; font-size:.88rem; color:#5b5f68; display:none;
}
.cv-search-empty:not([hidden]){ display:block }

/* while searching, every category pane must be able to show its matches,
   not just the one Bootstrap currently marks .active */
body.cv-searching .tab-pane{ display:block !important }
body.cv-searching .tab-pane.cv-pane-empty{ display:none !important }
body.cv-searching .card-item.cv-hide{ display:none !important }
/* the tab bar itself is not meaningful mid-search; de-emphasise it rather
   than hide it outright, so clicking a tab still exits search cleanly */
body.cv-searching .nav-tab-grid{ opacity:.45; pointer-events:none }

/* =============================================================================
   16. COMPANIES CARD GRID — was shipping with zero gap, zero padding, zero
   radius, zero shadow on every card (confirmed via computed styles: grid gap
   "normal", card/card-body/card-item padding all 0px). Cards were touching
   edge-to-edge. This gives the grid the same card language used elsewhere
   on the site (10px radius, two-layer shadow, hover lift) without touching
   any logo image or company data.
   ============================================================================= */
.card-grid{
  gap:clamp(18px,1.8vw,28px) !important;
}
/* the theme sizes columns with PERCENTAGE minmax (e.g. minmax(0,33.33%)),
   which does not subtract gap correctly -- adding gap silently dropped the
   grid from 3 columns to 2. Override with 1fr tracks at the same
   breakpoints; 1fr correctly divides the space gap leaves behind. */
@media (min-width:1200px){
  .card-grid{ grid-template-columns:repeat(3,1fr) !important; }
}
@media only screen and (min-width:768px) and (max-width:1199.98px){
  .card-grid{ grid-template-columns:repeat(2,1fr) !important; }
}
.card-item{ min-width:0 }
.card-item .card{
  background:#fff;
  border:1px solid rgba(0,0,0,.08);
  border-radius:12px;
  overflow:hidden;
  box-shadow:var(--cv-sh-1, 0 1px 2px rgba(0,0,0,.055), 0 4px 12px rgba(0,0,0,.055));
  transition:box-shadow .4s cubic-bezier(.22,.61,.36,1),
             transform .4s cubic-bezier(.22,.61,.36,1),
             border-color .4s ease;
  cursor:pointer;
}
.card-item .card,
.card[data-card-id]{ border-radius:12px !important; overflow:hidden !important; }
.card-item .card:hover{
  box-shadow:var(--cv-sh-3, 0 4px 10px rgba(0,0,0,.08), 0 24px 56px rgba(0,0,0,.14));
  transform:translateY(-4px);
  border-color:transparent;
}
.card-item .card-body{
  padding:28px 26px !important;
  display:flex; align-items:center; justify-content:center;
}
.card-item .card-logo{ width:100%; display:flex; align-items:center; justify-content:center }
.card-item .card-logo img{
  max-width:100%; max-height:64px; width:auto; height:auto;
  object-fit:contain;
}
/* the expanded "view details" panel — same card language, more breathing room */
.company-tag-item{
  display:inline-flex; align-items:center;
  padding:7px 15px !important; border-radius:999px !important;
  font-size:.78rem !important; letter-spacing:.03em;
}

/* =============================================================================
   17. ELEMENTOR COLUMN GAP — sitewide root-cause fix
   WP Rocket's per-page "used CSS" optimisation inconsistently kept or
   stripped the rule that gives Elementor's column-gap classes their actual
   spacing (a padding on the inner .elementor-element-populated wrapper, not
   a `gap` property). Present on some pages (home, companies, about-us),
   completely absent on others (team, reports, and likely more) -- confirmed
   by direct measurement: adjacent team-member cards sat at 0px apart despite
   both carrying `elementor-column-gap-default`. This restores Elementor's
   own standard preset values everywhere, matching the exact value (10px)
   recovered from the pages where the rule survived, so the fix is
   idempotent on pages that already had it and corrective on the ones that
   didn't -- same result site-wide regardless of what any one page's
   optimiser happened to keep.
   ============================================================================= */
.elementor-column-gap-no > .elementor-column > .elementor-element-populated{ padding:0 !important; }
.elementor-column-gap-narrow > .elementor-column > .elementor-element-populated{ padding:5px !important; }
.elementor-column-gap-default > .elementor-column > .elementor-element-populated{ padding:10px !important; }
.elementor-column-gap-wide > .elementor-column > .elementor-element-populated{ padding:15px !important; }
.elementor-column-gap-wider > .elementor-column > .elementor-element-populated{ padding:20px !important; }
.elementor-column-gap-extended > .elementor-column > .elementor-element-populated{ padding:25px !important; }

/* =============================================================================
   18. HERO TYPE SCALE — SharpLink-calibrated
   SharpLink ships h1 at 88px / −2.64px tracking / 0.96 line-height.
   We push Chiratae's clamp ceiling closer to that benchmark while keeping
   the fluid clamp for smaller viewports.
   ============================================================================= */
h1,
.elementor-widget-heading h1.elementor-heading-title{
  font-size:clamp(3rem, 6.5vw, 6.2rem) !important;
  line-height:.97 !important;
  letter-spacing:-.03em !important;
}
@media (max-width:640px){
  h1,
  .elementor-widget-heading h1.elementor-heading-title{
    font-size:clamp(2.4rem, 9.5vw, 3.4rem) !important;
    letter-spacing:-.022em !important;
  }
}

/* Eyebrow / mono labels — Archivo Narrow style: uppercase, tight condensed mono */
.elementor-widget-heading h5.elementor-heading-title,
.elementor-widget-heading h6.elementor-heading-title,
.cv-label, .cv-mono{
  letter-spacing:.13em !important;
  text-transform:uppercase !important;
  font-size:.72rem !important;
  font-weight:600 !important;
  line-height:1.4 !important;
  opacity:.72;
}

/* =============================================================================
   19. ANIMATED VERTICAL ACCENT LINE — Peak XV inspired
   Injected by _enhance.js as #cv-vline. A thin left-edge line running full
   page height with a rotating diamond icon that trails the scroll position.
   ============================================================================= */
#cv-vline{
  position:fixed;
  left:clamp(10px,1.4vw,22px);
  top:0;
  bottom:0;
  width:1px;
  background:linear-gradient(to bottom,
    transparent 0%,
    rgba(176,35,47,.18) 8%,
    rgba(176,35,47,.18) 92%,
    transparent 100%
  );
  z-index:888;
  pointer-events:none;
}
#cv-vline-diamond{
  position:absolute;
  left:50%;
  transform:translateX(-50%) rotate(45deg);
  width:7px;
  height:7px;
  background:#B0232F;
  transition:top .08s linear;
  border-radius:1px;
}
@media (max-width:767px){ #cv-vline{ display:none } }

/* =============================================================================
   20. CORNER PIN SYSTEM — SharpLink's has-pin pattern
   6×6px accent squares positioned at card corners. Added automatically by
   _enhance.js to .elementor-widget-image-box and .elementor-post cards.
   ============================================================================= */
.cv-pin{
  position:relative;
}
.cv-pin::before,
.cv-pin::after{
  content:"";
  position:absolute;
  width:6px;
  height:6px;
  background:#B0232F;
  z-index:4;
  pointer-events:none;
  transition:transform .32s cubic-bezier(.22,.61,.36,1), opacity .32s ease;
  opacity:0;
  border-radius:1px;
}
/* top-left + bottom-right diagonal pair */
.cv-pin::before{ top:0; left:0; }
.cv-pin::after { bottom:0; right:0; }
.cv-pin:hover::before,
.cv-pin:hover::after{
  opacity:1;
  transform:scale(1.3);
}

/* =============================================================================
   21. ARROW-TRACK HOVER — Peak XV insight card choreography
   On hovering a post / article card, an arrow "→" slides from left to right.
   Applied to .elementor-post cards via pseudo-element.
   ============================================================================= */
.elementor-post,
article.elementor-post{
  overflow:hidden;
  position:relative;
}
.cv-arrow-track{
  display:inline-flex;
  align-items:center;
  overflow:hidden;
  position:relative;
  height:1.1em;
  width:1.6em;
  vertical-align:middle;
  margin-left:.3em;
}
.cv-arrow-track::before{
  content:"→";
  position:absolute;
  left:-100%;
  transition:left .32s cubic-bezier(.22,.61,.36,1);
}
.cv-arrow-track::after{
  content:"→";
  position:absolute;
  left:0;
  transition:left .32s cubic-bezier(.22,.61,.36,1);
}
.elementor-post:hover .cv-arrow-track::before{ left:0 }
.elementor-post:hover .cv-arrow-track::after { left:100% }

/* =============================================================================
   22. BUTTON LINE-TRACK ANIMATION — SharpLink expanding underline
   A thin accent line that expands from left to right under buttons on hover.
   ============================================================================= */
.elementor-button,
.qodef-qi-button,
.qodef-button{
  position:relative;
  overflow:hidden;
}
.elementor-button::before,
.qodef-qi-button::before,
.qodef-button::before{
  content:"";
  position:absolute;
  bottom:0; left:0;
  width:0; height:2px;
  background:currentColor;
  opacity:.5;
  transition:width .38s cubic-bezier(.22,.61,.36,1);
}
.elementor-button:hover::before,
.qodef-qi-button:hover::before,
.qodef-button:hover::before{ width:100% }

/* =============================================================================
   23. TEAM PHOTO HOVER — Peak XV choreography
   Overlay slides up from bottom + image scales.
   ============================================================================= */
.elementor-tab-content .paoc-image-popup,
.elementor-tab-content .overlaypoupup{
  position:relative;
  overflow:hidden;
}
.cv-team-overlay{
  position:absolute;
  bottom:0; left:0; right:0;
  height:40%;
  background:linear-gradient(to top, rgba(0,0,0,.52) 0%, transparent 100%);
  transform:translateY(100%);
  transition:transform .42s cubic-bezier(.22,.61,.36,1),
             opacity .42s ease;
  opacity:0;
  z-index:3;
  pointer-events:none;
}
.elementor-tab-content .paoc-image-popup:hover .cv-team-overlay{
  transform:translateY(0%);
  opacity:1;
}
.elementor-tab-content .paoc-image-popup:hover img,
.elementor-tab-content .paoc-image-popup:hover .popupaoc-img{
  transform:scale(1.03) !important;
  transition:transform .55s cubic-bezier(.22,.61,.36,1) !important;
}

/* =============================================================================
   24. INFINITE MARQUEE / TICKER — Logo strip or stats strip
   Injected by _enhance.js as #cv-marquee. Pulls portfolio logos and loops
   them infinitely.
   ============================================================================= */
.cv-marquee-wrap{
  width:100%;
  overflow:hidden;
  background:rgba(0,0,0,.03);
  border-top:1px solid rgba(0,0,0,.07);
  border-bottom:1px solid rgba(0,0,0,.07);
  padding:18px 0;
  margin:0 0 0 0;
  position:relative;
}
.cv-marquee-wrap::before,
.cv-marquee-wrap::after{
  content:"";
  position:absolute;
  top:0; bottom:0; width:80px; z-index:2;
  pointer-events:none;
}
.cv-marquee-wrap::before{
  left:0;
  background:linear-gradient(to right, var(--cv-marquee-bg,#fff) 0%, transparent 100%);
}
.cv-marquee-wrap::after{
  right:0;
  background:linear-gradient(to left, var(--cv-marquee-bg,#fff) 0%, transparent 100%);
}
.cv-marquee-track{
  display:flex;
  gap:clamp(40px,5vw,80px);
  width:max-content;
  animation:cv-marquee-scroll 38s linear infinite;
}
.cv-marquee-track:hover{ animation-play-state:paused }
.cv-marquee-item{
  display:flex;
  align-items:center;
  white-space:nowrap;
  font-size:.72rem;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
  opacity:.55;
  flex-shrink:0;
  transition:opacity .25s ease;
}
.cv-marquee-item:hover{ opacity:1 }
.cv-marquee-item img{
  max-height:24px !important;
  width:auto !important;
  object-fit:contain !important;
  filter:grayscale(1);
  transition:filter .3s ease;
  border-radius:0 !important;
  box-shadow:none !important;
}
.cv-marquee-item:hover img{ filter:grayscale(0) }
@keyframes cv-marquee-scroll{
  from{ transform:translateX(0) }
  to  { transform:translateX(-50%) }
}
@media (prefers-reduced-motion:reduce){
  .cv-marquee-track{ animation:none }
}

/* =============================================================================
   25. ANIMATED COUNT-UP STATS — SharpLink / Peak XV stat sections
   .cv-stat wrappers are detected by _enhance.js. Numbers count from 0 to
   their data-target value when scrolled into view.
   ============================================================================= */
.cv-stats-row{
  display:flex;
  flex-wrap:wrap;
  gap:clamp(24px,3vw,48px);
  padding:clamp(32px,4vw,64px) 0;
  justify-content:center;
}
.cv-stat{
  text-align:center;
  flex:1 1 180px;
  max-width:240px;
}
.cv-stat-number{
  font-size:clamp(2.8rem,5.5vw,5rem) !important;
  font-weight:700 !important;
  letter-spacing:-.04em !important;
  line-height:1 !important;
  display:block;
  color:#B0232F;
}
.cv-stat-label{
  font-size:.72rem;
  letter-spacing:.13em;
  text-transform:uppercase;
  font-weight:600;
  opacity:.6;
  margin-top:.5em;
  display:block;
}
/* Shimmer on counting */
.cv-stat-number.cv-counting{
  background:linear-gradient(90deg, #B0232F 0%, #CF7B82 50%, #B0232F 100%);
  background-size:200% auto;
  -webkit-background-clip:text;
  -webkit-text-fill-color:transparent;
  background-clip:text;
  animation:cv-shimmer 1.4s linear infinite;
}
@keyframes cv-shimmer{
  to{ background-position:200% center }
}

/* =============================================================================
   26. SECTION TRANSITION DIVIDERS — Fine editorial rules
   ============================================================================= */
.cv-rule{
  height:1px;
  background:linear-gradient(to right, transparent, rgba(0,0,0,.12) 20%, rgba(0,0,0,.12) 80%, transparent);
  margin:clamp(32px,4vw,64px) 0;
  border:none;
}

/* =============================================================================
   27. NAV LINK LINE-TRACK (sharpened) — Matches SharpLink's precise underline
   ============================================================================= */
.elementor-nav-menu .elementor-item::after,
.elementor-navigation-menu .elementor-item::after{
  content:"" !important;
  position:absolute !important;
  left:0 !important; right:100% !important; bottom:2px !important;
  height:1.5px !important;
  background:currentColor !important;
  opacity:.9 !important;
  transition:right .34s cubic-bezier(.22,.61,.36,1) !important;
}
.elementor-nav-menu .elementor-item:hover::after,
.elementor-nav-menu .elementor-item.elementor-item-active::after,
.elementor-navigation-menu .elementor-item:hover::after,
.elementor-navigation-menu .elementor-item.elementor-item-active::after{
  right:0 !important;
}

/* =============================================================================
   28. HARMONIC SPACING RHYTHM & SECTION COMPOSITION
   ============================================================================= */

/* ── Global back-to-top and broken glyph hide ── */
#qodef-back-to-top,
.qodef-back-to-top,
.qodef-back-to-top-icon{
  display:none !important;
  opacity:0 !important;
  visibility:hidden !important;
  pointer-events:none !important;
}

/* ── Section Rhythm (Universal standard: clamp(36px, 4vw, 56px)) ── */
.elementor-top-section{
  padding-top:clamp(28px,3.5vw,52px) !important;
  padding-bottom:clamp(28px,3.5vw,52px) !important;
  margin-top:0 !important;
  margin-bottom:0 !important;
}
.elementor-top-section + .elementor-top-section{
  margin-top:0 !important;
}

/* ── Hero Section Spacing ── */
.elementor-top-section:first-of-type,
.elementor-top-section:has(h1){
  padding-top:clamp(24px,3.5vw,48px) !important;
  padding-bottom:clamp(16px,2vw,28px) !important;
}
.elementor-top-section:has(h1) .elementor-widget-button,
.elementor-top-section:has(h1) .qodef-qi-button{
  margin-top:clamp(14px,1.8vw,24px) !important;
  margin-bottom:clamp(16px,2vw,28px) !important;
}

/* Founder cards slider section directly below hero */
.elementor-top-section:nth-of-type(2){
  padding-top:0 !important;
  padding-bottom:clamp(24px,3vw,40px) !important;
}

/* ── SECTION: OUR FOOTPRINT (data-id="5d52d93" & "030a2fd") ── */
[data-id="5d52d93"]{
  padding-top:clamp(36px,4vw,56px) !important;
  padding-bottom:clamp(12px,1.5vw,20px) !important;
  text-align:center !important;
  display:flex !important;
  justify-content:center !important;
  align-items:center !important;
  width:100% !important;
}
[data-id="5d52d93"] .elementor-container,
[data-id="5d52d93"] .elementor-column,
[data-id="5d52d93"] .elementor-widget-wrap,
[data-id="5d52d93"] .elementor-widget-heading,
[data-id="5d52d93"] .elementor-widget-container{
  display:flex !important;
  justify-content:center !important;
  align-items:center !important;
  text-align:center !important;
  margin-inline:auto !important;
  width:100% !important;
}
[data-id="5d52d93"] .elementor-heading-title{
  font-size:clamp(28px,3.2vw,42px) !important;
  font-weight:500 !important;
  text-align:center !important;
  letter-spacing:-0.02em !important;
  display:inline-block !important;
  position:relative !important;
}
[data-id="5d52d93"] .elementor-heading-title::after{
  content:"" !important;
  position:absolute !important;
  left:15% !important;
  right:15% !important;
  bottom:-6px !important;
  height:2px !important;
  background:#B0232F !important;
}

[data-id="030a2fd"]{
  padding-top:0 !important;
  padding-bottom:clamp(36px,4.5vw,60px) !important;
}
[data-id="030a2fd"] > .elementor-container{
  max-width:1200px !important;
  margin:0 auto !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
}
/* Hide the empty left column with just the red bar */
[data-id="e301b84"]{
  display:none !important;
}
[data-id="239028d"]{
  width:100% !important;
  max-width:100% !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
}
[data-id="239028d"] > .elementor-widget-wrap{
  width:100% !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
}

/* 8 Unicorns heading */
[data-id="fc298e1"],
[data-id="fc298e1"] .elementor-widget-container,
[data-id="fc298e1"] .elementor-heading-title{
  width:100% !important;
  text-align:center !important;
  display:flex !important;
  justify-content:center !important;
  align-items:center !important;
  margin-bottom:clamp(16px,2vw,24px) !important;
}
[data-id="0366528"] .elementor-heading-title{
  font-size:clamp(18px,1.8vw,24px) !important;
  font-weight:600 !important;
  text-align:center !important;
  letter-spacing:-0.01em !important;
}

/* Unicorn logo rows */
[data-id="cee496e"],
[data-id="1ca7f46"]{
  display:none !important;
}
[data-id="d9dedfe"],
[data-id="857b836"]{
  width:100% !important;
  display:flex !important;
  justify-content:center !important;
  align-items:center !important;
  margin-bottom:14px !important;
}
[data-id="857b836"]{
  margin-bottom:24px !important;
}
[data-id="d9dedfe"] .elementor-container,
[data-id="857b836"] .elementor-container{
  display:flex !important;
  justify-content:center !important;
  flex-wrap:wrap !important;
  gap:16px !important;
  width:100% !important;
  max-width:960px !important;
}
[data-id="d9dedfe"] .elementor-column,
[data-id="857b836"] .elementor-column{
  flex:1 1 180px !important;
  max-width:210px !important;
  min-width:150px !important;
}
[data-id="d9dedfe"] .elementor-widget-image,
[data-id="857b836"] .elementor-widget-image{
  background:#ffffff !important;
  border:1px solid rgba(0,0,0,0.06) !important;
  border-radius:10px !important;
  padding:14px 20px !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  box-shadow:0 2px 8px rgba(0,0,0,0.02) !important;
  transition:all 0.25s cubic-bezier(.22,.61,.36,1) !important;
  height:72px !important;
}
[data-id="d9dedfe"] .elementor-widget-image:hover,
[data-id="857b836"] .elementor-widget-image:hover{
  transform:translateY(-2px) !important;
  box-shadow:0 6px 18px rgba(0,0,0,0.06) !important;
  border-color:rgba(176,35,47,0.2) !important;
}
[data-id="d9dedfe"] img,
[data-id="857b836"] img{
  max-height:40px !important;
  width:auto !important;
  object-fit:contain !important;
}

/* ── STATS GRID COMPONENT ── */
.cv-footprint-stats-grid{
  display:grid !important;
  grid-template-columns:repeat(5,1fr) !important;
  gap:16px !important;
  margin-top:clamp(24px,3vw,36px) !important;
  width:100% !important;
  max-width:1100px !important;
}
@media (max-width:960px){
  .cv-footprint-stats-grid{
    grid-template-columns:repeat(3,1fr) !important;
  }
}
@media (max-width:600px){
  .cv-footprint-stats-grid{
    grid-template-columns:repeat(2,1fr) !important;
  }
}
.cv-stat-card{
  background:#ffffff !important;
  border:1px solid rgba(0,0,0,0.07) !important;
  border-radius:12px !important;
  padding:22px 16px !important;
  text-align:center !important;
  box-shadow:0 4px 16px rgba(0,0,0,0.03) !important;
  transition:all 0.25s cubic-bezier(.22,.61,.36,1) !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
}
.cv-stat-card:hover{
  transform:translateY(-3px) !important;
  box-shadow:0 8px 24px rgba(176,35,47,0.08) !important;
  border-color:rgba(176,35,47,0.2) !important;
}
.cv-stat-card .cv-stat-val{
  font-size:clamp(26px,2.8vw,36px) !important;
  font-weight:700 !important;
  line-height:1.1 !important;
  margin-bottom:6px !important;
}
.cv-stat-card .cv-stat-lbl{
  font-size:12.5px !important;
  font-weight:600 !important;
  color:#7A7A7A !important;
  text-transform:uppercase !important;
  letter-spacing:0.04em !important;
}

/* ── SECTION: OUR PROGRAMS (data-id="b62f106" & "402e0a3") ── */
[data-id="b62f106"]{
  padding-top:clamp(32px,3.5vw,52px) !important;
  padding-bottom:clamp(16px,2vw,24px) !important;
  text-align:center !important;
}
[data-id="b62f106"] .elementor-widget-spacer{
  display:none !important;
}
[data-id="b62f106"] .elementor-heading-title{
  font-size:clamp(28px,3.2vw,42px) !important;
  font-weight:500 !important;
  text-align:center !important;
  letter-spacing:-0.02em !important;
}

[data-id="402e0a3"],
[data-id="a65977a"]{
  padding-top:0 !important;
  padding-bottom:clamp(16px,2vw,24px) !important;
}
[data-id="402e0a3"] .elementor-container,
[data-id="a65977a"] .elementor-container{
  gap:clamp(14px,1.8vw,24px) !important;
}

[data-id="b2b8efc"]{
  padding-top:0 !important;
  padding-bottom:clamp(36px,4vw,52px) !important;
  text-align:center !important;
}

/* ── SECTION: CHIRATAE GLOBAL ADVISORY BOARD (data-id="8b1f2e4" & "b67e7d6") ── */
[data-id="8b1f2e4"]{
  padding-top:clamp(32px,3.5vw,52px) !important;
  padding-bottom:clamp(16px,2vw,24px) !important;
  text-align:center !important;
}
[data-id="8b1f2e4"] .elementor-widget-spacer{
  display:none !important;
}
[data-id="8b1f2e4"] .elementor-heading-title{
  font-size:clamp(28px,3.2vw,42px) !important;
  font-weight:500 !important;
  text-align:center !important;
  letter-spacing:-0.02em !important;
}

[data-id="b67e7d6"]{
  padding-top:0 !important;
  padding-bottom:clamp(16px,2vw,24px) !important;
}
[data-id="b67e7d6"] .elementor-container{
  gap:clamp(16px,2vw,28px) !important;
}

[data-id="ba90c8a"]{
  padding-top:0 !important;
  padding-bottom:clamp(36px,4vw,52px) !important;
  text-align:center !important;
}

/* ── SECTION: INSIGHTS (data-id="c645e99" & "ecadfc9") ── */
[data-id="c645e99"]{
  padding-top:clamp(32px,3.5vw,52px) !important;
  padding-bottom:clamp(16px,2vw,24px) !important;
  text-align:center !important;
}
[data-id="c645e99"] .elementor-widget-spacer{
  display:none !important;
}
[data-id="c645e99"] .elementor-heading-title{
  font-size:clamp(28px,3.2vw,42px) !important;
  font-weight:500 !important;
  text-align:center !important;
  letter-spacing:-0.02em !important;
}

[data-id="ecadfc9"]{
  padding-top:0 !important;
  padding-bottom:clamp(40px,5vw,64px) !important;
}
[data-id="ecadfc9"] .elementor-container{
  gap:clamp(16px,2vw,28px) !important;
}

/* ── BUTTONS (Clean Pill Shape & Micro-interactions) ── */
.qodef-qi-button,
.elementor-button,
.qodef-button{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  padding:12px 28px !important;
  border-radius:100px !important;
  font-size:13px !important;
  font-weight:600 !important;
  letter-spacing:0.06em !important;
  text-transform:uppercase !important;
  transition:all 0.25s cubic-bezier(.22,.61,.36,1) !important;
}
.qodef-qi-button .qodef-m-icon{
  display:none !important;
}

/* ── Container Max Width & Padding ── */
.elementor-container{
  max-width:1240px !important;
  padding-left:clamp(16px,2.4vw,36px) !important;
  padding-right:clamp(16px,2.4vw,36px) !important;
}

/* ── Spacers Cleanup ── */
.elementor-widget-spacer .elementor-spacer-inner{
  height:0 !important;
}
.elementor-widget-spacer{
  margin:0 !important;
  padding:0 !important;
}

/* ── Mobile Layout Polish ── */
@media (max-width:767px){
  .elementor-top-section{
    padding-top:clamp(20px,4vw,32px) !important;
    padding-bottom:clamp(20px,4vw,32px) !important;
  }
}




/* =============================================================================
   29. HERO FOUNDER MARQUEE — replaces the fragile Elementor/Swiper image
   slider (confirmed unreliable this session: a required webpack chunk
   404s, and Swiper's own init occasionally leaves slides at 0x0). Built on
   the same proven infinite-track technique as the logo marquee (section 24)
   for guaranteed right-to-left motion with no JS-framework dependency.
   Injected by _enhance.js; the original Elementor widget is hidden, not
   removed, so nothing is lost if this is ever rolled back.
   ============================================================================= */
.cv-hero-marquee-wrap{
  width:100%;
  overflow:hidden;
  padding:clamp(16px,2vw,28px) 0;
  position:relative;
}
.cv-hero-marquee-wrap::before,
.cv-hero-marquee-wrap::after{
  content:"";
  position:absolute;
  top:0; bottom:0; width:min(140px,10vw); z-index:3;
  pointer-events:none;
}
.cv-hero-marquee-wrap::before{
  left:0;
  background:linear-gradient(to right, #fff 0%, transparent 100%);
}
.cv-hero-marquee-wrap::after{
  right:0;
  background:linear-gradient(to left, #fff 0%, transparent 100%);
}
.cv-hero-marquee-track{
  display:flex;
  align-items:stretch;
  gap:clamp(16px,1.6vw,24px);
  width:max-content;
  /* right-to-left: translateX moves negative, so content flows toward the
     left, meaning new cards enter from the right edge -- exactly the
     motion asked for. */
  animation:cv-hero-marquee-scroll 52s linear infinite;
}
.cv-hero-marquee-track:hover{ animation-play-state:paused }
@keyframes cv-hero-marquee-scroll{
  from{ transform:translateX(0) }
  to  { transform:translateX(-50%) }
}

.cv-hero-card{
  flex:0 0 auto;
  width:clamp(180px,15vw,232px);
  border-radius:14px;
  overflow:hidden;
  box-shadow:var(--cv-sh-1);
  transition:box-shadow .4s cubic-bezier(.22,.61,.36,1), transform .4s cubic-bezier(.22,.61,.36,1);
  display:flex;
  flex-direction:column;
}
.cv-hero-card:hover{
  box-shadow:var(--cv-sh-3);
  transform:translateY(-4px);
}
.cv-hero-card-photo{
  width:100%;
  aspect-ratio:4/5;
  overflow:hidden;
  background:#f2f2f2;
}
.cv-hero-card-photo img{
  width:100%; height:100%;
  object-fit:cover;
  display:block;
  transition:transform .6s cubic-bezier(.22,.61,.36,1);
}
.cv-hero-card:hover .cv-hero-card-photo img{ transform:scale(1.045) }
.cv-hero-card-info{
  padding:14px 16px 16px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  /* background colour set inline per-card, sampled from that founder's
     own photo -- never a shared or hardcoded palette colour. */
}
.cv-hero-card-name{
  font-size:.82rem;
  font-weight:600;
  letter-spacing:-.005em;
  line-height:1.25;
  color:#17181c;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.cv-hero-card-logo{
  height:18px;
  width:auto;
  max-width:64px;
  object-fit:contain;
  flex:0 0 auto;
}
@media (max-width:640px){
  .cv-hero-card{ width:clamp(150px,42vw,190px) }
}
@media (prefers-reduced-motion:reduce){
  .cv-hero-marquee-track{ animation:none; flex-wrap:wrap }
}

/* =============================================================================
   30. PAW MARK CURSOR & TRAIL SYSTEM
   Replaces default mouse arrow with dynamic directional feline paw cursor
   and leaves a realistic 2-3 paw print walking trail behind it.
   ============================================================================= */
html.cv-paw-cursor-active,
html.cv-paw-cursor-active *,
html.cv-paw-cursor-active body,
html.cv-paw-cursor-active a,
html.cv-paw-cursor-active button,
html.cv-paw-cursor-active [role="button"],
html.cv-paw-cursor-active input,
html.cv-paw-cursor-active textarea,
html.cv-paw-cursor-active select,
html.cv-paw-cursor-active .elementor-button,
html.cv-paw-cursor-active .qodef-qi-button,
html.cv-paw-cursor-active .card-item,
html.cv-paw-cursor-active .swiper-slide,
html.cv-paw-cursor-active .cv-hero-card,
html.cv-paw-cursor-active .cv-stat-card,
html.cv-paw-cursor-active .elementor-widget-image-box,
html.cv-paw-cursor-active .elementor-post {
  cursor: none !important;
}

/* Fluid Cursor — NexStudio exact specification */
fluid-cursor,
.fluid-cursor,
.cv-paw-cursor {
  z-index: 2000;
  pointer-events: none;
  opacity: 0;
  mix-blend-mode: difference;
  will-change: transform, opacity;
  width: 0;
  height: 0;
  transition: opacity .18s;
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  color: #ffffff !important;
  fill: #ffffff !important;
}

.cv-paw-cursor[data-visible="true"],
.fluid-cursor[data-visible="true"] {
  display: block;
  opacity: 1 !important;
}

.cv-paw-cursor__body,
.fluid-cursor__body {
  position: absolute;
  top: 0;
  left: 0;
  width: 26px;
  height: 26px;
  will-change: transform;
  transform-origin: 50% 50%;
  transform: translate(-50%, -50%);
  display: block;
  color: #ffffff !important;
  fill: #ffffff !important;
}

.cv-paw-cursor__body svg,
.cv-paw-cursor__body path,
.fluid-cursor__body svg,
.fluid-cursor__body path {
  width: 100%;
  height: 100%;
  fill: #ffffff !important;
  color: #ffffff !important;
  display: block;
}

.cv-paw-trail {
  z-index: 1990;
  pointer-events: none;
  position: fixed;
  top: 0;
  left: 0;
  width: 20px;
  height: 25px;
  opacity: 1;
  transform-origin: 50% 50%;
  will-change: transform, opacity;
  transition: opacity 1.2s cubic-bezier(.22,.61,.36,1), transform 1.2s cubic-bezier(.22,.61,.36,1);
  mix-blend-mode: difference;
  color: #ffffff !important;
  fill: #ffffff !important;
}

.cv-paw-trail svg,
.cv-paw-trail path {
  width: 100%;
  height: 100%;
  fill: #ffffff !important;
  color: #ffffff !important;
  display: block;
}

.cv-paw-trail.cv-fading {
  opacity: 0 !important;
}


