/* css/style.css: the product pages load css/style.min.css. After editing this file run tools\build-css.cmd
   (or: npx esbuild css/style.css --minify --outfile=css/style.min.css) and bump the ?v= on their <link>. */
/* 1. Self-hosted fonts (latin subset, both variable): Plus Jakarta Sans = headings/display, Manrope = text */
@font-face{font-family:"Manrope";font-style:normal;font-weight:200 800;font-display:swap;src:url("../fonts/manrope.woff2") format("woff2");unicode-range:U+0-FF,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:200 800;font-display:swap;src:url("../fonts/plus-jakarta-sans.woff2") format("woff2");unicode-range:U+0-FF,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* size-matched fallbacks: text laid out before the web fonts arrive takes the same space, so the swap causes
   no layout shift and no late "largest paint" (values measured from the font files against Arial) */
@font-face{font-family:"Plus Jakarta Sans Fallback";src:local("Arial"),local("Liberation Sans"),local("Helvetica");size-adjust:109.26%;ascent-override:95.01%;descent-override:20.32%;line-gap-override:0%}
@font-face{font-family:"Manrope Fallback";src:local("Arial"),local("Liberation Sans"),local("Helvetica");size-adjust:104.28%;ascent-override:102.23%;descent-override:28.77%;line-gap-override:0%}

/* 2. Tokens & base */
:root{
  --h2:clamp(32px,4vw,52px);   /* one size for every section heading (h2) on the page */
  --h2-lh:1.2;                 /* and one line height for them */
  --sec-y:clamp(48px,4.5vw,64px);   /* space between a section's edge and its content (top and bottom), used by every normal section */
  --fs-lead:clamp(15px,1.15vw,17px);--lh-lead:1.7;   /* section intro / description paragraphs */
  --fs-body:14.5px;--lh-body:1.65;                    /* text inside cards, FAQ answers, captions */
  --bg:#012040;--bg-2:#0f0f11;--panel:#141417;--panel-2:#1b1b1f;
  --line:rgba(255,255,255,.09);--line-2:rgba(255,255,255,.05);
  --ink:#f4f4f2;--mute:#9b9ba3;--faint:#6a6a72;
  --brand:#004690;--brand-2:#001F3F;--brand-3:#00254c;--accent:#002B5C;--accent-ink:#001e3d;--glow:rgba(51,150,255,.35);--glow-brand:rgba(0,70,144,.45); /* brand #004690 = solid fills; the others are the same hue (211deg): --accent is the lighter tint for text / lines / glows on dark backgrounds */
  --hd-accent:var(--brand);--hd-accent-text:var(--accent);--hd-glass:rgba(255,255,255,.08);--hd-line:rgba(255,255,255,.16);--hd-notch:#ececec;
  --r:22px;
  /* one content width for the whole page: every section, the hero overlay and the footer line up on these edges */
  --wrap-max:1280px;           /* the .wrap box: content + a gutter on each side */
  --gutter:32px;               /* side space inside that box (20px on phones) */
  --wrap-w:min(100% - 2 * var(--gutter), var(--wrap-max) - 2 * var(--gutter));   /* the content width itself, for blocks sized by width instead of padding */
}
@media (max-width:600px){:root{--gutter:20px}}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
html.smooth{scroll-behavior:auto}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Manrope","Manrope Fallback",sans-serif;font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:hidden}
h1,h2,h3,h4,h5,h6{margin:0;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:700;line-height:1.02;letter-spacing:-.02em;text-wrap:balance}
p{margin:0;font-family:"Manrope","Manrope Fallback",sans-serif}
input,textarea,select{font-family:inherit}   /* form fields take the page font instead of the browser default */
a{color:inherit;text-decoration:none}
img,video{max-width:100%;height:auto}
button{font-family:inherit}
address{font-style:normal}
.wrap{max-width:var(--wrap-max);margin:0 auto;padding:0 var(--gutter);position:relative;z-index:2}
:focus-visible{outline:2.5px solid var(--accent);outline-offset:3px;border-radius:8px}
[hidden]{display:none!important}
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.skip{position:absolute;left:16px;top:-80px;z-index:100;background:var(--brand);color:#fff;padding:10px 16px;border-radius:8px;font-weight:600;transition:top .2s}
.skip:focus{top:16px}

/* mono label */
.kick{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);display:inline-flex;align-items:center;gap:10px}
.kick::before{content:"//";color:var(--faint)}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:10px;font-weight:600;font-size:15px;padding:13px 22px;border-radius:999px;cursor:pointer;border:1px solid transparent;transition:transform .18s,box-shadow .2s,background .2s,color .2s;font-family:inherit;will-change:transform}
.btn .ic{width:30px;height:30px;border-radius:50%;background:rgba(0,0,0,.22);display:grid;place-items:center;font-size:13px;transition:transform .25s}
.btn-primary{background:var(--brand);color:#fff;border-color:rgba(51,150,255,.35);box-shadow:0 10px 30px var(--glow-brand)}
.btn-primary:hover{background:var(--brand-2);transform:translateY(-2px)}
.btn-primary:hover .ic{transform:rotate(45deg)}

/* 3. Header — floating island */

/* inline expanding menu inside the right island */

.xh-dd>button{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:16.5px;font-weight:500;color:#fff;background:none;border:0;padding:0;cursor:pointer;display:inline-flex;align-items:center;gap:7px;line-height:1;transition:color .2s}
.xh-dd>button:hover{color:var(--hd-accent-text)}
.xh-dd{position:relative}
.xh-dd>button svg{transition:transform .25s}
.xh-dd.open>button{color:var(--hd-accent-text)}
.xh-dd.open>button svg{transform:rotate(180deg)}
/* mega menus */
.xh-dd.mega{position:static}
.xh-mega{position:absolute;top:100%;right:0;padding-top:16px;display:none;z-index:6;width:min(1000px,calc(100vw - 34px))}
.xh-dd.mega.open .xh-mega{display:block;animation:megaIn .32s cubic-bezier(.22,1,.36,1)}
@keyframes megaIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}

.xh-mega .col{padding:22px 20px;border-right:1px solid var(--hd-line);min-width:0}
.xh-mega .col:last-child{border-right:0}
.xh-mega .mh{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin:0 0 12px;font-weight:400}

/* hamburger → ✕ */

/* 4. Mobile drawer */
.mob{position:fixed;inset:0;z-index:80;visibility:hidden;transition:visibility 0s .45s}
.mob.open{visibility:visible;transition-delay:0s}

.mob-panel{position:absolute;top:0;right:0;bottom:0;width:min(360px,88vw);background:#0f0f11;border-left:1px solid var(--line);transform:translateX(100%);transition:transform .45s cubic-bezier(.22,1,.36,1);display:flex;flex-direction:column;padding:16px 18px 22px;overflow-y:auto}
.mob.open .mob-panel{transform:none}

.mob .close{width:40px;height:40px;border-radius:10px;border:1px solid var(--line);background:transparent;color:#fff;font-size:18px;cursor:pointer}

.mob-acc>button{display:flex;align-items:center;justify-content:space-between;width:100%;padding:15px 2px;border:0;border-bottom:1px solid var(--line);background:none;color:#fff;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:16px;font-weight:600;text-align:left;cursor:pointer}
.mob-acc>button::after{content:"›";font-size:22px;line-height:1;color:var(--mute);transition:transform .25s,color .25s}
.mob-acc.open>button{color:var(--hd-accent-text)}
.mob-acc.open>button::after{transform:rotate(90deg);color:var(--hd-accent-text)}

/* 5. Hero — pinned video sequence (scrubbed by scroll on desktop) */
/* 8 clips x ~70vh of scroll each, plus the pinned viewport itself */
.hseq{position:relative;height:calc(100vh + 8 * 70vh);background:#000}
.hseq-pin{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;background:#000}
.hseq-pin video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
/* stacked clips: later clips sit on top and fade in over the previous one while settling from a slight zoom */
.hseq-media{position:absolute;inset:0;z-index:0;overflow:hidden;background:#000}
.hseq-poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}   /* hero photo under the first clip (responsive, replaces the video poster) */
.hseq-vid{opacity:0;transform:scale(1.04);transform-origin:50% 50%}
.hseq-vid[data-hv="0"]{opacity:1;transform:none}
/* overlay over the clips (under the text): deep navy wash, strongest behind the headline on the left,
   plus a soft band at the top (header) and bottom (chips) and a light vignette at the edges */
.hseq-shade{position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse 120% 90% at 50% 50%,rgba(0,8,20,0) 60%,rgba(0,8,20,.28) 100%),
    linear-gradient(180deg,rgba(0,8,20,.35) 0%,rgba(0,8,20,0) 20%,rgba(0,8,20,0) 72%,rgba(0,8,20,.38) 100%),
    linear-gradient(90deg,rgba(0,12,30,.5) 0%,rgba(0,12,30,.4) 35%,rgba(0,12,30,.18) 62%,rgba(0,12,30,.06) 100%)}
/* timer mode (touch / small screens): the scroll does not drive the clips, so the cross-fade is a CSS transition */
.hseq.is-timed .hseq-vid{transition:opacity 1.1s cubic-bezier(.22,1,.36,1),transform 1.6s cubic-bezier(.22,1,.36,1)}
.hseq.is-timed .hseq-vid.is-on{opacity:1;transform:none;z-index:2}
.hseq.is-timed .hseq-vid.was-on{opacity:1;transform:none;z-index:1}
.hseq.is-timed .hseq-vid[data-hv="0"]:not(.is-on):not(.was-on){opacity:0;transform:scale(1.04)}
.hseq-copy{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--wrap-w);z-index:1;color:#fff;pointer-events:none}   /* starts on the page wrap's left edge */
.hseq-copy h1{max-width:1080px;font-size:clamp(42px,8vw,75px);color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.55),0 4px 32px rgba(0,0,0,.5)}
/* rotating word: all words share one grid cell, so the box is always as wide as the
   longest word and swapping words never reflows the H1 (zero layout shift) */
.hseq-copy .rot{display:inline-grid;color:#fff;text-align:left;vertical-align:bottom;white-space:nowrap}
/* changing word: white fill with a brand-blue outline (paint-order keeps the stroke outside the letters, so they stay full weight) */
.hseq-copy .rot span{-webkit-text-stroke:.055em #5AA9FF;paint-order:stroke fill}
/* word change: the incoming word drops in from just above while the outgoing one slides down and fades
   (.rev flips both directions when scrolling back up) */
.hseq-copy .rot{--rin:-.28em;--rout:.34em}
.hseq-copy .rot.rev{--rin:.28em;--rout:-.34em}
.hseq-copy .rot span{grid-area:1/1;opacity:0;transform:translate3d(0,var(--rin),0);transition:opacity .38s ease,transform .5s cubic-bezier(.22,1,.36,1)}
.hseq-copy .rot span.on{opacity:1;transform:none;transition-delay:.06s}
.hseq-copy .rot span.out{opacity:0;transform:translate3d(0,var(--rout),0);transition:opacity .3s ease,transform .45s cubic-bezier(.4,0,.2,1)}
.hseq-chips{position:absolute;left:0;right:0;bottom:24px;width:var(--wrap-w);margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:none;z-index:1}
.hchip{pointer-events:auto;background:#fff;color:#000;border-radius:10px;height:80px;padding:16px 8px 16px 24px;display:flex;align-items:center;gap:16px;box-shadow:0 10px 30px rgba(0,0,0,.25)}
.hchip .lbl{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:600;font-size:14px;line-height:1.2;max-width:110px}
.hchip .th{height:48px;width:64px;border-radius:10px;overflow:hidden;background:#eee;flex:none}
.hchip .th img{width:100%;height:100%;object-fit:cover;display:block}
.hchip .logos{display:flex;gap:8px;align-items:center}
.hchip .logos span{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:12px;padding:6px 10px;border:1px solid #e3e3e3;border-radius:8px}
.harw{width:48px;height:48px;border-radius:50%;background:var(--hd-accent);color:#fff;display:grid;place-items:center;font-size:20px;flex:none;transition:transform .2s}
.hchip:hover .harw{transform:translateX(3px)}

/* 6. Sections & About */
.sec{padding:50px 0;position:relative}
.sec.alt{background:#012040}
/* .head{max-width:840px;margin-bottom:56px} */
.head h2{font-size:var(--h2);line-height:var(--h2-lh); text-align: center; margin-top:18px;color:#fff;position:relative}
.head p{color:var(--mute);margin-top:18px;font-size:var(--fs-lead);line-height:var(--lh-lead);text-align:center;}
.two{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center}

.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:44px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:28px 22px;position:relative;overflow:hidden}
.stat b{display:block;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:700;font-size:clamp(38px,4.6vw,58px);color:#fff;line-height:1;font-variant-numeric:tabular-nums}
.stat span{font-size:13.5px;color:var(--mute);font-weight:500;margin-top:12px;display:block}
.stat::after{content:"";position:absolute;right:-30px;top:-30px;width:100px;height:100px;border-radius:50%;border:1px solid var(--line)}

/* 6b. About orbit — light band. A ring of photo cards turns slowly around the centre copy + stats (JS section 8d).
   All selectors are prefixed .tdo-. Geometry (--R ring radius, --Rt tick radius, --cy circle centre, --cw/--ch card size)
   is set per screen by the JS; the values here are the no-JS defaults. */
.tdo{
  --R:600px;--Rt:480px;--cy:700px;--cw:150px;--ch:180px;--n:16;
  --tdo-blue:#004690;--tdo-navy:#001f3f;--tdo-ink:#002347;--tdo-text:#292e34;--tdo-tint:#3396ff;--tdo-bg:#f6f8fb;
  --tdo-ease:cubic-bezier(.2,.8,.2,1);
  --photo:url("../images/about-thaida-company.jpg");   /* company gate + sign photo used by the "co" cards */
  position:relative;overflow:hidden;color:var(--tdo-ink);
  background:radial-gradient(70% 60% at 50% 100%,#fff 0%,var(--tdo-bg) 70%);
}
/* rotating photo ring */
.tdo-ring{position:absolute;left:50%;top:var(--cy);width:0;height:0;animation:tdo-spin 110s linear infinite}
.tdo-ring:hover{animation-play-state:paused}
.tdo.js-ring .tdo-ring{animation:none;rotate:var(--spin,0deg)}
.tdo-card{position:absolute;left:calc(var(--cw) / -2);top:calc(var(--ch) / -2);width:var(--cw);height:var(--ch);transform:rotate(calc(var(--i) * 360deg / var(--n))) translateY(calc(var(--R) * -1))}
.tdo-card:hover{z-index:3}
.tdo-photo{position:relative;width:100%;height:100%;overflow:hidden;border-radius:22px;background:#d9e2ee;border:4px solid #fff;translate:0 0;
  box-shadow:0 18px 34px -18px rgba(0,35,71,.45);transition:scale .6s var(--tdo-ease),translate .6s var(--tdo-ease),box-shadow .6s var(--tdo-ease),border-color .4s}
.tdo-photo img{display:block;width:100%;height:100%;object-fit:cover;color:transparent;transition:scale 1s var(--tdo-ease)}
.tdo-photo.co{background-image:var(--photo);background-repeat:no-repeat}

.tdo-card.is-top .tdo-photo{scale:1.08;border-color:#dcebfb;box-shadow:0 26px 44px -18px rgba(0,70,144,.55)}
.tdo-card:hover .tdo-photo{scale:1.18;translate:0 -14px;border-color:var(--tdo-tint);box-shadow:0 34px 56px -18px rgba(0,35,71,.65)}
.tdo-card:hover .tdo-photo img{scale:1.08}
.tdo-photo::after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,rgba(255,255,255,.35),transparent 40%);pointer-events:none}
/* the arc fades out below the centre so only the top half shows */
.tdo-orbit{position:absolute;inset:0;-webkit-mask-image:linear-gradient(180deg,#000 0,#000 calc(var(--cy) - 60px),transparent calc(var(--cy) + 120px));mask-image:linear-gradient(180deg,#000 0,#000 calc(var(--cy) - 60px),transparent calc(var(--cy) + 120px))}
.tdo-orbit .tdo-ring{pointer-events:auto}
.tdo-ticks{position:absolute;left:50%;top:var(--cy);width:calc(var(--Rt) * 2);height:calc(var(--Rt) * 2);margin:calc(var(--Rt) * -1) 0 0 calc(var(--Rt) * -1);animation:tdo-spin 160s linear infinite reverse;pointer-events:none}   /* tick arc turns the other way */
.tdo-ticks circle{fill:none}
.tdo-glow{position:absolute;left:50%;top:var(--cy);width:calc(var(--Rt) * 1.6);height:calc(var(--Rt) * 1.6);margin:calc(var(--Rt) * -.8) 0 0 calc(var(--Rt) * -.8);border-radius:50%;background:radial-gradient(closest-side,rgba(51,150,255,.14),rgba(0,70,144,.06) 55%,transparent);pointer-events:none}
/* centre content, kept inside the tick ring; pointer-events:none lets the mouse reach the cards behind it */
.tdo-content{position:relative;z-index:2;pointer-events:none;width:min(calc(100% - 40px),820px,calc(var(--Rt) * 1.36));margin:0 auto;padding:calc(var(--cy) - var(--Rt) * .7) 0 var(--sec-y);container-type:inline-size;text-align:center}
.tdo-content>*{pointer-events:auto}
.tdo-title{margin:0 auto;max-width:21ch;font-size:var(--h2);line-height:var(--h2-lh);font-weight:700;letter-spacing:-.035em;color:var(--tdo-ink)}
.tdo-title em{font-style:normal;background:linear-gradient(95deg,#004690 0%,#3396ff 55%,#004690 100%);background-size:200% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:abt-sheen 6s linear infinite}   /* same moving blue gradient as the other headings */
@media (prefers-reduced-motion:reduce){.tdo-title em{animation:none}}
.tdo-desc{margin:20px auto 0;max-width:58ch;font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--tdo-text)}
.tdo-btn{display:inline-flex;align-items:center;gap:14px;margin-top:30px;padding:7px 7px 7px 22px;border-radius:999px;background:#e4edf8;border:1px solid #cbdaee;color:var(--tdo-ink);font-weight:700;font-size:15px;text-decoration:none;transition:background-color .4s,color .4s,border-color .4s,transform .4s var(--tdo-ease)}
.tdo-btn b{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--tdo-blue);color:#fff;transition:background-color .4s,transform .5s var(--tdo-ease)}
.tdo-btn:hover{background:var(--tdo-blue);border-color:var(--tdo-blue);color:#fff;transform:translateY(-2px)}
.tdo-btn:hover b{background:#fff;color:var(--tdo-blue);transform:rotate(360deg)}
.tdo-btn:focus-visible{outline:3px solid var(--tdo-tint);outline-offset:3px}
/* stats sit lower, where the circle is widest */
.tdo-stats-wrap{position:relative;left:50%;width:min(calc(100vw - 32px),calc(var(--Rt) * 1.9));margin-top:clamp(36px,6cqi,56px);transform:translateX(-50%);container-type:inline-size}
.tdo-stats{list-style:none;margin:0;padding:18px 8px;border-radius:24px;background:rgba(255,255,255,.72);border:1px solid #e1e8f2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 30px 60px -40px rgba(0,35,71,.35);display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.tdo-stat{position:relative;padding:12px 12px 18px;border-radius:16px;transition:background-color .35s}
.tdo.ready .tdo-stat{--tdo-p:0}   /* JS 8d counts the numbers up and grows this underline (--tdo-p 0..1) once the section is seen */
.tdo-stat:hover{background:#f1f6fc}
.tdo-stat::after{content:"";position:absolute;left:32%;right:32%;bottom:6px;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--tdo-blue),var(--tdo-tint));transform:scaleX(var(--tdo-p,1));transform-origin:left}
.tdo-stat + .tdo-stat::before{content:"";position:absolute;left:0;top:0;bottom:0;border-left:1px dashed #c4d0e0}
.tdo-num{display:block;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:clamp(26px,6cqi,42px);font-weight:700;letter-spacing:-.03em;color:var(--tdo-ink);transition:color .3s,transform .4s var(--tdo-ease)}
.tdo-num sup{font-size:.55em;vertical-align:.55em;color:var(--tdo-blue);margin-left:2px}
.tdo-lbl{display:block;margin-top:6px;font-size:14px;color:var(--tdo-text)}
.tdo-stat:hover .tdo-num{color:var(--tdo-blue);transform:translateY(-4px)}
@keyframes tdo-spin{to{rotate:360deg}}
/* entrance */
@media (prefers-reduced-motion:no-preference){
  .tdo.ready .tdo-card .tdo-photo{transition:opacity .8s ease,scale .6s var(--tdo-ease),box-shadow .6s var(--tdo-ease)}
  .tdo.ready .tdo-up{transition:opacity .8s ease,translate .9s var(--tdo-ease)}
  .tdo.ready:not(.in) .tdo-photo{opacity:0}
  .tdo.ready:not(.in) .tdo-up{opacity:0;translate:0 22px}
  .tdo.in .tdo-up:nth-child(2){transition-delay:.1s}
  .tdo.in .tdo-up:nth-child(3){transition-delay:.2s}
  .tdo.in .tdo-up:nth-child(4){transition-delay:.3s}
  .tdo.in .tdo-card .tdo-photo{transition-delay:calc(var(--i) * 40ms),0s,0s}
}
@media (prefers-reduced-motion:reduce){
  .tdo *,.tdo *::before,.tdo *::after{animation:none!important;transition:none!important}
}
/* responsive: stats go 2 x 2 when the text column gets narrow */
@container (max-width:560px){
  .tdo-stats{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:8px}
  .tdo-stat:nth-child(3)::before{display:none}
}
@media (max-width:1000px){
  .tdo{--R:470px;--Rt:380px;--cy:560px;--cw:120px;--ch:146px}
}
@media (max-width:640px){
  .tdo{--R:300px;--Rt:238px;--cy:390px;--cw:84px;--ch:102px}
  .tdo-photo{border-radius:16px;border-width:3px}
}

/* 7. Materials — cards + pinned deal-out */
#special-products .head{margin-bottom:clamp(32px,4.5vw,64px)}   /* space between the heading and the cards */
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.card{background:#004690;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;position:relative;will-change:transform;transition:transform .25s cubic-bezier(.16,1,.3,1),border-color .25s,box-shadow .25s}
.card:hover{transform:translateY(-6px);border-color:var(--accent);box-shadow:0 30px 70px rgba(0,0,0,.55),0 0 0 1px var(--accent)}
.card .pic{aspect-ratio:4/3;overflow:hidden}
.card .pic img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s}
.card:hover .pic img{transform:scale(1.07)}
.card .body{padding:22px 22px 26px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.card .no{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:12px;color:var(--accent);display:block;margin-bottom:6px}
.card .body h3{font-size:20px;color:#fff}
.card .arw{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:#fff;flex:none;transition:.25s}
.card:hover .arw{background:var(--brand);color:#fff;transform:rotate(45deg)}
.deal{position:relative}
.deal-pin{position:sticky;top:96px}
.deal-stage{position:relative;padding-top:8px;padding-bottom:8px}
.deal-big{position:absolute;left:0;right:0;top:50%;transform:translate3d(0,-50%,0);text-align:center;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif; text-transform: uppercase; font-weight:700;font-size:clamp(80px,15vw,110px);line-height:1;color:transparent;-webkit-text-stroke:1.6px rgba(255,255,255,.38);letter-spacing:-.04em;pointer-events:none;white-space:nowrap;opacity:0;will-change:transform,opacity}
.deal-grid{position:relative;z-index:2;gap:18px}
.deal-grid .card{will-change:transform,opacity;transform-origin:center;transition:border-color .25s,box-shadow .25s}
.js .deal-grid .card{opacity:0}
.deal-grid .card .pic{aspect-ratio:3/2}
.deal-grid .card .body{padding:20px 22px 22px}
.deal-grid .card .body h3{font-size:19px; line-height: 30px;}
.deal-grid .card .no{margin-bottom:5px;font-size:14px}
.deal-grid .card .arw{width:38px;height:38px}
.deal-grid .card:hover{transform:none}
/* phone: card titles sized against the 32px section heading */
@media (max-width:600px){
  .deal-grid .card .body{padding:16px 18px 18px}
  .deal-grid .card .body h3{font-size:16px;line-height:1.35}
  .deal-grid .card .arw{width:34px;height:34px}
}
.deal.nopin{height:auto!important}
.deal.nopin .deal-pin{position:static}
.deal.nopin .deal-big{display:none}
.deal.nopin .deal-grid .card{opacity:1!important;transform:none!important}

/* 12. Materials & grades — coverflow carousel (one card per material, grade chips for pipes / tubes)
   Every card keeps ONE fixed layout box (the expanded size). Position/scale use
   transform, the collapsed look uses clip-path, and the media box is scaled with
   a counter-scaled image. Nothing animates layout, so auto-rotation adds no CLS. */
#grades{overflow:hidden}
/* heading in the same two-tone style as "Industrial Sectors We Serve": the lead phrase in a moving blue sheen, the rest solid.
   This section is dark, so the sheen uses the lighter brand blues and the rest of the heading stays white. */
#grades .head h2{letter-spacing:-.03em}
#grades .head h2 em{font-style:normal;background:linear-gradient(95deg,#3396ff 0%,#9cc7ff 55%,#3396ff 100%);background-size:200% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:abt-sheen 6s linear infinite}
@media (prefers-reduced-motion:reduce){#grades .head h2 em{animation:none}}
.chain{position:relative;width:100vw;margin-left:calc(50% - 50vw);height:750px;margin-top:56px;overflow:hidden}
.chain-card{position:absolute;top:50%;left:50%;width:var(--w,900px);height:620px;transform:translate(-50%,-50%);transform-origin:center;cursor:pointer;will-change:transform,opacity;transition:transform .7s cubic-bezier(.22,1,.36,1),opacity .7s}
.chain-card.is-active{cursor:grab}
/* drag / swipe (JS section 8) */
.chain{touch-action:pan-y;cursor:grab;-webkit-user-select:none;user-select:none}
.chain img{-webkit-user-drag:none}
.chain.is-dragging,.chain.is-dragging .chain-card{cursor:grabbing}
.chain.is-dragging .chain-card{transition:none}
.chain.is-dragging a{pointer-events:none}
.cc-box{position:absolute;inset:0;background:#fff;clip-path:inset(var(--clip-y,78px) var(--clip-x,355px) round 20px);transition:clip-path .7s cubic-bezier(.22,1,.36,1)}
.chain-card.is-active .cc-box{clip-path:inset(0 round 38px)}
.cc-media{position:absolute;left:var(--mx,558px);top:26px;width:var(--mw,316px);height:568px;border-radius:26px;overflow:hidden;transform-origin:0 0;transform:translate(var(--mdx,-198px),var(--mdy,57px)) scale(var(--sx,.57),var(--sy,.743));will-change:transform;transition:transform .7s cubic-bezier(.22,1,.36,1)}
.chain-card.is-active .cc-media{transform:none}
.cc-media img{width:100%;height:100%;object-fit:cover;display:block;transform-origin:center;transform:scale(var(--isx,1.754),var(--isy,1.345));transition:transform .7s cubic-bezier(.22,1,.36,1)}
.chain-card.is-active .cc-media img{transform:none}
.cc-logo{position:absolute;left:16px;bottom:16px;z-index:3;background:rgba(255,255,255,.94);border-radius:9px;padding:6px 11px;display:flex;align-items:center;opacity:0;transition:opacity .4s .25s;box-shadow:0 6px 18px rgba(0,0,0,.14)}
.cc-logo img{height:19px;width:auto;display:block;transform:none!important}
.chain-card.is-active .cc-logo{opacity:1}
.cc-body{position:absolute;top:0;bottom:0;left:0;right:40%;z-index:2;display:flex;flex-direction:column;justify-content:center;padding:0 30px 0 54px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .45s .2s,visibility 0s .65s}
.chain-card.is-active .cc-body{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .45s .2s,visibility 0s}
.cc-body h3{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:600;color:#12172a;font-size:clamp(24px,2.4vw,36px);line-height:1.06;letter-spacing:-.02em;margin:0 0 8px}
.cc-body p{font-family:"Manrope","Manrope Fallback",sans-serif;font-weight:400;color:#292e34;font-size:var(--fs-body);line-height:var(--lh-body);margin:0 0 16px}
/* grade chips: pipes / tubes groups; the first ("All ...") chip is filled with the brand colour */
.cc-grades{display:flex;flex-direction:column;gap:12px}
.cc-grp__k{display:inline-flex;align-items:center;height:32px;padding:0 15px;margin-bottom:8px;border-radius:999px;background:#002347;color:#fff;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;line-height:1}
.cc-chips{display:flex;flex-wrap:wrap;gap:7px}
.cc-chips a{display:inline-flex;align-items:center;height:32px;padding:0 15px;border-radius:999px;border:1px solid rgba(0,35,71,.32);background:transparent;color:#12172a;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;line-height:1;white-space:nowrap;transition:background-color .2s,border-color .2s,color .2s,transform .25s}
.cc-chips a:hover{background:#004690;border-color:#004690;color:#fff;transform:translateY(-1px)}
.chain-dots{position:absolute;left:50%;transform:translateX(-50%);bottom:22px;z-index:6;display:flex;gap:8px;align-items:center;background:rgba(255,255,255,.55);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:9px 14px;border-radius:999px}
.chain-dots button{width:8px;height:8px;border-radius:50%;border:0;padding:0;background:rgba(30,25,20,.30);cursor:pointer;transition:width .25s,background .25s}
.chain-dots button.on{background:#12172a;width:22px;border-radius:4px}

/* 13. Made in Thailand — pinned split reveal */
.vsplit{position:relative;background:#012040}   /* same navy as .vsplit-pin, so the padded mobile layout is one colour */
.vsplit-pin{position:sticky;top:0;height:100vh;height:100svh;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#012040}
.vsplit-stage{position:relative;width:100%;height:100%}
.vsplit-t{font-family:"Manrope","Manrope Fallback",sans-serif;font-weight:800;font-size:clamp(30px,4.2vw,68px);line-height:1;letter-spacing:-.02em;text-transform:uppercase;color:#fff;white-space:nowrap;margin:0;will-change:transform;position:absolute;top:50%;transform:translate3d(0,-50%,0)}
.vsplit-t.l{right:calc(50% + 252px)}
.vsplit-t.r{left:calc(50% + 252px)}
.vsplit-t .dot{position:absolute;left:2px;bottom:6px;width:10px;height:10px;border-radius:50%;background:var(--hd-accent);display:block}
.vsplit-media{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:460px;height:220px;border-radius:16px;overflow:hidden;background:#111;will-change:width,height,border-radius}
.vsplit-media img,.vsplit-media video{width:100%;height:100%;object-fit:cover;display:block;will-change:transform;transform:scale(1.15)}

/* 13b. Testimonials — light band with a fanned stacked-card auto slider (JS section 8b).
   Cards are dark navy → brand-blue gradient "glass" cards with a notched quote tab on the top edge (social-review-card
   reference). No controls: the front card swipes out on its own every 5 s (progress ring around the tab) or when dragged. */
.tsec{position:relative;overflow:hidden;background:#f5f7fb;color:#1c2733;
  --t-navy:#002347;--t-text:#292e34;--t-mute:#6b7683;--t-line:rgba(0,35,71,.12);--t-bg:#f5f7fb;
  --tc-line:rgba(140,190,255,.35);--tc-accent:#3396ff;--tc-soft:#9cc7ff;--tc-dim:rgba(214,229,247,.72)}   /* --tc-accent = light tint for the dark cards (the global --accent is a dark navy for the light sections) */
.tsec-bg{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.tsec-bg::before{content:"";position:absolute;inset:0;background-image:radial-gradient(rgba(0,35,71,.14) 1px,transparent 1.5px);background-size:24px 24px;
  -webkit-mask-image:radial-gradient(70% 70% at 62% 50%,#000 20%,transparent 100%);mask-image:radial-gradient(70% 70% at 62% 50%,#000 20%,transparent 100%)}
.tsec-glow{position:absolute;right:-6%;top:-10%;width:640px;height:640px;border-radius:50%;background:radial-gradient(circle,rgba(0,89,184,.2),rgba(0,70,144,0) 66%);animation:ab-drift 24s ease-in-out infinite alternate}
.tsec .wrap{z-index:1}
.tsec .kick{color:var(--brand)}
.tsec .head h2{color:var(--t-navy)}
.tsec .head h2::after{background:var(--brand);box-shadow:none}
.tsec .head p{color:var(--t-text)}
.tsec .head h2,.tsec .head p{text-align:left}   /* this section reads left-aligned, next to the review cards (the global .head centres) */
.tgrid{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);gap:clamp(40px,5vw,80px);align-items:center}
/* testimonials heading: three set lines where there is room for them; narrower screens wrap naturally */
@media (min-width:1101px){.tsec .head h2 .tl{display:block}}
.tside .head{margin-bottom:0}
/* rating card under the heading: white top (score), grey bottom (line); sample figures until real reviews are added */
.tscore{margin-top:34px;max-width:380px;border:1px solid var(--t-line);border-radius:18px;overflow:hidden;background:#fff;text-align:center;box-shadow:0 20px 50px rgba(0,35,71,.08)}
.tscore__top{padding:36px 28px 30px}
.tscore__n{display:block;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:700;font-size:clamp(60px,6.4vw,88px);line-height:1;letter-spacing:-.04em;color:var(--t-navy);font-variant-numeric:tabular-nums}
.tscore__l{display:block;margin-top:14px;font-size:14px;line-height:1.4;color:var(--t-mute)}
.tscore__p{margin:0;padding:26px 28px;background:#eef1f6;border-top:1px solid var(--t-line);font-size:var(--fs-body);line-height:var(--lh-body);font-weight:500;color:var(--t-navy)}
/* right column wrapper; the padding-top leaves room for the tab that sticks out above the front card */
.tstack{position:relative;padding-top:30px}
/* deck: JS sets the height to the tallest card and --p (0..1) to the auto-advance progress */
.tdeck{position:relative;height:460px;perspective:1400px;touch-action:pan-y;--p:0}
.js:where(.rv-on) .tdeck.rv{transform:none}
.tghost{position:absolute;right:-8%;top:-.43em;z-index:0;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:800;font-size:clamp(220px,26vw,400px);line-height:1;
  color:transparent;-webkit-text-stroke:1.5px rgba(0,70,144,.16);pointer-events:none;user-select:none}
.tcard{position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;gap:22px;padding:40px 34px 30px;border-radius:28px;color:#fff;
  background:radial-gradient(120% 80% at 50% 105%,rgba(51,150,255,.42),transparent 62%),linear-gradient(180deg,#001c3d 0%,#00254c 40%,#004690 100%);
  border:1px solid var(--tc-line);box-shadow:0 30px 70px -10px rgba(0,35,71,.32),inset 0 1px 0 rgba(255,255,255,.1);
  opacity:0;visibility:hidden;pointer-events:none;transform:translate3d(0,70px,0) rotate(0deg) scale(.86);transform-origin:50% 100%;will-change:transform,opacity;
  transition:transform .75s cubic-bezier(.22,1,.36,1),opacity .5s,border-color .4s,box-shadow .5s,visibility 0s .75s}
/* faint grid inside the card, stronger towards the top and bottom edges */
.tcard::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
  background-image:linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.055) 1px,transparent 1px);background-size:28px 28px;background-position:center top;
  -webkit-mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.35) 60%,#000 100%);mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.35) 60%,#000 100%)}
/* the two cards behind fan out at slight angles */
.tcard.is-3{visibility:visible;opacity:.55;transform:translate3d(-22px,44px,0) rotate(-4deg) scale(.92);z-index:2;transition-delay:0s}
.tcard.is-2{visibility:visible;opacity:.8;transform:translate3d(16px,22px,0) rotate(3deg) scale(.96);z-index:3;transition-delay:0s}
.tcard.is-front{visibility:visible;opacity:1;transform:none;pointer-events:auto;z-index:5;cursor:grab;
  border-color:rgba(140,190,255,.5);box-shadow:0 40px 90px -20px rgba(0,35,71,.5),0 0 0 1px rgba(51,150,255,.12),inset 0 1px 0 rgba(255,255,255,.14);transition-delay:0s}
.tcard.is-out{visibility:visible;opacity:0;pointer-events:none;z-index:6;transform:translate3d(-18%,-6%,0) rotate(-8deg) scale(.96);
  transition:transform .6s cubic-bezier(.4,0,.2,1),opacity .45s,visibility 0s .6s}
.tcard.is-out.to-right{transform:translate3d(18%,-6%,0) rotate(8deg) scale(.96)}
.tcard.is-drag{transition:none;cursor:grabbing}
/* pointer spotlight on the front card (main.js writes --mx / --my) */
.tcard::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .4s;z-index:0;
  background:radial-gradient(380px circle at var(--mx,50%) var(--my,50%),rgba(153,200,255,.16),transparent 62%)}
.tcard.is-front:hover::before{opacity:1}
.tcard>*{position:relative;z-index:1;transition:opacity .35s}
.tcard:not(.is-front):not(.is-out)>*{opacity:0}   /* cards behind the front one stay blank until they come forward */
/* notched quote tab on the top edge: the ring in the band colour cuts it into the card outline */
.tcard__tab{position:absolute;top:-27px;left:50%;width:54px;height:54px;margin-left:-27px;border-radius:50%;display:grid;place-items:center;z-index:3;
  background:linear-gradient(180deg,#00305f,#001c3d);border:1px solid rgba(140,190,255,.5);color:var(--tc-accent);
  box-shadow:0 0 0 7px var(--t-bg),0 10px 24px rgba(0,35,71,.25)}
.tcard__tab svg{width:22px;height:22px;display:block}
/* auto-advance progress as a thin ring around the tab (JS 8b writes --p 0..1 on the deck) */
.tcard__tab::before{content:"";position:absolute;inset:-4px;border-radius:50%;pointer-events:none;
  background:conic-gradient(var(--tc-accent) calc(var(--p,0)*360deg),rgba(140,190,255,.18) 0);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px))}
/* visual order: who → quote → industry / counter row (DOM order is unchanged) */
.tcard__who{order:-1;display:flex;align-items:center;gap:14px}
.tcard__av{flex:none;width:52px;height:52px;border-radius:50%;background:linear-gradient(145deg,#0059b8,#004690);color:#fff;display:grid;place-items:center;
  font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:700;font-size:16px;letter-spacing:.02em;box-shadow:0 0 0 2px rgba(255,255,255,.14),0 8px 20px rgba(0,20,50,.45)}
.tcard__meta b{display:block;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:17px;font-weight:600;color:var(--tc-soft);letter-spacing:-.01em}
.tcard__meta small{display:block;font-size:13px;color:var(--tc-dim);margin-top:3px;line-height:1.4}
.tcard__q{margin:0;flex:1;display:flex;align-items:center}
.tcard__q p{margin:0;font-family:"Manrope","Manrope Fallback",sans-serif;font-weight:500;font-size:19px;line-height:1.5;letter-spacing:-.01em;color:#fff}
.tcard__q p::before{content:"“";color:var(--tc-accent);margin-right:2px}
.tcard__q p::after{content:"”";color:var(--tc-accent);margin-left:2px}
.tcard__top{order:1;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.tcard__ind{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#fff;padding:6px 11px;border:1px solid rgba(255,255,255,.22);border-radius:999px;white-space:nowrap;background:rgba(255,255,255,.06)}
.tcard__n{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:12px;letter-spacing:.12em;color:var(--tc-dim);font-variant-numeric:tabular-nums}
@media (max-width:900px){
  .tgrid{grid-template-columns:1fr;gap:44px}
  .tstack{max-width:560px}
}
@media (max-width:600px){
  .tstack{padding-top:26px}
  .tcard{padding:38px 22px 22px;gap:18px;border-radius:22px}
  .tcard__q p{font-size:17px}
  .tcard__tab{width:48px;height:48px;margin-left:-24px;top:-24px}
  .tcard__tab svg{width:20px;height:20px}
  .tghost{font-size:190px;right:-10%;top:-.5em}
  .tcard.is-2{transform:translate3d(10px,18px,0) rotate(2deg) scale(.96)}
  .tcard.is-3{transform:translate3d(-12px,36px,0) rotate(-3deg) scale(.92)}
}
@media (prefers-reduced-motion:reduce){
  .tcard{transition:none}
  .tcard.is-out{opacity:0;visibility:hidden}
  .tsec-glow{animation:none}
}

/* 14. Applications dial — light band. Industries sit on a rotating ring around a "tube end" that shows the industry photo;
   the details column swaps text + application photo (JS section 8c). All selectors are prefixed .tdd-. */
.tdd{
  --tdd-blue:#004690;--tdd-navy:#001f3f;--tdd-ink:#002347;--tdd-text:#292e34;--tdd-tint:#3396ff;--tdd-line:#dbe5f2;
  --tdd-ease:cubic-bezier(.65,0,.25,1);--tdd-soft:cubic-bezier(.22,.8,.24,1);
  --D:560px;   /* dial size (JS sets it per screen) */
  --R:238px;   /* radius where the industry icons sit */
  --rot:0deg;  /* current dial rotation */
  --steel:conic-gradient(from 20deg,#7e8894 0deg,#f5f7f9 38deg,#a3acb7 70deg,#e6eaee 112deg,#6f7a87 160deg,#d9dee4 205deg,#fbfcfd 240deg,#8f99a5 285deg,#cdd3da 330deg,#7e8894 360deg);
  position:relative;overflow:hidden;isolation:isolate;
  padding:clamp(50px,8vw,50px) 0;
  background:radial-gradient(60% 60% at 25% 55%,#e7eff9 0%,#f6f8fb 60%);
  color:var(--tdd-ink);
}
.tdd img{display:block}
.tdd-wrap{width:var(--wrap-w);margin:0 auto}

/* header */
.tdd-head{text-align:center;max-width:760px;margin:0 auto}
.tdd-title{margin:20px 0 0;font-size:var(--h2);line-height:var(--h2-lh);font-weight:700;letter-spacing:-.03em;color:var(--tdd-ink)}
.tdd-title em{font-style:normal;color:var(--tdd-blue)}
.tdd-sub{margin:16px auto 0;max-width:56ch;color:var(--tdd-text);font-size:var(--fs-lead);line-height:var(--lh-lead)}
.tdd-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(36px,5vw,80px);align-items:center;margin-top:clamp(40px,5vw,70px)}

/* the dial */
.tdd-dial{position:relative;width:var(--D);height:var(--D);flex:none}
.tdd-scale{position:absolute;inset:0;animation:tdd-spin 120s linear infinite}   /* tick scale turns slowly on its own */
.tdd-scale circle{fill:none}
.tdd-marker{position:absolute;left:50%;top:-14px;z-index:5;translate:-50% 0;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:14px solid var(--tdd-tint);filter:drop-shadow(0 4px 6px rgba(51,150,255,.5))}
.tdd-ring{position:absolute;inset:0;list-style:none;margin:0;padding:0;transform:rotate(var(--rot));transition:transform 1.1s var(--tdd-ease)}
.tdd-node{position:absolute;left:50%;top:50%;width:0;height:0;transform:rotate(var(--a)) translateY(calc(var(--R) * -1))}
.tdd-dot{position:absolute;left:0;top:0;translate:-50% -50%;padding:0;border:0;background:none;cursor:pointer;color:inherit;font:inherit}
.tdd-in{display:flex;flex-direction:column;align-items:center;gap:6px;transform:rotate(calc(-1 * (var(--a) + var(--rot))));transition:transform 1.1s var(--tdd-ease)}   /* keeps icons upright */
.tdd-ico{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;background:#fff;color:var(--tdd-blue);border:1px solid var(--tdd-line);box-shadow:0 10px 22px -14px rgba(0,35,71,.6);
  transition:background-color .45s,color .45s,transform .5s var(--tdd-soft),box-shadow .45s,border-color .45s}
.tdd-lab{font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11.5px;font-weight:700;line-height:1.15;text-align:center;color:var(--tdd-text);white-space:nowrap;transition:color .35s,opacity .35s}
.tdd-dot:hover .tdd-ico{transform:scale(1.12);border-color:var(--tdd-blue)}
.tdd-dot:hover .tdd-lab{color:var(--tdd-ink)}
.tdd-dot[aria-pressed="true"] .tdd-ico{background:var(--tdd-blue);color:#fff;border-color:var(--tdd-blue);transform:scale(1.22);box-shadow:0 0 0 6px rgba(51,150,255,.25),0 14px 26px -12px rgba(0,70,144,.9)}
.tdd-dot[aria-pressed="true"] .tdd-lab{color:var(--tdd-blue);opacity:0}
.tdd-dot:focus-visible{outline:none}
.tdd-dot:focus-visible .tdd-ico{outline:3px solid var(--tdd-tint);outline-offset:3px}

/* tube end in the middle: steel wall + photo inside */
.tdd-tube{position:absolute;left:50%;top:50%;translate:-50% -50%;width:calc(var(--D) * .56);height:calc(var(--D) * .56);border-radius:50%;padding:calc(var(--D) * .028);background:var(--steel);
  box-shadow:0 1px 0 rgba(255,255,255,.8) inset,0 40px 70px -40px rgba(0,35,71,.7);transform:rotate(var(--rot));transition:transform 1.1s var(--tdd-ease)}
.tdd-bore{position:relative;width:100%;height:100%;border-radius:50%;overflow:hidden;background:linear-gradient(135deg,var(--tdd-blue),var(--tdd-navy));transform:rotate(calc(-1 * var(--rot)));transition:transform 1.1s var(--tdd-ease)}
.tdd-bore img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;color:transparent;clip-path:circle(75% at 50% 50%);transition:opacity .6s ease,transform 1.4s var(--tdd-soft),clip-path .9s var(--tdd-soft)}
.tdd-bore img.next{clip-path:circle(0% at 50% 50%);transform:scale(1.2)}
.tdd-bore img.leave{opacity:.4}
.tdd-bore::after{content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;box-shadow:inset 0 0 0 1px rgba(0,0,0,.25),inset 0 18px 30px -8px rgba(0,0,0,.5),inset 0 -8px 18px -8px rgba(255,255,255,.35)}   /* inner wall shading */

/* details */
.tdd-detail{position:relative}
.tdd-detail h3{margin:10px 0 0;font-size:clamp(28px,3vw,42px);line-height:1.08;font-weight:800;letter-spacing:-.03em;color:var(--tdd-ink)}
.tdd-detail>p{margin:14px 0 0;color:var(--tdd-text);font-size:16px;line-height:1.75;max-width:52ch}
.tdd-use{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:20px;align-items:stretch;margin-top:26px;padding:14px;border-radius:24px;background:#fff;border:1px solid var(--tdd-line);box-shadow:0 30px 60px -44px rgba(0,35,71,.55)}
.tdd-use-pic{position:relative;overflow:hidden;border-radius:16px;min-height:190px;background:linear-gradient(135deg,var(--tdd-blue),var(--tdd-tint))}
.tdd-use-pic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;color:transparent;clip-path:inset(0);transition:opacity .6s ease,transform 1.2s var(--tdd-soft),clip-path .9s var(--tdd-soft)}
.tdd-use-pic img.next{clip-path:inset(0 100% 0 0);transform:scale(1.12)}
.tdd-use-pic img.leave{opacity:.5}
.tdd-use-pic:hover img:not(.leave){transform:scale(1.05)}
.tdd-use-txt{padding:8px 8px 8px 0}
.tdd-use-lab{display:inline-flex;align-items:center;gap:8px;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--tdd-blue)}
.tdd-use-lab::before{content:"";width:12px;height:12px;border-radius:50%;border:3px solid var(--tdd-tint)}
.tdd-use-txt strong{display:block;margin-top:8px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:17px;color:var(--tdd-ink)}
.tdd-use-txt p{margin:8px 0 0;font-size:15px;line-height:var(--lh-body);color:#292e34;}
.tdd-swap{transition:opacity .35s ease,transform .5s var(--tdd-soft)}
#tdd-desc{font-size:var(--fs-lead);line-height:var(--lh-lead)}
.tdd.switching .tdd-swap{opacity:0;transform:translateY(10px)}
@keyframes tdd-spin{to{rotate:360deg}}
@media (max-width:1080px){
  .tdd-grid{grid-template-columns:minmax(0,1fr);justify-items:center}
  .tdd-detail{width:100%;max-width:680px}
}
@media (max-width:560px){
  .tdd-lab{display:none}
  .tdd-ico{width:40px;height:40px}
  .tdd-ico svg{width:18px;height:18px}
  .tdd-use{grid-template-columns:minmax(0,1fr)}
  .tdd-use-pic{min-height:180px}
  .tdd-use-txt{padding:4px 6px 8px}
}
@media (prefers-reduced-motion:reduce){
  .tdd *,.tdd *::before,.tdd *::after{animation:none!important;transition:none!important}
}

/* 15. Footer — dark-blue "thaida" footer. Every selector is scoped to footer.thaida (the header mega menu also uses .col / .open) and tokens are prefixed --ft- so they never override the site tokens above. */
footer.thaida{
  --ft-brand:#004690;--ft-brand-dark:#00305f;--ft-brand-deep:#001f3f;--ft-brand-light:#0f62bf;
  --ft-accent:#4d9cf0;--ft-accent-soft:#9cc7ff;
  --ft-bg-1:#00203f;--ft-bg-2:#002d5c;--ft-bg-3:#003a78;
  --ft-ink:#eef4fb;--ft-ink-dim:#a9c3e3;--ft-ink-faint:#7ea0c9;
  --ft-line:rgba(77,156,240,.22);
  --ft-ease:cubic-bezier(.22,.61,.36,1);
  position:relative;width:100%;overflow:hidden;
  color:var(--ft-ink);font-family:"Manrope","Manrope Fallback",sans-serif;font-size:15px;line-height:1.5;
  background:
    radial-gradient(900px 500px at 12% -10%,rgba(0,70,144,.75),transparent 60%),
    radial-gradient(1000px 600px at 90% 10%,rgba(15,98,191,.35),transparent 55%),
    linear-gradient(180deg,var(--ft-bg-1) 0%,var(--ft-bg-2) 55%,var(--ft-bg-3) 100%);
}
.thaida .dot-grid{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:1;pointer-events:none}

/* top strip */
/* each half keeps its full-bleed colour, but the content sits on the page wrap: the brochure block runs from the wrap's left
   edge to the middle, the support block from the middle to the wrap's right edge (inside a half, 100% = the half's width) */
.thaida .top-strip{position:relative;z-index:5;display:grid;grid-template-columns:1fr 1fr;
  --strip-mid:clamp(24px,3vw,48px);                                          /* space either side of the centre line */
  --strip-edge:max(var(--gutter),100% - var(--wrap-max) / 2 + var(--gutter))} /* half width minus half the wrap's content width */
.thaida .strip-half{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:26px var(--strip-mid);color:#fff;text-decoration:none;position:relative;overflow:hidden;transition:background .35s var(--ft-ease)}
.thaida .strip-half.brochure{background:var(--ft-brand);padding-left:var(--strip-edge)}
.thaida .strip-half.support{background:var(--ft-brand-dark);padding-right:var(--strip-edge)}
.thaida .strip-half::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.08) 50%,rgba(255,255,255,0) 100%);transform:translateX(-100%);transition:transform .7s var(--ft-ease)}
.thaida .strip-half:hover::before{transform:translateX(100%)}
.thaida .strip-half.brochure:hover{background:var(--ft-brand-light)}
.thaida .strip-half.support:hover{background:var(--ft-brand)}
.thaida .strip-left{display:flex;align-items:center;gap:22px}
.thaida .strip-icon{width:46px;height:46px;flex-shrink:0;color:#fff;transition:transform .4s var(--ft-ease)}
.thaida .strip-icon svg,.thaida .strip-action svg{width:100%;height:100%;display:block}
.thaida .strip-half:hover .strip-icon{transform:scale(1.12) rotate(-6deg)}
.thaida .strip-divider{width:1px;height:46px;background:rgba(255,255,255,.55)}
.thaida .strip-title{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:24px;font-weight:600;line-height:1.2;}
.thaida .strip-sub{font-size:15px;font-weight:500;margin-top:5px;opacity:.95}
.thaida .strip-action{width:42px;height:42px;flex-shrink:0;color:#fff;transition:transform .4s var(--ft-ease)}
.thaida .strip-half.brochure:hover .strip-action{animation:ft-dl-bounce .9s var(--ft-ease) infinite}
.thaida .strip-half.support:hover .strip-action{animation:ft-ring .7s var(--ft-ease) infinite}
@keyframes ft-dl-bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(6px)}}
@keyframes ft-ring{0%,100%{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}}

/* corner accents (bottom edge of the footer) */
.thaida .accent-corner{position:absolute;bottom:0;height:34px;width:220px;background:linear-gradient(90deg,var(--ft-brand),var(--ft-accent));clip-path:polygon(15% 0,100% 0,85% 100%,0 100%);z-index:3}
.thaida .accent-corner.left{left:0}
.thaida .accent-corner.right{right:0}
.thaida .accent-line{position:absolute;bottom:34px;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,rgba(90,169,255,.6),transparent);z-index:2}

/* main grid */
/* the link columns take their natural width (every link stays on one line); the brand text and contact column share the rest */
.thaida .top-grid{position:relative;z-index:4;display:grid;grid-template-columns:minmax(220px,1.15fr) auto auto auto minmax(0,1fr);gap:28px 32px;width:var(--wrap-w);padding:64px 0 40px;margin:0 auto}
.thaida .feature-bar,.thaida .bottom-bar{width:var(--wrap-w);margin:0 auto}

/* brand column */
.thaida .brand-col{display:flex;flex-direction:column;gap:18px}
.thaida .logo-block{display:flex;flex-direction:column;align-items:flex-start;gap:6px;width:fit-content;text-decoration:none}

.thaida .brand-desc{font-size:14px;line-height:1.7;color:#fff;max-width:34ch}
.thaida .socials{display:flex;gap:10px;margin-top:4px}
.thaida .socials a{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.06);border:1px solid var(--ft-line);color:var(--ft-ink);transition:transform .3s var(--ft-ease),background .3s,border-color .3s,box-shadow .3s}
.thaida .socials a svg{width:15px;height:15px;transition:transform .3s var(--ft-ease)}
.thaida .socials a:hover{background:linear-gradient(140deg,var(--ft-brand),var(--ft-brand-light));border-color:transparent;color:#fff;transform:translateY(-4px);box-shadow:0 10px 20px -8px rgba(90,169,255,.7)}
.thaida .socials a:hover svg{transform:scale(1.15)}

/* link columns */
.thaida .col h4,.thaida .col .col-h{display:flex;align-items:center;gap:9px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:20px;font-weight:700;line-height:1.3;letter-spacing:0;color:#fff;margin:0 0 20px;position:relative;padding-bottom:10px}   /* .col-h: the product pages use <p class="col-h"> instead of <h4> (13 Oct 2026) */
.thaida .col h4::after,.thaida .col .col-h::after,.thaida .col .col-head::after{content:"";position:absolute;left:0;bottom:0;height:2px;width:34px;background:linear-gradient(90deg,var(--ft-accent),transparent);border-radius:2px;transition:width .4s var(--ft-ease)}
.thaida .col:hover h4::after,.thaida .col:hover .col-h::after,.thaida .col:hover .col-head::after{width:70px}
.thaida .col h4 svg,.thaida .col .col-h svg{width:19px;height:19px;color:var(--ft-accent);flex-shrink:0}
.thaida .col ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.thaida .col .col-head{display:block;text-decoration:none;margin-bottom:20px;position:relative;padding-bottom:10px;width:fit-content}
.thaida .col .col-title{display:inline-flex;align-items:center;gap:8px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:20px;font-weight:700;color:#fff;transition:color .3s}
.thaida .col .col-title .arr{display:inline-block;transition:transform .35s var(--ft-ease);color:var(--ft-accent)}
.thaida .col .col-head:hover .col-title{color:var(--ft-accent-soft)}
.thaida .col .col-head:hover .col-title .arr{transform:translateX(5px)}
.thaida .col ul li a{display:flex;align-items:flex-start;gap:8px;font-size:14px;font-weight:500;color:#fff;text-decoration:none;width:fit-content;position:relative;padding:2px 0;line-height:1.4;transition:color .3s,transform .35s var(--ft-ease)}
.thaida .col ul li a .chev{color:var(--ft-accent);flex-shrink:0;display:inline-flex;transition:transform .35s var(--ft-ease),color .3s}
.thaida .col ul li a::after{content:"";position:absolute;left:18px;right:0;bottom:-1px;height:1px;background:var(--ft-accent);transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ft-ease)}
.thaida .col ul li a:hover{color:#fff;transform:translateX(6px)}
.thaida .col ul li a:hover .chev{transform:translateX(3px);color:var(--ft-accent-soft)}
.thaida .col ul li a:hover::after{transform:scaleX(1)}

/* get in touch */
.thaida .touch-item{position:relative;display:flex;gap:12px;align-items:flex-start;margin-bottom:18px;color:inherit;text-decoration:none}
/* phone row: the link holds only the number (the hours are plain text), and is stretched over the whole row so the row stays one click target */
.thaida .touch-item a.t-main{display:block;text-decoration:none}
.thaida .touch-item a.t-main::after{content:"";position:absolute;inset:0}
.thaida .touch-item .icon-badge{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:rgba(0,70,144,.35);border:1px solid rgba(90,169,255,.4);color:var(--ft-accent);margin-top:1px;transition:background .3s,transform .35s var(--ft-ease),color .3s,box-shadow .3s}
.thaida .touch-item .icon-badge svg{width:14px;height:14px}
.thaida .touch-item:hover .icon-badge{background:linear-gradient(140deg,var(--ft-brand),var(--ft-brand-light));color:#fff;transform:scale(1.12);box-shadow:0 0 0 4px rgba(90,169,255,.18)}
.thaida .touch-item .t-main{font-size:14px;color:#fff;font-weight:700;line-height:1.4;transition:color .3s}
.thaida .touch-item:hover .t-main{color:var(--ft-accent-soft)}
.thaida .touch-item .t-sub{font-size:12.5px;color:#fff;margin-top:2px;line-height:1.5}
.thaida .quote-btn{margin-top:8px;display:inline-flex;align-items:center;gap:10px;padding:13px 24px;border-radius:999px;border:none;cursor:pointer;background:linear-gradient(90deg,var(--ft-brand),var(--ft-brand-light));color:#fff;font-size:14.5px;font-weight:700;font-family:"Manrope","Manrope Fallback",sans-serif;text-decoration:none;box-shadow:0 10px 24px -8px rgba(0,70,144,.8);transition:transform .3s var(--ft-ease),box-shadow .3s,filter .3s}
.thaida .quote-btn svg{width:15px;height:15px;transition:transform .3s var(--ft-ease)}
.thaida .quote-btn:hover{filter:brightness(1.12);transform:translateY(-3px);box-shadow:0 16px 30px -10px rgba(90,169,255,.8)}
.thaida .quote-btn:hover svg{transform:translateX(4px)}

/* feature bar */
.thaida .feature-bar{position:relative;z-index:4;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--ft-line);border-bottom:1px solid var(--ft-line);padding:26px 0}
.thaida .feature{display:flex;align-items:center;gap:14px;padding:0 20px;position:relative;cursor:default;transition:transform .35s var(--ft-ease)}
.thaida .feature:not(:first-child){border-left:1px solid var(--ft-line)}
.thaida .feature:first-child{padding-left:0}   /* first item starts on the wrap edge */
.thaida .feature .f-icon{width:44px;height:44px;border-radius:12px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--ft-accent);color:var(--ft-accent);transition:background .35s,color .35s,transform .35s var(--ft-ease),box-shadow .35s}
.thaida .feature .f-icon svg{width:20px;height:20px}
.thaida .feature:hover{transform:translateY(-3px)}
.thaida .feature:hover .f-icon{background:linear-gradient(140deg,var(--ft-brand),var(--ft-brand-light));color:#fff;border-color:transparent;transform:rotate(-8deg) scale(1.08);box-shadow:0 10px 20px -8px rgba(90,169,255,.7)}
.thaida .feature .f-title{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:14.5px;font-weight:700;color:#fff;transition:color .3s}
.thaida .feature:hover .f-title{color:var(--ft-accent-soft)}
.thaida .feature .f-sub{font-size:12.5px;color:var(--ft-ink-faint);margin-top:2px}

/* bottom bar */
.thaida .bottom-bar{position:relative;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;padding:22px 0 48px}
.thaida .copyright{font-size:14px;color:#fff;line-height:1.6}
.thaida .badges{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.thaida .badge{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;opacity:.85;cursor:default;transition:transform .35s var(--ft-ease),opacity .3s,color .3s}
.thaida .badge:hover{opacity:1;transform:translateY(-4px) scale(1.08)}
.thaida .badge svg{width:34px;height:34px}
.thaida .badge span{font-size:11px;margin-top:2px;font-weight:600}

/* language dropdown */
.thaida .lang-wrap{position:relative}
.thaida .lang-select{display:flex;align-items:center;gap:8px;padding:9px 16px;border-radius:999px;border:1px solid var(--ft-line);background:rgba(255,255,255,.04);color:var(--ft-ink);font-size:13px;font-weight:500;cursor:pointer;font-family:"Manrope","Manrope Fallback",sans-serif;transition:background .3s,border-color .3s,transform .3s var(--ft-ease)}
.thaida .lang-select svg{width:14px;height:14px;color:var(--ft-accent)}
.thaida .lang-select:hover,.thaida .lang-wrap.open .lang-select{background:rgba(0,70,144,.35);border-color:rgba(90,169,255,.45);transform:translateY(-2px)}
.thaida .lang-select .caret{margin-left:2px;transition:transform .3s var(--ft-ease)}
.thaida .lang-wrap.open .caret{transform:rotate(180deg)}
.thaida .lang-menu{position:absolute;right:0;bottom:calc(100% + 8px);min-width:150px;margin:0;background:var(--ft-brand-deep);border:1px solid rgba(77,156,240,.4);border-radius:12px;padding:6px;list-style:none;box-shadow:0 18px 40px -14px rgba(0,0,0,.7);opacity:0;visibility:hidden;transform:translateY(6px);z-index:10;
  content-visibility:hidden;   /* closed: its contents (emoji flags, Thai text) are not laid out, which saved ~25% of every page layout; it switches back when the fade-out ends */
  transition:opacity .25s,transform .25s var(--ft-ease),visibility .25s,content-visibility .25s allow-discrete}
.thaida .lang-wrap.open .lang-menu{opacity:1;visibility:visible;transform:translateY(0);content-visibility:visible}
.thaida .lang-menu li{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;font-size:13px;font-weight:500;color:var(--ft-ink-dim);cursor:pointer;transition:background .25s,color .25s}
.thaida .lang-menu li .flag{font-size:16px;line-height:1}
.thaida .lang-menu li:hover{background:rgba(0,70,144,.5);color:#fff}
.thaida .lang-menu li.active{color:#fff;background:rgba(90,169,255,.15)}
.thaida .lang-menu li.active::after{content:"✓";margin-left:auto;color:var(--ft-accent);font-size:12px}

/* footer responsive */
@media (max-width:1279px){
  .thaida .strip-title{font-size:20px}
  .thaida .top-grid{grid-template-columns:1fr 1fr;grid-template-areas:"brand brand" "pipes tubes" "quick touch";row-gap:40px;padding:52px 0 36px}
  .thaida .brand-col{grid-area:brand}
  .thaida .col.quick{grid-area:quick}
  .thaida .col.pipes{grid-area:pipes}
  .thaida .col.tubes{grid-area:tubes}
  .thaida .col.touch{grid-area:touch}
  .thaida .feature-bar{grid-template-columns:1fr 1fr;row-gap:24px;padding:26px 0}
  .thaida .feature:nth-child(3){border-left:none;padding-left:0}
  .thaida .bottom-bar{padding:22px 0 44px}
}
@media (max-width:760px){
  .thaida .top-strip{grid-template-columns:1fr}
  .thaida .strip-half,.thaida .strip-half.brochure,.thaida .strip-half.support{padding:20px var(--gutter)}   /* stacked: both halves on the wrap edges */
  .thaida .strip-title{font-size:18px}
  .thaida .strip-sub{font-size:13px}
  .thaida .strip-icon{width:38px;height:38px}
  .thaida .strip-action{width:34px;height:34px}
  .thaida .top-grid{grid-template-columns:1fr;grid-template-areas:"brand" "pipes" "tubes" "quick" "touch";padding:44px 0 30px;row-gap:36px}
  .thaida .feature-bar{grid-template-columns:1fr;padding:24px 0;row-gap:22px}
  .thaida .feature{border-left:none!important;padding:0}
  .thaida .bottom-bar{flex-direction:column;align-items:flex-start;padding:22px 0 40px}
  .thaida .badges{gap:16px}
  .thaida .badge svg{width:28px;height:28px}
  
  
  .thaida .accent-corner{width:130px;height:24px}
  .thaida .accent-line{bottom:24px}
}
@media (prefers-reduced-motion:reduce){
  .thaida .strip-action,.thaida .strip-icon,.thaida .socials a,.thaida .feature,.thaida .feature .f-icon,.thaida .badge,.thaida .col ul li a,.thaida .touch-item .icon-badge,.thaida .quote-btn{animation:none!important;transition:none}
}
/* back to top: white disc with a brand-blue arrow; the ring around it fills as the page scrolls (main.js sets the
   ring's stroke-dashoffset and --lift, which moves the button above the footer's language switch when they would meet) */
.toTop{position:fixed;right:24px;bottom:24px;z-index:55;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;
  background:#fff;color:var(--brand);box-shadow:0 12px 28px rgba(0,31,63,.24),0 2px 6px rgba(0,31,63,.12);
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(14px) scale(.85);translate:0 calc(var(--lift,0px) * -1);
  transition:opacity .35s ease,transform .5s cubic-bezier(.22,1,.36,1),translate .35s cubic-bezier(.22,1,.36,1),visibility 0s linear .5s,background-color .3s,color .3s,box-shadow .3s}
.toTop.show{opacity:1;visibility:visible;pointer-events:auto;transform:none;transition-delay:0s}
.toTop__ring{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg);pointer-events:none}   /* ring starts at 12 o'clock */
.toTop__ring circle{fill:none;stroke-width:3;transition:stroke .3s}
.toTop__track{stroke:rgba(0,70,144,.12)}
.toTop__prog{stroke:var(--brand);stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100}
.toTop__arw{position:relative;width:20px;height:20px;transition:transform .45s cubic-bezier(.22,1,.36,1)}
.toTop:hover{background:var(--brand);color:#fff;box-shadow:0 14px 32px var(--glow-brand)}
.toTop:hover .toTop__track{stroke:rgba(255,255,255,.22)}
.toTop:hover .toTop__prog{stroke:#fff}
.toTop:hover .toTop__arw{transform:translateY(-3px)}
.toTop:focus-visible{border-radius:50%;outline-offset:4px}
@media (max-width:600px){.toTop{right:16px;bottom:16px;width:46px;height:46px}.toTop__arw{width:18px;height:18px}}
@media (prefers-reduced-motion:reduce){.toTop,.toTop__arw{transition:none}}

/* 16. Motion (JS-enhanced only; html.js is set inline in <head>) */
.js:where(.rv-on) .rv{opacity:0;transform:translateY(42px) scale(.98);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
.js:where(.rv-on) .rv.in{opacity:1;transform:none}
.js:where(.rv-on) .card.rv{transition:opacity .6s cubic-bezier(.34,1.4,.5,1),transform .6s cubic-bezier(.34,1.4,.5,1)}
.js:where(.rv-on) .card.rv.in{transition:transform .25s cubic-bezier(.16,1,.3,1),border-color .25s,box-shadow .25s}
/* word rise (clip mask) — used by section headings below the fold */
.hw{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.14em;margin-bottom:-.14em}
.hw>span{display:inline-block;transform:translateY(120%) skewY(6deg);transition:transform .9s cubic-bezier(.16,1,.3,1)}
/* hero: no clip and no opacity:0, so the H1 paints on the first frame (LCP-safe); transform-only settle */
.hseq .hw{overflow:visible;padding:0;margin:0}
.hseq .hw>span{transform:translateY(.3em) skewY(3deg)}
.hseq.reveal .hw>span{transform:none}
html:not(.js) .hseq .hw>span{transform:none}   /* heading words are pre-split in the HTML; without JS they simply sit in place */
/* section heading words rise on scroll */
.js .head{transform:none}
.rise .hw{padding-bottom:.12em;margin-bottom:-.12em}
.js .rise{transform:none!important}
.js .rise .hw>span{transform:translateY(120%);transition:transform .9s cubic-bezier(.16,1,.3,1)}
.js .rise.in-rise .hw>span{transform:none}
/* 3D word flip-up heading */
.flip{perspective:700px}
.js .flip{transform:none!important}
.js .flip .hw{overflow:visible;padding:0;margin:0;transform-style:preserve-3d}
.js .flip .hw>span{opacity:0;transform:translate3d(0,42px,70px) rotateX(88deg);transform-origin:50% 100%;transition:transform 1s cubic-bezier(.16,1,.3,1),opacity .9s}
.js .flip.in-rise .hw>span{opacity:1;transform:none}
/* scroll-scrub targets */
[data-scrub]{will-change:transform,opacity}
[data-scrub="media"]{overflow:hidden}
[data-scrub="media"] img{will-change:transform;transform-origin:center}

/* 17. Responsive */

@media (max-width:1000px){.grid4{grid-template-columns:repeat(2,1fr)}}
/* hero: no pin / no video scrub on small screens or touch devices (poster + rotating word instead) */
@media (max-width:900px),(pointer:coarse){
  .hseq{height:auto}
  .hseq-pin{position:relative;height:100vh;height:100svh;min-height:560px}
}
@media (max-width:900px){
  
  
  .two{grid-template-columns:1fr;gap:40px}
  .deal{height:auto!important}
  .deal-pin{position:static}
  .deal-big{display:none}
  .js .deal-grid .card{opacity:1!important;transform:none!important}
  .vsplit{height:auto!important;padding:80px 0}
  .vsplit-pin{position:static;height:auto;overflow:visible}
  .vsplit-stage{display:flex;flex-direction:column;align-items:center;gap:18px;height:auto}
  .vsplit-t{position:static;transform:none!important;font-size:clamp(40px,12vw,72px)}
  .vsplit-media{position:static;transform:none;width:min(92vw,560px)!important;height:auto!important;aspect-ratio:16/9;border-radius:16px!important}
  .vsplit-media img,.vsplit-media video{transform:none!important}
}

@media (max-width:760px){
  /* carousel becomes a single card in normal flow */
  .chain{height:auto;margin-top:30px}
  .chain-card{position:relative;top:auto;left:auto;transform:none!important;width:calc(100% - 32px)!important;height:auto!important;opacity:1!important;z-index:1!important;display:none;margin:16px auto;cursor:default}
  .chain-card.is-active{display:block}
  .cc-box{position:relative;inset:auto;clip-path:none!important;border-radius:24px;padding:14px}
  .cc-media,.chain-card.is-active .cc-media{position:relative;left:auto;top:auto;width:auto;height:200px;border-radius:16px;transform:none!important}
  .cc-media img{transform:none!important}
  .cc-body{position:relative;top:auto;left:auto;right:auto;bottom:auto;opacity:1;visibility:visible;pointer-events:auto;padding:22px 16px 8px}
  .chain-dots{position:relative;left:auto;transform:none;bottom:auto;margin:4px auto 18px;width:max-content}
}
@media (max-width:700px){
  .hseq-chips{flex-direction:column;align-items:stretch}
  .hchip{height:64px;padding:10px 6px 10px 16px}
  .hchip .logos{display:none}
  .hchip .th{flex:0 1 64px;min-width:0}   /* the three thumbnails shrink so the arrow always fits on narrow phones */
  .hchip .harw{margin-left:auto}          /* arrow on the right end of the full-width chip */
}
@media (max-width:420px){
  .hchip .th+.th+.th{display:none}        /* small phones: two thumbnails, so neither gets squeezed */
}
@media (max-width:600px){
  
  
  
  
  
  
  
  .hseq-copy h1{font-size:clamp(32px,10vw,42px)} /* keeps the longest rotating word ("Super Duplex Steel") on one line down to 320px */
}
@media (max-width:560px){.stats{grid-template-columns:1fr}}
@media (max-width:520px){.grid4{grid-template-columns:1fr}}

/* 18. Reduced motion */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .js:where(.rv-on) .rv{opacity:1!important;transform:none!important;transition:none}
  .hw>span,.js .rise .hw>span,.js .flip .hw>span{opacity:1!important;transform:none!important;transition:none}
  [data-scrub]{transform:none!important;opacity:1!important}
  .xh-dd.mega.open .xh-mega{animation:none}
  .hseq{height:auto}
  .hseq-pin{position:relative}
  .hseq-copy .rot span{transition:none}
  .hseq-vid{transition:none!important}
  .chain-card,.cc-box,.cc-media,.cc-media img,.cc-body,.cc-logo{transition:none}
  .deal{height:auto!important}
  .deal-pin{position:static}
  .deal-big{display:none}
  .js .deal-grid .card{opacity:1!important;transform:none!important}
  .vsplit{height:auto!important;padding:80px 0}
  .vsplit-pin{position:static;height:auto}
  .vsplit-stage{display:flex;flex-direction:column;align-items:center;gap:18px;height:auto}
  .vsplit-t{position:static;transform:none!important}
  .vsplit-media{position:static;transform:none;width:min(92vw,900px)!important;height:auto!important;aspect-ratio:2/1;border-radius:16px!important}
  .vsplit-media img,.vsplit-media video{transform:none!important}
}

/* ============================================================
   CERTIFICATES (light "blueprint" band; tokens re-scoped so it reads on white)
   Copy column is sticky; the 4 certificates start as a fanned stack and spread
   into a 2x2 grid as you scroll (JS sets --p 0..1 per card, CSS does the pose).
   Hover: 3D tilt + pointer glare + sheen sweep. Click: native <dialog> lightbox.
   ============================================================ */
.sect{padding:50px 0;position:relative}
.cert{background:#fff;position:relative;overflow:clip;color:#1c2733;
  --navy:#002347;--navy-2:#003166;--blue:var(--brand);
  --ink:#002347;--mute:#4a5568;--line:rgba(0,35,71,.14);
  --f-display:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;--ease:cubic-bezier(.22,1,.36,1)}
/* background: blueprint grid (masked so it fades at the edges) + soft blue glow + outlined watermark */
.cert-bg{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.cert-bg::before{content:"";position:absolute;inset:0;
  background-image:linear-gradient(rgba(0,35,71,.075) 1px,transparent 1px),linear-gradient(90deg,rgba(0,35,71,.075) 1px,transparent 1px);
  background-size:44px 44px;
  -webkit-mask-image:radial-gradient(ellipse 72% 85% at 70% 45%,#000 15%,transparent 76%);
  mask-image:radial-gradient(ellipse 72% 85% at 70% 45%,#000 15%,transparent 76%)}
.cert-glow{position:absolute;right:-6%;top:6%;width:680px;height:680px;border-radius:50%;
  background:radial-gradient(circle,rgba(0,70,144,.17),rgba(0,70,144,0) 66%)}
.cert-wm{position:absolute;left:50%;bottom:-.06em;transform:translateX(-50%);font-family:var(--f-display);font-weight:800;line-height:1;
  font-size:clamp(110px,18vw,200px);text-transform:uppercase;white-space:nowrap;
  color:transparent;-webkit-text-stroke:1.5px rgba(0,35,71,.15);user-select:none;will-change:transform}

.cert__grid{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.12fr);gap:clamp(36px,5vw,84px);align-items:start}
.cert__copy{position:sticky;top:104px}
/* pinned mode: JS adds .pinned on wide desktops when the copy and the (shrunken) 2x2 deck fit one viewport.
   The section then holds for ~1000px of scroll: the stack is seen first and expands after a little scrolling. */
.cert-pin{position:static}
.cert.pinned{padding:0}
.cert.pinned .cert-pin{position:sticky;top:0;height:100vh;height:100svh;display:flex;align-items:flex-start;padding:96px 0 28px}
.cert.pinned .wrap{width:100%}
.cert.pinned .cert__grid{align-items:start}
.cert.pinned .cert__copy{position:static}
.cert.pinned .cert-facts{grid-template-columns:1fr 1fr;gap:10px;margin-top:22px}
.cert.pinned .cert-facts li{padding:11px 13px}
.cert.pinned .cert-facts span{font-size:12.5px}
.cert.pinned .btn{margin-top:22px}
.cert.pinned .cert-deck{width:var(--deck-w,100%);justify-self:center}
.cert.pinned .ccard__meta{padding:10px 4px 10px}
.cert.pinned .ccard__meta b{min-width:0;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cert.pinned .ccard__meta small{min-width:0;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cert.pinned .ccard__zoom{width:28px;height:28px;font-size:13px}
.cert.pinned .cert-wm{font-size:clamp(90px,14vw,260px)}
@media (max-height:820px){.cert.pinned .ccard__zoom{display:none}}
.cert .kick{color:var(--blue)}
.cert-h{margin:0;font-size:var(--h2);line-height:var(--h2-lh);letter-spacing:-.03em;color:var(--navy)}

.cert .lede{margin:24px 0 0;font-size:var(--fs-lead);line-height:var(--lh-lead);color:#292e34;max-width:44em}
.cert .lede+.lede{margin-top:12px}

/* fact chips */
.cert-facts{list-style:none;margin:28px 0 0;padding:0;display:grid;gap:12px}
.cert-facts li{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;
  background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  transition:transform .4s var(--ease),border-color .3s,box-shadow .4s var(--ease)}
.cert-facts li:hover{border-color:rgba(0,70,144,.45);box-shadow:0 14px 32px rgba(0,35,71,.10)}
.cert-facts b{display:block;font-family:var(--f-display);font-weight:700;font-size:15px;color:var(--navy);letter-spacing:-.01em;line-height:1.3}
.cert-facts span{display:block;font-size:13.5px;color:var(--mute);line-height:1.5;margin-top:3px}
.cert-tick{flex:none;width:26px;height:26px;padding:6px;border-radius:50%;background:var(--blue);color:#fff;box-shadow:0 6px 16px rgba(0,70,144,.35)}
.js:where(.rv-on) .cert-facts li.rv{transform:translateX(-24px)}
.js:where(.rv-on) .cert-facts li.rv.in{transform:none}
.js:where(.rv-on) .cert-facts li.rv.in:hover,.cert-facts li:hover{transform:translateX(6px)}
.cert .btn{margin-top:30px}

/* deck: 2x2 grid; --p is the fan-out progress (1 = at rest). Fan pose = every card pulled to the top-centre of the deck */
.cert-deck{--g:clamp(18px,2.2vw,30px);--st:36px;position:relative;z-index:1;display:grid;grid-template-columns:1fr 1fr;gap:var(--g);padding-top:14px;perspective:1400px}
.ccard{--p:1;--fx:0px;--fy:0px;--fr:0deg;--rr:0deg;position:relative;will-change:transform;
  transform:translate(calc(var(--fx) * (1 - var(--p))),calc(var(--fy) * (1 - var(--p)))) rotate(calc(var(--fr) * (1 - var(--p)) + var(--rr) * var(--p))) scale(calc(.9 + .1 * var(--p)))}
.ccard:nth-child(even){margin-top:var(--st)}
.cert-deck .ccard:nth-child(1){--fx:calc(50% + var(--g) / 2);--fr:-9deg;--rr:-1.6deg}
.cert-deck .ccard:nth-child(2){--fx:calc(-50% - var(--g) / 2);--fy:calc(-1 * var(--st));--fr:-3deg;--rr:1.4deg}
.cert-deck .ccard:nth-child(3){--fx:calc(50% + var(--g) / 2);--fy:calc(-100% - var(--g));--fr:4deg;--rr:1.2deg}
.cert-deck .ccard:nth-child(4){--fx:calc(-50% - var(--g) / 2);--fy:calc(-100% - var(--g) - var(--st));--fr:10deg;--rr:-1.8deg}

.ccard__btn{display:block;width:100%;margin:0;padding:10px 10px 0;border:1px solid var(--line);border-radius:16px;background:#fff;color:inherit;font:inherit;text-align:left;cursor:pointer;
  box-shadow:0 18px 44px rgba(0,35,71,.12),0 2px 6px rgba(0,35,71,.06);transform-style:preserve-3d;will-change:transform;
  transition:transform .3s var(--ease),box-shadow .4s var(--ease),border-color .3s}
.ccard__btn:hover{box-shadow:0 36px 72px rgba(0,35,71,.20),0 4px 10px rgba(0,35,71,.08);border-color:rgba(0,70,144,.4)}
.ccard__btn:focus-visible{outline:3px solid var(--blue);outline-offset:4px}
.ccard__sheet{display:block;position:relative;aspect-ratio:3/4;border-radius:9px;overflow:hidden;background:linear-gradient(170deg,#F4F8FC,#E4EDF6);transform:translateZ(0)}
.ccard__sheet img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;transition:transform .7s var(--ease)}
.ccard__btn:hover .ccard__sheet img{transform:scale(1.045)}
/* pointer glare (JS sets --mx / --my on the button) */
.ccard__glare{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:0;transition:opacity .35s;mix-blend-mode:overlay;
  background:radial-gradient(360px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.6),rgba(255,255,255,0) 62%)}
.ccard__btn:hover .ccard__glare{opacity:1}
/* holographic sheen sweeps across the sheet on hover */
.ccard__sheet::after{content:"";position:absolute;inset:-40% -60%;z-index:1;pointer-events:none;mix-blend-mode:screen;
  background:linear-gradient(115deg,transparent 42%,rgba(255,255,255,.35) 48%,rgba(0,70,144,.24) 52%,rgba(255,255,255,.35) 56%,transparent 62%);
  transform:translateX(-70%);transition:transform 1.1s var(--ease)}
.ccard__btn:hover .ccard__sheet::after{transform:translateX(70%)}
/* small verified seal on the sheet */
.ccard__seal{position:absolute;left:12px;top:12px;z-index:3;width:30px;height:30px;padding:7px;border-radius:50%;background:var(--blue);color:#fff;display:block;
  box-shadow:0 6px 16px rgba(0,70,144,.45),0 0 0 4px rgba(255,255,255,.85)}
.ccard__seal svg{display:block;width:100%;height:100%}
.ccard__btn:hover .ccard__seal{animation:cert-pulse 1.5s ease-out infinite}
@keyframes cert-pulse{0%{box-shadow:0 6px 16px rgba(0,70,144,.45),0 0 0 4px rgba(255,255,255,.85),0 0 0 0 rgba(0,70,144,.5)}100%{box-shadow:0 6px 16px rgba(0,70,144,.45),0 0 0 4px rgba(255,255,255,.85),0 0 0 18px rgba(0,70,144,0)}}
/* meta strip */
.ccard__meta{display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:10px;padding:12px 6px 12px;transition:transform .4s var(--ease)}
.ccard__btn:hover .ccard__meta{transform:translateZ(26px)}
.ccard__meta b{font-family:var(--f-display);font-weight:700;font-size:15px;color:var(--navy);letter-spacing:-.01em;line-height:1.2}
.ccard__meta small{grid-column:1;font-size:12.5px;color:var(--mute);line-height:1.35;margin-top:2px}
.ccard__zoom{grid-column:2;grid-row:1/3;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-size:15px;color:var(--navy);border:1px solid var(--line);
  transition:background .3s,border-color .3s,color .3s,transform .45s var(--ease)}
.ccard__btn:hover .ccard__zoom{background:var(--blue);border-color:var(--blue);color:#fff;transform:translate(2px,-2px)}

/* lightbox */
.cert-dlg{border:0;padding:0;margin:auto;background:transparent;width:100%;max-width:min(92vw,520px);max-height:none;overflow:visible;color:#1c2733}
.cert-dlg::backdrop{background:rgba(0,18,37,.72);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.cert-dlg[open]{animation:cert-dlg-in .45s var(--ease)}
.cert-dlg[open]::backdrop{animation:cert-fade .35s ease-out}
@keyframes cert-dlg-in{from{opacity:0;transform:translateY(26px) scale(.94)}to{opacity:1;transform:none}}
@keyframes cert-fade{from{opacity:0}to{opacity:1}}
.cert-dlg__fig{margin:0;padding:12px;background:#fff;border-radius:18px;box-shadow:0 40px 100px rgba(0,0,0,.5)}
.cert-dlg__fig img{display:block;width:100%;height:auto;max-height:calc(92vh - 110px);object-fit:contain;border-radius:10px;background:linear-gradient(170deg,#F4F8FC,#E4EDF6)}
.cert-dlg figcaption{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:14px 6px 4px;color:var(--navy)}
.cert-dlg figcaption b{font-family:var(--f-display);font-weight:700;font-size:16px}
.cert-dlg figcaption span{font-size:13px;color:var(--mute);text-align:right}
.cert-dlg__x{position:absolute;right:-14px;top:-14px;z-index:2;width:42px;height:42px;border:0;border-radius:50%;background:#fff;color:var(--navy);font-size:26px;line-height:1;cursor:pointer;
  display:grid;place-items:center;box-shadow:0 10px 26px rgba(0,0,0,.35);transition:transform .35s var(--ease),background .2s,color .2s}
.cert-dlg__x:hover{background:var(--blue);color:#fff;transform:rotate(90deg)}
html.dlg-open{overflow:hidden;scrollbar-gutter:stable}

@media (max-width:1100px){
  .cert__grid{grid-template-columns:1fr;gap:48px}
  .cert__copy{position:static}
  .cert-facts{grid-template-columns:1fr 1fr}
  .cert-deck{--g:16px;--st:28px;grid-template-columns:repeat(4,1fr)}
  /* 4-across: fan pose pulls every card to the row centre */
  .cert-deck .ccard:nth-child(1){--fx:calc(150% + var(--g) * 1.5);--fy:0px}
  .cert-deck .ccard:nth-child(2){--fx:calc(50% + var(--g) / 2);--fy:calc(-1 * var(--st))}
  .cert-deck .ccard:nth-child(3){--fx:calc(-50% - var(--g) / 2);--fy:0px}
  .cert-deck .ccard:nth-child(4){--fx:calc(-150% - var(--g) * 1.5);--fy:calc(-1 * var(--st))}
  .cert-wm{font-size:clamp(56px,16vw,220px)}
}
@media (max-width:820px){
  .cert-deck{--g:14px;--st:24px;grid-template-columns:1fr 1fr}
  .cert-facts{grid-template-columns:1fr}
}
@media (max-width:560px){
  .cert-deck{--g:12px;--st:18px}
  .ccard__btn{padding:7px 7px 0;border-radius:12px}
  .ccard__sheet{border-radius:7px}
  .ccard__seal{left:8px;top:8px;width:24px;height:24px;padding:5px}
  .ccard__meta{padding:9px 3px 9px;grid-template-columns:1fr}
  .ccard__meta b{font-size:13px}
  .ccard__meta small{font-size:11px}
  .ccard__zoom{display:none}
  .cert-dlg__x{right:-6px;top:-16px;width:38px;height:38px}
}
@media (prefers-reduced-motion:reduce){
  .ccard{transform:none!important}
  .cert-wm{transform:translateX(-50%)!important}
  .ccard__sheet::after{display:none}
  .ccard__btn:hover .ccard__seal{animation:none}
  .cert-dlg[open],.cert-dlg[open]::backdrop{animation:none}
  
}

/* ============================================================
   19. Header — Y-VISION expanding pill / mega menu
   Menu toggle | logo | CTA. The panel holds the main links row + the Products mega section.
   ============================================================ */
:root{
  --yv-font:"Manrope","Manrope Fallback",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --yv-ink:#000;--yv-paper:#fff;--yv-text-2:#2b2b2b;--yv-rule:#e4e4e4;--yv-soft:#f4f4f5;
  --yv-ease:cubic-bezier(.77,0,.18,1);        /* expand / collapse */
  --yv-ease-out:cubic-bezier(.16,1,.3,1);     /* content reveal */
  /* sizes in plain px — main.js reads these */
  --yv-hdr-top:16px;--yv-hdr-h:70px;--yv-gutter:64px;   /* gutter = both sides together (2 x --gutter), so the open panel meets the page wrap's edges */
  --yv-w-closed-max:520px;--yv-w-open-max:1216px;       /* open panel = the page wrap's content width (--wrap-max minus two gutters) */
  --yv-r-closed:32px;--yv-r-open:20px;
  --yv-bar-pl:26px;--yv-bar-pr:12px;--yv-bar-pr-open:40px;--yv-pad-x:40px;
}
@media (max-width:600px){:root{--yv-gutter:40px}}
html{scrollbar-gutter:stable}
html.yv-lock{overflow:hidden}
/* with the page locked, the body's own overflow-x:hidden would turn it into the scroll container and every
   pinned (sticky) section would let go: over the hero only its black background was left behind the menu */
html.yv-lock body,html.dlg-open body{overflow:visible}

/* backdrop: page blur while the menu is open */
.yv-backdrop{position:fixed;inset:0;z-index:999;background:rgba(0,0,0,.28);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  opacity:0;visibility:hidden;transition:opacity .7s var(--yv-ease) .1s,visibility 0s linear .8s}
.yv-backdrop.is-visible{opacity:1;visibility:visible;transition:opacity .6s var(--yv-ease),visibility 0s}

/* shell: pill -> panel */
.yv-header{position:fixed;z-index:1000;top:calc(var(--yv-hdr-top) + env(safe-area-inset-top,0px));
  left:50%;transform:translateX(-50%);
  width:var(--yv-w-closed,min(var(--yv-w-closed-max),calc(100% - var(--yv-gutter))));
  background:var(--yv-paper);color:var(--yv-ink);border-radius:80px;
  font-family:var(--yv-font);-webkit-font-smoothing:antialiased;
  box-shadow:0 10px 40px rgba(0,0,0,.25);
  /* closing: content hides first, then height, then width */
  transition:width .8s var(--yv-ease) .22s,border-radius .8s var(--yv-ease) .22s}
.yv-header.is-open{width:var(--yv-w-open,min(var(--yv-w-open-max),calc(100% - var(--yv-gutter))));
  border-radius:var(--yv-r-open);transition-delay:0s}

/* top bar */
.yv-bar{position:relative;display:flex;align-items:center;justify-content:space-between;gap:14px;
  height:var(--yv-hdr-h);padding:0 var(--yv-bar-pr) 0 var(--yv-bar-pl);transition:padding .8s var(--yv-ease) .22s}
.yv-header.is-open .yv-bar{padding-right:var(--yv-bar-pr-open);transition-delay:0s}
.yv-toggle{display:inline-flex;align-items:center;gap:12px;margin:0;padding:8px 4px 8px 0;border:0;background:none;
  color:inherit;font:600 13px/1 var(--yv-font);letter-spacing:.04em;text-transform:uppercase;cursor:pointer;position:relative;z-index:1}
.yv-burger{position:relative;width:18px;height:13px;flex:none}
.yv-burger span{position:absolute;left:0;width:100%;height:2px;border-radius:2px;background:currentColor;
  transition:top .35s var(--yv-ease) .25s,transform .35s var(--yv-ease),opacity .2s ease .2s}
.yv-burger span:nth-child(1){top:0}
.yv-burger span:nth-child(2){top:5.7px}
.yv-burger span:nth-child(3){top:11.4px}
.yv-header.is-open .yv-burger span{transition:top .35s var(--yv-ease),transform .35s var(--yv-ease) .25s,opacity .15s ease}
.yv-header.is-open .yv-burger span:nth-child(1){top:5.7px;transform:rotate(45deg)}
.yv-header.is-open .yv-burger span:nth-child(2){opacity:0}
.yv-header.is-open .yv-burger span:nth-child(3){top:5.7px;transform:rotate(-45deg)}
.yv-logo{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;line-height:0}
.yv-logo img{height:60px;width:auto;display:block}
.yv-cta{display:inline-flex;align-items:center;height:40px;padding:0 20px;border-radius:999px;background:#004690;color:var(--yv-paper);
  font-weight:600;font-size:13px;letter-spacing:-.01em;white-space:nowrap;position:relative;z-index:1;flex:none;transition:background-color .25s ease}
.yv-cta:hover{background:#002B5C}
/* phones: a round mail button (mailto) takes the place of "Get a Quote" */
.yv-mail{display:none;place-items:center;width:40px;height:40px;border-radius:50%;background:#004690;color:var(--yv-paper);flex:none;position:relative;z-index:1;transition:background-color .25s ease}
.yv-mail:hover{background:#002B5C}
.yv-mail svg{display:block}

/* mega panel: height animates via grid rows */
.yv-mega{display:grid;grid-template-rows:0fr;transition:grid-template-rows .7s var(--yv-ease) .1s}
.yv-header.is-open .yv-mega{grid-template-rows:1fr;transition-delay:.08s}
.yv-mega__clip{min-height:0;overflow:hidden;display:flex;justify-content:center}   /* content sits at final width; the panel reveals it */
.yv-mega__scroll{flex:none;width:var(--yv-w-open,min(var(--yv-w-open-max),calc(100vw - var(--yv-gutter))));
  max-height:calc(100vh - var(--yv-hdr-top) * 2 - var(--yv-hdr-h) - env(safe-area-inset-top,0px));
  max-height:calc(100dvh - var(--yv-hdr-top) * 2 - var(--yv-hdr-h) - env(safe-area-inset-top,0px));
  overflow-y:auto;overscroll-behavior:contain;padding:26px var(--yv-pad-x) 36px}

/* staggered reveal */
.yv-reveal{opacity:0;transform:translate3d(0,14px,0);transition:opacity .2s ease,transform .2s ease}
.yv-header.is-open .yv-reveal{opacity:1;transform:none;
  transition:opacity .6s var(--yv-ease-out) calc(.34s + var(--i,0) * .035s),transform .9s var(--yv-ease-out) calc(.34s + var(--i,0) * .035s)}

.yv-list{list-style:none;margin:0;padding:0}

/* main links row (Home · About Us · News · Contact Us) */
.yv-primary{display:flex;flex-wrap:wrap;gap:10px 28px;margin:0 0 28px;padding-bottom:22px;border-bottom:1px solid var(--yv-rule)}
.yv-primary a{color:inherit;background:linear-gradient(currentColor,currentColor) 0 100% / 0 1px no-repeat;transition:background-size .45s var(--yv-ease-out)}
.yv-primary a:hover{background-size:100% 1px}
.yv-primary a{font-size:15px;font-weight:600;letter-spacing: .02em;line-height:1.3; text-transform: uppercase;}

/* mega grid: 3 columns — pipes | tubes (list flows over 2 columns) */
.yv-mega__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:32px 40px;align-items:start}
.yv-group--tubes{grid-column:span 2}
/* column header card (links to the pipes / tubes overview page) */
.yv-phead{display:flex;align-items:center;gap:14px;margin-bottom:12px;padding:10px 12px 10px 10px;border-radius:16px;background:var(--yv-soft);color:inherit;transition:background-color .3s}
.yv-phead:hover{background:#ebecef}
.yv-phead__pic{flex:none;width:56px;height:56px;border-radius:14px;background:rgba(0,70,144,.08);color:#004690;display:grid;place-items:center;transition:background-color .3s,color .3s}
.yv-phead__pic svg{width:36px;height:36px;display:block;transition:transform .8s var(--yv-ease-out)}
.yv-phead:hover .yv-phead__pic{background:#004690;color:#fff}
.yv-phead:hover .yv-phead__pic svg{transform:scale(1.08) rotate(-4deg)}
.yv-phead__t{display:flex;flex-direction:column;gap:3px;min-width:0}
.yv-phead__k{font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--yv-text-2)}
.yv-phead__title{font-size:19px;font-weight:600;letter-spacing:-.02em;line-height:1.2}
.yv-phead__go{margin-left:auto;flex:none;width:30px;height:30px;border-radius:50%;background:#004690;color:var(--yv-paper);display:grid;place-items:center;font-style:normal;font-size:14px;transition:transform .35s var(--yv-ease-out)}
.yv-phead:hover .yv-phead__go{transform:translateX(4px)}
/* product list (multi-column where the section spans 2 grid columns) */
.yv-plist li{break-inside:avoid}
.yv-group--tubes .yv-plist{columns:2;column-gap:40px}
.yv-plist a{display:flex;align-items:center;gap:9px;padding:6.5px 0;font-size:15px;font-weight:500;line-height:1.35;color:var(--yv-text-2);transition:color .2s,padding-left .3s var(--yv-ease-out)}
.yv-plist a::before{content:"›";flex:none;font-size:20px;font-weight:600;line-height:1;margin-top:-2px;color:#004690;opacity:.85;transition:opacity .2s,transform .3s var(--yv-ease-out)}
.yv-plist a:hover{color:var(--yv-ink);padding-left:4px}
.yv-plist a:hover::before{opacity:1;transform:translateX(3px)}

/* footer row */
.yv-foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px;margin-top:34px;padding-top:22px;
  border-top:1px solid var(--yv-rule);font-size:15px;line-height:1.5;color:var(--yv-text-2)}
.yv-contact{display:flex;flex-wrap:wrap;gap:8px 22px}
.yv-contact a,.yv-contact span{display:inline-flex;align-items:center;gap:9px;color:inherit;white-space:nowrap;transition:color .2s}
.yv-contact a:hover{color:var(--yv-ink)}
.yv-ico{flex:none;width:30px;height:30px;border-radius:50%;background:var(--yv-soft);color:#004690;display:grid;place-items:center;transition:background-color .25s,color .25s}
.yv-ico svg{width:15px;height:15px}
.yv-contact a:hover .yv-ico{background:#004690;color:#fff}
/* social icons (round, fill with the brand colour on hover) */
.yv-social{display:flex;gap:10px}
.yv-social a{width:38px;height:38px;border-radius:50%;border:1px solid var(--yv-rule);display:grid;place-items:center;color:var(--yv-ink);transition:background-color .25s,border-color .25s,color .25s,transform .35s var(--yv-ease-out)}
.yv-social a:hover{background:#004690;border-color:#004690;color:#fff;transform:translateY(-2px)}
.yv-social svg{width:16px;height:16px}

/* focus */
.yv-header a:focus-visible,.yv-header button:focus-visible{outline:2px solid var(--yv-ink);outline-offset:4px;border-radius:4px}
.yv-header .yv-cta:focus-visible,.yv-header .yv-mail:focus-visible{border-radius:999px;outline-offset:3px}

/* no animation while resizing */
.yv-no-anim,.yv-no-anim *{transition:none!important}

@media (max-width:1100px){
  :root{--yv-gutter:32px;--yv-pad-x:32px;--yv-bar-pr-open:32px}
  .yv-mega__grid{grid-template-columns:1fr;gap:26px}
  .yv-group--tubes{grid-column:auto}
  .yv-plist,.yv-group--tubes .yv-plist{columns:2;column-gap:36px}
}
@media (max-width:640px){
  :root{--yv-hdr-top:10px;--yv-hdr-h:54px;--yv-gutter:20px;--yv-r-closed:28px;--yv-r-open:20px;
    --yv-bar-pl:20px;--yv-bar-pr:8px;--yv-bar-pr-open:8px;--yv-pad-x:20px}
  .yv-logo img{height:44px}
  .yv-mega__scroll{padding-top:20px;padding-bottom:26px}
  
  .yv-primary{flex-direction:column;gap:10px;margin-bottom:22px;padding-bottom:18px}
  .yv-plist,.yv-group--tubes .yv-plist{columns:1}
  .yv-phead__pic{width:48px;height:48px;border-radius:12px}
  .yv-phead__pic svg{width:30px;height:30px}
  .yv-phead__title{font-size:17px}
  .yv-plist a{padding:8px 0;font-size:15px}
  .yv-foot{flex-direction:column;align-items:flex-start;margin-top:28px;padding-top:18px}
  .yv-contact{flex-direction:column;gap:8px}
  .yv-cta{padding:0 16px;font-size:12.5px}
}
@media (max-width:560px){
  .yv-cta{display:none}
  .yv-mail{display:grid}
}
@media (prefers-reduced-motion:reduce){
  .yv-header,.yv-header *,.yv-backdrop{transition-duration:.01ms!important;transition-delay:0s!important}
}

/* ============================================================
   20. About — editorial split: word-rise heading + parallax image stack (two images
   move against each other on scroll, dashed orbit ring, spinning badge), a statement
   whose words fill in as you scroll, count-up stats strip, materials marquee band.
   (Vision / Mission / Values were removed.)
   ============================================================ */
.about{background:#f5f7fb;color:#1c2733;overflow:hidden;padding-bottom:0;
  --ab-navy:#002347;--ab-text:#292e34;--ab-mute:#6b7683;--ab-line:rgba(0,35,71,.12);
  --ab-blue:var(--brand);--ab-ease:cubic-bezier(.16,1,.3,1);--ab-pop:cubic-bezier(.34,1.5,.5,1);--ab-r:26px}
/* faint dot grid, fading out towards the edges */
.about::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:radial-gradient(rgba(0,35,71,.14) 1px,transparent 1.5px);background-size:24px 24px;
  -webkit-mask-image:radial-gradient(70% 60% at 50% 40%,#000 25%,transparent 100%);mask-image:radial-gradient(70% 60% at 50% 40%,#000 25%,transparent 100%)}

@keyframes ab-drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(70px,50px,0) scale(1.18)}}

/* 1. top row: intro + visual */

/* inline photo chip inside the headline: pops in after the words have risen */

/* highlighted phrase with a hand-drawn underline that draws itself */

/* 2. visual: two images wipe in, then drift against each other on scroll (JS writes transforms) */
.ab-visual{position:relative;width:100%;max-width:560px;aspect-ratio:1/1;margin-left:auto}
.js:where(.rv-on) .ab-visual.rv{opacity:1;transform:none;transition:none}

.ab-img-1{left:8%;top:0;width:92%;height:72%;clip-path:inset(0 100% 0 0 round var(--ab-r));transition:clip-path 1.2s var(--ab-ease) .1s}
.ab-img-1::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(0,35,71,0) 55%,rgba(0,35,71,.42))}
.ab-img-2{left:0;bottom:0;width:46%;aspect-ratio:1/1;border:6px solid #f5f7fb;clip-path:inset(100% 0 0 0 round var(--ab-r));transition:clip-path 1s var(--ab-ease) .6s}
.ab-visual.in .ab-img-1,.ab-visual.in .ab-img-2{clip-path:inset(0 0 0 0 round var(--ab-r))}

.ab-badge{position:absolute;right:-5%;top:-7%;z-index:3;will-change:transform}

/* 3. statement: JS splits it into .ab-w words (--i) and writes --p 0..1 while it scrolls in */

.ab-w{opacity:clamp(.14,calc((var(--p,1) * (var(--n,1) + 2) - var(--i,0)) / 2 + .14),1);transition:opacity .12s linear}

/* 4. stats strip: count-up numbers (data-count), top line draws on reveal, pointer spotlight (--mx / --my) */

.ab-stat{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:20px;padding:26px 24px 24px;border-radius:20px;background:#fff;border:1px solid var(--ab-line);box-shadow:0 10px 30px rgba(0,35,71,.05)}
.ab-stat::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:0;transition:opacity .45s;
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(0,70,144,.16),transparent 62%)}
.ab-stat:hover::before{opacity:1}
.ab-stat::after{content:"";position:absolute;left:0;top:0;z-index:2;height:3px;width:0;background:var(--ab-blue);transition:width 1.1s var(--ab-ease) .25s}
.ab-stat.in::after{width:100%}
.ab-stat>*{position:relative;z-index:1}
.js:where(.rv-on) .ab-stat.rv.in{transition:transform .45s var(--ab-ease),box-shadow .45s var(--ab-ease),border-color .3s}
.ab-stat:hover,.js:where(.rv-on) .ab-stat.rv.in:hover{transform:translateY(-6px);box-shadow:0 26px 50px rgba(0,35,71,.12);border-color:rgba(0,70,144,.35)}

.ab-stat b{display:block;margin-top:auto;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:700;font-size:clamp(40px,4vw,58px);line-height:1;letter-spacing:-.035em;font-variant-numeric:tabular-nums;
  background:linear-gradient(90deg,var(--ab-navy) 0%,var(--ab-blue) 45%,var(--ab-navy) 90%);background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:ab-shine 5s linear infinite}

@keyframes ab-shine{to{background-position:-220% 0}}

/* 5. materials marquee band (whole band links to #grades; pauses on hover, CTA pill appears) */

@media (max-width:1000px){
  
  .ab-visual{margin:0 auto}
  
}
@media (max-width:640px){
  
  
  
  .ab-badge{right:-3%;top:-6%}
  
  
  .ab-stat{padding:18px 16px;gap:14px}
  .ab-stat b{font-size:34px}
  
}
@media (prefers-reduced-motion:reduce){
  .ab-stat b{animation:none}
  .ab-badge{transform:none!important;transition:none}
  
  
  
  .ab-w{opacity:1!important}
  
}

/* 19. About THAIDA — interactive facet showcase (JS section 8e). Four facets of the company: the active tab drives
   the copy on the left (line-by-line reveal) and the photo card on the right (circular wipe + slow zoom). Tabs
   autoplay with a progress bar and pause on hover / focus; the card tilts and the chips drift with the mouse.
   Everything is prefixed .abt and the tokens --abt- (all colours are tints/shades of the brand #004690). */
.abt{
  --abt-navy:#001f3f;--abt-ink:#002347;--abt-blue:#004690;--abt-blue-2:#1a63b8;--abt-tint:#3396ff;
  --abt-text:#292e34;--abt-muted:#5b6b82;--abt-line:rgba(0,70,144,.12);
  --abt-dur:6s;                                   /* autoplay time per facet (JS reads it too) */
  --abt-cw:clamp(280px,min(30vw,54vh),460px);     /* photo card width (also limited by screen height); height follows the 6:7 photo */
  --abt-ease:cubic-bezier(.2,.8,.2,1);
  --p:.25;                                        /* progress around the ring (set by JS: 1/4 … 4/4) */
  position:relative;isolation:isolate;overflow:hidden;
  padding:clamp(92px,11vh,124px) 0 clamp(64px,8vh,110px);
  background:linear-gradient(180deg,#f3f6fb 0%,#f8fafd 55%,#fff 100%);
  color:var(--abt-text);font-family:"Manrope","Manrope Fallback",sans-serif;-webkit-font-smoothing:antialiased}

/* ambient background */
.abt__bg{position:absolute;inset:0;z-index:-2;pointer-events:none;
  background-image:linear-gradient(rgba(0,70,144,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(0,70,144,.05) 1px,transparent 1px);
  background-size:64px 64px;
  -webkit-mask-image:radial-gradient(ellipse 70% 70% at 60% 45%,#000 20%,transparent 75%);mask-image:radial-gradient(ellipse 70% 70% at 60% 45%,#000 20%,transparent 75%)}
.abt__glow{position:absolute;border-radius:50%;filter:blur(70px);opacity:.55}
.abt__glow--a{width:46vw;height:46vw;max-width:680px;max-height:680px;right:-8vw;top:-12vw;background:radial-gradient(circle,rgba(51,150,255,.45),rgba(51,150,255,0) 70%);animation:abt-drift 18s ease-in-out infinite alternate}
.abt__glow--b{width:34vw;height:34vw;max-width:520px;max-height:520px;left:-10vw;bottom:-14vw;background:radial-gradient(circle,rgba(0,70,144,.28),rgba(0,70,144,0) 70%);animation:abt-drift 22s ease-in-out infinite alternate-reverse}
@keyframes abt-drift{to{transform:translate3d(-6vw,5vw,0) scale(1.12)}}

/* big outlined facet number behind the copy */
.abt__bignum{position:absolute;z-index:-1;left:clamp(8px,2vw,40px);top:clamp(40px,7vh,90px);display:grid;pointer-events:none;
  font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:800;font-size:clamp(150px,20vw,320px);line-height:1;letter-spacing:-.06em;
  color:transparent;-webkit-text-stroke:1.5px rgba(0,70,144,.10)}
.abt__bignum span{grid-area:1/1;opacity:0;transform:translateY(24%);transition:opacity .6s ease,transform .9s var(--abt-ease)}
.abt__bignum span.is-active{opacity:1;transform:none}
.abt__bignum span.is-leaving{opacity:0;transform:translateY(-24%)}

.abt__wrap{position:relative;max-width:var(--wrap-max);margin:0 auto;padding:0 var(--gutter);
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(40px,6vw,96px);align-items:center}

/* ---- left: copy ---- */
.abt__content{position:relative;z-index:1;max-width:600px}
.abt__eyebrow{display:inline-flex;align-items:center;gap:14px;margin:0 0 26px;font-size:13.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--abt-blue)}
.abt__eyebrow i{width:44px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--abt-blue),var(--abt-tint));transform-origin:left;transition:transform .9s var(--abt-ease) .1s}

.abt__panels{display:grid}
.abt__panel{grid-area:1/1;visibility:hidden;pointer-events:none;transition:visibility 0s linear .7s}
.abt__panel.is-active{visibility:visible;pointer-events:auto;transition:none}
.abt__panel.is-leaving{visibility:visible}

.abt__title{margin:0 0 24px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:var(--h2);line-height:var(--h2-lh);font-weight:700;letter-spacing:-.025em;color:var(--abt-navy)}
.abt__title em{font-style:normal;background:linear-gradient(95deg,var(--abt-blue) 0%,var(--abt-tint) 55%,var(--abt-blue) 100%);background-size:200% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:abt-sheen 6s linear infinite}
@keyframes abt-sheen{to{background-position:-200% 0}}
/* the Industries, Certificates and Testimonials headings share the About title's look: navy, tight Plus Jakarta Sans,
   highlighted words in the moving blue gradient. Split headings (word-rise) carry the gradient on each word. */
.tdd-title,.cert-h,.tsec .head h2{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-weight:700;line-height:var(--h2-lh);letter-spacing:-.025em;color:#001f3f}
.tdd-title em,.cert-h em,.tsec .head h2 em{font-style:normal}
.tdd-title em,.cert-h em .hw>span,.tsec .head h2 em .hw>span,html:not(.js) .cert-h em,html:not(.js) .tsec .head h2 em{
  background:linear-gradient(95deg,#004690 0%,#3396ff 55%,#004690 100%);background-size:200% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:abt-sheen 6s linear infinite}
@media (prefers-reduced-motion:reduce){.tdd-title em,.cert-h em .hw>span,.tsec .head h2 em .hw>span{animation:none}}
/* each title line rises out of its own mask */
.abt__ln{display:block;overflow:hidden;padding-bottom:.1em;margin-bottom:-.1em}
.abt__ln>span{display:inline-block;transform:translate3d(0,110%,0);transition:transform .95s var(--abt-ease)}
.abt__ln:nth-child(2)>span{transition-delay:.09s}
.abt__panel.is-active .abt__ln>span{transform:none;transition-delay:.32s}
.abt__panel.is-active .abt__ln:nth-child(2)>span{transition-delay:.41s}
.abt__panel.is-leaving .abt__ln>span{transform:translate3d(0,-110%,0);transition:transform .5s cubic-bezier(.7,0,.84,0)}
.abt__panel.is-leaving .abt__ln:nth-child(2)>span{transition-delay:.04s}

.abt__text{margin:0 0 clamp(24px,4vh,34px);font-size:var(--fs-lead);line-height:var(--lh-lead);font-weight:400;color:var(--abt-text);
  opacity:0;transform:translate3d(0,18px,0);filter:blur(6px);transition:opacity .7s ease .45s,transform .9s var(--abt-ease) .45s,filter .7s ease .45s}
.abt__btn{position:relative;display:inline-flex;align-items:center;gap:16px;padding:14px 16px 14px 30px;border-radius:999px;overflow:hidden;isolation:isolate;
  background:linear-gradient(180deg,var(--abt-blue-2) 0%,var(--abt-blue) 100%);color:#fff;
  font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;
  box-shadow:0 10px 24px rgba(0,70,144,.28);
  opacity:0;transform:translate3d(0,18px,0);transition:opacity .6s ease .55s,transform .9s var(--abt-ease) .55s,box-shadow .3s}
.abt__btn::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,#2b7bd6,#0a55a8);transform:translateX(-101%);transition:transform .5s var(--abt-ease)}
.abt__btn:hover::before{transform:none}
.abt__btn:hover{box-shadow:0 16px 34px rgba(0,70,144,.4)}
.abt__btn-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#fff;color:var(--abt-blue);flex:none;transition:transform .4s var(--abt-ease)}
.abt__btn-icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.abt__btn:hover .abt__btn-icon{transform:rotate(-45deg)}
.abt__btn:focus-visible{outline:3px solid rgba(51,150,255,.55);outline-offset:3px}
.abt__panel.is-active .abt__text{opacity:1;transform:none;filter:none}
.abt__panel.is-active .abt__btn{opacity:1;transform:translate3d(var(--bx,0px),var(--by,0px),0)}
.abt__panel.is-active .abt__btn.is-magnet{transition:opacity .6s ease,transform .25s ease-out,box-shadow .3s}
.abt__panel.is-leaving .abt__text,.abt__panel.is-leaving .abt__btn{opacity:0;transform:translate3d(0,-10px,0);transition:opacity .3s ease,transform .45s ease}

/* ---- left: tabs ---- */
.abt__tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:clamp(28px,5vh,48px)}
.abt__tab{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:12px;padding:20px 14px 16px;margin:0;
  border:1px solid var(--abt-line);border-radius:18px;background:rgba(255,255,255,.55);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  font:inherit;color:var(--abt-navy);text-align:left;cursor:pointer;
  transition:transform .45s var(--abt-ease),background .3s,box-shadow .45s,border-color .3s,opacity .6s ease,translate .9s var(--abt-ease)}
.abt__tab:hover{transform:translateY(-4px);background:#fff;box-shadow:0 14px 30px rgba(0,31,63,.10)}
.abt__tab:focus-visible{outline:3px solid rgba(51,150,255,.55);outline-offset:2px}
.abt__tab.is-active{background:#fff;border-color:rgba(0,70,144,.28);box-shadow:0 18px 40px rgba(0,31,63,.14)}
.abt__tab-bar{position:absolute;left:14px;right:14px;top:9px;height:3px;border-radius:3px;background:var(--abt-line);overflow:hidden}
.abt__tab-bar i{position:absolute;inset:0;background:linear-gradient(90deg,var(--abt-blue),var(--abt-tint));transform:scaleX(0);transform-origin:left}
.abt__tab.is-active .abt__tab-bar i{animation:abt-prog var(--abt-dur) linear forwards}
.abt:not(.is-playing) .abt__tab.is-active .abt__tab-bar i{animation-play-state:paused}
.abt.is-static .abt__tab.is-active .abt__tab-bar i{animation:none;transform:none}
@keyframes abt-prog{to{transform:none}}
.abt__tab-ico{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:#eaf1fb;color:var(--abt-blue);transition:background .4s,color .4s,transform .5s var(--abt-ease)}
.abt__tab-ico svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.abt__tab:hover .abt__tab-ico{transform:rotate(-6deg) scale(1.06)}
.abt__tab.is-active .abt__tab-ico{background:linear-gradient(150deg,var(--abt-tint),var(--abt-blue));color:#fff;box-shadow:0 8px 18px rgba(0,70,144,.35)}
.abt__tab-txt{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:14px;line-height:1.25;font-weight:700}
.abt__tab-txt small{display:block;margin-bottom:3px;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11px;font-weight:700;letter-spacing:.14em;color:var(--abt-muted)}
.abt__tab.is-active .abt__tab-txt small{color:var(--abt-tint)}

/* ---- right: visual ---- */
.abt__visual{position:relative;display:grid;place-items:center;min-height:calc(var(--abt-cw) * 7 / 6 + 80px);--rx:0deg;--ry:0deg;--mx:0;--my:0;--sx:50%;--sy:30%}
.abt__ring{position:absolute;left:50%;top:50%;width:calc(var(--abt-cw) * 1.62);height:auto;transform:translate(-50%,-50%);overflow:visible;z-index:0}
.abt__ring circle{fill:none}
.abt__ring-track{stroke:rgba(0,70,144,.10);stroke-width:2}
.abt__ring-arc{stroke:var(--abt-blue);stroke-width:4;stroke-linecap:round;stroke-dasharray:100 100;stroke-dashoffset:calc(100 - var(--p) * 100);
  transform:rotate(-90deg);transform-origin:300px 300px;transition:stroke-dashoffset 1.2s var(--abt-ease)}
.abt__ring-dash{stroke:rgba(0,70,144,.22);stroke-width:1.5;stroke-dasharray:2 10;transform-origin:300px 300px;animation:abt-spin 60s linear infinite}
.abt__ring-dot{fill:#fff;stroke:var(--abt-blue);stroke-width:4;transform-origin:300px 300px;transform:rotate(calc(var(--p) * 360deg));transition:transform 1.2s var(--abt-ease);filter:drop-shadow(0 0 8px rgba(51,150,255,.8))}
@keyframes abt-spin{to{transform:rotate(360deg)}}

.abt__card{position:relative;z-index:1;width:var(--abt-cw);aspect-ratio:6/7;border-radius:32px;overflow:hidden;background:#0b2340;
  box-shadow:0 40px 80px -20px rgba(0,31,63,.45),0 0 0 8px rgba(255,255,255,.7);
  transform:perspective(1100px) rotateX(var(--rx)) rotateY(var(--ry));transition:transform .2s ease-out,clip-path 1.2s var(--abt-ease)}
.abt__slide{position:absolute;inset:0;margin:0;z-index:0;clip-path:circle(0% at 14% 88%);transition:clip-path 1.15s cubic-bezier(.76,0,.24,1)}
.abt__slide img{display:block;width:100%;height:100%;object-fit:cover;transform:scale(1.2);transition:transform 1.8s var(--abt-ease),filter 1.2s ease}
.abt__slide.is-active{z-index:2;clip-path:circle(150% at 14% 88%)}
.abt__slide.is-active img{transform:scale(1.02)}
.abt__slide.is-prev{z-index:1;clip-path:circle(150% at 14% 88%);transition:none}
.abt__slide.is-prev img{transform:scale(1.08);filter:brightness(.55)}
.abt__slide::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,20,45,0) 55%,rgba(0,20,45,.55) 100%);pointer-events:none}
.abt__cap{position:absolute;left:18px;bottom:18px;z-index:2;display:flex;align-items:center;gap:12px;padding:10px 18px 10px 10px;border-radius:999px;
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.35);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  color:#fff;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:14px;font-weight:700;letter-spacing:.02em;
  opacity:0;transform:translateY(16px);transition:opacity .5s ease,transform .7s var(--abt-ease)}
.abt__cap b{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#fff;color:var(--abt-blue);font-size:12px}
.abt__slide.is-active .abt__cap{opacity:1;transform:none;transition-delay:.55s}
/* light that follows the mouse + a sweep on every change */
.abt__shine{position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(circle 260px at var(--sx) var(--sy),rgba(255,255,255,.22),rgba(255,255,255,0) 70%)}
.abt__shine::after{content:"";position:absolute;inset:-20%;background:linear-gradient(105deg,transparent 40%,rgba(255,255,255,.35) 50%,transparent 60%);transform:translateX(-120%)}
.abt__card.is-swap .abt__shine::after{animation:abt-sweep 1.2s ease .25s}
@keyframes abt-sweep{to{transform:translateX(120%)}}

.abt__seal{position:absolute;z-index:3;right:calc(50% - var(--abt-cw) / 2 - 46px);top:calc(50% - var(--abt-cw) * 7 / 12 - 34px);
  width:118px;height:118px;border-radius:50%;background:#fff;box-shadow:0 18px 40px rgba(0,31,63,.2);
  translate:calc(var(--mx) * 10px) calc(var(--my) * 10px);transition:translate .3s ease-out,transform .6s var(--abt-ease),opacity .6s ease}
.abt__seal svg{position:absolute;inset:0;width:100%;height:100%;animation:abt-spin 18s linear infinite}
.abt__seal text{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:9px;font-weight:700;letter-spacing:.12em;fill:var(--abt-blue)}
.abt__seal-core{position:absolute;inset:0;margin:auto;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(150deg,var(--abt-tint),var(--abt-blue));color:#fff;transform:rotate(-45deg)}
.abt__seal-core svg{position:static;width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;animation:none}

.abt__chip{position:absolute;z-index:3;display:flex;align-items:center;gap:12px;padding:12px 18px 12px 12px;border-radius:18px;
  background:rgba(255,255,255,.88);border:1px solid rgba(255,255,255,.9);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  box-shadow:0 20px 44px rgba(0,31,63,.16);color:var(--abt-navy);white-space:nowrap;
  transition:translate .3s ease-out,opacity .7s ease,transform .9s var(--abt-ease)}
.abt__chip b{display:block;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:14px;font-weight:700}
.abt__chip small{display:block;margin-top:2px;font-size:12px;font-weight:600;color:var(--abt-muted)}
.abt__chip-ico{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:linear-gradient(150deg,var(--abt-tint),var(--abt-blue));color:#fff;flex:none}
.abt__chip-ico svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.abt__chip--a{left:calc(50% - var(--abt-cw) / 2 - 70px);top:calc(50% - var(--abt-cw) * 7 / 24);animation:abt-bob 6s ease-in-out infinite}
.abt__chip--b{right:calc(50% - var(--abt-cw) / 2 - 60px);bottom:calc(50% - var(--abt-cw) * 7 / 12 + 40px);animation:abt-bob 7s ease-in-out -2s infinite}
@keyframes abt-bob{50%{margin-top:-10px}}

/* ---- entrance (only when JS is running; without JS everything is simply shown) ---- */
.abt.abt--js:not(.is-in) .abt__eyebrow i{transform:scaleX(0)}
.abt.abt--js:not(.is-in) .abt__eyebrow{opacity:0}
.abt__eyebrow{transition:opacity .6s ease}
.abt.abt--js:not(.is-in) .abt__panel.is-active .abt__ln>span{transform:translate3d(0,110%,0)}
.abt.abt--js:not(.is-in) .abt__panel.is-active .abt__text,.abt.abt--js:not(.is-in) .abt__panel.is-active .abt__btn{opacity:0;transform:translate3d(0,18px,0)}
.abt.abt--js:not(.is-in) .abt__tab{opacity:0;translate:0 30px}
.abt.abt--js .abt__tab{transition-delay:0s,0s,0s,0s,calc(.45s + var(--i) * .08s),calc(.45s + var(--i) * .08s)}
.abt.abt--js.is-in .abt__tab:hover{transition-delay:0s}
.abt.abt--js:not(.is-in) .abt__card{clip-path:inset(100% 0 0 0 round 32px)}
.abt.abt--js.is-in .abt__card{clip-path:inset(0 0 0 0 round 32px)}
.abt.abt--js:not(.is-in) .abt__ring-arc{stroke-dashoffset:100}
.abt.abt--js:not(.is-in) .abt__seal{opacity:0;transform:scale(.4) rotate(-90deg)}
.abt.abt--js .abt__seal{transition-delay:0s,.7s,.7s}
.abt.abt--js:not(.is-in) .abt__chip{opacity:0;transform:translateY(30px) scale(.9)}
.abt.abt--js .abt__chip--a{transition-delay:0s,.9s,.9s}
.abt.abt--js .abt__chip--b{transition-delay:0s,1.05s,1.05s}
.abt.abt--js:not(.is-in) .abt__bignum{opacity:0}
.abt__bignum{transition:opacity 1s ease .3s}

@media (max-width:1180px){
  .abt{--abt-cw:clamp(280px,33vw,420px)}
  .abt__tabs{gap:10px}
  .abt__tab{padding:18px 12px 14px}
  .abt__tab-txt{font-size:13px}
  .abt__chip--a{left:calc(50% - var(--abt-cw) / 2 - 40px)}
}
/* tablet & phone: photo first, then the copy and a 2x2 tab grid */
@media (max-width:900px){
  .abt{--abt-cw:min(74vw,400px);padding:72px 0 64px}
  .abt__wrap{grid-template-columns:1fr;gap:48px}
  .abt__visual{order:-1;min-height:calc(var(--abt-cw) * 7 / 6 + 40px)}
  .abt__content{max-width:none}
  .abt__tabs{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:36px}
  .abt__tab{flex-direction:row;align-items:center;padding:18px 12px 12px}
  .abt__bignum{display:none}
  .abt__chip--a{left:max(0px,calc(50% - var(--abt-cw) / 2 - 36px))}
  .abt__chip--b{right:max(0px,calc(50% - var(--abt-cw) / 2 - 36px));bottom:calc(50% - var(--abt-cw) * 7 / 12 - 26px)}
  .abt__seal{width:92px;height:92px;right:max(4px,calc(50% - var(--abt-cw) / 2 - 30px))}
  .abt__seal text{font-size:9.4px}
  .abt__seal-core{width:40px;height:40px}
  .abt__ring{width:min(calc(var(--abt-cw) * 1.62),calc(100vw - 24px))}
}
/* phone: full-width photo card with a soft glow (no ring), the two chips in a row under it, seal on the card's corner */
@media (max-width:600px){
  .abt{--abt-cw:min(calc(100vw - 40px),440px);padding:64px 0 56px}
  .abt__wrap{gap:36px}
  .abt__visual{min-height:0;width:var(--abt-cw);margin:0 auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:stretch;place-items:stretch}
  .abt__visual::before{content:"";position:absolute;left:-6%;right:-6%;top:-4%;height:84%;z-index:0;pointer-events:none;
    background:radial-gradient(ellipse at 50% 50%,rgba(51,150,255,.28),rgba(51,150,255,0) 70%);filter:blur(10px)}
  .abt__ring{display:none}
  .abt__card{grid-column:1/-1;width:100%;aspect-ratio:6/6.4;box-shadow:0 28px 56px -22px rgba(0,31,63,.45),0 0 0 6px rgba(255,255,255,.75)}
  .abt__chip,.abt__chip--a,.abt__chip--b{position:relative;left:auto;right:auto;top:auto;bottom:auto;z-index:1;animation:none;translate:none!important;
    white-space:normal;padding:12px;gap:10px;border-radius:16px;background:#fff;border-color:#e3ebf5;box-shadow:0 12px 28px -14px rgba(0,31,63,.25)}
  .abt__chip b{font-size:13px;line-height:1.25}
  .abt__chip small{display:block;font-size:11.5px;line-height:1.35}
  .abt__chip-ico{width:34px;height:34px;border-radius:10px}
  .abt__seal{width:78px;height:78px;right:-8px;top:-18px}
  .abt__seal text{font-size:10px}
  .abt__seal-core{width:34px;height:34px}
  .abt__seal-core svg{width:16px;height:16px}
  .abt__cap{left:14px;bottom:14px;font-size:13px;padding:8px 14px 8px 8px}
  .abt__cap b{width:30px;height:30px}
}
@media (max-width:520px){
  .abt__eyebrow{margin-bottom:18px}
  .abt__title{margin-bottom:18px}
  .abt__text{margin-bottom:26px}
  .abt__btn{padding:12px 12px 12px 22px;font-size:12.5px}
  .abt__tab-ico{width:36px;height:36px}
  .abt__tab-txt{font-size:12.5px}
  .abt__card{border-radius:24px}
}
@media (prefers-reduced-motion:reduce){
  .abt *,.abt *::before,.abt *::after{animation:none!important;transition:none!important}
  .abt__card{transform:none!important}
}

/* 20. News & Events — light band with a looping story row (JS section 8f): one card is open, the rest peek beside it.
   On desktop (fine pointer, ≥900px) the band holds in place (sticky stage) while scrolling moves through the cards.
   Everything is prefixed .tdne; tokens are prefixed --tdne- (all colours are tints/shades of the brand #004690). */
.tdne{
  --tdne-blue:#004690;--tdne-navy:#001f3f;--tdne-ink:#002347;--tdne-text:#292e34;--tdne-tint:#3396ff;--tdne-bg:#fff;
  --tdne-line:#d5deea;--tdne-soft:#9cc7ff;--tdne-dim:#dce7f5;
  --tdne-ease:cubic-bezier(.22,.8,.24,1);--tdne-dur:.75s;
  /* card sizes; the JS fine-tunes these for each screen */
  --cw:280px;--ch:320px;--ow:420px;--oh:470px;--gap:16px;
  position:relative;background:var(--tdne-bg);color:var(--tdne-ink);font-family:"Manrope","Manrope Fallback",sans-serif;-webkit-font-smoothing:antialiased}
.tdne-pin{position:relative}
.tdne-stage{position:relative;overflow:hidden;padding:clamp(64px,8vw,110px) 0 clamp(56px,7vw,90px)}
.tdne.is-scroll .tdne-stage{position:sticky;top:48px;padding:var(--sec-y) 0}   /* as tall as its content; main.js centres it on the screen while pinned (top) and sizes the pin, so the section ends right under the button */
.tdne.is-scroll .tdne-head{margin-bottom:24px}
.tdne.is-scroll .tdne-track{transition:none}   /* scrub mode: the row follows the scroll every frame */

.tdne-head{width:var(--wrap-w);margin:0 auto 40px;text-align:center}   /* centred heading, like the other section headings */

.tdne-title{margin:0;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:var(--h2);line-height:var(--h2-lh);font-weight:700;letter-spacing:-.03em}
.tdne-title em{font-style:normal;color:var(--tdne-blue)}
.tdne-sub{margin:16px auto 0;max-width:62ch;text-wrap:pretty;font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--tdne-text)}

/* track & cards */
.tdne-viewport{position:relative;touch-action:pan-y;height:var(--oh)}   /* fixed at the open card's height, so the row (and the progress line under it) never shrinks while one card closes and the next opens */
.tdne-track{display:flex;align-items:flex-start;gap:var(--gap);list-style:none;margin:0;padding:0;will-change:transform;transition:transform var(--tdne-dur) var(--tdne-ease)}
.tdne-card{position:relative;flex:none;width:var(--cw);height:var(--ch);border-radius:18px;overflow:hidden;background:var(--tdne-navy);color:#fff;cursor:pointer;
  transition:width var(--tdne-dur) var(--tdne-ease),height var(--tdne-dur) var(--tdne-ease),box-shadow .6s,filter .6s;box-shadow:0 20px 40px -30px rgba(0,31,63,.6)}
.tdne-card.is-open{width:var(--ow);height:var(--oh);cursor:default;box-shadow:0 40px 70px -40px rgba(0,31,63,.75)}
.tdne-card:not(.is-open){filter:saturate(.75)}
.tdne-card:not(.is-open):hover{filter:saturate(1)}
.tdne-img{position:absolute;inset:0}
.tdne-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;color:transparent;transition:transform 1.2s var(--tdne-ease)}
.tdne-card:hover .tdne-img img{transform:scale(1.06)}
.tdne-card::after{content:"";position:absolute;inset:0;pointer-events:none;   /* readable shade at the bottom */
  background:linear-gradient(180deg,rgba(0,31,63,0) 35%,rgba(0,31,63,.55) 62%,rgba(0,21,43,.92) 100%)}
.tdne-tag{position:absolute;z-index:2;left:16px;top:16px;padding:6px 10px;border-radius:999px;background:rgba(255,255,255,.9);color:var(--tdne-blue);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}
.tdne-tag.event{background:var(--tdne-tint);color:#fff}
.tdne-body{position:absolute;z-index:2;left:0;right:0;bottom:0;padding:20px}
.tdne-meta{display:block;font-size:12px;font-weight:600;color:var(--tdne-soft);text-shadow:0 1px 10px rgba(0,21,43,.75)}
.tdne-card h3{margin:6px 0 0;text-shadow:0 1px 12px rgba(0,21,43,.6);font-size:16px;line-height:1.3;font-weight:700;letter-spacing:-.01em;transition:font-size var(--tdne-dur) var(--tdne-ease)}
.tdne-card.is-open h3{font-size:clamp(19px,1.7vw,23px);line-height:1.25}
.tdne-more{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows var(--tdne-dur) var(--tdne-ease),opacity .4s ease}
.tdne-more>div{overflow:hidden}
.tdne-card.is-open .tdne-more{grid-template-rows:1fr;opacity:1;transition-delay:.15s}
.tdne-more p{margin:12px 0 0;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--tdne-dim);display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.tdne-read{display:inline-flex;align-items:center;gap:10px;margin-top:16px;padding:6px 6px 6px 16px;border-radius:999px;background:#fff;color:var(--tdne-ink);font-weight:700;font-size:14px;text-decoration:none;transition:background-color .35s,color .35s}
.tdne-read b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--tdne-blue);color:#fff;transition:transform .5s var(--tdne-ease)}
.tdne-read:hover{background:var(--tdne-tint);color:#fff}
.tdne-read:hover b{transform:rotate(-45deg)}
.tdne-read:focus-visible,.tdne-card:focus-visible{outline:3px solid var(--tdne-tint);outline-offset:3px}

/* "View all news" button, centred under the cards */
.tdne-foot{width:var(--wrap-w);margin:34px auto 0;display:flex;justify-content:center}
.tdne-all{display:inline-flex;align-items:center;gap:14px;flex:none;padding:6px 6px 6px 22px;border-radius:999px;background:#e4edf8;border:1px solid #cbdaee;   /* same pill as "Get a free quote now" */
  color:var(--tdne-ink);font-weight:700;font-size:15px;line-height:1.2;text-decoration:none;white-space:nowrap;
  transition:background-color .4s,color .4s,border-color .4s,transform .4s var(--tdne-ease)}
.tdne-all b{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--tdne-blue);color:#fff;transition:background-color .4s,color .4s,transform .5s var(--tdne-ease)}
.tdne-all:hover{background:var(--tdne-blue);border-color:var(--tdne-blue);color:#fff;transform:translateY(-2px)}
.tdne-all:hover b{background:#fff;color:var(--tdne-blue);transform:rotate(-45deg)}
.tdne-all:focus-visible{outline:3px solid var(--tdne-tint);outline-offset:3px}

/* no-animation state the JS uses when it jumps between the real cards and their loop copies */
.tdne.tdne-jump .tdne-track,.tdne.tdne-jump .tdne-card,.tdne.tdne-jump .tdne-card h3,.tdne.tdne-jump .tdne-more{transition:none!important}

@media (max-width:640px){
  .tdne-all{padding-left:18px;font-size:14px}
}
@media (prefers-reduced-motion:reduce){
  .tdne *,.tdne *::before,.tdne *::after{transition:none!important}
}

/* 21. FAQ + Contact — full-screen navy panel over the factory photo (JS section 8g): FAQ accordion left, white enquiry
   form card right. Everything is prefixed .tfc-; tokens are prefixed --tfc- (all colours are tints/shades of the brand
   #004690). Swap the background photo in ONE place: --tfc-bg-image. */
.tfc-contact{
  --tfc-bg-image:url("../images/banner2.webp");
  --tfc-ink:#002347;--tfc-ink-2:#292e34;--tfc-muted:#4d5e78;--tfc-line:#d5deea;--tfc-fill:#f6f8fb;--tfc-white:#fff;--tfc-blue:#004690;--tfc-tint:#3396ff;--tfc-error:#c62828;
  --tfc-on-dark:#fff;--tfc-on-dark-2:rgba(255,255,255,.74);--tfc-on-dark-line:rgba(255,255,255,.18);
  --tfc-gutter:0px;            /* 0 = edge to edge; 24px for an inset, rounded panel */
  --tfc-panel-radius:0px;
  --tfc-panel-pad:var(--sec-y) var(--gutter);   /* top/bottom: section spacing; sides: the page-wrap gutter */
  --tfc-min-height:100vh;
  --tfc-card-radius:22px;
  --tfc-container:var(--wrap-max);   /* same content width as the rest of the page */
  padding:var(--tfc-gutter);font-family:"Manrope","Manrope Fallback",sans-serif;-webkit-font-smoothing:antialiased}
.tfc-contact__panel{position:relative;isolation:isolate;overflow:hidden;width:100%;
  min-height:var(--tfc-min-height);min-height:calc(100svh - 2 * var(--tfc-gutter));
  display:flex;align-items:center;border-radius:var(--tfc-panel-radius);background:#001f3f;color:var(--tfc-on-dark)}
/* photo (+ a drawn navy factory scene behind it, so the panel never goes flat if the photo is missing) */
.tfc-contact__bg{position:absolute;inset:0;z-index:-1;
  background:var(--tfc-bg-image) center / cover no-repeat,
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 900' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='a' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%232a4a70'/><stop offset='1' stop-color='%2300152b'/></linearGradient><radialGradient id='b' cx='.22' cy='.12' r='.6'><stop offset='0' stop-color='%239cc7ff' stop-opacity='.55'/><stop offset='1' stop-color='%239cc7ff' stop-opacity='0'/></radialGradient><linearGradient id='c' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%231d3a5c'/><stop offset='1' stop-color='%23000f1f'/></linearGradient><linearGradient id='d' x1='0' y1='0' x2='1' y2='0'><stop offset='0' stop-color='%233e5f85' stop-opacity='.75'/><stop offset='1' stop-color='%2312304f' stop-opacity='.35'/></linearGradient></defs><rect width='1600' height='900' fill='url(%23a)'/><rect width='1600' height='900' fill='url(%23b)'/><polygon points='0,0 1600,0 1180,230 420,230' fill='%2316324f' opacity='.35'/><rect x='420' y='230' width='760' height='350' fill='url(%23d)' opacity='.45'/><rect x='470' y='270' width='290' height='270' fill='%23d5deea' opacity='.06'/><polygon points='0,900 1600,900 1180,580 420,580' fill='url(%23c)' opacity='.85'/><g stroke='%23ffffff' stroke-opacity='.05' stroke-width='2' fill='none'><line x1='0' y1='0' x2='420' y2='230'/><line x1='1600' y1='0' x2='1180' y2='230'/><line x1='0' y1='900' x2='420' y2='580'/><line x1='1600' y1='900' x2='1180' y2='580'/></g></svg>") center / cover no-repeat;
  background-attachment:fixed}   /* the photo stays put while the page scrolls over it (parallax) */
/* navy overlay so the white text and the card always read */
/* the photo downloads only when the section comes near (main.js adds .is-near); until then the drawn scene below shows */
html.js .tfc-contact:not(.is-near){--tfc-bg-image:none}
.tfc-contact__bg::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(1,28,57,.85) 0%,rgba(2,36,75,.8) 55%,rgba(3,40,79,.75) 100%)}
@media (max-width:991px),(hover:none){
  .tfc-contact__bg{background-attachment:scroll}
}
.tfc-contact__inner{width:100%;max-width:var(--tfc-container);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) minmax(400px,520px);gap:64px;align-items:stretch;padding:var(--tfc-panel-pad)}

/* left: heading + FAQ */
.tfc-contact__left{display:flex;flex-direction:column;min-width:0}
.tfc-contact__title{margin:0 0 20px;font-family: "Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:var(--h2);line-height:var(--h2-lh);font-weight:700;letter-spacing:-.01em;color:var(--tfc-on-dark)}
.tfc-contact__lead{margin:0 0 40px;max-width:440px;font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--tfc-on-dark-2)}
.tfc-faq{margin:0;padding:0;max-width:620px}
.tfc-faq__item{border-top:1px solid var(--tfc-on-dark-line)}
.tfc-faq__item:last-child{border-bottom:1px solid var(--tfc-on-dark-line)}
.tfc-faq__q{margin:0;font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:0}
.tfc-faq__btn{all:unset;display:flex;align-items:center;justify-content:space-between;gap:20px;width:100%;padding:20px 0;box-sizing:border-box;
  font-family:"Manrope","Manrope Fallback",sans-serif;font-size:17px;line-height:1.4;font-weight:500;color:var(--tfc-on-dark);cursor:pointer}
.tfc-faq__btn:focus-visible{outline:2px solid rgba(255,255,255,.7);outline-offset:4px;border-radius:6px}
.tfc-faq__icon{position:relative;flex:0 0 auto;width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.4);transition:transform .3s ease,background-color .3s ease}
.tfc-faq__icon::before,.tfc-faq__icon::after{content:"";position:absolute;left:50%;top:50%;background:currentColor;transform:translate(-50%,-50%)}
.tfc-faq__icon::before{width:12px;height:1.5px}
.tfc-faq__icon::after{width:1.5px;height:12px;transition:opacity .2s ease}
.tfc-faq__item.is-open .tfc-faq__icon{transform:rotate(180deg);background:rgba(255,255,255,.12)}
.tfc-faq__item.is-open .tfc-faq__icon::after{opacity:0}
.tfc-faq__a{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s ease}
.tfc-faq__a-inner{overflow:hidden}
.tfc-faq__a p{margin:0;padding:0 56px 22px 0;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--tfc-on-dark-2)}
.tfc-faq__item.is-open .tfc-faq__a{grid-template-rows:1fr}
.tfc-contact__more{margin:28px 0 0;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--tfc-on-dark-2)}
.tfc-contact__more a{color:var(--tfc-on-dark);text-decoration:none;border-bottom:1px solid rgba(255,255,255,.35)}
.tfc-contact__more a:hover{border-bottom-color:#fff}

/* right: form card */
.tfc-contact__right{display:flex;min-width:0}
.tfc-form{display:flex;flex-direction:column;width:100%;background:var(--tfc-white);color:var(--tfc-ink);border-radius:var(--tfc-card-radius);padding:28px;box-shadow:0 24px 60px rgba(0,15,31,.35)}
.tfc-form__row--msg{flex:1 1 auto;display:flex}            /* the message grows to fill spare card height */
.tfc-form__row--msg .tfc-field{flex:1;display:flex;flex-direction:column}
.tfc-form__row--msg .tfc-field__textarea{flex:1}
.tfc-form__title{margin:0 0 8px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:21px;line-height:1.3;font-weight:600;letter-spacing:-.01em;color:var(--tfc-ink)}
.tfc-form__sub{margin:0 0 28px;font-size:var(--fs-body);line-height:var(--lh-body);color:var(--tfc-muted)}
.tfc-form__row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.tfc-form__row--1{grid-template-columns:1fr}
.tfc-field{display:block;min-width:0}
.tfc-field__input,.tfc-field__textarea{appearance:none;-webkit-appearance:none;display:block;width:100%;margin:0;
  font-family:"Manrope","Manrope Fallback",sans-serif;font-size:14px;line-height:1.4;color:var(--tfc-ink);background:var(--tfc-fill);border:1px solid var(--tfc-line);outline:none;box-shadow:none;
  transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease}
.tfc-field__input{height:46px;padding:0 18px;border-radius:999px}
.tfc-field__textarea{min-height:150px;padding:14px 18px;border-radius:16px;resize:vertical}
.tfc-field__input::placeholder,.tfc-field__textarea::placeholder{color:var(--tfc-muted);opacity:1}
.tfc-field__input:focus,.tfc-field__textarea:focus{background:var(--tfc-white);border-color:var(--tfc-blue);box-shadow:0 0 0 3px rgba(0,70,144,.14)}
/* validation (main.js): a failed field gets aria-invalid, its message sits in the .tfc-field__err under it */
.tfc-field__input[aria-invalid="true"],.tfc-field__textarea[aria-invalid="true"]{border-color:var(--tfc-error)}
.tfc-field__input[aria-invalid="true"]:focus,.tfc-field__textarea[aria-invalid="true"]:focus{border-color:var(--tfc-error);box-shadow:0 0 0 3px rgba(198,40,40,.14)}
.tfc-field__err{display:block;margin:6px 18px 0;font-size:12.5px;line-height:1.4;color:var(--tfc-error)}
.tfc-field__err:empty{display:none}
.tfc-check{display:flex;align-items:flex-start;gap:10px;margin:18px 0 22px;font-size:12.5px;line-height:1.5;color:var(--tfc-muted);cursor:pointer}
.tfc-check input{appearance:none;-webkit-appearance:none;flex:0 0 auto;width:16px;height:16px;margin:1px 0 0;border:1px solid #b9c7da;border-radius:4px;background:var(--tfc-white);display:grid;place-content:center;cursor:pointer}
.tfc-check input::before{content:"";width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translate(1px,-1px) scale(0);transition:transform .15s ease}
.tfc-check input:checked{background:var(--tfc-blue);border-color:var(--tfc-blue)}
.tfc-check input:checked::before{transform:rotate(-45deg) translate(1px,-1px) scale(1)}
.tfc-check input:focus-visible{box-shadow:0 0 0 3px rgba(0,70,144,.2)}
.tfc-form__submit{all:unset;display:flex;align-items:center;justify-content:center;width:100%;height:46px;border-radius:999px;box-sizing:border-box;
  background:var(--tfc-white);border:1px solid var(--tfc-line);font-family:"Manrope","Manrope Fallback",sans-serif;font-size:14px;font-weight:600;color:var(--tfc-ink);cursor:pointer;
  transition:background-color .2s ease,color .2s ease,border-color .2s ease}
.tfc-form__submit:hover{background:var(--tfc-blue);border-color:var(--tfc-blue);color:#fff}
.tfc-form__submit:focus-visible{box-shadow:0 0 0 3px rgba(0,70,144,.2)}
.tfc-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

@media (max-width:1100px){
  .tfc-contact__inner{grid-template-columns:minmax(0,1fr) minmax(360px,440px);gap:40px}
}
@media (max-width:991px){
  .tfc-contact{--tfc-min-height:auto}
  .tfc-contact__panel{min-height:auto;display:block}
  .tfc-contact__inner{grid-template-columns:1fr;gap:36px}
  .tfc-faq{max-width:none}
  .tfc-contact__lead{max-width:560px}
}
@media (max-width:600px){
  .tfc-contact__inner{gap:28px}
  .tfc-contact__title{margin-bottom:14px}
  .tfc-contact__lead{margin-bottom:24px}
  .tfc-faq__btn{font-size:16px;padding:16px 0}
  .tfc-faq__a p{padding-right:40px}
  .tfc-form{padding:22px 18px}
  .tfc-form__row{grid-template-columns:1fr;gap:12px;margin-bottom:12px}
}
@media (prefers-reduced-motion:reduce){
  .tfc-contact *{transition:none!important}
}

/* 22. Why Choose THAIDA — white band, interactive spotlight grid (JS section 8h). Six strength cards around a photo hub;
   one card is lit at a time (autoplay with a progress bar, hover / focus takes over) and the hub shows its number and
   title. A glow follows the mouse across the cards and the hovered card tilts. Everything is prefixed .tdw; tokens
   are prefixed --tdw- (all colours are tints/shades of the brand #004690). */
.tdw{
  --tdw-navy:#001f3f;--tdw-ink:#002347;--tdw-blue:#004690;--tdw-blue-2:#1a63b8;--tdw-tint:#3396ff;--tdw-soft:#6fb0ff;--tdw-pale:#9cc7ff;
  --tdw-text:#292e34;--tdw-line:#e1e9f4;--tdw-card:#fff;
  --tdw-dur:4.5s;                                   /* autoplay time per card (JS reads it from the animation) */
  --tdw-ease:cubic-bezier(.2,.8,.2,1);
  --tdw-gap:22px;
  position:relative;isolation:isolate;overflow:hidden;
  padding:50px var(--gutter);   /* same 50px top/bottom rhythm as the other sections; page-wrap gutter at the sides */
  background:#fff;
  color:var(--tdw-ink);font-family:"Manrope","Manrope Fallback",sans-serif;-webkit-font-smoothing:antialiased}

/* ambient background: fine grid + slowly drifting glows */
.tdw-bg{position:absolute;inset:0;z-index:-1;pointer-events:none;
  background-image:linear-gradient(rgba(0,70,144,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(0,70,144,.045) 1px,transparent 1px);
  background-size:56px 56px;
  -webkit-mask-image:radial-gradient(ellipse 75% 65% at 50% 50%,#000 25%,transparent 80%);mask-image:radial-gradient(ellipse 75% 65% at 50% 50%,#000 25%,transparent 80%)}
.tdw-orb{position:absolute;border-radius:50%;filter:blur(80px)}
.tdw-orb--a{width:520px;height:520px;left:-160px;top:10%;background:rgba(51,150,255,.12);animation:tdw-drift 20s ease-in-out infinite alternate}
.tdw-orb--b{width:460px;height:460px;right:-140px;bottom:0;background:rgba(0,70,144,.10);animation:tdw-drift 24s ease-in-out infinite alternate-reverse}
.tdw-orb--c{width:300px;height:300px;left:45%;top:-120px;background:rgba(111,176,255,.14);animation:tdw-drift 18s ease-in-out -6s infinite alternate}
@keyframes tdw-drift{to{transform:translate3d(80px,-60px,0) scale(1.15)}}

/* header */
.tdw-head{max-width:760px;margin:0 auto clamp(40px,5vw,64px);text-align:center}
.tdw-eyebrow{display:inline-flex;align-items:center;gap:14px;margin:0 0 18px;font-size:12.5px;font-weight:700;letter-spacing:.24em;text-transform:uppercase;color:var(--tdw-blue)}
.tdw-eyebrow i{width:40px;height:1.5px;background:linear-gradient(90deg,transparent,var(--tdw-blue));transform-origin:right;transition:transform .9s var(--tdw-ease) .2s}
.tdw-eyebrow i:last-child{background:linear-gradient(90deg,var(--tdw-blue),transparent);transform-origin:left}
.tdw-title{margin:0 0 18px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:var(--h2);line-height:var(--h2-lh);font-weight:800;letter-spacing:-.035em;color:var(--tdw-navy)}
.tdw-title span{background:linear-gradient(95deg,var(--tdw-blue) 0%,var(--tdw-tint) 50%,var(--tdw-blue) 100%);background-size:200% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;animation:tdw-sheen 7s linear infinite}
@keyframes tdw-sheen{to{background-position:-200% 0}}
.tdw-lead{margin:0 auto;max-width:560px;font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--tdw-text)}

/* grid: three cards | hub | three cards */
.tdw-grid{position:relative;max-width:calc(var(--wrap-max) - 2 * var(--gutter));margin:0 auto;display:grid;
  grid-template-columns:minmax(0,1fr) minmax(280px,.82fr) minmax(0,1fr);grid-template-rows:repeat(3,auto);gap:var(--tdw-gap)}
.tdw-c1{grid-area:1/1}.tdw-c2{grid-area:2/1}.tdw-c3{grid-area:3/1}
.tdw-c4{grid-area:1/3}.tdw-c5{grid-area:2/3}.tdw-c6{grid-area:3/3}
.tdw-core{grid-area:1/2/4/3}

/* card */
.tdw-card{position:relative;isolation:isolate;display:flex;flex-direction:column;padding:24px 24px 22px;border-radius:24px;cursor:pointer;outline:none;
  background:var(--tdw-card);border:1px solid var(--tdw-line);box-shadow:0 10px 30px -18px rgba(0,31,63,.18);
  --mx:50%;--my:50%;--rx:0deg;--ry:0deg;
  transform:perspective(900px) rotateX(var(--rx)) rotateY(var(--ry));
  transition:transform .35s var(--tdw-ease),background .45s,border-color .45s,box-shadow .45s,opacity .8s ease,translate 1s var(--tdw-ease)}
/* border light that follows the mouse (masked to the 1px border) */
.tdw-card::before{content:"";position:absolute;inset:-1px;border-radius:inherit;padding:1px;pointer-events:none;
  background:radial-gradient(260px circle at var(--mx) var(--my),rgba(51,150,255,.95),rgba(51,150,255,0) 60%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);
  opacity:var(--lit,0);transition:opacity .4s}
/* soft fill glow under the mouse */
.tdw-glow{position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;
  background:radial-gradient(320px circle at var(--mx) var(--my),rgba(51,150,255,.08),rgba(51,150,255,0) 65%);opacity:var(--lit,0);transition:opacity .4s}
.tdw-grid.is-pointer .tdw-card{--lit:1}
.tdw-card.is-active{background:linear-gradient(160deg,#eef5ff 0%,#fff 65%);border-color:rgba(0,70,144,.32);
  box-shadow:0 26px 56px -24px rgba(0,31,63,.32),0 0 0 1px rgba(51,150,255,.12)}
.tdw-card:focus-visible{box-shadow:0 0 0 3px rgba(51,150,255,.7)}

.tdw-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:18px}
.tdw-icon{position:relative;display:grid;place-items:center;width:54px;height:54px;border-radius:16px;flex:none;
  background:#eaf1fb;border:1px solid #d7e4f5;color:var(--tdw-blue);
  transition:background .45s,color .45s,transform .6s var(--tdw-ease),box-shadow .45s}
.tdw-icon svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.tdw-icon--fill svg{fill:currentColor;stroke:none}
.tdw-card.is-active .tdw-icon{background:linear-gradient(150deg,var(--tdw-tint),var(--tdw-blue));border-color:transparent;color:#fff;box-shadow:0 10px 26px rgba(51,150,255,.45);transform:rotate(-6deg) scale(1.06)}
.tdw-num{font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:44px;line-height:.9;font-weight:800;letter-spacing:-.04em;color:transparent;
  -webkit-text-stroke:1.2px rgba(0,70,144,.18);transition:-webkit-text-stroke-color .45s,color .45s,transform .6s var(--tdw-ease)}
.tdw-card.is-active .tdw-num{color:rgba(51,150,255,.12);-webkit-text-stroke-color:var(--tdw-tint);transform:translateY(-2px)}
.tdw-ftitle{margin:0 0 10px;font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:clamp(17px,1.35vw,20px);line-height:1.25;font-weight:700;letter-spacing:-.01em;color:var(--tdw-navy)}
.tdw-ftitle span{color:var(--tdw-blue-2)}
.tdw-text{margin:0 0 16px;font-size:15px;line-height:var(--lh-body);color:#292e34;}
.tdw-tags{display:flex;flex-wrap:wrap;gap:6px;margin:auto 0 0;padding:0;list-style:none}
.tdw-tags li{padding:5px 10px;border-radius:999px;font-size:11.5px;font-weight:600;letter-spacing:.02em;color:#1a4f8a;
  background:#f2f7fd;border:1px solid #dce7f5;
  transition:background .4s,color .4s,border-color .4s,transform .5s var(--tdw-ease)}
.tdw-card.is-active .tdw-tags li{background:#e1edfc;border-color:#b9d3f3;color:var(--tdw-blue)}
.tdw-card.is-active .tdw-tags li:nth-child(1){transition-delay:.05s}.tdw-card.is-active .tdw-tags li:nth-child(2){transition-delay:.1s}
.tdw-card.is-active .tdw-tags li:nth-child(3){transition-delay:.15s}.tdw-card.is-active .tdw-tags li:nth-child(4){transition-delay:.2s}
/* progress line along the bottom of the lit card */
.tdw-cbar{position:absolute;left:24px;right:24px;bottom:0;height:2px;border-radius:2px;overflow:hidden;opacity:0;transition:opacity .4s}
.tdw-cbar i{position:absolute;inset:0;background:linear-gradient(90deg,var(--tdw-blue),var(--tdw-tint));transform:scaleX(0);transform-origin:left}
.tdw-card.is-active .tdw-cbar{opacity:1}
.tdw-card.is-active .tdw-cbar i{animation:tdw-prog var(--tdw-dur) linear forwards}
.tdw:not(.is-playing) .tdw-card.is-active .tdw-cbar i{animation-play-state:paused}
.tdw.is-static .tdw-card.is-active .tdw-cbar i{animation:none;transform:none}
@keyframes tdw-prog{to{transform:none}}
/* light beam from the lit card to the hub */
.tdw-card::after{content:"";position:absolute;top:50%;width:var(--tdw-gap);height:2px;pointer-events:none;
  background:linear-gradient(90deg,rgba(51,150,255,0),var(--tdw-tint),rgba(51,150,255,0));background-size:200% 100%;
  transform:scaleX(0);transition:transform .5s var(--tdw-ease)}
.tdw-card--l::after{left:100%;transform-origin:left}
.tdw-card--r::after{right:100%;transform-origin:right}
.tdw-card.is-active::after{transform:scaleX(1);animation:tdw-flow 1.2s linear infinite}
@keyframes tdw-flow{to{background-position:-200% 0}}

/* hub */
.tdw-core{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:520px;padding:40px 24px;border-radius:32px;overflow:hidden;
  border:1px solid rgba(0,70,144,.2);box-shadow:0 40px 80px -34px rgba(0,31,63,.55);color:#fff;background:#001f3f;
  --px:0;--py:0;transition:clip-path 1.3s var(--tdw-ease)}
.tdw-core-media{position:absolute;inset:0;z-index:-2;overflow:hidden}
.tdw-core-media img{width:100%;height:100%;object-fit:cover;transform:scale(1.12) translate(calc(var(--px) * -14px),calc(var(--py) * -14px));transition:transform .6s ease-out}
.tdw-core::before{content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(circle at 50% 42%,rgba(0,26,53,.35) 0%,rgba(0,26,53,.78) 55%,rgba(0,20,42,.94) 100%),linear-gradient(180deg,rgba(0,37,76,.2),rgba(0,26,53,.7))}
.tdw-core-ring{position:absolute;left:50%;top:42%;width:min(260px,76%);transform:translate(-50%,-50%);overflow:visible}
.tdw-core-ring circle{fill:none}
.tdw-core-spin{stroke:rgba(156,199,255,.35);stroke-width:1;stroke-dasharray:1.5 7;transform-origin:100px 100px;animation:tdw-spin 40s linear infinite}
.tdw-core-track{stroke:rgba(156,199,255,.18);stroke-width:3}
.tdw-core-prog{stroke:var(--tdw-soft);stroke-width:3;stroke-linecap:round;stroke-dasharray:100 100;stroke-dashoffset:100;transform:rotate(-90deg);transform-origin:100px 100px;
  filter:drop-shadow(0 0 6px rgba(111,176,255,.8))}
.tdw.is-playing .tdw-core-prog.is-run{animation:tdw-ring var(--tdw-dur) linear forwards}
.tdw:not(.is-playing) .tdw-core-prog.is-run{animation:tdw-ring var(--tdw-dur) linear forwards;animation-play-state:paused}
.tdw.is-static .tdw-core-prog{stroke-dashoffset:0;animation:none!important}
@keyframes tdw-ring{to{stroke-dashoffset:0}}
@keyframes tdw-spin{to{transform:rotate(360deg)}}
.tdw-core-num{position:absolute;left:50%;top:42%;transform:translate(-50%,-50%);display:grid;
  font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:clamp(64px,6vw,92px);line-height:1;font-weight:800;letter-spacing:-.05em;color:#fff}
.tdw-core-num span,.tdw-core-title span{grid-area:1/1;opacity:0;transform:translateY(40%);filter:blur(6px);transition:opacity .45s ease,transform .7s var(--tdw-ease),filter .5s ease}
.tdw-core-num span.is-active,.tdw-core-title span.is-active{opacity:1;transform:none;filter:none;transition-delay:.12s}
.tdw-core-num span.is-leaving,.tdw-core-title span.is-leaving{opacity:0;transform:translateY(-40%);filter:blur(6px);transition-delay:0s}
.tdw-core-kicker{position:absolute;left:0;right:0;top:calc(42% + min(130px,38%) + 18px);margin:0;text-align:center;font-size:11.5px;font-weight:700;letter-spacing:.28em;text-transform:uppercase;color:var(--tdw-pale)}
.tdw-core-title{position:absolute;left:24px;right:24px;top:calc(42% + min(130px,38%) + 40px);display:grid;text-align:center;
  font-family:"Plus Jakarta Sans","Plus Jakarta Sans Fallback",sans-serif;font-size:clamp(20px,1.8vw,26px);line-height:1.2;font-weight:700;color:#fff}
.tdw-core-dots{position:absolute;left:0;right:0;bottom:26px;display:flex;justify-content:center;gap:8px}
.tdw-core-dots button{width:8px;height:8px;padding:0;border:0;border-radius:8px;background:rgba(156,199,255,.35);cursor:pointer;transition:width .4s var(--tdw-ease),background .4s}
.tdw-core-dots button:hover{background:rgba(156,199,255,.7)}
.tdw-core-dots button.is-active{width:26px;background:var(--tdw-soft)}

/* ---- entrance (only while JS runs; without JS everything is simply shown) ---- */
.tdw.tdw--js:not(.is-in) .tdw-eyebrow i{transform:scaleX(0)}
.tdw-head>*{transition:opacity .8s ease,transform 1s var(--tdw-ease)}
.tdw-head>:nth-child(2){transition-delay:.1s}.tdw-head>:nth-child(3){transition-delay:.2s}
.tdw.tdw--js:not(.is-in) .tdw-head>*{opacity:0;transform:translateY(24px)}
.tdw.tdw--js:not(.is-in) .tdw-card{opacity:0}
.tdw.tdw--js:not(.is-in) .tdw-card--l{translate:-60px 20px}
.tdw.tdw--js:not(.is-in) .tdw-card--r{translate:60px 20px}
.tdw.tdw--js .tdw-card{transition-delay:0s,0s,0s,0s,calc(.35s + var(--i) % 3 * .12s),calc(.35s + var(--i) % 3 * .12s)}
.tdw.tdw--js.is-in .tdw-grid.is-pointer .tdw-card{transition-delay:0s}
.tdw.tdw--js:not(.is-in) .tdw-core{clip-path:inset(50% 0 50% 0 round 32px)}
.tdw.tdw--js.is-in .tdw-core{clip-path:inset(0 0 0 0 round 32px)}

@media (max-width:1180px){
  .tdw-grid{grid-template-columns:minmax(0,1fr) minmax(250px,.75fr) minmax(0,1fr);--tdw-gap:16px}
  .tdw-card{padding:20px 18px 18px}
  .tdw-num{font-size:36px}
  .tdw-icon{width:48px;height:48px}
}
/* tablet: hub on top, cards in two columns */
@media (max-width:960px){
  .tdw-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none}
  .tdw-core{grid-area:auto;grid-column:1/-1;order:-1;min-height:340px}
  .tdw-core-ring{top:40%;width:min(200px,50%)}
  .tdw-core-num{top:40%}
  .tdw-core-kicker{top:calc(40% + 118px)}
  .tdw-core-title{top:calc(40% + 140px)}
  .tdw-c1,.tdw-c2,.tdw-c3,.tdw-c4,.tdw-c5,.tdw-c6{grid-area:auto}
  .tdw-card::after{display:none}
  .tdw.tdw--js:not(.is-in) .tdw-card--l,.tdw.tdw--js:not(.is-in) .tdw-card--r{translate:0 40px}
}
@media (max-width:600px){
  .tdw-grid{grid-template-columns:1fr}
  .tdw-core{min-height:340px}
  .tdw-core-ring{width:170px}
  .tdw-core-num{font-size:60px}
  .tdw-core-kicker{top:calc(40% + 100px)}
  .tdw-core-title{top:calc(40% + 122px);font-size:19px}
  .tdw-eyebrow{letter-spacing:.16em;font-size:11px}
  .tdw-eyebrow i{width:24px}
}
@media (prefers-reduced-motion:reduce){
  .tdw *,.tdw *::before,.tdw *::after{animation:none!important;transition:none!important}
  .tdw-card{transform:none!important}
}

/* 23. Section rhythm — every normal section keeps the same space (--sec-y) between its edge and its visible content,
   so the gap between any two sections is the same everywhere. Full-screen / pinned stages (hero, the desktop
   certificates, "Made in Thailand" and news stages, the contact panel) size themselves to the screen and are left alone.
   Where a section's content has its own built-in offset, the padding subtracts it so the visible space still equals --sec-y. */
.head > h2:first-child,.tdd-head > .tdd-title:first-child{margin-top:0}
#about{padding-top:calc(var(--sec-y) - 8px);padding-bottom:var(--sec-y)}
#grades{padding-top:var(--sec-y);padding-bottom:calc(var(--sec-y) - 30px)}
#special-products{padding-top:var(--sec-y);padding-bottom:calc(var(--sec-y) - 4px)}
#applications{padding-top:var(--sec-y);padding-bottom:calc(var(--sec-y) - 12px)}
#why-choose-us{padding-top:var(--sec-y);padding-bottom:var(--sec-y)}
#testimonials{padding-top:var(--sec-y);padding-bottom:var(--sec-y)}
.tdne:not(.is-scroll) .tdne-stage{padding-top:var(--sec-y);padding-bottom:var(--sec-y)}
@media (max-width:1100px){#certificates{padding-top:var(--sec-y);padding-bottom:var(--sec-y)}}
@media (max-width:960px){#why-choose-us{padding-bottom:calc(var(--sec-y) - 19px)}}
@media (max-width:900px){
  #about{padding-top:calc(var(--sec-y) + 30px)}   /* the photo card's seal sits above the card */
  #testimonials{padding-bottom:calc(var(--sec-y) - 18px)}
  #applications{padding-bottom:calc(var(--sec-y) - 15px)}
  #madein{padding-top:var(--sec-y)!important;padding-bottom:var(--sec-y)!important}
}
@media (max-width:600px){#testimonials{padding-bottom:calc(var(--sec-y) - 24px)}#applications{padding-bottom:calc(var(--sec-y) - 23px)}#about{padding-top:40px;}}
/* Industrial Sectors → Why Choose: on wide screens the dial's tick ring already leaves open space at the
   bottom of the section, so keep the padding under it small (matches the gap above Industrial Sectors) */
@media (min-width:1081px){#applications{padding-bottom:40px}}
/* testimonials: keep the big quote mark inside the section (the card column sits higher on smaller desktops) */
@media (min-width:901px) and (max-width:1100px){.tghost{top:-.3em}}
/* Grades: smaller gap between the intro text and the card (the space under the card for the dots is unchanged) */
@media (min-width:761px){.chain{height:709px;margin-top:24px}.chain-card{top:334px}}

/* 24. Special Products — 3-column photo cards.
   Each card is a full-bleed photo with the title on a navy fade. On computers a soft light and a glowing
   edge follow the mouse (main.js sets --mx / --my), the photo zooms, a short line and an accent bar slide
   in and the arrow turns white. On touch screens the line is always shown. The pinned deal-out effect
   (main.js) still animates the cards in; nothing here uses transform on the card itself. */
#special-products .sp-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(14px,1.6vw,22px);max-width:var(--deal-w,none);margin-inline:auto}   /* --deal-w: set by main.js on short screens so the pinned deal-out fits */
#special-products .sp-card{display:block;aspect-ratio:4/3;background:#00152d;border:1px solid rgba(255,255,255,.1);border-radius:var(--r);isolation:isolate;color:#fff;text-decoration:none;
  box-shadow:0 18px 40px -18px rgba(0,0,0,.6);transition:border-color .35s,box-shadow .45s}
#special-products .sp-card .pic{position:absolute;inset:0;aspect-ratio:auto;z-index:0}
#special-products .sp-card .pic img{transition:transform 1s cubic-bezier(.16,1,.3,1),filter .6s}
#special-products .sp-card .pic::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(0,18,40,0) 0%,rgba(0,18,40,0) 55%,rgba(0,22,48,.45) 72%,rgba(0,18,40,.88) 100%);transition:opacity .5s}
/* mouse light + glowing edge */
#special-products .sp-card::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;opacity:0;transition:opacity .4s;
  background:radial-gradient(360px circle at var(--mx,50%) var(--my,40%),rgba(160,210,255,.1),rgba(160,210,255,0) 62%)}
#special-products .sp-card::after{content:"";position:absolute;inset:0;z-index:4;pointer-events:none;border-radius:inherit;padding:1.5px;opacity:0;transition:opacity .4s;
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,40%),rgba(150,205,255,.95),rgba(150,205,255,0) 70%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}
/* number + type chips */
#special-products .sp-no,#special-products .sp-tag{position:absolute;top:16px;z-index:3;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;line-height:1;
  padding:8px 11px;border-radius:999px;color:#fff;background:rgba(0,24,52,.55);border:1px solid rgba(255,255,255,.22)}
#special-products .sp-no{left:16px;font-variant-numeric:tabular-nums;letter-spacing:.08em}
#special-products .sp-tag{right:16px;background:rgba(255,255,255,.9);color:var(--brand);border-color:transparent;transition:background-color .35s,color .35s}
/* title bar */
#special-products .sp-card .body{position:absolute;left:0;right:0;bottom:0;z-index:3;padding:22px 22px 22px 24px;align-items:flex-end}
#special-products .sp-card .body::after{content:"";position:absolute;left:24px;right:24px;bottom:0;height:3px;border-radius:3px 3px 0 0;
  background:linear-gradient(90deg,#2f8cff,#8fd0ff);transform:scaleX(0);transform-origin:left;transition:transform .6s cubic-bezier(.16,1,.3,1)}
#special-products .sp-card .body h3{font-size:clamp(18px,1.45vw,21px);line-height:1.3;font-weight:600;margin:0;text-shadow:0 2px 14px rgba(0,0,0,.35)}
#special-products .sp-more{display:block;font-family:"Manrope","Manrope Fallback",sans-serif;font-size:13.5px;line-height:1.4;color:rgba(255,255,255,.78);
  max-height:0;opacity:0;transform:translateY(8px);overflow:hidden;transition:max-height .5s cubic-bezier(.16,1,.3,1),opacity .4s,transform .5s cubic-bezier(.16,1,.3,1),margin .5s}
#special-products .sp-card .arw{width:44px;height:44px;background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);font-size:16px;transition:background-color .35s,color .35s,transform .5s cubic-bezier(.16,1,.3,1),border-color .35s}
/* hover / keyboard focus */
#special-products .sp-card:hover,#special-products .sp-card:focus-visible{border-color:rgba(143,208,255,.45);box-shadow:0 34px 70px -24px rgba(0,0,0,.75),0 0 0 1px rgba(47,140,255,.25)}
#special-products .sp-card:hover .pic img,#special-products .sp-card:focus-visible .pic img{transform:scale(1.035);filter:saturate(1.06) contrast(1.03)}
#special-products .sp-card:hover::before,#special-products .sp-card:hover::after{opacity:1}
#special-products .sp-card:hover .body::after,#special-products .sp-card:focus-visible .body::after{transform:scaleX(1)}
#special-products .sp-card:hover .sp-more,#special-products .sp-card:focus-visible .sp-more{max-height:40px;opacity:1;transform:none;margin-top:6px}
#special-products .sp-card:hover .arw,#special-products .sp-card:focus-visible .arw{background:#fff;color:var(--brand);border-color:#fff;transform:rotate(45deg)}
#special-products .sp-card:hover .sp-tag{background:var(--brand);color:#fff}
#special-products .sp-card:focus-visible{outline:2px solid #8fd0ff;outline-offset:3px}
/* touch screens: no hover, so show the line and keep it tidy */
@media (hover:none){
  #special-products .sp-more{max-height:40px;opacity:1;transform:none;margin-top:6px}
}
@media (max-width:900px){#special-products .sp-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}   /* 3 columns for as long as the pinned deal-out runs (main.js: > 900px) */
@media (max-width:600px){
  #special-products .sp-grid{grid-template-columns:1fr;gap:14px}
  #special-products .sp-card{aspect-ratio:16/11}
  #special-products .sp-card .body{padding:18px 18px 18px 20px}
  #special-products .sp-card .body h3{font-size:18px}
  #special-products .sp-card .arw{width:40px;height:40px}
  #special-products .sp-no,#special-products .sp-tag{top:14px;font-size:11px;padding:7px 10px}
  #special-products .sp-no{left:14px}#special-products .sp-tag{right:14px}
}
@media (prefers-reduced-motion:reduce){
  #special-products .sp-card,#special-products .sp-card *,#special-products .sp-card::before,#special-products .sp-card::after{transition:none!important}
}

/* ===================================================================== HOME ENQUIRY FORM: country-code picker
   Built by main.js (section 8g) in front of the phone field of #contact .tfc-form, the same component as the
   product-page drawer (css/product.css, .edr-cc), sized for the home form's 46px pill inputs. */
.edr-ph{--pp-navy:#002347;--pp-blue:var(--tfc-blue);--pp-tint:#3396ff;--pp-ease:cubic-bezier(.22,1,.36,1);position:relative;display:flex}
.edr-ph .tfc-field__input{flex:1;min-width:0;border-top-left-radius:0;border-bottom-left-radius:0;padding-left:14px}
.edr-cc{flex:none}
.edr-cc__btn{display:flex;align-items:center;gap:7px;height:46px;margin:0;padding:0 10px 0 16px;border:1px solid var(--tfc-line);border-right:0;border-radius:999px 0 0 999px;background:#eef4fb;cursor:pointer;font:700 14.5px/1 "Manrope","Manrope Fallback",sans-serif;color:var(--pp-navy);transition:background-color .2s,border-color .2s}
.edr-cc__btn:hover,.edr-cc__btn[aria-expanded="true"]{background:#e2ecf8}
.edr-cc__btn:focus-visible{outline:2px solid var(--pp-tint);outline-offset:-4px}
.edr-ph:focus-within .edr-cc__btn{border-color:var(--pp-blue)}
.edr-ph:has([aria-invalid="true"]) .edr-cc__btn{border-color:var(--tfc-error)}
.edr-cc__flag{display:block;width:22px;height:16px;border-radius:2px;object-fit:cover;background:#dfe7f1;box-shadow:0 0 0 1px rgba(0,0,0,.08)}
.edr-cc__code{min-width:30px;font-variant-numeric:tabular-nums}
.edr-cc__caret{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s}
.edr-cc__btn[aria-expanded="true"] .edr-cc__caret{transform:rotate(180deg)}
.edr-cc__menu{position:absolute;left:0;top:calc(100% + 6px);z-index:5;width:min(300px,calc(100vw - 40px));padding:8px;border-radius:12px;background:#fff;border:1px solid #c5d0de;box-shadow:0 24px 50px -18px rgba(0,31,63,.4);animation:edr-cc-pop .22s var(--pp-ease)}
@keyframes edr-cc-pop{from{opacity:0;transform:translateY(-6px)}}
.edr-cc__search{display:flex;align-items:center;gap:8px;margin-bottom:6px;padding:0 10px;border-radius:8px;background:#f3f7fc;border:1px solid #d5deea}
.edr-cc__search svg{width:15px;height:15px;flex:none;fill:none;stroke:#7186a3;stroke-width:2.2;stroke-linecap:round}
.edr-cc__search input{flex:1;min-width:0;height:38px;margin:0;padding:0;border:0;background:none;outline:none;font:600 14px/1 "Manrope","Manrope Fallback",sans-serif;color:var(--pp-navy)}
.edr-cc__list{list-style:none;margin:0;padding:0;max-height:230px;overflow-y:auto;overscroll-behavior:contain}
.edr-cc__list li{display:grid;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:10px;margin:0;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:14px;line-height:1.3;font-weight:600;color:var(--pp-navy)}
.edr-cc__list li img{width:22px;height:16px;border-radius:2px;object-fit:cover;background:#dfe7f1;box-shadow:0 0 0 1px rgba(0,0,0,.08)}
.edr-cc__list li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.edr-cc__list li em{font-style:normal;color:#7186a3;font-variant-numeric:tabular-nums}
.edr-cc__list li.is-hi{background:#eaf1fb}
.edr-cc__list li[aria-selected="true"]{background:var(--pp-blue);color:#fff}
.edr-cc__list li[aria-selected="true"] em{color:#cfe3ff}
.edr-cc__list .is-empty{display:block;cursor:default;color:#7186a3;font-weight:500}
@media (prefers-reduced-motion:reduce){
  .edr-cc__btn,.edr-cc__caret{transition:none!important}
  .edr-cc__menu{animation:none}
}
