/* ============================================================
   v-ai.jp — VNEXT AI Platform Landing
   Design source: "V-AI Landing.dc.html" — artboard 1a
   ============================================================ */

:root{
  --navy:#0a2550;
  --navy-deep:#061a3a;
  --ink:#0f1b2d;
  --muted:#46556b;
  --blue:#1e63d6;
  --blue-soft:#6fc3ff;
  --blue-pale:#c9d8ee;
  --blue-dim:#9db4d8;
  --brain:#0a3d91;
  --kaimei:#c2410c;
  --cad:#15803d;
  --line:#dbe3ee;
  --field:#c5d2e3;
  /* Màu CHỮ lỗi, không phải màu nền nút xoá: chữ đỏ trên nền sáng cần đậm
     hơn để đạt WCAG AA. #b42318 trên #e4eefb ~ 6.4:1. */
  --danger:#b42318;
  --gutter:64px;
  --mono:"Space Grotesk",system-ui,sans-serif;

  /* Chuyển động — theo token vnext-ui */
  --dur-fast:150ms;
  --dur:250ms;
  --dur-slow:350ms;
  --ease-spring:cubic-bezier(.16,1,.3,1);
}

*,*::before,*::after{box-sizing:border-box}

html{scroll-behavior:smooth}

body{
  margin:0;
  font-family:"Noto Sans JP",system-ui,-apple-system,sans-serif;
  color:var(--ink);
  background:#fff;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

a{color:var(--blue);text-decoration:none}
h1,h2,h3,h4,p,dl,dd{margin:0}
ul{margin:0;padding:0;list-style:none}
img{max-width:100%;display:block}

:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:4px}

/* ---------- Header ---------- */

.site-header{
  position:sticky;top:0;z-index:50;
  background:rgba(255,255,255,.86);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  border-bottom:1px solid rgba(10,37,80,.08);
}
.site-header__inner{
  max-width:1440px;margin:0 auto;height:72px;
  padding:0 var(--gutter);
  display:flex;align-items:center;justify-content:space-between;gap:24px;
}
/* Logo VNEXT: giữ nguyên tỉ lệ, khoảng thở ≥ nửa chiều cao logo,
   không viền / không đổ bóng / không đổi màu. */
.brand{
  display:flex;flex-direction:column;align-items:flex-start;gap:5px;
  flex:none;padding:4px 0;
}
.brand__logo{height:26px;width:auto}
.brand__tag{
  font-size:10px;line-height:1;color:var(--muted);
  letter-spacing:.01em;white-space:nowrap;
}

.site-nav{display:flex;gap:30px;font-size:14px;font-weight:500}
/* Nhãn điều hướng không bao giờ được ngắt dòng — tiếng Nhật không có dấu cách
   nên trình duyệt sẽ cắt giữa từ nếu thiếu chỗ. */
.site-nav a{color:var(--ink);position:relative;padding:4px 0;white-space:nowrap}
.site-nav a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;
  background:var(--blue);transform:scaleX(0);transform-origin:left;
  transition:transform var(--dur) var(--ease-spring);
}
.site-nav a:hover{color:var(--blue)}
.site-nav a:hover::after{transform:scaleX(1)}

.header__actions{display:flex;align-items:center;gap:14px}

/* Bộ chọn ngôn ngữ: một nút, mở ra danh sách 3 thứ tiếng */
.lang{position:relative;flex:none}
.lang__btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:8px 12px;border-radius:999px;
  background:rgba(10,37,80,.04);border:1px solid rgba(10,37,80,.1);
  font:inherit;color:var(--muted);cursor:pointer;
  transition:background var(--dur-fast) var(--ease-spring),
             color var(--dur-fast) var(--ease-spring);
}
.lang__btn:hover{background:rgba(10,37,80,.08);color:var(--navy)}
.lang__code{font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.06em}
.lang__caret{transition:transform var(--dur) var(--ease-spring)}
.lang__btn[aria-expanded="true"] .lang__caret{transform:rotate(180deg)}

.lang__menu{
  position:absolute;top:calc(100% + 8px);right:0;z-index:60;
  min-width:164px;padding:6px;
  background:#fff;border:1px solid var(--line);border-radius:14px;
  box-shadow:0 20px 44px -22px rgba(10,37,80,.55);
}
.lang__menu[hidden]{display:none}
.lang__menu button{
  display:flex;width:100%;align-items:center;justify-content:space-between;gap:14px;
  padding:10px 12px;border:0;border-radius:10px;background:transparent;
  font:inherit;font-size:14px;color:var(--ink);cursor:pointer;text-align:left;
  transition:background var(--dur-fast) var(--ease-spring);
}
.lang__menu button:hover{background:#f4f7fb}
.lang__menu button[aria-pressed="true"]{color:var(--blue);font-weight:700}
.lang__menu i{
  font-style:normal;font-family:var(--mono);font-size:11px;
  font-weight:600;letter-spacing:.06em;color:var(--muted);
}
.lang__menu button[aria-pressed="true"] i{color:var(--blue)}

.btn-contact{
  display:inline-flex;align-items:center;gap:8px;
  padding:11px 22px;background:var(--navy);color:#fff;
  border-radius:999px;font-size:14px;font-weight:700;
  transition:background var(--dur-fast) var(--ease-spring);
}
.btn-contact:hover{background:var(--blue);color:#fff}
.arrow{font-family:var(--mono)}

.nav-toggle{
  display:none;width:44px;height:44px;border:1px solid var(--field);
  border-radius:12px;background:#fff;cursor:pointer;
  align-items:center;justify-content:center;
}
.nav-toggle span{
  display:block;width:18px;height:2px;background:var(--ink);position:relative;
  transition:background var(--dur-fast) var(--ease-spring);
}
.nav-toggle span::before,.nav-toggle span::after{
  content:"";position:absolute;left:0;width:18px;height:2px;background:var(--ink);
  transition:transform var(--dur) var(--ease-spring);
}
.nav-toggle span::before{top:-6px}
.nav-toggle span::after{top:6px}
.nav-open .nav-toggle span{background:transparent}
.nav-open .nav-toggle span::before{transform:translateY(6px) rotate(45deg)}
.nav-open .nav-toggle span::after{transform:translateY(-6px) rotate(-45deg)}

/* ---------- Hero ---------- */

.hero{
  position:relative;overflow:hidden;
  background:linear-gradient(180deg,#fff 0%,#eef5ff 55%,#dbe9fb 100%);
  padding:64px var(--gutter) 0;
}
.hero__head{text-align:center;max-width:900px;margin:0 auto}
.hero__head h1{
  font-size:clamp(34px,5.2vw,64px);line-height:1.2;font-weight:900;
  letter-spacing:-.01em;color:var(--navy);text-wrap:balance;
}
.hero__head h1 em{font-style:normal;color:var(--blue)}
.hero__sub{margin-top:18px;font-size:clamp(16px,2vw,22px);font-weight:700;color:var(--ink)}
.hero__rule{
  display:flex;align-items:center;justify-content:center;gap:18px;
  margin-top:22px;color:var(--muted);
}
.hero__rule i{display:block;width:120px;max-width:14vw;height:1px;background:currentColor;opacity:.5}
.hero__rule span{font-family:var(--mono);font-size:15px;font-weight:600;letter-spacing:.06em}

/* ---------- Product cards ---------- */

.products{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:24px;margin-top:52px;
}
.card{
  position:relative;
  display:flex;flex-direction:column;gap:18px;
  padding:52px 28px 32px;border-radius:24px;
  transition:transform var(--dur-slow) var(--ease-spring),box-shadow var(--dur-slow) var(--ease-spring);
}
.card:hover{transform:translateY(-4px)}

.card--brain{
  background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(226,238,255,.85));
  border:1px solid rgba(30,99,214,.22);
  box-shadow:0 20px 50px -30px rgba(10,37,80,.35);
}
.card--brain:hover{box-shadow:0 30px 60px -30px rgba(10,37,80,.45)}
.card--kaimei{
  background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(255,239,226,.85));
  border:1px solid rgba(240,118,31,.28);
  box-shadow:0 20px 50px -30px rgba(120,50,0,.35);
}
.card--kaimei:hover{box-shadow:0 30px 60px -30px rgba(120,50,0,.45)}
.card--cad{
  background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(226,247,233,.85));
  border:1px solid rgba(31,157,85,.28);
  box-shadow:0 20px 50px -30px rgba(0,80,40,.35);
}
.card--cad:hover{box-shadow:0 30px 60px -30px rgba(0,80,40,.45)}

.card__lead{text-align:center;font-size:22px;line-height:1.45;font-weight:900}
.card--brain .card__lead{color:var(--brain)}
.card--kaimei .card__lead{color:#d3390f}
.card--cad .card__lead{color:var(--cad)}

.card__addon{position:absolute;top:16px;right:20px;margin:0;line-height:1}
.card__addon span{
  padding:4px 10px;border-radius:6px;background:#fff;
  border:1px solid rgba(10,61,145,.3);color:var(--brain);
  font-size:11px;font-weight:700;letter-spacing:.04em;
}

.card__id{display:flex;align-items:center;justify-content:center;gap:14px}
.card__id-text{display:flex;flex-direction:column}
.card__name{font-family:var(--mono);font-size:clamp(30px,3vw,40px);font-weight:700;line-height:1;color:var(--ink)}
.card__en{font-size:12px;color:var(--muted);margin-top:6px}

.card__desc{font-size:16px;line-height:1.9;font-weight:500;color:var(--ink);text-wrap:pretty}

/* Khi 3 card xếp ngang, ba khung capture phải cùng một cao độ.
   main.js đo và gán min-height chính xác cho .card__lead / .card__en /
   .card__desc ở mọi ngôn ngữ. Các giá trị dưới đây chỉ là mức dự phòng
   khi JS không chạy. */
@media (min-width:981px){
  .card__lead{min-height:calc(1.45em * 2)}
  .card__en{min-height:calc(1.45em * 2)}
  .card__desc{min-height:calc(1.9em * 3)}
}

.shot{
  display:block;height:220px;
  border-radius:14px;overflow:hidden;background:#f3f7fd;
}
.shot img{width:100%;height:100%;object-fit:cover;display:block}

/* Ô chờ ảnh — dùng khi thêm sản phẩm mới mà chưa có hình */
.shot--empty{
  display:grid;place-items:center;text-align:center;
  padding:16px;font-size:12.5px;line-height:1.7;color:var(--muted);
  background:
    linear-gradient(135deg,rgba(255,255,255,.6),rgba(255,255,255,0)),
    repeating-linear-gradient(45deg,rgba(10,37,80,.035) 0 10px,transparent 10px 20px),
    #f3f7fd;
}
.card--brain .shot{border:1px solid rgba(30,99,214,.18)}
.card--kaimei .shot{border:1px solid rgba(240,118,31,.22)}
.card--cad .shot{border:1px solid rgba(31,157,85,.22)}

.tags{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}
.tags span{
  padding:7px 16px;border-radius:999px;color:#fff;
  font-size:13px;font-weight:700;
}
.card--brain .tags span{background:var(--brain)}
.card--kaimei .tags span{background:var(--kaimei)}
.card--cad .tags span{background:var(--cad)}

.card__cta{
  margin-top:auto;display:flex;align-items:center;justify-content:center;gap:8px;
  padding:14px;border-radius:999px;font-size:15px;font-weight:700;
  transition:background var(--dur) var(--ease-spring),color var(--dur) var(--ease-spring);
}
.card--brain .card__cta{border:1.5px solid var(--brain);color:var(--brain)}
.card--brain .card__cta:hover{background:var(--brain);color:#fff}
.card--kaimei .card__cta{border:1.5px solid var(--kaimei);color:var(--kaimei)}
.card--kaimei .card__cta:hover{background:var(--kaimei);color:#fff}
.card--cad .card__cta{border:1.5px solid var(--cad);color:var(--cad)}
.card--cad .card__cta:hover{background:var(--cad);color:#fff}

/* ---------- Platform band ---------- */

.platform{
  position:relative;
  margin:-40px calc(var(--gutter) * -1) 0;
  padding:100px var(--gutter) 56px;
  background:linear-gradient(180deg,rgba(219,233,251,0) 0%,var(--navy) 38%,var(--navy-deep) 100%);
  color:#fff;
}
.platform__line{
  position:absolute;left:0;right:0;top:120px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(111,195,255,.6),transparent);
}
.platform__badge-row{display:flex;justify-content:center}
.platform__badge{
  position:relative;padding:20px 64px;border-radius:999px;
  background:linear-gradient(180deg,#123a7a,var(--navy));
  border:1px solid rgba(111,195,255,.55);
  box-shadow:0 0 60px rgba(61,139,255,.45),inset 0 1px 0 rgba(255,255,255,.2);
  font-family:var(--mono);font-size:clamp(20px,3vw,28px);font-weight:700;letter-spacing:.02em;
  text-align:center;
}
.platform__copy{
  margin:22px auto 0;max-width:720px;text-align:center;
  font-size:15px;line-height:1.9;color:var(--blue-pale);
}
.pillars{
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));
  gap:20px;margin-top:48px;
}
.pillars li{display:flex;align-items:center;gap:12px;justify-content:center;text-align:left}
/* Dưới 1180px lưới 5 cột đổi sang bọc dòng: 5 mục trong lưới 3 cột để lại
   một ô trống ở cuối hàng hai, và một ô trống đọc ra là lỗi bố cục. */
@media (max-width:1180px){
  .pillars{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 28px}
  .pillars li{flex:0 1 240px}
}
.pillars i{
  display:grid;place-items:center;flex:none;
  width:48px;height:48px;border-radius:50%;
  border:1.5px solid rgba(111,195,255,.6);
}
.pillars b{font-size:15px;font-weight:700}
.platform__motto{margin-top:56px;text-align:center}
.platform__motto p:first-child{
  font-family:var(--mono);font-size:clamp(14px,2vw,18px);font-weight:600;
  letter-spacing:.28em;color:#dfeaff;
}
.platform__motto p:last-child{margin-top:8px;font-size:13.5px;color:var(--blue-dim)}

/* ---------- Section shells ---------- */

.section{padding:104px var(--gutter)}
.section--light{background:#fff}
.section--tint{background:#f4f7fb}
.section--dark{background:var(--navy);color:#fff}
.section--contact{background:linear-gradient(180deg,#eef5ff,#dbe9fb)}
.section__inner{max-width:1312px;margin:0 auto}

.eyebrow{
  font-family:var(--mono);font-size:13px;font-weight:600;
  letter-spacing:.2em;color:var(--blue);
}
.section--dark .eyebrow{color:var(--blue-soft)}

.split{display:grid;grid-template-columns:320px minmax(0,1fr);gap:64px}
.split h2{
  margin-top:12px;font-size:clamp(26px,3.2vw,38px);line-height:1.3;
  font-weight:900;color:var(--navy);word-break:keep-all;
}
.section--dark .split h2{color:#fff}
.split__lead{margin-top:20px;font-size:15px;line-height:1.9;color:var(--muted)}
.section--dark .split__lead{color:var(--blue-pale)}

/* ---------- 01 Value ---------- */

/* Ba mục là một CHUỖI (知る → 解く → 創る), không phải ba ô ngang hàng — đó
   là điều tiêu đề 「を一つの流れに」 nói. Nên chúng xếp dọc theo một đường ray
   thay vì thành lưới 3 cột, vốn trùng họ bố cục với ba thẻ sản phẩm phía trên. */
.values{display:grid;border-top:1px solid var(--line)}
.values > div{
  display:grid;grid-template-columns:9rem minmax(0,1fr);
  column-gap:32px;align-items:start;
  padding:30px 0;border-bottom:1px solid var(--line);
}
.values h3{
  grid-row:1 / span 2;
  font-family:var(--mono);font-size:clamp(24px,2.6vw,34px);
  font-weight:600;line-height:1.15;text-wrap:balance;
  /* Đường ray nối ba mục: vẽ bằng viền của chính cột từ khoá, không phải
     một phần tử trang trí rời. */
  padding-inline-end:24px;border-right:2px solid currentColor;
  align-self:stretch;
}
.values > div:nth-child(1) h3{color:var(--blue)}
.values > div:nth-child(2) h3{color:#d3390f}
.values > div:nth-child(3) h3{color:var(--cad)}
.values h4{font-size:17px;font-weight:700;color:var(--ink)}
.values p{margin-top:10px;font-size:14px;line-height:1.9;color:var(--muted)}

/* ---------- 02 Process ---------- */

.process__head{display:flex;justify-content:space-between;align-items:flex-end;gap:40px;flex-wrap:wrap}
.process__head h2{margin-top:12px;font-size:clamp(28px,3.4vw,38px);line-height:1.3;font-weight:900;color:var(--navy)}
.process__head p{max-width:520px;font-size:15px;line-height:1.9;color:var(--muted)}
.steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;margin-top:48px}
.steps li{
  padding:28px;background:#fff;border-radius:18px;border:1px solid var(--line);
  transition:transform var(--dur-slow) var(--ease-spring),box-shadow var(--dur-slow) var(--ease-spring);
}
.steps li:hover{transform:translateY(-3px);box-shadow:0 18px 40px -26px rgba(10,37,80,.5)}
.steps .step-no{font-family:var(--mono);font-size:13px;font-weight:600;color:var(--blue);letter-spacing:.1em}
.steps h3{margin-top:12px;font-size:20px;font-weight:700;color:var(--ink)}
.steps p{margin-top:10px;font-size:14px;line-height:1.85;color:var(--muted)}

/* ---------- 03 Security ---------- */

.secgrid{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;
  background:rgba(111,195,255,.25);border:1px solid rgba(111,195,255,.25);
}
.secgrid > div{padding:32px;background:var(--navy)}
.secgrid h3{font-size:18px;font-weight:700}
.secgrid p{margin-top:10px;font-size:14px;line-height:1.85;color:var(--blue-pale)}

/* ---------- 04 FAQ ---------- */

.faq{border-top:1px solid var(--line)}
.faq li{
  padding:26px 0;border-bottom:1px solid var(--line);
  display:grid;grid-template-columns:40px minmax(0,1fr);gap:16px;
}
.faq .q{font-family:var(--mono);font-size:22px;font-weight:600;color:var(--blue)}
.faq h3{font-size:17px;font-weight:700;color:var(--ink)}
.faq p{margin-top:10px;font-size:14.5px;line-height:1.9;color:var(--muted)}

/* ---------- Contact ----------
   Khuôn theo khối liên hệ của v-kaimei. Cột trái là lời dẫn + 会社概要, cột phải
   là form: khách doanh nghiệp Nhật tra thông tin pháp nhân ĐÚNG LÚC quyết định
   có gửi form hay không, nên hai thứ đứng cạnh nhau chứ không ở hai chỗ. */

.contact{display:grid;grid-template-columns:minmax(0,440px) minmax(0,1fr);gap:56px;align-items:start}
/* Cột trái cao 384px, form cao 728px. Không dính thì chênh lệch ấy là một mảng
   trống 344px ngay chỗ khách quyết định gửi form. Dính lại thì tiêu đề và
   会社概要 ở trong tầm mắt suốt lúc điền. 96px = 72px thanh trên + khoảng thở. */
.contact__intro{position:sticky;top:96px}
.contact h2{margin-top:0;font-size:clamp(28px,3.4vw,38px);line-height:1.3;font-weight:900;color:var(--navy)}
.contact__lead{margin-top:16px;font-size:15px;line-height:1.9;color:var(--muted)}
/* min-width:0 de cot trai co lai trong luoi thay vi day rong no. */
.contact__intro{min-width:0}

/* Form căn TRÁI, không căn giữa: form căn giữa buộc mắt nhảy về đầu dòng ở mỗi ô. */
.form{display:grid;gap:18px;align-content:start}
.form__row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}

.field{display:grid;gap:7px;min-width:0}
.field__label{display:flex;align-items:baseline;gap:8px;font-size:14px;font-weight:700;color:var(--ink)}

/* Nhãn 必須 / 任意.
   MỌI ô đều có một cái, kể cả ô không bắt buộc: chỉ gắn nhãn cho ô bắt buộc thì
   ô không nhãn là một câu hỏi bỏ ngỏ, và người đọc suy sai thì họ bỏ trống một ô
   bắt buộc rồi mới biết lúc bấm Gửi. Màu là lớp thứ hai — CHỮ vẫn nói đủ nghĩa
   khi không thấy màu. 12px là sàn đọc được trên điện thoại, đừng hạ xuống 11px. */
.field__badge{
  flex:none;padding:2px 7px;border-radius:6px;
  font-family:var(--mono);font-size:12px;font-weight:600;line-height:1.5;
  background:rgba(10,37,80,.07);color:var(--muted);
}
.field__badge[data-required="true"]{background:rgba(30,99,214,.12);color:var(--brain)}

.field__input{
  width:100%;min-height:44px;padding:11px 14px;
  border:1px solid var(--field);border-radius:10px;
  font:inherit;font-size:15px;font-weight:400;background:#fff;color:var(--ink);
  transition:border-color var(--dur-fast) var(--ease-spring),box-shadow var(--dur-fast) var(--ease-spring);
}
textarea.field__input{resize:vertical;line-height:1.8}
.field__input:focus-visible{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,99,214,.18)}
.field__input[aria-invalid="true"]{border-color:var(--danger)}
.field__error{font-size:13px;line-height:1.7;color:var(--danger)}
.field__error[hidden]{display:none}

/* Ô bẫy: ẩn mà KHÔNG dùng display:none — một số bot bỏ qua ô display:none vì
   chúng biết đó là dấu hiệu bẫy. Ô này vẫn trong luồng nhưng không chiếm chỗ. */
.form__trap{position:absolute;width:1px;height:1px;padding:0;border:0;opacity:0;pointer-events:none}

/* Ô đồng ý: <input> trong suốt 44x44 chở vùng bấm, __mark chở lớp sơn.
   <input> KHÔNG display:none và KHÔNG visibility:hidden — hai thứ ấy gỡ phần tử
   khỏi thứ tự Tab, tức lấy mất bàn phím của đúng người cần nó nhất. */
.consent{display:grid;gap:7px}
.consent__label{
  position:relative;display:flex;align-items:flex-start;gap:10px;
  font-size:13px;line-height:1.8;color:var(--muted);cursor:pointer;
}
.consent__box{
  position:absolute;top:-12px;left:-12px;width:44px;height:44px;
  margin:0;opacity:0;cursor:pointer;
}
.consent__mark{
  flex:none;width:20px;height:20px;
  /* Căn theo dòng chữ đầu, không theo giữa khối: câu đồng ý xuống hai dòng ở
     màn hẹp, và một ô vuông căn giữa khối thì trôi xuống giữa hai dòng ấy. */
  margin-top:3px;
  border:1.5px solid var(--field);border-radius:6px;background:#fff;
  /* Lớp sơn KHÔNG nhận sự kiện chuột: nó nằm sau <input> trong suốt. */
  pointer-events:none;
  transition:background-color var(--dur-fast) var(--ease-spring),border-color var(--dur-fast) var(--ease-spring);
}
/* Dấu tích vẽ bằng nền, không bằng ký tự chữ: một dấu ✓ là glyph của font nên
   nó đổi hình theo font đã tải xong hay chưa. */
.consent__box:checked + .consent__mark{
  border-color:var(--blue);background:var(--blue);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8.5l3.2 3.2L13 5'/%3E%3C/svg%3E");
  background-size:14px 14px;background-position:center;background-repeat:no-repeat;
}
/* Vòng focus đi theo lớp sơn vì <input> thật thì trong suốt — không vẽ lại ở đây
   là người đi bằng bàn phím mất dấu hoàn toàn khi tới ô này. */
.consent__box:focus-visible + .consent__mark{outline:2px solid var(--blue);outline-offset:3px}
/* flex:1 de cau dong y xuong dong TRONG nhan, khong day o vuong sang trai. */
.consent__text{flex:1;min-width:0}
.consent__box[aria-invalid="true"] + .consent__mark{border-color:var(--danger)}

.form__failed{
  padding:12px 14px;border:1px solid rgba(180,35,24,.4);border-radius:10px;
  background:rgba(180,35,24,.07);color:var(--danger);font-size:14px;line-height:1.8;
}
.form__failed[hidden]{display:none}

.form__foot{display:grid;gap:14px;justify-items:start}
.btn-submit{
  padding:15px 36px;border:0;border-radius:999px;background:var(--navy);color:#fff;
  font:inherit;font-size:15px;font-weight:700;cursor:pointer;
  transition:background var(--dur-fast) var(--ease-spring);
}
.btn-submit:hover{background:var(--blue)}
.btn-submit:disabled{opacity:.65;cursor:progress}
.form__note{font-size:12.5px;line-height:1.8;color:var(--muted);max-width:52ch}

/* Khối "đã gửi" thay chỗ form, không hiện cạnh nó: form đã gửi mà vẫn đứng đó
   là một lời mời gửi lần hai. */
.thanks{padding:28px;background:#fff;border:1px solid var(--field);border-radius:20px}
.thanks[hidden]{display:none}
.thanks__icon{color:var(--blue)}
.thanks h3{margin-top:12px;font-size:20px;font-weight:700;color:var(--navy)}
.thanks p{margin-top:10px;font-size:14px;line-height:1.9;color:var(--muted)}

/* ── Bảng 会社概要 ── */
.company{padding:26px 28px;background:#fff;border-radius:20px;border:1px solid var(--field)}
.company h3{font-size:13px;font-weight:700;letter-spacing:.08em;color:var(--brain)}
.company__table{width:100%;margin-top:14px;border-collapse:collapse;font-size:14px}
.company__table th,.company__table td{
  padding-block:12px;border-top:1px solid var(--line);
  text-align:start;vertical-align:top;line-height:1.8;
}
/* Cột nhãn có bề rộng CỐ ĐỊNH, không co theo nội dung: ba thứ tiếng cho ra ba bề
   rộng nhãn khác nhau (商号 · Tên công ty · Legal name), và cột co theo nội dung
   thì bảng đổi hình mỗi lần đổi ngôn ngữ. */
/* 6.5rem vừa đủ cho 事業内容 (4 chữ) và 'Legal name'. 7.5rem thừa 48px, mà 48px
   ấy lấy thẳng từ ô giá trị vốn đã chật. */
.company__table th{width:6.5rem;padding-inline-end:16px;font-weight:400;color:var(--muted)}
.company__table td{color:var(--ink)}

/* ---------- Footer ---------- */

.site-footer{
  display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;
  padding:32px var(--gutter);background:var(--navy-deep);color:var(--blue-dim);font-size:13px;
}
.site-footer__brand{display:flex;align-items:center;gap:14px}
.site-footer__brand img{height:26px;width:auto;flex:none}
.site-footer__brand span{padding-left:14px;border-left:1px solid rgba(201,216,238,.22)}
.site-footer nav{display:flex;gap:24px;flex-wrap:wrap}
.site-footer nav a{color:var(--blue-pale)}
.site-footer nav a:hover{color:#fff}

/* ============================================================
   Chuyển động
   Ngân sách theo vnext-ui/effects.md:
   · 1 vùng nền chuyển động duy nhất (hero)
   · vào màn: slide-up 350ms, stagger 60ms, tối đa 6 phần tử/cụm
   · không animation lặp vô tận trên nội dung
   ============================================================ */

/* Vào màn. Chỉ ẩn khi JS chạy được — không JS thì nội dung hiện bình thường.
   Dùng `translate`/`scale` riêng chứ không dùng `transform`, để hiệu ứng vào màn
   và hiệu ứng hover không giẫm lên nhau (hai lớp này cộng dồn, không loại trừ). */
.js .reveal{
  opacity:0;translate:0 20px;
  transition:opacity var(--dur-slow) var(--ease-spring),
             translate var(--dur-slow) var(--ease-spring),
             scale var(--dur-slow) var(--ease-spring);
  transition-delay:calc(var(--i,0) * 60ms);
}
.js .reveal--scale{translate:0;scale:.96}
.js .reveal--right{translate:24px 0}
.reveal.is-in{opacity:1;translate:0;scale:1}

/* Nền hero: một vùng sáng mềm trôi rất chậm. Trang trí, không bắt sự kiện. */
.hero__aura{
  position:absolute;inset:-10% -5% auto;height:120%;
  pointer-events:none;z-index:0;
  background:
    radial-gradient(42% 46% at 22% 30%,rgba(61,139,255,.16),transparent 70%),
    radial-gradient(38% 42% at 78% 22%,rgba(111,195,255,.18),transparent 72%);
  animation:aura-drift 26s var(--ease-spring) infinite alternate;
  will-change:transform;
}
@keyframes aura-drift{
  from{transform:translate3d(-2.5%,-1.5%,0) scale(1)}
  to{transform:translate3d(2.5%,2%,0) scale(1.06)}
}
.hero__head,.products,.platform{z-index:1}
.hero__head,.products{position:relative}

/* Header: nâng nhẹ khi rời khỏi đỉnh trang */
.site-header{transition:box-shadow var(--dur) var(--ease-spring),background-color var(--dur) var(--ease-spring)}
.site-header.is-scrolled{
  background:rgba(255,255,255,.94);
  box-shadow:0 10px 30px -24px rgba(10,37,80,.7);
}

/* Mục điều hướng đang xem */
.site-nav a.is-active{color:var(--blue)}
.site-nav a.is-active::after{transform:scaleX(1)}

/* Mũi tên trượt theo hover */
.btn-contact .arrow,.card__cta .arrow{
  display:inline-block;
  transition:transform var(--dur-fast) var(--ease-spring);
}
.btn-contact:hover .arrow,.card__cta:hover .arrow{transform:translateX(3px)}

/* Neo nội dung không bị header che khi bấm menu.
   Phải phủ mọi đích neo, không chỉ <section> — #platform là <div>, #top là <main>. */
[id]{scroll-margin-top:88px}

/* ---------- Hover ----------
   Chỉ bật trên thiết bị có con trỏ thật; máy cảm ứng không dính trạng thái hover. */
@media (hover:hover) and (pointer:fine){

  /* Card sản phẩm: các chi tiết phản ứng cùng nhau, không rời rạc */
  .card__id svg,
  .shot,
  .shot img{
    transition:transform var(--dur-slow) var(--ease-spring),
               box-shadow var(--dur-slow) var(--ease-spring);
  }
  .card:hover .card__id svg{transform:translateY(-2px) scale(1.05)}
  .card:hover .shot{box-shadow:0 14px 30px -22px rgba(10,37,80,.55)}
  .card:hover .shot img{transform:scale(1.04)}

  /* Rê vào card → CTA ấm lên; rê thẳng vào CTA thì vẫn tô đặc như cũ */
  .card--brain:hover .card__cta:not(:hover){background:rgba(10,61,145,.06)}
  .card--kaimei:hover .card__cta:not(:hover){background:rgba(194,65,12,.06)}
  .card--cad:hover .card__cta:not(:hover){background:rgba(21,128,61,.06)}

  /* Nút: nhấc nhẹ khi trỏ, nhấn xuống khi bấm */
  .btn-contact,.btn-submit{
    transition:background var(--dur-fast) var(--ease-spring),
               transform var(--dur-fast) var(--ease-spring),
               box-shadow var(--dur-fast) var(--ease-spring);
  }
  .btn-contact:hover,.btn-submit:hover{
    transform:translateY(-1px);
    box-shadow:0 12px 24px -16px rgba(10,37,80,.8);
  }

  /* STEP: vạch nhấn mọc ra từ trái */
  .steps li{position:relative;overflow:hidden}
  .steps li::before{
    content:"";position:absolute;left:0;top:0;height:3px;width:100%;
    background:var(--blue);transform:scaleX(0);transform-origin:left;
    transition:transform var(--dur-slow) var(--ease-spring);
  }
  .steps li:hover::before{transform:scaleX(1)}

  /* Ô bảo mật: sáng lên rất nhẹ */
  .secgrid > div{transition:background-color var(--dur) var(--ease-spring)}
  .secgrid > div:hover{background:#0d2d60}

  /* FAQ: dấu Q nhích sang, dòng ấm lên */
  .faq li{
    padding-inline:12px;margin-inline:-12px;border-radius:10px;
    transition:background-color var(--dur) var(--ease-spring);
  }
  .faq li:hover{background:#f4f7fb}
  .faq .q{transition:transform var(--dur) var(--ease-spring)}
  .faq li:hover .q{transform:translateX(3px)}

  /* Ô nhập: viền đậm lên trước khi focus */
  .field__input:hover{border-color:var(--blue-dim)}

  /* Link chân trang: gạch chân mọc ra */
  .site-footer nav a{position:relative}
  .site-footer nav a::after{
    content:"";position:absolute;left:0;right:0;bottom:-3px;height:1px;
    background:currentColor;transform:scaleX(0);transform-origin:left;
    transition:transform var(--dur) var(--ease-spring);
  }
  .site-footer nav a:hover::after{transform:scaleX(1)}
}

/* Bấm xuống: phản hồi tức thì cho mọi thiết bị */
.btn-contact:active,.btn-submit:active,.card__cta:active{transform:translateY(1px)}
.card:active{transform:translateY(-2px)}

/* Máy cảm ứng: bỏ hiệu ứng nhấc, tránh kẹt trạng thái sau khi chạm */
@media (hover:none){
  .card:hover,.steps li:hover{transform:none}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none !important;transition:none !important}
  .js .reveal{opacity:1;translate:none;scale:none}
  .hero__aura{display:none}
}

/* ---------- Responsive ---------- */

@media (max-width:1180px){
  :root{--gutter:40px}
  .site-nav{gap:20px;font-size:13px}
  /* Nhường chỗ cho thanh điều hướng tiếng Nhật */
  .brand__tag{display:none}
  .split{grid-template-columns:260px minmax(0,1fr);gap:40px}
  .contact{grid-template-columns:minmax(0,360px) minmax(0,1fr);gap:40px}
  .pillars{grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
  .steps{grid-template-columns:repeat(2,minmax(0,1fr))}
}

@media (max-width:980px){
  .site-nav{
    position:absolute;top:72px;left:0;right:0;
    flex-direction:column;gap:0;
    background:#fff;border-bottom:1px solid var(--line);
    padding:8px var(--gutter) 16px;
    display:none;
  }
  .nav-open .site-nav{display:flex}
  .site-nav a{padding:14px 0;border-bottom:1px solid var(--line);font-size:15px}
  .site-nav a::after{display:none}
  .nav-toggle{display:flex}

  /* Bộ chọn ngôn ngữ được JS chuyển vào trong menu ở khổ này */
  .site-nav .lang{margin-top:16px;align-self:flex-start}
  .site-nav .lang__btn{min-height:44px;padding:0 16px}
  .site-nav .lang__menu{left:0;right:auto}
  .site-nav .lang__menu button{min-height:44px}
  .products{grid-template-columns:1fr;max-width:620px;margin-inline:auto}
  .split{grid-template-columns:1fr;gap:32px}
  .values > div:last-child{border-bottom:0}
  /* Một cột: cột trái nằm TRÊN form, dính lại thì nó đè lên form khi cuộn. */
  .contact{grid-template-columns:1fr;gap:48px}
  .contact__intro{position:static}
  .section{padding:72px var(--gutter)}
}

@media (max-width:640px){
  :root{--gutter:20px}
  .site-header__inner{gap:12px}
  .brand__tag{display:none}
  .btn-contact{padding:10px 16px;font-size:13px}
  .hero{padding-top:44px}
  .hero__rule i{width:40px}
  .card{padding:44px 20px 24px}
  .card__addon{top:14px;right:16px}
  .platform{padding:80px var(--gutter) 44px}
  .platform__badge{padding:16px 28px}
  .pillars{grid-template-columns:1fr;gap:16px}
  .pillars li{justify-content:flex-start}
  .steps{grid-template-columns:1fr}
  .secgrid{grid-template-columns:1fr}
  .form__row{grid-template-columns:1fr}

  /* Bảng 会社概要 xếp dọc: nhãn trên, giá trị dưới, mỗi thứ dùng trọn bề ngang.
     Ở màn 320px, cột nhãn 6.5rem ăn 104px trong 265px, chỉ chừa 103px cho giá trị.
     display:block xoá vai trò bảng khỏi cây khả truy cập ở một số trình duyệt.
     Chấp nhận đúng ở khổ này và chỉ ở khổ này: một bảng hai dòng đọc được quan
     trọng hơn việc công bố "cột 1, dòng 2". */
  .company{padding:20px}
  .company__table,.company__table tbody,.company__table tr,
  .company__table th,.company__table td{display:block;width:auto}
  .company__table tr{padding-block:12px;border-top:1px solid var(--line)}
  .company__table th,.company__table td{padding-block:0;border-top:0}
  .company__table th{margin-bottom:4px;padding-inline-end:0}
  /* Duoi 640px cot tu khoa 9rem chi con chua 159px cho chu. Xep doc, va duong
     ray chuyen tu vien phai sang vien trai de tin hieu "mot dong chay" con lai. */
  .values > div{grid-template-columns:1fr;row-gap:10px}
  .values h3{
    grid-row:auto;align-self:start;
    padding-inline:14px 0;border-right:0;border-left:2px solid currentColor;
  }
  .site-footer{flex-direction:column;align-items:flex-start;gap:16px}
}
