/* =========================================================
   FLATSOME NATIVE — style cho trang dựng bằng element gốc Flatsome
   ([section]/[row]/[col]/[ux_text]/[ux_image]/[gap]/[ux_banner]).
   Section giữ class design (.sec-intro, .sec-news…) nên CSS design
   vẫn ăn; file này map layout .wrap/flex design lên wrapper Flatsome.
   ========================================================= */

/* ---- Khung chung: .section-content đóng vai .wrap của design ---- */
.page .section .section-content{
  max-width:var(--maxw);margin:0 auto;
  padding-left:var(--pad);padding-right:var(--pad);
}
.page .section{margin:0;}
.page .section .row{max-width:none;}
.page .col{padding-bottom:0;}

/* Khoảng cách phần tử dùng [gap] — bỏ margin mặc định Flatsome
   (Text trong col/text_box render class .text, ngoài ra là .ux-text) */
.page .ux-text{margin:0;}
.page .col-inner>.text{margin:0;}
.page .text-box .text{margin:0;}
.page .col .img{margin-bottom:0;}
.page .text-box .button{margin:0;}
.td-anchor{display:block;position:relative;top:-90px;}

/* Thẻ sec-tag: mặc định căn trái như design; riêng sec-news/sec-partner design
   dùng align-items:center → căn giữa (lệch 2px so với mép) */
.page .section .section-content>.sec-tag{margin-left:0;margin-right:auto;}
.page .section.sec-news .section-content>.sec-tag,
.page .section.sec-partner .section-content>.sec-tag{margin-left:auto;margin-right:auto;}

/* ---- Gutter row theo số đo design ---- */
.page .row.td-gutter-10{margin-left:-5px;margin-right:-5px;width:calc(100% + 10px);max-width:none;}
.page .row.td-gutter-10>.col{padding-left:5px;padding-right:5px;}
.page .row.td-gutter-16{margin-left:-8px;margin-right:-8px;width:calc(100% + 16px);max-width:none;}
.page .row.td-gutter-16>.col{padding-left:8px;padding-right:8px;}
.page .row.td-gutter-24{margin-left:-12px;margin-right:-12px;width:calc(100% + 24px);max-width:none;}
.page .row.td-gutter-24>.col{padding-left:12px;padding-right:12px;}
.page .row.td-gutter-28{margin-left:-14px;margin-right:-14px;width:calc(100% + 28px);max-width:none;}
.page .row.td-gutter-28>.col{padding-left:14px;padding-right:14px;}
.page .row.td-gutter-50{margin-left:-25px;margin-right:-25px;width:calc(100% + 50px);max-width:none;}
.page .row.td-gutter-50>.col{padding-left:25px;padding-right:25px;}
@media (max-width:849px){
  .page .row.td-gutter-24,.page .row.td-gutter-28,.page .row.td-gutter-50{margin-left:-9px;margin-right:-9px;width:calc(100% + 18px);}
  .page .row.td-gutter-24>.col,.page .row.td-gutter-28>.col,.page .row.td-gutter-50>.col{padding-left:9px;padding-right:9px;}
}

/* =========================================================
   HERO (ux_banner class="hero td-hero")
   ========================================================= */
/* Tỉ lệ + bg như design: ảnh nền 100% x 110% neo top, chữ nằm sẵn trong ảnh */
.banner.td-hero{margin:0;height:auto!important;aspect-ratio:1440/645;min-height:0;overflow:hidden;background:none;}
.banner.td-hero .banner-inner{position:absolute;inset:0;}
/* bg banner là <img class="bg"> — mô phỏng background-size:100% 110% neo top của design */
.td-hero .banner-bg{overflow:hidden;}
.td-hero .banner-bg img.bg{
  position:absolute;top:0;left:0;width:100%!important;height:110%!important;
  max-width:none;object-fit:fill!important;object-position:center top!important;
}
.td-hero .banner-bg .bg{background-size:100% 110%!important;background-position:center top!important;}
/* Slider nền hero (shortcode [td_hero_slides] + td-effects.js): JS chèn ảnh vào
   .banner-bg với class .bg nên hưởng NGUYÊN rule ảnh nền ở trên (kể cả mobile),
   chỉ thêm lớp fade. Ảnh nền gốc của banner nằm dưới cùng làm nền chống nháy. */
.td-hero .td-hero-slides{display:none;}
.td-hero .banner-bg img.td-hero-slide{opacity:0;transition:opacity .8s ease;z-index:1;}
.td-hero .banner-bg img.td-hero-slide.is-active{opacity:1;}
.td-hero .td-hero-deco .hero-dots i{cursor:pointer;}
/* scrim đọc chữ (design .hero::after) — .hero class có sẵn từ home.css; đảm bảo layer chữ nổi trên scrim.
   Ép full-width: builder re-save làm rớt attr container_width="full-width" → .container bó 1080px */
.td-hero .banner-layers{z-index:2;max-width:100%!important;width:100%!important;padding:0!important;}
/* Khối nội dung: đặt theo design .hero-inner (top 59.8%, khung 1440/–pad) */
.td-hero .text-box.td-hero-box{
  position:absolute;left:50%!important;top:59.8%!important;
  transform:translateX(-50%)!important;
  width:100%!important;max-width:var(--maxw);padding:0 var(--pad);margin:0;
}
.td-hero .td-hero-box .text-inner{text-align:left;}
.td-hero .td-hero-box .hero-stats,
.td-hero .td-hero-box .btn-gold{filter:drop-shadow(0 4px 5px rgba(0,0,0,.7));}
.td-hero .td-hero-box .btn-gold{display:inline-flex;}
/* Layer trang trí (mũi tên + chấm): text_box trả về static để absolute neo theo banner */
.td-hero .text-box.td-hero-deco{
  position:absolute!important;left:0!important;top:0!important;right:0;bottom:0;
  transform:none!important;width:100%!important;height:100%;max-width:none;padding:0;margin:0;
  pointer-events:none;
}
.td-hero .td-hero-deco .hero-arrow,.td-hero .td-hero-deco .hero-dots i{pointer-events:auto;}
/* 2 nút ‹ › do td-effects.js dựng là thẻ <button> ⇒ phải gỡ style button của
   Flatsome/theme (min-height, text-transform, màu nền, letter-spacing…) để chúng
   trông đúng nút tròn nhỏ của design. Màu mũi tên lấy theo --ink qua currentColor. */
.td-hero .hero-arrow{
  color:var(--ink);min-height:0;line-height:0;margin:0;letter-spacing:normal;
  text-transform:none;font-size:0;transition:background-color .18s ease,box-shadow .18s ease,transform .18s ease;
  /* To hơn design gốc 24px (khách yêu cầu 24/08/2026): 24px quá nhỏ, khó bấm.
     44px = kích thước vùng chạm tối thiểu khuyến nghị. */
  width:44px;height:44px;box-shadow:0 2px 6px rgba(39,39,39,.2);
}
.td-hero .hero-arrow svg{width:13px;height:23px;}
.td-hero .hero-arrow:hover{background:var(--white);box-shadow:0 3px 8px rgba(39,39,39,.25);transform:scale(1.08);}
.td-hero .hero-arrow:focus-visible{outline:2px solid var(--gold);outline-offset:2px;}
/* anchor các layer trang trí theo đúng khối banner (Flatsome đặt .text-box-content relative + top:0) */
.td-hero .td-hero-deco .text-box-content{position:static;}
.td-hero .td-hero-deco .hero-arrows{
  position:absolute;top:50%!important;left:50%!important;transform:translate(-50%,-50%)!important;
  /* Khách 26/08/2026: 2 nút ‹ › sát viền màn hình, hở 16px mỗi bên
     (design gốc width:1360px nên trên màn to nút thụt vào trong). */
  width:calc(100% - 32px);max-width:none;
}
.td-hero .td-hero-deco .hero-dots{position:absolute;top:89%!important;left:50%!important;transform:translateX(-50%)!important;}
.td-hero .td-hero-deco .text-inner{text-align:initial;}
@media (max-width:768px){
  /* design mobile: ảnh hero 100% x auto (2:1) trên nền #0f150e, nội dung xuống dưới */
  .banner.td-hero{aspect-ratio:auto;height:auto!important;padding-top:0!important;background:#0f150e;overflow:visible;}
  .banner.td-hero .banner-inner{position:relative;inset:auto;height:auto;}
  .td-hero .banner-bg{position:relative!important;inset:auto!important;height:0!important;padding-top:50%!important;overflow:hidden;}
  .td-hero .banner-bg img.bg{position:absolute;top:0;left:0;width:100%!important;height:auto!important;object-fit:fill!important;object-position:center top!important;}
  .td-hero .banner-layers{position:static;max-width:100%;}
  .td-hero .text-box.td-hero-box{position:static!important;transform:none!important;padding:26px var(--pad) 54px;}
  .td-hero .td-hero-box .hero-stats,.td-hero .td-hero-box .btn-gold{filter:none;}
  .td-hero .hero-arrows{display:none;}
  .td-hero .text-box.td-hero-deco{position:absolute!important;}
  .td-hero .td-hero-deco .hero-dots{top:calc(50vw - 26px)!important;}
}

/* =========================================================
   GIỚI THIỆU (section.sec-intro)
   ========================================================= */
/* design .sec-intro{padding:80px 0} → attr padding="80px"; cột 594 + gap 50 */
@media (min-width:1200px){
  .page .row.td-intro-row{flex-wrap:nowrap;}
  .page .row.td-intro-row>.col.td-intro-left{width:644px;max-width:644px;flex:0 0 644px;}
  .page .row.td-intro-row>.col.td-intro-right{width:auto;max-width:none;flex:1 1 auto;min-width:0;}
}
/* các khối trong cột trái cách nhau bằng [gap] — flex column design thay bằng block */
.td-intro-left .col-inner>.text{margin:0;}
/* video card + 2 thumb ảnh */
.td-intro-right .video-card{margin:0;}
.td-introthumbs .col .img{border-radius:18px;box-shadow:0 12px 26px -10px rgba(0,0,0,.3);overflow:visible;}
.td-introthumbs .col .img .img-inner{border-radius:18px;overflow:hidden;}
.td-introthumbs .col .img img{width:100%;height:197px;object-fit:cover;border-radius:18px;}
@media (max-width:849px){
  /* design ≤1024: .sec-intro__inner cột dọc gap 36px; cột phải shrink-to-fit
     (video-card height cố định + img aspect → design co còn ~339px) */
  .td-intro-row>.col.td-intro-right{padding-top:36px;}
}
@media (max-width:768px){
  .td-introthumbs .col .img img{height:130px;}
}
@media (max-width:560px){
  .td-introthumbs>.col{flex-basis:100%;max-width:100%;}
  /* design: flex:1 trong cột dọc vô hiệu height 150px → ảnh theo tỉ lệ tự nhiên */
  .td-introthumbs .col .img img{height:auto;}
}

/* =========================================================
   VỊ TRÍ & KẾT NỐI VÙNG (section.sec-location)
   ========================================================= */
/* design padding:60px 0 0 — attr 60px rồi triệt bottom */
@media (min-width:1025px){ .page section.section.sec-location{padding-bottom:0!important;} }
/* map absolute neo theo section (không theo section-content) */
.page section.section.sec-location{position:relative;}
/* Flatsome gắn class .relative cho .section-content → map absolute neo sai; trả về static
   và nâng các phần tử nội dung lên trên map (z-index trên static bị bỏ qua) */
.page .section.sec-location .section-content{position:static!important;}
.page .section.sec-location .section-content>*:not(.td-locmap){position:relative;z-index:2;}
.img.td-locmap{position:absolute;right:0;bottom:0;z-index:1;margin:0;width:869px!important;max-width:869px;pointer-events:none;}
.img.td-locmap img{width:100%;height:628px;object-fit:contain;object-position:right bottom;}
/* lưới 4 thẻ chỉ số: 2 cột x 2, gutter 10, khối rộng 467 như design */
.page .row.td-loccards{width:477px;max-width:none;margin-left:-5px;margin-right:-5px;}
.td-loccards{row-gap:10px;}
.td-loccards>.col{padding:0 5px;}
.td-loccards .col-inner,.td-loccards .col-inner>.text,.td-loccards .col-inner>.ux-text{height:100%;}
.td-loccards .loc-card{height:100%;}
@media (max-width:1024px){
  .page section.section.sec-location{min-height:0;}
  /* width PHẢI !important — rule desktop ở trên đặt width:869px!important, không
     thì bản đồ giữ nguyên 660px và TRÀN ra ngoài màn hình điện thoại (390px). */
  .img.td-locmap{position:static;width:100%!important;max-width:660px;margin:32px auto 0;display:block;}
  .img.td-locmap img{width:100%;height:auto;}
  .page .row.td-loccards{width:100%;max-width:570px;margin-left:-5px;}
}
@media (max-width:560px){
  .td-loccards>.col{flex-basis:100%;max-width:100%;}
  .page .row.td-loccards{max-width:350px;}
}

/* =========================================================
   SẢN PHẨM & DỊCH VỤ (section.sec-product)
   ========================================================= */
.page section.section.sec-product{padding-bottom:0!important;}
/* home.css scope label qua .sec-product__head — sectag builder là con trực tiếp section */
.sec-product .sec-tag__label{letter-spacing:-.5px;line-height:1.18;}
.td-prodcard .img{border-radius:12px;box-shadow:0 12px 26px rgba(0,0,0,.3);overflow:visible;}
.td-prodcard .img .img-inner{border-radius:12px;overflow:hidden;}
.td-prodcard .img img{width:100%;height:400px;object-fit:cover;border-radius:12px;}
.td-prodcard .prod-card__body{display:flex;flex-direction:column;gap:12px;padding:28px 28px 30px;}
@media (max-width:1024px){ /* home.css scope label qua .sec-product__head — sectag builder là con trực tiếp section */
.sec-product .sec-tag__label{letter-spacing:-.5px;line-height:1.18;}
.td-prodcard .img img{height:320px;} }
@media (max-width:768px){
  /* home.css scope label qua .sec-product__head — sectag builder là con trực tiếp section */
.sec-product .sec-tag__label{letter-spacing:-.5px;line-height:1.18;}
.td-prodcard .img img{height:240px;}
  .td-prodcard .prod-card__body{padding:20px 4px 8px;}
}

/* =========================================================
   TIN TỨC & SỰ KIỆN (section.sec-news)
   ========================================================= */
/* hàng tin: 2 cột 50/50 gutter 24; thẻ nổi bật giãn hết chiều cao cột phải */
.page .row.td-newsrow{align-items:stretch;}
@media (min-width:1200px){
  .page .row.td-newsrow{flex-wrap:nowrap;}
  .page .row.td-newsrow>.col.td-news-left{width:668px;max-width:668px;flex:0 0 668px;}
  .page .row.td-newsrow>.col.td-news-right{width:auto;max-width:none;flex:1 1 auto;min-width:0;}
}
.td-news-left .col-inner,
.td-news-left .col-inner>.text,
.td-news-left .col-inner>.ux-text,
.td-news-left .news-feature{height:100%;}
.td-news-left .news-feature{min-height:100%;}
.td-news-right .col-inner{display:flex;flex-direction:column;justify-content:center;}
.td-news-right .news-card{width:100%;}
/* Khối tin đổ từ bài viết thật ([td_news_cards]) render 3 thẻ liền nhau — khoảng
   cách 24px của design trước đây do [gap] lo, nay đặt bằng margin */
.td-news-right .news-card+.news-card{margin-top:24px;}
/* nút "Xem tất cả" căn giữa */
.td-center{text-align:center;}
.td-center .btn-outline{display:inline-flex;}
@media (max-width:1024px){
  .td-news-left .news-feature{min-height:380px;}
}

/* =========================================================
   KHÁCH HÀNG & ĐỐI TÁC (section.sec-partner)
   ========================================================= */
.td-logos .logo-row{margin:0;}
/* bản đồ Google: khung như design .partner-map */
.img.td-partnermap{margin:0 auto;width:1240px!important;max-width:100%;}
.img.td-partnermap .img-inner{border:1px solid #e6e6e9;border-radius:22px;overflow:hidden;box-shadow:0 18px 50px -22px rgba(18,18,20,.32);}
.img.td-partnermap img{width:100%;height:523px;object-fit:cover;}
@media (max-width:1265px){ .img.td-partnermap img{height:460px;} }
@media (max-width:1024px){ .img.td-partnermap img{height:400px;} }
@media (max-width:768px){
  .img.td-partnermap img{height:280px;}
  .img.td-partnermap .img-inner{border-radius:16px;}
}
@media (max-width:560px){ .img.td-partnermap img{height:220px;} }

/* ---- Section design là flex-col: sections builder chỉ chứa .section-content
        nên trả display:block để không sinh gap lạ ---- */
section.section.sec-intro,section.section.sec-location,section.section.sec-product,
section.section.sec-news,section.section.sec-partner{display:block;}

/* =========================================================
   TRANG CON v2 (lien-he, tin-tuc, tong-quan, uu-the, chu-dau-tu)
   Card giữ markup + class design trong ux_text (CSS pages.css tự ăn);
   file này chỉ map layout hàng/cột design lên row/col Flatsome.
   ========================================================= */

/* Clearfix ::after của .row Flatsome trở thành flex/grid item khi row dùng
   display:flex/grid + gap → ngốn 1 slot gap. Tắt cho mọi row layout custom. */
.page .row.td-lhrow::before,.page .row.td-lhrow::after,
.page .row.td-news3::before,.page .row.td-news3::after,
.page .row.td-tqinfo::before,.page .row.td-tqinfo::after,
.page .row.td-tqimgrow::before,.page .row.td-tqimgrow::after,
.page .row.td-infra::before,.page .row.td-infra::after,
.page .row.td-cost::before,.page .row.td-cost::after,
.page .row.td-eco::before,.page .row.td-eco::after,
.page .row.td-loc2::before,.page .row.td-loc2::after,
.page .row.td-conn::before,.page .row.td-conn::after,
.page .row.td-labor::before,.page .row.td-labor::after,
.page .row.td-laborstats::before,.page .row.td-laborstats::after,
.page .row.td-policy::before,.page .row.td-policy::after,
.page .row.td-cdtabout::before,.page .row.td-cdtabout::after,
.page .row.td-statcards::before,.page .row.td-statcards::after,
.page .row.td-vngrid::before,.page .row.td-vngrid::after,
.page .row.td-newsrow::before,.page .row.td-newsrow::after{content:none;display:none;}

/* ---- Banner ảnh đầu trang (1440/300, full-bleed) ---- */
.page .section.td-pagehero .section-content{max-width:none;padding:0;line-height:0;background:var(--ink);}
.img.td-pageheroimg{margin:0;}
.img.td-pageheroimg img{width:100%;aspect-ratio:1440/300;object-fit:cover;display:block;}

/* ---- LIÊN HỆ: card info 48% + form, gap 32 ---- */
.page .row.td-lhrow{display:flex;flex-wrap:nowrap;gap:32px;margin:0;width:100%;align-items:stretch;}
.td-lhrow>.col{padding:0!important;min-width:0;width:auto;max-width:none;}
.td-lhrow>.col.td-lhinfo{flex:0 0 48%;max-width:48%;}
.td-lhrow>.col.td-lhform{flex:1 1 auto;}
.td-lhinfo .col-inner{height:100%;display:flex;flex-direction:column;gap:12px;background:#fffcf3;border:1px solid #e5e3de;border-radius:20px;padding:20px;}
.td-lhinfo .col-inner>.text{margin:0;}
.img.td-lhgate{flex:1;min-height:230px;margin:4px 0 0;border-radius:12px;box-shadow:0 12px 26px -10px rgba(0,0,0,.3);overflow:visible;}
.td-lhgate .img-inner{height:100%;border-radius:12px;overflow:hidden;}
.td-lhgate img{width:100%;height:100%;min-height:230px;object-fit:cover;}
.td-lhform .col-inner,.td-lhform .col-inner>.text{height:100%;}
.td-lhform .text.cta-form{margin:0;}
@media (max-width:1024px){
  .page .row.td-lhrow{flex-wrap:wrap;gap:24px;}
  .td-lhrow>.col.td-lhinfo,.td-lhrow>.col.td-lhform{flex:1 1 100%;max-width:100%;}
}

/* ---- TIN TỨC: lưới 3 cột (378:427:447), col-inner = card .news-col ----
   ⚠ KHÁC DESIGN CÓ CHỦ ĐÍCH (yêu cầu khách 30/07/2026): design để align-items:start
   nên 3 thẻ cao lệch nhau (573/535/625). Đổi sang stretch + col-inner height:100%
   ⇒ cả 3 thẻ cao bằng thẻ cao nhất. Nội dung vẫn căn từ trên xuống. */
.page .row.td-news3{display:grid;grid-template-columns:378fr 427fr 447fr;gap:24px;margin:0;width:100%;align-items:stretch;}
.td-news3>.col{padding:0!important;width:auto;max-width:none;}
.td-news3>.col>.col-inner{height:100%;}
.td-news3 .col-inner{display:flex;flex-direction:column;gap:20px;background:#fff;border:1px solid var(--line-soft);border-radius:10px;box-shadow:0 12px 44px -10px rgba(0,0,0,.12);padding:24px 20px;}
.td-news3 .col-inner>.text{margin:0;}
/* Lấp khoảng trắng đáy 2 cột trái (yêu cầu khách 30/07/2026): 3 thẻ cao bằng nhau
   nên cột ít nội dung bị hụt đáy. Chia ĐỀU phần dư cho từng mục (flex-grow) thay vì
   dồn xuống dưới ⇒ giãn cách đều, không phải khoảng trống một cục.
   `flex:1 1 auto` giữ chiều cao tự nhiên của mục rồi mới cộng thêm phần chia. */
.td-news3 .evt-list{flex:1 1 auto;}
.td-news3 .evt-list a{flex:1 1 auto;display:flex;align-items:center;}
.td-news3 .col-inner>.mkt-item{flex:1 1 auto;}
/* Nếu builder còn bọc khối tin trong [ux_text] (<div class="text">) thì wrapper đó
   phải grow và là flex container, không thì phần dư kẹt lại ở nó */
.td-news3 .col-inner>.text:has(>.evt-list),
.td-news3 .col-inner>.text:has(>.mkt-item){display:flex;flex-direction:column;gap:20px;flex:1 1 auto;}
.td-news3 .col-inner>.text:has(>.mkt-item)>.mkt-item{flex:1 1 auto;}
@media (max-width:1024px){
  /* 1 cột: không còn chiều cao dư để chia, trả về tự nhiên */
  .td-news3 .evt-list,.td-news3 .evt-list a,.td-news3 .col-inner>.mkt-item{flex:0 0 auto;}
}
/* span divider trong Text là inline → blockify như flex-item design */
.page span.tqcard__div,.page span.policy-card__bar,.page span.vn-card__div,.page span.intl-card__div,.page span.logo-sep,.page span.hero-divider{display:block;}
.img.td-ttproject{margin:0;}
.td-ttproject .img-inner{border-radius:12px;overflow:hidden;}
.td-ttproject img{width:100%;height:220px;object-fit:cover;}
@media (max-width:1024px){ .page .row.td-news3{grid-template-columns:1fr;} }

/* ---- TỔNG QUAN: thông tin cơ bản (bảng 600 + 2 ảnh, gap 64/16) ---- */
.page .row.td-tqinfo{display:flex;flex-wrap:nowrap;gap:64px;margin:0;width:100%;align-items:stretch;}
.td-tqinfo>.col{padding:0!important;min-width:0;width:auto;max-width:none;}
.td-tqinfo>.col.td-facts{flex:0 0 600px;max-width:600px;}
.td-tqinfo>.col.td-tqimgs{flex:1 1 auto;}
.td-tqimgs .col-inner{height:100%;}
.page .row.td-tqimgrow{display:flex;flex-wrap:nowrap;gap:16px;margin:0;width:100%;height:100%;}
.td-tqimgrow>.col{padding:0!important;flex:1 1 0;min-width:0;width:auto;max-width:none;}
.td-tqimgrow .col-inner{height:100%;}
.td-tqimgrow .img{margin:0;height:100%;border-radius:18px;box-shadow:0 12px 26px -10px rgba(0,0,0,.3);overflow:visible;}
.td-tqimgrow .img-inner{height:100%;border-radius:18px;overflow:hidden;}
.td-tqimgrow img{width:100%;height:100%;min-height:224px;object-fit:cover;}
@media (max-width:1024px){
  .page .row.td-tqinfo{flex-wrap:wrap;gap:32px;}
  .td-tqinfo>.col.td-facts{flex:1 1 100%;max-width:100%;}
  .td-tqimgrow img{min-height:200px;}
}
@media (max-width:600px){ .page .row.td-tqimgrow{flex-wrap:wrap;} .td-tqimgrow>.col{flex:1 1 100%;} }

/* ---- TỔNG QUAN: lưới hạ tầng 4 thẻ ---- */
.page .row.td-infra{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin:0;width:100%;}
.td-infra>.col{padding:0!important;width:auto;max-width:none;}
.td-infra .col-inner,.td-infra .col-inner>.text,.td-infra .infra-card{height:100%;}
@media (max-width:1024px){ .page .row.td-infra{grid-template-columns:repeat(2,1fr);gap:64px 24px;} }
@media (max-width:600px){ .page .row.td-infra{grid-template-columns:1fr;gap:70px 0;} }

/* ---- TỔNG QUAN: chi phí thuê (lưới phí + thẻ báo giá 353) ---- */
.page .row.td-cost{display:flex;flex-wrap:nowrap;gap:24px;margin:0;width:100%;align-items:stretch;}
.td-cost>.col{padding:0!important;min-width:0;width:auto;max-width:none;}
.td-cost>.col.td-fees{flex:1 1 auto;}
.td-cost>.col.td-baogia{flex:0 0 353px;max-width:353px;}
.td-fees .col-inner{height:100%;display:grid;grid-template-columns:1fr 1fr;gap:22px 24px;align-content:center;}
.td-fees .col-inner>.text{margin:0;}
.td-baogia .col-inner,.td-baogia .col-inner>.text,.td-baogia .baogia{height:100%;}
@media (max-width:1024px){ .page .row.td-cost{flex-wrap:wrap;} .td-cost>.col.td-fees,.td-cost>.col.td-baogia{flex:1 1 100%;max-width:100%;} }
@media (max-width:768px){ .td-fees .col-inner{grid-template-columns:1fr;} }

/* ---- TỔNG QUAN: ảnh ngành nghề ---- */
.img.td-nnimg{margin:32px 0 0;border-radius:16px;box-shadow:0 12px 26px -10px rgba(0,0,0,.3);overflow:visible;}
.td-nnimg .img-inner{border-radius:16px;overflow:hidden;}
.td-nnimg img{width:100%;height:425px;object-fit:cover;object-position:center 30%;}
@media (max-width:1024px){ .td-nnimg img{height:320px;} }
@media (max-width:600px){ .td-nnimg img{height:220px;} }

/* ---- ƯU THẾ: 3 thẻ hệ sinh thái ---- */
.page .row.td-eco{display:flex;flex-wrap:nowrap;gap:24px;margin:0;width:100%;align-items:stretch;}
.td-eco>.col{padding:0!important;flex:1 1 0;min-width:0;width:auto;max-width:none;}
.td-eco .col-inner,.td-eco .col-inner>.text,.td-eco .eco-card{height:100%;}
@media (max-width:1024px){ .page .row.td-eco{flex-wrap:wrap;} .td-eco>.col{flex:1 1 100%;} }

/* ---- ƯU THẾ: vị trí (text + 4 thẻ | bản đồ) ---- */
.page .row.td-loc2{display:flex;flex-wrap:nowrap;gap:56px;margin:0;width:100%;align-items:flex-start;}
.td-loc2>.col{padding:0!important;min-width:0;width:auto;max-width:none;}
.td-loc2>.col.td-loc2left{flex:0 0 509px;max-width:509px;}
.td-loc2>.col.td-loc2map{flex:1 1 auto;}
.img.td-uumap{margin:0;}
.td-uumap img{width:100%;height:auto;}
.page .row.td-conn{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0;width:100%;}
.td-conn>.col{padding:0!important;width:auto;max-width:none;}
.td-conn .col-inner,.td-conn .col-inner>.text,.td-conn .conn-card{height:100%;}
@media (max-width:1024px){ .page .row.td-loc2{flex-wrap:wrap;gap:36px;} .td-loc2>.col.td-loc2left{flex:1 1 100%;max-width:100%;} }
@media (max-width:560px){ .page .row.td-conn{grid-template-columns:1fr;} }

/* ---- ƯU THẾ: lao động ---- */
.page .row.td-labor{display:flex;flex-wrap:nowrap;gap:48px;margin:0;width:100%;}
.td-labor>.col{padding:0!important;flex:1 1 0;min-width:0;width:auto;max-width:none;}
@media (max-width:1024px){ .page .row.td-labor{flex-wrap:wrap;gap:24px;} .td-labor>.col{flex:1 1 100%;} }
.page .row.td-laborstats{display:flex;flex-wrap:nowrap;gap:28px;margin:0;width:100%;align-items:stretch;}
.td-laborstats>.col{padding:0!important;flex:1 1 0;min-width:0;width:auto;max-width:none;}
.td-laborstats .col-inner,.td-laborstats .col-inner>.text,.td-laborstats .labor-stat{height:100%;}
@media (max-width:1024px){ .page .row.td-laborstats{flex-wrap:wrap;} .td-laborstats>.col{flex:1 1 40%;} }
@media (max-width:768px){ .td-laborstats>.col{flex:1 1 100%;} }

/* ---- ƯU THẾ: 2 thẻ chính sách (col-inner = card) ---- */
.page .row.td-policy{display:flex;flex-wrap:nowrap;gap:24px;margin:0;width:100%;align-items:stretch;}
.td-policy>.col{padding:0!important;flex:1 1 0;min-width:0;width:auto;max-width:none;}
.td-policy .col-inner{height:100%;display:flex;flex-direction:column;gap:16px;background:#fff;border:1px solid #e5e3de;border-radius:16px;padding:32px;box-shadow:0 12px 26px -10px rgba(0,0,0,.3);}
.td-policy .col-inner>.text{margin:0;}
.img.td-pcimg{margin:0;flex:none;}
.td-pcimg .img-inner{height:340px;border-radius:12px;overflow:hidden;}
.td-pcimg img{width:100%;height:340px;object-fit:cover;}
@media (max-width:1024px){ .page .row.td-policy{flex-wrap:wrap;} .td-policy>.col{flex:1 1 100%;} }

/* ---- CHỦ ĐẦU TƯ: giới thiệu (text 659 + ảnh), 3 thẻ số liệu ---- */
.page .row.td-cdtabout{display:flex;flex-wrap:nowrap;gap:64px;margin:40px 0 0;width:100%;align-items:stretch;}
.td-cdtabout>.col{padding:0!important;min-width:0;width:auto;max-width:none;}
.td-cdtabout>.col.td-cdttext{flex:0 0 659px;max-width:659px;}
.td-cdtabout>.col.td-cdtimgcol{flex:1 1 auto;}
.td-cdtimgcol .col-inner{height:100%;}
.img.td-cdtimg{margin:0;height:100%;border-radius:16px;box-shadow:0 12px 26px -10px rgba(0,0,0,.3);overflow:visible;}
.td-cdtimg .img-inner{height:100%;border-radius:16px;overflow:hidden;}
.td-cdtimg img{width:100%;height:100%;min-height:441px;object-fit:cover;}
@media (max-width:1024px){
  .page .row.td-cdtabout{flex-wrap:wrap;gap:32px;}
  .td-cdtabout>.col.td-cdttext{flex:1 1 100%;max-width:100%;}
  .td-cdtimg img{min-height:300px;}
}
.page .row.td-statcards{display:flex;flex-wrap:nowrap;gap:28px;margin:0;width:100%;align-items:stretch;}
.td-statcards>.col{padding:0!important;flex:1 1 0;min-width:0;width:auto;max-width:none;}
.td-statcards .col-inner,.td-statcards .col-inner>.text,.td-statcards .stat-card{height:100%;}
@media (max-width:1024px){ .page .row.td-statcards{flex-wrap:wrap;} .td-statcards>.col{flex:1 1 40%;} }
@media (max-width:768px){ .td-statcards>.col{flex:1 1 100%;} }

/* ---- CHỦ ĐẦU TƯ: lưới nhà máy VN (ẩn/hiện qua site.js data-toggle-grid) ---- */
.section.vn-sec{position:relative;}
.section.vn-sec .section-content{position:relative;z-index:1;}
.page .row.td-vngrid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin:0;width:100%;}
.td-vngrid>.col{padding:0!important;width:auto;max-width:none;}
/* vn-card có height cố định 353px trong design — không dùng height-chain */
.td-vngrid>.col.td-hidden{display:none;}
.td-vngrid.is-expanded>.col.td-hidden{display:block;}
@media (max-width:1024px){ .page .row.td-vngrid{grid-template-columns:repeat(2,1fr);} }
@media (max-width:768px){ .page .row.td-vngrid{grid-template-columns:1fr;} }
.td-vnmore{display:flex;justify-content:center;margin-top:40px;}

/* =========================================================
   HIỆU ỨNG HOVER THẺ — "hiệu ứng A" (TRANG CHỦ)
   ---------------------------------------------------------
   Chuẩn gốc: .news-card của design (home.css)
       transition: transform .18s ease, box-shadow .18s ease
       :hover     translateY(-3px) + shadow đậm hơn (+4px y, +4px blur, +.05 alpha)
   Áp cho MỌI item dạng thẻ ở trang chủ. Chỉ đổi trạng thái :hover —
   trạng thái tĩnh giữ nguyên 100% design nên pixel-diff KHÔNG đổi.
   Bọc trong @media (hover:hover) để máy cảm ứng không bị "kẹt" hover sau khi chạm.
   ========================================================= */
@media (hover:hover) and (pointer:fine){

  /* ---- GIỚI THIỆU: thẻ video ---- */
  .page .video-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .video-card:hover{
    transform:translateY(-3px);
    box-shadow:0 16px 30px -10px rgba(0,0,0,.35);
  }

  /* ---- GIỚI THIỆU: 2 ảnh thumb (element Image, shadow nằm ở .img) ---- */
  .page .td-introthumbs .col .img{transition:transform .18s ease,box-shadow .18s ease;}
  .page .td-introthumbs .col .img:hover{
    transform:translateY(-3px);
    box-shadow:0 16px 30px -10px rgba(0,0,0,.35);
  }

  /* ---- VỊ TRÍ & KẾT NỐI VÙNG: 4 thẻ chỉ số ---- */
  .page .loc-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .loc-card:hover{
    transform:translateY(-3px);
    box-shadow:0 10px 24px -8px rgba(0,0,0,.28);
  }

  /* ---- SẢN PHẨM & DỊCH VỤ: thẻ = .col-inner (ảnh + body), shadow ở .img ----
     Design có .prod-card:hover nhưng bản builder không còn wrapper .prod-card
     (cột Flatsome thay thế) → rule design chết; dựng lại theo .td-prodcard. */
  .page .td-prodcard .col-inner{transition:transform .18s ease;}
  .page .td-prodcard .img{transition:box-shadow .18s ease;}
  .page .td-prodcard .col-inner:hover{transform:translateY(-3px);}
  .page .td-prodcard .col-inner:hover .img{box-shadow:0 16px 30px rgba(0,0,0,.35);}
  .page .td-prodcard .col-inner:hover .link-sm img{transform:translateX(3px);}

  /* ---- TIN TỨC: thẻ nổi bật cột trái (.news-card 3 thẻ đã có sẵn hiệu ứng) ---- */
  .page .news-feature{transition:transform .18s ease,box-shadow .18s ease;}
  .page .news-feature:hover{
    transform:translateY(-3px);
    box-shadow:0 16px 17px rgba(0,0,0,.35);
  }

  /* ---- KHÁCH HÀNG & ĐỐI TÁC: khung bản đồ (shadow nằm ở .img-inner) ---- */
  .page .td-partnermap .img-inner{transition:transform .18s ease,box-shadow .18s ease;}
  .page .td-partnermap:hover .img-inner{
    transform:translateY(-3px);
    box-shadow:0 22px 54px -22px rgba(18,18,20,.38);
  }

  /* =========================================================
     HIỆU ỨNG A — CÁC TRANG CON
     Cùng công thức: translateY(-3px) + bóng tĩnh của CHÍNH thẻ đó cộng thêm
     4px y / 4px blur / .05 alpha. Không đụng trạng thái tĩnh.
     Không áp cho khung BAO NGOÀI đã chứa thẻ con có hiệu ứng (vd .news-col
     bọc .mkt-item) để tránh hai lớp cùng nhấc lên.
     ========================================================= */

  /* ---- CHỦ ĐẦU TƯ ---- */
  .page .stat-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .stat-card:hover{transform:translateY(-3px);box-shadow:0 10px 14px rgba(0,0,0,.13);}

  .page .vn-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .vn-card:hover{transform:translateY(-3px);box-shadow:0 16px 30px -10px rgba(0,0,0,.35);}

  .page .intl-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .intl-card:hover{transform:translateY(-3px);box-shadow:0 12px 26px -8px rgba(0,0,0,.15);}

  .page .img.td-cdtimg{transition:transform .18s ease,box-shadow .18s ease;}
  .page .img.td-cdtimg:hover{transform:translateY(-3px);box-shadow:0 16px 30px -10px rgba(0,0,0,.35);}

  /* ---- TỔNG QUAN DỰ ÁN ---- */
  .page .infra-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .infra-card:hover{transform:translateY(-3px);box-shadow:0 10px 13px rgba(0,0,0,.1);}

  /* .img.td-nnimg cần đủ specificity: Flatsome đặt transform cho .img theo class
     vị trí (x/y) — selector 2 class không thắng nổi */
  .page .td-tqimgs .img,.page .img.td-nnimg{transition:transform .18s ease,box-shadow .18s ease;}
  .page .td-tqimgs .img:hover,.page .img.td-nnimg:hover{
    transform:translateY(-3px);
    box-shadow:0 16px 30px -10px rgba(0,0,0,.35);
  }

  /* ---- ƯU THẾ DỰ ÁN ---- */
  .page .eco-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .eco-card:hover{transform:translateY(-3px);box-shadow:0 10px 22px rgba(0,0,0,.1);}

  .page .conn-card{transition:transform .18s ease,box-shadow .18s ease;}
  .page .conn-card:hover{transform:translateY(-3px);box-shadow:0 10px 24px -8px rgba(0,0,0,.25);}

  .page .labor-stat{transition:transform .18s ease,box-shadow .18s ease;}
  .page .labor-stat:hover{transform:translateY(-3px);box-shadow:0 10px 24px -8px rgba(0,0,0,.25);}

  /* .policy-card của design đã bị cột Flatsome thay thế → bám .td-policy */
  .page .td-policy>.col>.col-inner{transition:transform .18s ease,box-shadow .18s ease;}
  .page .td-policy>.col>.col-inner:hover{
    transform:translateY(-3px);
    box-shadow:0 16px 30px -10px rgba(0,0,0,.35);
  }

  .page .img.td-pcimg{transition:transform .18s ease,box-shadow .18s ease;}
  .page .img.td-pcimg:hover{transform:translateY(-3px);box-shadow:0 16px 30px -10px rgba(0,0,0,.35);}

  /* ---- TIN TỨC ---- */
  /* thẻ nổi bật: nhấc cả thẻ, bóng nằm ở khối ảnh */
  .page .featured{transition:transform .18s ease;}
  .page .featured__img{transition:box-shadow .18s ease;}
  .page .featured:hover{transform:translateY(-3px);}
  .page .featured:hover .featured__img{box-shadow:0 16px 30px -10px rgba(0,0,0,.35);}

  /* design có sẵn translateY(-2px) nhưng chưa có bóng → nâng lên đúng chuẩn A */
  .page .mkt-item{transition:transform .18s ease,box-shadow .18s ease;}
  .page .mkt-item:hover{transform:translateY(-3px);box-shadow:0 10px 22px rgba(0,0,0,.1);}

  .page .img.td-ttproject{transition:transform .18s ease,box-shadow .18s ease;}
  .page .img.td-ttproject:hover{transform:translateY(-3px);box-shadow:0 16px 30px -10px rgba(0,0,0,.35);}

  /* ---- LIÊN HỆ ---- */
  .page .img.td-lhgate{transition:transform .18s ease,box-shadow .18s ease;}
  .page .img.td-lhgate:hover{transform:translateY(-3px);box-shadow:0 16px 30px -10px rgba(0,0,0,.35);}
}

/* =========================================================
   BÀI VIẾT CHI TIẾT — hoà giải output trình soạn thảo ↔ design
   ---------------------------------------------------------
   Thân bài là the_content() nên admin soạn bằng block editor. Design chỉ định
   nghĩa <figure class="art__fig">; block editor xuất <figure class="wp-block-image">
   ⇒ map sang cùng giao diện. CSS design gốc: assets/article.css (không sửa).
   ========================================================= */
.art__body figure.wp-block-image{display:flex;flex-direction:column;gap:12px;margin:0;}
.art__body figure.wp-block-image img{
  width:100%;aspect-ratio:720/380;object-fit:cover;border-radius:16px;display:block;height:auto;
}
.art__body figure.wp-block-image figcaption{
  font-size:12px;font-style:italic;line-height:1.6;color:#45423b;text-align:center;
  text-wrap:pretty;margin:0;
}
/* ảnh để nguyên tỉ lệ thật khi admin chọn "Kích thước gốc" */
.art__body figure.wp-block-image.is-style-full-height img{aspect-ratio:auto;}

/* tiêu đề phụ / danh sách / trích dẫn trong bài — theo hệ chữ design */
.art__body h2,.art__body h3,.art__body h4{
  font-family:var(--font-body);font-weight:700;color:var(--ink);margin:8px 0 0;
}
.art__body h2{font-size:26px;line-height:1.35;}
.art__body h3{font-size:21px;line-height:1.4;}
.art__body h4{font-size:18px;line-height:1.45;}
.art__body ul,.art__body ol{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:8px;}
.art__body li{font-size:16px;line-height:1.6;color:var(--ink);}
.art__body blockquote{
  margin:0;padding:16px 20px;border-left:3px solid var(--gold-deep);
  background:#fffaed;border-radius:0 10px 10px 0;
}
.art__body blockquote p{font-style:italic;}
.art__body figure.wp-block-embed,.art__body .wp-block-embed__wrapper{margin:0;}
.art__body .wp-block-embed iframe{width:100%;aspect-ratio:16/9;height:auto;border:0;border-radius:16px;display:block;}
/* Flatsome reset: bỏ khoảng trắng thừa dưới phần tử cuối thân bài */
.art__body>*:last-child{margin-bottom:0;}

/* =========================================================
   SUBMENU "NHẢY TỚI SECTION" (Chủ đầu tư / Tổng quan / Ưu thế)
   ---------------------------------------------------------
   Markup do WC_Nav_Walker sinh (functions.php + inc/nav-sections.php):
     <span class="td-hasmenu"> <a>TAB</a> <button class="td-submenu-toggle">
       <ul class="td-submenu"><li><a href="…#sec-…">Section</a></li>…</ul> </span>
   Desktop: rê chuột (hoặc focus bàn phím) vào tab → xổ xuống.
   Mobile (≤1024px): menu vốn là danh sách dọc ⇒ submenu thành accordion,
   bấm nút mũi tên để mở (không có hover trên cảm ứng).
   Trạng thái TĨNH của thanh menu KHÔNG đổi ⇒ pixel-diff giữ nguyên.
   ========================================================= */
/* Mũi tên ▾ ở desktop (khách yêu cầu 20/08/2026): vẽ bằng ::after ĐỊNH VỊ TUYỆT
   ĐỐI nên KHÔNG chiếm chỗ trong luồng ⇒ các tab không bị đẩy lệch như bản dùng
   nút thật (chốt cũ 06/08/2026: nút chiếm chỗ đẩy tab dịch trái 45px).
   Mobile vẫn dùng nút thật — cảm ứng không có hover, xem @media bên dưới. */
/* cursor:pointer cho CẢ span bọc, không chỉ thẻ <a> (khách 20/08/2026): vùng
   thừa của span — nhất là chỗ mũi tên ▾ vẽ ở ngoài <a> — trước đây vẫn là mũi
   tên trỏ thường, rê vào thấy hụt. */
.td-hasmenu{position:relative;display:inline-flex;align-items:center;cursor:pointer;}
@media (min-width:1025px){
  /* Giãn khoảng cách các tab menu (khách yêu cầu 20/08/2026): design gốc gap 26px
     nhìn hơi sát, nhất là khi có thêm mũi tên ▾. Override tại đây, KHÔNG sửa
     site.css/home.css vì hai file đó là bản copy nguyên văn của design. */
  .main-nav{gap:38px;}
  .td-hasmenu>a{position:relative;}
  .td-hasmenu>a::after{
    content:"";position:absolute;top:50%;left:calc(100% + 5px);
    width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;
    border-top:4px solid currentColor;opacity:.65;
    transform:translateY(-40%);transition:transform .18s ease,opacity .18s ease;
  }
  .td-hasmenu.is-hover>a::after,.td-hasmenu:focus-within>a::after{
    opacity:1;transform:translateY(-40%) rotate(180deg);
  }
}
.td-submenu{
  position:absolute;top:calc(100% + 14px);left:-14px;z-index:70;margin:0;padding:10px 0;
  min-width:238px;list-style:none;
  background:var(--white);border:1px solid var(--line-soft);border-radius:12px;
  box-shadow:0 18px 34px -16px rgba(26,24,20,.28);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .18s ease,transform .18s ease,visibility .18s;
}
/* Vùng đệm vô hình nối tab ↔ panel: chuột đi xuống không bị rơi hover.
   CHỈ cao đúng khoảng hở 14px (bằng offset top của panel) và KHÔNG kéo lên quá
   đó — bản cũ cao 28px nên tràn lên đè chính hàng menu, che các tab bên cạnh
   ⇒ di ngang từ tab này sang tab kia thì tab kia không nhận được chuột, dropdown
   không đổi (bug 24/08/2026). Việc "không rơi hover khi đi chéo" nay do JS lo
   bằng grace period, xem td-effects.js. */
.td-submenu::before{content:"";position:absolute;left:0;right:0;top:-14px;height:14px;cursor:pointer;}
.td-submenu li{margin:0;}
/* divider giữa các mục con (khách yêu cầu 20/08/2026) — mục cuối không gạch */
.td-submenu li + li{border-top:1px solid var(--line-soft);}
.td-submenu a{
  display:block;padding:9px 18px;font-family:var(--font-body);font-size:14px;font-weight:600;
  line-height:1.45;text-transform:none;color:var(--ink);white-space:normal;
  transition:color .18s ease,background-color .18s ease;
}
.td-submenu a:hover,.td-submenu a:focus-visible{color:var(--gold-deep);background:#fffaed;}
.td-submenu-toggle{display:none;}

/* Desktop: trạng thái mở do JS gắn class .is-hover (td-effects.js) — KHÔNG dùng
   :hover thuần nữa. Lý do: :hover là trạng thái độc lập của từng tab, không tab
   nào biết tab khác đang mở ⇒ khi chuột đi từ tab đang mở sang tab kế bên mà
   lướt qua mép panel/đệm, tab cũ vẫn giữ hover còn tab mới chưa nhận được ⇒
   dropdown "lúc đổi lúc không". JS giữ MỘT tab mở duy nhất nên chuyển tab luôn
   dứt khoát. Fallback không-JS: .no-js mở bằng :hover như cũ. */
@media (hover:hover) and (pointer:fine){
  .td-hasmenu.is-hover>.td-submenu{opacity:1;visibility:visible;transform:translateY(0);}
  html.no-td-menujs .td-hasmenu:hover>.td-submenu{opacity:1;visibility:visible;transform:translateY(0);}
  html.no-td-menujs .td-hasmenu:hover>a::after{opacity:1;transform:translateY(-40%) rotate(180deg);}
}
/* bàn phím: Tab tới tab cha hoặc bất kỳ mục con nào cũng mở panel */
.td-hasmenu:focus-within>.td-submenu{opacity:1;visibility:visible;transform:translateY(0);}

/* Bù chiều cao header sticky khi nhảy anchor (header 100px desktop / 75px mobile) */
.td-anchor-target{display:block;position:relative;scroll-margin-top:120px;}

@media (max-width:1024px){
  /* Menu mobile là cột dọc: tab + submenu xếp chồng, mở bằng nút mũi tên */
  .td-hasmenu{display:flex;flex-wrap:wrap;align-items:center;gap:0;}
  .td-hasmenu>a{flex:1 1 auto;}
  .td-submenu-toggle{
    display:flex;align-items:center;justify-content:center;flex:0 0 auto;
    width:40px;height:44px;padding:0;margin:0;background:none;border:0;cursor:pointer;
    border-bottom:1px solid #f2eee6;
  }
  .td-submenu-toggle::before{
    content:"";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;
    border-top:5px solid var(--ink);opacity:.6;transition:transform .2s ease;
  }
  .td-submenu-toggle[aria-expanded="true"]::before{transform:rotate(180deg);}
  .td-submenu{
    position:static;flex:1 0 100%;order:3;min-width:0;margin:0;padding:0;
    border:0;border-radius:0;box-shadow:none;background:#fdfaf3;
    opacity:1;visibility:visible;transform:none;transition:none;
    display:none;
  }
  .td-hasmenu.is-open>.td-submenu{display:block;}
  .td-submenu li + li{border-top:0;} /* mobile đã có border-bottom trên <a>, tránh gạch đôi */
  .td-submenu a{padding:11px 0 11px 18px;font-size:15px;font-weight:600;border-bottom:1px solid #f2eee6;}
  .td-submenu li:last-child a{border-bottom:0;}
  .td-submenu li:last-child{border-bottom:1px solid #f2eee6;}
  .td-anchor-target{scroll-margin-top:95px;}
}

/* =========================================================
   BÀI VIẾT — CỘT PHẢI (mục lục + tin khác) & GIÃN CHỮ CHO DỄ ĐỌC
   ---------------------------------------------------------
   Khách feedback 06/08/2026: (1) chữ và dòng quá sát, đọc mỏi mắt;
   (2) cần cột "Nội dung" + "Tin tức khác" bên phải bài viết.
   Markup do single.php dựng; article.css là bản copy design nên KHÔNG sửa,
   mọi thứ ở đây override theo class .art__layout/.art-toc/.art-side-news.
   Thân bài GIỮ 780px như design (độ dài dòng dễ đọc), sidebar lấp chỗ trống phải.
   ========================================================= */

/* ---- Khung 2 cột ---- */
.art__layout{
  max-width:1180px;margin:30px auto 0;
  display:grid;grid-template-columns:780px minmax(0,1fr);gap:40px;align-items:start;
}
/* .art__body của design có margin auto + max-width 780px — trong grid thì bỏ đi */
.art__layout .art__body{max-width:none;margin:0;}

/* ---- Giãn chữ cho thoáng (design 16px/1.6 → 17px/1.85) ---- */
.art__body{gap:24px;}
.art__body p{font-size:17px;line-height:1.85;letter-spacing:.005em;}
.art__body li{font-size:17px;line-height:1.85;}
.art__body ul,.art__body ol{gap:10px;}
/* tiêu đề phụ: thoáng trên, sát dưới để dính với đoạn nó dẫn */
.art__body h2,.art__body h3,.art__body h4{margin:20px 0 0;line-height:1.4;scroll-margin-top:120px;}
.art__body h2{font-size:27px;}
.art__body h3{font-size:22px;}
.art__fig figcaption,.art__body figure.wp-block-image figcaption{line-height:1.7;}

/* ---- Cột phải ---- */
.art__side{position:sticky;top:120px;display:flex;flex-direction:column;gap:24px;}

/* Mục lục */
.art-toc{
  border:1px solid #cfd8f0;border-radius:14px;padding:18px 20px 20px;background:#fff;
}
.art-toc__head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;}
.art-toc__title{font-family:var(--font-body);font-weight:600;font-size:19px;line-height:1.3;color:var(--ink);}
.art-toc__toggle{
  flex:0 0 auto;width:34px;height:34px;padding:0;border:1px solid #e0ddd6;border-radius:9px;
  background:#fff;cursor:pointer;position:relative;transition:background-color .18s ease,border-color .18s ease;
}
.art-toc__toggle::before{
  content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:14px;height:10px;
  background:
    linear-gradient(var(--ink),var(--ink)) 0 0/14px 2px no-repeat,
    linear-gradient(var(--ink),var(--ink)) 0 4px/14px 2px no-repeat,
    linear-gradient(var(--ink),var(--ink)) 0 8px/14px 2px no-repeat;
  opacity:.7;
}
.art-toc__toggle:hover{background:#fffaed;border-color:var(--gold-deep);}
.art-toc__list{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:2px;counter-reset:toc;}
.art-toc.is-collapsed .art-toc__list{display:none;}
.art-toc__item{margin:0;counter-increment:toc;}
.art-toc__item a{
  display:block;padding:7px 8px;border-radius:8px;
  font-size:15px;line-height:1.55;color:var(--ink);text-decoration:none;text-wrap:pretty;
  transition:color .18s ease,background-color .18s ease;
}
.art-toc__item a::before{content:counter(toc) ". ";color:inherit;}
/* mục con (H3) thụt vào, không đánh số cấp 1 */
.art-toc__item--h3{counter-increment:none;}
.art-toc__item--h3 a{padding-left:24px;font-size:14.5px;color:rgba(26,24,20,.78);}
.art-toc__item--h3 a::before{content:"— ";}
.art-toc__item a:hover{color:var(--gold-deep);background:#fffaed;}
.art-toc__item.is-current a{color:var(--gold-deep);background:#fff6e0;font-weight:600;}

/* Tin tức khác (cột phải) */
.art-side-news{border:1px solid #e7e2d9;border-radius:14px;padding:18px 20px 20px;background:#fff;}
.art-side-news__title{
  font-family:var(--font-body);font-weight:600;font-size:19px;line-height:1.3;color:var(--ink);margin:0;
}
.art-side-news__list{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:0;}
.art-side-news__list li+li{border-top:1px solid #f2eee6;}
.side-news{display:flex;align-items:flex-start;gap:12px;padding:12px 0;text-decoration:none;}
.side-news__img{
  flex:0 0 84px;width:84px;height:64px;object-fit:cover;border-radius:9px;display:block;
  transition:transform .18s ease;
}
.side-news__body{display:flex;flex-direction:column;gap:5px;min-width:0;}
.side-news__title{
  font-size:14.5px;font-weight:600;line-height:1.5;color:var(--ink);text-wrap:pretty;
  transition:color .18s ease;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
}
.side-news__date{font-size:12.5px;line-height:1.4;color:#767068;}
.side-news:hover .side-news__title{color:var(--gold-deep);}
.art-side-news__all{
  display:inline-block;margin-top:14px;font-weight:600;font-size:14px;color:var(--gold-link);
  text-decoration:none;transition:color .18s ease;
}
.art-side-news__all:hover{color:var(--gold-deep);}

@media (hover:hover) and (pointer:fine){
  .side-news:hover .side-news__img{transform:scale(1.04);}
}

/* ---- Thu hẹp dần ---- */
@media (max-width:1265px){
  .art__layout{max-width:100%;grid-template-columns:minmax(0,1fr) 320px;gap:32px;}
}
@media (max-width:1024px){
  /* Hết chỗ cho 2 cột → xếp dọc. Thứ tự đọc: MỤC LỤC → thân bài → tin khác
     (xem mục lục trước rồi mới đọc; danh sách tin để cuối, không chen giữa bài).
     Dùng flex + order — .art-toc là con của .art__side nên phải "kéo" nó ra
     bằng display:contents, khi đó order của từng khối mới ăn ở cấp layout. */
  .art__layout{display:flex;flex-direction:column;max-width:780px;gap:0;}
  .art__main{order:2;}
  .art__side{display:contents;position:static;}
  /* align-self:stretch — .art-toc là flex-item nên co lại vừa nội dung nếu không ép */
  .art-toc{order:1;margin-bottom:28px;align-self:stretch;}
  .art-side-news{order:3;margin-top:32px;align-self:stretch;}
  .art__body p,.art__body li{font-size:16.5px;line-height:1.8;}
}
@media (max-width:560px){
  .art__body p,.art__body li{font-size:16px;line-height:1.75;}
  .art__body h2{font-size:23px;}
  .art__body h3{font-size:20px;}
  .art-toc,.art-side-news{padding:16px;}
}

/* =========================================================
   NÚT "XEM THÊM" + TIÊU ĐỀ DẪN SANG TRANG CHUYÊN MỤC
   (2 ô "Tin tức sự kiện" / "Tin tức thị trường" ở trang /tin-tuc/)
   ---------------------------------------------------------
   Khách yêu cầu 06/08/2026: mỗi ô có nút "Xem thêm" mở ra trang đầy đủ, và
   bấm vào chính tiêu đề ô cũng sang trang đó.
   Nút do shortcode td_news_list/td_news_items tự xuất (inc/news.php) nên luôn
   nằm cuối danh sách, đúng chuyên mục của ô đó.
   ⚠ 2 cột này dùng flex:1 1 auto để lấp khoảng trắng đáy (xem khối td-news3
   phía trên) ⇒ nút PHẢI flex:0 0 auto, không thì bị kéo giãn cao ra.
   ========================================================= */
.news-more{
  flex:0 0 auto;align-self:flex-start;
  display:inline-flex;align-items:center;gap:7px;margin-top:4px;
  font-family:var(--font-body);font-weight:600;font-size:15px;line-height:1.4;
  color:var(--gold-link);text-decoration:none;
  transition:color .18s ease,gap .18s ease;
}
.news-more span{transition:transform .18s ease;}
.news-more:hover{color:var(--gold-deep);}
.news-more:hover span{transform:translateX(3px);}
/* nút nằm trong wrapper [ux_text] (bản local) thì wrapper cũng phải là flex column */
.td-news3 .col-inner>.text:has(>.news-more){display:flex;flex-direction:column;}

/* Tiêu đề ô thành link — giữ nguyên kiểu chữ design, chỉ đổi màu khi rê chuột */
.news-col__h--link{margin:0;}
.news-col__h--link a{color:inherit;text-decoration:none;transition:color .18s ease;}
.news-col__h--link a:hover{color:var(--gold-deep);}

/* =========================================================
   TRANG DANH SÁCH CHUYÊN MỤC (category.php)
   ---------------------------------------------------------
   Lưới thẻ dùng lại .rel-grid/.rel-card của khối "Tin tức khác" (article.css).
   ========================================================= */
.td-archive-hero img{width:100%;height:auto;display:block;}
.td-archive .crumb--onhero{margin-bottom:36px;}
.td-archive__desc{max-width:860px;margin:28px 0 0;font-size:16px;line-height:1.7;color:rgba(26,24,20,.72);}
.td-archive__grid{margin-top:36px;}
/* chuyên mục nhiều bài: lưới tự xuống hàng, mỗi thẻ cao bằng nhau */
.td-archive__grid{grid-auto-rows:1fr;}
.td-archive__empty{margin-top:32px;font-size:16px;color:rgba(26,24,20,.7);}
.td-archive__back{
  display:inline-block;margin-top:36px;font-weight:600;font-size:15px;
  color:var(--gold-link);text-decoration:none;transition:color .18s ease;
}
.td-archive__back:hover{color:var(--gold-deep);}

/* Phân trang */
.td-pager{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:40px;}
.td-pager .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:42px;height:42px;padding:0 14px;
  border:1px solid var(--line-soft);border-radius:9px;background:#fff;
  font-size:15px;line-height:1;color:var(--ink);text-decoration:none;
  transition:color .18s ease,border-color .18s ease,background-color .18s ease;
}
.td-pager .page-numbers:hover{color:var(--gold-deep);border-color:var(--gold-deep);background:#fffaed;}
.td-pager .page-numbers.current{
  background:var(--gold-deep);border-color:var(--gold-deep);color:#fff;font-weight:600;
}
.td-pager .page-numbers.dots{border:0;background:none;min-width:0;padding:0 4px;}

@media (max-width:560px){
  .td-pager .page-numbers{min-width:38px;height:38px;padding:0 10px;font-size:14px;}
}

/* =========================================================
   CĂN ĐỀU 2 BÊN cho các đoạn MÔ TẢ (khách yêu cầu 06/08/2026)
   ---------------------------------------------------------
   Áp cho đoạn văn xuôi nhiều dòng ở 5 trang menu + thân bài viết.
   KHÔNG áp cho: nhãn, số liệu, nút, breadcrumb, chú thích ảnh.

   CẬP NHẬT 20/08/2026: khách yêu cầu căn đều CẢ TIÊU ĐỀ LẪN NỘI DUNG các thẻ
   ở trang Tin tức + trang chuyên mục ⇒ đảo lại chốt cũ 06/08/2026 (khi đó cố ý
   để thẻ hẹp căn trái vì sợ hở khe). Xem khối "THẺ TIN TỨC" bên dưới.

   Liệt kê tường minh từng khối thay vì quét chung `p` — tránh áp nhầm vào
   nhãn/số liệu trong các thẻ số, và không phụ thuộc cấu trúc builder.
   `hyphens:none` để trình duyệt không tự gạch nối chữ tiếng Việt khi giãn dòng.
   ========================================================= */
.page .about-text p,
.page .intro-copy p,
.page .sec-intro__head p,
.page .eco-card__text,
.page .loc2__text,
.page .labor-block p,
.page .intl-card__body p,
.page .nn-head p,
.page .featured__body p,
.page .tqcard__desc,
.page .cta-lead,
.page .policy-card__li,
.page .td-archive__desc,
/* thân bài viết: đoạn văn + danh sách (trừ chú thích ảnh, giữ căn giữa) */
.art__body p,
.art__body li{
  text-align:justify;
  text-justify:inter-word;
  hyphens:none;
  -webkit-hyphens:none;
}
/* Đoạn lead in nghiêng đầu bài vẫn căn đều, nhưng chú thích ảnh giữ NGUYÊN căn giữa */
.art__body figcaption,
.art__body .wp-element-caption,
.art__fig figcaption{text-align:center;}

/* Màn hẹp: dòng ngắn lại nên căn đều dễ hở khe → trả về căn trái */
@media (max-width:560px){
  .page .about-text p,
  .page .intro-copy p,
  .page .sec-intro__head p,
  .page .eco-card__text,
  .page .loc2__text,
  .page .labor-block p,
  .page .intl-card__body p,
  .page .nn-head p,
  .page .featured__body p,
  .page .tqcard__desc,
  .page .cta-lead,
  .page .policy-card__li,
  .page .td-archive__desc,
  .art__body p,
  .art__body li{text-align:left;}
}

/* =========================================================
   THẺ TIN TỨC: CĂN ĐỀU 2 BÊN cả TIÊU ĐỀ lẫn NỘI DUNG (khách 20/08/2026)
   ---------------------------------------------------------
   Phạm vi: trang /tin-tuc/ (thẻ nổi bật, cột danh sách, cột thẻ có ảnh)
   và trang chuyên mục /category/<slug>/ (lưới .rel-card).
   Tiêu đề là thẻ <a>/<span>/<h2> ⇒ phải có display:block thì justify mới ăn
   (phần tử inline không nhận text-align).
   Dòng CUỐI của đoạn justify vẫn căn trái theo mặc định — đó là hành vi đúng,
   không phải lỗi hiển thị.
   ========================================================= */
/* Tiêu đề thẻ NỔI BẬT (.featured__body h2) căn TRÁI — khách 26/08/2026:
   chữ to 30px căn đều bị hở khe xấu. Chỉ chỗ đó, các thẻ khác giữ justify. */
.page .evt-list a,
.page .mkt-item span,
.page .news-card__body h3,
.page .news-feature__body h2,
.rel-card__title,
.rel-card__desc{
  text-align:justify;
  text-justify:inter-word;
  hyphens:none;
  -webkit-hyphens:none;
}
/* .mkt-item span là inline ⇒ ép về block để nhận căn đều.
   .evt-list a KHÔNG đụng display: nó đang là flex (rule .td-news3 phía trên chia
   đều chiều cao cột) — text ẩn danh trong flex vẫn nhận text-align của chính nó,
   nên justify ăn mà layout giữ nguyên. */
.page .mkt-item span{display:block;}

/* Màn hẹp: dòng quá ngắn, căn đều sẽ hở khe → trả về căn trái */
@media (max-width:560px){
  .page .evt-list a,
  .page .mkt-item span,
  .page .news-card__body h3,
  .page .news-feature__body h2,
  .rel-card__title,
  .rel-card__desc{text-align:left;}
}

/* =========================================================
   TRANG PHÁP LÝ: CĂN ĐỀU 2 BÊN (khách 20/08/2026)
   ---------------------------------------------------------
   /chinh-sach-bao-mat/ và /dieu-khoan-su-dung/ — nội dung thuần <p>/<li>,
   không có class design nào để bám ⇒ mốc là body.td-legal do filter body_class
   trong functions.php gắn theo SLUG GỐC (chạy đúng cho cả 5 ngôn ngữ).
   Hai trang dùng HAI template khác nhau: /chinh-sach-bao-mat/ là page-blank
   (nội dung trong .content-area), /dieu-khoan-su-dung/ là template mặc định
   (nội dung trong .page) ⇒ phải phủ cả hai mốc. Giới hạn trong vùng nội dung
   để không chạm header/footer/form liên hệ.
   ========================================================= */
.td-legal .content-area p,
.td-legal .content-area li,
.td-legal .page>.row p,
.td-legal .page>.row li{
  text-align:justify;
  text-justify:inter-word;
  hyphens:none;
  -webkit-hyphens:none;
}
/* Màn hẹp: dòng ngắn, căn đều sẽ hở khe → trả về căn trái */
@media (max-width:560px){
  .td-legal .content-area p,
  .td-legal .content-area li,
  .td-legal .page>.row p,
  .td-legal .page>.row li{text-align:left;}
}

/* =========================================================
   MOBILE: BADGE VÀNG (.sec-tag) KHÔNG QUÁ 50% BỀ NGANG MÀN HÌNH
   ---------------------------------------------------------
   Khách 06/08/2026: badge dài lê thê trên điện thoại, xấu.
   Design đặt `--tag-wc: min(var(--tag-w), 76vw)` ⇒ trên màn 390px khối vàng
   ra 296px = 76% màn hình. Hạ ngưỡng xuống 50vw.
   Viền SVG do drawSecTags() (site.js) tự vẽ lại theo px THẬT của khối vàng
   nên không phải sửa JS — nó tự khớp.
   ⚠ Nhãn là white-space:nowrap: thu khối vàng mà không thu chữ thì chữ tràn ra
   ngoài. Vì vậy giảm cỡ chữ theo vw và cho phép xuống dòng khi quá chật.
   ========================================================= */
@media (max-width:768px){
  .sec-tag{--tag-wc:min(var(--tag-w),50vw);}
  /* chữ vừa trong khối vàng 50vw; nowrap → co theo vw */
  .sec-tag__label{font-size:clamp(13px,3.5vw,20px);}
}
@media (max-width:480px){
  /* màn rất hẹp: nhãn dài (vd "Khách hàng & đối tác") vẫn không lọt 50vw
     ⇒ cho xuống 2 dòng thay vì tràn, badge cao thêm một chút */
  .sec-tag{height:auto;min-height:58px;}
  .sec-tag__label{
    font-size:clamp(12px,3.2vw,17px);
    white-space:normal;text-wrap:balance;
    line-height:1.15;
    /* KHÔNG đặt text-align/max-width ở đây: rule căn sát viền phía trên lo phần
       căn lề (trái/phải theo hướng badge), max-width sẽ phá padding sát viền. */
  }
}

/* =========================================================
   BADGE VÀNG: CĂN GIỮA CHỮ CẢ NGANG LẪN DỌC (khách 06/08/2026)
   ---------------------------------------------------------
   Design căn chữ bằng toạ độ cứng nên nhìn lệch:
     - ngang: `left:calc((var(--tag-wc) - 29px)/2)` — trừ 29px (nửa cạnh xiên 58px)
       để "cân thị giác" với hình thang ⇒ đo thực tế lệch trái 29px.
     - dọc:   `top:30px` (mobile 22px) đặt cứng, không theo chiều cao khối vàng
       ⇒ lệch lên 10-11px so với tâm.
   Thay bằng flex căn giữa CHÍNH XÁC theo khối vàng: phủ đúng vùng .sec-tag__fill
   (trái: từ 0 rộng --tag-wc; phải: từ mép phải vào) rồi center 2 chiều.
   Khối vàng và viền SVG giữ NGUYÊN — chỉ chữ được căn lại.
   ========================================================= */
.sec-tag__label{
  /* phủ đúng khối vàng: cùng top/height với .sec-tag__fill */
  left:0;right:auto;top:15px;height:65px;width:var(--tag-wc);
  transform:none;
  display:flex;align-items:center;
  box-sizing:border-box;
  /* CĂN SÁT VIỀN (khách chốt 06/08/2026, thay cho căn giữa):
     badge trái → chữ sát mép TRÁI; badge phải → chữ sát mép PHẢI.
     Khối vàng là HÌNH THANG, cạnh xiên 58px nằm ở phía TRONG:
     - bản trái  : cạnh xiên bên phải  → lề phải phải chừa 58px + thở 12px
     - bản --right: cạnh xiên bên trái → lề trái  phải chừa 58px + thở 12px
     Không chừa thì chữ đè lên phần vát, nhìn như tràn ra ngoài. */
  justify-content:flex-start;
  padding:0 70px 0 26px;
  /* nhãn dài xuống 2 dòng: justify-content chỉ căn CẢ KHỐI, từng dòng bên trong
     vẫn theo text-align ⇒ phải set luôn, không thì dòng ngắn nằm giữa */
  text-align:left;
}
.sec-tag--right .sec-tag__label{
  left:auto;right:0;
  justify-content:flex-end;
  padding:0 26px 0 70px;
  text-align:right;
}
/* dọc: chữ vẫn căn giữa chiều cao khối vàng (align-items:center ở trên) */

/* mobile: khối vàng đổi top/height trong @media (max-width:768px) của site.css
   → chữ phải bám ĐÚNG ngưỡng 768px đó. Dùng nhầm 1024px thì trong khoảng
   769-1024px chữ lấy toạ độ mobile còn khối vàng vẫn cỡ desktop ⇒ lệch dọc 26px. */
@media (max-width:768px){
  .sec-tag__label{
    top:11px;height:47px;
    /* mobile khối vàng chỉ 50vw: cạnh vát 58px + padding desktop chiếm gần hết
       bề ngang ⇒ chữ bị ép, không còn sát viền được. Thu padding lại
       (vát mobile hẹp hơn theo tỉ lệ) để chữ thật sự nằm sát mép. */
    padding:0 40px 0 14px;
  }
  .sec-tag--right .sec-tag__label{padding:0 14px 0 40px;}
}
/* nhãn xuống 2 dòng ở màn rất hẹp vẫn giữ giữa nhờ flex + height auto */
@media (max-width:480px){
  .sec-tag__label{max-width:var(--tag-wc);}
}

/* =========================================================
   MOBILE: RÚT GỌN FOOTER (khách 06/08/2026 — "footer quá dài")
   ---------------------------------------------------------
   Đo trước khi sửa (màn 390x844): section CTA cao 1193px ≈ 1.5 màn hình.
     form 500px + cột trái 455px (lead 66 + 3 dòng liên hệ + social 151 + copyright 42).
   Giữ ĐỦ 4 ô nhập (user chốt) — rút gọn bằng cách bỏ khoảng thừa, không bỏ nội dung:
     · Họ tên + SĐT về lại 2 CỘT (site.css dòng 198 ép 1 cột — thủ phạm chính)
     · nhãn/ô nhập/khoảng cách thu nhẹ, ô Tin nhắn thấp lại
     · icon liên hệ + social nhỏ lại, bớt padding giữa các khối
   Chỉ áp ≤768px. Desktop giữ nguyên 100% design.
   ========================================================= */
@media (max-width:768px){
  /* --- Khung section --- */
  .sec-cta{padding:44px 0;}
  .sec-cta__inner{gap:14px;}

  /* --- Form --- */
  .cta-form{padding:18px;border-radius:18px;}
  /* Họ tên + SĐT nằm 2 cột (site.css ép 1fr ở mobile → trả lại 2 cột) */
  .field-row{grid-template-columns:1fr 1fr;gap:10px;padding-top:12px;}
  .field{gap:5px;}
  .field label{font-size:12px;line-height:16px;}
  .field input,.field textarea{padding:11px 13px;font-size:14px;border-radius:9px;}
  /* textarea: phải thắng `.page .cta-form .field textarea{height:71px;min-height:71px}`
     trong flatsome-adapt.css (specificity cao hơn) — bám đủ chuỗi + min-height.
     Cao ĐÚNG 1 dòng (line-height 1.4 × 14px + padding 11×2 ≈ 42px) và
     `overflow-y:hidden` để KHÔNG hiện thanh cuộn; tắt luôn tay kéo resize
     (kéo giãn ở mobile chỉ làm vỡ bố cục vừa thu gọn). */
  .page .cta-form .field textarea,.field textarea{
    height:42px;min-height:42px;line-height:1.4;
    overflow-y:hidden;resize:none;
  }
  .field--msg{padding-top:12px;}
  /* nút gửi sát hơn */
  .cta-form .btn-gold,.cta-form button,.cta-form input[type="submit"]{margin-top:14px;}
  /* ô trong hàng 2 cột hẹp → placeholder nhỏ hơn cho khỏi bị cắt (vd "email@congty.com") */
  .field-row .field input::placeholder{font-size:13px;}

  /* --- Cột trái: thông tin liên hệ --- */
  .cta-lead{font-size:15px;line-height:1.5;}
  .cta-contacts{gap:10px;padding-top:16px;}
  .cta-item{gap:12px;}
  .gold-box{width:38px;height:38px;border-radius:10px;}
  .gold-box img{width:18px;height:18px;}
  .cta-item__label{font-size:11px;line-height:16px;letter-spacing:1.2px;}
  .cta-item__value{font-size:14px;line-height:20px;}

  /* --- Social + copyright --- */
  .cta-social{gap:9px;padding-top:14px;}
  .cta-social__row{gap:9px;}
  .cta-social__row .gold-box img{width:20px;height:20px;}
  .cta-copyright{font-size:11px;line-height:1.5;letter-spacing:.8px;}
}
/* Màn rất hẹp (≤374px: iPhone SE): 2 cột thành quá chật → trả về 1 cột,
   vẫn giữ mọi thu gọn khác. Từ 375px trở lên giữ 2 cột (đã đo: ô ~150px, đủ rộng). */
@media (max-width:374px){
  .field-row{grid-template-columns:1fr;gap:9px;}
}

/* =========================================================
   MOBILE: KHỐI "KHÁCH HÀNG & ĐỐI TÁC" — xếp lưới cho gọn
   (khách 06/08/2026: "sắp xếp lộn xộn, cần logic dễ nhìn")
   ---------------------------------------------------------
   Trước: .logo-row là flex-wrap ⇒ badge + 7 logo KH (và 3 logo ĐT) wrap tuỳ ý
   thành 1-3-3 / 1-2, các món lệch nhau vài px, VẠCH NGĂN vẫn hiện.
   design gốc đã có `.logo-sep{display:none}` ở mobile (home.css 593) nhưng THUA
   rule `.page span.logo-sep{display:block}` của khối blockify (native 310)
   ⇒ phải ẩn lại với selector đủ mạnh.
   Sau: badge đứng riêng 1 hàng, logo xếp LƯỚI 2 CỘT đều nhau, canh giữa ô.
   ========================================================= */
@media (max-width:768px){
  .logos{gap:26px;}
  /* mỗi hàng = badge (full dòng) + lưới logo 2 cột */
  .logo-row{
    display:grid;grid-template-columns:1fr 1fr;
    gap:14px 12px;justify-items:center;align-items:center;
    width:100%;margin:0;
  }
  .logo-row--partner{gap:14px 12px;}
  /* badge chiếm trọn 1 dòng, canh trái cho thẳng hàng với các section khác */
  .logo-badge{grid-column:1 / -1;justify-self:start;}
  /* vạch ngăn: ẩn hẳn ở mobile (design gốc cũng ẩn) — phải thắng
     `.page span.logo-sep{display:block}` ở khối blockify phía trên */
  .page span.logo-sep,.logo-sep{display:none!important;}
  /* ô logo cao bằng nhau ⇒ lưới thẳng hàng, không so le */
  .logo-box,.logo-row--partner .logo-box{
    height:64px;width:100%;padding:6px 0;
  }
  .logo-box img,.logo-row--partner .logo-box img{
    width:auto;max-width:100%;height:100%;object-fit:contain;
  }
}
/* Máy nhỏ: logo hẹp lại chút cho thoáng */
@media (max-width:374px){
  .logo-row{gap:12px 10px;}
  .logo-box,.logo-row--partner .logo-box{height:56px;}
}

/* =========================================================
   BẢN THỬ v2 — section "Vị trí chiến lược" trên MOBILE (07/08/2026)
   ---------------------------------------------------------
   Khách gửi ảnh tham khảo (Du Long IP): lưới 2×2, icon TRÒN đặt giữa phía trên,
   số liệu + nhãn căn giữa. Bản v2 bám bố cục đó nhưng GIỮ tông xanh/vàng
   Tam Dương (user chốt 07/08/2026).

   ⚠ ĐANG CHỜ DUYỆT — KHÔNG override bản cũ:
     · desktop (>768px): v2 ẩn, bản cũ chạy y như trước
     · mobile  (≤768px): v2 hiện, bản cũ ẩn
   Không duyệt thì chạy `tools-locv2.php --remove` là sạch, CSS này vô hại
   (không có section .sec-location-v2 thì mọi rule dưới đây không bám vào đâu).
   ========================================================= */
.page .section.sec-location-v2{display:none;}

@media (max-width:768px){
  /* đổi vai: v2 lên, bản cũ tạm ẩn */
  .page .section.sec-location-v2{display:block;background:var(--surface);}
  .page .section.sec-location{display:none;}

  .locv2-head{align-items:flex-start;text-align:left;}
  .locv2-head h2{font-size:24px;line-height:1.25;}
  .locv2-head p{font-size:15px;line-height:1.55;}

  /* --- Lưới 2×2 --- */
  .page .row.td-locv2{
    display:grid;grid-template-columns:1fr 1fr;gap:12px;
    width:100%;max-width:none;margin:0;
    /* 4 thẻ CAO BẰNG NHAU dù nhãn dài ngắn khác nhau ("Trung tâm Hà Nội" 1 dòng
       vs "Tuyến đường sắt cấp vùng Hà Nội - Lào Cai" 3 dòng) */
    grid-auto-rows:1fr;align-items:stretch;
  }
  .td-locv2>.col{padding:0!important;width:auto;max-width:none;}
  .td-locv2>.col>.col-inner{height:100%;}
  .td-locv2 .col-inner>.text{margin:0;height:100%;}
  /* clearfix của .row Flatsome thành grid-item ⇒ ngốn 1 slot (gotcha dự án) */
  .page .row.td-locv2::before,.page .row.td-locv2::after{content:none;}

  /* --- Thẻ: icon tròn giữa trên, chữ căn giữa (theo ảnh tham khảo) --- */
  .locv2-card{
    height:100%;box-sizing:border-box;
    display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
    gap:10px;padding:20px 14px 18px;
    background:rgba(28,72,36,.86);border:1px solid #5ecc72;border-radius:14px;
    color:#fff;text-align:center;
    box-shadow:0 6px 20px -8px rgba(0,0,0,.25);
  }
  /* vòng tròn icon — điểm nhấn chính của bố cục mới */
  .locv2-card__ic{
    flex:none;width:60px;height:60px;border-radius:50%;
    display:flex;align-items:center;justify-content:center;
    background:linear-gradient(135deg,#2f6b3d,#1c4824);
    border:1px solid rgba(238,200,112,.55);
    box-shadow:0 4px 14px -4px rgba(0,0,0,.4);
  }
  .locv2-card__ic img{width:28px;height:28px;display:block;}
  .locv2-card__num{
    font-family:var(--font-head);line-height:1.05;letter-spacing:-.3px;color:var(--gold);
    margin:2px 0 0;
  }
  .locv2-card__num b{font-weight:400;font-size:34px;}
  .locv2-card__num span{font-size:16px;color:#fff;}
  .locv2-card__lbl{
    font-size:13.5px;line-height:1.45;color:rgba(255,255,255,.92);
    text-wrap:pretty;margin:0;
  }
  /* bản đồ trong v2: dùng lại rule .td-locmap sẵn có (đã vừa màn hình) */
  .img.td-locmap-v2{margin-top:22px;}
}
@media (max-width:374px){
  .locv2-card{padding:16px 10px 14px;gap:8px;}
  .locv2-card__ic{width:52px;height:52px;}
  .locv2-card__ic img{width:24px;height:24px;}
  .locv2-card__num b{font-size:29px;}
  .locv2-card__lbl{font-size:12.5px;}
}

/* =========================================================
   BẢN THỬ v2 — section "Hạ tầng kỹ thuật" (trang Tổng quan) trên MOBILE
   (07/08/2026 — khách chốt layout v2 trang chủ, yêu cầu áp y hệt cho section này)
   ---------------------------------------------------------
   Cùng cơ chế đổi vai như sec-location-v2:
     · desktop (>768px): v2 ẩn, bản cũ chạy y như trước
     · mobile  (≤768px): v2 hiện, bản cũ ẩn
   Bố cục: lưới 2×2, icon TRÒN giữa phía trên, tiêu đề + thông số căn giữa.
   Khác thẻ trang chủ ở chỗ có TIÊU ĐỀ CHỮ và dòng kẻ phân cách ⇒ giữ cả 2,
   nhưng thu badge 100→64px và tiêu đề 30→17px cho vừa cột hẹp.
   ========================================================= */
.page .section.sec-infra-v2{display:none;}

@media (max-width:768px){
  .page .section.sec-infra-v2{display:block;}
  /* ẩn bản cũ: bám section CHỨA .td-infra (section cũ không có class riêng) */
  .page .section:has(> .section-content .td-infra){display:none;}

  /* --- Lưới 2×2 --- */
  .page .row.td-infrav2{
    display:grid;grid-template-columns:1fr 1fr;gap:56px 12px;
    width:100%;max-width:none;margin:0;
    grid-auto-rows:1fr;align-items:stretch;
  }
  .td-infrav2>.col{padding:0!important;width:auto;max-width:none;}
  .td-infrav2>.col>.col-inner{height:100%;}
  .td-infrav2 .col-inner>.text{margin:0;height:100%;}
  .page .row.td-infrav2::before,.page .row.td-infrav2::after{content:none;}

  /* --- Thẻ: giữ ngôn ngữ design (viền vàng, nền trắng) + icon tròn nhô lên --- */
  .infrav2-card{
    position:relative;height:100%;box-sizing:border-box;
    display:flex;flex-direction:column;align-items:center;
    gap:8px;padding:42px 12px 18px;
    background:#fff;border:1px solid #f2c26f;border-radius:14px;
    box-shadow:0 6px 9px rgba(0,0,0,.05);
    text-align:center;
  }
  .infrav2-card__ic{
    position:absolute;top:-32px;left:50%;transform:translateX(-50%);
    width:64px;height:64px;border-radius:50%;
    display:flex;align-items:center;justify-content:center;
    background:linear-gradient(#1b3a2a,#33674c);border:1px solid #f2c26f;
    box-shadow:0 4px 12px -4px rgba(0,0,0,.35);
  }
  .infrav2-card__ic img{width:32px;height:32px;object-fit:contain;display:block;}
  .infrav2-card__title{
    font-family:var(--font-head);font-size:17px;line-height:1.15;color:#203f30;
    margin:0;text-wrap:balance;
  }
  /* dòng kẻ trang trí như design (span inline bị blockify ⇒ ép block) */
  .page span.infrav2-card__div{
    display:block;width:60px;height:8px;flex:none;
    background:url('figma/tq-divider.svg') center/contain no-repeat;
  }
  .infrav2-card__spec{
    font-size:13px;line-height:1.5;color:var(--ink);margin:0;text-wrap:pretty;
  }
  .infrav2-card__spec b{font-weight:700;}
}
@media (max-width:374px){
  .page .row.td-infrav2{gap:50px 10px;}
  .infrav2-card{padding:38px 9px 15px;}
  .infrav2-card__ic{width:56px;height:56px;top:-28px;}
  .infrav2-card__ic img{width:28px;height:28px;}
  .infrav2-card__title{font-size:15.5px;}
  .infrav2-card__spec{font-size:12.5px;}
}

/* =========================================================
   KHỐI LOGO "Khách hàng & đối tác" — dựng bằng element GALLERY
   (khách 07/08/2026: đổi từ HTML thủ công sang Gallery để admin tự thêm logo)
   ---------------------------------------------------------
   Giữ NGUYÊN giao diện đã duyệt: badge «KHÁCH HÀNG»/«ĐỐI TÁC» + hàng logo
   (user chốt giữ badge, dùng lưới TĨNH không slider).
   Flatsome render gallery thành .row > .col > .box > .image-cover với ảnh
   position:absolute + padding-top theo tỉ lệ ⇒ phải ép về "ảnh nằm giữa ô,
   giữ tỉ lệ gốc" cho giống .logo-box cũ.
   ========================================================= */
/* (.logos--gal của bản gộp đầu đã bỏ — badge và gallery nay là element riêng) */
/* Sau khi tách [ux_gallery] ra NGOÀI [ux_text] (để builder hiện đúng element
   Gallery), badge nằm trong .td-logobadge riêng.
   Badge CĂN TRÁI như bản HTML gốc (khách chốt 07/08/2026) — chỉ hàng logo mới
   canh giữa. `.logos` gốc là flex align-items:center nên badge từng bị kéo vào
   giữa; ở đây wrapper là .text thường ⇒ chỉ cần text-align:left. */
.page .text.td-logobadge{margin:0;text-align:left;}
.page .text.td-logobadge .logo-badge{margin:0;}
.page .text.td-logobadge--partner{margin-top:20px;}
/* khoảng cách giữa badge và hàng logo của nó */
.page .text.td-logobadge+.row.td-logogal{margin-top:14px;}

/* hàng gallery: bỏ gutter mặc định, canh giữa */
.page .row.td-logogal{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:center;
  margin:0;width:100%;max-width:none;
}
.page .row.td-logogal>.col{
  padding:0 10px;width:auto;max-width:none;flex:0 0 auto;
}
.td-logogal .col-inner,.td-logogal .box,.td-logogal .box-image{width:auto;}
/* Flatsome dùng padding-top % để giữ tỉ lệ → bỏ, cho ảnh tự cao 72px như design */
.td-logogal .box-image .image-cover{position:static!important;padding-top:0!important;height:auto!important;}
.td-logogal .box-image img{
  position:static!important;width:auto!important;max-width:100%;
  height:72px!important;object-fit:contain!important;display:block;
}
.td-logogal--partner .box-image img{height:84px!important;}
/* Flatsome gắn sẵn `box-overlay dark` + <div class="overlay"> nền đen 15%
   ⇒ logo bị phủ XÁM. Phải tắt cả lớp phủ lẫn nền của box. */
.td-logogal .box-image .image-overlay,
.td-logogal .box .overlay,
.td-logogal .box-text{display:none!important;}
.td-logogal .box,.td-logogal .box-image,.td-logogal .col-inner{
  background:none!important;box-shadow:none!important;
}
.td-logogal .box.box-overlay,.td-logogal .box.dark{background-color:transparent!important;}
/* bỏ hiệu ứng phóng của gallery — logo đứng yên như bản HTML cũ */
.td-logogal .box-image.image-zoom img{transform:none!important;transition:none!important;}
.td-logogal .box{margin:0;}
/* ảnh gallery bọc trong <a> mở lightbox — logo không cần, tắt con trỏ bấm */
.td-logogal a.image-lightbox{pointer-events:none;cursor:default;display:block;}

/* vạch ngăn giữa các logo — dựng lại bằng border cho giống bản HTML cũ */
.page .row.td-logogal>.col+.col{border-left:1px solid #e7e2d9;}

@media (max-width:768px){
  /* mobile: lưới 2 cột như bản đã duyệt, badge riêng 1 dòng (căn trái), bỏ vạch ngăn */
  .page .row.td-logogal{
    display:grid;grid-template-columns:1fr 1fr;gap:14px 12px;
    justify-items:center;align-items:center;
  }
  .page .row.td-logogal::before,.page .row.td-logogal::after{content:none;}
  .page .row.td-logogal>.col{padding:0;width:100%;}
  .page .row.td-logogal>.col+.col{border-left:0;}
  .td-logogal .box-image img,.td-logogal--partner .box-image img{height:56px!important;}
}
@media (max-width:374px){
  .td-logogal .box-image img,.td-logogal--partner .box-image img{height:48px!important;}
}

/* Badge «ĐỐI TÁC» xuống dòng riêng + 2 badge canh trái thẳng hàng (khách 10/08/2026).
   Prod: admin đã dựng lại section bằng builder — nhóm Đối tác là 1 row
   [badge col-2 | gallery col-8] align-center ⇒ badge nằm CHUNG HÀNG với logo
   và thụt vào (x=202 trong khi badge Khách hàng x=95). Ép row đó xếp dọc bằng
   CSS, KHÔNG sửa content (giữ chỉnh sửa admin, builder re-save không phá).
   Gallery admin dựng lại mang class `client-logo-gallery` (không còn td-logogal);
   các rule td-logogal phía trên chỉ còn phục vụ DB local. */
.page .row:has(> .col > .col-inner > .td-logobadge--partner){display:block;}
.page .row:has(> .col > .col-inner > .td-logobadge--partner) > .col{
  width:100%;max-width:100%;flex:none;margin:0;
}
/* col chứa badge bỏ padding đáy để khoảng cách badge→logo bằng nhóm Khách hàng */
.page .row:has(> .col > .col-inner > .td-logobadge--partner) > .col:has(.td-logobadge--partner){
  padding-bottom:0;
}
/* 3 logo Đối tác đứng gần nhau (khách 12/08/2026): Custom CSS của admin ép logo
   max-width:170px căn giữa ô, mà 3 ô gallery chia đều cả bề ngang (ô 418px)
   ⇒ khe giữa các logo ~250px. Cap bề rộng gallery để ô co lại (~233px, khe 63px
   ≈ mật độ hàng Khách hàng); logo giữ nguyên 170px, CỤM CĂN GIỮA trang
   (khách chốt 12/08/2026 — margin auto đè margin:0 -10px của row-small).
   Flickity đo cell lúc init (CSS đã load trước) nên slider không lệch. */
@media (min-width:850px){
  .page .row:has(> .col > .col-inner > .td-logobadge--partner) .row.client-logo-gallery{
    max-width:700px;margin-left:auto;margin-right:auto;
  }
}

/* =========================================================
   LANGUAGE SWITCHER (WPML, 10/08/2026) — ô .lang của design thành dropdown thật.
   Trạng thái tĩnh (nút = cờ + tên ngôn ngữ) giữ NGUYÊN layout .lang của site.css
   ⇒ pixel bất biến; chỉ thêm menu xổ xuống ẩn mặc định.
   ========================================================= */
.td-lang{position:relative}
.td-lang__cur{display:flex;align-items:center;gap:7px;background:none;border:0;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit}
.td-lang__menu{display:none;position:absolute;top:100%;right:0;margin:10px 0 0;padding:6px 0;list-style:none;background:#fff;border:1px solid #eee;border-radius:8px;box-shadow:0 10px 28px rgba(0,0,0,.14);min-width:170px;z-index:1200}
/* cầu hover: phủ khe hở 10px giữa nút và menu để rê chuột xuống không bị đóng */
.td-lang__menu::before{content:'';position:absolute;left:0;right:0;top:-12px;height:12px}
.td-lang:hover .td-lang__menu,.td-lang.is-open .td-lang__menu,.td-lang:focus-within .td-lang__menu{display:block}
.td-lang__menu li{margin:0;list-style:none}
.td-lang__menu li a{display:flex;align-items:center;gap:8px;padding:8px 14px;font-family:var(--font-head);font-size:14px;color:#000;white-space:nowrap;text-decoration:none}
.td-lang__menu li a:hover{background:#f6f1e6}
.td-lang__menu img{width:23px;height:18px;border-radius:3px;object-fit:cover;flex:none}
/* mobile: ô ngôn ngữ nằm trong panel menu xổ dọc — menu hiển thị tĩnh, không absolute */
@media (max-width:768px){
  .td-lang__menu{position:static;box-shadow:none;border:0;border-radius:0;margin:4px 0 0;padding:0 0 0 30px;min-width:0}
  .td-lang__menu::before{content:none}
  .td-lang__menu li a{padding:7px 0}
}

/* =========================================================
   FOOTER — Chính sách bảo mật / Điều khoản sử dụng (khách 12/08/2026)
   2 link đặt ngay dưới dòng copyright trong .cta-social (flex column, gap 12px
   ⇒ tự xuống dòng, không phải chỉnh layout khối). Kiểu chữ theo .cta-copyright
   nhưng KHÔNG uppercase để phân biệt với dòng bản quyền; gạch chân khi hover.
   URL do admin điền trong Customizer → "Thông tin website (Webico)" (mặc định #).
   ========================================================= */
.cta-legal{
  display:flex;align-items:center;flex-wrap:wrap;gap:10px;
  margin:0;font-family:var(--font-head);font-size:13px;line-height:20.8px;color:#fff;
}
.cta-legal a{color:#fff;text-decoration:none;opacity:.85;transition:opacity .18s ease}
.cta-legal a:hover{opacity:1;text-decoration:underline}
.cta-legal__sep{color:#fff;opacity:.45}
@media (max-width:768px){
  .cta-legal{font-size:11px;line-height:1.5;gap:8px;}
}

/* =========================================================
   Trang chủ — khoảng cách trên "TAM DUONG INDUSTRIAL PARK" (20/08/2026)
   ---------------------------------------------------------
   Khách báo tiêu đề bị hở một khoảng trắng phía trên. Đo thực tế: [gap] của
   builder giữa .sec-intro__head và .intro-copy đẩy xuống 30px, trong khi
   khoảng dưới tiêu đề chỉ 10px (gap của .intro-copy) ⇒ nhìn lệch hẳn.
   Cân lại thành 14px / 14px cho đều.
   Bám selector CẤU TRÚC (.gap-element + .intro-copy) chứ KHÔNG bám #gap-<số>:
   id đó builder sinh lại mỗi lần admin lưu và khác nhau local ↔ prod.
   Cần !important vì builder in inline <style> cho chính id ấy.
   ========================================================= */
.gap-element + .intro-copy{margin-top:0;}
.gap-element:has(+ .intro-copy){padding-top:14px !important;height:14px !important;}
.intro-copy{gap:14px;}
