/* ==========================================================================
   TraINsolutions — CSS del tema hijo
   Solo contiene las "islas" del diseño que no se construyen con widgets de
   Elementor. Cada bloque va prefijado con .ts-* y se documenta a qué
   sección/widget aplica. Los tokens globales y utilidades compartidas viven
   en el Custom CSS del Kit de Elementor (tools/kit-custom.css).
   Referencia: web_static/assets/css/*.css (valores computados finales).
   ========================================================================== */

/* --------------------------------------------------------------------------
   Fuentes locales (RGPD: sin llamadas a fonts.googleapis.com).
   Se registran en Elementor con el filtro elementor/fonts/additional_fonts
   (functions.php) para que aparezcan en el selector de tipografía del Kit.
   -------------------------------------------------------------------------- */
@font-face{font-family:"Inter";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/inter-v20-latin_latin-ext-regular.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/inter-v20-latin_latin-ext-500.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/inter-v20-latin_latin-ext-600.woff2") format("woff2")}
@font-face{font-family:"Playfair Display";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/playfair-display-v40-latin_latin-ext-regular.woff2") format("woff2")}
@font-face{font-family:"Playfair Display";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/playfair-display-v40-latin_latin-ext-500.woff2") format("woff2")}
@font-face{font-family:"Playfair Display";font-style:italic;font-weight:500;font-display:swap;src:url("../fonts/playfair-display-v40-latin_latin-ext-500italic.woff2") format("woff2")}

:root{--teal:#0e5a6f;--teal-dark:#083d4c;--navy:#0a2a3b;--navy-2:#0f4055;--gold:#d5ad5c;--gold-dark:#8f6b21;--ivory:#f7f5f0;--ink:#101820;--muted:#5a6b75;--line:#e0ded6}

/* --------------------------------------------------------------------------
   ESCALA TIPOGRÁFICA — 2 familias · 7 niveles · 3 pesos (400/500/600)
   Brief: "police web.docx" (§2 y §15).

   FUENTE DE VERDAD: Elementor → Ajustes del sitio → Tipografía (Kit).
   Cada token lee la variable global que emite el Kit y cae en el valor de
   diseño si el Kit no estuviera disponible. Para cambiar la escala se edita
   el Kit (o tools/build-kit.php), nunca estos valores ni los de abajo.

     Nivel  Global Kit   Familia  Desktop               Peso  Uso
     H1     h1hero       A        clamp(40,4.2vw,62)    500   Titular principal
     H2     primary      A        clamp(32,3.1vw,46)    500   Secciones
     H3     h3           A        clamp(22,1.9vw,28)    500   Cards / servicios
     Intro  intro        B        clamp(17,1.3vw,20)    400   Chapeau / entradilla
     Body   text         B        17px                  400   Texto corriente
     Label  secondary    B        13px / 600            600   Sur-titres / categorías / meta
     UI     accent       B        15px                  500   Menú / CTA / fechas

   Los tokens se declaran en `body` (no en `:root`) porque las variables del
   Kit viven en `.elementor-kit-N`, que es el propio `body`: desde `:root`
   no se verían y siempre caería el fallback.
   -------------------------------------------------------------------------- */
body{
	/* Familias — A: editorial/impacto · B: corporativa/funcional */
	--ts-font-a:var(--e-global-typography-h1hero-font-family,"Playfair Display"),"Iowan Old Style",Baskerville,"Times New Roman",serif;
	--ts-font-b:var(--e-global-typography-text-font-family,"Inter"),"Avenir Next","Segoe UI",Arial,sans-serif;

	--ts-h1:var(--e-global-typography-h1hero-font-size,clamp(40px,4.2vw,62px));
	--ts-h1-w:var(--e-global-typography-h1hero-font-weight,500);
	--ts-h1-lh:var(--e-global-typography-h1hero-line-height,1.06em);
	--ts-h1-ls:var(--e-global-typography-h1hero-letter-spacing,-1.5px);

	--ts-h2:var(--e-global-typography-primary-font-size,clamp(32px,3.1vw,46px));
	--ts-h2-w:var(--e-global-typography-primary-font-weight,500);
	--ts-h2-lh:var(--e-global-typography-primary-line-height,1.1em);
	--ts-h2-ls:var(--e-global-typography-primary-letter-spacing,-1px);

	--ts-h3:var(--e-global-typography-h3-font-size,clamp(22px,1.9vw,28px));
	--ts-h3-w:var(--e-global-typography-h3-font-weight,500);
	--ts-h3-lh:var(--e-global-typography-h3-line-height,1.25em);
	--ts-h3-ls:var(--e-global-typography-h3-letter-spacing,-0.3px);

	--ts-intro:var(--e-global-typography-intro-font-size,clamp(17px,1.3vw,20px));
	--ts-intro-w:var(--e-global-typography-intro-font-weight,400);
	--ts-intro-lh:var(--e-global-typography-intro-line-height,1.65em);

	--ts-body:var(--e-global-typography-text-font-size,17px);
	--ts-body-w:var(--e-global-typography-text-font-weight,400);
	--ts-body-lh:var(--e-global-typography-text-line-height,1.7em);

	--ts-label:var(--e-global-typography-secondary-font-size,13px);
	--ts-label-w:var(--e-global-typography-secondary-font-weight,600);
	--ts-label-lh:var(--e-global-typography-secondary-line-height,1.4em);
	--ts-label-ls:var(--e-global-typography-secondary-letter-spacing,1.6px);

	--ts-ui:var(--e-global-typography-accent-font-size,15px);
	--ts-ui-w:var(--e-global-typography-accent-font-weight,500);
	--ts-ui-lh:var(--e-global-typography-accent-line-height,1.4em);
	--ts-ui-ls:var(--e-global-typography-accent-letter-spacing,0.6px);

	/* Alias heredados: el CSS antiguo sigue funcionando sin tocarse. */
	--font-display:var(--ts-font-a);
	--font-sans:var(--ts-font-b);
}

body{font-family:var(--ts-font-b);font-size:var(--ts-body);font-weight:var(--ts-body-w);line-height:var(--ts-body-lh)}
h1,h2,h3,h4,h5,h6{font-family:var(--ts-font-a);font-weight:var(--ts-h1-w)}
/* Con 700/800 fuera, <strong> debe caer en 600 o el navegador sintetiza
   una negrita falsa (justo lo que el brief pide evitar). */
b,strong{font-weight:600}

/* Eyebrow "escala ×3" del estático (hero, section-heading, digital, approche, institute, cta) */
.elementor-widget-heading.ts-eyebrow.lg .elementor-heading-title{font-size:var(--ts-label);line-height:var(--ts-label-lh);letter-spacing:var(--ts-label-ls);margin-bottom:22px;font-weight:var(--ts-label-w)}
@media(max-width:620px){.elementor-widget-heading.ts-eyebrow.lg .elementor-heading-title{margin-bottom:18px}}

/* ==========================================================================
   HEADER (Theme Builder → Header — Site)
   ========================================================================== */
.ts-header{transition:background-color .3s ease,box-shadow .3s ease}
.ts-header.elementor-sticky--effects{background-color:rgba(10,42,59,.95)!important;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);box-shadow:0 4px 20px rgba(0,0,0,.15)}
.ts-brand{flex:0 0 auto}
.ts-brand img{display:block;height:auto;object-fit:contain}
.ts-nav .elementor-nav-menu--main .elementor-item{white-space:nowrap;padding:4px 0}
.ts-nav .elementor-nav-menu--main{gap:clamp(14px,1.35vw,22px)}
.ts-nav .elementor-nav-menu--main .elementor-item.elementor-item-active,.ts-nav .elementor-nav-menu--main .elementor-item:hover{color:#d5ad5c!important}
.ts-header-actions{flex:0 0 auto}
.ts-languages{display:flex;gap:14px;font-size:var(--ts-label);letter-spacing:var(--ts-label-ls);color:#9eabb2;text-transform:uppercase;font-weight:var(--ts-label-w)}
.ts-languages a{color:#9eabb2;transition:color .3s}
.ts-languages a:hover,.ts-languages a.is-current{color:#fff}
.ts-btn.small .elementor-button{padding:13px 17px;gap:12px;font-size:var(--ts-ui)}
@media(max-width:980px){
  .ts-header{flex-wrap:nowrap!important}
  .ts-header-actions{margin-left:auto}
  .ts-nav{order:3;width:auto!important;flex-grow:0}
  .ts-header-actions{order:2;margin-left:auto}
  .ts-nav .elementor-menu-toggle{margin-left:0}
  .ts-nav .elementor-nav-menu--dropdown{position:absolute;left:0;right:0;top:100%;box-shadow:0 18px 40px rgba(0,0,0,.28)}
  .ts-nav .elementor-nav-menu--dropdown a{justify-content:center}
}
@media(max-width:620px){.ts-btn.small .elementor-button{padding:10px 12px;gap:8px}}

/* ==========================================================================
   HERO (#top)
   ========================================================================== */
.ts-hero{position:relative;color:#fff}
.ts-hero::after{content:"";position:absolute;width:620px;height:620px;border:1px solid rgba(213,173,92,.42);border-radius:50%;right:-170px;top:-80px;z-index:1;pointer-events:none}
.ts-hero>.elementor-element{position:relative;z-index:2}
.elementor-widget.ts-hero-decor{position:absolute!important;inset:0;z-index:0!important;width:100%!important;height:100%;margin:0;pointer-events:none}
.elementor-widget.ts-hero-decor{position:absolute;inset:0}
.ts-hero-bg{position:absolute;inset:0;background-size:cover;background-position:center;z-index:0;animation:ts-hero-zoom 25s infinite alternate linear}
.ts-hero-overlay{position:absolute;inset:0;background:linear-gradient(135deg,rgba(10,42,59,.9) 0%,rgba(15,64,85,.7) 100%);z-index:1}
.ts-rail-lines{position:absolute;inset:0;opacity:.32;z-index:2}
.ts-rail-lines span{position:absolute;display:block;height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent);width:80%;transform-origin:right}
.ts-rail-lines span:nth-child(1){right:-10%;top:28%;transform:rotate(-23deg)}
.ts-rail-lines span:nth-child(2){right:-10%;top:53%;transform:rotate(-15deg)}
.ts-rail-lines span:nth-child(3){right:-10%;top:75%;transform:rotate(-9deg)}
@keyframes ts-hero-zoom{0%{transform:scale(1)}100%{transform:scale(1.15)}}
@media(prefers-reduced-motion:reduce){.ts-hero-bg{animation:none}}
.ts-hero-copy{max-width:1180px;width:100%}
.ts-hero .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:var(--gold)}
.elementor-widget-heading.ts-hero-h1 .elementor-heading-title{max-width:1080px;color:#fff}
.elementor-widget.ts-hero-lead{max-width:790px;color:#dbe8ea;font-size:var(--ts-intro);line-height:var(--ts-intro-lh);margin:32px 0}
.ts-hero-lead p{margin:0}
.ts-hero-actions .ts-text-link .elementor-button{color:#fff;border-bottom-color:rgba(255,255,255,.3);font-size:var(--ts-ui)}
.ts-hero-actions .ts-btn .elementor-button{font-size:var(--ts-ui)}
.ts-hero-proof{width:340px;flex:0 0 340px}
.elementor-widget.ts-hero-proof{color:#aab5bc;font-size:var(--ts-label);font-weight:var(--ts-label-w);text-transform:uppercase;letter-spacing:var(--ts-label-ls)}
.ts-hero-proof p{margin:0 0 11px}
.ts-hero-proof strong{color:#fff}
.ts-hero-proof span{color:var(--gold);margin:0 6px}
.elementor-widget.ts-side-label{position:absolute;right:22px;top:46%;width:auto;z-index:2}
.elementor-widget-heading.ts-side-label .elementor-heading-title{writing-mode:vertical-rl;text-transform:uppercase;font-size:var(--ts-label);letter-spacing:var(--ts-label-ls);color:#dbe8ea;font-family:var(--ts-font-b);font-weight:var(--ts-label-w)}
@media(max-width:980px){.ts-hero-proof{width:100%;flex-basis:auto}}

/* ==========================================================================
   TICKER (#actualites) — Listing Grid de JetEngine sobre categorías
   ========================================================================== */
.ts-ticker{color:#fff;border-top:1px solid rgba(255,255,255,.14)}
.ts-news-heading{border-right:1px solid rgba(255,255,255,.18)}
.ts-news-heading .elementor-widget-heading.ts-eyebrow .elementor-heading-title{margin:0 0 7px;color:var(--gold)}
.ts-news-heading .ts-eyebrow a{color:inherit}
.elementor-widget.ts-news-sub{font-size:var(--ts-label);font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);color:#bcd0d4;text-transform:uppercase}
.ts-news-sub p{margin:0}
.ts-ticker-track{overflow:hidden;min-width:0}
.ts-ticker-track .jet-listing-grid__items{display:flex!important;flex-wrap:nowrap!important;grid-template-columns:none!important;width:max-content!important;max-width:none!important;gap:0!important;margin:0!important;animation:ts-ticker-scroll 34s linear infinite}
.ts-ticker-track:hover .jet-listing-grid__items,.ts-ticker-track:focus-within .jet-listing-grid__items{animation-play-state:paused}
.ts-ticker-track .jet-listing-grid__item{width:360px!important;flex:0 0 360px!important;max-width:none!important;padding:0!important}
.ts-ticker-item{border-right:1px solid rgba(255,255,255,.18);height:100%}
.ts-ticker-text{min-width:0}
.ts-ticker-cat .jet-listing-dynamic-field__content{text-transform:uppercase;font-size:var(--ts-label);letter-spacing:var(--ts-label-ls);color:var(--gold);font-weight:var(--ts-label-w);margin-bottom:5px;display:block}
.ts-ticker-title .jet-listing-dynamic-field__content{font-family:var(--ts-font-b);font-size:var(--ts-ui);font-weight:var(--ts-ui-w);line-height:var(--ts-ui-lh);color:#fff;display:block}
.elementor-widget-heading.ts-ticker-arrow .elementor-heading-title{color:var(--gold);font-size:var(--ts-ui);font-family:var(--ts-font-b)}
@keyframes ts-ticker-scroll{to{transform:translateX(-50%)}}
@media(max-width:760px){.ts-ticker-track .jet-listing-grid__items{animation-duration:28s}.ts-ticker-track .jet-listing-grid__item{width:300px;flex-basis:300px}.ts-news-heading{border-right:0;border-bottom:1px solid rgba(255,255,255,.18)}}
@media(prefers-reduced-motion:reduce){.ts-ticker-track .jet-listing-grid__items{animation:none}.ts-ticker-track{overflow-x:auto}}

/* ==========================================================================
   TRUST BAR (domaines) — Listing Grid sobre la taxonomía domaine
   ========================================================================== */
.ts-trust .jet-listing-grid__items{display:flex!important;flex-wrap:wrap;justify-content:center;gap:8px 34px!important;grid-template-columns:none!important;margin:0!important}
.ts-trust .jet-listing-grid__item{width:auto!important;flex:0 0 auto!important;max-width:none!important;padding:0!important;display:flex;align-items:center}
.ts-trust .jet-listing-grid__item:not(:last-child)::after{content:"";width:4px;height:4px;border-radius:50%;background:var(--gold);margin-left:34px;flex:0 0 4px}
.ts-chip-label .jet-listing-dynamic-field__content{font-size:var(--ts-label);text-transform:uppercase;letter-spacing:var(--ts-label-ls);font-weight:var(--ts-label-w);color:#53616a;white-space:nowrap}
.ts-chip-label a{color:inherit}
@media(max-width:620px){.ts-trust .jet-listing-grid__items{flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;padding:0 10px;-webkit-overflow-scrolling:touch}}

/* ==========================================================================
   TARJETAS DE LISTING (JetEngine)
   ========================================================================== */
/* Expertise */
.ts-expertise-card{color:#fff;transition:background-color .25s ease}
.jet-listing-grid__item:hover .ts-expertise-card{background-color:var(--teal-dark)!important}
.ts-expertise-card .ts-num .jet-listing-dynamic-field__content{display:block;font-size:var(--ts-label);line-height:var(--ts-label-lh);letter-spacing:var(--ts-label-ls);font-weight:var(--ts-label-w);color:rgba(255,255,255,.62)}
.ts-card-icon-wrap{margin:25px 0 29px}
.ts-card-icon-wrap .jet-listing-dynamic-field__content{width:76px;height:76px;border:1px solid rgba(213,173,92,.9);border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle at 35% 28%,rgba(213,173,92,.13),rgba(4,62,74,.12) 58%);box-shadow:0 14px 32px rgba(2,31,38,.18),inset 0 0 0 5px rgba(255,255,255,.025)}
.ts-card-title .jet-listing-dynamic-field__content{font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);font-weight:var(--ts-h3-w);color:#fff;margin:0 0 17px;display:block}
.ts-card-title.dark .jet-listing-dynamic-field__content{color:var(--ink)}
.ts-card-text .jet-listing-dynamic-field__content{font-size:var(--ts-body);line-height:var(--ts-body-lh);color:#dbe8ea;margin:0 0 25px;display:block}
.elementor-widget.ts-card-link{margin-top:auto}
.ts-card-link .jet-listing-dynamic-field__content{display:flex;justify-content:space-between;align-items:center;font-size:var(--ts-label);text-transform:uppercase;font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);color:#fff}
.ts-card-link i{color:var(--gold);font-style:normal}
@media(max-width:620px){.ts-card-icon-wrap .jet-listing-dynamic-field__content{width:72px;height:72px}}

/* Secteur */
.ts-secteur-card{transition:background-color .25s ease}
.jet-listing-grid__item:hover .ts-secteur-card{background-color:var(--ivory)!important}
.ts-secteur-head{margin-bottom:22px}
.ts-glyph .jet-listing-dynamic-field__content{width:58px;height:58px;flex:0 0 58px;border-radius:50%;display:grid;place-items:center;background:var(--teal);color:var(--gold);font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:1;letter-spacing:-3px;padding-right:3px}
.ts-glyph.on-teal .jet-listing-dynamic-field__content{width:78px;height:78px;background:rgba(255,255,255,.1);border:1px solid rgba(213,173,92,.7);margin-bottom:24px}
.ts-secteur-title .jet-listing-dynamic-field__content{font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);font-weight:var(--ts-h3-w);color:var(--ink);margin:0}
.ts-promise .jet-listing-dynamic-field__content{min-height:76px;margin:0;padding:17px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-family:var(--ts-font-b);font-size:var(--ts-intro);font-weight:500;line-height:var(--ts-intro-lh);color:var(--ink)}
.ts-scope .jet-listing-dynamic-field__content{margin:0;padding:19px 0;font-family:var(--ts-font-b);font-size:var(--ts-body);line-height:var(--ts-body-lh);color:var(--ink)}
.ts-scope strong{font-weight:600}
.elementor-widget.ts-result{margin-top:auto}
.ts-result .jet-listing-dynamic-field__content{margin:0;padding:17px 0 0;border-top:1px solid var(--line);font-family:var(--ts-font-b);font-size:var(--ts-body);line-height:var(--ts-body-lh);color:#42535b}
.ts-secteur-facts .ts-scope .jet-listing-dynamic-field__content,.ts-secteur-facts .ts-result .jet-listing-dynamic-field__content{padding:0;border:0}

/* Référence */
.ts-reference-card{color:#fff;overflow:hidden;transition:transform .3s ease}
.ts-reference-card::after{content:"";position:absolute;border:1px solid rgba(255,255,255,.18);width:330px;height:330px;border-radius:50%;right:-130px;top:-110px;z-index:2;pointer-events:none}
.ts-reference-card>.elementor-element{position:relative;z-index:3}
.elementor-widget.ts-ref-index{position:absolute;top:30px;left:24px;width:auto}
.ts-ref-index .jet-listing-dynamic-field__content{font-size:var(--ts-label);font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);opacity:.85;color:#fff}
.ts-ref-kicker .jet-listing-dynamic-field__content{font-size:var(--ts-label);text-transform:uppercase;letter-spacing:var(--ts-label-ls);color:var(--gold);font-weight:var(--ts-label-w);display:block}
.ts-ref-title .jet-listing-dynamic-field__content{font-family:var(--ts-font-a);font-size:var(--ts-h3);font-weight:var(--ts-h3-w);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);margin:9px 0 12px;color:#fff;display:block}
.ts-ref-subtitle .jet-listing-dynamic-field__content{font-size:var(--ts-label);font-weight:var(--ts-label-w);text-transform:uppercase;letter-spacing:var(--ts-label-ls);opacity:.8;margin:0;color:#fff}
.ts-ref-grid .jet-listing-grid__item:hover .ts-reference-card{transform:scale(1.015)}

/* Formation */
.ts-formation-card{transition:background-color .25s ease}
.jet-listing-grid__item:hover .ts-formation-card{background-color:var(--ivory)!important}
.ts-formation-card .ts-num .jet-listing-dynamic-field__content{display:block;margin-bottom:22px}
.ts-themes .jet-listing-dynamic-field__content{font-family:var(--ts-font-b);font-size:var(--ts-body);line-height:var(--ts-body-lh);color:var(--ink);padding:16px 0;border-top:1px solid var(--line);margin:0}
.elementor-widget.ts-format{margin-top:auto}
.ts-format .jet-listing-dynamic-field__content{font-family:var(--ts-font-b);font-size:var(--ts-label);font-weight:var(--ts-label-w);color:#42535b;padding-top:14px;border-top:1px solid var(--line);margin:0}
.ts-format.on-dark .jet-listing-dynamic-field__content{color:#dbe8ea;border-top-color:rgba(255,255,255,.25);max-width:820px;margin-top:14px}

/* Actualité (blog) */
.ts-article-card{border:1px solid var(--line);height:100%;transition:transform .25s ease,box-shadow .25s ease}
.jet-listing-grid__item:hover .ts-article-card{transform:translateY(-4px);box-shadow:0 18px 40px rgba(13,83,98,.1)}
.ts-article-media img{width:100%;aspect-ratio:16/9;object-fit:cover;display:block}
.ts-article-meta{font-size:var(--ts-label);text-transform:uppercase;letter-spacing:var(--ts-label-ls);color:var(--gold-dark);font-weight:var(--ts-label-w);margin-bottom:12px}
.ts-article-cat a{color:var(--gold-dark)}
.ts-article-title .jet-listing-dynamic-field__content{font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);font-weight:var(--ts-h3-w);color:var(--ink);margin:0 0 12px;display:block}
.ts-article-excerpt .jet-listing-dynamic-field__content{font-size:var(--ts-body);line-height:var(--ts-body-lh);color:var(--muted);margin:0 0 18px}
.ts-article-link .jet-listing-dynamic-link__link{font-size:var(--ts-label);text-transform:uppercase;letter-spacing:var(--ts-label-ls);font-weight:var(--ts-label-w);color:var(--teal)}

/* ==========================================================================
   EXPERTISES — cabecera de sección y ciclo ferroviario (#interfaces)
   ========================================================================== */
.ts-section-heading{margin-bottom:56px}
.ts-lifecycle{position:relative}
.ts-train-phases{display:grid;grid-template-columns:2fr 4fr;margin:0 -18px;background:#e8f4f0;border-bottom:1px solid #c8d4d0;color:var(--teal-dark);font-size:var(--ts-label);font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);text-transform:uppercase}
.ts-train-phases span{min-height:54px;padding:15px 20px;display:flex;align-items:center;justify-content:center;text-align:center}
.ts-train-phases span+span{border-left:1px solid #c8d4d0}
.ts-train-steps{position:relative;z-index:3;display:grid;grid-template-columns:repeat(6,1fr);margin:0 -18px;background:#fffdf8;border-bottom:1px solid #cbc7bd;box-shadow:0 8px 18px rgba(10,52,62,.08)}
.ts-train-step{position:relative;min-height:82px;display:flex;align-items:center;justify-content:center;padding:18px 14px;text-align:center;border-right:1px solid #d6d1c7}
.ts-train-step:last-child{border-right:0}
.ts-train-step:not(:last-child)::after{content:"→";position:absolute;right:-8px;top:50%;transform:translateY(-50%);color:var(--gold-dark);z-index:2;font-size:18px}
.ts-train-step strong{font-family:var(--ts-font-b);font-size:var(--ts-ui);font-weight:600;line-height:var(--ts-ui-lh);letter-spacing:var(--ts-ui-ls);text-transform:uppercase;color:var(--teal-dark)}
.elementor-widget.ts-train-photo{position:relative;margin:0 -18px;height:clamp(240px,29vw,430px);overflow:hidden;background:#d9e0df;border-bottom:1px solid #aeb9b8}
.elementor-widget.ts-train-photo::after{content:"";position:absolute;inset:0;box-shadow:inset 0 14px 24px rgba(13,83,98,.14);pointer-events:none}
.ts-train-photo img{display:block;width:100%;height:100%;object-fit:cover;object-position:center 61%;filter:saturate(.88) contrast(1.03)}
.elementor-widget-heading.ts-train-caption .elementor-heading-title{margin:30px 0 0;text-align:center;color:var(--teal-dark);font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);font-weight:var(--ts-h3-w)}
.ts-train-caption span{color:var(--gold-dark)}
@media(max-width:900px){.ts-lifecycle{overflow-x:auto}.ts-train-phases,.ts-train-steps,.elementor-widget.ts-train-photo{min-width:880px}.elementor-widget-heading.ts-train-caption .elementor-heading-title{min-width:700px;text-align:left;padding-left:18px}}

/* ==========================================================================
   DIGITAL (#digital)
   ========================================================================== */
.elementor-widget-heading.ts-digital-h2 .elementor-heading-title{font-size:var(--ts-h2);line-height:var(--ts-h2-lh);letter-spacing:var(--ts-h2-ls);font-weight:var(--ts-h2-w);color:#fff;margin:0 0 30px}
.ts-digital-intro .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:#f0d38e;letter-spacing:2.8px}
.elementor-widget.ts-digital-text{font-size:var(--ts-body);line-height:var(--ts-body-lh);color:#e2edef;margin-bottom:25px}
.ts-digital-text p{margin:0}
.ts-digital-row{padding:22px 0;border-bottom:1px solid #d0cdc4}
.ts-digital-system>.ts-digital-row:first-of-type{border-top:1px solid #d0cdc4}
.ts-digital-row .ts-num{flex:0 0 50px}
.ts-digital-row .elementor-widget-heading.ts-num .elementor-heading-title{min-width:38px}
.elementor-widget-heading.ts-digital-h3 .elementor-heading-title{font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);font-weight:var(--ts-h3-w);margin:0 0 9px;color:var(--ink)}
.elementor-widget.ts-digital-p{font-size:var(--ts-body);line-height:var(--ts-body-lh);color:var(--muted);max-width:600px}
.ts-digital-p p{margin:0}
.elementor-widget.ts-keywords{margin-top:10px;color:#8b6e2c;font-size:var(--ts-label);font-weight:var(--ts-label-w);line-height:var(--ts-label-lh);letter-spacing:var(--ts-label-ls);text-transform:uppercase}
.ts-keywords p{margin:0}
.elementor-widget.ts-quote{margin:24px 0 0;padding:0 0 0 22px;border-left:2px solid var(--gold);font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);font-weight:var(--ts-h3-w);color:var(--navy);font-style:normal}
.ts-quote p{margin:0}
@media(max-width:620px){.ts-digital-row .ts-num{flex-basis:40px}}

/* ==========================================================================
   APPROCHE (#approche) — rueda 360° 100 % CSS
   ========================================================================== */
.ts-approach-visual{background:radial-gradient(circle at center,#fffdf8 0%,#f0ece2 72%,#e6dece 100%);overflow:hidden}
.ts-approach-copy{border-left:1px solid rgba(255,255,255,.18)}
.ts-approach-copy .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:#f0d38e;letter-spacing:2.8px}
.elementor-widget-heading.ts-approach-h2 .elementor-heading-title{font-size:var(--ts-h2);line-height:var(--ts-h2-lh);letter-spacing:var(--ts-h2-ls);font-weight:var(--ts-h2-w);color:#fff;margin:0 0 28px}
.elementor-widget.ts-approach-text{color:#dbe8ea;font-size:var(--ts-body);line-height:var(--ts-body-lh)}
.ts-approach-text p{margin:0}
.ts-num-list ul{list-style:none;margin:30px 0 0;padding:0;border-top:1px solid rgba(255,255,255,.25)}
.ts-num-list li{display:flex;align-items:center;gap:18px;padding:20px 0;border-bottom:1px solid rgba(255,255,255,.25);font-size:var(--ts-body);line-height:var(--ts-body-lh);color:#fff}
.ts-num-list li span{display:inline-block;min-width:38px;font-family:var(--ts-font-b);font-size:var(--ts-label);font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);line-height:var(--ts-label-lh);color:var(--gold)}
.ts-wheel .lifecycle-wheel{position:relative;width:min(90%,560px);aspect-ratio:1;margin:auto}
.ts-wheel .lifecycle-wheel::before,.ts-wheel .lifecycle-wheel::after{content:"";position:absolute;z-index:1;background:rgba(13,83,98,.16)}
.ts-wheel .lifecycle-wheel::before{left:50%;top:11%;bottom:11%;width:1px}
.ts-wheel .lifecycle-wheel::after{top:50%;left:11%;right:11%;height:1px}
.ts-wheel .wheel-ring{position:absolute;inset:13%;border-radius:50%;background:conic-gradient(from -45deg,var(--gold) 0 24.5%,var(--teal) 25% 49.5%,var(--teal-dark) 50% 74.5%,#9db8bd 75% 100%);-webkit-mask:radial-gradient(circle,transparent 0 55%,#000 55.5% 74%,transparent 74.5%);mask:radial-gradient(circle,transparent 0 55%,#000 55.5% 74%,transparent 74.5%);filter:drop-shadow(0 12px 18px rgba(13,83,98,.09))}
.ts-wheel .wheel-ring::after{content:"";position:absolute;inset:17%;border:1px solid rgba(13,83,98,.45);border-radius:50%}
.ts-wheel .wheel-core{position:absolute;inset:35%;z-index:3;border-radius:50%;display:grid;place-content:center;text-align:center;background:var(--gold);color:var(--teal-dark);box-shadow:0 15px 35px rgba(13,83,98,.16)}
.ts-wheel .wheel-core small{font-family:var(--ts-font-a);font-size:var(--ts-h2);line-height:.9}
.ts-wheel .wheel-core strong{margin-top:8px;font-size:8px;line-height:1.35;letter-spacing:1.3px;font-family:var(--ts-font-b);font-weight:600}
.ts-wheel .wheel-phase{position:absolute;z-index:2;color:var(--teal-dark);font-size:9px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap;font-family:var(--ts-font-b)}
.ts-wheel .phase-definition{top:2%;left:50%;transform:translateX(-50%)}
.ts-wheel .phase-conception{top:20%;right:-1%;transform:rotate(63deg)}
.ts-wheel .phase-construction{right:-2%;bottom:19%;transform:rotate(-52deg)}
.ts-wheel .phase-exploitation{bottom:2%;left:50%;transform:translateX(-50%)}
.ts-wheel .phase-renovation{left:-2%;bottom:21%;transform:rotate(52deg)}
.ts-wheel .phase-deconstruction{top:20%;left:-2%;transform:rotate(-62deg)}
.ts-wheel .wheel-axis{position:absolute;z-index:5;width:160px;padding:10px 12px;border:1px solid rgba(213,173,92,.65);border-radius:5px;background:rgba(255,253,248,.96);box-shadow:0 10px 24px rgba(13,83,98,.1);display:grid;grid-template-columns:22px 1fr;column-gap:8px;color:var(--teal-dark);font-family:var(--ts-font-b);text-decoration:none}
.ts-wheel a.wheel-axis:hover{border-color:var(--gold);box-shadow:0 14px 30px rgba(13,83,98,.16)}
.ts-wheel .wheel-axis i{grid-row:1/3;width:22px;height:22px;display:grid;place-items:center;border-radius:50%;background:var(--teal);color:var(--gold);font:600 8px/1 var(--ts-font-b);font-style:normal}
.ts-wheel .wheel-axis strong{font-size:11px;line-height:1;text-transform:uppercase;letter-spacing:.8px}
.ts-wheel .wheel-axis em{margin-top:4px;color:#65747a;font-size:7px;line-height:1.3;font-style:normal}
.ts-wheel .axis-strategic{top:7%;left:50%;transform:translate(-50%,-50%)}
.ts-wheel .axis-technical{right:1%;top:50%;transform:translateY(-50%)}
.ts-wheel .axis-digital{bottom:7%;left:50%;transform:translate(-50%,50%)}
.ts-wheel .axis-legal{left:1%;top:50%;transform:translateY(-50%)}
@media(max-width:620px){.ts-wheel .lifecycle-wheel{width:96%}.ts-wheel .wheel-phase{font-size:7px}.ts-wheel .wheel-axis{width:120px;padding:7px 8px;grid-template-columns:18px 1fr}.ts-wheel .wheel-axis i{width:18px;height:18px}.ts-wheel .wheel-axis strong{font-size:8px}.ts-wheel .wheel-axis em{font-size:6px}.ts-wheel .axis-technical{right:-4%}.ts-wheel .axis-legal{left:-4%}}

/* ==========================================================================
   TRAINSTITUTE (#trainstitute)
   ========================================================================== */
.elementor-widget-heading.ts-institute-h2 .elementor-heading-title{color:var(--teal)}
.elementor-widget.ts-institute-intro-text{font-size:var(--ts-intro);line-height:var(--ts-intro-lh);color:var(--muted);max-width:760px}
.ts-institute-intro-text p{margin:0}
.ts-institute-grid{margin-top:58px}
.ts-institute-card{position:relative;transition:transform .25s ease,background-color .25s ease}
.ts-institute-card:hover{z-index:1;transform:translateY(-5px);background-color:var(--ivory)!important}
.elementor-widget.ts-institute-icon{width:76px;height:76px;display:grid;place-items:center;border-radius:50%;background:var(--teal);box-shadow:0 15px 34px rgba(13,83,98,.14)}
.ts-institute-icon svg{width:38px;height:38px;fill:none;stroke:var(--gold);stroke-width:1.55;stroke-linecap:round;stroke-linejoin:round}
.elementor-widget.ts-institute-number{position:absolute;right:28px;top:35px;width:auto}
.elementor-widget-heading.ts-institute-h3 .elementor-heading-title{font-family:var(--ts-font-a);font-size:var(--ts-h3);font-weight:var(--ts-h3-w);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);margin:32px 0 22px;color:var(--ink)}
.ts-institute-h3 a{color:inherit}
.elementor-widget.ts-institute-p{font-size:var(--ts-body);line-height:var(--ts-body-lh);color:var(--muted)}
.ts-institute-p p{margin:0}
.ts-institute-p strong{color:var(--ink);font-weight:600}
.ts-institute-p em{color:var(--ink)}
/* Desde que el CTA sigue el nivel UI (15px) es mas ancho: la fila debe
   poder partirse en vez de desbordar entre 761px y 1250px, donde el
   contenedor del widget se encoge pero el boton mantiene min-width. */
.ts-institute-cta{margin-top:0;flex-wrap:wrap}
.ts-institute-cta .ts-btn{flex:0 0 auto}
.elementor-widget.ts-institute-cta-icon{width:66px;height:66px;display:grid;place-items:center;border:1px solid rgba(213,173,92,.7);border-radius:50%}
.ts-institute-cta-icon svg{width:31px;height:31px;fill:none;stroke:var(--gold);stroke-width:1.55;stroke-linecap:round;stroke-linejoin:round}
.ts-institute-cta .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:var(--gold);margin:0 0 7px}
.elementor-widget-heading.ts-institute-cta-h3 .elementor-heading-title{font-family:var(--ts-font-a);font-size:var(--ts-h3);font-weight:var(--ts-h3-w);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);margin:0;color:#fff}
.ts-institute-cta .ts-btn .elementor-button{min-width:220px;justify-content:space-between}
@media(max-width:760px){.ts-institute-cta .ts-btn{width:100%}.ts-institute-cta .ts-btn .elementor-button{width:100%}}

/* ==========================================================================
   RÉFÉRENCES (#references)
   ========================================================================== */
.ts-project-strip{margin-top:18px;padding:24px 28px;border:1px solid var(--line);text-transform:uppercase;font-size:var(--ts-label);letter-spacing:var(--ts-label-ls)}
.elementor-widget-heading.ts-strip-label .elementor-heading-title{color:var(--gold-dark);font-weight:var(--ts-label-w);font-size:var(--ts-label);letter-spacing:var(--ts-label-ls);text-transform:uppercase;font-family:var(--ts-font-b);white-space:nowrap}
.ts-strip .jet-listing-grid__items{display:flex!important;flex-wrap:wrap;gap:8px 20px!important;grid-template-columns:none!important;justify-content:flex-end;margin:0!important}
.ts-strip .jet-listing-grid__item{width:auto!important;flex:0 0 auto!important;max-width:none!important;padding:0!important;display:flex;align-items:center}
.ts-strip .jet-listing-grid__item:not(:last-child)::after{content:"";width:4px;height:4px;border-radius:50%;background:var(--gold);margin-left:20px;flex:0 0 4px}
.ts-strip-title .jet-listing-dynamic-field__content{font-size:var(--ts-label);font-weight:var(--ts-label-w);text-transform:uppercase;letter-spacing:var(--ts-label-ls);color:var(--ink);white-space:nowrap}
.ts-strip-title a{color:inherit}
@media(max-width:760px){.ts-strip .jet-listing-grid__items{justify-content:flex-start}}

/* ==========================================================================
   CTA FINAL (#contact)
   ========================================================================== */
.ts-cta .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:var(--gold)}
.elementor-widget-heading.ts-cta-title .elementor-heading-title{max-width:24ch;margin:0 auto 36px;text-wrap:balance;color:#fff}

/* ==========================================================================
   FOOTER (Theme Builder → Footer — Site)
   ========================================================================== */
.ts-footer{color:#c4d3d7;font-size:var(--ts-ui);font-weight:400;line-height:var(--ts-body-lh)}
.elementor-widget-heading.ts-footer-small .elementor-heading-title{display:block;margin-bottom:10px;color:var(--gold);font-size:var(--ts-label);font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);text-transform:uppercase;font-family:var(--ts-font-b)}
.elementor-widget-heading.ts-footer-small.dark .elementor-heading-title{color:var(--gold-dark)}
.elementor-widget.ts-footer-text{color:#c4d3d7;font-size:var(--ts-ui);font-weight:400;line-height:var(--ts-body-lh)}
.ts-footer-text p{margin:0}
.elementor-widget.ts-footer-tagline{margin-top:20px;max-width:34ch;color:#8fa6ac;font-size:var(--ts-label)}
.ts-footer-tagline p{margin:0}
.ts-footer-list{list-style:none;margin:0;padding:0}
.ts-footer-list li+li{margin-top:4px}
.ts-footer a{color:#fff;border-bottom:1px solid transparent;transition:border-color .3s,color .3s}
.ts-footer a:hover{border-color:var(--gold);color:#fff}
.ts-footer-trainsights .elementor-widget.ts-footer-text{color:#9fb5ba;font-size:var(--ts-label);letter-spacing:var(--ts-ui-ls)}
.ts-footer-trainsights b{color:#fff;font-weight:600}
.ts-footer-trainsights .ts-text-link .elementor-button{color:var(--gold);border-bottom:0;font-size:var(--ts-label);letter-spacing:var(--ts-label-ls);padding:0}
.ts-footer-trainsights .ts-text-link .elementor-button:hover{color:#fff}
.elementor-widget.ts-footer-legal-text{font-size:var(--ts-label);font-weight:400;line-height:var(--ts-label-lh);letter-spacing:var(--ts-ui-ls);color:#8fa6ac}
.ts-footer-legal-text p{margin:0}

/* ==========================================================================
   ARCHIVOS, SINGLES Y ARTÍCULOS (Theme Builder)
   ========================================================================== */
.ts-archive-head .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:var(--gold)}
.ts-archive-title .ts-archive-h1{color:#fff;margin:0 0 18px;font-family:var(--ts-font-a);font-weight:var(--ts-h1-w);font-size:var(--ts-h1);line-height:var(--ts-h1-lh);letter-spacing:var(--ts-h1-ls)}
.ts-archive-desc .ts-archive-description{color:#dbe8ea;font-size:var(--ts-intro);line-height:var(--ts-intro-lh);max-width:760px}
.ts-archive-desc p{margin:0}
.elementor-widget.ts-archive-desc{color:#dbe8ea;font-size:var(--ts-intro);line-height:var(--ts-intro-lh);max-width:760px}
.ts-single-hero .elementor-widget-heading.ts-eyebrow .elementor-heading-title{color:var(--gold)}
.ts-single-hero .ts-num .jet-listing-dynamic-field__content{display:block;margin-bottom:18px}
.elementor-widget-heading.ts-single-title .elementor-heading-title{color:#fff;max-width:1080px}
.ts-single-lead .jet-listing-dynamic-field__content{font-family:var(--ts-font-b);font-size:var(--ts-intro);font-weight:var(--ts-intro-w);line-height:var(--ts-intro-lh);max-width:760px;margin:22px 0 0;color:#dbe8ea}
.ts-single-hero .ts-ref-kicker .jet-listing-dynamic-field__content{margin-bottom:14px}
.ts-terms.on-dark{margin-top:22px}
.ts-terms.on-dark .jet-listing-dynamic-terms__link{color:var(--gold);font-size:var(--ts-label);text-transform:uppercase;letter-spacing:var(--ts-label-ls);font-weight:var(--ts-label-w);margin-right:14px}
.elementor-widget-heading.ts-article-h1 .elementor-heading-title{margin:18px 0 20px}
.elementor-widget.ts-article-lead{font-family:var(--ts-font-b);font-size:var(--ts-intro);font-weight:var(--ts-intro-w);line-height:var(--ts-intro-lh);color:#3f4f57;margin-bottom:26px}
.ts-article-meta-line .elementor-icon-list-items{font-size:var(--ts-label);text-transform:uppercase;letter-spacing:var(--ts-label-ls);color:var(--gold-dark);font-weight:var(--ts-label-w)}
.ts-article-meta-line a{color:var(--gold-dark)}
.ts-article-cover img{width:100%;height:auto;display:block;margin-bottom:28px}
.ts-article-body{font-size:var(--ts-body);line-height:var(--ts-body-lh);color:var(--ink);max-width:760px}
.ts-article-body p{margin:0 0 20px}
.ts-article-body h2{font-size:var(--ts-h3);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);margin:40px 0 16px}
.ts-article-body h3{font-size:var(--ts-h3);line-height:var(--ts-h3-lh);letter-spacing:var(--ts-h3-ls);margin:32px 0 12px}
.ts-article-body ul,.ts-article-body ol{padding-left:22px;margin:0 0 20px}
.ts-article-body blockquote{margin:28px 0;padding:0 0 0 22px;border-left:2px solid var(--gold);font-family:var(--ts-font-a);font-size:var(--ts-h3);line-height:var(--ts-h3-lh);font-weight:var(--ts-h3-w);color:var(--navy)}
.ts-article-body figure{margin:28px 0}
.ts-article-body figcaption{font-size:var(--ts-label);color:var(--muted);margin-top:8px}
.ts-article-nav{margin-top:40px;padding-top:24px;border-top:1px solid var(--line)}
.ts-pagination .nav-links{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.ts-pagination .page-numbers{padding:10px 14px;border:1px solid var(--line);font-size:var(--ts-label);font-weight:var(--ts-label-w);letter-spacing:var(--ts-label-ls);text-transform:uppercase;color:var(--ink);text-decoration:none}
.ts-pagination .page-numbers.current{background:var(--teal);color:#fff;border-color:var(--teal)}
.elementor-widget.ts-404{text-align:center}
.ts-search .elementor-search-form{max-width:480px;margin:0 auto}

/* Etiqueta del enlace del listing de noticias, localizada por idioma (el label del widget no es traducible) */
.ts-article-link .jet-listing-dynamic-link__label{font-size:0}
.ts-article-link .jet-listing-dynamic-link__label::after{font-size:var(--ts-label);content:"Lire l’article ↗"}
html[lang^="en"] .ts-article-link .jet-listing-dynamic-link__label::after{content:"Read the article ↗"}
html[lang^="es"] .ts-article-link .jet-listing-dynamic-link__label::after{content:"Leer el artículo ↗"}
html[lang^="en"] .ts-article-link .jet-listing-dynamic-link__label::after{content:"Read the article ↗"}
html[lang^="es"] .ts-article-link .jet-listing-dynamic-link__label::after{content:"Leer el artículo ↗"}
