// sections.jsx — 首屏之下的「报刊」版式与七个页面
// 版式参考 Dezeen 米兰设计周报:标题上压一道红线、粗黑体红字标题、正文窄栏、
// 大字引言配靛蓝署名、「日期 · 地点。」粗体起句接正文。
// 页面:home / festival / exhibitions / collection / gallery / about / visit,由 app.jsx 按 <body data-page> 装配。

const PAGE_ORDER = ['home', 'festival', 'exhibitions', 'collection', 'gallery', 'about', 'visit'];

// 倒计时按北京时间算日历天数:把「现在」拨到东八区再取年月日
function daysUntilBeijing(iso) {
  const bj = new Date(Date.now() + 8 * 3600e3);
  const today = Date.UTC(bj.getUTCFullYear(), bj.getUTCMonth(), bj.getUTCDate());
  const [y, m, d] = iso.split('-').map(Number);
  return Math.round((Date.UTC(y, m - 1, d) - today) / 86400e3);
}
const FEST_DATE = '2026-09-20';

// ── 版式零件 ──────────────────────────────────────────────
function Folio({ lang, page, right }) {
  const p = T.pages[lang];
  const n = String(PAGE_ORDER.indexOf(page) + 1).padStart(2, '0');
  return (
    <div className="ed-folio mono">
      <span>{n} / {p[page]}</span>
      <span>{right || location.host}</span>
    </div>);
}

function EdHead({ label, title, lede }) {
  return (
    <header className="ed-head">
      {label && <div className="ed-label">{label}</div>}
      <h1 className="ed-title">{rich(title)}</h1>
      {lede && <p className="ed-lede">{lede}</p>}
    </header>);
}

function Pull({ q, by }) {
  return (
    <blockquote className="ed-pull">
      <p>{q}</p>
      {by && <cite>{by}</cite>}
    </blockquote>);
}

function Fig({ src, alt, cap, ratio, className }) {
  return (
    <figure className={'ed-fig' + (className ? ' ' + className : '')} style={ratio ? { '--ratio': ratio } : null}>
      <img src={src} alt={alt || cap || ''} loading="lazy" decoding="async" />
      {cap && <figcaption className="ed-cap mono">{cap}</figcaption>}
    </figure>);
}

function RunIn({ lead, children }) {
  return <p className="ed-p"><strong className="ed-runin">{lead}</strong> {children}</p>;
}

function Countdown({ days, t, big }) {
  if (days > 0) return <><b>{days}</b><span>{t.days}</span></>;
  return <span className={big ? 'big' : ''}>{days === 0 ? t.today : t.past}</span>;
}

// ── 首页第二格:920 倒计时 ──────────────────────────────
// 红底通栏。左:365 刻度的年轮表盘,9·20 在正上方,从「今天」到 9·20 之间的刻度点亮;
// 右:届次、日期、历届、入口。天数按北京时间的日历天算(9/6 → 14 天),与 920 页、头版同一口径;
// 不放时分秒——「13 天 23:59」和「14 天」并排会打架。分享走 Web Share,不支持就复制链接。
const FEST_TS = Date.UTC(2026, 8, 20) - 8 * 3600e3;   // 2026-09-20 00:00 北京时间
function useCountdown() {
  const calc = () => {
    const ms = FEST_TS - Date.now();
    const d = Math.floor(ms / 86400e3), r = ms - d * 86400e3;
    return { ms, d, h: Math.floor(r / 3600e3), m: Math.floor(r % 3600e3 / 60e3), s: Math.floor(r % 60e3 / 1e3) };
  };
  const [c, setC] = React.useState(calc);
  React.useEffect(() => { const id = setInterval(() => setC(calc()), 30e3); return () => clearInterval(id); }, []);
  return c;
}

function Countdown920({ lang }) {
  const t = T.count[lang];
  const c = useCountdown();
  const [msg, setMsg] = React.useState('');
  const left = Math.max(0, Math.min(365, Math.ceil(c.ms / 86400e3)));   // 表盘按日历天
  const step = 360 / 365, R = 250;
  const ticks = [];
  for (let k = 0; k < 365; k++) {
    const lit = k <= left && c.ms > 0;
    const a = (-90 - k * step) * Math.PI / 180, r2 = lit ? 222 : 238;
    ticks.push(<line key={k} x1={300 + R * Math.cos(a)} y1={300 + R * Math.sin(a)} x2={300 + r2 * Math.cos(a)} y2={300 + r2 * Math.sin(a)} strokeWidth={lit ? 2.2 : 1} opacity={lit ? 1 : .32} />);
  }
  const ta = (-90 - left * step) * Math.PI / 180;
  const share = async () => {
    const url = location.origin + '/festival';
    if (navigator.share) { try { await navigator.share({ title: t.label, text: t.label + ' · ' + t.date, url }); } catch (e) {} return; }
    try { await navigator.clipboard.writeText(url); setMsg(t.copied); setTimeout(() => setMsg(''), 1600); } catch (e) {}
  };
  return (
    <section className="cd" id="countdown" data-screen-label="02 Countdown">
      <div className="cd-in">
        <div className="cd-dial">
          <svg viewBox="0 0 600 600" aria-hidden="true">
            <g stroke="currentColor" strokeLinecap="round">{ticks}</g>
            <circle cx="300" cy="50" r="7" fill="currentColor" />
            <text x="300" y="92" textAnchor="middle" fontSize="16" letterSpacing="3" fill="currentColor" fontFamily="var(--font-mono), monospace">{t.dialTarget}</text>
            {c.ms > 0 && left > 0 && <>
              <circle cx={300 + R * Math.cos(ta)} cy={300 + R * Math.sin(ta)} r="5" fill="currentColor" />
              <text x={300 + 290 * Math.cos(ta)} y={300 + 290 * Math.sin(ta)} textAnchor="middle" dominantBaseline="middle" fontSize="15" letterSpacing="2" fill="currentColor" fontFamily="var(--font-mono), monospace">{t.dialNow}</text>
            </>}
          </svg>
          <div className="cd-num" aria-live="polite">
            {c.ms > 0
              ? <><b>{left}</b><span>{t.days}</span></>
              : <b className="cd-today">{c.ms > -86400e3 ? t.today : t.past}</b>}
          </div>
        </div>
        <div className="cd-text">
          <div className="cd-label">{t.label}</div>
          <div className="cd-date mono">{t.date}</div>
          <div className="cd-editions mono">{t.editions}</div>
          <p className="cd-line">{t.line}</p>
          <div className="cd-cta">
            <a className="cd-btn" href="/festival">{t.more} →</a>
            <button type="button" className="cd-btn ghost" onClick={share}>{msg || t.share}</button>
          </div>
        </div>
      </div>
    </section>);
}

// ── 首页:第四格「头版」(920 已由倒计时版承担,这里只留在展与目录) ──
function FrontPage({ lang }) {
  const t = T.front[lang];
  const e = T.exh[lang];
  return (
    <section className="ed ed-front" id="front">
      <Folio lang={lang} page="home" right={t.folio} />
      <div className="ed-museum-intro"><p className="ed-p">{T.about[lang].p1}</p><a className="ed-more" href="/about">{T.about[lang].label} →</a></div>
      <div className="ed-grid">
        <div className="ed-col c-7">
          <div className="ed-rule"></div>
          <div className="ed-label">{t.onLabel}</div>
          <div className="ed-grid ed-grid-tight">
            {e.items.filter(it => it.status === 'current').map((it, i) => (
              <article key={i} className="ed-col c-4 ed-item ed-item-sm">
                {it.img && <Fig src={it.img} alt={it.alt} cap={it.cap} ratio="4/5" />}
                <h3 className="ed-h ed-h-sm">{it.h}</h3>
                <RunIn lead={it.runin}>{it.body}</RunIn>
              </article>))}
          </div>
          <a className="ed-more" href="/exhibitions">{t.onMore} →</a>
        </div>
        <aside className="ed-col c-5">
          <Pull q={t.quote} by={t.quoteBy} />
          <div className="ed-rule"></div>
          <div className="ed-label">{t.idxLabel}</div>
          <ul className="ed-index">
            {t.idx.map((x, i) => <li key={i}><a href={x.href}><span className="k">{x.k}</span><span className="v">{x.v}</span></a></li>)}
          </ul>
        </aside>
      </div>
    </section>);
}

// 首页顺序:外观轮播 → 920 倒计时 → 纸本三维舞台 → 头版
function HomePage({ lang, heroMode }) {
  return (
    <>
      <HeroCarousel lang={lang} />
      <Countdown920 lang={lang} />
      <Hero lang={lang} mode={heroMode} />
      <FrontPage lang={lang} />
    </>);
}

// ── 920 中国帽子节 ───────────────────────────────────────
function FestivalPage({ lang }) {
  const t = T.fest[lang];
  const [days, setDays] = React.useState(() => daysUntilBeijing(FEST_DATE));
  React.useEffect(() => {
    const id = setInterval(() => setDays(daysUntilBeijing(FEST_DATE)), 60e3);
    return () => clearInterval(id);
  }, []);
  return (
    <>
      <section className="fest-hero">
        <img className="fest-bg" src="assets/festival/stage-2023.jpg" alt="" />
        <div className="fest-hero-in">
          <div className="fest-kicker mono">{t.kicker}</div>
          <div className="fest-920" aria-hidden="true">920</div>
          <div className="fest-name">{t.name}</div>
          <div className="fest-date mono">{t.date}</div>
          <div className="fest-count" aria-live="polite"><Countdown days={days} t={t} big /></div>
        </div>
      </section>

      <section className="ed">
        <Folio lang={lang} page="festival" right={t.folio} />
        <div className="ed-grid">
          <div className="ed-col c-4"><EdHead label={t.label} title={t.title} /></div>
          <article className="ed-col c-5">
            <RunIn lead={t.runin}>{t.p1}</RunIn>
            <p className="ed-p">{t.p2}</p>
            <div className="ed-rule-thin"></div>
            <div className="ed-label">{t.histLabel}</div>
            <ul className="ed-timeline">
              {t.hist.map(([y, s], i) =>
                <li key={y} className={i === t.hist.length - 1 ? 'now' : ''}><span className="mono y">{y}</span><span>{s}</span></li>)}
            </ul>
          </article>
          <aside className="ed-col c-3">
            <Pull q={t.quote} by={t.quoteBy} />
            <dl className="ed-dl">
              <dt className="mono">{t.initiator}</dt>
              <dd><a href={t.initiatorHref} target="_blank" rel="noopener">{t.initiatorName} ↗</a></dd>
              <dt className="mono">{t.visitLabel}</dt>
              <dd>{t.visitText}</dd>
            </dl>
          </aside>
        </div>
        <Fig className="ed-fig-wide" src="assets/festival/stage-2023.jpg" alt={t.figCap} cap={t.figCap} ratio="21/9" />
      </section>
    </>);
}

// ── 展览:第 25 页那种「条目页」 ─────────────────────────────
// 条目按列轮流分配(CSS 多栏会把不可拆的长条目挤成两栏、空出第三栏)
function useCols() {
  const calc = () => window.innerWidth > 1024 ? 3 : window.innerWidth > 640 ? 2 : 1;
  const [cols, setCols] = React.useState(calc);
  React.useEffect(() => {
    const on = () => setCols(calc());
    window.addEventListener('resize', on);
    return () => window.removeEventListener('resize', on);
  }, []);
  return cols;
}

function ExhibitionsPage({ lang }) {
  const t = T.exh[lang];
  const cols = useCols();
  return (
    <section className="ed ed-top">
      <Folio lang={lang} page="exhibitions" />
      <EdHead label={t.label} title={t.title} />
      <div className="ed-listing" style={{ '--cols': cols }}>
        {Array.from({ length: cols }, (_, k) => (
          <div className="ed-listcol" key={k}>
            {t.items.filter((_, i) => i % cols === k).map((it, i) => (
              <article key={it.h} className="ed-item">
                {it.img && <Fig src={it.img} alt={it.alt} cap={it.cap} ratio="4/5" />}
                <div className="ed-rule"></div>
                <h2 className="ed-h">{it.h}</h2>
                <RunIn lead={it.runin}>{it.body}</RunIn>
              </article>))}
          </div>))}
      </div>
      <p className="ed-note mono">{t.note}</p>
    </section>);
}

// ── 典藏 ─────────────────────────────────────────────────
function CollectionPage({ lang }) {
  const t = T.coll[lang];
  return (
    <section className="ed ed-top">
      <Folio lang={lang} page="collection" />
      <EdHead label={t.label} title={t.h2} />
      <div className="ed-grid">
        <Fig className="ed-col c-6" src="assets/hat-2.jpg" alt={t.a3} cap={t.a3 + ' · ' + t.a3m1 + ' · ' + t.a3m2} ratio="4/5" />
        <article className="ed-col c-6">
          <div className="ed-rule"></div>
          <div className="ed-label">{t.kicker}</div>
          <h2 className="ed-h ed-h-lg">{rich(t.leadTitle)}</h2>
          <p className="ed-p">{t.leadP}</p>
          <dl className="ed-dl">
            <dt className="mono">{t.dtEra}</dt><dd>{t.ddEra}</dd>
            <dt className="mono">{t.dtOn}</dt><dd>{t.ddOn}</dd>
          </dl>
          <div className="ed-rule-thin"></div>
          <Pull q={t.quote} by={t.quoteBy} />
        </article>
      </div>
      <div className="ed-grid ed-grid-gap">
        <Fig className="ed-col c-4" src="assets/hat-1.jpg" alt={t.a1} cap={t.a1 + ' · ' + t.a1m1 + ' · ' + t.a1m2} ratio="4/5" />
        <div className="ed-col c-5">
          <div className="ed-rule"></div>
          <h2 className="ed-h">{t.a1}</h2>
          <p className="ed-p">{t.a1p}</p>
          <h2 className="ed-h">{t.a2}</h2>
          <p className="ed-p">{t.a2p}</p>
          <div className="ed-rule-thin"></div>
          <p className="ed-p">{t.side}</p>
        </div>
      </div>
      {/* 三维典藏库:21 件可转动藏品 */}
      <Library lang={lang} />
    </section>);
}

// ── 影像 ─────────────────────────────────────────────────
function GalleryPage({ lang }) {
  const t = T.gallery[lang];
  return (
    <section className="ed ed-top">
      <Folio lang={lang} page="gallery" />
      <EdHead label={t.label} title={t.h2} />
      <PhotoGrid lang={lang} t={t} />
      <div className="ed-grid ed-grid-gap">
        <div className="ed-col c-6"><Pull q={t.quote} by={t.attr} /></div>
      </div>
    </section>);
}

// ── 关于 ─────────────────────────────────────────────────
function AboutPage({ lang }) {
  const t = T.about[lang];
  return (
    <section className="ed ed-top">
      <Folio lang={lang} page="about" />
      <Fig className="ed-fig-wide" src="assets/about-bg.jpg" alt={t.caption} cap={t.caption} ratio="21/9" />
      <div className="ed-grid">
        <div className="ed-col c-4">
          <EdHead label={t.label} title={t.h2} />
          <dl className="ed-dl">
            <dt className="mono">{t.dtCity}</dt><dd>{t.metaCity}</dd>
            <dt className="mono">{t.dtMember}</dt><dd>{t.metaMember}</dd>
            <dt className="mono">{t.dtFounded}</dt><dd>{t.metaFounded}</dd>
          </dl>
        </div>
        <article className="ed-col c-5">
          <p className="ed-p">{t.p1}</p>
          <p className="ed-p">{t.p2}</p>
          <p className="ed-p">{t.p3}</p>
          <p className="ed-p">{t.p4}</p>
        </article>
        <aside className="ed-col c-3">
          <Pull q={t.founderQuote} by={t.founderBy} />
          <a className="ed-more" href="https://jeffreysuns.com/" target="_blank" rel="noopener">{t.founderLink} ↗</a>
        </aside>
      </div>
    </section>);
}

// ── 参观 ─────────────────────────────────────────────────
function VisitPage({ lang }) {
  const t = T.visit[lang];
  return (
    <section className="ed ed-top">
      <Folio lang={lang} page="visit" />
      <EdHead label={t.label} title={t.h2} />
      <div className="ed-grid">
        <div className="ed-col c-4">
          <dl className="ed-dl ed-dl-big">
            <dt className="mono">{t.dtHours}</dt><dd>{t.seasons.map(s => <span className="visit-season" key={s.label}><strong>{s.label}</strong><br />{s.hours}<small>{s.last}</small></span>)}<small>{t.ddClosed}</small></dd>
            <dt className="mono">{t.phoneLabel}</dt><dd><a href="tel:+8651385675777">{t.phone}</a></dd>
            <dt className="mono">{t.bookingLabel}</dt><dd>{t.booking}</dd>
            <dt className="mono">{t.dtAddr}</dt><dd>{t.ddAddr}<small>{t.mapSearch}</small></dd>
            <dt className="mono">{t.dtAdm}</dt><dd>{t.ddAdm}</dd>
            <dt className="mono">{t.dtMuseum}</dt><dd>{t.ddMuseum}</dd>
          </dl>
          <div className="ed-rule-thin"></div>
          <h3 className="ed-label">{t.transportLabel}</h3>
          <p className="ed-p">{t.transport}</p>
          <p className="ed-p">{t.parking}</p>
          <div className="ed-rule-thin"></div>
          <h3 className="ed-label">{t.socialLabel}</h3>
          <p className="ed-p">{t.socialText}</p>
          <div className="ed-rule-thin"></div>
          <div className="ed-label">{t.postcard}</div>
          <p className="ed-p">{t.postcardText}</p>
          <a className="ed-more" href="/">{t.postcardMore} →</a>
        </div>
        <div className="ed-col c-8">
          <Compass lang={lang} t={t} />
        </div>
      </div>
    </section>);
}

// ── 方位罗盘 ──────────────────────────────────────────────
// 不画任何地图边界(《地图管理条例》要求审图号),只画方向与距离:
// 以南通(约 32.0°N 120.9°E)为圆心,按大圆方位角放射,半径取距离的对数。
// 数据由 haversine 算自各城市中心坐标,城市名之外不作任何评述。
const COMPASS_CITIES = [
  { zh: '苏州', en: 'Suzhou', km: 81, deg: 201 },
  { zh: '上海', en: 'Shanghai', km: 100, deg: 146 },
  { zh: '南京', en: 'Nanjing', km: 198, deg: 273 },
  { zh: '北京', en: 'Beijing', km: 969, deg: 337 },
  { zh: '东京', en: 'Tokyo', km: 1778, deg: 72 },
  { zh: '米兰', en: 'Milan', km: 9000, deg: 319 },
  { zh: '伦敦', en: 'London', km: 9097, deg: 327 },
  { zh: '巴黎', en: 'Paris', km: 9163, deg: 324 },
  { zh: '纽约', en: 'New York', km: 11788, deg: 12 },
  { zh: '蒙特克里斯蒂', en: 'Montecristi', km: 15900, deg: 38 }
];
const CX = 500, CY = 500, R0 = 92, R1 = 420, LOG0 = Math.log10(60), LOG1 = Math.log10(20000);
const rOf = km => R0 + (Math.log10(km) - LOG0) / (LOG1 - LOG0) * (R1 - R0);
const pt = (deg, r) => { const a = (deg - 90) * Math.PI / 180; return [CX + r * Math.cos(a), CY + r * Math.sin(a)]; };
const fmtKm = km => km.toLocaleString('en-US');

function Compass({ lang, t }) {
  // 相邻方位太近的编号往外错开一档,免得叠字
  const sorted = COMPASS_CITIES.map((c, i) => ({ ...c, i })).sort((a, b) => a.deg - b.deg);
  const lab = {};
  let prevDeg = -99, prevR = 0, step = 0;
  sorted.forEach(c => {
    const r = rOf(c.km);
    step = (c.deg - prevDeg < 9 && Math.abs(r - prevR) < 40) ? step + 1 : 0;
    lab[c.i] = r + 30 + step * 30;
    prevDeg = c.deg; prevR = r;
  });
  const ticks = [];
  for (let d = 0; d < 360; d += 5) {
    const big = d % 90 === 0, mid = d % 30 === 0;
    const [x1, y1] = pt(d, R1 + 8), [x2, y2] = pt(d, R1 + (big ? 30 : mid ? 20 : 12));
    ticks.push(<line key={d} x1={x1} y1={y1} x2={x2} y2={y2} strokeWidth={big ? 2 : 1} opacity={big ? .9 : mid ? .6 : .3} />);
  }
  const rings = [100, 1000, 10000];
  return (
    <div className="compass" role="img" aria-label={t.mapAria}>
      <div className="compass-head mono">{t.compassHead}</div>
      <div className="compass-body">
        <svg className="compass-svg" viewBox="0 0 1000 1000" aria-hidden="true">
          <g stroke="currentColor" fill="none">
            <circle cx={CX} cy={CY} r={R1 + 8} strokeWidth="1" opacity=".5" />
            {ticks}
            {rings.map(km => <circle key={km} cx={CX} cy={CY} r={rOf(km)} strokeWidth="1" strokeDasharray="3 6" opacity=".3" />)}
            {COMPASS_CITIES.map((c, i) => { const [x, y] = pt(c.deg, rOf(c.km)); return <line key={i} x1={CX} y1={CY} x2={x} y2={y} strokeWidth="1" opacity=".35" />; })}
          </g>
          <g fill="currentColor" fontFamily="var(--font-mono), monospace">
            {rings.map(km => { const [x, y] = pt(0, rOf(km)); return <text key={km} x={x + 8} y={y - 6} fontSize="15" opacity=".45">{fmtKm(km)} km</text>; })}
            {[[0, t.compassN], [90, 'E'], [180, 'S'], [270, 'W']].map(([d, s]) => { const [x, y] = pt(d, R1 + 58); return <text key={d} x={x} y={y} fontSize="22" letterSpacing="2" textAnchor="middle" dominantBaseline="middle" opacity=".8">{s}</text>; })}
            {COMPASS_CITIES.map((c, i) => { const [x, y] = pt(c.deg, rOf(c.km)); const [lx, ly] = pt(c.deg, lab[i]); return (
              <g key={i}>
                <circle cx={x} cy={y} r="6" />
                <text x={lx} y={ly} fontSize="17" textAnchor="middle" dominantBaseline="middle" opacity=".85">{String(i + 1).padStart(2, '0')}</text>
              </g>); })}
          </g>
          <g>
            <circle cx={CX} cy={CY} r="26" fill="var(--red)" opacity=".18" />
            <circle cx={CX} cy={CY} r="9" fill="var(--red)" />
            <text x={CX} y={CY + 44} fill="currentColor" fontFamily="var(--font-mono), monospace" fontSize="18" letterSpacing="3" textAnchor="middle">{t.compassHere.toUpperCase()}</text>
          </g>
        </svg>
        <ol className="compass-list">
          {COMPASS_CITIES.map((c, i) => (
            <li key={i}>
              <span className="mono n">{String(i + 1).padStart(2, '0')}</span>
              <span className="city">{lang === 'zh' ? c.zh : c.en}<small>{lang === 'zh' ? c.en : c.zh}</small></span>
              <span className="mono km">{fmtKm(c.km)} km</span>
              <span className="mono deg">{c.deg}°</span>
            </li>))}
        </ol>
      </div>
      <div className="compass-note mono">{t.compassNote} · 31.98° N 120.89° E</div>
    </div>);
}

// ── 页脚 ─────────────────────────────────────────────────
function Footer({ lang }) {
  const t = T.footer[lang];
  return (
    <footer className="ed-foot">
      <div className="ed-foot-in">
        <div className="ed-foot-grid">
          <div>
            <div className="brand">{t.name1}<br />{t.name2}</div>
            <div className="tag mono">{t.tag}</div>
          </div>
          <div>
            <h5>{t.colVisit}</h5>
            <ul>
              <li><a href="/visit">{t.v1}</a></li>
              <li><a href="/visit">{t.v2}</a></li>
              <li><a href="/about">{t.v3}</a></li>
            </ul>
          </div>
          <div>
            <h5>{t.colProg}</h5>
            <ul>
              <li><a href="/festival">{t.p0}</a></li>
              <li><a href="/exhibitions">{t.p1}</a></li>
              <li><a href="/exhibitions">{t.p2}</a></li>
              <li><a href="/collection">{t.p3}</a></li>
            </ul>
          </div>
          <div>
            <h5>{t.colGroup}</h5>
            <ul>
              <li><a href="https://jeffreysuns.com/" target="_blank" rel="noopener">{t.g1}</a></li>
              <li>{t.g2}</li>
              <li>{t.g3}</li>
            </ul>
          </div>
        </div>
        <div className="ed-foot-bottom mono">
          <span>{t.copy}</span>
          <span>{location.host}</span>
        </div>
      </div>
    </footer>);
}

Object.assign(window, {
  HomePage, FrontPage, Countdown920, FestivalPage, ExhibitionsPage, CollectionPage, GalleryPage, AboutPage, VisitPage,
  Footer, Compass, Folio, EdHead, Pull, Fig, RunIn, daysUntilBeijing
});
