/* 联系我们：按窗口高度排布，优先保证联系信息和地图一屏可见。 */
body.ct {
  --ct-ink: #1d1d1f;
  --ct-body: #424245;
  --ct-muted: #86868b;
  --ct-line: #e4e7ec;
  --ct-blue: #0066cc;
  min-height: 100svh;
  display: flex;
  flex-direction: column;
}
body.ct > .header,
body.ct > .footer { flex-shrink: 0; }
body.ct ::selection { background: #dcecff; color: var(--ct-ink); }
body.ct a:focus-visible,
body.ct button:focus-visible { outline: 2px solid var(--ct-blue); outline-offset: 4px; }
body.ct .ct-main { flex: 1; display: flex; align-items: center; padding: 10px 0; background: #fff; }
body.ct .ct-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding-bottom: 10px; margin-bottom: clamp(12px, 1.5svh, 18px); border-bottom: 1px solid var(--ct-line); }
body.ct .ct-heading h1 { color: var(--ct-ink); font-size: clamp(28px, 2.5vw, 36px); line-height: 1.25; font-weight: 600; letter-spacing: -.03em; }
body.ct .ct-company { color: var(--ct-muted); font-size: 12px; }
body.ct .ct-layout { display: grid; grid-template-columns: minmax(0, .88fr) minmax(0, 1.12fr); gap: clamp(24px, 4vw, 56px); align-items: stretch; }
body.ct .ct-details,
body.ct .ct-visuals { min-width: 0; }
/* 分区标题保留语义，去掉与页标题、地址标题重复的视觉行。 */
body.ct .ct-section-title { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
body.ct .ct-hotline { display: flex; flex-direction: column; align-items: stretch; }
body.ct .ct-hotline-meta { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; color: var(--ct-muted); font-size: 12px; line-height: 1.4; }
body.ct .ct-hotline-label { letter-spacing: .12em; }
body.ct .ct-hotline-row { display: flex; align-items: baseline; gap: 10px; margin-top: 3px; }
body.ct .ct-hotline-ext { letter-spacing: .02em; }
body.ct .ct-hotline-ext b { color: var(--ct-ink); font-weight: 500; font-variant-numeric: tabular-nums; }
body.ct .ct-hotline-number { display: inline-block; color: var(--ct-blue); font-family: var(--font-sans); font-size: 42px; font-weight: 600; letter-spacing: -.025em; line-height: 1.12; font-variant-numeric: tabular-nums; }
body.ct .ct-hotline-number:hover { color: #004c99; }
body.ct .ct-people { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; margin-top: 14px; padding: 13px 0; border-top: 1px solid var(--ct-line); border-bottom: 1px solid var(--ct-line); }
body.ct .ct-people > div { min-width: 0; }
body.ct .ct-people > div:last-child { justify-self: end; }
body.ct .ct-people dt { color: var(--ct-muted); font-size: 12px; letter-spacing: .06em; line-height: 1.4; }
body.ct .ct-people dd { margin-top: 2px; color: var(--ct-ink); font-family: var(--font-sans); font-size: 23px; font-weight: 500; letter-spacing: 0; line-height: 1.2; font-variant-numeric: tabular-nums; }
body.ct .ct-people a { display: inline-block; padding: 1px 0; white-space: nowrap; }
body.ct .ct-people a:hover,
body.ct .ct-info-list a:hover { color: var(--ct-blue); }
body.ct .ct-channels { display: grid; grid-template-columns: minmax(0, 1fr) 96px; align-items: center; gap: 16px; padding-top: 14px; }
body.ct .ct-info-list { display: grid; gap: 6px; }
body.ct .ct-info-list > div { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 10px; align-items: baseline; }
body.ct .ct-info-list dt { color: var(--ct-muted); font-size: 12px; }
body.ct .ct-info-list dd { min-width: 0; color: var(--ct-body); font-size: 14px; overflow-wrap: anywhere; }
body.ct .ct-info-list a { display: inline-flex; align-items: center; gap: 3px; }
body.ct .ct-info-list svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.5; }
body.ct .ct-wechat { text-align: center; }
body.ct .ct-wechat img { width: 80px; height: 80px; margin: 0 auto; border: 1px solid var(--ct-line); border-radius: 5px; }
body.ct .ct-wechat figcaption { margin-top: 4px; color: var(--ct-muted); font-size: 10px; white-space: nowrap; }
body.ct .ct-addresses { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--ct-line); }
body.ct .ct-addresses,
body.ct .ct-address { scroll-margin-top: calc(var(--header-h) + 12px); }
body.ct .ct-address + .ct-address { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--ct-line); }
body.ct .ct-address h3 { color: var(--ct-ink); font-size: 14px; font-weight: 600; line-height: 1.5; }
body.ct .ct-address address { margin-top: 3px; color: var(--ct-body); font-size: 13px; font-style: normal; line-height: 1.7; }
body.ct .ct-map-actions { display: flex; flex-wrap: wrap; gap: 4px 20px; margin-top: 2px; }
body.ct .ct-map-actions a { display: inline-flex; align-items: center; gap: 8px; min-height: 28px; color: var(--ct-blue); font-size: 12px; white-space: nowrap; }
body.ct .ct-map-actions a:hover { color: #004c99; text-decoration: underline; text-underline-offset: 4px; }
body.ct .ct-map-actions a span { font-size: 15px; }
/* 右栏高度跟随视口，左栏等高铺满并将余量均分到四条分隔线两侧，
   使左栏首尾与右栏园区照片顶边、地图底边严格齐平，消除大屏左栏上下留白。 */
body.ct .ct-visuals { display: grid; grid-template-rows: minmax(90px, 1fr) auto; gap: 12px; height: clamp(310px, calc(100svh - 196px), min(730px, max(650px, 35vw))); min-height: 100%; }
body.ct .ct-campus,
body.ct .ct-location { min-width: 0; min-height: 0; margin: 0; overflow: hidden; border: 1px solid var(--ct-line); border-radius: 9px; background: #f6f8fa; }
body.ct .ct-campus { position: relative; }
body.ct .ct-campus > img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center top; }
body.ct .ct-campus figcaption { position: absolute; inset: auto 0 0; display: flex; align-items: baseline; flex-wrap: wrap; gap: 3px 12px; padding: 24px 13px 10px; background: linear-gradient(transparent, #10243fc9); color: #fff; }
body.ct .ct-campus strong { font-size: 13px; font-weight: 500; }
body.ct .ct-campus figcaption > span { font-size: 11px; color: #ffffffe6; }
body.ct .ct-maps { min-height: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; align-items: start; }
/* 高德嵌入页内部信息白条固定 max-width: 300px（加内边距共 324px，左右各留 10px 恰为 344px），
   将 iframe 基准设为 344×258（4:3）再按外框宽度等比缩放，使白条与地图控件随地图框同步缩放。 */
body.ct .ct-map-frame { overflow: hidden; aspect-ratio: 4 / 3; background: #e9eef3; }
body.ct .ct-map-frame iframe { display: block; width: 100%; height: 100%; border: 0; }
@supports (transform: scale(tan(atan2(100cqi, 344px)))) {
  body.ct .ct-map-frame { container-type: inline-size; }
  body.ct .ct-map-frame iframe { width: 344px; height: 258px; transform-origin: 0 0; transform: scale(tan(atan2(100cqi, 344px))); }
}
@supports (zoom: tan(atan2(100cqi, 344px))) {
  body.ct .ct-map-frame { container-type: inline-size; }
  body.ct .ct-map-frame iframe { width: 344px; height: 258px; transform: none; zoom: tan(atan2(100cqi, 344px)); }
}
body.ct .footer-top,
body.ct .footer-qr-tip { display: none; }
body.ct .footer-bottom { padding: 7px 0; }
body.ct .footer-bottom .container { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 3px 16px; font-size: 11px; line-height: 1.6; }
@media (min-width: 761px) {
  body.ct .ct-details { display: flex; flex-direction: column; }
  body.ct .ct-contact { flex: 5 0 auto; display: flex; flex-direction: column; }
  body.ct .ct-hotline { flex: 1 0 auto; justify-content: flex-start; padding-bottom: 13px; }
  body.ct .ct-people { flex: 2 0 auto; margin-top: 0; padding: 13px 0; align-content: center; }
  body.ct .ct-channels { flex: 2 0 auto; padding: 13px 0; align-content: center; }
  body.ct .ct-addresses { flex: 3 0 auto; display: flex; flex-direction: column; margin-top: 0; padding-top: 0; }
  body.ct .ct-address:first-of-type { flex: 2 0 auto; display: flex; flex-direction: column; justify-content: center; padding: 13px 0; }
  body.ct .ct-address + .ct-address { flex: 1 0 auto; display: flex; flex-direction: column; justify-content: flex-end; margin-top: 0; padding-top: 13px; }
  body.ct .ct-address:last-of-type .ct-map-actions a { min-height: 22px; }
}
@media (min-width: 1081px) and (min-height: 760px) {
  body.ct .ct-heading h1 { font-size: clamp(30px, min(2.7vw, calc(4svh + 2px)), 42px); }
  body.ct .ct-company { font-size: clamp(12px, min(.9vw, calc(2svh - 2.5px)), 17px); }
  body.ct .ct-hotline-meta,
  body.ct .ct-people dt,
  body.ct .ct-info-list dt { font-size: clamp(12px, min(.92vw, calc(2.1svh - 3px)), 18px); }
  body.ct .ct-hotline-row { margin-top: clamp(3px, .6svh, 6px); gap: 14px; }
  body.ct .ct-hotline-number { font-size: clamp(42px, min(3.15vw, calc(7.4svh - 12px)), 66px); }
  body.ct .ct-hotline-ext { font-size: clamp(16px, min(1.12vw, calc(2.5svh - 2px)), 22px); }
  body.ct .ct-people dd { margin-top: clamp(2px, .5svh, 5px); font-size: clamp(23px, min(1.75vw, calc(4.2svh - 7.5px)), 36px); }
  body.ct .ct-channels { grid-template-columns: minmax(0, 1fr) clamp(96px, min(7vw, calc(17svh - 32px)), 140px); gap: 20px; }
  body.ct .ct-info-list { gap: clamp(6px, min(.9vw, calc(2.5svh - 11px)), 18px); }
  body.ct .ct-info-list > div { grid-template-columns: clamp(64px, min(4.8vw, calc(10svh - 9px)), 94px) minmax(0, 1fr); gap: 14px; }
  body.ct .ct-info-list dd { font-size: clamp(14px, min(1.02vw, calc(2.35svh - 3px)), 20px); }
  body.ct .ct-info-list svg { width: clamp(14px, .9vw, 18px); height: clamp(14px, .9vw, 18px); }
  body.ct .ct-wechat img { width: clamp(80px, min(6vw, calc(17svh - 48px)), 126px); height: clamp(80px, min(6vw, calc(17svh - 48px)), 126px); border-radius: 7px; }
  body.ct .ct-wechat figcaption { margin-top: 5px; font-size: clamp(10px, min(.72vw, calc(1.5svh - 1px)), 13.5px); }
  body.ct .ct-address h3 { font-size: clamp(14px, min(1.08vw, calc(2.6svh - 5px)), 22px); }
  body.ct .ct-address address { margin-top: clamp(3px, .55svh, 6px); font-size: clamp(13px, min(.98vw, calc(2.35svh - 4px)), 20px); }
  body.ct .ct-map-actions { margin-top: clamp(2px, .5svh, 5px); gap: 4px 24px; }
  body.ct .ct-map-actions a { font-size: clamp(12px, min(.86vw, calc(1.95svh - 2px)), 17px); }
  body.ct .ct-map-actions a span { font-size: clamp(15px, 1vw, 19px); }
}
@media (min-width: 761px) and (max-width: 1080px) {
  body.ct .ct-layout { grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 22px; }
  body.ct .ct-hotline-number { font-size: 34px; }
  body.ct .ct-people { gap: 14px; }
  body.ct .ct-people dd { font-size: 19px; }
  body.ct .ct-channels { grid-template-columns: minmax(0, 1fr) 78px; gap: 8px; }
  body.ct .ct-info-list > div { grid-template-columns: 52px minmax(0, 1fr); gap: 6px; }
  body.ct .ct-info-list dd { font-size: 12px; }
  body.ct .ct-wechat img { width: 68px; height: 68px; }
  body.ct .ct-visuals { height: clamp(310px, calc(100svh - 196px), 540px); }
  body.ct .ct-maps { gap: 8px; }
}
@media (max-height: 700px) {
  body.ct .ct-main { padding: 7px 0; }
  body.ct .ct-heading { padding-bottom: 7px; margin-bottom: 10px; }
  body.ct .ct-heading h1 { font-size: 28px; }
  body.ct .ct-hotline { padding-bottom: 9px; }
  body.ct .ct-people { margin-top: 10px; padding: 9px 0; }
  body.ct .ct-channels { padding-top: 9px; }
  body.ct .ct-wechat img { width: 66px; height: 66px; }
  body.ct .ct-addresses { margin-top: 10px; padding-top: 10px; }
  body.ct .ct-address + .ct-address { margin-top: 7px; padding-top: 7px; }
  body.ct .ct-map-actions a { min-height: 24px; }
  body.ct .ct-visuals { height: clamp(290px, calc(100svh - 180px), 520px); gap: 9px; }
}
@media (min-width: 761px) and (max-height: 700px) {
  body.ct .ct-people { margin-top: 0; }
  body.ct .ct-channels { padding: 9px 0; }
  body.ct .ct-addresses { margin-top: 0; padding-top: 0; }
  body.ct .ct-address:first-of-type { padding: 9px 0; }
  body.ct .ct-address + .ct-address { margin-top: 0; padding-top: 9px; }
}
@media (min-width: 1081px) and (max-height: 700px) {
  body.ct .ct-hotline-number { font-size: 38px; }
  body.ct .ct-people dd { font-size: 21px; }
}
@media (max-width: 760px) {
  body.ct .ct-main { padding: 7px 0; }
  body.ct .ct-heading { align-items: center; padding-bottom: 6px; margin-bottom: 8px; gap: 8px; }
  body.ct .ct-heading h1 { font-size: 26px; white-space: nowrap; }
  body.ct .ct-company { max-width: 15em; font-size: 9px; text-align: right; line-height: 1.4; }
  body.ct .ct-layout { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  body.ct .ct-hotline { padding-bottom: 0; }
  body.ct .ct-hotline-meta { font-size: 11px; }
  body.ct .ct-hotline-number { font-size: 32px; }
  body.ct .ct-people { gap: 10px; margin-top: 8px; padding: 8px 0; }
  body.ct .ct-people dt { font-size: 11px; }
  body.ct .ct-people dd { font-size: 18px; }
  body.ct .ct-channels { grid-template-columns: minmax(0, 1fr) 75px; gap: 8px; padding-top: 8px; }
  body.ct .ct-info-list { gap: 3px; }
  body.ct .ct-info-list > div { grid-template-columns: 52px minmax(0, 1fr); gap: 6px; }
  body.ct .ct-info-list dt, body.ct .ct-info-list dd { font-size: 11px; }
  body.ct .ct-wechat img { width: 62px; height: 62px; }
  body.ct .ct-wechat figcaption { margin-top: 2px; font-size: 9px; }
  body.ct .ct-addresses { margin-top: 8px; padding-top: 8px; }
  body.ct .ct-address h3 { font-size: 12px; }
  body.ct .ct-address address { margin-top: 1px; font-size: 11px; line-height: 1.5; }
  body.ct .ct-address + .ct-address { margin-top: 5px; padding-top: 5px; }
  body.ct .ct-map-actions { margin-top: 1px; gap: 2px 15px; }
  body.ct .ct-map-actions a { min-height: 24px; font-size: 11px; }
  body.ct .ct-visuals { height: auto; min-height: 0; grid-template-rows: auto auto; gap: 10px; }
  body.ct .ct-campus { aspect-ratio: 16 / 9; }
  body.ct .ct-campus figcaption { padding: 16px 9px 6px; gap: 2px 8px; }
  body.ct .ct-campus strong { font-size: 11px; }
  body.ct .ct-campus figcaption > span { font-size: 9px; }
  body.ct .ct-maps { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  body.ct .footer-bottom { padding: 5px 0; }
  body.ct .footer-bottom .container { justify-content: flex-start; font-size: 9px; gap: 1px 10px; }
}
@media (prefers-reduced-motion: reduce) {
  body.ct * { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
@media (min-width: 761px) and (max-height: 620px) {
  body.ct .ct-hotline { padding-bottom: 6px; }
  body.ct .ct-hotline-number { font-size: 30px; }
  body.ct .ct-people { margin-top: 0; padding: 6px 0; }
  body.ct .ct-people dd { font-size: 18px; }
  body.ct .ct-channels { padding: 6px 0; }
  body.ct .ct-wechat img { width: 56px; height: 56px; }
  body.ct .ct-addresses { margin-top: 0; padding-top: 0; }
  body.ct .ct-address:first-of-type { padding: 6px 0; }
  body.ct .ct-address + .ct-address { margin-top: 0; padding-top: 6px; }
}
