/* DIFOSE brochure — mobile-first, dark theme */
:root{--p:#327D96;--p6:#286478;--a:#00E5FF;--bg:#020617;--bg2:#0F172A;--tx:#cbd5e1;--mu:#94a3b8;--bd:1px solid rgba(50,125,150,.28);--gl:rgba(30,41,59,.6)}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth}
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--tx);line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden;padding-bottom:calc(84px + env(safe-area-inset-bottom));
 background-image:radial-gradient(ellipse 90% 40% at 50% 0,rgba(50,125,150,.28),transparent 70%)}
p,li,span{text-wrap:pretty}
.nw{white-space:nowrap}
img{max-width:100%;display:block}a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--a);outline-offset:2px}
.wrap{max-width:760px;margin:0 auto;padding:0 18px}
h1,h2,h3{text-wrap:balance;color:#fff;font-weight:800;letter-spacing:-.02em;line-height:1.15}
h1{font-size:clamp(1.9rem,8vw,2.8rem)}h2{font-size:1.25rem}h3{font-size:1rem;font-weight:700}
.grad{background:linear-gradient(135deg,#4aa3c0,var(--a));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.pill{display:inline-flex;gap:6px;align-items:center;padding:5px 12px;border-radius:99px;border:1px solid rgba(50,125,150,.5);background:rgba(50,125,150,.14);color:#6cc0da;font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.btn{display:flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 24px;border-radius:14px;font-weight:700;font-size:.95rem;border:1px solid transparent;transition:.2s}
.btn-p{background:linear-gradient(135deg,var(--p),var(--p6));color:#fff;box-shadow:0 0 22px rgba(50,125,150,.4)}
.btn-o{border-color:rgba(255,255,255,.2);color:#fff;background:rgba(255,255,255,.04)}
.btn:active{transform:scale(.98)}
/* header */
header.top{position:sticky;top:0;z-index:40;background:rgba(2,6,23,.85);backdrop-filter:blur(14px);border-bottom:var(--bd);padding-top:env(safe-area-inset-top)}
header .in{display:flex;align-items:center;justify-content:space-between;height:60px}
.logo img{height:34px;width:auto}
.mailb{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:rgba(50,125,150,.2);color:var(--a);border:var(--bd)}
/* tab bar */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:50;background:rgba(2,6,23,.94);backdrop-filter:blur(16px);border-top:var(--bd);padding-bottom:env(safe-area-inset-bottom)}
.tabbar .in{max-width:760px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr) 1.35fr;gap:6px;padding:8px 12px}
.tabbar a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:56px;border-radius:12px;font-size:.68rem;font-weight:700;color:var(--mu);letter-spacing:.03em}
.tabbar a i{font-size:1.15rem}.tabbar a.on{color:var(--a);background:rgba(0,229,255,.08)}
.tabbar a.q{background:linear-gradient(135deg,var(--p),var(--p6));color:#fff;box-shadow:0 0 18px rgba(50,125,150,.45)}
/* home */
.home{padding:28px 0 8px}
.home h1{margin:0 0 22px}
.tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.tile{border-radius:20px;border:var(--bd);background:var(--gl);padding:16px;display:flex;flex-direction:column;justify-content:flex-end;gap:4px;min-height:176px;position:relative;overflow:hidden}
.tile::before{content:"";position:absolute;inset:auto 0 -40% 0;height:70%;background:radial-gradient(circle,rgba(50,125,150,.45),transparent 70%)}
.tile>*{position:relative}
.tile b{color:#fff;font-size:1.05rem}.tile span{font-size:.78rem;color:var(--mu)}
.sec{padding:30px 0 4px}
.sh{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.sh a{font-size:.8rem;font-weight:700;color:#6cc0da}
.strip{scroll-padding:0 18px;display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -18px;padding:0 18px 6px;scrollbar-width:none}
.strip::-webkit-scrollbar{display:none}
.pc{flex:0 0 150px;scroll-snap-align:start;border-radius:18px;border:var(--bd);background:var(--gl);padding:12px;text-align:center}
.pc img{height:92px;width:auto;margin:0 auto 6px;object-fit:contain}
.pc b{display:block;color:#fff;font-size:.95rem;margin-top:2px}.pc span{font-size:.7rem;color:var(--mu);display:block;line-height:1.3}
.rows{display:grid;gap:10px}
.row{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:16px;border:var(--bd);background:var(--gl);min-height:68px}
.row:active{border-color:var(--a)}
.row .ic{flex:none;width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:rgba(50,125,150,.2);color:var(--a);font-size:1.15rem}
.row>div:not(.ic){flex:1;min-width:0}.row b{display:block;color:#fff;font-size:.95rem;line-height:1.25}.row span{font-size:.78rem;color:var(--mu);display:block;line-height:1.35}
.row>i{color:#6cc0da;font-size:.8rem}
/* product grid */
.pg{font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#6cc0da;margin:26px 0 12px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pcard{border-radius:18px;border:var(--bd);background:var(--gl);padding:12px;display:flex;flex-direction:column;text-align:center}
.pcard img{width:100%;aspect-ratio:1;object-fit:contain}
.pcard b{color:#fff;margin-top:6px}.pcard span{margin-top:2px}.pcard span{font-size:.72rem;color:var(--mu);line-height:1.3}
.ph{padding:26px 0 4px}.ph h1{margin-top:12px}
/* detail */
.back{display:flex;align-items:center;gap:8px;padding:14px 0;font-size:.82rem;font-weight:700;color:#6cc0da}
.dh{text-align:left;padding:4px 0 8px}
.dh .vis{position:relative;max-width:260px;margin:0 auto 10px;aspect-ratio:1;display:grid;place-items:center}
.dh .vis::before{content:"";position:absolute;inset:6%;border-radius:50%;border:1px dashed rgba(0,229,255,.3)}
.dh .vis img{width:84%;position:relative;filter:drop-shadow(0 18px 24px rgba(0,0,0,.55))}
.dh .vis .big{position:relative;width:46%;aspect-ratio:1;border-radius:28px;display:grid;place-items:center;font-size:3.2rem;color:var(--a);background:var(--gl);border:1px solid rgba(0,229,255,.35);box-shadow:0 0 50px rgba(0,229,255,.2)}
.dh h1{margin:12px 0 6px}.dh .sub{color:#6cc0da;font-weight:600;font-size:.95rem}
.dh .lead{color:var(--mu);margin:14px 0 0;font-size:.98rem}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:20px 0 6px}
.stat{border-radius:14px;border:var(--bd);background:var(--gl);padding:12px 12px;text-align:left}
.stat strong{display:block;font-size:1.2rem;overflow-wrap:anywhere;font-weight:800;line-height:1.2;background:linear-gradient(135deg,#4aa3c0,var(--a));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.stat span{font-size:.72rem;color:var(--mu)}.stat i{display:none}
.accs{margin-top:16px;display:grid;gap:10px}
details.acc{border-radius:16px;border:var(--bd);background:var(--gl)}
details.acc[open]{border-color:rgba(0,229,255,.4)}
details.acc summary{list-style:none;display:flex;align-items:center;gap:12px;padding:16px;font-weight:700;color:#fff;cursor:pointer;min-height:56px}
details.acc summary::-webkit-details-marker{display:none}
details.acc summary .nm{flex:none;width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:rgba(0,229,255,.1);color:var(--a);font-size:.72rem}
details.acc summary span.t{flex:1}
details.acc summary::after{content:"\f078";font-family:"FA";font-weight:900;font-size:.72rem;color:#6cc0da;transition:.2s}
details.acc[open] summary::after{transform:rotate(180deg)}
.abody{padding:0 14px 16px}
.fg,.steps{display:grid;gap:10px}
.fc{padding:14px;border-radius:12px;background:rgba(2,6,23,.5);border:var(--bd)}
.fc .n{display:none}.fc h3{margin-bottom:4px}.fc p{font-size:.86rem;color:var(--mu)}
.fc ul{list-style:none;margin-top:8px;display:grid;gap:5px}.fc li{display:flex;gap:8px;font-size:.82rem;color:#e2e8f0}.fc li::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--a);margin-top:8px;flex:none}
.step{display:grid;grid-template-columns:34px 1fr;column-gap:12px;padding:14px;border-radius:12px;background:rgba(2,6,23,.5);border:var(--bd)}
.step b{grid-row:1/span 3;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--p),var(--p6));color:#fff;font-size:.88rem}
.step small:empty{display:none}.step small{color:var(--a);font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.step h3{font-size:.95rem}.step p{font-size:.84rem;color:var(--mu);margin-top:3px}
.tbl{border-radius:12px;overflow:hidden;border:var(--bd)}
.tbl div{padding:11px 14px;border-bottom:var(--bd);background:rgba(2,6,23,.4)}.tbl div:last-child{border-bottom:0}
.tbl dt{font-size:.68rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#6cc0da}.tbl dd{font-weight:600;color:#fff;font-size:.9rem}
.two{display:grid;gap:10px}.two>div{padding:14px;border-radius:12px;border:var(--bd);background:rgba(2,6,23,.5)}
.two .dk{background:rgba(50,125,150,.15)}.two h3{margin:6px 0}.two p{font-size:.85rem;color:var(--mu);margin-bottom:10px}
.two .label{font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--a)}.two .label b{font-weight:800}
.two ul{list-style:none;display:grid;gap:8px}.two li{display:flex;gap:10px;font-size:.84rem;color:#e2e8f0}.two li i{color:var(--a);margin-top:4px}
.chk{list-style:none;display:grid;gap:8px}
.chk li{padding:12px 14px;border-radius:12px;background:rgba(2,6,23,.5);border:var(--bd);display:flex;gap:10px;font-size:.85rem;color:var(--mu)}
.chk li i{color:var(--a);margin-top:3px}.chk li b{color:#fff}
.note{margin-top:10px;font-size:.84rem;color:var(--mu)}
footer{padding:26px 0 8px;text-align:center;font-size:.8rem;color:#64748b}footer a{color:#6cc0da;font-weight:600}
@media(min-width:760px){.pc{flex-basis:180px}.stats{grid-template-columns:repeat(4,1fr)}.grid2{grid-template-columns:repeat(3,1fr)}.tile{min-height:210px}.dh .vis{max-width:320px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* animated home tiles */
@property --ang{syntax:"<angle>";initial-value:0deg;inherits:false}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes ang{to{--ang:360deg}}
@keyframes glow{0%,100%{box-shadow:0 0 16px rgba(0,229,255,.45),0 0 0 0 rgba(0,229,255,.35)}50%{box-shadow:0 0 30px rgba(0,229,255,.8),0 0 0 8px rgba(0,229,255,0)}}
@keyframes floaty{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-3px) scale(1.07)}}
@keyframes twinkle{0%,100%{opacity:0;transform:scale(.4)}50%{opacity:1;transform:scale(1)}}
.tile{min-height:196px;overflow:hidden}
.tile::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;
 background:conic-gradient(from var(--ang),transparent 0 62%,var(--a) 82%,#fff 90%,transparent 100%);
 -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:ang 4.5s linear infinite}
.tile.alt::after{animation-duration:6s;animation-direction:reverse}
.fx{position:relative;width:112px;height:112px;margin:0 auto 8px;display:grid;place-items:center}
.fx .ring{position:absolute;inset:0;border-radius:50%;border:1px dashed rgba(0,229,255,.5);animation:spin 18s linear infinite}
.fx .ring.r2{inset:15%;border:1.5px solid rgba(50,125,150,.5);border-top-color:var(--a);border-right-color:var(--a);animation:spin 3.2s linear infinite reverse}
.fx .sweep{position:absolute;inset:3%;border-radius:50%;background:conic-gradient(from 0deg,rgba(0,229,255,.38),transparent 30%);-webkit-mask:radial-gradient(circle,transparent 34%,#000 36%);mask:radial-gradient(circle,transparent 34%,#000 36%);animation:spin 4s linear infinite}
.tile.alt .fx .sweep{animation-duration:2.6s;background:conic-gradient(from 0deg,rgba(74,163,192,.55),transparent 34%)}
.fx .core{position:relative;z-index:2;width:50px;height:50px;border-radius:15px;display:grid;place-items:center;font-size:1.45rem;color:#031319;background:linear-gradient(135deg,#7df3ff,#2aa5c4);animation:glow 2.4s ease-in-out infinite,floaty 3.2s ease-in-out infinite}
.tile.alt .fx .core{border-radius:50%}
.fx .orb{position:absolute;inset:0;animation:spin 9s linear infinite}
.fx .orb.od2{animation-delay:-3s}.fx .orb.od3{animation-delay:-6s}
.fx .orb b{position:absolute;top:-11px;left:50%;width:22px;height:22px;margin-left:-11px;border-radius:50%;display:grid;place-items:center;font-size:.6rem;color:var(--a);background:#071425;border:1px solid var(--a);box-shadow:0 0 10px rgba(0,229,255,.6);animation:spin 9s linear infinite reverse}
.fx .orb.od2 b{animation-delay:-3s}.fx .orb.od3 b{animation-delay:-6s}
.fx .sp{position:absolute;width:4px;height:4px;border-radius:50%;background:#fff;box-shadow:0 0 8px var(--a);animation:twinkle 2.2s ease-in-out infinite}
.fx .s1{top:2%;right:8%}.fx .s2{bottom:6%;left:2%;animation-delay:.8s}.fx .s3{top:46%;right:-6%;animation-delay:1.5s}
.tile>b{font-size:1.1rem}

/* gallery + overview */
.gal{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:18px -18px 4px;padding:0 18px 8px;scroll-padding:0 18px;scrollbar-width:none}
.gal::-webkit-scrollbar{display:none}
.gal figure{flex:0 0 82%;max-width:420px;scroll-snap-align:start;border-radius:18px;border:var(--bd);background:radial-gradient(circle at 50% 45%,rgba(50,125,150,.3),rgba(30,41,59,.6) 70%);padding:14px 14px 12px}
.gal img{width:100%;height:190px;object-fit:contain;filter:drop-shadow(0 12px 18px rgba(0,0,0,.5))}
.gal figcaption{margin-top:10px;font-size:.78rem;font-weight:600;color:var(--mu);text-align:center}
.ov{font-size:.92rem;color:var(--tx);margin-bottom:12px}
.bf{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:6px}
.bf span{font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#6cc0da;margin-right:2px}
.bf em{font-style:normal;font-size:.78rem;font-weight:600;padding:5px 12px;border-radius:99px;background:rgba(0,229,255,.1);border:1px solid rgba(0,229,255,.25);color:#cfeff7}
@media(min-width:760px){.gal{margin-inline:0;padding-inline:0}.gal figure{flex-basis:340px}}

/* plain-language blocks */
.qa{display:grid;gap:10px;margin:14px 0}
.qa>div{padding:14px;border-radius:12px;border:var(--bd);background:rgba(2,6,23,.5)}
.qa span{display:block;font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--a);margin-bottom:4px}
.qa p{font-size:.88rem;color:var(--tx)}
.gh{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#6cc0da;margin:18px 0 8px}
.gl{border-radius:12px;overflow:hidden;border:var(--bd)}
.gl div{padding:11px 14px;border-bottom:var(--bd);background:rgba(2,6,23,.4)}.gl div:last-child{border-bottom:0}
.gl dt{font-weight:700;color:#fff;font-size:.88rem}.gl dd{font-size:.84rem;color:var(--mu);margin-top:2px}
@media(min-width:760px){.qa{grid-template-columns:1fr 1fr}}

/* ===== animated service hero art ===== */
@keyframes pulseG{0%,100%{opacity:.55;transform:scale(.92)}50%{opacity:1;transform:scale(1.06)}}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.vis.art-on{max-width:300px}.vis.art-on::before{display:none}
.art{position:relative;width:100%;height:100%}
.art .glow{position:absolute;inset:12%;border-radius:50%;background:radial-gradient(circle,rgba(0,229,255,.32),transparent 68%);animation:pulseG 3s ease-in-out infinite}
.art .rg{position:absolute;inset:3%;border-radius:50%;border:1px dashed rgba(0,229,255,.45);animation:spin 22s linear infinite}
.art .rg.r2{inset:15%;border:1.5px solid rgba(50,125,150,.5);border-top-color:var(--a);border-right-color:var(--a);animation:spin 4s linear infinite reverse}
.art .o{position:absolute;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:.85rem;color:var(--a);background:#071425;border:1px solid var(--a);box-shadow:0 0 14px rgba(0,229,255,.55);animation:floatY 3s ease-in-out infinite}
.art .o1{top:4%;left:50%;margin-left:-17px}.art .o2{bottom:14%;left:2%;animation-delay:-1s}.art .o3{bottom:14%;right:2%;animation-delay:-2s}
/* check-up: EKG */
.a-chk .panel{position:absolute;left:8%;right:8%;top:30%;bottom:30%;border-radius:18px;background:rgba(7,20,37,.88);border:1px solid rgba(0,229,255,.4);box-shadow:0 0 40px rgba(0,229,255,.22);overflow:hidden;display:grid;align-content:center;padding:0 8px}
.a-chk svg{width:100%;height:auto}
.a-chk .grid{fill:none;stroke:rgba(50,125,150,.3);stroke-width:.6}
.a-chk .ekg{fill:none;stroke:var(--a);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:420;stroke-dashoffset:420;filter:drop-shadow(0 0 4px var(--a));animation:ekg 2.6s linear infinite}
@keyframes ekg{0%{stroke-dashoffset:420}60%,100%{stroke-dashoffset:0}}
.a-chk .lbl{text-align:center;font-size:.62rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:#6cc0da;animation:pulseG 1.6s ease-in-out infinite}
.a-chk .lbl i{color:#ff6b81;margin-right:4px;animation:beat 1.3s ease-in-out infinite}
@keyframes beat{0%,100%{transform:scale(1)}15%{transform:scale(1.35)}30%{transform:scale(1)}}
/* incident response: alarm ripples */
.a-ir .rip{position:absolute;left:50%;top:50%;width:46%;aspect-ratio:1;margin:-23% 0 0 -23%;border-radius:50%;border:2px solid var(--a);animation:ripple 3s ease-out infinite;opacity:0}
.a-ir .rip.r2{animation-delay:1s}.a-ir .rip.r3{animation-delay:2s}
@keyframes ripple{0%{transform:scale(1);opacity:.9}100%{transform:scale(2.15);opacity:0}}
.a-ir .core{position:absolute;left:50%;top:50%;width:34%;aspect-ratio:1;margin:-17% 0 0 -17%;border-radius:50%;display:grid;place-items:center;font-size:2.4rem;color:#031319;background:linear-gradient(135deg,#7df3ff,#2aa5c4);animation:glowC 1.6s ease-in-out infinite}
@keyframes glowC{0%,100%{box-shadow:0 0 20px rgba(0,229,255,.6)}50%{box-shadow:0 0 52px rgba(0,229,255,1),0 0 0 10px rgba(0,229,255,.15)}}
.a-ir .core i{animation:zap 1.6s ease-in-out infinite}
@keyframes zap{0%,100%{transform:scale(1) rotate(0)}10%{transform:scale(1.2) rotate(-8deg)}20%{transform:scale(1) rotate(0)}}
.a-ir .t{position:absolute;font-style:normal;font-size:.7rem;font-weight:800;letter-spacing:.06em;color:var(--a);padding:4px 10px;border-radius:99px;background:#071425;border:1px solid rgba(0,229,255,.5);opacity:0;animation:chip 6s ease-in-out infinite}
.a-ir .t1{top:6%;left:6%}.a-ir .t2{top:6%;right:6%;animation-delay:1.5s}.a-ir .t3{bottom:8%;right:6%;animation-delay:3s}.a-ir .t4{bottom:8%;left:6%;animation-delay:4.5s}
@keyframes chip{0%,100%{opacity:0;transform:translateY(8px)}12%,45%{opacity:1;transform:none}60%{opacity:0}}
/* forensics: fingerprint scan */
.a-df .scan{position:absolute;left:24%;right:24%;top:24%;bottom:24%;border-radius:22px;display:grid;place-items:center;font-size:4.2rem;color:var(--a);background:rgba(7,20,37,.9);border:1px solid rgba(0,229,255,.45);box-shadow:0 0 40px rgba(0,229,255,.25);overflow:hidden}
.a-df .beam{position:absolute;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent,#fff,var(--a),transparent);box-shadow:0 0 16px var(--a),0 0 30px var(--a);animation:beam 2.4s ease-in-out infinite}
@keyframes beam{0%,100%{top:6%}50%{top:92%}}
.a-df .bits{position:absolute;inset:0;overflow:hidden;border-radius:50%;opacity:.5}
.a-df .bits span{position:absolute;top:-20%;font:700 .7rem/1.1 monospace;color:var(--a);writing-mode:vertical-rl;letter-spacing:.2em;animation:fall 4s linear infinite}
.a-df .bits span:nth-child(1){left:12%}.a-df .bits span:nth-child(2){left:30%;animation-delay:-1.2s}.a-df .bits span:nth-child(3){left:50%;animation-delay:-2.4s}.a-df .bits span:nth-child(4){left:68%;animation-delay:-.6s}.a-df .bits span:nth-child(5){left:86%;animation-delay:-3s}
@keyframes fall{to{transform:translateY(160%)}}
.a-df .o1{left:2%;top:18%;margin:0}.a-df .o2{top:auto}
/* data recovery */
.a-dr .drive{position:absolute;left:50%;top:44%;width:42%;aspect-ratio:1;margin:-21% 0 0 -21%;border-radius:24px;display:grid;place-items:center;font-size:2.6rem;color:#031319;background:linear-gradient(135deg,#7df3ff,#2aa5c4);box-shadow:0 0 36px rgba(0,229,255,.6);animation:floatY 3s ease-in-out infinite}
.a-dr .drive .spin{position:absolute;inset:-9px;border-radius:30px;border:2px solid transparent;border-top-color:#fff;border-bottom-color:var(--a);animation:spin 2s linear infinite}
.a-dr .pbar{position:absolute;left:14%;right:14%;bottom:17%;height:8px;border-radius:99px;background:rgba(255,255,255,.12);overflow:hidden}
.a-dr .pbar span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--p),var(--a));box-shadow:0 0 12px var(--a);animation:fill 3.2s ease-in-out infinite}
@keyframes fill{0%{width:0}80%,100%{width:100%}}
.a-dr .plbl{position:absolute;left:0;right:0;bottom:6%;text-align:center;font-size:.64rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:#6cc0da;animation:pulseG 1.6s ease-in-out infinite}
.a-dr .f1,.a-dr .f2,.a-dr .f3{position:absolute;top:30%;color:var(--a);font-size:1.15rem;opacity:0;animation:rise 3.2s ease-in infinite}
.a-dr .f1{left:18%}.a-dr .f2{left:48%;animation-delay:1s}.a-dr .f3{right:18%;animation-delay:2s}
@keyframes rise{0%{opacity:0;transform:translateY(50px) scale(.6)}30%{opacity:1}100%{opacity:0;transform:translateY(-34px) scale(1)}}
/* electronic sweeping: radar */
.a-es .rd{position:absolute;inset:3%;border-radius:50%;border:1px solid rgba(0,229,255,.4);background:radial-gradient(circle,rgba(0,229,255,.06),transparent 70%)}
.a-es .rd.r2{inset:21%}.a-es .rd.r3{inset:39%}
.a-es .cross{position:absolute;left:50%;top:3%;bottom:3%;width:1px;background:rgba(0,229,255,.28)}
.a-es .sweep{position:absolute;inset:3%;border-radius:50%;background:conic-gradient(from 0deg,rgba(0,229,255,.55),rgba(0,229,255,0) 22%);animation:spin 3s linear infinite}
.a-es .bl{position:absolute;width:9px;height:9px;border-radius:50%;background:#fff;box-shadow:0 0 12px var(--a),0 0 0 0 rgba(0,229,255,.7);animation:blip 3s ease-out infinite;opacity:0}
.a-es .b1{top:24%;left:62%;animation-delay:.4s}.a-es .b2{top:64%;left:30%;animation-delay:1.4s}.a-es .b3{top:56%;left:70%;animation-delay:2.2s}
@keyframes blip{0%{opacity:0;transform:scale(.3)}8%{opacity:1;transform:scale(1.6)}30%{opacity:1;transform:scale(1);box-shadow:0 0 12px var(--a),0 0 0 14px rgba(0,229,255,0)}80%{opacity:.5}100%{opacity:0}}
.a-es .core{position:absolute;left:50%;top:50%;width:20%;aspect-ratio:1;margin:-10% 0 0 -10%;border-radius:50%;display:grid;place-items:center;font-size:1.3rem;color:#031319;background:linear-gradient(135deg,#7df3ff,#2aa5c4);box-shadow:0 0 24px rgba(0,229,255,.8);animation:glowC 2s ease-in-out infinite}
/* section reveal when an accordion opens */
@keyframes up{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
details.acc[open] .fc,details.acc[open] .step,details.acc[open] .chk li,details.acc[open] .qa>div,details.acc[open] .gl>div,details.acc[open] .tbl>div{animation:up .5s ease-out both}
details.acc[open] :is(.fc,.step,.chk li,.gl>div,.tbl>div,.qa>div):nth-child(2){animation-delay:.07s}
details.acc[open] :is(.fc,.step,.chk li,.gl>div,.tbl>div,.qa>div):nth-child(3){animation-delay:.14s}
details.acc[open] :is(.fc,.step,.chk li,.gl>div,.tbl>div,.qa>div):nth-child(4){animation-delay:.21s}
details.acc[open] :is(.fc,.step,.chk li,.gl>div,.tbl>div,.qa>div):nth-child(n+5){animation-delay:.28s}
.step b{position:relative}.step:hover b,details.acc[open] .step b{box-shadow:0 0 18px rgba(0,229,255,.55)}
/* service rows: glowing icons */
.rows .ic{position:relative}
.rows .ic::after{content:"";position:absolute;inset:-1px;border-radius:inherit;border:1px solid var(--a);opacity:0;animation:icring 3s ease-out infinite}
.rows .row:nth-child(2) .ic::after{animation-delay:.5s}.rows .row:nth-child(3) .ic::after{animation-delay:1s}.rows .row:nth-child(4) .ic::after{animation-delay:1.5s}.rows .row:nth-child(5) .ic::after{animation-delay:2s}
@keyframes icring{0%{opacity:.8;transform:scale(1)}100%{opacity:0;transform:scale(1.5)}}
.rows .ic i{animation:floatY 3s ease-in-out infinite}

/* =================== HOME: showcase =================== */
.off *,.off{animation-play-state:paused!important}
.rv{opacity:0;transform:translateY(26px);transition:opacity .7s ease-out,transform .7s ease-out}.rv.v{opacity:1;transform:none}
@keyframes rise2{from{opacity:0;transform:translateY(22px) scale(.97)}to{opacity:1;transform:none}}
.h-in{animation:rise2 .9s cubic-bezier(.22,1,.36,1) both}.h-in.d1{animation-delay:.12s}.h-in.d2{animation-delay:.28s}.h-in.d3{animation-delay:.42s}
.hero2{position:relative;overflow:hidden;padding:30px 0 34px;isolation:isolate;
 background:radial-gradient(ellipse 80% 55% at 50% 38%,rgba(50,125,150,.38),transparent 70%),linear-gradient(180deg,#0b1428,var(--bg) 92%)}
.hero2::before{content:"";position:absolute;inset:0;z-index:-1;background-image:linear-gradient(rgba(50,125,150,.13) 1px,transparent 1px),linear-gradient(90deg,rgba(50,125,150,.13) 1px,transparent 1px);background-size:40px 40px;-webkit-mask:radial-gradient(ellipse 85% 70% at 50% 40%,#000 30%,transparent 78%);mask:radial-gradient(ellipse 85% 70% at 50% 40%,#000 30%,transparent 78%)}
.hero2 #net{position:absolute;inset:0;width:100%;height:100%;z-index:-1}
.aur{position:absolute;z-index:-1;border-radius:50%;pointer-events:none;will-change:transform}
.aur.a1{width:300px;height:300px;left:-90px;top:60px;background:radial-gradient(circle,rgba(0,229,255,.22),transparent 68%);animation:drift 11s ease-in-out infinite}
.aur.a2{width:340px;height:340px;right:-120px;top:240px;background:radial-gradient(circle,rgba(50,125,150,.38),transparent 68%);animation:drift 14s ease-in-out infinite reverse}
@keyframes drift{0%,100%{transform:translate(0,0)}50%{transform:translate(36px,-28px)}}
.hero2 h1{font-size:clamp(2rem,9.2vw,3.2rem);text-align:center;margin:6px 0 4px;letter-spacing:-.03em}
.shimmer{background-image:linear-gradient(110deg,#4aa3c0 20%,#fff 40%,var(--a) 60%,#4aa3c0 80%);background-size:250% 100%;animation:shine 4.5s linear infinite}
@keyframes shine{to{background-position:-250% 0}}
.cf{position:relative;height:310px;max-width:560px;margin:6px auto 0;perspective:1100px;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.cf::before{content:"";position:absolute;left:50%;bottom:6px;width:62%;height:26px;margin-left:-31%;border-radius:50%;background:radial-gradient(ellipse,rgba(0,229,255,.55),transparent 70%);filter:blur(6px);animation:pulseG 3s ease-in-out infinite}
.cfi{position:absolute;left:50%;top:50%;width:min(62%,250px);aspect-ratio:1;display:grid;place-items:center;transition:transform .85s cubic-bezier(.22,1,.36,1),opacity .6s,filter .6s;-webkit-tap-highlight-color:transparent;will-change:transform}
.cfi::before{content:"";position:absolute;inset:6%;border-radius:50%;background:radial-gradient(circle,rgba(50,125,150,.5),transparent 68%);opacity:.7;transition:opacity .6s}
.cfi.on::before{opacity:1}
.cfi::after{content:"";position:absolute;inset:-2%;border-radius:50%;border:1px dashed rgba(0,229,255,.55);opacity:0;transition:opacity .6s;animation:spin 16s linear infinite}
.cfi.on::after{opacity:1}
.cfi .fl{display:block;width:100%;position:relative}
.cfi.on .fl{animation:floatY 4.2s ease-in-out infinite}
.cfi img{width:100%;filter:drop-shadow(0 22px 26px rgba(0,0,0,.6));pointer-events:none}
.cap{text-align:center;min-height:128px;padding-top:6px}
.cap b{display:block;font-size:1.9rem;font-weight:800;color:#fff;letter-spacing:-.02em}
.cap .cw{display:block;color:var(--tx);font-size:.98rem;max-width:340px;margin:4px auto 0;text-wrap:balance}
.cap .capt{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;margin-top:12px}
.cap .capt em{font-style:normal;font-size:.7rem;font-weight:700;letter-spacing:.06em;padding:4px 11px;border-radius:99px;background:rgba(0,229,255,.1);border:1px solid rgba(0,229,255,.3);color:#cfeff7}
.cap.in b{animation:capIn .55s cubic-bezier(.22,1,.36,1) both}.cap.in .cw{animation:capIn .55s .08s cubic-bezier(.22,1,.36,1) both}.cap.in .capt em{animation:capIn .5s .16s cubic-bezier(.22,1,.36,1) both}
.cap.in .capt em:nth-child(2){animation-delay:.22s}.cap.in .capt em:nth-child(3){animation-delay:.28s}.cap.in .capt em:nth-child(4){animation-delay:.34s}
@keyframes capIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.dots{display:flex;justify-content:center;gap:8px;margin:12px 0 20px}
.dots button{width:8px;height:8px;border-radius:99px;border:0;background:rgba(255,255,255,.22);padding:0;cursor:pointer;position:relative;transition:width .4s cubic-bezier(.22,1,.36,1),background .3s}
.dots button::before{content:"";position:absolute;inset:-18px -6px}
.dots button.on{width:26px;background:linear-gradient(90deg,var(--p),var(--a));box-shadow:0 0 12px rgba(0,229,255,.6)}
.hero2 .cta{justify-content:center;flex-wrap:nowrap;gap:10px}.hero2 .cta .btn{flex:1;max-width:210px;padding:0 14px;white-space:nowrap}
/* marquee */
.marq{overflow:hidden;border-block:var(--bd);background:rgba(15,23,42,.65);padding:6px 0;-webkit-mask:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);mask:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.marq .track{display:flex;width:max-content;animation:mq 34s linear infinite;padding:8px 0}
.marq .track.rev{animation-direction:reverse;animation-duration:40s}
.marq .track span{display:inline-flex;align-items:center;gap:10px;margin-right:34px;font-weight:800;font-size:.92rem;letter-spacing:.08em;text-transform:uppercase;color:#cfeff7;white-space:nowrap}
.marq .track.rev span{color:#6cc0da;font-weight:700}
.marq .track span i{color:var(--a);font-size:.7rem}.marq .track:not(.rev) span i{font-size:.4rem}
@keyframes mq{to{transform:translateX(-50%)}}
/* service cards with live art */
.scs{display:flex;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;padding:6px 18px 14px;scroll-padding:0 18px;scrollbar-width:none}
.scs::-webkit-scrollbar{display:none}
.sc{flex:0 0 min(78%,300px);scroll-snap-align:start;position:relative;border-radius:22px;padding:14px 14px 18px;background:linear-gradient(170deg,rgba(50,125,150,.22),rgba(15,23,42,.85) 60%);border:var(--bd);display:flex;flex-direction:column;gap:6px;overflow:hidden;transition:transform .35s}
.sc:active{transform:scale(.98)}
.sc::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;background:conic-gradient(from var(--ang),transparent 0 66%,var(--a) 84%,#fff 92%,transparent);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:ang 5s linear infinite}
.sc:nth-child(even)::after{animation-direction:reverse;animation-duration:6.5s}
.sc .art-box{width:78%;aspect-ratio:1;margin:0 auto 4px}
.sc h3{font-size:1.08rem;text-align:center}
.sc p{font-size:.84rem;color:var(--mu);text-align:center;text-wrap:balance}
.sc .more{margin-top:6px;text-align:center;font-weight:700;font-size:.82rem;color:#6cc0da}
.home-page .stats{grid-template-columns:1fr 1fr}
.btn-xl{min-height:64px;font-size:1.05rem;width:100%}
.glowbtn{position:relative;overflow:hidden;animation:glowBtn 2.6s ease-in-out infinite}
.glowbtn::after{content:"";position:absolute;top:0;bottom:0;width:60px;left:-80px;background:linear-gradient(100deg,transparent,rgba(255,255,255,.45),transparent);transform:skewX(-18deg);animation:sheen 3.2s ease-in-out infinite}
@keyframes sheen{0%,60%{left:-80px}100%{left:120%}}
@keyframes glowBtn{0%,100%{box-shadow:0 0 22px rgba(50,125,150,.5)}50%{box-shadow:0 0 42px rgba(0,229,255,.7)}}
@media(min-width:760px){.cf{height:360px}.cfi{width:260px}.sc{flex-basis:300px}.hero2{padding-top:44px}.home-page .stats{grid-template-columns:repeat(4,1fr)}}

/* =================== polish: service art =================== */
.a-chk .ekg{animation:ekg2 2.8s linear infinite}
@keyframes ekg2{0%{stroke-dashoffset:420;opacity:0}8%{opacity:1}58%{stroke-dashoffset:0;opacity:1}88%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:0}}
.a-ir .t{opacity:.4;transform:none;animation:chipHi 6s ease-in-out infinite}
@keyframes chipHi{0%,100%{opacity:.4;box-shadow:none;transform:none}8%,26%{opacity:1;box-shadow:0 0 16px rgba(0,229,255,.8);transform:scale(1.14)}40%{opacity:.4;box-shadow:none;transform:none}}
.a-ir .t1{animation-delay:0s}.a-ir .t2{animation-delay:1.5s}.a-ir .t3{animation-delay:3s}.a-ir .t4{animation-delay:4.5s}
.a-df .scan{animation:glowC 2.4s ease-in-out infinite}
.a-df .scan::before,.a-df .scan::after{content:"";position:absolute;width:16px;height:16px;border:2px solid var(--a);opacity:.9}
.a-df .scan::before{left:8px;top:8px;border-right:0;border-bottom:0;border-radius:6px 0 0 0}.a-df .scan::after{right:8px;bottom:8px;border-left:0;border-top:0;border-radius:0 0 6px 0}
.a-dr .drive{animation:floatY 3.4s ease-in-out infinite,glowC 2.4s ease-in-out infinite}
.a-es .sweep{-webkit-mask:radial-gradient(circle,transparent 8%,#000 9%);mask:radial-gradient(circle,transparent 8%,#000 9%)}
/* =================== polish: detail hero =================== */
.dh .vis:not(.art-on)::before{animation:spin 30s linear infinite}
.dh .vis:not(.art-on)::after{content:"";position:absolute;inset:-4%;border-radius:50%;border:1px solid rgba(0,229,255,.14);border-top-color:rgba(0,229,255,.7);animation:spin 6s linear infinite reverse}
.dh .vis:not(.art-on) img{animation:floatY 4.6s ease-in-out infinite}
.dh>*{animation:rise2 .8s cubic-bezier(.22,1,.36,1) both}
.dh>.vis{animation-delay:0s}.dh>.pill{animation-delay:.1s}.dh>h1{animation-delay:.16s}.dh>.sub{animation-delay:.22s}.dh>.lead{animation-delay:.28s}
.stats .stat{animation:rise2 .7s cubic-bezier(.22,1,.36,1) both}
.stats .stat:nth-child(2){animation-delay:.08s}.stats .stat:nth-child(3){animation-delay:.16s}.stats .stat:nth-child(4){animation-delay:.24s}
@media(prefers-reduced-motion:reduce){.rv{opacity:1;transform:none}.h-in,.dh>*,.stats .stat{animation:none!important}}
.hero2 .cta{display:flex}
.hero2 .cf{height:268px}
.hero2 .cap{min-height:112px}
.hero2 .cap b{font-size:1.7rem}
.hero2 .dots{margin:6px 0 14px}
@media(min-width:760px){.hero2 .cf{height:340px}}

/* =================== MOBILE HARDENING =================== */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:70px}
body{overscroll-behavior-y:none;-webkit-touch-callout:none;min-height:100vh;min-height:100svh}
a,button,summary,.cfi{touch-action:manipulation}
#hdr{min-height:61px}
.scs,.gal,.strip,.cf{overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
.back{min-height:44px;margin-top:2px}
.tabbar a{min-height:58px}
.tabbar{background:#040a1a;backdrop-filter:none;-webkit-backdrop-filter:none}
header.top{-webkit-backdrop-filter:blur(12px)}
/* readable minimum sizes */
.pill{font-size:.72rem}.step small{font-size:.72rem}.qa span,.bf span,.gh{font-size:.74rem}.stat span{font-size:.78rem}.cap .capt em{font-size:.74rem}
.a-chk .lbl,.a-dr .plbl{font-size:.7rem}.a-ir .t{font-size:.74rem}
.gal figcaption{font-size:.82rem}.fc li,.two li,.chk li{font-size:.88rem}
/* very small phones (iPhone SE / 320px) */
@media(max-width:350px){
 .wrap{padding:0 14px}
 h1{font-size:1.75rem}.hero2 h1{font-size:1.85rem}
 .hero2 .cf{height:236px}.cfi{width:66%}
 .hero2 .cta{flex-direction:column}.hero2 .cta .btn{max-width:none}
 .tabbar .in{gap:3px;padding:6px 8px}.tabbar a{font-size:.64rem}
 .stats{gap:8px}.stat{padding:10px}.stat strong{font-size:1.05rem}
 .sc{flex-basis:84%}.gal figure{flex-basis:88%}
 .cap b{font-size:1.5rem}
}
/* large phones / small tablets: keep a comfortable reading width */
@media(min-width:430px){.hero2 .cf{height:300px}}
/* landscape phones: short viewport */
@media(max-height:480px) and (orientation:landscape){
 .hero2{padding:14px 0 18px}.hero2 .cf{height:210px}.cap{min-height:90px}.hero2 h1{font-size:1.6rem}
 .tabbar a{min-height:46px;flex-direction:row;gap:8px}.tabbar a i{font-size:1rem}
 body{padding-bottom:66px}
 .dh .vis{max-width:190px}
}
@supports (padding:max(0px)){.wrap{padding-left:max(18px,env(safe-area-inset-left));padding-right:max(18px,env(safe-area-inset-right))}}
/* short phones: keep hero + buttons above the tab bar */
@media(max-height:780px) and (max-width:700px){
 .hero2{padding:16px 0 20px}.hero2 h1{font-size:1.95rem;margin:0}
 .hero2 .cf{height:222px;margin-top:2px}.cfi{width:58%}
 .hero2 .cap{min-height:96px;padding-top:2px}.hero2 .cap b{font-size:1.5rem}.cap .cw{font-size:.9rem}.cap .capt{margin-top:8px}
 .hero2 .dots{margin:2px 0 10px}.hero2 .cta .btn{min-height:48px}
}
@media(max-height:640px) and (max-width:700px){
 .hero2 .cf{height:180px}.hero2 .cap{min-height:84px}.cap .capt{display:none}
}

/* =================== LISTING PAGES: header, hub, nav =================== */
.ph2{position:relative;overflow:hidden;text-align:center;padding:22px 0 26px;isolation:isolate;border-bottom:var(--bd);
 background:radial-gradient(ellipse 85% 60% at 50% 30%,rgba(50,125,150,.4),transparent 70%),linear-gradient(180deg,#0b1428,var(--bg))}
.ph2::before{content:"";position:absolute;inset:0;z-index:-1;background-image:linear-gradient(rgba(50,125,150,.13) 1px,transparent 1px),linear-gradient(90deg,rgba(50,125,150,.13) 1px,transparent 1px);background-size:40px 40px;-webkit-mask:radial-gradient(ellipse 85% 75% at 50% 35%,#000 25%,transparent 78%);mask:radial-gradient(ellipse 85% 75% at 50% 35%,#000 25%,transparent 78%)}
.ph2 .aur{z-index:-1}
.ph2 h1{font-size:clamp(2rem,9vw,2.9rem);margin:6px 0 14px;animation:rise2 .8s .1s cubic-bezier(.22,1,.36,1) both}
.ph2 .hub{animation:rise2 .9s cubic-bezier(.22,1,.36,1) both}
.mini{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;max-width:420px;margin:0 auto;animation:rise2 .8s .24s cubic-bezier(.22,1,.36,1) both}
.mini>div{padding:10px 6px;border-radius:14px;background:rgba(15,23,42,.7);border:var(--bd)}
.mini strong{display:block;font-size:1.35rem;font-weight:800;line-height:1.1;background:linear-gradient(135deg,#4aa3c0,var(--a));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.mini span{font-size:.72rem;color:var(--mu);line-height:1.25;display:block;margin-top:2px}
/* orbit hub */
.hub{--R:104px;position:relative;width:min(78vw,280px);aspect-ratio:1;margin:0 auto 2px;display:grid;place-items:center}
.hub .hg{position:absolute;inset:14%;border-radius:50%;background:radial-gradient(circle,rgba(0,229,255,.34),transparent 68%);animation:pulseG 3.2s ease-in-out infinite}
.hub .hr{position:absolute;inset:0;border-radius:50%;border:1px dashed rgba(0,229,255,.42);animation:spin 40s linear infinite}
.hub .hr.r2{inset:19%;border:1px solid rgba(50,125,150,.5);animation:none}
.hub .hr.r3{inset:30%;border:1.5px solid transparent;border-top-color:var(--a);border-right-color:rgba(0,229,255,.4);animation:spin 3.4s linear infinite reverse}
.hub .hsweep{position:absolute;inset:3%;border-radius:50%;background:conic-gradient(from 0deg,rgba(0,229,255,.26),transparent 20%);-webkit-mask:radial-gradient(circle,transparent 30%,#000 31%);mask:radial-gradient(circle,transparent 30%,#000 31%);animation:spin 5s linear infinite}
.hub .hcore{position:relative;z-index:3;width:23%;aspect-ratio:1;border-radius:50%;display:grid;place-items:center;font-size:1.55rem;color:#031319;background:linear-gradient(135deg,#7df3ff,#2aa5c4);animation:glowC 2.4s ease-in-out infinite}
.hub .horb{position:absolute;inset:0;animation:spin 36s linear infinite}
.hub .sat{position:absolute;left:50%;top:50%;width:0;height:0;transform:rotate(var(--a)) translateY(calc(var(--R)*-1))}
.hub .si{position:absolute;left:-22px;top:-22px;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:#071425;border:1px solid var(--a);box-shadow:0 0 14px rgba(0,229,255,.5);color:var(--a);font-size:1.05rem;overflow:hidden;animation:unspin 36s linear infinite}
.hub .si img{width:84%;height:84%;object-fit:contain}
@keyframes unspin{from{transform:rotate(calc(var(--a)*-1))}to{transform:rotate(calc(var(--a)*-1 - 360deg))}}
@media(max-width:350px){.hub{--R:84px}.hub .si{width:38px;height:38px;left:-19px;top:-19px}}
@media(min-width:760px){.hub{--R:118px;width:320px}}
/* sticky nav: chips (services) */
.chipbar{position:sticky;top:60px;z-index:30;display:flex;gap:8px;overflow-x:auto;padding:10px 18px;background:rgba(2,6,23,.92);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:var(--bd);scrollbar-width:none;overscroll-behavior-x:contain}
.chipbar::-webkit-scrollbar{display:none}
.chipbar a{flex:none;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 15px;border-radius:99px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:var(--mu);font-weight:700;font-size:.82rem;white-space:nowrap;transition:.3s}
.chipbar a i{font-size:.85rem;color:#6cc0da;transition:.3s}
.chipbar a.on{background:linear-gradient(135deg,var(--p),var(--p6));border-color:var(--a);color:#fff;box-shadow:0 0 18px rgba(0,229,255,.35)}
.chipbar a.on i{color:#fff}
/* segmented control (products) */
.seg{position:sticky;top:60px;z-index:30;display:flex;align-items:center;gap:0;margin:0;padding:10px 18px;background:rgba(2,6,23,.92);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:var(--bd)}
.seg button{position:relative;z-index:1;flex:1;min-height:44px;border:0;background:none;color:var(--mu);font:700 .86rem Inter,system-ui,sans-serif;cursor:pointer;transition:color .3s;white-space:nowrap}
.seg button.on{color:#fff}
.seg .ind{position:absolute;left:0;top:10px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--p),var(--p6));box-shadow:0 0 18px rgba(0,229,255,.3);transition:transform .45s cubic-bezier(.22,1,.36,1),width .45s cubic-bezier(.22,1,.36,1);width:0}
.seg b{flex:none;margin-left:10px;min-width:30px;height:30px;padding:0 8px;border-radius:99px;display:grid;place-items:center;font-size:.8rem;color:var(--a);border:1px solid rgba(0,229,255,.4);background:rgba(0,229,255,.08)}
/* =================== SERVICES: big cards =================== */
.svx{position:relative;margin:18px 0;border-radius:26px;padding:18px 18px 22px;overflow:hidden;border:var(--bd);background:linear-gradient(170deg,rgba(50,125,150,.24),rgba(15,23,42,.9) 58%);scroll-margin-top:128px}
.svx::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;background:conic-gradient(from var(--ang),transparent 0 64%,var(--a) 84%,#fff 92%,transparent);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:ang 6s linear infinite}
.svx:nth-child(even)::after{animation-direction:reverse;animation-duration:7.5s}
.svx .wm{position:absolute;right:-6px;top:-18px;font-size:9.5rem;font-weight:800;letter-spacing:-.06em;line-height:1;color:rgba(0,229,255,.06);pointer-events:none;user-select:none}
.svx-art{width:min(76%,260px);aspect-ratio:1;margin:0 auto 8px;position:relative}
.svx-b{position:relative;display:flex;flex-direction:column;gap:10px}
.svx .num{font-size:.74rem;font-weight:800;letter-spacing:.16em;color:var(--a)}
.svx h2{font-size:1.45rem;line-height:1.12}
.svx .what{color:var(--tx);font-size:.95rem;text-wrap:pretty}
.facts{display:flex;flex-wrap:wrap;gap:7px}
.facts em{font-style:normal;font-size:.76rem;font-weight:700;padding:5px 12px;border-radius:99px;background:rgba(0,229,255,.1);border:1px solid rgba(0,229,255,.3);color:#cfeff7}
.pts{list-style:none;display:grid;gap:7px;margin:2px 0 6px}
.pts li{display:flex;gap:10px;font-size:.88rem;color:#e2e8f0}.pts li i{color:var(--a);margin-top:4px;font-size:.78rem}
/* staggered entrance inside revealed cards */
.svx .num,.svx h2,.svx .what,.svx .facts em,.svx .pts li,.svx .btn{opacity:0;transform:translateY(14px);transition:opacity .5s,transform .5s}
.svx.v .num,.svx.v h2,.svx.v .what,.svx.v .facts em,.svx.v .pts li,.svx.v .btn{opacity:1;transform:none}
.svx.v .num{transition-delay:.1s}.svx.v h2{transition-delay:.18s}.svx.v .what{transition-delay:.26s}
.svx.v .facts em:nth-child(1){transition-delay:.34s}.svx.v .facts em:nth-child(2){transition-delay:.4s}.svx.v .facts em:nth-child(3){transition-delay:.46s}
.svx.v .pts li:nth-child(1){transition-delay:.5s}.svx.v .pts li:nth-child(2){transition-delay:.56s}.svx.v .pts li:nth-child(3){transition-delay:.62s}.svx.v .btn{transition-delay:.7s}
.svx-art{opacity:0;transform:scale(.82) rotate(-6deg);transition:opacity .8s,transform .9s cubic-bezier(.22,1,.36,1)}.svx.v .svx-art{opacity:1;transform:none}
@media(min-width:760px){.svx{display:grid;grid-template-columns:260px 1fr;gap:26px;align-items:center;padding:28px}.svx-art{margin:0}.svx:nth-child(even){grid-template-columns:1fr 260px}.svx:nth-child(even) .svx-art{order:2}}
/* =================== PRODUCTS: cards =================== */
.plist2{display:grid;gap:14px;padding:18px 0 14px}
.px{position:relative;display:grid;grid-template-columns:128px 1fr 22px;gap:14px;align-items:center;padding:14px 14px 14px 10px;border-radius:22px;border:var(--bd);background:linear-gradient(160deg,rgba(50,125,150,.2),rgba(15,23,42,.88) 62%);overflow:hidden;transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .5s,border-color .3s;opacity:0;transform:translateY(26px) scale(.97);transition-delay:calc(var(--i)*70ms)}
.px.v{opacity:1;transform:none}
.px.out{opacity:0!important;transform:scale(.94)!important;transition-delay:0s}
.px[hidden]{display:none}
.px:active{transform:scale(.985)!important;transition-delay:0s}
.px::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;pointer-events:none;background:conic-gradient(from var(--ang),transparent 0 70%,var(--a) 86%,#fff 93%,transparent);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:ang 6.5s linear infinite;animation-delay:calc(var(--i)*-.8s)}
.px-img{position:relative;display:grid;place-items:center}
.px-img::before{content:"";position:absolute;inset:6%;border-radius:50%;background:radial-gradient(circle,rgba(50,125,150,.55),transparent 68%)}
.px-img .ring{position:absolute;inset:2%;border-radius:50%;border:1px dashed rgba(0,229,255,.5);animation:spin 18s linear infinite}
.px-img img{position:relative;width:100%;filter:drop-shadow(0 12px 14px rgba(0,0,0,.55));animation:floatY 4.4s ease-in-out infinite;animation-delay:calc(var(--i)*-.6s)}
.px-b{display:flex;flex-direction:column;gap:5px;min-width:0}
.px .k{align-self:flex-start;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;padding:3px 10px;border-radius:99px;background:rgba(0,229,255,.1);color:var(--a)}
.px h3{font-size:1.3rem}
.px p{font-size:.86rem;color:var(--mu);line-height:1.4;text-wrap:balance}
.px .tg{display:flex;flex-wrap:wrap;gap:5px;margin-top:3px}
.px .tg em{font-style:normal;font-size:.7rem;font-weight:700;padding:3px 9px;border-radius:7px;background:rgba(50,125,150,.18);border:1px solid rgba(50,125,150,.4);color:#cfe8f0}
.px .go{color:#6cc0da;font-size:.85rem;transition:transform .3s}
.px:active .go{transform:translateX(4px)}
@media(max-width:350px){.px{grid-template-columns:104px 1fr 16px;gap:10px}.px h3{font-size:1.15rem}}
@media(min-width:760px){.plist2{grid-template-columns:1fr 1fr}}
@media(prefers-reduced-motion:reduce){.px,.svx .num,.svx h2,.svx .what,.svx .facts em,.svx .pts li,.svx .btn,.svx-art{opacity:1!important;transform:none!important}}

.px .kr{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.px .rib{display:inline-flex;align-items:center;gap:5px;font-size:.66rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:3px 10px;border-radius:99px;background:linear-gradient(135deg,var(--p),var(--p6));color:#fff;box-shadow:0 0 12px rgba(0,229,255,.35);animation:glowC 2.6s ease-in-out infinite}
.px .rib i{color:#7df3ff}

/* FIX: the sticky header must stick at the page level (#hdr wraps it), otherwise it scrolls away
   and the sticky chip/segment bars float with a gap above them */
#hdr{position:sticky;top:0;z-index:60}
header.top{position:relative;top:auto}
.chipbar,.seg{top:60px}

/* home hero: no background grid */
.hero2::before{display:none}

/* no background grids anywhere */
.ph2::before,.hero2::before{display:none}

/* data recovery: no spinning white ring */
.a-dr .drive .spin{display:none}

/* ===== services animation fixes ===== */
/* pause EVERYTHING (incl. pseudo-elements) of off-screen animated blocks */
.off,.off *,.off::before,.off::after,.off *::before,.off *::after{animation-play-state:paused!important}
/* data recovery: files rise from BEHIND the drive instead of overlapping it */
.a-dr .drive{z-index:3}
.a-dr .f1,.a-dr .f2,.a-dr .f3{z-index:1;top:38%}
@keyframes rise{0%{opacity:0;transform:translateY(34px) scale(.6)}25%{opacity:1}100%{opacity:0;transform:translateY(-62px) scale(1)}}
/* radar blips: soft cyan instead of hard white */
.a-es .bl{background:#aef6ff}

/* ===== products: slide view + view toggle ===== */
.vt-row{display:flex;justify-content:flex-end;padding-top:12px;padding-bottom:0}
.vt{display:inline-flex;padding:3px;border-radius:12px;background:rgba(15,23,42,.8);border:var(--bd)}
.vt button{min-height:40px;padding:0 16px;border:0;border-radius:9px;background:none;color:var(--mu);font:700 .8rem Inter,system-ui,sans-serif;cursor:pointer;transition:.3s}
.vt button.on{background:linear-gradient(135deg,var(--p),var(--p6));color:#fff;box-shadow:0 0 14px rgba(0,229,255,.3)}
.plist2.slide{display:flex;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -18px;padding:14px 18px 10px;scroll-padding:0 18px;scrollbar-width:none;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
.plist2.slide::-webkit-scrollbar{display:none}
.plist2.slide .px{flex:0 0 min(80%,310px);scroll-snap-align:start;grid-template-columns:1fr;justify-items:center;text-align:center;padding:20px 16px 22px;gap:8px}
.plist2.slide .px[hidden]{display:none}
.plist2.slide .px-img{width:72%;max-width:210px}
.plist2.slide .px-b{align-items:center;width:100%}
.plist2.slide .kr,.plist2.slide .tg{justify-content:center}
.plist2.slide .px .k{align-self:center}
.plist2.slide .px h3{font-size:1.45rem}
.plist2.slide .px p{font-size:.92rem}
.plist2.slide .go{display:none}
.pdots{display:flex;justify-content:center;gap:7px;padding:4px 0 6px;min-height:24px}
.pdots button{width:7px;height:7px;border-radius:99px;border:0;background:rgba(255,255,255,.22);padding:0;transition:width .4s cubic-bezier(.22,1,.36,1),background .3s}
.pdots button.on{width:22px;background:linear-gradient(90deg,var(--p),var(--a));box-shadow:0 0 10px rgba(0,229,255,.5)}
.pwrap{padding-bottom:0}
@media(min-width:760px){.plist2.slide .px{flex-basis:300px}}

/* ===== services: slide view ===== */
.svlist.slide{display:flex;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 -18px;padding:14px 18px 10px;scroll-padding:0 18px;scrollbar-width:none;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;align-items:stretch}
.svlist.slide::-webkit-scrollbar{display:none}
.svlist.slide .svx{flex:0 0 min(88%,350px);scroll-snap-align:start;margin:0}
.svlist.slide .svx-b{height:100%}
.svlist.slide .svx .btn{margin-top:auto}
.svlist.slide .svx .wm{font-size:8rem}
@media(min-width:760px){
 .svlist.slide .svx{display:flex;flex-direction:column;grid-template-columns:none;padding:18px;flex-basis:340px}
 .svlist.slide .svx:nth-child(even) .svx-art{order:0}
 .svlist.slide .svx-art{margin:0 auto 8px}
}
.svlist.slide .svx .pts{display:none}
.svlist.slide .svx-art{width:min(70%,230px)}

/* home showcase: focused product bigger */
.cfi{width:min(68%,270px)}
@media(max-height:780px) and (max-width:700px){.cfi{width:60%}}
/* products: calmer "Made to order" badge (no pulsing glow) */
.px .rib{animation:none;box-shadow:none;background:rgba(50,125,150,.35);border:1px solid rgba(0,229,255,.28);color:#d9f6fb}
.px .rib i{color:#7df3ff}
/* products: "Made to order" glows softly, but only INSIDE its own border (inset light, no outer halo) */
.px .rib{overflow:hidden;animation:ribGlow 3.2s ease-in-out infinite}
@keyframes ribGlow{
 0%,100%{box-shadow:inset 0 0 5px rgba(0,229,255,.16);border-color:rgba(0,229,255,.28);background:rgba(50,125,150,.34)}
 50%{box-shadow:inset 0 0 11px rgba(0,229,255,.42);border-color:rgba(0,229,255,.5);background:rgba(50,125,150,.48)}
}

/* ===== orbit hub v2: bigger product thumbs + compositor-only smooth rotation ===== */
.hub{--s:44px;--R:min(30vw,108px)}
.hub.hp{--s:min(16.5vw,62px);--R:min(31.5vw,111px)}
.hub .horb{will-change:transform;animation:spin 44s linear infinite;backface-visibility:hidden}
.hub .cu{position:absolute;left:0;top:0;width:0;height:0;transform:rotate(calc(var(--a)*-1))}
.hub .si{left:calc(var(--s)/-2);top:calc(var(--s)/-2);width:var(--s);height:var(--s);animation:unspin2 44s linear infinite;will-change:transform;backface-visibility:hidden;transform:translateZ(0)}
.hub .si img{width:96%;height:96%;object-fit:contain}
.hub.hp .si{background:radial-gradient(circle,#10304a,#071425 75%)}
@keyframes unspin2{to{transform:rotate(-360deg)}}
.hub .hsweep,.hub .hr,.hub .hg{will-change:transform}
@media(min-width:760px){.hub{--R:118px}.hub.hp{--s:66px;--R:122px}}

/* services hub: same bigger thumbs as products (icons instead of photos) */
.hub.hs .si{font-size:calc(var(--s)*.46)}
.hub.hs .si i{filter:drop-shadow(0 0 6px rgba(0,229,255,.55))}

/* ===================== SMOOTHNESS PASS (compositor-only animation) =====================
   Old: card border light = animating a registered @property (--ang) => repaint EVERY frame.
   New: a big conic-gradient layer simply ROTATES behind an opaque inner face => GPU transform only. */
.px,.svx,.sc{isolation:isolate}
.px::before,.svx::before,.sc::before{content:"";position:absolute;z-index:0;pointer-events:none;will-change:transform;
 background:conic-gradient(transparent 0 66%,var(--a) 84%,#fff 92%,transparent);animation:spin 6.5s linear infinite}
.px::before{inset:-100%;animation-delay:calc(var(--i)*-.8s)}
.svx::before,.sc::before{inset:-60%}
.svx:nth-child(even)::before,.sc:nth-child(even)::before{animation-direction:reverse;animation-duration:7.5s}
/* opaque inner face (replaces the translucent gradient + masked ring) */
.px::after,.svx::after,.sc::after{content:"";position:absolute;inset:1.5px;z-index:0;pointer-events:none;padding:0;
 -webkit-mask:none;mask:none;animation:none}
.px{background:#0b1626}.px::after{border-radius:20.5px;background:linear-gradient(160deg,#0c1e30,#0d1528 62%)}
.svx{background:#0d1527}.svx::after{border-radius:24.5px;background:linear-gradient(170deg,#0e2336,#0e1528 58%)}
.sc{background:#0d1427}.sc::after{border-radius:20.5px;background:linear-gradient(170deg,#0c2031,#0d1427 60%)}
.px>*,.sc>*{position:relative;z-index:1}
.svx>*:not(.wm){position:relative;z-index:1}.svx .wm{z-index:1}
/* product images: no filter on animated element; static soft shadow instead */
.px-img img{filter:none;will-change:transform;backface-visibility:hidden}
.px-img::after{content:"";position:absolute;left:18%;right:18%;bottom:6%;height:12%;border-radius:50%;background:radial-gradient(ellipse,rgba(0,0,0,.5),transparent 70%);z-index:0}
.px-img img{z-index:1}
.px-img .ring{will-change:transform}
/* sticky bars: solid instead of live blur (blur re-renders on every scroll frame) */
header.top,.chipbar,.seg{-webkit-backdrop-filter:none;backdrop-filter:none}
header.top{background:rgba(2,6,23,.97)}
.chipbar,.seg{background:rgba(2,6,23,.97)}
/* smoother scroller on touch */
.plist2.slide,.svlist.slide,.scs{will-change:scroll-position;-webkit-overflow-scrolling:touch}

/* "Made to order": glow = opacity of an inner-light layer (GPU), still strictly inside the badge */
.px .rib{position:relative;overflow:hidden;animation:none;box-shadow:inset 0 0 5px rgba(0,229,255,.16);background:rgba(50,125,150,.34);border:1px solid rgba(0,229,255,.3)}
.px .rib::after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 11px rgba(0,229,255,.5);background:rgba(0,229,255,.1);opacity:0;animation:ribPulse 3.2s ease-in-out infinite;pointer-events:none;z-index:0;padding:0;-webkit-mask:none;mask:none}
.px .rib>*{position:relative}
@keyframes ribPulse{0%,100%{opacity:0}50%{opacity:1}}
/* quote button: static glow + transform-only sheen */
.glowbtn{animation:none;box-shadow:0 0 26px rgba(50,125,150,.55)}
.glowbtn::after{left:0;width:60px;animation:sheen2 3.4s ease-in-out infinite;transform:translateX(-120px) skewX(-18deg)}
@keyframes sheen2{0%,55%{transform:translateX(-120px) skewX(-18deg)}100%{transform:translateX(650%) skewX(-18deg)}}

/* product image stage: perfect circles, never clipped by the card edge */
.px-img{aspect-ratio:1;align-self:center}
.px-img::before{inset:auto;left:50%;top:50%;width:86%;aspect-ratio:1;margin:-43% 0 0 -43%;border-radius:50%;background:radial-gradient(circle,rgba(50,125,150,.6),rgba(50,125,150,.12) 62%,transparent 72%)}
.px-img .ring{inset:auto;left:50%;top:50%;width:100%;aspect-ratio:1;margin:-50% 0 0 -50%;border-radius:50%;border:1px dashed rgba(0,229,255,.5)}
.px-img img{width:96%}
.plist2.slide .px{padding:26px 16px 22px}
.plist2.slide .px-img{width:68%;max-width:200px;margin:4px 0 6px}
.plist2.slide .px-img img{width:100%}
.plist2.slide .px h3{margin-top:2px}

/* ===================== IMAGE MOTION: sub-pixel smooth ===================== */
/* tiny slow translations get snapped to whole pixels on phones (looks like stepping).
   Bigger amplitude + a gentle scale + matrix interpolation keeps every frame on a fractional position. */
@keyframes floatY{
 0%,100%{transform:translate3d(0,0,0) scale(1) rotate(.01deg)}
 50%{transform:translate3d(0,-9px,0) scale(1.035) rotate(.01deg)}
}
.px-img img,.cfi .fl{animation-timing-function:cubic-bezier(.45,0,.55,1);animation-duration:5.2s}
.px-img{perspective:800px}
.px-img img{transform-origin:50% 60%;image-rendering:auto}
/* border-light layers: just big enough to cover the card, not 3x its size (GPU fill-rate) */
.px::before{inset:auto;left:50%;top:50%;width:560px;height:560px;margin:-280px 0 0 -280px}
.svx::before{inset:auto;left:50%;top:50%;width:760px;height:760px;margin:-380px 0 0 -380px}
.sc::before{inset:auto;left:50%;top:50%;width:520px;height:520px;margin:-260px 0 0 -260px}
/* no forced scroller layers */
.plist2.slide,.svlist.slide,.scs{will-change:auto}
