@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(assets/font-1.ttf) format('truetype');
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(assets/font-2.ttf) format('truetype');
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(assets/font-3.ttf) format('truetype');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(assets/font-4.ttf) format('truetype');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(assets/font-5.ttf) format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(assets/font-6.ttf) format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(assets/font-7.ttf) format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(assets/font-8.ttf) format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(assets/font-9.ttf) format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(assets/font-10.ttf) format('truetype');
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url(assets/font-11.ttf) format('truetype');
}
@font-face {
  font-family: 'Chakra Petch';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(assets/font-12.ttf) format('truetype');
}
@font-face {
  font-family: 'Chakra Petch';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(assets/font-13.ttf) format('truetype');
}
:root{
  /* ══ 底座 = PLAIN:纯黑白灰,零色相。这是默认样式,不带 data-theme 时就是它。══ */
  --bg:#ffffff; --surface:#fbfbfb; --surface-2:#f1f1f1; --surface-3:#f6f6f6;
  --img-bg:#ededed; --grid:transparent;

  /* research 区不反色,只用一条略深的灰带隔开 */
  --invert-bg:#f3f3f3; --invert-fg:#1a1a1a;
  --invert-text-2:#4a4a4a; --invert-text-3:#737373;
  --invert-line:#dcdcdc; --invert-line-2:#e4e4e4;

  --text:#1a1a1a; --text-2:#454545; --text-3:#707070; --text-4:#8a8a8a;
  --line:#e0e0e0; --line-2:#d6d6d6; --line-3:#cfcfcf;

  /* 强调色也是灰阶 —— 黑底白字,不引入任何色相 */
  --accent:#1a1a1a; --accent-hover:#000000; --accent-on:#ffffff;
  --accent-deep:#1a1a1a; --focus:#1a1a1a;

  --header-bg:#ffffff; --header-fg:#1a1a1a;
  --header-2:#454545; --header-3:#707070;
  --header-line:#e0e0e0; --header-border:#cfcfcf;

  --name-dot:var(--text); --rule-strong:var(--text);
  --link-hover:var(--text); --shadow-hard:transparent;
  --band:2px;

  /* ══ 字体角色(主题可换,组件只认这三个)══ */
  --font-display:'Barlow Condensed','Arial Narrow',Impact,sans-serif;
  --font-body:Inter,Arial,sans-serif;
  --font-mono:'IBM Plex Mono',monospace;

  /* ══ 主题图形语言 —— Plain 全部关掉(0 / none / 灰阶)══ */
  --invert-accent:var(--accent);    /* 反色区(research)里的强调字 */
  /* 底纹 token 里写完整的 background 层(图 / 位置 / 尺寸 / 平铺),组件只写 background:var(--x) [底色] */
  --hero-texture:none;              /* hero 底纹 */
  --invert-texture:none;            /* research 区底纹 */
  --footer-texture:none;            /* 页脚色带底纹 */
  --cut:0px;                        /* 小面板/标签右上角的斜切 */
  --label-open:''; --label-close:'';/* 区块编号、图板标签两侧的装饰字符 */
  --signal-1:#1a1a1a; --signal-2:#6b6b6b; --signal-3:#b0b0b0; --signal-4:#e0e0e0; /* 校色条 */
  --warn:var(--text);               /* 警示纹的亮色 */
  --band-image:none;                /* research 底部横条的纹理(border-image) */

  /* ══ 与主题无关:运动 ══ */
  --dur-fast:.18s; --dur:.28s; --dur-slow:.45s;
  --stagger:.06s;          /* 同组元素进入动画的错开间隔 */
  --ease:cubic-bezier(.4,0,.2,1);
  --ease-out:cubic-bezier(.16,1,.3,1);

  /* ══ 与主题无关:尺寸 ══ */
  --rail:64px; --header:88px;

  font-family:var(--font-body);color:var(--text);background:var(--bg);font-synthesis:none
}
/* 主题:ENDFIELD —— 酸黄 + 方格纸 */
:root[data-theme="endfield"]{
  /* ── 底色与表面 ── */
  --bg:#f0f1eb;            /* 页面底色 */
  --surface:#fafbf6;       /* 抬起的区块(论文区) */
  --surface-2:#e4e7dd;     /* 小面板:venue 标签、图注板、recognition */
  --surface-3:#e2e6da;     /* 页脚色带 */
  --img-bg:#a3a99b;        /* 图片占位底 */
  --grid:#c3c8bd26;        /* hero 方格纸线 */

  /* ── 反色区块(research 那一节) ── */
  --invert-bg:#1b1e1b; --invert-fg:#f0f1eb;
  --invert-text-2:#bbc2b2; --invert-text-3:#a4ae97;
  --invert-line:#515749; --invert-line-2:#444b3d;

  /* ── 文字 ── */
  --text:#1b1e1b;          /* 正文 */
  --text-2:#555b53;        /* 次级 */
  --text-3:#616a56;        /* mono 标签、图注 */
  --text-4:#59644f;        /* 最弱 */

  /* ── 线条 ── */
  --line:#c7cbc1;          /* 主分隔线 */
  --line-2:#c5cbbf;        /* 标签描边 */
  --line-3:#bfc7b6;        /* 下划线、弱分隔 */

  /* ── 强调色 ── */
  --accent:#fffa00;        /* 官网 color-bar 的精确值 */
  --accent-hover:#ffff5c;
  --accent-on:#1b1e1b;     /* 压在强调色上的字 */
  --accent-deep:#788400;   /* 强调色当【文字】用时的深版 */
  --focus:#7e8700;

  /* ── 头部(独立配色,不跟随页面底色) ── */
  --header-bg:#1b1e1b; --header-fg:#fafbf6;
  --header-2:#c4c8be; --header-3:#929a89;
  --header-line:#3b4038; --header-border:#747a6d;

  --name-dot:inherit;      /* 名字后面那个点 */
  --rule-strong:var(--text); /* 2px 重线 */
  --link-hover:var(--text);
  --shadow-hard:var(--text); /* 主按钮的硬阴影 */
  --band:7px;              /* research 区底部的强调色横条 */

  /* ── 主题图形语言 ── */
  --font-mono:'Space Grotesk','IBM Plex Mono',monospace;
  /* 等高线是 Pioneer Valley 的真实地形(2048×1280 一整张,不平铺),三处取不同的裁切;方格纸叠在最上面 */
  --hero-texture:linear-gradient(var(--grid) 1px,transparent 1px) 0 0 / 62px 62px repeat,
                 linear-gradient(90deg,var(--grid) 1px,transparent 1px) 0 0 / 62px 62px repeat,
                 url(assets/texture-contour.svg?v=d3de2e61) right -60px bottom 0 / 2048px auto no-repeat;   /* 底部对齐:Holyoke 山脉的长脊落在 hero 右下,h1 那块是平坦河谷 */
  --invert-texture:url(assets/texture-contour.svg?v=d3de2e61) left -260px bottom -80px / 2048px auto no-repeat;   /* 深底上的反相等高线 */
  --footer-texture:url(assets/texture-contour.svg?v=d3de2e61) center bottom / 2048px auto no-repeat;   /* 页脚也取山脊那一段 */
  --cut:7px;
  --label-open:'[ '; --label-close:' ]';
  --signal-1:#fffa00; --signal-2:#ff1aac; --signal-3:#01ffa2; --signal-4:#d9d9d9; /* 官网校色条 */




  background:var(--bg); color:var(--text);
}

*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header) + 24px)}body{margin:0;font-size:16px;line-height:1.65}a{color:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent}a:focus-visible{outline:3px solid var(--focus);outline-offset:5px}::selection{color:var(--accent-on);background:var(--accent)}.mono{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.05em}.tick{display:inline-flex;gap:3px;margin-left:12px;vertical-align:middle}.tick i{display:block;width:9px;height:5px}.tick i:nth-child(1){background:var(--signal-1)}.tick i:nth-child(2){background:var(--signal-2)}.tick i:nth-child(3){background:var(--signal-3)}.tick i:nth-child(4){background:var(--signal-4)}.skipLink{position:fixed;top:12px;left:12px;z-index:200;transform:translateY(-200%);padding:12px 20px;background:var(--accent);color:var(--accent-on)}.skipLink:focus{transform:translateY(0)}
.siteHeader{min-height:var(--header);position:sticky;top:0;z-index:20;display:flex;align-items:center;background:var(--header-bg);color:var(--header-fg);padding:0 36px;gap:32px;border-bottom:1px solid var(--header-line)}.brand{display:flex;align-items:center;gap:16px;flex-shrink:0}.brandMark{position:relative;background:var(--accent);color:var(--accent-on);font-size:27px;font-weight:800;line-height:1;letter-spacing:-2px;width:49px;height:45px;padding:11px 7px;clip-path:polygon(0 0,100% 0,100% 78%,79% 100%,0 100%)}.brandMark>span{font-size:17px;position:absolute;right:3px;top:3px}.brandText{font-size:16px;font-weight:700;letter-spacing:.12em;line-height:1.4}.brandText small{display:block;font-family:var(--font-mono);font-size:12px;font-weight:400;letter-spacing:.01em;color:var(--header-3);margin-top:2px}.mainNav{display:flex;align-self:stretch;align-items:stretch;gap:30px;margin-left:auto}.mainNav>a{position:relative;display:flex;align-items:center;gap:7px;font-size:14px;color:var(--header-2);transition:color var(--dur-fast) var(--ease)}.mainNav>a>span{font-family:var(--font-mono);font-size:12px;color:var(--header-3)}.mainNav>a.active,.mainNav>a:hover{color:var(--accent)}.mainNav>a.active:after{content:'';height:3px;position:absolute;bottom:0;left:0;right:0;background:var(--accent)}.headerLink{font-family:var(--font-mono);font-size:14px;border:1px solid var(--header-border);padding:9px 12px;margin-left:12px;white-space:nowrap;clip-path:polygon(0 0,calc(100% - var(--cut)) 0,100% var(--cut),100% 100%,0 100%)}.headerLink>span{margin-left:18px;color:var(--accent)}.headerLink:hover{border-color:var(--accent)}
.edgeRail{position:fixed;left:0;top:var(--header);bottom:0;width:var(--rail);border-right:1px solid var(--line);display:flex;align-items:center;padding:29px 0 24px;gap:24px;writing-mode:vertical-rl;z-index:10;background:var(--bg);font-family:var(--font-mono);font-size:12px;letter-spacing:.13em;color:var(--text-3)}.railRule{width:1px;height:90px;background:var(--line)}.edgeRail b{margin-top:auto;color:var(--text);font-size:12px;letter-spacing:.08em}main{margin-left:var(--rail)}.section{padding:60px clamp(28px,5.4vw,100px)}.hero{padding-top:23px;padding-bottom:0;background:var(--hero-texture)}.heroTop{display:flex;justify-content:space-between;color:var(--text-2);font-size:12px;letter-spacing:.1em;padding-bottom:35px}.heroGrid{display:grid;grid-template-columns:1.18fr 1fr;gap:clamp(32px,5vw,84px);align-items:center;padding-bottom:48px}.heroCopy{min-width:0}.eyebrow{font-family:var(--font-mono);font-size:12px;letter-spacing:.02em;display:flex;gap:9px;align-items:center}.littleSquare{width:7px;height:7px;background:var(--text);flex-shrink:0}h1{font-family:var(--font-display);font-weight:800;font-size:clamp(64px,8.3vw,138px);line-height:1;letter-spacing:-.018em;margin:18px 0 9px;white-space:nowrap}h1>span:not(.namePeriod){font-weight:600}.namePeriod{color:var(--accent-deep)}.affiliation{margin:0;font-size:clamp(16px,1.4vw,19px);font-weight:500}.heroIntro{margin:25px 0 0;max-width:550px}.heroIntro p{margin:0 0 9px;font-size:16px;line-height:1.75;color:var(--text-2)}.heroIntro p:first-child{color:var(--text);font-weight:600;font-size:19px;line-height:1.5}.labLine{font-size:13px;color:var(--text-2);margin:16px 0 23px;line-height:1.7}.heroActions{display:flex;align-items:center;gap:22px;flex-wrap:wrap}.button{display:inline-flex;gap:23px;align-items:center;justify-content:space-between;padding:13px 18px;font-size:14px;font-weight:600;transition:background var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease-out)}.primary{background:var(--accent);color:var(--accent-on);border:1px solid var(--text);box-shadow:3px 3px 0 var(--shadow-hard)}.primary:hover{background:var(--accent-hover);transform:translate(-1px,-1px)}.button>span{font-size:20px;line-height:1}.textLink{font-size:14px;border-bottom:1px solid var(--line-3);padding:3px 0}.textLink:hover{border-bottom-color:var(--text)}.topicStrip{display:flex;gap:25px;border-top:1px solid var(--text);align-items:center;min-height:68px;flex-wrap:wrap;padding:12px 0}.topicStrip>.mono{font-size:12px;color:var(--text-2);margin-right:auto}.topicStrip>span:not(.mono){font-size:14px}.topicStrip>span:not(.mono):before{content:'+';color:var(--text-3);margin-right:9px;font-family:monospace}.topicStrip>a{font-size:23px;border-left:1px solid var(--line);padding-left:27px}
.publications{background:var(--surface);border-top:1px solid var(--line)}.sectionHeading{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:34px}.sectionIndex{color:var(--text-2);font-size:12px;letter-spacing:.1em}.sectionIndex:before{content:var(--label-open)}.sectionIndex:after{content:var(--label-close)}#panelLabel:before{content:var(--label-open)}#panelLabel:after{content:var(--label-close)}h2{font-family:var(--font-display);font-size:clamp(38px,4vw,59px);line-height:1.05;font-weight:600;letter-spacing:-.012em;margin:9px 0 0}.headingSquare{display:inline-block;background:var(--accent);width:13px;height:13px;margin:0 0 2px 13px}.headingAside{font-size:12px;color:var(--text-2);padding-bottom:4px}.paper{display:grid;grid-template-columns:105px 1fr 48px;gap:27px;padding:31px 0;border-top:1px solid var(--line);position:relative}.paper:last-child{border-bottom:1px solid var(--line)}.paper:before{content:'';position:absolute;top:0;bottom:0;left:-16px;width:3px;background:var(--accent);opacity:0;transition:opacity var(--dur-fast) var(--ease)}.paper:hover:before{opacity:1}.paperMeta{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.year{font-family:var(--font-display);font-size:35px;line-height:1.1}.venue{font-family:var(--font-mono);font-size:12px;padding:2px 7px;background:var(--surface-2);border:1px solid var(--line-2);letter-spacing:.04em;clip-path:polygon(0 0,calc(100% - var(--cut)) 0,100% var(--cut),100% 100%,0 100%)}.accentVenue{background:var(--accent);color:var(--accent-on);border-color:var(--accent)}.paperNumber{margin-top:auto;color:var(--text-4)}.paperBody{min-width:0}.paper h3{font-size:clamp(18px,1.65vw,24px);letter-spacing:-.025em;line-height:1.4;margin:0 0 10px;max-width:900px;font-weight:600}.paper h3 a:hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}.authors{font-size:13px;line-height:1.9;color:var(--text-2);margin:0 0 9px}.authors strong{font-weight:600;color:var(--text);border-bottom:1px solid var(--text)}.paperSummary{font-size:16px;line-height:1.7;color:var(--text-2);margin:0 0 17px;max-width:860px}.paperLinks{display:flex;gap:21px;flex-wrap:wrap}.paperLinks a{font-size:14px;font-weight:600;border-bottom:1px solid var(--line-3)}.paperLinks a:hover{background:var(--accent);color:var(--accent-on)}.paperArrow{border:1px solid var(--line);align-self:start;display:flex;align-items:center;justify-content:center;width:42px;height:42px;font-size:25px;line-height:1;clip-path:polygon(0 0,calc(100% - var(--cut)) 0,100% var(--cut),100% 100%,0 100%)}.paperArrow:hover{background:var(--accent);color:var(--accent-on);border-color:var(--text)}
.research{background:var(--invert-texture) var(--invert-bg);color:var(--invert-fg);border-bottom:var(--band) solid var(--accent);border-image:var(--band-image)}.research .sectionIndex,.research .headingAside{color:var(--invert-text-2)}.researchGrid{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--invert-line)}.researchArea{padding:27px 26px 25px;border-right:1px solid var(--invert-line);display:flex;flex-direction:column;min-width:0}.researchArea:last-child{border-right:0}.researchNumber{font-size:12px;letter-spacing:.04em;color:var(--invert-accent);margin-bottom:24px}.researchArea h3{font-size:26px;line-height:1.25;letter-spacing:-.025em;font-weight:500;margin:0 0 18px}.researchArea p{font-size:16px;color:var(--invert-text-2);line-height:1.8;margin:0 0 30px}.researchTag{margin-top:auto;font-size:12px;color:var(--invert-text-3);letter-spacing:0;padding-top:12px;border-top:1px solid var(--invert-line-2)}
.background{padding-bottom:65px}.backgroundGrid{display:grid;grid-template-columns:1fr 1fr;gap:70px}.listTitle{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;font-size:14px;font-weight:500;border-bottom:1px solid var(--text);padding-bottom:14px;margin:0}.historyList{list-style:none;padding:0;margin:0}.historyList li{display:grid;grid-template-columns:95px 1fr;gap:12px;padding:22px 0;border-bottom:1px solid var(--line)}.historyDate{font-size:12px;padding-top:2px;color:var(--text-3)}.historyList h4{font-size:16px;margin:0;font-weight:600;line-height:1.5}.historyList p{font-size:14px;color:var(--text-2);margin:4px 0 0;line-height:1.8}.secondary{font-size:13px}.recognition{border-left:3px solid var(--accent);padding:13px 18px;background:var(--surface-2);margin-top:22px;clip-path:polygon(0 0,calc(100% - var(--cut)) 0,100% var(--cut),100% 100%,0 100%)}.recognition>.mono{font-size:12px;color:var(--text-3)}.recognition p{font-size:16px;line-height:1.5;font-weight:600;margin:5px 0 7px}.recognition a{font-size:14px}.siteFooter{padding:36px clamp(28px,5.4vw,100px) 20px;background:var(--footer-texture) var(--surface-3);border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:25px}.footerName{font-family:var(--font-display);font-size:39px;font-weight:700;line-height:1.1;letter-spacing:-.01em}.footerName span{color:var(--accent-deep)}.siteFooter p{font-size:14px;color:var(--text-2);margin:6px 0 0}.footerLinks{display:flex;flex-direction:column;align-items:flex-end;gap:6px;font-size:14px}.footerLinks a:hover{text-decoration:underline}.footerBottom{grid-column:1/-1;display:flex;justify-content:space-between;gap:20px;font-size:12px;border-top:1px solid var(--line-3);padding-top:17px;color:var(--text-3)}.footerBottom a{text-decoration:underline;text-underline-offset:3px}
@media(min-width:1700px){main{max-width:1736px;margin-right:auto}.siteHeader{padding-right:64px}.heroGrid{gap:100px}}
@media(max-width:1150px){:root{--rail:46px;--header:78px}.siteHeader{padding:0 22px;gap:22px}.brandText{font-size:14px}.mainNav{gap:20px}.headerLink{display:none}.heroGrid{gap:32px}.heroActions{gap:17px}.topicStrip{gap:16px}.topicStrip>.mono{width:100%}.topicStrip>a{margin-left:auto}.backgroundGrid{gap:36px}.researchArea{padding:24px 20px}.researchArea h3{font-size:24px}.figureTop>span:last-child{display:none}}
@media(max-width:850px){:root{--rail:0px;--header:76px}.edgeRail{display:none}.siteHeader{gap:20px;padding:0 22px}.brandText{display:none}.mainNav{gap:24px;margin-left:auto}.mainNav a>span{display:none}.section{padding:42px 28px}.hero{padding-top:20px;padding-bottom:0}.heroTop{padding-bottom:26px}.heroGrid{gap:25px;grid-template-columns:1.1fr .9fr}h1{font-size:76px}.heroActions .textLink{display:none}.imageLabel{font-size:12px;left:8px;right:8px;bottom:8px}.paper{grid-template-columns:85px 1fr 36px;gap:17px}.paperArrow{width:34px;height:34px;font-size:20px}.paper h3{font-size:20px}.researchGrid{grid-template-columns:1fr}.researchArea{display:grid;grid-template-columns:1fr 1.1fr;gap:8px 28px;border-right:0;border-bottom:1px solid var(--invert-line);padding:23px}.researchArea:last-child{border-bottom:0}.researchNumber{grid-column:1;margin-bottom:8px}.researchArea h3{grid-column:1;grid-row:2 / 4;margin:0}.researchArea p{grid-column:2;grid-row:1 / 3;margin:0}.researchTag{grid-column:2;margin:7px 0 0}.backgroundGrid{gap:32px}.historyList li{grid-template-columns:1fr;gap:5px}.siteFooter{padding:32px 28px 19px}.footerBottom{flex-direction:column;gap:8px}}
@media(max-width:650px){:root{--header:115px}.siteHeader{height:auto;min-height:115px;display:grid;grid-template-columns:1fr auto;gap:0;padding:14px 21px 0}.brand{gap:11px}.brandMark{width:40px;height:36px;font-size:23px;padding:8px 5px}.brandMark>span{font-size:13px;right:2px;top:1px}.brandText{display:block;font-size:14px}.brandText small{font-size:12px}.mainNav{grid-column:1/-1;grid-row:2;margin:11px 0 0;justify-content:space-between;gap:12px}.mainNav a{font-size:14px;padding:9px 0 12px}.section{padding:34px 21px}.hero{padding:16px 21px 0}.heroTop{font-size:12px;padding-bottom:25px;gap:20px}.heroTop>span:last-child{text-align:right}.heroGrid{grid-template-columns:1fr;gap:29px;padding-bottom:25px}h1{font-size:clamp(76px,20vw,116px);margin-top:15px;margin-bottom:8px}.heroIntro{max-width:none;margin-top:23px}.heroIntro p{font-size:16px;line-height:1.75}.heroIntro p:first-child{font-size:19px}.labLine{font-size:13px}.heroActions{gap:23px}.heroActions .textLink{display:inline}.topicStrip{gap:8px 16px;padding:16px 0 18px}.topicStrip>span:not(.mono){font-size:14px}.topicStrip>span:not(.mono):before{margin-right:5px}.topicStrip>a{display:none}.topicStrip>.mono{margin-bottom:3px}.sectionHeading{margin-bottom:25px}h2{font-size:43px}.headingAside{display:none}.paper{grid-template-columns:1fr;gap:14px;padding:25px 0}.paperMeta{flex-direction:row;align-items:center;gap:13px}.year{font-size:28px}.paperNumber{margin:0 0 0 auto}.paper h3{font-size:22px;line-height:1.4}.authors{font-size:13px}.paperArrow{display:none}.paperLinks{gap:22px}.researchArea{display:flex;gap:0;padding:25px 23px}.researchArea h3{font-size:27px;margin-bottom:16px}.researchNumber{margin-bottom:20px}.researchArea p{margin-bottom:22px}.researchTag{margin:0}.backgroundGrid{grid-template-columns:1fr;gap:35px}.historyList li{grid-template-columns:95px 1fr;gap:11px}.siteFooter{padding:28px 21px 19px;gap:24px;grid-template-columns:1fr}.footerLinks{align-items:flex-start;gap:8px}}
@media(max-width:360px){.historyList li{grid-template-columns:1fr}.mainNav{gap:10px}.mainNav a{font-size:13px}}
/* ── 首屏以下的进入动画(2026-09-25 起试行,见 DESIGN §5)──
   .reveal 只由 site.js 加在初始化时位于视口下方的元素上;首屏元素永远不带它。
   无 JS 时这两条规则根本不会命中,页面照常一次画全。 */
.reveal{opacity:0;transform:translateY(12px);transition:opacity var(--dur) var(--ease),transform var(--dur-slow) var(--ease-out);transition-delay:calc(var(--stagger) * var(--i,0))}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important}}
@media print{:root{--rail:0px}.reveal{opacity:1;transform:none}.siteHeader,.edgeRail,.heroActions,.topicStrip,.paperArrow,.footerLinks{display:none}.section{padding:20px 0}.heroGrid{display:block}body{background:#fff}.research{background:#fff;color:#000;border-bottom:1px solid #000}.research *{color:#000!important}.researchGrid{display:block}.researchArea,.paper{break-inside:avoid}.siteFooter{padding:20px 0;background:#fff}}

/* ── 主题切换:收成一个不起眼的小标签(2026-09-27,Yuhao 要「小一点、隐秘一点」)──
   头部平时只露 .themeToggle:6px 强调色小方块 + 当前主题名,10px mono、灰色、无边框。
   悬停 / 键盘聚焦 / 点它(触屏)时 .themeMenu 在下方弹出三项,绝对定位,不挤动导航。
   无 JS 时悬停照样能弹出菜单,只是点了不换主题(换主题本来就要 JS)。 */
.themeSwitch{position:relative;flex-shrink:0;margin-left:12px;font-family:var(--font-mono);font-size:10px;letter-spacing:.1em}
.themeToggle,.themeMenu button{font:inherit;letter-spacing:inherit;cursor:pointer;background:transparent;border:0;color:var(--header-3);padding:6px 8px;transition:color var(--dur-fast) var(--ease)}
.themeToggle{display:inline-flex;align-items:center;gap:7px;color:var(--header-2)}
.themeToggle:hover,.themeSwitch.open .themeToggle,.themeSwitch:focus-within .themeToggle{color:var(--header-fg)}
.themeDot{width:6px;height:6px;background:var(--accent);flex-shrink:0}
.themeMenu{display:none;position:absolute;right:0;top:100%;z-index:30;flex-direction:column;align-items:stretch;min-width:100%;padding:4px 0;background:var(--header-bg);border:1px solid var(--header-border)}
.themeSwitch:hover .themeMenu,.themeSwitch:focus-within .themeMenu,.themeSwitch.open .themeMenu{display:flex}
.themeMenu button{text-align:left;white-space:nowrap}
.themeMenu button:before{content:'';display:inline-block;width:6px;height:6px;margin-right:7px;vertical-align:1px;border:1px solid var(--header-border);box-sizing:border-box}
.themeMenu button:hover{color:var(--header-fg)}
.themeMenu button[aria-pressed="true"]{color:var(--header-fg)}
.themeMenu button[aria-pressed="true"]:before{background:var(--accent);border-color:var(--accent)}
.themeToggle:focus-visible,.themeMenu button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
@media(max-width:1150px){.themeSwitch{margin-left:auto}}
@media(max-width:650px){
  .themeSwitch{grid-row:1;justify-self:end;align-self:center}
}

/* ── 字号下限 ──
   Endfield-1 / Arknights 那两版有些承载内容的文字掉到 12–13px,手机上很吃力。
   这里把【有实质内容】的小字往上抬;mono 那些纯标签保持 12px 不动(它们是装饰性的)。 */
.authors{font-size:14px;line-height:1.85}
.secondary{font-size:14px}
.figureCredit{font-size:13px}
.historyDate{font-size:12.5px}
.historyList p{font-size:15px}
.paperLinks a{font-size:15px}
.labLine{font-size:14px}
.siteFooter p,.footerLinks{font-size:15px}
.recognition a{font-size:15px}
@media(max-width:650px){
  .authors{font-size:14px}
  .paper h3{font-size:21px}
}

/* 名字后面那个点:原来是 #788400 橄榄绿,在浅底上发闷。
   浅色主题下直接跟随正文色;暗色主题里青色本来就干净,保留。 */
.namePeriod{color:var(--name-dot)}

/* ── 头部标志:改用 endfield-1 的字体式处理 ──
   原来是黄色方块 + 斜角裁切;endfield-1 是纯字体 —— 900 字重、字距收到 -.14em、
   整体斜切 10 度,L 用灰色跟 Y 拉开。更克制,也更像 Endfield 的 UI。
   它那版头部是浅底(Y 深 / L #777);我们这版头部是深底,所以反过来:Y 亮 / L 中灰。 */
.brandMark{
  background:none; color:var(--header-fg); clip-path:none; border:0;
  width:auto; height:auto; padding:0 7px 0 0;
  font-family:var(--font-display);
  font-size:2.5rem; font-weight:900; line-height:1; letter-spacing:-.14em;
  transform:skew(-10deg);
}
.brandMark>span{
  position:static; font-size:inherit; color:var(--header-3); left:auto; top:auto;
}
@media(max-width:650px){.brandMark{font-size:2rem;padding-right:5px}}

/* research 区从三栏减到两栏(去掉了 03 / RELIABILITY),
   原来的 repeat(3,1fr) 会留一个空格子。
   ⚠️ 必须加 min-width 限定 —— 不然这条排在媒体查询【之后】,
   会把 850/650 断点里的单栏覆盖掉,手机上仍是两栏(踩过)。 */
@media(min-width:851px){.researchGrid{grid-template-columns:repeat(2,1fr)}}

/* ── 论文区:左列表 + 右粘滞图板 ──
   滚到哪一篇,右边就换成那一篇的图(实机照片或 Figure 1)。
   窄屏放不下两栏,直接隐藏图板,列表退回单栏。 */
.pubLayout{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:clamp(28px,4vw,64px);align-items:start}
.pubList{min-width:0}
.pubPanel{position:sticky;top:calc(var(--header) + 28px);min-width:0}
.pubPanel .figureTop{border-top:2px solid var(--rule-strong);border-bottom:1px solid var(--line);
  padding:10px 0;display:flex;justify-content:space-between;gap:12px;font-size:12px}
.pubPanel .imageFrame{position:relative;margin:10px 0 0;background:var(--surface-2);overflow:hidden;
  aspect-ratio:auto;min-height:150px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-bottom:0}
.pubPanel .imageFrame img{width:100%;height:auto;max-height:340px;object-fit:contain;display:block;
  filter:none;transition:opacity var(--dur) var(--ease)}
.pubPanel .imageFrame:after{content:none}
.pubPanel.swapping .imageFrame img{opacity:0}
.panelPlate{background:var(--surface-2);border:1px solid var(--line);border-top:0;
  border-bottom:2px solid var(--rule-strong);padding:11px 14px 10px}
.panelPlate p{margin:0;font-size:14px;font-weight:600;line-height:1.45}
.panelPlate .figureCredit{margin-top:5px;font-weight:400;background:none;border:0;padding:0}
/* 当前在看的那一篇,左边加一道高亮 */
.paper.current:before{opacity:1}
@media(max-width:1100px){
  .pubLayout{grid-template-columns:1fr}
  .pubPanel{display:none}
}

/* ── hero 去掉配图,改单栏 ──
   图都在下面的论文区了,顶上不必再放一份。 */
.heroGrid{grid-template-columns:1fr;padding-bottom:40px}
.heroIntro{max-width:64ch}
@media(max-width:850px){.heroGrid{grid-template-columns:1fr}}

/* 经历里实验室名带链接:下划线要克制,别喧宾夺主 */
.historyList h4 a{border-bottom:1px solid var(--line);padding-bottom:1px}
.historyList h4 a:hover{border-bottom-color:var(--link-hover)}

/* ═══════════════════════════════════════════════════════════════════
   主题:ARKNIGHTS
   只重定义 token —— 结构规则一条不碰。这就是「换一套皮肤」的全部成本。
   要加第三套主题,照抄这个块改值即可。
   ═══════════════════════════════════════════════════════════════════ */
:root[data-theme="ark"]{
  --bg:#171817; --surface:#1d1f20; --surface-2:#202320; --surface-3:#0f100f;
  --img-bg:#101110; --grid:transparent;

  /* Endfield 的反色块是【深】的;Arknights 反过来用【浅】的,保住明暗交替的节奏 */
  --invert-bg:#f2f3f2; --invert-fg:#171817;
  --invert-text-2:#55564d; --invert-text-3:#686a62;
  --invert-line:#cdcec7; --invert-line-2:#cdcec7;

  --text:#f2f3f2; --text-2:#b7bab1; --text-3:#8b9086; --text-4:#7d8279;
  --line:#33352f; --line-2:#3d403a; --line-3:#5c6157;

  --accent:#1ba8d6; --accent-hover:#3fc0ea; --accent-on:#06263a; /* 界面采样的终端蓝 */
  --accent-deep:#1ba8d6; --focus:#1ba8d6;

  --header-bg:#0f100f; --header-fg:#f2f3f2;
  --header-2:#c4c8be; --header-3:#8f948a;
  --header-line:#2b2d28; --header-border:#4a4d45;

  --name-dot:var(--accent); --rule-strong:var(--accent);
  --link-hover:var(--accent); --shadow-hard:#0b3c56;

  /* ── 主题图形语言 ── */
  --font-mono:'Chakra Petch','IBM Plex Mono',monospace;
  --invert-accent:#0c6f92;         /* 浅底反色区里的深青,青色直接压浅灰看不清 */
  --grid:#ffffff0d;
  --hero-texture:repeating-linear-gradient(0deg,var(--grid) 0 1px,transparent 1px 4px); /* 深色面板的细横纹 */
  --invert-texture:radial-gradient(#00000014 1px,transparent 1px) 0 0 / 12px 12px repeat;  /* 浅色面板的圆点阵(终端页) */
  --cut:7px;
  --label-open:'// '; --label-close:'';
  --signal-1:#1ba8d6; --signal-2:#ffd800; --signal-3:#c8262e; --signal-4:#d9d9d9; /* 终端蓝 / 警示黄 / 罗德岛红 */
  --warn:#ffd800;
  --band-image:repeating-linear-gradient(45deg,var(--warn) 0 10px,var(--bg) 10px 20px) 1; /* 底部黄黑警示纹 */

  background:var(--bg); color:var(--text);
}
/* 只有这几处是结构性的,token 表达不了 */
:root[data-theme="ark"] .brandMark{clip-path:none}
:root[data-theme="ark"] ::selection{color:var(--accent-on);background:var(--accent)}


/* ── 手机头部修正 ──
   650px 断点把头部改成 grid 之后,.themeSwitch 只写了 grid-row:1、没写列,
   于是抢占第一格把 .brand 顶到右边去了。三个按钮变宽后这个 bug 才显形。 */
@media(max-width:650px){
  .siteHeader{grid-template-columns:auto 1fr}
  .brand{grid-column:1;grid-row:1}
  .themeSwitch{grid-column:2;grid-row:1;justify-self:end;margin-left:0}
  .brandText small{display:none}          /* 两行太挤,副标题让位 */
}
@media(max-width:400px){
  .brandText{font-size:13px}
}

/* ── 窄屏内联的论文配图 ── */
.paperFig{margin:18px 0 0;display:none}
.paperFig img{
  display:block;width:100%;height:auto;max-height:260px;object-fit:contain;
  background:var(--surface-2);border:1px solid var(--line);border-bottom:0;
}
.paperFig figcaption{
  background:var(--surface-2);border:1px solid var(--line);border-top:0;
  border-bottom:2px solid var(--rule-strong);
  padding:9px 12px 10px;font-size:13px;line-height:1.5;color:var(--text-2);
}
@media(max-width:1100px){.paperFig{display:block}}
