/* nxy.one — editorial serif / mono */
@font-face{font-family:"Newsreader";src:url(/assets/fonts/newsreader-latin-400-normal.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Newsreader";src:url(/assets/fonts/newsreader-latin-500-normal.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Newsreader";src:url(/assets/fonts/newsreader-latin-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(/assets/fonts/ibm-plex-mono-latin-400-normal.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(/assets/fonts/ibm-plex-mono-latin-500-normal.woff2) format("woff2");font-weight:500;font-display:swap}

/* ---------- palette: white + fluoro (C) ---------- */
:root{
  --paper:#ffffff; --ink:#0a0a0a; --dim:#6e6e6e; --rule:#e2e2e2; --hover:#f4f4f4; --hl:#c6ff3d;
  --accent:#0a0a0a; --concept:#0a0a0a; --place:#9a9a9a; --person:#a6e619;
  --k-writing:#0a0a0a; --k-curatorial:#c6ff3d; --k-talks:#9a9a9a; --k-podcasts:#9a9a9a;

  --serif:"Newsreader","Songti SC","STSong","Noto Serif CJK SC","Source Han Serif SC","Source Han Serif",serif;
  --mono:"Plex Mono",ui-monospace,"SFMono-Regular",Menlo,"PingFang SC",monospace;
  --measure:40rem; --gutter:clamp(16px,4vw,48px);
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;overflow-x:clip;background:var(--paper);color:var(--ink);font-family:var(--serif);font-size:19px;line-height:1.55;
  display:flex;flex-direction:column;min-height:100vh}
main{flex:1;width:100%;max-width:72rem;margin:0 auto;padding:0 var(--gutter) 4rem}
a{color:inherit;text-decoration-color:var(--rule);text-underline-offset:3px}
a:hover{text-decoration-color:var(--accent)}
.mono{font-family:var(--mono);font-size:.72rem;letter-spacing:.02em;text-transform:uppercase}
.dim{color:var(--dim)}
.zh{font-family:var(--serif)}
[lang="zh"],.zh{letter-spacing:.02em}
img{max-width:100%;height:auto}

/* masthead */
.masthead{max-width:72rem;width:100%;margin:0 auto;padding:1.4rem var(--gutter);display:flex;gap:1rem 2rem;
  align-items:baseline;justify-content:space-between;flex-wrap:wrap;border-bottom:1px solid var(--ink)}
.wordmark{font-size:1.5rem;text-decoration:none;font-weight:500;letter-spacing:-.01em}
.wordmark .zh{font-weight:400;color:var(--dim);margin-left:.2em}
.nav{display:flex;flex-wrap:wrap;gap:.3rem 1.3rem;font-family:var(--mono);font-size:.74rem;text-transform:uppercase;letter-spacing:.04em}
.nav a{text-decoration:none;padding:.2rem 0;border-bottom:1px solid transparent}
.nav a:hover,.nav a[aria-current]{border-bottom-color:var(--accent)}

.colophon{max-width:72rem;width:100%;margin:0 auto;padding:1.2rem var(--gutter);border-top:1px solid var(--rule);
  display:flex;justify-content:space-between;color:var(--dim);font-size:.85rem}

/* headings */
h1,h2,h3{font-weight:400;line-height:1.15;letter-spacing:-.01em}
.page-head{padding:3rem 0 1.5rem;display:flex;flex-wrap:wrap;gap:1rem 2rem;align-items:end;justify-content:space-between}
.page-head h1{font-size:clamp(2.2rem,6vw,3.6rem);margin:0}
.page-head p{margin:0;max-width:var(--measure)}
.section-head{display:flex;justify-content:space-between;align-items:baseline;border-bottom:1px solid var(--ink);margin-top:3rem}
.section-head h2{margin:.4rem 0}
.group{margin-top:2.5rem}
.group-title{font-size:1.6rem;margin:0;padding-bottom:.4rem;border-bottom:1px solid var(--ink);display:flex;gap:.6rem;align-items:baseline}
.group-title .count{margin-left:auto}

/* home */


/* lists */
.list{list-style:none;margin:0;padding:0}
.item a{display:grid;grid-template-columns:3.5rem 1fr 14rem 6rem;gap:1rem;padding:.75rem .4rem;border-bottom:1px solid var(--rule);
  text-decoration:none;align-items:baseline}
.item a:hover{background:var(--hl)}
.item .ttl{font-size:1.1rem;line-height:1.3}
.item .ttl .zh{display:block;font-size:.95rem;margin-top:.15rem}
.item .src{font-size:.9rem;line-height:1.35}
.item .knd{text-align:right}
.item[hidden]{display:none}
@media (max-width:760px){
  .item a{grid-template-columns:3rem 1fr;gap:.2rem .8rem}
  .item .src,.item .knd{grid-column:2;text-align:left}
}

/* filters */
.filters{display:flex;flex-wrap:wrap;gap:.35rem}
.filters button{font:inherit;font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;
  background:none;color:var(--ink);border:1px solid var(--rule);padding:.35rem .6rem;cursor:pointer;border-radius:0}
.filters button[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.filters button[aria-pressed="true"]{background:var(--hl);color:var(--ink);border-color:var(--ink)}
.archive-controls{display:flex;flex-direction:column;gap:.7rem;margin-bottom:1.5rem}
.archive-controls input{font:inherit;font-family:var(--serif);font-size:1.1rem;text-transform:none;letter-spacing:0;
  background:transparent;color:var(--ink);border:0;border-bottom:1px solid var(--ink);padding:.4rem 0;max-width:28rem;border-radius:0}
.archive-controls input:focus{outline:none;border-bottom-color:var(--accent)}
.active-tag{margin:0}
.active-tag button{font:inherit;background:none;border:0;color:var(--accent);cursor:pointer;padding:0 0 0 .5rem}

/* cards */
.cards{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:2.5rem 1.8rem}
.card a{text-decoration:none;display:block}
.card-img{aspect-ratio:4/3;background:var(--hover);overflow:hidden;display:flex;align-items:end;padding:.8rem;margin-bottom:.7rem}
.card-img img{width:100%;height:100%;object-fit:cover;margin:-.8rem}
.card-img.empty{border:1px solid var(--rule);background:repeating-linear-gradient(135deg,transparent 0 10px,var(--hover) 10px 11px)}
.card p{margin:.2rem 0}
.card h2{font-size:1.3rem;margin:.3rem 0}
.card a:hover h2{text-decoration:underline;text-decoration-color:var(--accent)}

/* entry */
.entry{max-width:48rem;margin:0 auto;padding-top:3rem}
.kicker a{text-decoration:none;color:var(--accent)}
.entry-title{font-size:clamp(1.9rem,4.8vw,3rem);margin:.6rem 0 1.5rem}
.entry-title .sub{display:block;font-size:.55em;color:var(--dim);margin-top:.5rem;line-height:1.3}
.meta{display:grid;grid-template-columns:max-content 1fr;gap:.25rem 1.2rem;margin:0 0 1.5rem;font-size:.95rem}
.meta div{display:contents}
.meta dt{font-family:var(--mono);font-size:.7rem;text-transform:uppercase;color:var(--dim);padding-top:.25rem}
.meta dd{margin:0}
.standfirst{font-size:1.2rem;line-height:1.5;border-left:2px solid var(--accent);padding-left:1rem;margin:0 0 1.5rem}
.actions{display:flex;flex-wrap:wrap;gap:.6rem;margin:0 0 2rem}
.actions a{border:1px solid var(--ink);padding:.45rem .8rem;text-decoration:none}
.actions a:hover{background:var(--ink);color:var(--paper)}
.pdf-frame{border:1px solid var(--rule);height:80vh}
.pdf-frame iframe{width:100%;height:100%;border:0}
.prose{max-width:var(--measure);margin:0;font-size:1.08rem}
.prose[lang="zh"]{line-height:1.9;text-align:justify}
.prose img{display:block;margin:1.8rem auto .4rem}
.prose blockquote{margin:1.5rem 0;padding-left:1rem;border-left:2px solid var(--rule);color:var(--dim)}
.tags{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem;padding:0;margin:3rem 0 0;border-top:1px solid var(--rule);padding-top:1rem}
.tags a{text-decoration:none;border:1px solid currentColor;padding:.2rem .5rem;display:inline-block}
.related{margin-top:3rem}
.related h2{border-bottom:1px solid var(--ink);margin:0;padding-bottom:.4rem}
.about{padding-top:3rem}
.about h1{font-size:clamp(2.2rem,6vw,3.6rem)}
.empty-note{padding:1rem 0}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ---------- home ---------- */
.hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2rem 4rem;align-items:end;padding:3.5rem 0 2rem}
.lede{font-size:clamp(1.55rem,3.3vw,2.5rem);line-height:1.2;margin:0 0 .8rem;max-width:22em}
.lede.zh{color:var(--dim);font-size:clamp(1.1rem,2.2vw,1.45rem);line-height:1.5}
.lede-sub{max-width:var(--measure);color:var(--dim);margin:0}
.stats{list-style:none;margin:0;padding:0;display:flex;gap:2rem}
.stats a{display:flex;flex-direction:column;text-decoration:none}
.stats .n{font-size:clamp(2.6rem,6vw,4.4rem);line-height:1;color:var(--accent);font-feature-settings:"lnum"}
.stats .n{color:var(--ink);background:linear-gradient(transparent 62%,var(--hl) 62%)}
.stats a:hover .mono{text-decoration:underline}
@media (max-width:760px){.hero{grid-template-columns:1fr}.stats{gap:1.4rem}}

.bleed{width:100vw;margin-left:calc(50% - 50vw)}
.graph-stage{position:relative;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink)}
.graph{position:relative;width:100%;height:clamp(320px,55vh,560px);border:1px solid var(--rule);touch-action:none;overflow:hidden}
.graph-home{height:clamp(420px,78vh,820px);border:0}
.graph svg{display:block;width:100%;height:100%}
.graph .links line{stroke:var(--rule);stroke-width:1}
.graph .links line.hot{stroke:var(--ink);stroke-width:1.2}
.graph .node{cursor:pointer;transition:opacity .15s}
.graph .node.dimmed,.graph line.dimmed{opacity:.12}

.graph .work:hover .frame,.graph .work:focus .frame{stroke:var(--ink);stroke-width:2}
.graph .work text.yr{font-family:var(--mono);font-size:9px}
.graph .k-curatorial text.yr{fill:#4b7a00}
.graph .tag circle{stroke:var(--paper);stroke-width:1.5}
.graph .t-person circle{stroke:var(--ink);stroke-width:.8}
.graph .tag.selected circle{stroke:var(--ink);stroke-width:3}
.graph text.lbl{font-family:var(--mono);font-size:10px;fill:var(--ink);pointer-events:none;paint-order:stroke;stroke:var(--paper);stroke-width:3px}
.graph text.lbl.minor{opacity:0}
.graph .tag:hover text.lbl,.graph .tag.near text.lbl,.graph .tag:focus text.lbl{opacity:1}
.graph:focus-within .node:focus{outline:none}
.graph-card{position:absolute;z-index:2;display:flex;gap:.7rem;max-width:250px;background:var(--paper);border:1px solid var(--ink);padding:.6rem;pointer-events:none;box-shadow:4px 4px 0 var(--ink)}
.graph-card img{width:60px;height:80px;object-fit:cover;flex:none}
.graph-card p{margin:0 0 .2rem;line-height:1.3}
.graph-card .t{font-size:.95rem}
.graph-card .dim{font-size:.8rem}
.graph-legend{position:absolute;left:var(--gutter);bottom:.8rem;display:flex;flex-wrap:wrap;gap:.3rem 1rem;pointer-events:none;background:color-mix(in srgb,var(--paper) 85%,transparent);padding:.3rem .5rem}
.graph-legend .sw{display:inline-block;width:9px;height:12px;margin-right:.35rem;vertical-align:-1px;background:var(--k-writing)}
.graph-legend .sw.k-curatorial{background:var(--k-curatorial);outline:1px solid var(--ink)}
.graph-legend .sw.k-talks{background:var(--k-talks)}
.graph-legend .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:.35rem}
.dot.t-concept{background:var(--concept)} .dot.t-place{background:var(--place)} .dot.t-person{background:var(--person)}
.legend{margin:.5rem 0 0}
.t-concept{color:var(--concept)} .t-place{color:var(--place)} .t-person{color:var(--person)}
.t-person{color:#4b7a00}
.archive-graph{margin-bottom:1.5rem}
.archive-graph summary{cursor:pointer;padding:.4rem 0}

.recent{margin-top:1rem}
.thumbs{list-style:none;margin:1.2rem 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(9.5rem,1fr));gap:1.8rem 1.2rem}
.thumb a{text-decoration:none;display:block}
.thumb-img{aspect-ratio:3/4;overflow:hidden;background:var(--hover);border:1px solid var(--rule);margin-bottom:.5rem}
.thumb-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s}
.thumb a:hover .thumb-img img{transform:scale(1.04)}
.thumb-img.empty{display:flex;align-items:flex-end;padding:.7rem;background:var(--k-writing);border-color:var(--k-writing)}
.k-curatorial .thumb-img.empty{background:var(--k-curatorial)}
.k-talks .thumb-img.empty,.k-podcasts .thumb-img.empty{background:var(--k-talks)}
.thumb-img .ph{color:var(--paper);font-size:1.15rem;line-height:1.25}
.k-curatorial .ph{color:var(--ink)}
.thumb p{margin:.1rem 0}
.thumb-title{font-size:.98rem;line-height:1.3}
.thumb a:hover .thumb-title{text-decoration:underline;text-decoration-color:var(--accent)}
@media (max-width:760px){
  .graph-legend{position:static;padding:.6rem var(--gutter);background:none}
  .thumbs{grid-template-columns:repeat(auto-fill,minmax(6.4rem,1fr));gap:1.2rem .8rem}
  .thumb-img .ph{font-size:.95rem}
}
.cover{margin:0 0 2rem;max-width:22rem}
.cover img{display:block;border:1px solid var(--rule)}
/* footnotes */
.prose .footnote-ref a{text-decoration:none;font-family:var(--mono);font-size:.7em;padding:0 .1em;background:var(--hl)}
.prose .footnotes-sep{border:0;border-top:1px solid var(--rule);margin:3rem 0 1rem}
.prose .footnotes{font-size:.85rem;color:var(--dim);line-height:1.6}
.prose .footnotes li{margin-bottom:.4rem}
.prose .footnote-backref{text-decoration:none}
.prose a{word-break:break-word}
.prose .footnotes{text-align:left}

/* ---------- home v2: slideshow + text network ---------- */
.hero-slides{grid-template-columns:minmax(0,1fr) minmax(0,26rem);align-items:start;padding-top:3rem}
.hero-links{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;margin-top:1.8rem}
.hero-links a{text-decoration:none;border-bottom:2px solid var(--hl);padding-bottom:.1rem}
.hero-links a:hover{background:var(--hl)}
.slideshow{margin:0}
.slides{position:relative;aspect-ratio:4/5;background:var(--paper);overflow:hidden;border:1px solid var(--ink)}
.slide{position:absolute;inset:0;opacity:0;transition:opacity .9s ease;pointer-events:none}
.slide.is-active{opacity:1;pointer-events:auto}
.slide img{width:100%;height:100%;object-fit:contain;display:block}
.slide-caption{position:relative;min-height:5.2rem;padding-top:.7rem}
.cap{display:none;flex-direction:column;gap:.15rem;padding-top:2.4rem}
.cap.is-active{display:flex}
.cap-title{font-size:1.05rem;line-height:1.3;text-decoration:none}
.cap-title:hover{background:var(--hl)}
.cap-venue{font-size:.85rem;line-height:1.35}
.slide-nav{position:absolute;right:0;top:.6rem;display:flex;align-items:center;gap:.4rem}
.slide-nav button{font:inherit;background:none;border:1px solid var(--ink);color:var(--ink);width:1.9rem;height:1.9rem;cursor:pointer;padding:0}
.slide-nav button:hover{background:var(--hl)}
@media (prefers-reduced-motion:reduce){.slide{transition:none}}
@media (max-width:760px){.hero-slides{grid-template-columns:1fr}.slideshow{max-width:28rem}}

.network{margin-top:2.5rem}
.textgraph{position:relative;width:100%;height:clamp(460px,80vh,820px);touch-action:none;overflow:hidden}
.textgraph svg{display:block;width:100%;height:100%}
.textgraph .tlinks line{stroke:var(--rule)}
.textgraph .tlinks line.hot{stroke:var(--ink)}
.textgraph .tnode{font-family:var(--serif);cursor:pointer;fill:var(--ink);transition:opacity .15s}
.textgraph .tnode.t-concept{font-style:italic}
.textgraph .tnode.t-place{font-family:var(--mono);text-transform:uppercase;letter-spacing:.04em;fill:#6e6e6e}
.textgraph .tnode.t-person{fill:var(--ink)}
.textgraph .tnode.hot,.textgraph .tnode:focus{paint-order:stroke;stroke:var(--hl);stroke-width:7px;stroke-linejoin:round;outline:none}
.textgraph .dimmed{opacity:.12}
.legend .t-concept{font-style:italic;color:var(--ink)}
.legend .t-place{color:#6e6e6e}
.legend .t-person{color:var(--ink);font-family:var(--serif);text-transform:none}
.textgraph .tnode.selected{paint-order:stroke;stroke:var(--hl);stroke-width:8px;stroke-linejoin:round}
.textgraph-archive{height:clamp(380px,60vh,640px);border:1px solid var(--rule)}
@media (max-width:640px){.textgraph{height:540px}}
.card-img:not(.empty){padding:0}
.card-img img{margin:0}

/* 本站首发 badge */
.badge{display:inline-block;border:1px solid var(--ink);padding:.05rem .4rem;font-size:.7rem;color:var(--ink)}
.jump{display:flex;flex-wrap:wrap;gap:.3rem 1rem;font-size:.75rem;margin:0 0 1rem}
.jump a{color:inherit}
/* original / translation switch */
.lang-switch{display:flex;gap:.35rem;margin:1.5rem 0 1rem}
.lang-switch button{font:inherit;font-size:.72rem;letter-spacing:.03em;padding:.35rem .7rem;border:1px solid var(--ink);background:var(--paper);color:var(--ink);cursor:pointer}
.lang-switch button[aria-pressed="true"]{background:var(--hl)}
.tr-note{font-size:.72rem;border-left:3px solid var(--hl);padding:.4rem .7rem;background:#f6f6f2;margin:0 0 1.5rem}
.lang-tag{font-size:.62rem;border:1px solid var(--rule);padding:0 .3rem;margin-left:.3rem;vertical-align:.15em;white-space:nowrap;color:var(--dim)}

/* figures & captions */
.prose figure.fig{margin:2.2rem 0}
.prose figure.fig img{margin:0 auto}
.prose figure.fig img+img{margin-top:.8rem}
.prose figcaption{margin-top:.6rem;font-size:.78rem;line-height:1.55;color:var(--dim);text-align:left;border-left:2px solid var(--hl);padding:.05rem 0 .05rem .65rem;letter-spacing:0}
.prose figcaption p{margin:0}
.prose figcaption em{font-style:italic}
.prose figcaption a{color:inherit}

/* curatorial statement */
.statement{max-width:var(--measure);margin:0 0 2.5rem;border-left:3px solid var(--hl);padding-left:1rem}
.statement p{font-size:1.12rem;line-height:1.55;margin:0 0 .8rem}
.statement p.zh{font-size:1rem;line-height:1.8}

/* archive filters scope the network */
.textgraph .tnode.out{opacity:.08;pointer-events:none}
.textgraph .tlinks line.out{opacity:.04}
.textgraph .tnode,.textgraph .tlinks line{transition:opacity .25s}
.prose figure.fig img{max-height:85vh;width:auto;max-width:100%}
