@import url('fonts.css');
:root{--serif:'Source Serif 4','Noto Serif SC','Songti SC','STSong',serif;--mono:'JetBrains Mono',Menlo,monospace;--bg:#e7e9e4;--fg:#202a23;--ink:#253029;--muted:#566052;--faint:#5e675b;--rule:rgba(49,64,48,.2);--rule-2:rgba(49,64,48,.4);--accent:#943824;--accent-h:#702518;--measure:800px;--gutter:30px}
*{box-sizing:border-box}html{height:100%;-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--serif);font-size:16px;line-height:1.85;-webkit-font-smoothing:antialiased;isolation:isolate}
body:before{content:'';position:fixed;inset:0;z-index:-2;background:url('northern-doorway.webp') 64% center/cover no-repeat;pointer-events:none}
body:after{content:'';position:fixed;inset:0;z-index:-1;background:linear-gradient(90deg,rgba(243,244,238,.72) 0%,rgba(243,244,238,.38) 44%,rgba(243,244,238,0) 75%);pointer-events:none}
::selection{background:var(--accent);color:white}a{color:var(--accent);text-decoration:none;text-underline-offset:4px}a:hover{color:var(--accent-h);text-decoration:underline}button,a{touch-action:manipulation}a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:4px}[hidden]{display:none!important}
.poster-app{height:100svh;height:100dvh;overflow:hidden;display:grid;grid-template-rows:auto minmax(0,1fr) auto;padding:0 clamp(24px,5vw,85px)}
.poster-nav{display:flex;align-items:center;justify-content:space-between;gap:30px;width:100%;min-height:90px;border-bottom:1px solid rgba(40,52,40,.5);margin:0 auto;flex-shrink:0}
.poster-brand{font-family:var(--serif);font-size:23px;font-weight:900;letter-spacing:.06em;color:var(--ink);white-space:nowrap}.poster-brand:hover{color:var(--accent);text-decoration:none}
.poster-tabs{display:flex;align-items:center;gap:clamp(22px,3vw,45px);overflow-x:auto;scrollbar-width:none;white-space:nowrap}.poster-tabs::-webkit-scrollbar{display:none}
.poster-tabs a{display:flex;align-items:center;position:relative;min-height:54px;color:var(--ink);font-size:14px;letter-spacing:.07em;flex-shrink:0;border-bottom:2px solid transparent;margin-top:2px}
.poster-tabs a:hover{color:var(--accent);text-decoration:none}.poster-tabs a[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent);font-weight:700}
.poster-stage{display:flex;align-items:center;min-height:0;padding:32px 0;position:relative}
.poster-panel{width:min(750px,65%);max-height:100%;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(63,76,58,.42) transparent;padding:34px 40px 34px 34px;background:rgba(245,246,240,.91);border:1px solid rgba(88,99,78,.19);backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px)}
.poster-panel:focus{outline:none}.poster-panel:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.poster-panel.home-panel{background:none;backdrop-filter:none;-webkit-backdrop-filter:none;border:0;overflow:auto;width:min(700px,62%);padding:35px 30px 50px 0}
.poster-panel .byline{padding:0;border:0}.home-panel .byline-eyebrow{font:10px/1.8 var(--mono);letter-spacing:.09em;color:var(--muted);margin:0 0 24px}
.home-panel .byline-name{font-family:var(--serif);font-size:clamp(68px,7.8vw,112px);line-height:1.15;font-weight:900;letter-spacing:-.04em;margin:0 0 26px;color:var(--fg)}
.home-panel .byline-role{font-size:15px;line-height:1.9;color:var(--muted);margin:0 0 28px;max-width:31em}
.home-panel .byline-lede{font-size:18px;font-weight:400;line-height:2.1;letter-spacing:.015em;max-width:29em}
.poster-panel .sec{padding:0;border:0}.poster-panel .sec-head{margin-bottom:25px;gap:15px;grid-template-columns:26px 1fr}.poster-panel .sec-num{font-size:10px;color:var(--accent)}
.poster-panel .sec-title{font-size:29px;line-height:1.4}.poster-panel .sec-title .sub{font:10px/1.7 var(--mono);letter-spacing:.06em;margin-left:12px;color:var(--muted)}
.poster-panel .pub{padding:19px 0;grid-template-columns:37px 1fr;gap:18px}.poster-panel .pub:first-child{padding-top:0}.poster-panel .pub-title{font-size:17px;line-height:1.8;font-weight:600}.poster-panel .pub-meta{font-size:12px;line-height:1.8}.poster-panel .pub-year{font-size:11px;color:var(--accent)}
.poster-panel .course-head{display:block}.poster-panel .course-name{font-size:20px}.poster-panel .course-meta{display:block;margin-top:6px;font-size:10px;line-height:1.8}.poster-panel .course-desc{font-size:13px;line-height:1.9}.poster-panel .course{padding:24px 0}.poster-panel .course:first-child{padding-top:0}.poster-panel .lect{padding:7px 0}.poster-panel .lect-link{font-size:13px}.poster-panel .lect-num{font-size:10px}
.poster-panel .cv-role{font-size:18px}.poster-panel .cv-place{font-size:13px}.poster-panel .cv-row{padding:17px 0}.poster-panel .cv-when{font-size:11px}.poster-panel .contact{font-size:14px;line-height:2}.poster-panel .contact dd{font-size:14px}.poster-panel .contact dt{font-size:11px}
#panel-blog .byline-name{font-size:36px;line-height:1.35;margin:12px 0 18px;font-weight:700}#panel-blog .byline-eyebrow{font:10px/1.8 var(--mono);letter-spacing:.06em;color:var(--muted);margin:0}#panel-blog .byline-lede{font-size:15px;line-height:1.9;margin:0 0 28px}
#panel-blog .posts{list-style:none;margin:0;padding:0}#panel-blog .post{display:grid;grid-template-columns:76px 1fr;gap:20px;padding:23px 0;border-top:1px solid var(--rule)}#panel-blog .post-when{font:10px/1.8 var(--mono);color:var(--muted);padding-top:6px}#panel-blog .post-title{font-family:var(--serif);font-size:20px;line-height:1.75;font-weight:600;margin:0 0 12px}#panel-blog .post-title a{color:var(--ink)}#panel-blog .post-title a:hover{color:var(--accent)}#panel-blog .post-excerpt{font-size:13px;line-height:1.85;margin:0 0 15px;color:var(--muted)}#panel-blog .post-tag{font:10px/1.8 var(--mono);color:var(--muted)}
.poster-app>footer{margin:0;padding:16px 0 20px;border-top:1px solid rgba(40,52,40,.4);font:10px/1.6 var(--mono);letter-spacing:.025em;color:var(--muted);background:none}.poster-app>footer .wrap{max-width:none;margin:0;padding:0}.poster-app>footer a{color:var(--muted)}
.english{font-family:'Source Serif 4','Noto Serif SC',Georgia,serif}.english .home-panel .byline-name{font-family:'Source Serif 4','Noto Serif SC',serif;font-size:clamp(62px,7.2vw,103px);font-weight:700;letter-spacing:-.045em}.english .home-panel .byline-eyebrow{font-size:10px;max-width:35em}.english .home-panel .byline-role{font-size:17px}.english .home-panel .byline-lede{font-size:21px;line-height:1.8;max-width:27em}.english .poster-tabs{gap:clamp(17px,2.2vw,33px)}.english .poster-tabs a{letter-spacing:0;font-size:15px}.english .pub-title{font-size:19px}.english .poster-panel .sec-title .sub{display:block;margin:6px 0 0}
/* Article/index routes retain the original text and charts on the same poster. */
.poster-reading{padding:0 clamp(24px,5vw,85px)}.poster-reading .poster-nav{margin-bottom:32px}.poster-reading-surface{max-width:840px;margin:0 0 32px;padding:36px 45px;background:rgba(245,246,240,.96);border:1px solid rgba(88,99,78,.19)}.poster-reading .article-head,.poster-reading .byline{padding:0 0 30px}.poster-reading .article-head h1{font-size:36px;line-height:1.5}.poster-reading .article-lede{font-size:18px;line-height:1.9}.poster-reading article{padding:30px 0 0}.poster-reading article p{font-size:17px;line-height:2}.poster-reading article h2{font-size:26px}.poster-reading .byline-name{font-size:45px}.poster-reading footer{margin:0;padding:18px 0 26px;border-top:1px solid rgba(40,52,40,.4);color:var(--muted);font-size:10px}.poster-reading footer>.wrap{max-width:none;padding:0}.poster-reading footer a{color:var(--muted)}
@media(min-width:1600px){.poster-panel{width:min(800px,60%)}.poster-panel.home-panel{width:690px}}
@media(max-width:1000px){.poster-app{padding-inline:30px}.poster-nav{min-height:77px;gap:20px}.poster-tabs{gap:24px}.poster-panel{width:72%;padding:29px}.poster-panel.home-panel{width:69%}.home-panel .byline-name{font-size:82px}.home-panel .byline-lede{font-size:17px}.poster-panel .sec-title .sub{display:block;margin:8px 0 0}.poster-reading-surface{margin-inline:0;width:min(100%,800px)}.english .poster-brand{font-size:18px}.english .poster-tabs{gap:19px}.english .poster-tabs a{font-size:14px}}
@media(max-width:700px){
 body:before{background-position:85% center}body:after{background:linear-gradient(0deg,rgba(242,244,237,.5),transparent 77%)}
 .poster-app{padding-inline:20px}.poster-nav{display:block;min-height:0;padding-top:17px;border-bottom-color:rgba(40,52,40,.4)}.poster-brand{font-size:19px;line-height:1.4;display:inline-block;margin-bottom:4px}.poster-tabs{gap:0;justify-content:space-between;width:100%}.poster-tabs a{font-size:12px;min-height:45px;letter-spacing:.04em}.poster-stage{align-items:flex-end;padding:18px 0;min-height:0}.poster-panel{width:100%;max-height:calc(100% - 100px);padding:23px 22px;background:rgba(245,246,240,.94);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
 .poster-panel.home-panel{width:100%;padding:24px 20px;background:rgba(245,246,240,.83);border:1px solid rgba(88,99,78,.15);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}.home-panel .byline-eyebrow{font-size:9px;letter-spacing:.015em;line-height:1.9;margin-bottom:17px}.home-panel .byline-name{font-size:61px;margin-bottom:17px;line-height:1.15;letter-spacing:-.045em}.home-panel .byline-role{font-size:12px;line-height:1.85;margin-bottom:15px}.home-panel .byline-lede{font-size:14px;line-height:2;letter-spacing:0}.poster-panel .sec-head{display:block;margin-bottom:23px}.poster-panel .sec-num{display:block;margin-bottom:7px;font-size:10px}.poster-panel .sec-title{font-size:26px}.poster-panel .sec-title .sub{font-size:9px;letter-spacing:.03em;margin-top:7px}
 .poster-panel .pub{display:block;padding:19px 0}.poster-panel .pub-year{display:block;font-size:10px;margin-bottom:7px}.poster-panel .pub-title{font-size:16px;line-height:1.8}.poster-panel .pub-meta{font-size:11px}.poster-panel .course-name{font-size:18px}.poster-panel .course-desc{font-size:12px}.poster-panel .lect-link{font-size:12px;line-height:1.8}.poster-panel .lect{gap:10px;grid-template-columns:25px 1fr;padding:9px 0}.poster-panel .cv-row{display:block;padding:15px 0}.poster-panel .cv-when{display:block;margin-bottom:7px}.poster-panel .cv-role{font-size:17px}.poster-panel .cv-place{font-size:12px}.poster-panel .contact dd{font-size:13px}#panel-blog .post{display:block}#panel-blog .post-when{display:block;margin-bottom:9px}#panel-blog .post-title{font-size:19px}#panel-blog .byline-lede{font-size:13px}#panel-blog .post-excerpt{font-size:12px}
 .poster-app>footer{padding:10px 0 14px;font-size:8px;letter-spacing:0}.poster-app>footer .foot-row{gap:8px}.english .poster-tabs{gap:18px;justify-content:flex-start}.english .poster-tabs a{font-size:12px}.english .home-panel .byline-name{font-size:53px;line-height:1.05}.english .home-panel .byline-role{font-size:14px}.english .home-panel .byline-lede{font-size:16px;line-height:1.8}.english .home-panel .byline-eyebrow{font-size:9px}.english .pub-title{font-size:17px}
 .poster-reading{padding:0 20px}.poster-reading .poster-nav{margin-bottom:120px}.poster-reading-surface{padding:25px 22px;margin-bottom:20px}.poster-reading .article-head h1{font-size:28px;line-height:1.55}.poster-reading .article-lede{font-size:16px}.poster-reading article p{font-size:16px;line-height:2}.poster-reading article h2{font-size:23px}.poster-reading .byline-name{font-size:37px}.poster-reading footer{font-size:9px}
}
@media(max-height:650px){.poster-stage{padding:18px 0}.poster-panel{max-height:100%}.poster-panel.home-panel{padding-block:22px}.home-panel .byline-name{font-size:61px;margin-bottom:18px}.home-panel .byline-eyebrow{margin-bottom:15px}.home-panel .byline-role{margin-bottom:15px}.home-panel .byline-lede{font-size:15px}.poster-app>footer{padding-block:8px}.poster-reading .poster-nav{margin-bottom:30px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
@media print{body:before,body:after,.poster-nav,footer{display:none}.poster-app{height:auto;display:block;overflow:visible;padding:0}.poster-stage{display:block;padding:0}.poster-panel,.poster-panel.home-panel{display:block!important;width:100%;max-height:none;overflow:visible;background:white;border:0;backdrop-filter:none;padding:20px 0}.poster-reading-surface{background:white;border:0}.home-panel .byline-name{font-size:40px}.poster-panel .sec{page-break-inside:avoid}}

/* Text belongs directly on the shared poster, at every screen size. */
@media screen{
 :root{
  --bg:#172019;
  --surface:transparent;
  --fg:#f1f2e9;
  --ink:#e8ece3;
  --muted:#d3d9cf;
  --faint:#d3d9cf;
  --rule:rgba(232,236,227,.28);
  --rule-2:#d3d9cf;
  --accent:#f7ceb8;
  --accent-h:#ffe0cc;
  --c-error:#ffcfbf;
  --poster-shade:rgba(7,15,12,.68);
 }
 /* Uniform coverage keeps text readable as the image crops or panels scroll. */
 body:after{display:block;background:var(--poster-shade)}
 ::selection{background:var(--accent);color:var(--bg)}
 .poster-nav{border-bottom-color:var(--rule)}
 .poster-app>footer,.poster-reading footer{border-top-color:var(--rule)}
 .poster-panel{scrollbar-color:var(--muted) transparent}
 .poster-panel,.poster-panel.home-panel,.poster-reading-surface{
  background:transparent;
  border:0;
  backdrop-filter:none;
  -webkit-backdrop-filter:none;
 }
 /* Original chart scripts use inline dark ink; keep axes/legends legible.
    Heatmap cell labels retain their own dark/light fills and data colors. */
 .poster-reading :is(#trigger-chart,#msg-length-chart,#intensity-chart,#cooccurrence-chart,#confidence-chart) :is(svg,figure){color:var(--ink)!important}
 .poster-reading #word-cloud text{fill:var(--accent)!important}
 .poster-reading [aria-label="tip"] text{fill:#172019}
 .poster-reading .emotion-bar-segment:nth-child(2),
 .poster-reading .emotion-bar-segment:nth-child(3){color:#172019}
}
