:root{
  --ink:#0f172a; --ink2:#1e293b; --ink3:#334155;
  --mid:#475569; --faint:#64748b; --line:#e2e8f0;
  --bg:#ffffff; --bg2:#f8fafc; --bg3:#f1f5f9;
  --blue:#2563eb; --blue2:#1d4ed8; --blueT:rgba(37,99,235,.08);
  --green:#16a34a; --red:#dc2626;
  --r:6px;
  --transition-theme:background 0.5s ease,color 0.5s ease,border-color 0.5s ease;
  /* 全站基础字号提升 */
  --fs-base:1rem;
  --fs-sm:0.875rem;
  --fs-xs:0.8rem;
  --fs-xxs:0.75rem;
}

body.night{
  --ink:#e2e8f0; --ink2:#cbd5e1; --ink3:#94a3b8;
  --mid:#94a3b8; --faint:#64748b; --line:#1e3a5f;
  --bg:#060d1a; --bg2:#0d1526; --bg3:#162033;
  --blue:#60a5fa; --blue2:#93c5fd; --blueT:rgba(96,165,250,.12);
  --green:#4ade80; --red:#f87171;
}

*{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;font-size:16px;}
body{
  background:var(--bg);color:var(--ink);
  font-family:'Noto Sans SC',sans-serif;font-weight:400;
  line-height:1.8;-webkit-font-smoothing:antialiased;
  overflow-x:hidden;transition:var(--transition-theme);
  font-size:var(--fs-base);
}
a{text-decoration:none;color:inherit;}
::-webkit-scrollbar{width:4px;}
::-webkit-scrollbar-thumb{background:var(--line);}

/* ─── PARTICLES ─── */
#particles-js{position:fixed;width:100%;height:100%;top:0;left:0;z-index:0;pointer-events:none;}

/* ─── NAV ─── */
#nav{
  position:fixed;top:0;left:0;right:0;z-index:500;
  height:68px;display:flex;align-items:center;justify-content:space-between;
  padding:0 5vw;
  background:rgba(255,255,255,.95);backdrop-filter:blur(16px);
  border-bottom:1px solid var(--line);
  transition:box-shadow .2s,background .5s ease,border-color .5s ease;
}
body.night #nav{background:rgba(6,13,26,.98);}
body.night #hero{background:rgba(6,13,26,0.85);}
#nav.shadow{box-shadow:0 2px 20px rgba(0,0,0,.06);}
body.night #nav.shadow{box-shadow:0 2px 20px rgba(0,0,0,.3);}
.nav-logo{display:flex;align-items:center;gap:8px;}
.nav-logo-box{width:34px;height:34px;background:var(--ink);display:flex;align-items:center;justify-content:center;font-family:'Noto Serif SC',serif;font-size:.9rem;font-weight:700;color:var(--bg);transition:var(--transition-theme);}
.nav-logo-text{font-family:'Noto Serif SC',serif;font-weight:700;font-size:1.05rem;color:var(--ink);letter-spacing:.02em;transition:color .3s;}
.nav-logo-text em{color:var(--blue);font-style:normal;}
.nav-menu{display:flex;align-items:center;gap:.2rem;}
.nav-menu a{padding:7px 14px;font-size:.85rem;font-weight:400;color:var(--mid);border-radius:var(--r);transition:all .15s;letter-spacing:.03em;}
.nav-menu a:hover,.nav-menu a.active{color:var(--ink);background:var(--bg3);}
.nav-right{display:flex;align-items:center;gap:.6rem;}
.btn-login{padding:8px 20px;font-size:.85rem;font-weight:400;color:var(--ink);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;background:var(--bg);transition:all .3s;font-family:inherit;}
.btn-login:hover{border-color:var(--ink);}
.btn-cta{padding:9px 22px;font-size:.85rem;font-weight:500;color:#fff;background:var(--blue);border-radius:var(--r);cursor:pointer;border:none;font-family:inherit;transition:background .15s;}
.btn-cta:hover{background:var(--blue2);}
#theme-toggle{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--bg);cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;transition:all .3s;flex-shrink:0;}
#theme-toggle:hover{border-color:var(--blue);transform:rotate(15deg);}
.nav-ham{display:none;cursor:pointer;padding:4px;}
.nav-ham span{display:block;width:22px;height:2px;background:var(--ink);margin:5px 0;transition:.2s;}

/* ─── HERO ─── */
#hero{padding:124px 5vw 80px;display:grid;grid-template-columns:1fr 1fr;gap:4rem;align-items:center;min-height:92vh;background:linear-gradient(135deg,transparent 60%,rgba(37,99,235,.03) 100%);position:relative;z-index:1;}
.hero-l .eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:.75rem;font-weight:500;letter-spacing:.16em;color:var(--blue);text-transform:uppercase;margin-bottom:1.5rem;background:var(--blueT);padding:6px 14px;border-radius:20px;}
.hero-l h1{font-family:'Noto Serif SC',serif;font-weight:900;font-size:clamp(2.8rem,5vw,4.5rem);line-height:1.08;color:var(--ink);margin-bottom:1.2rem;letter-spacing:-.01em;transition:color .3s;}
.hero-l h1 span{color:var(--blue);}
.hero-l p{font-size:1rem;color:var(--mid);line-height:1.9;max-width:480px;margin-bottom:2.2rem;font-weight:400;}
.hero-btns{display:flex;gap:.8rem;flex-wrap:wrap;}
.hero-btns .b1{padding:13px 30px;background:var(--blue);color:#fff;border-radius:var(--r);font-size:.9rem;font-weight:500;transition:background .15s;}
.hero-btns .b1:hover{background:var(--blue2);}
.hero-btns .b2{padding:13px 30px;border:1px solid var(--line);color:var(--ink);border-radius:var(--r);font-size:.9rem;transition:all .15s;}
.hero-btns .b2:hover{border-color:var(--ink);}
.hero-stats{display:flex;gap:2rem;margin-top:2.5rem;padding-top:2rem;border-top:1px solid var(--line);flex-wrap:wrap;}
.hs-n{font-family:'Noto Serif SC',serif;font-size:1.9rem;font-weight:700;color:var(--ink);line-height:1;transition:color .3s;}
.hs-l{font-size:.78rem;color:var(--faint);margin-top:4px;letter-spacing:.04em;}
.hero-r{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;gap:1rem;}
.hero-card{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);padding:22px;transition:box-shadow .2s,background .3s,border-color .3s;position:relative;z-index:1;}
.hero-card:hover{box-shadow:0 4px 20px rgba(0,0,0,.07);}
body.night .hero-card:hover{box-shadow:0 4px 24px rgba(96,165,250,.1);}
.hero-card.span2{grid-column:1/-1;}
.hc-icon{font-size:1.6rem;margin-bottom:.8rem;display:block;}
.hc-title{font-size:.95rem;font-weight:500;color:var(--ink);margin-bottom:.35rem;transition:color .3s;}
.hc-sub{font-size:.82rem;color:var(--mid);}
.hc-badge{display:inline-block;font-size:.7rem;padding:3px 10px;border-radius:3px;background:var(--blueT);color:var(--blue);font-weight:500;margin-top:.6rem;}

/* ─── TICKER ─── */
.ticker{background:var(--ink);padding:12px 0;overflow:hidden;white-space:nowrap;transition:background .3s;position:relative;z-index:1;}
body.night .ticker{background:#0d1526;border-top:1px solid #1e3a5f;border-bottom:1px solid #1e3a5f;}
.ticker-t{display:inline-block;animation:tick 25s linear infinite;}
.ticker-t span{font-size:.75rem;letter-spacing:.14em;color:rgba(255,255,255,.4);padding:0 2rem;text-transform:uppercase;}
.ticker-t span b{color:rgba(255,255,255,.7);font-weight:500;}
body.night .ticker-t span{color:rgba(148,163,184,.5);}
body.night .ticker-t span b{color:rgba(148,163,184,.85);}
@keyframes tick{from{transform:translateX(0);}to{transform:translateX(-50%);}}

/* ─── SECTION BASE ─── */
section{padding:96px 5vw;position:relative;z-index:1;transition:background .3s;}
body.night section{background:rgba(6,13,26,0.92);}
body.night #services{background:rgba(13,21,38,0.95);}
body.night #ai{background:rgba(13,21,38,0.95);}
body.night #about{background:rgba(6,13,26,0.92);}
body.night #map-section{background:rgba(6,13,26,0.95);}
body.night footer{background:rgba(13,21,38,0.97);}
.sec-eyebrow{font-size:.72rem;font-weight:500;letter-spacing:.2em;color:var(--blue);text-transform:uppercase;margin-bottom:.8rem;}
.sec-title{font-family:'Noto Serif SC',serif;font-size:clamp(1.9rem,3vw,2.7rem);font-weight:700;color:var(--ink);margin-bottom:.8rem;line-height:1.2;transition:color .3s;}
.sec-sub{font-size:.95rem;color:var(--mid);line-height:1.9;max-width:500px;font-weight:400;}
.sec-header{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;flex-wrap:wrap;margin-bottom:3rem;}

/* ─── SERVICES ─── */
#services{background:var(--bg2);}
.svc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;}
.svc{background:var(--bg);padding:32px 28px;position:relative;overflow:hidden;transition:background .2s;cursor:default;}
.svc:hover{background:var(--ink);}
.svc:hover .svc-name{color:#fff;}
.svc:hover .svc-desc{color:rgba(255,255,255,.6);}
.svc:hover .svc-ico{filter:grayscale(1) brightness(2);}
.svc-n{position:absolute;right:16px;top:12px;font-size:2.6rem;font-weight:700;color:var(--bg3);line-height:1;transition:color .2s;}
.svc:hover .svc-n{color:rgba(255,255,255,.06);}
body.night .svc:hover{background:#1e3a5f;}
body.night .svc:hover .svc-name{color:#e2e8f0;}
body.night .svc:hover .svc-desc{color:#94a3b8;}
body.night .svc:hover .svc-n{color:rgba(255,255,255,.04);}
body.night .svc:hover .svc-ico{filter:none;}
.svc-ico{font-size:1.7rem;margin-bottom:1rem;display:block;transition:.2s;}
.svc-name{font-size:.95rem;font-weight:500;color:var(--ink);margin-bottom:.5rem;transition:color .2s;}
.svc-desc{font-size:.82rem;color:var(--mid);line-height:1.8;transition:color .2s;}

/* ─── MAP ─── */
#map-section{background:var(--bg);padding:96px 0 0;}
.map-section-head{padding:0 5vw 2.5rem;}
.map-wrap{display:flex;height:560px;border-top:1px solid var(--line);}
#leaflet-map{flex:1;z-index:1;}
.map-panel{width:340px;flex-shrink:0;background:var(--bg);border-left:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden;transition:background .3s,border-color .3s;}
.map-panel-head{padding:20px;border-bottom:1px solid var(--line);font-weight:500;font-size:.92rem;color:var(--ink);}
.map-panel-head span{font-size:.78rem;color:var(--mid);font-weight:300;margin-left:6px;}
.project-list{overflow-y:auto;flex:1;}
.proj-item{padding:16px 20px;border-bottom:1px solid var(--line);cursor:pointer;transition:background .15s;}
.proj-item:hover,.proj-item.active{background:var(--blueT);}
.proj-tag{font-size:.68rem;letter-spacing:.1em;font-weight:500;color:var(--blue);text-transform:uppercase;margin-bottom:4px;}
.proj-name{font-size:.9rem;font-weight:500;color:var(--ink);margin-bottom:3px;}
.proj-loc{font-size:.78rem;color:var(--faint);}
.proj-item .proj-dot{width:6px;height:6px;border-radius:50%;background:var(--blue);display:inline-block;margin-right:5px;vertical-align:middle;}

/* ─── WORK DETAIL DRAWER ─── */
#work-drawer{position:fixed;top:0;right:-500px;width:460px;height:100vh;background:var(--bg);z-index:600;box-shadow:-4px 0 30px rgba(0,0,0,.1);display:flex;flex-direction:column;transition:right .3s ease,background .3s;overflow:hidden;}
#work-drawer.open{right:0;}
.drawer-head{padding:20px 24px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;}
.drawer-head h3{font-family:'Noto Serif SC',serif;font-weight:700;font-size:1.1rem;color:var(--ink);}
.drawer-close{width:32px;height:32px;border-radius:50%;background:var(--bg3);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.1rem;color:var(--mid);transition:.15s;}
.drawer-close:hover{background:var(--line);}
.drawer-body{flex:1;overflow-y:auto;padding:24px;}
.drawer-video{width:100%;aspect-ratio:16/9;background:var(--ink2);border-radius:var(--r);display:flex;align-items:center;justify-content:center;margin-bottom:1.2rem;overflow:hidden;position:relative;cursor:pointer;}
.drawer-video::after{content:'▶';font-size:2.5rem;color:rgba(255,255,255,.8);position:absolute;}
.dv-overlay{position:absolute;inset:0;background:linear-gradient(135deg,#1e293b,#0f172a);display:flex;align-items:center;justify-content:center;font-size:.8rem;color:rgba(255,255,255,.4);letter-spacing:.1em;}
.drawer-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:1.2rem;}
.dtag{font-size:.72rem;padding:4px 10px;border-radius:3px;background:var(--blueT);color:var(--blue);font-weight:500;}
.drawer-meta{background:var(--bg2);border-radius:var(--r);padding:14px 16px;margin-bottom:1.2rem;}
.dm-row{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--line);font-size:.85rem;}
.dm-row:last-child{border-bottom:none;}
.dm-label{color:var(--mid);}
.dm-val{color:var(--ink);font-weight:400;}
.drawer-desc{font-size:.88rem;color:var(--mid);line-height:1.9;}

/* ─── AI TRAINING ─── */
#ai{background:var(--bg2);border-top:1px solid var(--line);}
.ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;margin-top:2.5rem;}
.ai-card{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);padding:34px;transition:box-shadow .2s,background .3s,border-color .3s;}
.ai-card:hover{box-shadow:0 4px 24px rgba(0,0,0,.07);}
body.night .ai-card:hover{box-shadow:0 4px 24px rgba(96,165,250,.08);}
.ai-card-icon{font-size:2.1rem;margin-bottom:1rem;display:block;}
.ai-card-title{font-family:'Noto Serif SC',serif;font-weight:700;font-size:1.15rem;margin-bottom:.5rem;color:var(--ink);transition:color .3s;}
.ai-card-sub{font-size:.88rem;color:var(--mid);line-height:1.85;margin-bottom:1.2rem;}
.ai-list{list-style:none;margin-bottom:1.5rem;}
.ai-list li{font-size:.85rem;color:var(--mid);padding:6px 0;border-bottom:1px solid var(--line);display:flex;gap:8px;}
.ai-list li::before{content:'✓';color:var(--green);font-weight:700;flex-shrink:0;}
.ai-cta{display:inline-flex;align-items:center;gap:6px;font-size:.85rem;font-weight:500;color:var(--blue);cursor:pointer;background:none;border:none;font-family:inherit;padding:0;transition:gap .15s;}
.ai-cta:hover{gap:10px;}

/* ─── ABOUT ─── */
#about{background:var(--bg);}
.about-grid{display:grid;grid-template-columns:3fr 2fr;gap:5rem;align-items:start;margin-top:2.5rem;}
.about-body p{font-size:.95rem;color:var(--mid);margin-bottom:1rem;line-height:1.95;}
.about-quote{border-left:3px solid var(--blue);padding:18px 22px;background:var(--blueT);font-size:.95rem;color:var(--ink);line-height:1.85;margin:1.5rem 0;border-radius:0 var(--r) var(--r) 0;transition:color .3s,background .3s;}
.about-r{display:flex;flex-direction:column;gap:1rem;}
.about-val{background:var(--bg2);border:1px solid var(--line);border-radius:var(--r);padding:26px;text-align:center;transition:background .3s,border-color .3s;}
.av-n{font-family:'Noto Serif SC',serif;font-size:2.1rem;font-weight:700;color:var(--blue);line-height:1;}
.av-l{font-size:.78rem;color:var(--mid);margin-top:4px;}

/* ─── CONTACT SECTION ─── */
#contact-section{background:var(--bg2);border-top:1px solid var(--line);padding:96px 5vw;position:relative;z-index:1;transition:background .3s;}
body.night #contact-section{background:rgba(13,21,38,0.95);}
.contact-grid{display:grid;grid-template-columns:1fr 1.6fr;gap:4rem;align-items:start;margin-top:2.5rem;}
.contact-info{display:flex;flex-direction:column;gap:1.2rem;}
.contact-card{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);padding:22px 24px;transition:border-color .2s,background .3s;}
.contact-card:hover{border-color:var(--blue);}
.contact-card-icon{font-size:1.5rem;margin-bottom:.6rem;}
.contact-card-label{font-size:.72rem;font-weight:500;letter-spacing:.1em;color:var(--blue);text-transform:uppercase;margin-bottom:.3rem;}
.contact-card-val{font-size:.92rem;color:var(--ink);font-weight:400;}
.contact-card-sub{font-size:.78rem;color:var(--mid);margin-top:.2rem;}
/* 原生需求表单区 */
.native-form-wrap {
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: var(--r);
  overflow: hidden;
  position: relative;
  transition: background 0.3s, border-color 0.3s;
}
.nf-header {
  padding: 16px 20px;
  border-bottom: 1px solid var(--line);
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--bg2);
  transition: background 0.3s, border-color 0.3s;
}
.nf-header-icon { font-size: 1.2rem; }
.nf-header-text { font-size: 0.92rem; font-weight: 500; color: var(--ink); }
.nf-header-sub { font-size: 0.78rem; color: var(--mid); margin-left: auto; }
.nf-body { padding: 26px 24px; }

/* ─── CTA STRIP ─── */
.cta-strip{background:var(--ink);padding:72px 5vw;display:flex;align-items:center;justify-content:space-between;gap:2rem;flex-wrap:wrap;position:relative;z-index:1;transition:background .3s;}
.cta-strip h2{font-family:'Noto Serif SC',serif;font-size:clamp(1.7rem,3vw,2.3rem);font-weight:700;color:#fff;max-width:500px;line-height:1.3;}
.cta-strip p{color:rgba(255,255,255,.65);font-size:.92rem;margin-top:.5rem;}
.cta-strip-btns{display:flex;gap:.8rem;}
.cta-strip-btns .b1{padding:14px 32px;background:var(--blue);color:#fff;border-radius:var(--r);font-size:.9rem;font-weight:500;cursor:pointer;border:none;font-family:inherit;transition:background .15s;}
.cta-strip-btns .b1:hover{background:var(--blue2);}
.cta-strip-btns .b2{padding:14px 32px;border:2px solid rgba(255,255,255,.55);color:#ffffff;border-radius:var(--r);font-size:.9rem;cursor:pointer;font-family:inherit;transition:all .15s;background:transparent;}
.cta-strip-btns .b2:hover{border-color:#fff;background:rgba(255,255,255,.08);}
body.night .cta-strip{background:#060d1a;border-top:1px solid #1e3a5f;border-bottom:1px solid #1e3a5f;}
body.night .cta-strip h2{color:#f1f5f9;}
body.night .cta-strip p{color:#94a3b8;}
body.night .cta-strip-btns .b2{color:#f1f5f9;border-color:rgba(241,245,249,.5);}

/* ─── FOOTER ─── */
footer{background:var(--bg2);border-top:1px solid var(--line);padding:52px 5vw 30px;position:relative;z-index:1;transition:background .3s,border-color .3s;}
.footer-top{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:3rem;margin-bottom:3rem;}
.footer-brand{font-family:'Noto Serif SC',serif;font-weight:700;font-size:1.05rem;color:var(--ink);margin-bottom:.7rem;}
.footer-brand em{color:var(--blue);font-style:normal;}
.footer-desc{font-size:.85rem;color:var(--mid);line-height:1.85;margin-bottom:1rem;}
.footer-contact-item{font-size:.82rem;color:var(--mid);margin-bottom:.4rem;}
.footer-col-title{font-size:.75rem;font-weight:700;letter-spacing:.12em;color:var(--ink);text-transform:uppercase;margin-bottom:1rem;}
.footer-link{display:block;font-size:.85rem;color:var(--mid);margin-bottom:.6rem;cursor:pointer;transition:color .15s;}
.footer-link:hover{color:var(--blue);}
.footer-bottom{border-top:1px solid var(--line);padding-top:1.5rem;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;}
.footer-copy{font-size:.78rem;color:var(--faint);}
.footer-legal{display:flex;gap:1.5rem;flex-wrap:wrap;}
.footer-legal a{font-size:.78rem;color:var(--faint);cursor:pointer;transition:color .15s;}
.footer-legal a:hover{color:var(--mid);}

/* ─── MODAL BASE ─── */
.overlay{position:fixed;inset:0;background:rgba(15,23,42,.55);z-index:800;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s;backdrop-filter:blur(4px);}
.overlay.show{opacity:1;pointer-events:all;}
.modal{background:var(--bg);border-radius:12px;width:440px;max-width:95vw;box-shadow:0 20px 60px rgba(0,0,0,.15);overflow:hidden;transition:background .3s;}
.modal-head{padding:26px 26px 0;display:flex;justify-content:space-between;align-items:center;}
.modal-head h2{font-family:'Noto Serif SC',serif;font-size:1.2rem;font-weight:700;color:var(--ink);}
.modal-close{width:32px;height:32px;border-radius:50%;background:var(--bg3);border:none;cursor:pointer;font-size:1rem;color:var(--mid);display:flex;align-items:center;justify-content:center;}
.modal-tabs{display:flex;gap:0;padding:22px 26px 0;border-bottom:1px solid var(--line);}
.mtab{padding:9px 0;margin-right:26px;font-size:.9rem;font-weight:400;color:var(--faint);cursor:pointer;border-bottom:2px solid transparent;transition:.15s;margin-bottom:-1px;}
.mtab.on{color:var(--blue);border-bottom-color:var(--blue);font-weight:500;}
.modal-body{padding:26px;}
.modal-body.hidden{display:none;}
.mrow{margin-bottom:1.1rem;}
.mrow label{display:block;font-size:.75rem;font-weight:500;letter-spacing:.08em;color:var(--mid);text-transform:uppercase;margin-bottom:6px;}
.mrow input,.mrow select,.mrow textarea{width:100%;padding:11px 14px;border:1px solid var(--line);border-radius:var(--r);font-family:inherit;font-size:.9rem;color:var(--ink);outline:none;transition:border .15s;background:var(--bg);}
.mrow input:focus,.mrow select:focus,.mrow textarea:focus{border-color:var(--blue);}
.mrow textarea{min-height:80px;resize:vertical;}
.mrow select{appearance:none;}
.code-row{display:flex;gap:8px;}
.code-row input{flex:1;}
.get-code{padding:11px 15px;background:var(--bg3);border:1px solid var(--line);border-radius:var(--r);font-size:.8rem;font-weight:500;color:var(--ink);cursor:pointer;white-space:nowrap;transition:.15s;font-family:inherit;}
.get-code:hover{background:var(--line);}
.get-code:disabled{opacity:.5;cursor:not-allowed;}
.msubmit{width:100%;padding:13px;background:var(--blue);color:#fff;border:none;border-radius:var(--r);font-size:.9rem;font-weight:500;cursor:pointer;font-family:inherit;transition:background .15s;margin-top:.5rem;}
.msubmit:hover{background:var(--blue2);}
.modal-tip{text-align:center;font-size:.8rem;color:var(--faint);margin-top:.9rem;}
.modal-tip a{color:var(--blue);cursor:pointer;}
/* 忘记密码链接 */
.forgot-link{text-align:right;margin-top:-.4rem;margin-bottom:.6rem;}
.forgot-link a{font-size:.78rem;color:var(--blue);cursor:pointer;}
.forgot-link a:hover{text-decoration:underline;}
.msg-ok{display:none;text-align:center;padding:16px 0;font-size:.88rem;color:var(--green);}
.msg-err{display:none;text-align:center;padding:10px 14px;font-size:.82rem;color:var(--red);background:rgba(220,38,38,.06);border-radius:var(--r);margin-bottom:.8rem;}

/* ─── QUOTE MODAL ─── */
.qmodal{width:620px;max-height:88vh;overflow-y:auto;}
.qform-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;}
.qform-grid .full{grid-column:1/-1;}
.tencent-hint{background:var(--bg2);border:1px solid var(--line);border-radius:var(--r);padding:13px 16px;font-size:.8rem;color:var(--mid);margin-bottom:1rem;display:flex;gap:8px;align-items:flex-start;}
.tencent-hint::before{content:'💡';flex-shrink:0;}

/* ─── LEGAL MODALS ─── */
.legal-modal{width:660px;max-height:82vh;}
.legal-body{padding:26px;overflow-y:auto;max-height:62vh;font-size:.88rem;color:var(--mid);line-height:1.95;}
.legal-body h3{font-size:.95rem;font-weight:700;color:var(--ink);margin:1.3rem 0 .5rem;}
.legal-body h3:first-child{margin-top:0;}

/* ─── ANIMATIONS ─── */
.fade{opacity:0;transform:translateY(16px);transition:opacity .5s ease,transform .5s ease;}
.fade.in{opacity:1;transform:none;}

/* ─── MOBILE ─── */
@media(max-width:960px){
  #hero{grid-template-columns:1fr;padding-top:104px;}
  .hero-r{display:none;}
  .footer-top{grid-template-columns:1fr 1fr;}
  .svc-grid{grid-template-columns:1fr 1fr;}
  .about-grid{grid-template-columns:1fr;}
  .ai-grid{grid-template-columns:1fr;}
  .contact-grid{grid-template-columns:1fr;}
  .map-panel{display:none;}
  #work-drawer{width:95vw;right:-100vw;}
  #work-drawer.open{right:0;}
  .nav-menu{display:none;}
  .nav-ham{display:block;}
}
@media(max-width:600px){
  .svc-grid{grid-template-columns:1fr;}
  .footer-top{grid-template-columns:1fr;}
  .qform-grid{grid-template-columns:1fr;}
  .cta-strip{flex-direction:column;}
}