html{zoom:0.9;}

/* ===== Research components (unique to research page) ===== */
.res-intro{font-size:16.5px;line-height:1.7;color:var(--fg-2);max-width:70ch;margin:0 0 30px;}
.res-cols{display:grid;grid-template-columns:1fr 1fr;gap:40px 56px;}
.res-group{border-top:2px solid var(--zju-red);padding-top:14px;}
.rg-label{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;color:var(--ink-pine);margin:0;}
.rg-label .ct{font-family:var(--font-cond);font-weight:700;font-size:15px;color:var(--zju-red);letter-spacing:0;}
.res-group ul{list-style:none;margin:14px 0 0;padding:0;border-top:1px solid var(--border-cool);}
.res-group li{border-bottom:1px solid var(--border-cool);}
.res-group li a{display:block;padding:13px 0;font-size:15px;color:var(--fg-1);text-decoration:none;line-height:1.42;transition:padding-left .35s var(--ease),color .35s var(--ease);}
.res-group li a:hover{padding-left:8px;color:var(--zju-red);}

/* achievements */
.ach{display:grid;gap:48px;}
.ach-card{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--border-cool);overflow:hidden;}
.ach-media{background:var(--paper-rice);overflow:hidden;min-height:300px;}
.ach-media img{width:100%;height:100%;object-fit:cover;display:block;}
.ach-body{padding:38px 40px;display:flex;flex-direction:column;justify-content:center;}
.ach-tag{font-family:var(--font-cond);font-weight:700;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--zju-red);}
.ach-card h3{font-family:var(--font-cond);font-weight:700;font-size:25px;line-height:1.16;color:var(--ink-pine);margin:12px 0 4px;}
.ach-zh{font-family:var(--font-serif-cn);font-size:14px;color:var(--fg-3);}
.ach-card p{font-size:15px;line-height:1.66;color:var(--fg-2);margin:16px 0 0;}
.ach-dl{display:inline-flex;align-items:center;gap:9px;margin-top:24px;align-self:flex-start;font-family:var(--font-cond);font-weight:700;font-size:13px;letter-spacing:.04em;color:#fff;background:var(--zju-red);padding:11px 20px;text-decoration:none;transition:background .25s var(--ease);}
.ach-dl:hover{background:var(--ink-pine);}
.ach-dl svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.ach-card--wide{display:block;}
.ach-card--wide .ach-media{width:100%;min-height:0;background:#fff;}
.ach-card--wide .ach-media img{display:block;width:100%;height:auto;}

/* publications */
.pub-stage{position:relative;height:430px;}
.pub-ring{position:absolute;inset:0;}
.pub-cover{position:absolute;left:50%;top:50%;width:158px;border:0;background:transparent;padding:0;cursor:pointer;transform:translate(-50%,-50%);will-change:transform,left,top;}
.pub-cover img{width:100%;height:auto;display:block;box-shadow:0 12px 34px rgba(20,18,14,.26);}
.pub-cover--ph{width:158px;}
.pub-cover--ph span{display:flex;align-items:center;justify-content:center;width:158px;height:212px;background:var(--paper-rice);border:1px dashed var(--border-cool);font-family:var(--font-cond);font-weight:700;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--grey-40);text-align:center;line-height:1.3;}
.pub-hint{text-align:center;font-size:12.5px;color:var(--fg-3);letter-spacing:.04em;margin:8px 0 0;}
.pub-detail{display:none;}
.pub-detail.on{display:block;animation:pubIn .3s var(--ease);}
@keyframes pubIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
.pub-back{margin-bottom:24px;border:1px solid var(--border-cool);background:#fff;color:var(--ink-pine);font-family:var(--font-cond);font-weight:700;font-size:12px;letter-spacing:.06em;padding:9px 16px;cursor:pointer;transition:border-color .25s var(--ease),color .25s var(--ease);}
.pub-back:hover{border-color:var(--zju-red);color:var(--zju-red);}
.pub-detail-grid{display:grid;grid-template-columns:280px 1fr;gap:48px;align-items:center;}
.pub-detail-cover img{width:100%;height:auto;display:block;box-shadow:0 16px 44px rgba(20,18,14,.26);}
.pub-detail-body .pub-meta{font-family:var(--font-cond);font-weight:700;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--zju-red);}
.pub-detail-body h3{font-family:var(--font-cond);font-weight:700;font-size:26px;color:var(--ink-pine);margin:12px 0 4px;}
.pub-detail-body .pub-zh{font-family:var(--font-serif-cn);font-size:14px;color:var(--fg-3);}
.pub-detail-body p{font-size:15px;line-height:1.7;color:var(--fg-2);margin:16px 0 0;max-width:58ch;}
@media(max-width:880px){
  .ach-card{grid-template-columns:1fr;}.ach-media{min-height:210px;}
  .res-cols{grid-template-columns:1fr;gap:30px;}
  .pub-stage{height:330px;}.pub-cover,.pub-cover--ph,.pub-cover--ph span{width:124px;}.pub-cover--ph span{height:166px;}
  .pub-detail-grid{grid-template-columns:1fr;gap:22px;}
}
.ach-more{display:inline-flex;align-items:center;gap:8px;margin-top:24px;align-self:flex-start;font-family:var(--font-cond);font-weight:700;font-size:13px;letter-spacing:.04em;color:var(--zju-red);background:transparent;border:1px solid var(--zju-red);padding:10px 18px;cursor:pointer;transition:background .25s var(--ease),color .25s var(--ease);}
.ach-more:hover{background:var(--zju-red);color:#fff;}
.ach-more .pm{font-size:16px;line-height:1;}
.ach-detail{margin-top:18px;max-height:0;overflow:hidden;transition:max-height .45s var(--ease);}
.ach-detail.open{max-height:640px;}
.ach-detail .inner{padding:18px 0 2px;border-top:1px solid var(--border-cool);font-size:15px;line-height:1.7;color:var(--fg-2);}
.ach-card{transition:border-color .3s var(--ease);}
.ach-card:hover{border-color:var(--zju-red);}
.ach-media--inset{display:flex;align-items:center;justify-content:center;padding:34px 24px;}
.ach-card--wide .ach-media--inset img{width:auto;height:auto;max-width:72%;max-height:228px;}

/* ===== data viz ===== */
.dataviz{position:relative;}
.dv-tabs{display:flex;gap:10px;margin-bottom:26px;}
.dv-tab{font-family:var(--font-cond);font-weight:700;font-size:13px;letter-spacing:.03em;padding:9px 17px;border:1px solid var(--border-cool);background:#fff;color:var(--fg-2);cursor:pointer;transition:background .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease);}
.dv-tab:hover{border-color:var(--ink-pine);color:var(--ink-pine);}
.dv-tab.on{background:var(--ink-pine);color:var(--fg-on-ink-1);border-color:var(--ink-pine);}
.dv-head{display:flex;justify-content:space-between;align-items:flex-end;gap:28px;flex-wrap:wrap;margin-bottom:20px;}
.dv-total{display:flex;align-items:baseline;gap:14px;}
.dv-num{font-family:var(--font-cond);font-weight:700;font-size:60px;line-height:.85;color:var(--zju-red);}
.dv-lab{font-size:12.5px;color:var(--fg-3);max-width:190px;line-height:1.35;}
.dv-legend{display:flex;flex-wrap:wrap;gap:8px 16px;}
.dv-leg{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--fg-2);cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s;}
.dv-leg .sw{width:11px;height:11px;border-radius:50%;flex:none;}
.dv-leg.off{opacity:.3;}
.dv-stage{border-top:1px solid var(--border-cool);padding-top:24px;}
.dv-cols{display:flex;align-items:flex-end;gap:6px;}
.dv-col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;}
.dv-dots{display:flex;flex-direction:column-reverse;align-items:center;gap:8px;min-height:224px;}
.dv-dot{width:22px;height:22px;border-radius:50%;opacity:0;transform:translateY(28px) scale(.35);transition:opacity .5s var(--ease),transform .62s cubic-bezier(.34,1.56,.64,1);cursor:pointer;box-shadow:0 3px 9px rgba(20,18,14,.2);}
.dv-stage.play .dv-dot{opacity:1;transform:none;}
.dv-dot:hover{transform:scale(1.22)!important;box-shadow:0 6px 16px rgba(20,18,14,.32);}
.dv-dot.dim{opacity:.14!important;}
.dv-dot--lg{width:31px;height:31px;box-shadow:0 4px 12px rgba(20,18,14,.26);}
.dv-year{margin-top:13px;font-family:var(--font-cond);font-weight:700;font-size:13px;color:var(--fg-3);letter-spacing:.02em;}
.dv-tip{position:absolute;z-index:30;background:var(--ink-pine);color:var(--fg-on-ink-1);padding:10px 13px;font-size:12.5px;line-height:1.45;max-width:236px;box-shadow:0 10px 30px rgba(20,18,14,.34);}
.dv-tip .t-cat{display:block;color:#fff;font-family:var(--font-cond);font-weight:700;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:4px;}
.dv-note{margin-top:20px;font-size:12px;line-height:1.5;color:var(--fg-3);}
@media(max-width:880px){.dv-num{font-size:46px;}.dv-dot{width:16px;height:16px;}.dv-dots{min-height:150px;gap:6px;}}
