/*
Theme Name: Unicca
Description: Child theme de Impreza con el sistema de diseño del rediseño 2026 de Unicca Builders. Reemplaza al plugin unicca-redesign.
Author: Desarrollo WP
Template: Impreza
Version: 1.0.0
*/

/* ============================================================================
 * Sistema de diseño Unicca 2026. Fuente de verdad: wordpress/design/DESIGN.md
 * y los mockups en wordpress/design/*.html.
 *
 * ORDEN DE CARGA: us-core encola este archivo con el handle `theme-style` en
 * wp_enqueue_scripts prio 18 (us-core/functions/enqueue.php:115), después del
 * CSS del tema (`us-theme`, prio 12). Por eso acá casi no hace falta !important:
 * a igual especificidad, ganamos por orden.
 *
 * La escala tipográfica base (body 400 / h1-h3 Archivo 800 mayúscula) NO vive
 * acá: está en las theme options de Impreza, que es lo que además decide qué
 * pesos se le piden a Google Fonts. Ver CLAUDE.md.
 * ========================================================================= */

/* El mockup renderiza todo con antialiased: sin esto, el texto claro sobre
   fondo oscuro se rasteriza más grueso en macOS y "parece bold" aunque el
   font-weight computado sea el mismo. */
body{ -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; }

:root{
	--u-navy:#0F1C1E;
	--u-mint:#72CCBA;
	--u-mint-dark:#1F9C82;
	/* Era #AAD7C6 (el sage del mockup). El cliente pidió unificar el verde de las
	   bandas con el del header, así que ahora es el mismo mint. Se mantiene el
	   token: nombra "el fondo verde de sección", y las mordidas de los .notch
	   que van sobre esas bandas lo leen para recortar del color correcto. */
	--u-sage:var(--u-mint);
	--u-charcoal:#1A1A1A;
	--u-gray:#848B8D;
	--u-gray-light:#BABABA;
	--u-white:#FFFFFF;
	--u-offwhite:#F7F7F4;
	--u-hairline:#E3E3DE;
	--u-radius-lg:28px;
	--u-radius-md:16px;
}

/* ============================================================================
 * SISTEMA DE DISEÑO EN CSS (antes vivía en las theme options de Impreza).
 *
 * Impreza genera un :root{…} con estas mismas vars a partir de las theme
 * options (us_theme_options_css), y ese CSS carga DESPUÉS que este archivo en
 * el <head>. Por eso se usa `html:root` (especificidad 0,1,1) en vez de `:root`
 * (0,1,0): gana por especificidad sin importar el orden de carga. Resultado: el
 * diseño se aplica solo con importar el theme, sobre un Impreza recién
 * instalado, sin migraciones ni tocar la base.
 *
 * Las fuentes (Archivo + Inter con los pesos correctos) se cargan en
 * functions.php (unicca_fonts), que además saca la hoja de Google del tema.
 * Por eso los pesos que Impreza pediría desde sus options son irrelevantes.
 * ========================================================================= */
html:root{
	/* Cuerpo (Impreza default: peso 100 Thin) */
	--font-weight:400;
	--bold-font-weight:600;
	--line-height:1.6;

	/* Títulos: Archivo 800 mayúscula (Impreza default: Inter 100) */
	--h1-font-family:'Archivo', -apple-system, "Helvetica Neue", sans-serif;
	--h1-font-weight:800;
	--h1-bold-font-weight:800;
	--h1-text-transform:uppercase;
	--h1-letter-spacing:0.03em;
	--h1-line-height:1.1;
	/* h2/h3 heredan familia y transform de h1 (Impreza ya los liga con
	   var(--h1-*)); solo hay que sacarles los pesos propios (200 y 100). */
	--h2-font-weight:var(--h1-font-weight);
	--h2-letter-spacing:0.03em;
	--h2-line-height:1.1;
	--h3-font-weight:var(--h1-font-weight);
	--h3-letter-spacing:0.03em;
	--h3-line-height:1.1;

	/* Colores de contenido y de la nav del header (charcoal, no negro puro) */
	--color-content-heading:#1a1a1a;
	--color-content-heading-grad:#1a1a1a;
	--color-content-text:#1a1a1a;
	--color-header-middle-text:#1a1a1a;
	--color-header-middle-text-hover:#1a1a1a;

	/* Ancho de contenido: 1120 = wrap 1280 con padding lateral 80 (mockup) */
	--site-content-width:1120px;
}

/* Botón por defecto (.us-btn-style_1). Antes salía de la theme option "buttons";
   acá se reproduce el estilo del header del mockup: charcoal radio 8, 13/600,
   hover a #000 con el texto blanco (el default de Impreza invertía a blanco).
   Todo con !important porque el CSS de las options carga después y ganaría por
   orden (sus reglas no llevan !important salvo en color). */
.us-btn-style_1{
	font-size:13px !important; line-height:1.6 !important; font-weight:600 !important;
	text-transform:uppercase !important; letter-spacing:0.06em !important;
	border-radius:8px !important; padding:16px 26px !important;
	background:#1a1a1a !important; border-color:transparent !important; color:#fff !important;
}
.no-touch .us-btn-style_1:hover{ background:#000 !important; border-color:transparent !important; color:#fff !important; }

/* Impreza mete padding-top en los headings dentro de texto corrido; el mockup
   no tiene ninguno en los h3 de componentes. */
.unicca-cap-card h3, .unicca-svc-card h3, .unicca-diff-card h3,
.unicca-structure-item h3, .unicca-team-card h3, .unicca-stage-card h3{ padding-top:0; }

/* Eyebrow -> título: 14px en todo el mockup (.eyebrow{margin-bottom:14px}) */
.l-main .unicca-eyebrow{ margin-bottom:14px; }

/* Título con el estilo de heading aplicado a un elemento que no es h1-h3 */
.unicca-h{
	font-family:'Archivo', -apple-system, "Helvetica Neue", sans-serif;
	font-weight:800;
	text-transform:uppercase;
	letter-spacing:0.03em;
	line-height:1.1;
}
.unicca-body{ font-family:'Inter', -apple-system, "Helvetica Neue", sans-serif; }

/* Eyebrow / label */
.unicca-eyebrow{
	font-size:12px; font-weight:600; letter-spacing:0.14em; text-transform:uppercase;
	color:var(--u-mint-dark); display:inline-block;
}
.unicca-on-dark .unicca-eyebrow,
.unicca-eyebrow.on-dark{ color:var(--u-mint); }

/* Componente firma: foto con esquina "mordida" (notch) */
.unicca-notch{ display:block; position:relative; border-radius:var(--u-radius-lg); overflow:hidden; isolation:isolate; }
.unicca-notch::after{
	content:""; position:absolute; width:44px; height:44px; border-radius:50%;
	background:var(--u-notch-bg, var(--u-white)); z-index:2; top:0; right:0; transform:translate(50%,-50%);
}
.unicca-diff-card .unicca-notch::after{ width:36px; height:36px; }
.unicca-structure-item .unicca-notch::after{ width:36px; height:36px; }
.unicca-notch.notch-bl::after{ top:auto; right:auto; bottom:0; left:0; transform:translate(-50%,50%); }
.unicca-notch img{ display:block; width:100%; height:100%; object-fit:cover; }
.notch-on-navy{ --u-notch-bg:var(--u-navy); }
.notch-on-offwhite{ --u-notch-bg:var(--u-offwhite); }
.notch-on-sage{ --u-notch-bg:var(--u-sage); }

/* Botones */
.unicca-btn{
	display:inline-flex; align-items:center; gap:8px;
	font-family:'Inter', sans-serif; font-weight:600; font-size:14px; letter-spacing:0.02em;
	padding:15px 30px; border-radius:8px; border:1.5px solid transparent;
	cursor:pointer; transition:background .2s ease, color .2s ease, border-color .2s ease;
}
.unicca-btn.btn-dark{ background:var(--u-navy); color:var(--u-white); }
.unicca-btn.btn-dark:hover{ background:var(--u-charcoal); }
.unicca-btn.btn-outline{ background:transparent; color:var(--u-mint); border-color:var(--u-mint); border-radius:100px; }
/* Tinte mint, el texto sigue mint (mockup .btn-outline:hover). Antes lo rellenaba
   de mint sólido con texto navy: era un desvío mío. */
.unicca-btn.btn-outline:hover{ background:rgba(114,204,186,0.1); color:var(--u-mint); }
.unicca-btn.btn-pill{ border-radius:100px; padding:17px 34px; }

/* Fondos de sección */
.unicca-bg-navy{ background:var(--u-navy); color:var(--u-white); }
.unicca-bg-sage{ background:var(--u-sage); }
.unicca-bg-offwhite{ background:var(--u-offwhite); }

/* Texto sobre fondos oscuros */
.unicca-on-dark,
.unicca-on-dark p{ color:rgba(255,255,255,0.72); }
.unicca-on-dark h1,
.unicca-on-dark h2,
.unicca-on-dark h3{ color:var(--u-white); }
/* El <p> del eyebrow (wpautop) debe heredar el mint del wrapper, no el color
   de cuerpo que .unicca-on-dark p le pone directo al <p>. */
.l-main .unicca-eyebrow p{ color:inherit; }

/* ===================== HEADER ===================== */
/* Impreza fija el tamaño de la nav con especificidad alta */
.l-header .w-nav-anchor{ font-size:14px !important; font-weight:600 !important; text-transform:uppercase; letter-spacing:0.04em; }
/* .btn-header del mockup: 13/600 ls .06em, padding 16/26, gap 10 (el fondo, el
   radio y el hover los da la regla .us-btn-style_1 de más arriba) */
.l-header .w-btn{
	font-size:13px !important; font-weight:600 !important; letter-spacing:0.06em;
	padding:16px 26px !important; gap:10px;
}
/* Separación entre items de nav: el mockup usa gap 44 (los anchors de Impreza
   se tocan y el aire lo da su padding lateral: 22 + 22 = 44) */
@media (min-width:901px){
	.l-header .w-nav-list.level_1 > .menu-item > .w-nav-anchor{ padding-left:22px !important; padding-right:22px !important; }
}

/* ===================== HOME ===================== */
/* Hero (mockup "locked"): min-height 640, columna de texto 42% con padding
   180/70/70 y contenido centrado; la foto compuesta llena los 640 de alto.
   Impreza mete un offset de 110px bajo el header fijo: fuera (el padding-top
   de 180 de la columna ya lo contempla, como en el mockup). */
#hero .l-section-h{ padding-top:0 !important; }
@media (min-width:901px){
	#hero .g-cols{ grid-template-columns:42fr 58fr; }
	#hero .g-cols > .wpb_column:first-child{ padding:180px 70px 70px !important; }
	#hero .g-cols > .wpb_column:last-child{ padding:0 !important; }
	#hero .w-image, #hero .w-image img{ height:640px; width:100%; object-fit:cover; display:block; }
}
#hero .w-separator{ display:none; }
#hero h1{ font-size:38px; line-height:1.15; margin-bottom:22px; }
#hero .wpb_text_column:not(.unicca-eyebrow) p{ max-width:400px; }
/* Mobile/tablet: la regla de padding 180px es min-width:901px, así que acá no
   aplica y el hero queda pegado arriba (el .l-section-h padding-top:0 le sacó el
   offset de header). El header fijo mide 110px en tablet y 80px en phone (cambia
   en ~600): se despeja con ~50 de aire en los dos casos. */
@media (max-width:900px){
	#hero .g-cols > .wpb_column:first-child{ padding-top:160px !important; padding-bottom:50px !important; }
}
@media (max-width:600px){
	#hero h1{ font-size:30px; }
	#hero .g-cols > .wpb_column:first-child{ padding-top:130px !important; }
	/* Logo del header en phone: Impreza lo genera en 40px (estado inicial) y lo
	   achica a 20px en sticky. Los 40px se veían demasiado grandes/anchos arriba
	   de todo; se baja a 30px. NO se toca .l-header.sticky .ush_image_1 (queda en
	   20px), así el efecto de shrink al scrollear se conserva. Especificidad 0,2,0
	   + !important para ganarle a la regla de Impreza (.ush_image_1, 0,1,0 !imp). */
	.l-header .ush_image_1{ height:30px !important; }
}
#approach h2{ font-size:28px; }
#what-we-do h2{ font-size:26px; }
#what-we-do .w-separator{ display:none; }
#what-we-do .unicca-eyebrow{ margin-bottom:14px; }
/* Contact (mockup .contact-section): padding 90 0, grid 1fr/1.2fr gap 60.
   #section-18 es el id que el builder le puso a la sección de contacto. */
#section-18{ padding-top:90px !important; padding-bottom:90px !important; }
@media (min-width:901px){
	#section-18 .g-cols{ grid-template-columns:1fr 1.2fr; gap:60px; }
}
/* Contact: en el mockup el heading es <h2>, pero en el sitio el constructor lo
   arma como <p>, así que NO hereda la regla h1-h3 del tema: Archivo 800 explícito. */
.l-main .us_custom_07bb9a55,
.l-main .us_custom_07bb9a55 *{
	font-family:'Archivo', sans-serif !important; font-weight:800 !important; text-transform:uppercase !important;
	letter-spacing:0.02em; font-size:28px !important; line-height:1.1 !important;
}
/* ---- Texto de cuerpo, por sección ----
 * El mockup NO fija un tamaño global de <p>: lo hace sección por sección
 * (.hero-left p y .approach p en 14.5, .page-hero p en 14.5/15).
 *
 * SIEMPRE fijar line-height junto al font-size: el builder emite reglas como
 * `.us_custom_XXXX{font-size:16px!important;line-height:26px!important}` sobre
 * el WRAPPER .wpb_text_column, y el <p> las HEREDA. Pisar solo el font-size
 * deja el interlineado viejo (26 en vez de 23.2) y descuadra el alto.
 *
 * Dos exclusiones que impone el DOM del constructor:
 *  - .unicca-eyebrow: la clase va en el wrapper y el <p> hereda los 12px. Un
 *    selector con id le gana a esa herencia y agrandaría el eyebrow.
 *  - los <p> con los que wpautop envuelve un botón.
 */
#hero .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)),
#approach .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)),
#about-hero .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)){
	font-size:14.5px; line-height:1.6;
}
#svc-hero .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)),
#ourwork-hero .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)){
	font-size:15px; line-height:1.6;
}
/* El mockup afina el color del cuerpo por sección: .hero-left p en 0.75,
   .approach p en 0.7 (no el 0.72 general de .unicca-on-dark), y las bajadas de
   los page-hero claros de Services/Our Work en gris. */
#hero .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)){ color:rgba(255,255,255,0.75); }
#approach .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)){ color:rgba(255,255,255,0.7); }
#svc-hero .wpb_text_column:not(.unicca-eyebrow) p,
#ourwork-hero .wpb_text_column:not(.unicca-eyebrow) p{ color:var(--u-gray); }

/* Bajada de Contact (mockup: .contact-grid > div:first-child p) */
/* line-height explícito: el constructor le fija 28px a esta columna. */
.l-main .us_custom_d526e00a p{ font-size:14.5px; line-height:1.6; color:var(--u-gray); max-width:340px; }

/* Botones oscuros al navy del sistema. us_custom_60e9caca es una clase de hash
   COMPARTIDA (también la usa una columna de contacto): acotar por .w-btn.
   "See all projects" del mockup: .btn .btn-dark .btn-pill = 14/600 ls .02em,
   padding 17/34, radius 100, borde 1.5 transparente y line-height del body (1.6,
   de ahí sus 58px de alto; con line-height:normal quedaba en 51).
   El hover va aparte SÍ o SÍ: el !important del fondo pisa también el :hover del
   tema y el botón se quedaba sin efecto (el del header sí lo tenía).
   Efecto unificado con el header (pedido del cliente): oscurecen a #000 con el
   texto en blanco. El mockup los tenía distintos (btn-dark:hover -> charcoal). */
.l-main button.w-btn{ background-color:var(--u-navy) !important; }
.l-main button.w-btn:hover{ background-color:#000 !important; }
.w-btn.us_custom_60e9caca{
	background-color:var(--u-navy) !important; text-transform:uppercase !important;
	font-size:14px !important; font-weight:600 !important; letter-spacing:0.02em !important;
	padding:17px 34px !important; border-radius:100px !important; line-height:1.6 !important;
	border:1.5px solid transparent !important; gap:8px;
}
.w-btn.us_custom_60e9caca:hover{ background-color:#000 !important; }
/* Featured Projects: fotos full-bleed, franja de 280 de alto (mockup) */
#us_grid_1{ width:100vw !important; max-width:100vw !important; margin-left:calc(50% - 50vw) !important; }
#us_grid_1 .w-grid-item-h, #us_grid_1 .w-grid-item-h > a{ height:280px; display:block; }
#us_grid_1 img{ height:280px !important; width:100%; object-fit:cover; }
/* El chip "FEATURED PROJECTS" que iba arriba de la grilla se eliminó a pedido del
   cliente (primero solo en mobile, después también en desktop). Se sacó el
   us_vwrapper del contenido de la Home, así que las reglas que lo estilaban
   (.us_custom_56c50a3a) ya no están acá: no quedan huérfanas apuntando a una
   clase de hash que además podría reasignarse a otro elemento. */
.l-main section.us_custom_bd99e8a8{ padding-top:50px !important; }
.l-main section.us_custom_bd99e8a8 .w-separator{ display:none; }

/* ---- Our Approach: geometría exacta del mockup ----
 * .approach-grid: 1.1fr/1fr gap 60 (Impreza trae 7/12-5/12 gap 48);
 * h2 mb 18, p max-width 460 mb 16, eyebrow mb 14, fotos height 230 gap 20.
 * Los w-separator del constructor se anulan: el ritmo lo dan los márgenes. */
@media (min-width:901px){
	#approach .g-cols .g-cols:has(.unicca-photo-pair){ grid-template-columns:1.1fr 1fr; gap:60px; }
}
#approach .w-separator{ display:none; }
#approach .unicca-eyebrow{ margin-bottom:14px; }
#approach h2{ margin-bottom:18px; }
#approach .wpb_text_column:not(.unicca-eyebrow) p:not(:has(> .unicca-btn)){ max-width:460px; margin-bottom:16px; }
#approach{ padding-bottom:0 !important; }

.unicca-photo-pair > .vc_column-inner{ display:flex; gap:20px; align-items:stretch; }
.unicca-photo-pair .w-image{ flex:1 1 0; margin:0; min-width:0; }
.unicca-photo-pair .unicca-notch{ width:100%; height:230px; }
@media (max-width:600px){ .unicca-photo-pair > .vc_column-inner{ flex-direction:column; } }

/* ---- Franja de métricas (mockup .stats-row: margin-top 70, padding 44 0,
   grid de tercios SIN gap: las divisorias las dan los border-left) ---- */
/* Solo la home: la franja de About (#about-stats) es una fila plana sin borde. */
#approach .g-cols.unicca-stats-row{ margin-top:70px; border-top:1px solid rgba(255,255,255,0.15); padding:44px 0; gap:0; }
#about-stats .g-cols{ gap:0; }
.unicca-statcol .vc_column-inner{ text-align:center; border-left:1px solid rgba(255,255,255,0.15); padding:0 20px; }
.unicca-statcol.first .vc_column-inner{ border-left:none; }
/* Los separadores son verticales porque en desktop las tres métricas van en fila.
   Impreza las apila a 600px y ahí el borde quedaba como dos líneas sueltas a la
   izquierda del "+12" y del "60%" que la primera no tenía: eso es lo que el
   cliente vio como el 60% desalineado. Apiladas, el separador va arriba. */
@media (max-width:600px){
	/* El separador necesita el mismo aire de los dos lados. Con padding solo
	   arriba, la línea quedaba a 23px del número de abajo pero pegada al label
	   de la métrica anterior (0px). El padding-bottom lo empareja. */
	.unicca-statcol .vc_column-inner{
		border-left:none;
		border-top:1px solid rgba(255,255,255,0.15);
		padding:22px 20px;
	}
	.unicca-statcol.first .vc_column-inner{ border-top:none; padding-top:0; }
	/* El aire entre el botón y las métricas mide 138px con los valores de
	   desktop (70 de margen + 44 de padding). En una columna eso es una franja
	   negra vacía de casi media pantalla: el cliente la marcó. Acá se recorta a
	   la mitad, manteniendo la separación entre los dos bloques. */
	#approach .g-cols.unicca-stats-row{ margin-top:24px; padding:20px 0 0; }
	#approach{ padding-bottom:40px !important; }
}
/* Sin line-height propio: el mockup (.stat .num) hereda el 1.6 del body. */
.unicca-stat-num{ font-family:'Archivo', sans-serif; font-weight:800; font-size:34px; color:var(--u-mint); }
.unicca-stat-label{ font-size:12.5px; color:rgba(255,255,255,0.65); margin-top:6px; }

/* ---- What We Do ---- */
.unicca-cap-grid{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-top:40px; }
/* Contenido centrado en columna (pedido del cliente, desvío del mockup, que las
   tenía en fila con el icono a la izquierda y el texto alineado a izquierda).
   El icono pasa arriba: dejarlo al costado con el texto centrado descuadra el
   eje. Mismo formato que las .unicca-svc-card de Services. */
.unicca-cap-card{
	background:var(--u-white); border:1.5px solid var(--u-mint); border-radius:16px;
	padding:30px 34px; display:flex; flex-direction:column; gap:14px;
	align-items:center; text-align:center;
}
.unicca-cap-card .unicca-dot{ width:34px; height:34px; border-radius:50%; background:var(--u-mint); flex-shrink:0; }
/* Icono real de capability (reemplaza el .dot). Los PNG son line-art con
   distinto aspect ratio (la lupa es ancha, el resto cuadrado): object-fit
   contain los encuadra sin deformar. Color natural (charcoal); en mint las
   líneas finas se lavarían sobre el fondo blanco. El .dot queda de fallback. */
.unicca-cap-card .unicca-cap-icon,
.unicca-svc-card .unicca-cap-icon{ width:46px; height:46px; object-fit:contain; flex-shrink:0; display:block; }
.unicca-svc-card .unicca-cap-icon{ margin-bottom:16px; }
/* Las card h3 del mockup NO tocan font-family ni font-weight: heredan Archivo
   800 de la regla h1-h3. Solo bajan el tamaño y sacan mayúscula/tracking. */
.unicca-cap-card h3{
	text-transform:none; letter-spacing:0; font-size:16px; color:var(--u-charcoal); margin:0 0 6px;
}
.unicca-cap-card p{ font-size:13px; color:var(--u-gray); margin:0; }
@media (max-width:600px){ .unicca-cap-grid{ grid-template-columns:1fr; } }

/* ========================= ABOUT ========================= */
#about-hero h1{ font-size:36px; }
#why-unicca h2, #our-team h2{ font-size:26px; }
#why-unicca h2 + p, #our-team h2 + p{ font-size:14px; color:var(--u-gray); }
/* !important: el CSS generado por el builder trae paddings con !important */
#why-unicca, #structured, #about-stats, #our-team{ padding-top:80px !important; padding-bottom:80px !important; }
/* Page hero (mockup About: padding 220 0 70; el offset de header de Impreza va a 0) */
#about-hero .l-section-h{ padding-top:0 !important; }
#about-hero{ padding-top:220px !important; padding-bottom:70px !important; }
#about-hero h1{ margin-bottom:20px; }
#about-hero .wpb_text_column:not(.unicca-eyebrow) p{ max-width:640px; margin-bottom:14px; }
/* Ritmo medido en el mockup: h2 -> sub 7, sub (max-width 600, mb 40) -> grid (mt 0) */
#why-unicca h2, #our-team h2{ margin-bottom:10px; }
#why-unicca h2 + p{ max-width:600px; margin-bottom:40px; }
#our-team h2 + p{ margin-bottom:40px; }
#about-hero .w-separator, #why-unicca .w-separator, #structured .w-separator,
#our-team .w-separator, #about-stats .w-separator{ display:none; }

.unicca-hero-h .l1{ color:var(--u-mint); display:block; }
.unicca-hero-h .l2{ color:var(--u-white); display:block; }
/* .unicca-lead no lleva peso ni color propios: el .page-hero p del mockup es
   400 y toma el color de .unicca-on-dark (blanco 0.72). */

/* Why Unicca (diferenciales) */
.unicca-diff-grid{ display:grid; grid-template-columns:1fr 1fr; gap:24px; }
.unicca-diff-card{ background:var(--u-offwhite); border-radius:18px; padding:26px; display:flex; gap:20px; align-items:flex-start; }
.unicca-diff-card .w-image,
.unicca-diff-card .unicca-notch{ width:96px; height:96px; flex-shrink:0; margin:0; }
.unicca-diff-card h3{
	text-transform:none; letter-spacing:0; font-size:15.5px; color:var(--u-charcoal);
	margin:0 0 6px; display:flex; align-items:center; gap:10px;
}
.unicca-diff-card h3 .unicca-dot{ width:12px; height:12px; border-radius:50%; background:var(--u-mint); flex-shrink:0; }
.unicca-diff-card p{ font-size:12.5px; color:var(--u-gray); line-height:1.5; margin:0; }

/* How We're Structured (sage) */
.unicca-structure-tag{
	display:inline-block; background:rgba(255,255,255,0.5); border:1.5px solid rgba(15,28,30,0.15);
	color:var(--u-navy); font-size:11px; font-weight:700; letter-spacing:0.08em; text-transform:uppercase;
	padding:10px 22px; border-radius:100px;
}
/* Bajada debajo del titular de la sección. Hoy trae un lorem de placeholder:
   el copy real lo manda el cliente. */
.unicca-structure-lead{
	font-size:14.5px; line-height:1.6; color:rgba(15,28,30,0.75);
	max-width:560px; margin:18px 0 0;
}
.unicca-structure-grid{ display:grid; grid-template-columns:1fr 1fr; gap:30px 60px; margin-top:36px; }
.unicca-structure-item{ display:flex; gap:20px; align-items:flex-start; }
/* 88px, no los 56 del mockup: a ese tamaño las fotos no se leían (pedido del
   cliente). El .unicca-notch mantiene la mordida proporcional vía su ::after. */
.unicca-structure-item .w-image,
.unicca-structure-item .unicca-notch{ width:88px; height:88px; flex-shrink:0; margin:0; }
.unicca-structure-item .num{ font-family:'Archivo', sans-serif; font-weight:800; font-size:12px; color:var(--u-navy); opacity:0.55; }
.unicca-structure-item h3{
	text-transform:none; letter-spacing:0; font-size:15px; color:var(--u-navy); margin:2px 0 4px;
}
/* Sin line-height propio: el mockup lo deja heredar del body (1.6). */
.unicca-structure-item p{ font-size:12.5px; color:rgba(15,28,30,0.7); margin:0; }

/* Our Team */
.unicca-team-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:22px; }
.unicca-team-card{ background:var(--u-offwhite); border-radius:16px; padding:24px; }
/* Foto del equipo al doble del .dot del mockup (80 en vez de 40): pedido del
   cliente, la card queda ~40px más alta que el mockup. El .dot mantiene la
   misma caja como fallback si se agrega una persona sin foto. */
.unicca-team-card .unicca-dot,
.unicca-team-card .unicca-team-photo{ width:80px; height:80px; border-radius:50%; display:block; margin-bottom:14px; }
.unicca-team-card .unicca-dot{ background:var(--u-mint); }
.unicca-team-card .unicca-team-photo{ object-fit:cover; object-position:center top; }
.unicca-team-card h3{
	text-transform:none; letter-spacing:0; font-size:14.5px; color:var(--u-charcoal); margin:0;
}
.unicca-team-card .role{ font-size:10.5px; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--u-mint-dark); margin:2px 0 10px; }
.unicca-team-card .bio{ font-size:12.5px; color:var(--u-gray); margin:0 0 12px; line-height:1.5; }
.unicca-team-card .source{ font-size:10px; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--u-gray-light); }

@media (max-width:900px){
	.unicca-diff-grid, .unicca-structure-grid{ grid-template-columns:1fr; }
	.unicca-team-grid{ grid-template-columns:1fr 1fr; }
}
@media (max-width:600px){ .unicca-team-grid{ grid-template-columns:1fr; } }

/* ========================= SERVICES ========================= */
#svc-hero h1{ font-size:32px; max-width:680px; }
#svc-whatwedo h2, #stage-by-stage h2{ font-size:24px; }
/* Page hero (mockup Services: padding 230 0 60) */
#svc-hero .l-section-h{ padding-top:0 !important; }
#svc-hero{ padding-top:230px !important; padding-bottom:60px !important; }
#svc-hero .wpb_text_column:not(.unicca-eyebrow) p{ max-width:600px; }
#svc-hero .w-separator, #svc-whatwedo .w-separator, #stage-by-stage .w-separator{ display:none; }
.unicca-mint-h h2{ color:var(--u-mint); }

.unicca-svc-grid{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-top:34px; }
/* Contenido centrado, igual que las .unicca-cap-card de la Home: son las mismas
   cuatro capabilities y tienen que leerse igual en las dos páginas.
   Acá alcanza con text-align + centrar el icono: la card ya venía en bloque con
   el icono arriba, no en fila como la de Home (que sí necesitó pasar a columna). */
.unicca-svc-card{
	background:var(--u-white); border:1.5px solid var(--u-mint); border-radius:16px;
	padding:30px 34px; text-align:center;
}
.unicca-svc-card .unicca-dot{ width:34px; height:34px; border-radius:50%; background:var(--u-mint); display:block; margin-bottom:16px; }
/* Los dos son display:block: sin margin auto el text-align no los mueve. */
.unicca-svc-card .unicca-dot,
.unicca-svc-card .unicca-cap-icon{ margin-left:auto; margin-right:auto; }
.unicca-svc-card h3{
	text-transform:none; letter-spacing:0; font-size:16px; color:var(--u-charcoal); margin:0 0 8px;
}
.unicca-svc-card p{ font-size:13px; color:var(--u-gray); line-height:1.55; margin:0; }

/* Stage by Stage (navy) */
.unicca-stage-grid{ display:grid; grid-template-columns:1fr 1fr; gap:40px; margin-top:44px; }
.unicca-stage-card .w-image,
.unicca-stage-card .unicca-notch{ height:320px; margin:0 0 22px; display:block; }
/* Reveal al scroll: cada card entra desplazada desde su lateral, una después de
   la otra (pedido del cliente, en reemplazo del zoom al hover).
   El estado oculto cuelga de .unicca-js en el <html>, que pone js/unicca-reveal.js
   desde el head antes del primer paint. Sin JS (o sin IntersectionObserver, o con
   prefers-reduced-motion) no hay clase y las cards quedan visibles: el efecto es
   progresivo, nunca esconde contenido a la espera de un script.
   El desfase lo da el nth-child: la columna izquierda arranca y la derecha entra
   140ms después, así la fila se lee de a una y no como un bloque. */
.unicca-js .unicca-stage-card{
	opacity:0;
	transition:opacity .7s ease, transform .7s cubic-bezier(.2,.7,.2,1);
	will-change:opacity, transform;
}
.unicca-js .unicca-stage-card:nth-child(odd){ transform:translateX(-48px); }
.unicca-js .unicca-stage-card:nth-child(even){ transform:translateX(48px); transition-delay:.14s; }
.unicca-js .unicca-stage-card.is-visible{ opacity:1; transform:none; }
/* En mobile la entrada es DESDE ABAJO, no desde el lateral.
   Con una sola columna la card mide 342 de un viewport de 390, así que los 48px
   de desplazamiento lateral la empujan fuera de la pantalla: el número de etapa
   quedaba entero afuera y la foto y el texto se veían cortados (reportado por el
   cliente en Safari iPhone, donde además se puede arrastrar en horizontal).
   En desktop el desplazamiento lateral sí entra: la card mide 548 y el grid tiene
   aire a los costados. */
@media (max-width:900px){
	.unicca-js .unicca-stage-card:nth-child(odd),
	.unicca-js .unicca-stage-card:nth-child(even){ transform:translateY(28px); transition-delay:0s; }
}
/* Red de seguridad: aunque el desplazamiento ya no se sale del viewport, la
   sección recorta cualquier desborde horizontal en vez de generar scroll lateral.
   Va en la sección (full-bleed) y no en el grid, para no cortar la entrada
   lateral de las cards en desktop. */
#stage-by-stage{ overflow-x:clip; }
.unicca-stage-card .num{ font-family:'Archivo', sans-serif; font-weight:800; font-size:13px; color:var(--u-mint); }
.unicca-stage-card h3{
	text-transform:none; letter-spacing:0; font-size:16px; color:var(--u-white); display:inline;
	margin-left:5px; /* 10 del mockup menos ~5 del text node que wpautop deja entre los spans */
}
.unicca-stage-card p{ font-size:12.5px; color:#B9C4C0; margin-top:10px; max-width:520px; }
@media (max-width:900px){ .unicca-svc-grid, .unicca-stage-grid{ grid-template-columns:1fr; } }

/* ========================= OUR WORK ========================= */
#ourwork-hero h1{ font-size:34px; max-width:640px; }
/* Page hero (mockup Our Work: padding 230 0 60) */
#ourwork-hero .l-section-h{ padding-top:0 !important; }
#ourwork-hero{ padding-top:230px !important; padding-bottom:60px !important; }
/* Hero y filtros centrados (pedido del cliente; el mockup los tenía a la
   izquierda como el resto de los page-hero). Los max-width necesitan el margin
   auto: sin eso el bloque sigue anclado a la izquierda aunque el texto centre. */
#ourwork-hero{ text-align:center; }
#ourwork-hero h1{ margin-left:auto; margin-right:auto; }
#ourwork-hero .wpb_text_column:not(.unicca-eyebrow) p{ max-width:600px; margin-left:auto; margin-right:auto; }
#ourwork-hero .w-separator, #ourwork-grid .w-separator{ display:none; }
#ourwork-grid{ padding-top:0 !important; padding-bottom:70px !important; }

/* Los filtros van sobre la banda offwhite del hero, no sobre el blanco del grid
   (mockup .filters{ background:offwhite; padding:0 0 50px }). Sin esto los pills
   quedan pegados al borde donde el offwhite corta con el blanco.
   Fondo full-bleed a 100vw manteniendo los pills alineados al contenido; los
   50px de aire quedan abajo (los 60 de arriba los da el padding del hero). */
.unicca-filter-row{
	display:flex; gap:12px; flex-wrap:wrap; justify-content:center;
	background:var(--u-offwhite);
	width:100vw; margin-left:calc(50% - 50vw);
	padding:0 calc(50vw - 50% + 0px) 50px calc(50vw - 50%);
	margin-bottom:10px; /* mockup: 50 offwhite (padding) + 10 blanco = 60 al grid */
	box-sizing:border-box;
}
.unicca-filter-pill{
	display:inline-flex; align-items:center; gap:8px; padding:12px 22px; border-radius:100px;
	border:1.5px solid var(--u-hairline); font-family:'Inter', sans-serif; font-size:13px; font-weight:600;
	color:var(--u-charcoal); background:var(--u-white); cursor:pointer;
}
.unicca-filter-pill .count{ color:var(--u-gray); font-weight:500; }
.unicca-filter-pill.active{ background:var(--u-mint); border-color:var(--u-mint); color:var(--u-navy); }
.unicca-filter-pill.active .count{ color:var(--u-navy); opacity:0.7; }
.unicca-proj-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:26px; }
.unicca-proj-card{ display:block; color:inherit; }
.unicca-proj-card .unicca-notch{ height:210px; margin-bottom:14px; }
/* min-height de 2 líneas: las direcciones reales son más largas que las
   simuladas del mockup y algunas envuelven. Sin reservar el alto, la card que
   envuelve estira su fila del grid y deja a las de 1 línea con un hueco abajo.
   Reservando 2 líneas todas las cards miden igual y la grilla queda pareja. */
.unicca-proj-addr{
	font-family:'Inter', sans-serif; font-weight:600; font-size:14px; color:var(--u-charcoal);
	min-height:3.2em; /* 2 líneas al line-height 1.6 heredado del body (como el mockup) */
}
.unicca-proj-card[hidden]{ display:none; }
/* mockup .gap-note: margin-top 40 (traía 36), 12.5px gris, borde arriba, pad 20 */
.unicca-proj-note{ margin-top:40px; font-size:12.5px; color:var(--u-gray); border-top:1px solid var(--u-hairline); padding-top:20px; }
@media (max-width:1080px){ .unicca-proj-grid{ grid-template-columns:1fr 1fr; } }
@media (max-width:640px){ .unicca-proj-grid{ grid-template-columns:1fr; } }

/* ============ FORMULARIO DE CONTACTO ============ */
/* UNA sola card. El padding total debe ser 36 (mockup): el padding vive en la
   columna Y en .vc_column-inner y SE SUMA, así que la columna va a 0. */
.l-main .wpb_column.us_custom_e5cabf0a{
	padding:0 !important;
	border-radius:20px;
	border:1px solid var(--u-hairline);
	box-shadow:0 20px 50px rgba(0,0,0,0.08);
}
.l-main .wpb_column.us_custom_e5cabf0a > .vc_column-inner{
	padding:36px !important; border:0; border-radius:0; box-shadow:none; background:transparent;
}
.l-main .w-form input:not([type=submit]):not([type=hidden]),
.l-main .w-form textarea{
	border:1.5px solid var(--u-hairline) !important; border-radius:10px !important;
	padding:14px 16px !important; font-family:'Inter', sans-serif; font-size:14px !important;
	color:var(--u-charcoal); background:#fff; box-shadow:none !important;
	line-height:normal !important; /* Impreza forzaba 42px -> input de 72px; el mockup da 47px */
}
/* Impreza fija min-height 42px en los inputs; el mockup no tiene mínimo */
.l-main .w-form input:not([type=submit]):not([type=hidden]){ min-height:0 !important; }
/* Impreza fija height: calc(--inputs-height * 3) = 126px; el mockup queda en 100 */
.l-main .w-form textarea{ min-height:100px !important; height:auto !important; }
/* gap textarea -> boton: 28 medido en el mockup */
.l-main .w-form .w-form-row.for_textarea{ margin-bottom:28px; }
.l-main .w-form input:focus, .l-main .w-form textarea:focus{ border-color:var(--u-mint) !important; }
.l-main .w-form button.w-btn{
	width:100% !important; justify-content:center; border-radius:10px !important;
	padding:15px 30px !important; background-color:var(--u-navy) !important;
	font-size:14px !important; font-weight:600 !important; letter-spacing:0.02em;
	line-height:normal !important; border:1.5px solid transparent !important;
}
/* El hover va acá y no en la regla genérica de más arriba: aquella tiene la
   MISMA especificidad (0,3,1) y también !important, así que ganaba ésta por
   estar después en el archivo y el Send se quedaba sin efecto. */
.l-main .w-form button.w-btn:hover{ background-color:#000 !important; }

/* ============ PAGE-HERO EN MOBILE ============
 * Los page-hero de About, Services y Our Work llevan padding-top 220-230px, que
 * es el aire del mockup en desktop (despeja el header fijo). En mobile eso dejaba
 * 154px de hueco vacío entre el header (80px) y el primer titular (pedido del
 * cliente: pegarlo al header como la captura ideal). 110 = 80 del header + 30 de
 * aire. No toca el hero de la Home, que no está en el pedido. */
@media (max-width:600px){
	#about-hero, #svc-hero, #ourwork-hero{ padding-top:110px !important; }
}

/* ============ FOOTER (propio del theme, réplica del mockup) ============ */
/* El markup lo imprime functions.php en el hook us_before_footer. El
   <footer class="l-footer"> de Impreza queda vacío (el filtro
   us_get_page_area_id anula el page block) y se oculta acá. */
.l-footer{ display:none !important; }

.unicca-ftr{ background:#050505; color:rgba(255,255,255,0.75); padding:64px 0 28px; }
.unicca-ftr .ftr-wrap{ max-width:1280px; margin:0 auto; padding:0 80px; }
.unicca-ftr .footer-top{ display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:40px; padding-bottom:40px; }
/* Logo del footer. Estaba en 37.5px (25% menos que el del header); el cliente
   lo vio "demasiado grande" y pidió achicarlo bastante más -> 27px. */
.unicca-ftr .ftr-logo{ height:27px; width:auto; display:block; margin-bottom:18px; }
/* Mobile: el header sticky de Impreza achica su logo a 20px. Como el footer solo
   se ve scrolleado (o sea con el header ya sticky), se baja el logo del footer a
   ese mismo 20px para que queden iguales. El header queda con su comportamiento
   natural. */
@media (max-width:600px){
	.unicca-ftr .ftr-logo{ height:18px; }
}
/* Inter 600, NO Archivo: el mockup solo usa Archivo en h1-h3, y h4 hereda el
   cuerpo. Sin esto toma el h4 del tema (Archivo 800 vía var(--h1-font-weight)). */
.unicca-ftr .footer-col h4{
	font-family:'Inter', sans-serif; font-size:14px; letter-spacing:0.02em;
	color:var(--u-mint); font-weight:600; margin:0 0 18px; text-transform:uppercase;
	line-height:1.6; /* el h4 del tema hereda 1.1 de --h1; el mockup queda en el 1.6 del body */
}
/* El mockup lo dejaba heredar los 16px del footer; el cliente lo pidió al
   tamaño de los otros textos. 14px queda entre los 15 de las filas de contacto
   y los 13 de la barra inferior. */
.unicca-ftr .footer-col > p{ max-width:260px; margin:0; font-size:14px; }
.unicca-ftr .row{ display:flex; align-items:flex-start; gap:12px; margin-bottom:14px; }
.unicca-ftr .row svg{ width:16px; height:16px; stroke:var(--u-mint); flex-shrink:0; margin-top:2px; fill:none; }
.unicca-ftr .row a, .unicca-ftr .row span{ font-size:15px; color:rgba(255,255,255,0.85); line-height:1.5; text-decoration:none; }
.unicca-ftr .row a:hover{ color:#fff; }
.unicca-ftr .footer-bottom{ display:flex; justify-content:space-between; align-items:center; padding-top:24px; border-top:1px solid rgba(255,255,255,0.12); font-size:13px; color:rgba(255,255,255,0.6); }
.unicca-ftr .socials{ display:flex; gap:10px; }
.unicca-ftr .socials a{
	width:34px; height:34px; border-radius:8px; background:rgba(255,255,255,0.08);
	display:flex; align-items:center; justify-content:center;
	transition:background-color .2s ease;
}
.unicca-ftr .socials svg{ width:16px; height:16px; stroke:#fff; fill:none; transition:stroke .2s ease; }
/* Hover (no está en el mockup; decisión de diseño). Sigue el lenguaje contenido
   del resto: tinte mint y el icono a mint, como .btn-outline:hover. En el footer
   no sirve oscurecer como los botones: sobre #050505 no se vería. */
.unicca-ftr .socials a:hover{ background:rgba(114,204,186,0.18); }
.unicca-ftr .socials a:hover svg{ stroke:var(--u-mint); }
@media (max-width:900px){
	.unicca-ftr .ftr-wrap{ padding:0 32px; }
	.unicca-ftr .footer-top{ grid-template-columns:1fr; gap:32px; }
	.unicca-ftr .footer-bottom{ flex-direction:column; gap:16px; align-items:flex-start; }
}

/* ============ LIGHTBOX (Magnific Popup) ============
 * La foto abierta lleva el mismo lenguaje que las del sitio: radio + notch.
 * No sirve el border-radius + círculo de color que se usa en el resto:
 *  - magnific le pone `padding:40px 0` a la <img> (aire para el close y el
 *    caption), así que un border-radius redondearía la caja del padding, no la
 *    foto visible;
 *  - detrás no hay un color sólido que copiar, sino el overlay semitransparente.
 * Por eso: clip-path recorta el área visible con las esquinas redondeadas, y
 * mask muerde el círculo de verdad dejando ver el overlay.
 * El padding se fija acá para que el inset del clip siempre coincida con él.
 */
.mfp-figure img.mfp-img{
	--u-lb-pad:40px;
	padding:var(--u-lb-pad) 0 !important;
	clip-path:inset(var(--u-lb-pad) 0 round var(--u-radius-lg));
	-webkit-mask-image:radial-gradient(circle 28px at 100% var(--u-lb-pad), transparent 27px, #000 28px);
	        mask-image:radial-gradient(circle 28px at 100% var(--u-lb-pad), transparent 27px, #000 28px);
}
/* magnific saca el padding en pantallas apaisadas chicas (.mfp-img-mobile) */
@media screen and (max-width:800px) and (orientation:landscape), screen and (max-height:300px){
	.mfp-img-mobile .mfp-figure img.mfp-img{ --u-lb-pad:0px; }
}
/* El backdrop gris (#444) de magnific va detrás de la foto: sin sacarlo, la
   mordida lo mostraría a él en vez del overlay. */
.mfp-figure::after{ display:none; }

/* ========================= SINGLE PROYECTO ========================= */
/* Réplica de unicca_project_detail.html.
   Los títulos van ALINEADOS A LA IZQUIERDA y en caja baja, al revés que el resto
   del sitio: el h1 es una dirección literal, no un titular, y el mockup lo trata
   como tal ("plain-case H1, not the all-caps heading style used elsewhere").
   El text-align pisa el center que el us_text del h2 de la galería trae en su
   css="" (0,1,0) — por eso los selectores llevan .l-main y !important.
   El font-weight fuerza Archivo 800 aunque el contenido viejo traiga un
   us_text con font-weight:300 en su css="". */
.single-us_portfolio .l-main h1,
.single-us_portfolio .l-main h2,
.single-us_portfolio .l-main h3{
	text-align:left !important;
	font-weight:var(--h1-font-weight) !important;
	text-transform:none; letter-spacing:0;
}
.single-us_portfolio .l-main h1{ font-size:32px; color:var(--u-charcoal); }
.single-us_portfolio .l-main h2{ font-size:22px; color:var(--u-charcoal); }

/* Fila mapa + specs. El mockup da 1.2fr/1fr con gap 50 y el mapa a 360 de alto;
   sin la altura fija el iframe se estira para igualar la columna de al lado.
   El constructor arma la fila con dos columnas 1/2 (536px cada una) y gap 48. */
.single-us_portfolio .w-html iframe{ height:360px !important; }
@media (min-width:1081px){
	.single-us_portfolio .l-main .g-cols:has(> .wpb_column > .vc_column-inner > .w-html){
		grid-template-columns:1.2fr 1fr; gap:50px;
	}
}
/* La fila del mapa va ALINEADA con la foto destacada, al mismo ancho que el
   resto del contenido. En el mockup se sale 80px a cada lado (`.map-row` declara
   un padding que pisa el del `.wrap`, y el mismo div lleva las dos clases), pero
   el cliente pidió expresamente alinearla con la foto en todos los proyectos. */
@media (max-width:1080px){
	.single-us_portfolio .w-html iframe{ height:240px !important; }
}

/* Lista de specs (mockup .feature-list): dot mint, label a la izquierda, valor
   en mint-dark pegado a la derecha, separadores hairline y el último sin borde. */
.unicca-feature-list{ list-style:none; margin:0; padding:0; }
.unicca-feature-list li{
	display:flex; align-items:center; gap:12px; padding:11px 0;
	border-bottom:1px solid var(--u-hairline); font-size:14px; color:var(--u-charcoal);
}
.unicca-feature-list li:last-child{ border-bottom:none; }
.unicca-feature-list li::before{
	content:""; width:8px; height:8px; border-radius:50%;
	background:var(--u-mint); flex-shrink:0;
}
.unicca-feature-list li strong{ font-weight:700; margin-left:auto; color:var(--u-mint-dark); }

/* Project Overview: bloque propio debajo de la fila del mapa, más angosto y
   centrado que el resto de la página (mockup .description .wrap{max-width:900px},
   que con su padding de 80 deja 740 de texto). Es deliberado en el mockup: el
   título, el hero y la galería van al ancho completo del contenido y solo este
   bloque se recoge. */
#project-overview .l-section-h{ max-width:740px; }
#project-overview .unicca-overview-h h2{ margin-bottom:22px; }
#project-overview .unicca-overview p{
	font-size:15px; line-height:1.6; color:var(--u-gray); margin-bottom:18px; max-width:820px;
}
#project-overview .unicca-overview p:first-child{ color:var(--u-charcoal); font-weight:500; }
#project-overview .w-separator{ display:none; }

/* "Back" como eyebrow mint. inline-flex + align-items:center porque el elemento
   viene en display:inline y la flecha quedaba ~4px por encima del centro del
   texto: el <i> del icono tiene otro line-height y sin alineación explícita cada
   uno se apoya en su propia caja (mockup .back-link: inline-flex, gap 8). */
.single-us_portfolio .w-text-h:has(.fa-arrow-left){
	display:inline-flex; align-items:center; gap:8px;
	color:var(--u-mint-dark); font-weight:600; letter-spacing:0.08em; text-transform:uppercase; font-size:12px;
}
/* El tema le pone un margen al icono para separarlo; ahora lo da el gap. */
.single-us_portfolio .w-text-h:has(.fa-arrow-left) i{ margin:0; }
.single-us_portfolio .w-text-h:has(.fa-arrow-left):hover{ color:var(--u-navy); }
/* La dirección encabeza la tarjeta de specs (mockup .features-card .addr):
   Archivo 700 charcoal con una línea que la separa de la lista. Antes iba en
   mint con el pin al lado, que era del diseño anterior. El icono del us_text se
   oculta por CSS para no tocar el contenido de los 15 proyectos. */
/* display:block y no el inline que trae el tema: con una dirección que envuelve
   a dos líneas (las hay), el border-bottom de un elemento inline se dibuja al
   final de CADA fragmento de línea, y quedaba un pedazo de raya al costado de la
   última palabra. En bloque es una sola línea debajo de todo, y de paso toma el
   ancho de la columna como en el mockup, en vez del ancho del texto. */
.single-us_portfolio .w-text-h:has(.fa-map-marker-alt){
	display:block;
	font-family:'Archivo', sans-serif; font-weight:700 !important; font-size:17px !important;
	color:var(--u-charcoal) !important; line-height:1.4;
	margin-bottom:20px; padding-bottom:20px; border-bottom:1px solid var(--u-hairline);
}
.single-us_portfolio .w-text-h:has(.fa-map-marker-alt) .w-text-value{
	color:var(--u-charcoal) !important; font-weight:700 !important;
}
.single-us_portfolio .w-text-h:has(.fa-map-marker-alt) .fa-map-marker-alt{ display:none; }
/* Notch en la imagen principal. Acotado a .l-main: el primer .w-image de la
   página es el logo del header. */
.single-us_portfolio .l-main .w-image{ position:relative; border-radius:var(--u-radius-lg); overflow:hidden; isolation:isolate; }
.single-us_portfolio .l-main .w-image::after{
	content:""; position:absolute; width:56px; height:56px; border-radius:50%;
	background:var(--u-white); z-index:2; top:0; right:0; transform:translate(50%,-50%); pointer-events:none;
}
/* Notch en la galería. Va en el contenedor interno: position:relative en
   .w-gallery-item rompe el grid (mostraba 2 de 4).
   La mordida recorta del fondo de la banda, que ahora es offwhite: el mockup
   saca el verde de esta sección (los otros verdes del sitio siguen unificados
   en el mint del header, que fue el pedido de la ronda anterior). */
.single-us_portfolio .l-main .w-gallery-item-img{ position:relative; border-radius:var(--u-radius-md); overflow:hidden; }
.single-us_portfolio .l-main .w-gallery-item-img::after{
	content:""; position:absolute; width:26px; height:26px; border-radius:50%;
	background:var(--u-offwhite); z-index:2; top:0; right:0; transform:translate(50%,-50%); pointer-events:none;
}
/* La banda de galería quedó SIN encabezado: el cliente sacó el eyebrow "Image
   Gallery", el título y la dirección (rondas 3 y 4). Ahora es solo la franja
   offwhite con las fotos. Se recorta el aire de arriba, que quedaba grande (64
   de padding + 32 de margen = 96px hasta las fotos, marcado por el cliente). */
.single-us_portfolio .l-main .l-section:has(.w-gallery){ padding-top:40px !important; padding-bottom:40px !important; }
.single-us_portfolio .l-main .l-section:has(.w-gallery) .w-separator{ display:none; }
.single-us_portfolio .l-main .w-gallery{ margin-top:0; }
/* El primer texto es el eyebrow y el último la ubicación; los dos traen tamaño,
   color y tracking propios del css="" del constructor. Acá toman los del
   mockup: eyebrow mint-dark de 12px, ubicación gris de 13px en caja baja. */
.single-us_portfolio .l-main .vc_row:has(.w-gallery) .wpb_text_column:first-child p{
	font-size:12px !important; font-weight:600 !important; letter-spacing:0.14em !important;
	color:var(--u-mint-dark) !important; line-height:1.6 !important;
}
.single-us_portfolio .l-main .vc_row:has(.w-gallery) .wpb_text_column ~ .wpb_text_column p{
	font-size:13px !important; font-weight:400 !important; letter-spacing:0 !important;
	text-transform:none !important; color:var(--u-gray) !important; line-height:1.6 !important;
}

/* Thumbnails chicos a propósito: es una galería secundaria de apoyo, no el hero
   (mockup .gallery-grid .img-frame{ height:130px }).
   El aspect-ratio:1/1 del .w-gallery-item hay que anularlo: si no, la celda
   sigue midiendo el ancho de la columna (216px) y queda un hueco de ~86px
   debajo de cada foto. */
.single-us_portfolio .l-main .w-gallery-item{ aspect-ratio:auto; height:130px; }
.single-us_portfolio .l-main .w-gallery-item-img,
.single-us_portfolio .l-main .w-gallery-item-img img{ height:130px; object-fit:cover; width:100%; }
.single-us_portfolio .w-html iframe{ border-radius:var(--u-radius-lg); display:block; }
