/* ============ Siêu Nhím — Main Styles (from demo.html) ============ */

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--ff);
  font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased;overflow-x:hidden}
h1,h2,h3,h4{margin:0;line-height:1.16;font-weight:800;letter-spacing:-.02em;text-wrap:balance}
h1{font-size:clamp(2.4rem,1.5rem + 3.6vw,3.9rem)}
h2{font-size:clamp(1.7rem,1.3rem + 1.9vw,2.5rem)}
h3{font-size:1.18rem;letter-spacing:-.01em}
p{margin:0}
a{color:var(--brand-ink);text-underline-offset:3px}
img{max-width:100%;display:block;height:auto}
svg{display:block}
:focus-visible{outline:2.5px solid var(--brand);outline-offset:3px;border-radius:5px}
::selection{background:var(--brand);color:#fff}

/* layout */
.wrap{max-width:var(--wrap);margin-inline:auto;padding-inline:clamp(1.1rem,.5rem + 2vw,2.4rem)}
section.band{padding-block:clamp(3.2rem,2.2rem + 4vw,5.6rem)}
.band--tint{background:var(--surface)}

/* eyebrow + section head */
.eyebrow{display:block;font-weight:700;font-size:.82rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--brand);margin:0 0 .8rem}
.sec-head{max-width:46rem;margin:0 auto 2.8rem;text-align:center}
.sec-head.left{margin-inline:0;text-align:left}
.sec-head p{margin-top:.9rem;color:var(--ink-2);font-size:1.04rem}

/* buttons */
.btn{--_b:var(--brand);--_f:#fff;display:inline-flex;align-items:center;justify-content:center;
  gap:.5rem;font-weight:600;font-size:.97rem;line-height:1;padding:.95rem 1.5rem;border-radius:999px;
  border:1.5px solid transparent;background:var(--_b);color:var(--_f);cursor:pointer;text-decoration:none;
  transition:transform .16s ease,box-shadow .16s ease,background .16s ease,border-color .16s ease;
  box-shadow:0 12px 24px -12px rgba(240,78,35,.55)}
.btn:hover{background:var(--brand-deep);transform:translateY(-2px);box-shadow:0 18px 32px -12px rgba(240,78,35,.55)}
.btn svg{width:1.05em;height:1.05em}
.btn--ghost{--_b:transparent;--_f:var(--brand-ink);border-color:var(--brand);box-shadow:none}
.btn--ghost:hover{background:var(--brand-wash);border-color:var(--brand);transform:translateY(-2px)}
.btn--lg{padding:1.08rem 1.8rem;font-size:1.03rem}
.btn--sm{padding:.68rem 1.1rem;font-size:.9rem}

/* header */
.sn-header{position:sticky;top:0;z-index:60;background:color-mix(in srgb,var(--bg) 90%,transparent);
  backdrop-filter:blur(10px);border-bottom:1px solid transparent;transition:border-color .2s,box-shadow .2s}
.sn-header.scrolled{border-color:var(--line);box-shadow:0 8px 24px -16px rgba(120,50,25,.35)}
.sn-nav{display:flex;align-items:center;gap:1.6rem;height:5rem}
.sn-brand{display:flex;align-items:center;gap:.6rem;text-decoration:none;flex:none}
/* Logo header. Trước đây đặt cứng height:110px — với file logo tỉ lệ 1460x271
   thì ra 593px bề ngang, cao hơn cả thanh header (80px), làm menu vỡ dòng trên
   desktop và đẩy scrollWidth lên 724px khiến TOÀN SITE trượt ngang trên mobile.
   Cho co theo màn hình và chặn bề ngang tối đa để không bao giờ phá layout. */
.sn-brand img{height:clamp(2.1rem,1.1rem + 2.2vw,3.2rem);width:auto;
  max-width:min(56vw,300px);object-fit:contain}
.sn-brand .fallback{font-weight:800;font-size:1.2rem;letter-spacing:-.02em}
.sn-brand .fallback b{color:var(--brand-red)}.sn-brand .fallback i{color:var(--brand-2);font-style:normal}
/* Menu chính. Trước đây CSS viết cho <a> trần vì template cắt bỏ thẻ <ul>;
   khi gắn menu thật của WordPress thì <li> lộ dấu đầu dòng. Nay giữ đúng
   <nav><ul><li><a> và reset danh sách ở đây. */
.sn-nav-links{margin-inline:auto;min-width:0}
.sn-nav-links ul,.sn-nav-links .sn-menu{display:flex;align-items:center;gap:.2rem;
  list-style:none;margin:0;padding:0;flex-wrap:wrap;justify-content:center}
.sn-nav-links li{margin:0;list-style:none}
.sn-nav-links li::marker{content:""}
.sn-nav-links a{display:block;color:var(--ink-2);text-decoration:none;font-weight:600;font-size:.95rem;
  padding:.55rem .8rem;border-radius:8px;position:relative;transition:color .15s;white-space:nowrap}
.sn-nav-links a:hover{color:var(--brand)}
/* WordPress gắn current-menu-item lên <li> chứ không phải <a> — CSS cũ nhắm
   a.current-menu-item nên mục đang xem chưa bao giờ được tô sáng. */
.sn-nav-links .current-menu-item > a,
.sn-nav-links .current_page_item > a,
.sn-nav-links .current-menu-parent > a,
.sn-nav-links .current-menu-ancestor > a,
.sn-nav-links a[aria-current="page"]{color:var(--brand)}
.sn-nav-links .current-menu-item > a::after,
.sn-nav-links .current_page_item > a::after,
.sn-nav-links a[aria-current="page"]::after{content:"";position:absolute;left:.8rem;right:.8rem;bottom:.1rem;
  height:2px;background:var(--brand);border-radius:2px}
.sn-nav-right{display:flex;align-items:center;gap:.7rem;flex:none}
.sn-icon-btn{display:inline-grid;place-items:center;width:2.4rem;height:2.4rem;flex:none;border-radius:8px;
  border:1.5px solid var(--line-2);background:var(--card);color:var(--ink-2);cursor:pointer;padding:unset}
.sn-icon-btn:hover{color:var(--brand);border-color:var(--brand)}
.sn-icon-btn svg{width:1.05rem;height:1.05rem}
.sn-burger{display:none}
.sn-mobile-menu{display:none}

/* hero */
.sn-hero{position:relative;overflow:hidden;background:
  radial-gradient(46rem 34rem at 78% 8%,var(--brand-wash),transparent 62%),
  radial-gradient(40rem 30rem at 10% 90%,var(--brand-wash-2),transparent 60%)}
.sn-hero .wrap{padding-block:clamp(2.6rem,1.6rem + 4vw,4.6rem) clamp(3rem,2rem + 4vw,5rem)}
.sn-hero-grid{display:grid;grid-template-columns:1.02fr .98fr;gap:clamp(1.5rem,.5rem + 3vw,3.5rem);align-items:center}
.sn-hero .tnhh{font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-2);font-size:.98rem;margin-bottom:.5rem}
.sn-hero h1{color:var(--brand);margin-bottom:1rem;letter-spacing:-.01em}
.sn-hero .lead{font-size:clamp(1.15rem,1rem + .6vw,1.4rem);font-weight:600;color:var(--ink);max-width:30rem;margin-bottom:1.8rem;line-height:1.4}
.sn-hero-feats{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:1.8rem;max-width:34rem}
.sn-hf{text-align:center;font-size:.78rem;font-weight:600;color:var(--ink-2);line-height:1.35}
.sn-hf .d{width:2.6rem;height:2.6rem;margin:0 auto .5rem;border-radius:10px;display:grid;place-items:center;
  background:var(--brand-wash);color:var(--brand);border:1px solid color-mix(in srgb,var(--brand) 20%,transparent)}
.sn-hf .d svg{width:1.3rem;height:1.3rem}
.sn-hero-cta{display:flex;flex-wrap:wrap;gap:.9rem}
.sn-hero-art{position:relative}
.sn-hero-art img{width:100%;max-width:520px;margin-inline:auto;filter:drop-shadow(0 30px 50px rgba(190,60,25,.18))}

/* generic card grid */
.grid-5{display:grid;grid-template-columns:repeat(5,1fr);gap:1.2rem}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:1.2rem}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:1.2rem}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:1.2rem}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:1.9rem 1.6rem;
  transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}
.card:hover{transform:translateY(-5px);border-color:color-mix(in srgb,var(--brand) 45%,var(--line));box-shadow:var(--shadow-md)}

/* service card */
.svc{text-align:center}
.svc .ic{width:4rem;height:4rem;margin:0 auto 1.1rem;border-radius:16px;display:grid;place-items:center;
  background:var(--brand-wash);color:var(--brand);border:1px solid color-mix(in srgb,var(--brand) 18%,transparent)}
.svc .ic svg{width:2rem;height:2rem}
.svc h3{margin-bottom:.6rem}
.svc p{color:var(--ink-2);font-size:.94rem}
.svc .more{margin-top:1.1rem;display:inline-flex;align-items:center;gap:.4rem;font-weight:700;font-size:.9rem;
  color:var(--brand-ink);text-decoration:none}
.svc .more svg{width:1rem;height:1rem;transition:transform .16s}
.svc:hover .more svg{transform:translateX(4px)}

/* product card */
.prod{display:flex;flex-direction:column;gap:.6rem;padding:1.5rem 1.4rem}
.prod .top{display:flex;align-items:center;gap:.7rem;font-weight:700;font-size:.98rem;
  text-decoration:none;color:inherit;min-width:0}
a.top:hover{color:var(--brand-ink)}
.prod .logo{width:2.4rem;height:2.4rem;flex:none;display:grid;place-items:center;border-radius:9px;
  background:var(--surface);overflow:hidden}
.prod .logo svg{width:1.6rem;height:1.6rem}
/* CPT Sản phẩm: ảnh đại diện nếu có, không thì ô màu + chữ viết tắt.
   Trước đây style này viết inline trong front-page.php. */
.prod .logo--chip{color:#fff;font-size:.7rem;font-weight:800;text-transform:uppercase}
.prod .logo--img img{width:100%;height:100%;object-fit:contain}
/* Ô logo lớn ở trang chi tiết sản phẩm. Phải khai báo lại display:grid ở đây:
   .logo là <span> (mặc định inline) và các rule kích thước chỉ nằm trong
   `.prod .logo`, mà trang chi tiết không có .prod bọc ngoài — nên width/height
   bị bỏ qua hoàn toàn, ảnh đổ về kích thước gốc và dạt sang trái. */
.prod-hero-logo{display:block}
/* Ảnh thật: giữ đúng tỉ lệ gốc, KHÔNG ép vào khung vuông — ép vuông sẽ để lộ
   hai dải nền trên/dưới với ảnh nằm ngang (logo thường là ảnh ngang). */
.prod-hero-logo .logo--img{display:block;width:100%;margin:0 auto;
  border-radius:14px;overflow:hidden;background:transparent}
.prod-hero-logo .logo--img img{display:block;width:100%;height:auto}
/* Chưa có ảnh đại diện thì mới dùng ô vuông màu + chữ viết tắt. */
.prod-hero-logo .logo--chip{display:grid;place-items:center;width:min(11rem,68%);aspect-ratio:1;
  margin:0 auto;border-radius:18px;color:#fff;font-size:2.6rem;font-weight:800;text-transform:uppercase}
.prod p{color:var(--ink-2);font-size:.88rem}

/* ============ Trang chi tiết sản phẩm ============
   Padding cũ đặt cứng 2.2rem (35.2px) ngay trong template. Trên mobile thẻ chỉ
   rộng 355px nên viền chiếm quá nhiều, ảnh bị bó lại. Cho co theo màn hình. */
.prod-media{padding:clamp(.9rem,.5rem + 1.6vw,1.6rem);text-align:center}
.prod-detail{align-items:start;gap:clamp(1.2rem,.6rem + 2.4vw,2.8rem)}

/* ============ Popup Yêu cầu báo giá ============ */
.sn-modal{width:min(34rem,calc(100vw - 2rem));border:0;padding:clamp(1.3rem,.8rem + 2vw,2rem);
  border-radius:var(--r-lg);background:var(--card);color:var(--ink);
  box-shadow:0 32px 70px -24px rgba(80,30,10,.45);position:relative}
.sn-modal::backdrop{background:rgba(35,20,14,.55);backdrop-filter:blur(3px)}
.sn-modal[open]{animation:snPop .18s ease}
@keyframes snPop{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.sn-modal[open]{animation:none}}
.sn-modal__close-wrap{position:absolute;top:.55rem;right:.55rem;margin:0}
.sn-modal__close{width:2.4rem;height:2.4rem;border:0;border-radius:9px;background:transparent;
  color:var(--ink-3);font-size:1.5rem;line-height:1;cursor:pointer}
.sn-modal__close:hover{background:var(--surface);color:var(--brand)}
.sn-modal__title{font-size:1.35rem;margin-bottom:.35rem;padding-right:2.2rem}
.sn-modal__sub{color:var(--ink-2);font-size:.9rem;margin-bottom:1.2rem}

.sn-qform{display:grid;gap:.85rem}
.sn-field{display:grid;gap:.32rem;min-width:0}
.sn-field label{font-size:.85rem;font-weight:600;color:var(--ink-2)}
.sn-field label span{color:var(--brand)}
.sn-field input{font:inherit;font-size:.95rem;color:var(--ink);background:var(--card);
  border:1.5px solid var(--line-2);border-radius:10px;padding:.8rem .9rem;width:100%;
  transition:border-color .15s,box-shadow .15s}
.sn-field input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}
.sn-field input.is-invalid{border-color:var(--brand-red)}
.sn-two{display:grid;grid-template-columns:1fr 1fr;gap:.85rem}
.sn-err{color:var(--brand-red);font-size:.78rem;min-height:0}
.sn-err:empty{display:none}
/* bẫy bot: giấu khỏi mắt người nhưng không dùng display:none để bot vẫn thấy */
.sn-hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.sn-qform__submit{width:100%;margin-top:.3rem}
.sn-qform__msg{font-size:.9rem;margin-top:.2rem}
.sn-qform__msg:empty{display:none}
.sn-qform__msg.is-ok{color:var(--good);font-weight:600;background:#eaf7f0;border:1px solid #c7ead6;
  padding:.9rem 1rem;border-radius:var(--r-md);text-align:center}
.sn-qform__msg.is-err{color:var(--brand-ink);background:var(--brand-wash);border:1px solid #f6c9b8;
  padding:.75rem .9rem;border-radius:10px}
@media (max-width:420px){
  .sn-two{grid-template-columns:1fr}
}

/* ============ Nội dung dài (.prose) ============
   Dùng cho the_content() ở trang chi tiết sản phẩm / dự án / bài viết.
   Bắt buộc phải có: reset toàn cục đặt `p{margin:0}` nên nếu thiếu, mô tả sẽ
   dính sát tiêu đề và nút bấm — khoảng cách đo được đúng bằng 0px. */
.prose{color:var(--ink-2);font-size:1rem;line-height:1.75;margin-top:1rem}
.prose > *:first-child{margin-top:0}
.prose p{margin:0 0 1.05rem}
.prose > *:last-child{margin-bottom:0}
.prose h2{color:var(--ink);margin:1.9rem 0 .8rem;font-size:1.35rem}
.prose h3{color:var(--ink);margin:1.5rem 0 .6rem;font-size:1.12rem}
.prose ul,.prose ol{margin:0 0 1.05rem;padding-left:1.35rem}
.prose li{margin-bottom:.4rem}
.prose a{color:var(--brand-ink);font-weight:600}
.prose img{border-radius:var(--r-md);margin:1.2rem 0}
.prose strong{color:var(--ink)}
.prose blockquote{border-left:3px solid var(--brand);padding-left:1.05rem;margin:1.2rem 0;font-style:italic}
/* Nút đứng ngay sau khối nội dung cần tách ra cho thoáng */
.prose + .btn{margin-top:1.6rem}
/* Nội dung soạn bằng trình soạn thảo, chiếm cả chiều rộng trang: giới hạn bề
   ngang dòng chữ cho dễ đọc (quá dài mắt khó bắt dòng kế tiếp). */
.prose--page{max-width:48rem;margin-inline:auto;font-size:1.03rem}
.svc-cover{border-radius:var(--r-lg);overflow:hidden;margin:0 auto 2rem;max-width:56rem;
  box-shadow:var(--shadow-md);border:1px solid var(--line)}
.svc-cover img{width:100%;height:auto;display:block}

/* about split */
.about{display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(1.6rem,.5rem + 4vw,3.6rem);align-items:center}
.about .ph{border-radius:var(--r-xl);overflow:hidden;box-shadow:var(--shadow-md);border:1px solid var(--line)}
.about .ph img{width:100%;aspect-ratio:4/3;object-fit:cover}
.about h2{margin-bottom:1rem}
.about p{color:var(--ink-2)}
.about p + p{margin-top:.9rem}
.about .btn{margin-top:1.6rem}

/* why band (full orange) */
.why-band{background:linear-gradient(105deg,var(--brand-red) 0%,var(--brand-2) 100%);color:#fff;position:relative;overflow:hidden}
.why-band::before{content:"";position:absolute;inset:0;background:
  radial-gradient(30rem 20rem at 90% -10%,rgba(255,255,255,.16),transparent 60%),
  radial-gradient(24rem 18rem at 0% 120%,rgba(255,255,255,.12),transparent 60%)}
.why-band > .wrap{position:relative}
.why-band .eyebrow{color:rgba(255,255,255,.9)}
.why-band .sec-head h2{color:#fff}
.why-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:1.4rem}
.wi{text-align:center}
.wi .d{width:3.2rem;height:3.2rem;margin:0 auto .9rem;border-radius:14px;display:grid;place-items:center;
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.28)}
.wi .d svg{width:1.5rem;height:1.5rem;color:#fff}
.wi h4{font-size:1rem;font-weight:700;margin-bottom:.35rem}
.wi p{font-size:.85rem;color:rgba(255,255,255,.88);line-height:1.5}

/* partners */
.partners{display:grid;grid-template-columns:repeat(5,1fr);gap:1rem}
.pt{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);height:5.5rem;
  display:grid;place-items:center;color:var(--ink-2);font-weight:700;font-size:.9rem;padding:1rem;text-align:center;transition:border-color .18s,transform .18s}
.pt:hover{border-color:var(--brand);transform:translateY(-3px)}

/* news */
.news-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.3rem}
.na{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  display:flex;flex-direction:column;transition:transform .18s,box-shadow .18s,border-color .18s;text-decoration:none;color:inherit}
.na:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:color-mix(in srgb,var(--brand) 40%,var(--line))}
.na .thumb{aspect-ratio:16/10;background:linear-gradient(135deg,var(--brand-wash),var(--surface-2));position:relative;display:grid;place-items:center;overflow:hidden}
.na .thumb img{width:100%;height:100%;object-fit:cover}
.na .thumb svg{width:3rem;height:3rem;color:var(--brand);opacity:.55}
.na .body{padding:1.3rem 1.4rem 1.5rem;display:flex;flex-direction:column;gap:.5rem;flex:1}
.na .cat{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--brand-ink)}
.na h3{font-size:1.02rem;line-height:1.35}
.na .meta{margin-top:auto;display:flex;align-items:center;justify-content:space-between;font-size:.82rem;color:var(--ink-3);padding-top:.6rem}
/* flex:none + nowrap: .meta là flex space-between, nếu không khoá thì ô ngày
   tháng ép "Xem thêm" co lại còn 71px và vỡ 2–3 dòng (kể cả trên desktop). */
.na .meta .rd{color:var(--brand-ink);font-weight:700;display:inline-flex;gap:.3rem;align-items:center;
  white-space:nowrap;flex:none}
.na .meta > span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.na .meta .rd svg{width:1rem;height:1rem;flex:none}

/* projects */
.pj-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.3rem}
.pj{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  display:flex;flex-direction:column;text-decoration:none;color:inherit;
  transition:transform .18s,box-shadow .18s,border-color .18s}
.pj:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:color-mix(in srgb,var(--brand) 40%,var(--line))}
.pj .shot{aspect-ratio:16/10;position:relative;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--brand-red),var(--brand-2));overflow:hidden}
.pj .shot img{width:100%;height:100%;object-fit:cover}
.pj .shot svg{width:3.2rem;height:3.2rem;color:rgba(255,255,255,.9)}
.pj .shot .tag{position:absolute;left:.9rem;top:.9rem;background:rgba(255,255,255,.9);color:var(--brand-ink);
  font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:.24rem .55rem;border-radius:999px}
.pj .body{padding:1.3rem 1.4rem 1.5rem;display:flex;flex-direction:column;gap:.45rem;flex:1}
.pj h3{font-size:1.05rem;line-height:1.35}
.pj .cl{font-size:.85rem;color:var(--ink-2);line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pj .meta{margin-top:auto;display:flex;align-items:center;justify-content:space-between;font-size:.8rem;color:var(--ink-3);padding-top:.6rem}
.pj .meta .rd{color:var(--brand-ink);font-weight:700;display:inline-flex;gap:.3rem;align-items:center;
  white-space:nowrap;flex:none}
.pj .meta > span:first-child:not(.rd){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pj .meta .rd{margin-left:auto}
.pj .meta .rd svg{width:1rem;height:1rem;flex:none}
.pj-filter{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;margin-bottom:2rem}
/* Lọc dự án dùng <button> (lọc bằng JS), lọc sản phẩm dùng <a> (link tới
   trang taxonomy) — style chung cho cả hai. */
.pj-filter button,.pj-filter a{font:inherit;font-size:.86rem;font-weight:600;padding:.5rem 1rem;border-radius:999px;
  border:1.5px solid var(--line-2);background:var(--card);color:var(--ink-2);cursor:pointer;transition:all .15s;
  text-decoration:none;display:inline-flex;align-items:center}
.pj-filter button:hover,.pj-filter a:hover{border-color:var(--brand);color:var(--brand)}
.pj-filter button.on,.pj-filter a.on{background:var(--brand);border-color:var(--brand);color:#fff}

/* CTA band */
.cta-band{background:linear-gradient(102deg,var(--brand-deep),var(--brand-2));color:#fff;border-radius:var(--r-xl);
  padding:clamp(2rem,1.3rem + 3vw,3.4rem) clamp(1.6rem,1rem + 3vw,3.4rem);position:relative;overflow:hidden}
.cta-band::after{content:"";position:absolute;right:-2rem;bottom:-3rem;width:16rem;height:16rem;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.18),transparent 65%)}
.cta-band .in{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.4rem}
.cta-band h2{color:#fff;font-size:clamp(1.4rem,1.1rem + 1.4vw,2rem)}
.cta-band p{color:rgba(255,255,255,.9);margin-top:.5rem;font-size:.98rem}
.cta-band .btns{display:flex;flex-wrap:wrap;gap:.8rem;flex:none}
.cta-band .btn{--_b:#fff;--_f:var(--brand-ink);box-shadow:0 14px 28px -12px rgba(0,0,0,.3)}
.cta-band .btn:hover{background:#fff3ec}
.cta-band .btn--ghost{--_b:transparent;--_f:#fff;border-color:rgba(255,255,255,.7)}
.cta-band .btn--ghost:hover{background:rgba(255,255,255,.15)}

/* footer */
.sn-footer{background:var(--surface);border-top:1px solid var(--line);padding-block:3.4rem 1.8rem}
.foot-grid{display:grid;grid-template-columns:1.5fr 1fr 1.2fr 1.1fr 1.3fr;gap:2rem}
.foot-brand img{height:2.4rem;margin-bottom:.9rem}
.foot-brand p{font-size:.88rem;color:var(--ink-2);max-width:20rem}
.socials{display:flex;gap:.5rem;margin-top:1rem}
.socials a{width:2.2rem;height:2.2rem;border-radius:8px;display:grid;place-items:center;color:#fff;background:var(--brand)}
.socials a:hover{background:var(--brand-deep)}
.socials svg{width:1rem;height:1rem}
.foot-col h5{font-size:.82rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink);margin:0 0 1rem}
.foot-col a{display:block;color:var(--ink-2);text-decoration:none;font-size:.9rem;padding:.3rem 0}
.foot-col a:hover{color:var(--brand)}
.foot-col .li{font-size:.9rem;color:var(--ink-2);padding:.3rem 0}
.foot-col .li b{color:var(--ink);font-weight:600}
.foot-bottom{margin-top:2.6rem;padding-top:1.4rem;border-top:1px solid var(--line);text-align:center;
  font-size:.82rem;color:var(--ink-3)}

/* page head + breadcrumb */
.page-head{background:var(--surface);border-bottom:1px solid var(--line);padding-block:clamp(2rem,1.4rem + 3vw,3.4rem)}
.crumbs{display:flex;flex-wrap:wrap;gap:.4rem;font-size:.84rem;color:var(--ink-3);margin-bottom:1rem}
.crumbs a{color:var(--ink-3);text-decoration:none}
.crumbs a:hover{color:var(--brand)}
.page-head h1{font-size:clamp(1.9rem,1.4rem + 2.4vw,2.9rem);color:var(--ink)}
.page-head p{margin-top:.8rem;color:var(--ink-2);max-width:44rem}

/* checklist */
.chk{list-style:none;padding:0;margin:1.2rem 0;display:grid;gap:.7rem}
.chk li{display:flex;gap:.7rem;align-items:flex-start;font-size:.96rem}
.chk svg{flex:none;width:1.3rem;height:1.3rem;color:var(--brand);margin-top:.15rem}

/* pricing */
.tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:1.3rem;align-items:start}
.tier{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:1.9rem 1.7rem}
.tier.feat{border-color:var(--brand);box-shadow:var(--shadow-md);position:relative}
.tier .badge{position:absolute;top:-.8rem;left:1.7rem;background:var(--brand);color:#fff;font-size:.7rem;font-weight:700;
  letter-spacing:.05em;text-transform:uppercase;padding:.3rem .7rem;border-radius:999px}
.tier h3{font-size:1.25rem;margin-bottom:.3rem}
.tier .who{color:var(--ink-3);font-size:.86rem;margin-bottom:1rem}
.tier .price{font-size:1.5rem;font-weight:800;color:var(--brand);letter-spacing:-.02em}
.tier .price span{font-size:.9rem;font-weight:600;color:var(--ink-3)}
.tier ul{list-style:none;padding:0;margin:1.2rem 0 1.5rem;display:grid;gap:.6rem}
.tier li{display:flex;gap:.55rem;font-size:.9rem;color:var(--ink-2)}
.tier li svg{flex:none;width:1.1rem;height:1.1rem;color:var(--good);margin-top:.2rem}
.tier .btn{width:100%}

/* contact */
.contact-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(1.6rem,.5rem + 4vw,3rem)}
form.sn-form{display:grid;gap:1rem}
.two{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.field{display:grid;gap:.4rem}
.field label{font-size:.85rem;font-weight:600;color:var(--ink-2)}
.field input,.field select,.field textarea{font:inherit;font-size:.95rem;color:var(--ink);background:var(--card);
  border:1.5px solid var(--line-2);border-radius:10px;padding:.82rem .9rem;width:100%}
.field textarea{min-height:7rem;resize:vertical}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--brand);
  box-shadow:0 0 0 3px var(--brand-wash)}
.form-ok{display:none;gap:.6rem;align-items:flex-start;padding:1rem;border-radius:var(--r-md);
  background:color-mix(in srgb,var(--good) 12%,transparent);color:var(--good);font-weight:600;font-size:.9rem}
.form-ok.show{display:flex}
.ci{display:flex;gap:.9rem;padding:1.1rem;border:1px solid var(--line);border-radius:var(--r-md);background:var(--card)}
.ci + .ci{margin-top:.7rem}
.ci .d{width:2.5rem;height:2.5rem;flex:none;border-radius:9px;display:grid;place-items:center;background:var(--brand-wash);color:var(--brand)}
.ci .d svg{width:1.2rem;height:1.2rem}
/* Template dùng <span> (inline) cho nhãn/giá trị, trong khi bản demo gốc dùng
   <div>. Không có display:block thì nhãn dính liền giá trị ("HOTLINE0833…")
   và margin-top bị bỏ qua vì phần tử inline không nhận margin dọc. */
.ci .l{display:block;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3)}
.ci .v{display:block;font-weight:600;font-size:.94rem}
.map{margin-top:.7rem;height:9rem;border:1px solid var(--line);border-radius:var(--r-md);display:grid;place-items:center;
  color:var(--ink-3);font-size:.82rem;background:repeating-linear-gradient(45deg,var(--surface),var(--surface) 12px,var(--surface-2) 12px,var(--surface-2) 24px)}
/* Khi đã có bản đồ thật: bỏ nền kẻ sọc, cho iframe lấp đầy khung và cao hơn
   cho dễ nhìn. Nền sọc chỉ dành cho trạng thái chưa cấu hình. */
.map.has-map{height:clamp(15rem,12rem + 8vw,20rem);background:var(--surface);padding:0;overflow:hidden}
.map.has-map iframe{width:100%;height:100%;border:0;display:block}
.map__hint{max-width:26rem;padding:1rem;text-align:center;line-height:1.5}
.map__hint code{background:var(--surface-2);padding:.1rem .35rem;border-radius:5px;font-size:.95em}

/* policies */
.pol-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.2rem}
.pol{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:1.7rem;transition:border-color .18s,transform .18s}
.pol:hover{border-color:var(--brand);transform:translateY(-3px)}
.pol .n{font-size:.78rem;font-weight:700;color:var(--ink-3);letter-spacing:.05em}
.pol h3{margin:.5rem 0;font-size:1.1rem}
.pol p{color:var(--ink-2);font-size:.9rem}
.pol a{margin-top:1rem;display:inline-flex;gap:.35rem;font-weight:700;font-size:.88rem;text-decoration:none}

/* faq */
.faq{max-width:48rem;margin-inline:auto;display:grid;gap:.6rem}
.qa{border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);overflow:hidden}
.qa summary{list-style:none;cursor:pointer;padding:1.1rem 1.3rem;font-weight:700;display:flex;gap:1rem;align-items:center;justify-content:space-between}
.qa summary::-webkit-details-marker{display:none}
.qa summary .pm{flex:none;width:1.5rem;height:1.5rem;border-radius:6px;border:1px solid var(--line-2);
  display:grid;place-items:center;color:var(--brand);transition:transform .2s,background .2s}
.qa[open] summary .pm{transform:rotate(45deg);background:var(--brand-wash)}
.qa .a{padding:0 1.3rem 1.2rem;color:var(--ink-2);font-size:.93rem}

/* stats */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.stat{background:var(--card);padding:1.5rem 1.2rem;text-align:center}
/* Cùng lý do như .ci: template dùng <span> nên phải ép block, nếu không
   "120+" dính liền "Dự án hoàn thành" và margin-top không có tác dụng. */
.stat .n{display:block;font-size:clamp(1.7rem,1.3rem + 1.4vw,2.3rem);font-weight:800;color:var(--brand);letter-spacing:-.02em;line-height:1.15}
.stat .l{display:block;font-size:.84rem;color:var(--ink-2);margin-top:.25rem}

.note{font-size:.82rem;color:var(--ink-3);border-left:2px solid var(--brand-2);padding-left:.7rem;margin-top:1rem}

/* reveal animation */
.reveal{opacity:0;transform:translateY(16px);transition:opacity .5s ease,transform .5s ease}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}
  .btn,.card,.na,.pol,.pt{transition:none}*{animation:none!important}}

/* responsive */
@media (max-width:1000px){
  .sn-hero-grid,.about,.contact-grid{grid-template-columns:1fr}
  .about .ph{max-width:26rem}
  .grid-5,.grid-4,.why-grid{grid-template-columns:repeat(2,1fr)}
  .grid-3,.news-grid,.tiers,.pj-grid{grid-template-columns:1fr}
  .partners{grid-template-columns:repeat(3,1fr)}
  .stats{grid-template-columns:repeat(2,1fr)}
  .foot-grid{grid-template-columns:1fr 1fr}
  .sn-hero-art{order:-1}
  .sn-hero-art img{max-width:360px}
}
@media (max-width:820px){
  .sn-nav-links{display:none}
  .sn-nav-right .btn{display:none}
  .sn-burger{display:inline-grid}
  .sn-mobile-menu{display:block;position:fixed;left:0;right:0;top:5rem;background:var(--bg);
    border-bottom:1px solid var(--line);padding:1rem clamp(1.1rem,.5rem + 2vw,2.4rem) 1.5rem;
    transform:translateY(-130%);transition:transform .26s ease;z-index:55}
  .sn-mobile-menu.open{transform:none}
  /* Menu mobile cũng là <ul><li> — reset danh sách để không lộ dấu đầu dòng. */
  .sn-mobile-menu ul,.sn-mobile-menu .sn-menu{list-style:none;margin:0;padding:0}
  .sn-mobile-menu li{margin:0;list-style:none}
  .sn-mobile-menu li::marker{content:""}
  .sn-mobile-menu a:not(.btn){display:block;padding:.85rem .3rem;color:var(--ink);text-decoration:none;font-weight:600;border-bottom:1px solid var(--line)}
  .sn-mobile-menu .current-menu-item > a,
  .sn-mobile-menu .current_page_item > a,
  .sn-mobile-menu a[aria-current="page"]{color:var(--brand)}
  /* Trước đây rule trên nhắm cả .btn (độ ưu tiên 0,1,1 thắng .btn 0,1,0) nên nút
     "Nhận tư vấn" bị đổi thành display:block (mất canh giữa), chữ đen thay vì
     trắng, padding ngang tụt còn .3rem và bị kẻ thêm border-bottom. Loại .btn
     ra và khai báo lại cho chắc. */
  .sn-mobile-menu .btn{margin-top:1rem;width:100%;display:inline-flex;align-items:center;
    justify-content:center;gap:.5rem;padding:.92rem 1.5rem;color:#fff;border-bottom:0;text-align:center}
  /* Menu ẩn nav-links nên .sn-nav mất phần tử margin-inline:auto vốn đẩy nhóm
     icon sang phải — bù lại bằng margin-left:auto để 2 icon bám mép phải. */
  .sn-nav-right{margin-left:auto}
  .grid-2,.pol-grid{grid-template-columns:1fr}
  .why-grid{grid-template-columns:1fr 1fr}
  .cta-band .in{flex-direction:column;align-items:flex-start}
  /* Ảnh hero là ảnh dọc (861x961). Ở mobile nó chiếm 396px nên tiêu đề bị đẩy
     xuống y=577 và 2 nút CTA rơi hẳn khỏi màn hình (y=913 > 844) — người dùng
     mở trang chỉ thấy ảnh, không thấy thông điệp lẫn nút bấm. Giới hạn chiều
     cao để nút CTA nằm trong tầm nhìn ngay khi tải trang. */
  .sn-hero-art img{max-height:min(34vh,290px);width:auto;max-width:100%;object-fit:contain}
  .sn-hero .wrap{padding-block:1.4rem 2.2rem}
  .sn-hero-grid{gap:1.1rem}
}
@media (max-width:560px){
  .sn-hero-feats{grid-template-columns:1fr 1fr}
  /* Lưới chữ nhiều (dịch vụ, sản phẩm) phải về 1 cột: ở 390px, 2 cột chỉ còn
     ~115px/thẻ khiến đoạn mô tả vỡ thành 9–11 dòng, mỗi dòng 2–3 từ.
     Các lưới chữ ngắn (why/stats/partners) giữ 2 cột cho đỡ dài trang. */
  .grid-4,.grid-5{grid-template-columns:1fr}
  .partners,.why-grid,.stats{grid-template-columns:1fr 1fr}
  /* Lưới 5 mục ở 2 cột để lại 1 ô mồ côi lệch hẳn sang trái — cho mục cuối
     trải hết hàng để cân lại. */
  .partners > *:last-child:nth-child(odd),
  .why-grid > *:last-child:nth-child(odd),
  .stats    > *:last-child:nth-child(odd){grid-column:1 / -1}
  .foot-grid{grid-template-columns:1fr}
  .two{grid-template-columns:1fr}
  /* Thẻ 1 cột thì canh trái dễ đọc hơn canh giữa, và icon không cần to */
  .grid-4 .svc{text-align:left}
  .grid-4 .svc .ic{margin-inline:0}
}

/* ============ Vùng chạm trên thiết bị cảm ứng ============
   Chuẩn tối thiểu 44x44px. Đo trên máy thật có 20 phần tử không đạt: nút
   burger/đổi theme 38x38, link "Xem chi tiết" cao 24px, link chân trang cao
   34px, icon mạng xã hội 35x35. Chỉ áp cho thiết bị chạm để không làm phình
   giao diện trên desktop dùng chuột. */
@media (hover:none) and (pointer:coarse){
  .sn-icon-btn{width:2.75rem;height:2.75rem}
  .svc .more{padding-block:.6rem;min-height:2.75rem;align-items:center}
  .foot-col a{padding-block:.62rem}
  .socials a{width:2.75rem;height:2.75rem}
  .pj .meta .rd,.na .meta .rd{padding-block:.5rem}
  /* các mục lọc/nút nhỏ khác */
  .pj-filter button,.pj-filter a{min-height:2.75rem}
  .pj-demo{min-height:2.5rem;padding-inline:.95rem;font-size:.78rem}
}

/* GeneratePress tô nền xám đậm (#3f4047) cho nút toggle khi aria-expanded="true"
   — màu này không có trong bảng màu design. Giữ nền trắng, chỉ để viền + icon
   chuyển sang màu thương hiệu là đủ báo trạng thái đang mở. */
.sn-nav-right .sn-icon-btn[aria-expanded="true"],
.sn-icon-btn.sn-burger[aria-expanded="true"]{
  background:var(--card);color:var(--brand);border-color:var(--brand);
}

/* ============ GeneratePress Overrides ============ */
body{margin:0 !important}
.site{max-width:none !important;margin:0 !important;padding:0 !important}
.site-header,.site-footer{display:none !important}
.content-area{width:100% !important;max-width:none !important;padding:0 !important;margin:0 !important}
.inside-article{padding:0 !important;margin:0 !important}
.main-navigation{display:none !important}
.generate-columns-container{padding:0 !important}
/* Trước đây rule này là `h1,.entry-title{...}`. Phần `h1` ghi đè luôn cỡ chữ
   h1 của design (clamp khai báo ở đầu file) làm MỌI tiêu đề tụt về 16px —
   hero "SIÊU NHÍM" lẽ ra 62px, tiêu đề trang lẽ ra 46px. Các template của
   theme tự vẽ tiêu đề riêng nên .entry-title của GeneratePress không xuất
   hiện trong DOM; giữ lại chỉ để phòng khi GP tự render ở đâu đó. */
.entry-title{font-size:inherit !important}
.entry-content{margin:0 !important;padding:0 !important}
.entry-content > *:not(.band):not(.sn-hero):not(.page-head){max-width:var(--wrap);margin-inline:auto;padding-inline:clamp(1.1rem,.5rem + 2vw,2.4rem)}
.post-image{display:none !important}
.separate-containers .inside-article{padding:0 !important}
/* Ensure GP doesn't add its own container padding */
.site.grid-container{max-width:none !important;padding:0 !important}

/* ═══ DỰ ÁN — thư viện giao diện ═══════════════════════ */
/* Số lượng trong nút lọc: nhạt hơn nhãn để không cạnh tranh khi đọc lướt. */
/* Nút lọc là inline-flex nên khoảng trắng trong HTML bị nuốt — phải tự tạo
   khoảng cách, nếu không số sẽ dính vào nhãn ("Tất cả5"). */
.pj-filter .n{opacity:.55;font-weight:600;font-variant-numeric:tabular-nums;margin-left:.4rem}
.pj-filter button.on .n{opacity:.85}

/* Ảnh chụp giao diện ở trang chi tiết dự án.
   Ảnh nguồn chỉ 1024px nên KHÔNG kéo hết chiều rộng khung 1290px — giới hạn
   960px và canh giữa, vừa không vỡ nét vừa giống cửa sổ trình duyệt thật. */
.proj-shot{margin:0 auto;max-width:960px;border:1px solid var(--line);border-radius:var(--r-lg);
  overflow:hidden;background:var(--card);box-shadow:var(--shadow-md)}
.proj-shot img{display:block;width:100%;height:auto}

.proj-shot__cta{text-align:center;margin-top:1.5rem}

/* Link demo trong cột thông tin: cắt bớt tên miền dài thay vì phá khung. */
.ci .v a{color:var(--brand-ink);text-decoration:none;font-weight:700;
  overflow-wrap:anywhere}
.ci .v a:hover,.ci .v a:focus-visible{text-decoration:underline}

/* Nút Demo trên thẻ dự án. Thẻ là <div> bọc hai <a> — lồng <a> trong <a>
   là HTML không hợp lệ nên phải tách ra, đừng gộp lại. */
.pj{position:relative}
.pj-link{display:flex;flex-direction:column;flex:1;min-width:0;text-decoration:none;color:inherit}
.pj-demo{position:absolute;right:.75rem;top:.75rem;z-index:2;display:inline-flex;align-items:center;
  gap:.3rem;padding:.4rem .7rem;border-radius:999px;background:rgba(255,255,255,.94);
  color:var(--brand-ink);font-size:.72rem;font-weight:700;letter-spacing:.02em;text-decoration:none;
  box-shadow:0 2px 10px rgba(0,0,0,.18);transition:background .15s,color .15s,transform .15s}
.pj-demo:hover,.pj-demo:focus-visible{background:var(--brand);color:#fff;transform:translateY(-1px)}
.pj-demo svg{width:.82rem;height:.82rem;flex:none}
