/* ==========================================================================
   SUPER SMOKE 超级烟雾 — site.css
   断点：< 768 手机 · 768–1199 平板 · ≥ 1024 桌面页头 · ≥ 1200 桌面三列
   页面上不使用内联 style（便于开启严格的 CSP）
   ========================================================================== */

/* ---------- 字体（自托管子集，见 tools/make_fonts.py） ---------- */
@font-face { font-family: "Bodoni Moda"; src: url("../fonts/bodoni-moda.woff2?v=e8ad0db5") format("woff2"); font-weight: 400 600; font-style: normal; font-display: swap; }
@font-face { font-family: "Bodoni Moda"; src: url("../fonts/bodoni-moda-italic.woff2?v=961ffa17") format("woff2"); font-weight: 400 600; font-style: italic; font-display: swap; }
@font-face { font-family: "Jost"; src: url("../fonts/jost.woff2?v=8fab16bb") format("woff2"); font-weight: 300 600; font-style: normal; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/ibm-plex-mono-400.woff2?v=07db1b5a") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/ibm-plex-mono-500.woff2?v=aa92656a") format("woff2"); font-weight: 500 600; font-style: normal; font-display: swap; }
@font-face { font-family: "SS Serif SC"; src: url("../fonts/ss-serif-sc.woff2?v=9f1ab494") format("woff2"); font-weight: 300 600; font-style: normal; font-display: swap; unicode-range: U+2E80-2FFF, U+3000-30FF, U+3400-4DBF, U+4E00-9FFF, U+F900-FAFF, U+FE30-FE4F, U+FF00-FFEF; }

/* ---------- 设计变量 ---------- */
:root {
  --ink: #0C0E11;          /* 墨 · 背景 */
  --char: #14171B;         /* 炭 · 卡片底 */
  --graphite: #1D2126;     /* 石墨 · 输入框 */
  --line: #2B3037;         /* 分割线 */
  --line-strong: #3E444C;  /* 强分割线 · 边框 */
  --smoke: #ECE7DF;        /* 烟白 · 正文 */
  --ash: #A6A199;          /* 灰烬 · 次要文字 */
  --mist: #878B91;         /* 雾 · 辅助文字 */
  --ember: #D6A064;        /* 余烬 · 品牌色 */
  --ember-light: #E3B37D;  /* 余烬亮 · 悬停 */
  --haze: #8FA1B1;         /* 烟蓝 · 焦点框 */

  --f-sans: Jost, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", "Source Han Sans SC", "Noto Sans CJK SC", sans-serif;
  --f-serif: "Bodoni Moda", "SS Serif SC", "Noto Serif SC", "Source Han Serif SC", "Noto Serif CJK SC", "Songti SC", STSong, serif;
  --f-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  --gutter: 20px;
  --header-h: 56px;
  --maxw: 1280px;
  --gap: 24px;
  --ease: cubic-bezier(.2, .7, .2, 1);
  --pad-l: max(var(--gutter), env(safe-area-inset-left));
  --pad-r: max(var(--gutter), env(safe-area-inset-right));
}
@media (min-width: 768px) { :root { --gutter: 40px; --header-h: 64px; } }
@media (min-width: 1024px) { :root { --header-h: 72px; } }
@media (min-width: 1200px) { :root { --gutter: 80px; } }

/* ---------- 基础 ---------- */
*, *::before, *::after { box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  color-scheme: dark;
  background: var(--ink);
  scroll-padding-top: calc(var(--header-h) + 16px);
}
body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  background: var(--ink);
  color: var(--smoke);
  font-family: var(--f-sans);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-tap-highlight-color: transparent;
}
main { display: block; flex: 1 0 auto; }
main:focus { outline: none; }
img, svg, picture { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; margin: 0; cursor: pointer; border-radius: 0; }
h1, h2, h3, h4, p, ol, ul, dl, dd, figure { margin: 0; }
ol, ul { padding: 0; list-style: none; }
h1, h2, h3, .serif { font-family: var(--f-serif); font-weight: 400; }
/* 作品中文标题：字太多、每天都有新字，不走中文衬线子集，直接用系统衬线字体 */
.cjk-sys { font-family: "Bodoni Moda", "Noto Serif SC", "Source Han Serif SC", "Noto Serif CJK SC", "Songti SC", STSong, serif; }
/* Bodoni Moda 的光学尺寸：浏览器默认按字号自动取值，大字号时细线只有 0.1–0.3px，屏幕上会消失。
   这里按“字号 ÷ 3”左右手动指定，让细线保持在 0.5px 以上 */
h1, h2, h3, .serif, .num, .step-num, .notfound-code { font-variation-settings: "opsz" var(--opsz, 9); }
em { font-style: italic; }
[hidden] { display: none !important; }
:focus-visible { outline: 2px solid var(--haze); outline-offset: 3px; }
::selection { background: rgba(214, 160, 100, .35); color: var(--smoke); }
.mono { font-family: var(--f-mono); }
.muted { color: var(--mist); }

/* ---------- 中英切换：html[data-lang] 决定显示哪一种 ---------- */
html[data-lang="en"] .i-zh,
html:not([data-lang="en"]) .i-en { display: none !important; }

/* ---------- 工具类 ---------- */
.container {
  width: 100%;
  max-width: calc(var(--maxw) + 2 * var(--gutter));
  margin-left: auto;
  margin-right: auto;
  padding-left: var(--pad-l);
  padding-right: var(--pad-r);
}
.sr-only {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.skip-link {
  position: absolute; left: 12px; top: -80px; z-index: 100;
  padding: 10px 16px; border-radius: 2px; background: var(--ember); color: var(--ink); font-size: 14px;
}
.skip-link:focus { top: 12px; }
.ph { color: var(--ember-light); background: rgba(214, 160, 100, .1); padding: 0 3px; border-radius: 2px; }
.copy-helper { position: fixed; top: 0; left: -9999px; width: 1px; height: 1px; opacity: 0; font-size: 16px; }
.sm-only { display: inline; }
.lg-only { display: none; }
@media (min-width: 768px) {
  .sm-only { display: none; }
  .lg-only { display: inline; }
  }
@media (max-width: 767px) { .hide-sm { display: none !important; } }

.overline {
  font-family: var(--f-sans);
  font-size: 12px;
  line-height: 1.4;
  letter-spacing: .22em;
  font-weight: 500;
  color: var(--ember);
}
.overline-wide { letter-spacing: .28em; }
.label { font-size: 12px; letter-spacing: .22em; font-weight: 500; color: var(--mist); }
.heading { display: flex; flex-direction: column; gap: 12px; }
.h2 { font-size: 28px; line-height: 1.15; --opsz: 10; }
@media (min-width: 1024px) { .h2 { font-size: 40px; --opsz: 13; } }

/* ---------- 按钮与链接 ---------- */
.btn, .btn-ghost, .btn-outline {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  border-radius: 2px; white-space: nowrap; text-align: center;
  transition: background-color .2s, border-color .2s, color .2s;
}
.btn { height: 52px; padding: 0 28px; background: var(--ember); color: var(--ink); font-size: 15px; font-weight: 500; letter-spacing: .06em; }
.btn:hover { background: var(--ember-light); }
.btn-ghost { height: 52px; padding: 0 32px; border: 1px solid var(--line-strong); color: var(--smoke); font-size: 15px; letter-spacing: .06em; }
.btn-ghost:hover { border-color: var(--ember); color: var(--ember-light); }
.btn-outline { height: 40px; padding: 0 20px; border: 1px solid var(--ember); color: var(--ember); font-size: 14px; letter-spacing: .08em; }
.btn-outline:hover { color: var(--ember-light); border-color: var(--ember-light); }
.btn-lg { height: 54px; padding: 0 30px; }
.btn.sm, .btn-ghost.sm { height: 44px; padding: 0 14px; font-size: 13px; letter-spacing: .02em; gap: 6px; }
.btn-block { display: flex; width: 100%; }
.link { transition: color .2s; }
.link:hover { color: var(--ember-light); }
.link-arrow { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; font-size: 14px; letter-spacing: .04em; white-space: nowrap; }
.link-underline { display: inline-flex; align-items: center; min-height: 44px; font-size: 15px; letter-spacing: .04em; border-bottom: 1px solid var(--line-strong); }
.icon-btn { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; height: 44px; color: var(--smoke); }
.btn-clear { height: 36px; color: var(--ember); font-size: 13px; text-decoration: underline; text-underline-offset: 3px; }
.btn-clear:hover { color: var(--ember-light); }

/* ---------- 页头 ---------- */
.site-header {
  position: sticky; top: 0; z-index: 30;
  height: var(--header-h);
  background: var(--ink);
  border-bottom: 1px solid var(--line);
}
.header-inner { height: 100%; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.brand { display: flex; align-items: center; height: 44px; flex-shrink: 0; }
.brand img { width: 148px; height: auto; }
.header-desktop { display: none; align-items: center; gap: 40px; }
.header-mobile { display: flex; align-items: center; gap: 2px; margin-right: -10px; }
.nav { display: flex; align-items: center; gap: 36px; }
.nav a {
  display: flex; align-items: center; height: 44px; padding-top: 2px;
  font-size: 15px; letter-spacing: .06em; color: var(--ash);
  border-bottom: 1px solid transparent; transition: color .2s;
}
.nav a:hover { color: var(--ember-light); }
.nav a[aria-current] { color: var(--smoke); border-bottom-color: var(--ember); }
.lang-seg { display: flex; gap: 2px; padding: 2px; border: 1px solid var(--line-strong); border-radius: 2px; }
.lang-btn { height: 28px; min-width: 36px; padding: 0 8px; border-radius: 1px; color: var(--mist); font-size: 13px; letter-spacing: .06em; transition: color .2s, background-color .2s; }
.lang-btn[data-set-lang="en"] { font-size: 12px; letter-spacing: .1em; }
.lang-btn:hover { color: var(--smoke); }
html:not([data-lang="en"]) .lang-btn[data-set-lang="zh"],
html[data-lang="en"] .lang-btn[data-set-lang="en"] { background: var(--line); color: var(--smoke); }
.lang-toggle { min-width: 44px; height: 44px; padding: 0 8px; color: var(--ash); font-size: 13px; letter-spacing: .1em; }
@media (min-width: 1024px) {
  .brand img { width: 196px; }
  .header-desktop { display: flex; }
  .header-mobile { display: none; }
}

/* ---------- 手机菜单 ---------- */
.menu {
  position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 60;
  display: flex; flex-direction: column;
  background: var(--ink);
  overflow-y: auto; overscroll-behavior: contain;
  opacity: 0; transition: opacity .2s;
}
.menu.is-open { opacity: 1; }
.menu-head {
  height: var(--header-h); flex-shrink: 0;
  display: flex; align-items: center; justify-content: space-between;
  border-bottom: 1px solid var(--line);
  padding-right: calc(var(--pad-r) - 10px);
}
.menu-head img { width: 148px; height: auto; }
.menu-nav { padding-top: 24px; display: flex; flex-direction: column; }
.menu-link {
  height: 72px; display: flex; align-items: center; justify-content: space-between;
  border-bottom: 1px solid var(--line);
  font-size: 30px; color: var(--ash); transition: color .2s; --opsz: 10;
}
.menu-link svg { color: var(--line-strong); }
.menu-link[aria-current] { color: var(--smoke); }
.menu-link[aria-current] svg { color: var(--ember); }
.menu-foot { margin-top: auto; padding-top: 24px; padding-bottom: calc(32px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 16px; }
.lang-seg-lg { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.lang-seg-lg .lang-btn { height: 44px; font-size: 15px; }
.menu-note { text-align: center; font-size: 12px; color: var(--mist); }

/* ---------- 页脚 ---------- */
.site-footer { flex-shrink: 0; background: var(--ink); border-top: 1px solid var(--line); }
.footer-top { padding-top: 48px; padding-bottom: 32px; display: flex; flex-direction: column; gap: 32px; }
.footer-brand img { width: 220px; height: auto; }
.footer-brand p { margin-top: 16px; max-width: 380px; font-size: 14px; line-height: 1.7; color: var(--ash); }
.footer-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 20px; }
.footer-col { display: flex; flex-direction: column; }
.footer-label { margin-bottom: 4px; font-size: 12px; letter-spacing: .22em; font-weight: 500; color: var(--mist); }
.footer-col a { display: flex; align-items: center; min-height: 44px; font-size: 15px; }
.footer-buy { display: none; }
.footer-text { font-size: 14px; line-height: 1.7; color: var(--ash); }
.footer-row { border-top: 1px solid var(--line); }
.footer-disclaimer { padding-top: 24px; padding-bottom: 24px; display: flex; flex-direction: column; gap: 14px; }
.footer-disclaimer p { max-width: 1000px; font-size: 13px; line-height: 1.8; color: var(--ash); }
.footer-disclaimer a { color: var(--smoke); text-decoration: underline; text-underline-offset: 3px; }
.footer-disclaimer a:hover { color: var(--ember-light); }
.badge-18 {
  width: 34px; height: 34px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--line-strong); border-radius: 50%;
  font-size: 11px; letter-spacing: .02em; color: var(--ash);
}
.footer-bottom {
  padding-top: 16px; padding-bottom: calc(24px + env(safe-area-inset-bottom));
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  text-align: center; font-size: 12px; line-height: 1.6; color: var(--mist);
}
.footer-bottom .icp { min-height: 44px; display: flex; align-items: center; letter-spacing: .04em; color: var(--ash); transition: color .2s; }
.footer-bottom a.icp:hover, .footer-bottom a.psb:hover { color: var(--ember-light); }
.footer-bottom .psb { display: inline-flex; align-items: center; gap: 6px; }
@media (min-width: 1024px) {
  .footer-top { padding-top: 64px; padding-bottom: 48px; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 24px; }
  .footer-brand { grid-column: span 5; }
  .footer-brand img { width: 280px; }
  .footer-brand p { margin-top: 20px; font-size: 15px; }
  .footer-cols { grid-column: 7 / span 6; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 24px; }
  .footer-col { gap: 16px; }
  .footer-label { margin-bottom: 0; }
  .footer-col a { min-height: 0; }
  .footer-buy { display: flex; }
  .footer-disclaimer { flex-direction: row; align-items: flex-start; gap: 20px; padding-top: 28px; padding-bottom: 28px; }
  .footer-bottom {
    height: 64px; padding-top: 0; padding-bottom: 0;
    display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; column-gap: 24px;
  }
  .footer-bottom .copyright { justify-self: start; text-align: left; }
  .footer-bottom .icp { justify-self: center; min-height: 0; }
  .footer-bottom .psb { justify-self: end; }
}

/* ---------- 作品卡片 ---------- */
.grid-works { display: grid; grid-template-columns: minmax(0, 1fr); column-gap: var(--gap); row-gap: 32px; }
@media (min-width: 768px) { .grid-works { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 40px; } }
@media (min-width: 1200px) { .grid-works { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 48px; } }

.card { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.card-body { display: flex; flex-direction: column; gap: 8px; }
.card-media, .work-media { position: relative; overflow: hidden; background-color: var(--char); }
.card-media::before, .work-media::before { content: ""; display: block; padding-top: 56.25%; }
.card-link { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: block; }
.card-img, .work-img {
  position: absolute; top: 0; left: 0; width: 100%; height: 100%;
  object-fit: cover;
  transition: transform .6s var(--ease), filter .6s, opacity .4s;
}
.card:hover .card-img, .feature:hover .card-img { transform: scale(1.035); filter: brightness(1.06); }
.card-title { --opsz: 8; font-weight: 500; font-size: 17px; line-height: 1.35; height: 2.7em; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.card-title a { transition: color .2s; }
.card:hover .card-title a, .card-title a:hover { color: var(--ember-light); }
.card-date { font-size: 13px; letter-spacing: .08em; color: var(--mist); }
@media (min-width: 1200px) { .card-title { font-size: 20px; } }

/* 图片加载中：闪光底；加载完淡入 */
@keyframes ss-shimmer { from { background-position: 150% 0; } to { background-position: -50% 0; } }
.shimmer,
.ss-ready .card-media:not(.is-loaded):not(.is-broken),
.ss-ready .work-media:not(.is-loaded):not(.is-broken) {
  background-image: linear-gradient(90deg, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, .045) 50%, rgba(255, 255, 255, 0) 100%);
  background-size: 200% 100%;
  background-repeat: no-repeat;
  animation: ss-shimmer 1.4s linear infinite;
}
.ss-ready .card-media:not(.is-loaded) .card-img,
.ss-ready .work-media:not(.is-loaded) .work-img { opacity: 0; }

.badge-new {
  position: absolute; left: 12px; top: 12px; z-index: 2;
  height: 22px; padding: 0 7px 0 9px;
  display: none; align-items: center;
  background: rgba(12, 14, 17, .78);
  border: 1px solid rgba(214, 160, 100, .55); border-radius: 2px;
  color: var(--ember); font-family: var(--f-sans); font-size: 11px; font-weight: 600; letter-spacing: .2em; line-height: 1;
  pointer-events: none;
}
.is-new .badge-new { display: inline-flex; }
.badge-inline { position: static; height: 20px; padding: 0 6px 0 8px; font-size: 10px; background: none; }

/* 图片加载失败 */
.media-fallback {
  position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 1;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
  padding: 12px; text-align: center;
  background: var(--char); border: 1px solid var(--line);
}
.media-fallback svg { color: var(--line-strong); }
.mf-text { font-size: 13px; color: var(--ash); }
.mf-retry { height: 36px; padding: 0 12px; color: var(--ember); font-size: 13px; letter-spacing: .04em; text-decoration: underline; text-underline-offset: 3px; }
.mf-retry:hover { color: var(--ember-light); }
.is-broken .card-link, .is-broken .work-img { visibility: hidden; }
.media-fallback-lg { gap: 10px; }
.mf-title { font-size: 16px; color: var(--smoke); }
.mf-note { font-size: 13px; color: var(--mist); }
.media-fallback-lg .btn-ghost { margin-top: 6px; }

/* 骨架屏 */
.card-skeleton .card-media { background-color: var(--graphite); }
.sk-line { height: 14px; background-color: var(--graphite); }
.sk-92 { width: 92%; }
.sk-62 { width: 62%; }
.sk-26 { width: 26%; height: 10px; margin-top: 8px; }

.tag-list { display: flex; flex-wrap: wrap; gap: 6px; }
.tag {
  display: inline-flex; align-items: center; height: 26px; padding: 0 10px;
  border: 1px solid var(--line-strong); border-radius: 2px;
  font-size: 11px; font-weight: 500; letter-spacing: .14em; color: var(--ash); white-space: nowrap;
  transition: border-color .2s, color .2s;
}
a.tag:hover { border-color: var(--mist); color: var(--smoke); }
.model-link { color: inherit; text-decoration: underline; text-decoration-color: var(--line-strong); text-underline-offset: 3px; }
.model-link:hover { color: var(--ember-light); text-decoration-color: currentColor; }

/* ---------- 首页 · 首屏 ---------- */
.hero { position: relative; }
.hero-visual { position: relative; min-height: 560px; display: flex; align-items: flex-end; overflow: hidden; }
@supports (height: 100svh) { .hero-visual { min-height: clamp(480px, calc(100svh - var(--header-h) - 104px), 620px); } }
.hero-visual picture { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.hero-img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 30%; }
.hero-shade {
  position: absolute; top: 0; left: 0; right: 0; bottom: 0;
  background: linear-gradient(180deg, rgba(12, 14, 17, .15) 0%, rgba(12, 14, 17, .2) 36%, rgba(12, 14, 17, .9) 70%, #0C0E11 100%);
}
.hero-content { position: relative; z-index: 1; padding-top: 32px; padding-bottom: 24px; }
.hero-copy { display: flex; flex-direction: column; gap: 16px; }
.hero-copy .overline { font-size: 11px; letter-spacing: .26em; }
.hero-title { font-size: 38px; line-height: 1.15; letter-spacing: -.005em; --opsz: 12; }
html[data-lang="en"] .hero-title { font-size: 36px; }
.hero-title .line { display: block; }
.hero-sub { font-size: 15px; line-height: 1.7; color: var(--ash); max-width: 500px; }
.hero-actions-lg { display: none; }
.hero-actions-sm { padding-top: 8px; display: flex; flex-direction: column; gap: 4px; }
.hero-actions-sm .btn { height: 52px; font-size: 16px; }
.hero-howto { display: flex; align-items: center; justify-content: center; height: 48px; font-size: 15px; }
@media (min-width: 768px) {
  .hero-visual { min-height: 600px; align-items: center; }
  @supports (height: 100svh) { .hero-visual { min-height: clamp(560px, calc(100svh - var(--header-h)), 780px); } }
  .hero-img { object-position: 62% 35%; }
  .hero-shade {
    background:
      linear-gradient(0deg, #0C0E11 0%, rgba(12, 14, 17, 0) 28%),
      linear-gradient(90deg, rgba(12, 14, 17, .94) 0%, rgba(12, 14, 17, .86) 40%, rgba(12, 14, 17, .3) 75%, rgba(12, 14, 17, .1) 100%);
  }
  .hero-content { padding-top: 72px; padding-bottom: 72px; }
  .hero-copy { max-width: 560px; gap: 24px; }
  .hero-copy .overline { font-size: 12px; letter-spacing: .28em; }
  .hero-title, html[data-lang="en"] .hero-title { font-size: 54px; line-height: 1.2; --opsz: 17; }
  html[data-lang="en"] .hero-title { line-height: 1.05; }
  .hero-sub { font-size: 17px; line-height: 1.75; }
  .hero-actions-lg { display: flex; align-items: center; gap: 28px; margin-top: 8px; }
  .hero-actions-sm { display: none; }
}
@media (min-width: 1200px) {
  .hero-shade {
    background:
      linear-gradient(0deg, #0C0E11 0%, rgba(12, 14, 17, 0) 28%),
      linear-gradient(90deg, rgba(12, 14, 17, .94) 0%, rgba(12, 14, 17, .8) 30%, rgba(12, 14, 17, .14) 62%, rgba(12, 14, 17, 0) 100%);
  }
  .hero-copy { max-width: 720px; gap: 28px; }
  .hero-title { font-size: 66px; line-height: 1.25; --opsz: 21; }
  html[data-lang="en"] .hero-title { font-size: 76px; line-height: 1.05; --opsz: 24; }
  .hero-sub { font-size: 18px; }
}

/* ---------- 首页 · 最新作品 ---------- */
.section-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; }
.latest { padding-top: 64px; }
.latest-inner { display: flex; flex-direction: column; gap: 24px; }
.latest-grid { margin-top: 8px; }
.center-row { display: flex; justify-content: center; padding-top: 16px; }
.more-btn { width: 100%; }
.soon { padding: 48px 0; color: var(--ash); }
@media (min-width: 768px) { .more-btn { width: auto; } }
@media (min-width: 1024px) {
  .latest { padding-top: 96px; }
  .latest-inner { gap: 40px; }
  .latest-grid { margin-top: 16px; }
}

.feature { display: flex; flex-direction: column; gap: 14px; }
.feature-body { display: flex; flex-direction: column; gap: 14px; }
.feature-top { display: flex; flex-direction: column; gap: 14px; }
.feature-meta { display: flex; flex-wrap: wrap; gap: 10px; font-size: 12px; letter-spacing: .08em; color: var(--mist); }
.feature-title { font-weight: 500; font-size: 22px; line-height: 1.3; --opsz: 8; }
.feature-title a { transition: color .2s; }
.feature:hover .feature-title a { color: var(--ember-light); }
.feature-tags, .feature-cta, .feature-id .label { display: none; }
.feature-id { display: flex; flex-direction: column; gap: 6px; }
.feature-id .mono { font-size: 13px; color: var(--ash); word-break: break-all; }
@media (min-width: 768px) {
  .feature-title { font-size: 28px; line-height: 1.25; --opsz: 10; }
  .feature-tags { display: flex; }
  .feature-bottom { display: flex; flex-direction: column; gap: 16px; border-top: 1px solid var(--line); padding-top: 20px; }
  .feature-id .label { display: block; }
  .feature-id .mono { font-size: 15px; color: var(--smoke); }
  .feature-cta { display: flex; height: 48px; font-size: 14px; }
}
@media (min-width: 1200px) {
  .feature { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 24px; }
  .feature-media { grid-column: span 8; }
  .feature-body { grid-column: span 4; justify-content: space-between; gap: 24px; padding: 2px 0; }
  .feature-top { gap: 18px; }
  .feature-meta { font-size: 13px; }
  .feature-title { font-size: 34px; line-height: 1.22; --opsz: 11; }
  .feature .badge-new { left: 16px; top: 16px; height: 24px; padding: 0 8px 0 10px; }
}

/* ---------- 首页 · 关于 ---------- */
.about { margin-top: 80px; border-top: 1px solid var(--line); padding: 64px 0; }
.about-grid { display: flex; flex-direction: column; gap: 20px; }
.about-head { display: flex; flex-direction: column; gap: 20px; }
.about-title { font-size: 30px; line-height: 1.3; --opsz: 10; }
.about-title .line { display: block; }
.about-body { display: flex; flex-direction: column; gap: 22px; }
.about-lead { font-size: 17px; line-height: 1.75; }
.about-text { font-size: 16px; line-height: 1.8; color: var(--ash); }
.about-steps { margin-top: 8px; border-top: 1px solid var(--line); padding-top: 20px; display: flex; flex-direction: column; gap: 4px; }
.about-steps .label { margin-bottom: 8px; }
.steps-mini li { min-height: 44px; display: flex; align-items: center; gap: 14px; font-size: 15px; line-height: 1.5; }
.num { font-family: var(--f-serif); font-style: italic; color: var(--ember); }
.steps-mini .num { width: 28px; flex-shrink: 0; font-size: 22px; --opsz: 8; }
.about-steps .link-arrow { margin-top: 8px; font-size: 15px; letter-spacing: 0; }
@media (min-width: 1024px) {
  .about { margin-top: 120px; padding: 112px 0; }
  .about-title { font-size: 44px; --opsz: 14; }
  .about-lead { font-size: 19px; }
  .about-text { font-size: 17px; }
  .about-steps { margin-top: 16px; padding-top: 24px; gap: 18px; }
  .about-steps .label { margin-bottom: 0; }
  .steps-mini { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
  .steps-mini li { flex-direction: column; align-items: flex-start; gap: 6px; min-height: 0; }
  .steps-mini .num { width: auto; font-size: 26px; --opsz: 9; }
  .about-steps .link-arrow { margin-top: 0; align-self: flex-start; }
}
@media (min-width: 1200px) {
  .about-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 24px; }
  .about-head { grid-column: span 5; }
  .about-body { grid-column: 7 / span 6; padding-top: 34px; }
}

/* ---------- 列表页标题（图库 / 联系 / 法律） ---------- */
.page-head { padding-top: 40px; padding-bottom: 24px; display: flex; flex-direction: column; gap: 12px; }
.page-title { font-size: 38px; line-height: 1.1; --opsz: 12; }
.page-sub { margin-top: 2px; max-width: 620px; font-size: 15px; line-height: 1.7; color: var(--ash); }
.page-head-contact { padding-bottom: 32px; }
.page-head-contact .page-title { font-size: 34px; line-height: 1.12; }
.page-head-legal { padding-bottom: 32px; }
.page-head-legal .page-title { font-size: 36px; }
@media (min-width: 1024px) {
  .page-head { padding-top: 80px; padding-bottom: 40px; gap: 16px; }
  .page-title, .page-head-contact .page-title, .page-head-legal .page-title { font-size: 56px; --opsz: 18; }
  .page-sub { font-size: 17px; }
  .page-head-contact { padding-bottom: 56px; }
  .page-head-contact .page-sub { max-width: 640px; }
  .page-head-legal { padding-bottom: 48px; }
}

/* ---------- 图库 · 筛选栏 ---------- */
.filterbar {
  position: sticky; top: var(--header-h); z-index: 20;
  background: var(--ink);
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
html:not(.js) .filterbar { display: none; }
.filterbar-inner { max-width: calc(var(--maxw) + 2 * var(--gutter)); margin: 0 auto; }
.filter-label { display: none; }
.search {
  position: relative; display: flex; align-items: center;
  padding: 10px var(--pad-r) 0 var(--pad-l);
}
.search > svg { position: absolute; left: calc(var(--pad-l) + 12px); color: var(--mist); pointer-events: none; }
.search-input {
  width: 100%; height: 44px; padding: 0 12px 0 36px;
  background: var(--graphite); border: 1px solid var(--line-strong); border-radius: 2px;
  color: var(--smoke); font: inherit; font-size: 16px; letter-spacing: .02em;
  -webkit-appearance: none; appearance: none;
  transition: border-color .2s;
}
.search-input::placeholder { color: var(--mist); }
.search-input:hover { border-color: var(--mist); }
.search-input:focus { outline: none; border-color: var(--haze); }
.search-input::-webkit-search-decoration { -webkit-appearance: none; }
.chips {
  height: 60px; padding: 8px var(--pad-r) 8px var(--pad-l);
  display: flex; align-items: center; gap: 8px;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.chips::-webkit-scrollbar { display: none; }
.chip {
  height: 44px; flex-shrink: 0; padding: 0 14px;
  border: 1px solid var(--line-strong); border-radius: 2px;
  color: var(--ash); font-size: 11px; font-weight: 500; letter-spacing: .14em; white-space: nowrap;
  transition: border-color .2s, background-color .2s, color .2s;
}
.chip:hover { border-color: var(--mist); }
.chip[aria-pressed="true"] { background: var(--smoke); border-color: var(--smoke); color: var(--ink); }
.chip-all { padding: 0 16px; font-size: 14px; font-weight: 400; letter-spacing: .06em; }
.chip-sep { margin-left: 12px; }
.filter-status {
  height: 36px; padding: 0 var(--pad-r) 0 var(--pad-l);
  border-top: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  font-size: 12px; color: var(--mist); white-space: nowrap;
}
.filter-status .btn-clear { font-size: 12px; }
@media (min-width: 1024px) {
  .filterbar-inner {
    height: 74px; padding: 0 var(--pad-r) 0 var(--pad-l);
    display: flex; align-items: center; justify-content: space-between; gap: 24px;
  }
  .filter-label { display: flex; flex-direction: column; gap: 2px; width: 92px; flex-shrink: 0; font-size: 13px; line-height: 1.4; }
  .filter-multi { font-size: 12px; color: var(--mist); }
  .chips { flex: 1 1 auto; min-width: 0; height: auto; padding: 4px 2px; }
  .chip { height: 36px; }
  .chip-all { font-size: 13px; }
  .filter-status { height: auto; padding: 0; border-top: 0; font-size: 13px; }
  .search { order: 3; flex: 0 0 240px; padding: 0; }
  .search > svg { left: 12px; }
  .search-input { height: 40px; font-size: 14px; }
  .filter-status { order: 4; }
  .filter-status .btn-clear { font-size: 13px; }
}

/* ---------- 图库 · 列表 ---------- */
.gallery-body { padding-top: 24px; }
@media (min-width: 1024px) { .gallery-body { padding-top: 48px; } }
.empty { padding: 64px 0 72px; display: flex; flex-direction: column; align-items: center; gap: 16px; text-align: center; }
.empty > svg { color: var(--line-strong); }
.empty-title { margin-top: 8px; font-size: 24px; line-height: 1.3; --opsz: 9; }
.empty-text { max-width: 440px; font-size: 15px; line-height: 1.7; color: var(--ash); }
.empty-actions { width: 100%; margin-top: 12px; display: flex; flex-direction: column; gap: 12px; }
.empty-actions .btn, .empty-actions .btn-ghost { height: 48px; }
.empty-actions .btn-ghost { font-size: 13px; }
@media (min-width: 768px) {
  .empty-actions { width: auto; flex-direction: row; flex-wrap: wrap; justify-content: center; }
  .empty-actions .btn { padding: 0 24px; }
  .empty-actions .btn-ghost { padding: 0 18px; }
}
@media (min-width: 1024px) { .empty { padding: 96px 0 120px; } .empty-title { font-size: 30px; --opsz: 10; } }

.more { padding: 40px 0 72px; display: flex; flex-direction: column; align-items: center; gap: 14px; }
html:not(.js) .more { display: none; }
.more .more-btn { width: 100%; }
.more-count { font-size: 13px; letter-spacing: .04em; color: var(--mist); }
.more-end { display: flex; align-items: center; gap: 16px; font-size: 13px; letter-spacing: .06em; color: var(--mist); text-align: center; }
.more-end::before, .more-end::after { content: ""; width: 48px; height: 1px; flex-shrink: 0; background: var(--line); }
.more-error { font-size: 14px; color: var(--ash); text-align: center; }
.sentinel { width: 100%; height: 1px; }
.spin { display: none; color: var(--ember); animation: ss-spin 1.1s linear infinite; }
.is-loading .spin { display: block; }
@keyframes ss-spin { to { transform: rotate(360deg); } }
.noscript { padding: 24px 0 48px; text-align: center; color: var(--ash); font-size: 14px; }
@media (min-width: 768px) { .more .more-btn { width: 240px; } }
@media (min-width: 1024px) { .more { padding: 56px 0 96px; } }

/* ---------- 作品详情 ---------- */
.crumbs { display: none; }
.work-grid { display: grid; grid-template-columns: minmax(0, 1fr); }
.work-media { margin-left: calc(-1 * var(--pad-l)); margin-right: calc(-1 * var(--pad-r)); }
.work-aside { padding-top: 20px; display: flex; flex-direction: column; gap: 14px; }
.work-meta-line { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font-size: 12px; letter-spacing: .08em; color: var(--mist); }
.work-title { font-weight: 500; font-size: 26px; line-height: 1.3; --opsz: 9; }
.work-dl, .work-sep, .work-cta { display: none; }
.work-date { display: flex; align-items: center; gap: 10px; letter-spacing: .06em; }
.work-help { font-size: 13px; line-height: 1.7; color: var(--ash); }
.work-desc { margin-top: 18px; padding-top: 28px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 16px; }
.work-desc p:not(.overline) { font-size: 16px; line-height: 1.75; }
.work-desc h2.overline { font-weight: 500; }

.id-block { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.id-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; font-size: 12px; color: var(--mist); }
.idbox {
  min-height: 56px; padding: 6px 6px 6px 14px;
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  background: var(--graphite); border: 1px solid var(--line-strong); border-radius: 2px;
}
.id-value {
  font-family: var(--f-mono); font-size: 13.5px; font-weight: 500; letter-spacing: .02em;
  word-break: break-all; -webkit-user-select: all; user-select: all;
}
.copy-btn {
  height: 44px; flex-shrink: 0; padding: 0 12px;
  display: inline-flex; align-items: center; gap: 6px;
  border: 1px solid var(--ember); border-radius: 2px;
  color: var(--ember); font-size: 13px;
  transition: background-color .2s, border-color .2s, color .2s;
}
.copy-btn:hover { background: rgba(214, 160, 100, .08); }
.copy-btn .ic-check, .copy-btn .lbl-done { display: none; }
.copy-btn.is-copied { border-color: var(--line-strong); background: rgba(214, 160, 100, .12); color: var(--ember-light); }
.copy-btn.is-copied .ic-copy, .copy-btn.is-copied .lbl-copy { display: none; }
.copy-btn.is-copied .ic-check { display: block; }
.copy-btn.is-copied .lbl-done { display: inline; }

@media (min-width: 768px) {
  .work-media { margin-left: 0; margin-right: 0; }
  .work-aside { padding-top: 28px; gap: 16px; }
  .work-title { font-size: 30px; line-height: 1.25; --opsz: 10; }
  .work-cta { display: flex; height: 58px; margin-top: 4px; font-size: 16px; letter-spacing: .04em; }
  .id-value { font-size: 15px; }
  .copy-btn { padding: 0 14px; font-size: 14px; gap: 8px; }
}
@media (min-width: 1024px) {
  .crumbs { display: flex; align-items: center; gap: 10px; height: 44px; margin-top: 24px; font-size: 13px; color: var(--mist); }
  .crumbs a { display: flex; align-items: center; gap: 8px; height: 44px; color: var(--ash); }
  .crumbs .mono { font-size: 12px; }
  .work-grid { margin-top: 20px; }
  .work-desc { margin-top: 48px; padding-top: 0; border-top: 0; max-width: 680px; gap: 20px; }
  .work-desc p:not(.overline) { font-size: 17px; line-height: 1.8; }
}
@media (min-width: 1200px) {
  .work-grid { grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 24px; align-items: start; }
  .work-media { grid-column: 1 / span 8; grid-row: 1; }
  .work-stills { grid-column: 1 / span 8; grid-row: 2; }
  .work-desc { grid-column: 1 / span 8; grid-row: 3; margin-top: 64px; }
  .work-aside {
    grid-column: 9 / span 4; grid-row: 1 / span 3; align-self: start;
    position: sticky; top: calc(var(--header-h) + 24px);
    padding-top: 0; gap: 24px;
  }
  .work-meta-line, .work-tags-sm { display: none; }
  .work-dl {
    display: grid; grid-template-columns: 72px minmax(0, 1fr);
    column-gap: 12px; row-gap: 12px; align-items: center; font-size: 14px;
  }
  .work-dl dt { color: var(--mist); }
  .work-dl .tag { height: 26px; padding: 0 9px; font-size: 10px; }
  .work-sep { display: block; height: 1px; background: var(--line); }
  .id-block { margin-top: 0; gap: 10px; }
  .idbox { min-height: 58px; padding-left: 16px; gap: 10px; }
  .work-cta { margin-top: 0; }
  .work-help { margin-top: -8px; }
}
.work-tags-sm .tag { height: 30px; font-size: 10px; }

/* ---------- 作品画面：主图放大入口 + 3×3 截图 ---------- */
.work-zoom { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; cursor: zoom-in; }
.work-zoom-badge {
  position: absolute; top: 12px; right: 12px;
  width: 36px; height: 36px; display: flex; align-items: center; justify-content: center;
  color: var(--smoke); background: rgba(12, 14, 17, .55); border: 1px solid rgba(236, 231, 223, .16); border-radius: 2px;
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  transition: opacity .3s var(--ease), border-color .3s, color .3s;
}
.work-zoom:hover .work-zoom-badge, .work-zoom:focus-visible .work-zoom-badge { border-color: rgba(214, 160, 100, .6); color: var(--ember-light); }
.work-zoom:focus-visible { outline-offset: -3px; }
.is-broken .work-zoom, .ss-ready .work-media:not(.is-loaded) .work-zoom { display: none; }
@media (hover: hover) and (min-width: 768px) {
  .work-zoom-badge { opacity: 0; }
  .work-media:hover .work-zoom-badge, .work-zoom:focus-visible .work-zoom-badge { opacity: 1; }
}

.work-stills { margin-top: 28px; padding-top: 28px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 16px; }
.stills-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.stills-head .overline { font-weight: 500; }
.stills-count { font-size: 12px; letter-spacing: .14em; color: var(--mist); }
.stills-grid {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 3px;
  margin-left: calc(-1 * var(--pad-l)); margin-right: calc(-1 * var(--pad-r));
}
.still { position: relative; display: block; overflow: hidden; background: var(--char); }
.still::before { content: ""; display: block; padding-top: 56.25%; }
.still img {
  position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover;
  filter: brightness(.88) saturate(.95);
  transition: transform .7s var(--ease), filter .4s var(--ease);
}
.still::after {
  content: ""; position: absolute; top: 0; right: 0; bottom: 0; left: 0; pointer-events: none;
  box-shadow: inset 0 0 0 1px rgba(214, 160, 100, 0); transition: box-shadow .3s var(--ease);
}
.still-num {
  position: absolute; top: 8px; left: 10px;
  font-size: 10px; letter-spacing: .14em; color: var(--smoke);
  text-shadow: 0 1px 6px rgba(0, 0, 0, .6);
  opacity: 0; transform: translateY(-3px); transition: opacity .3s var(--ease), transform .3s var(--ease);
}
.still.is-broken img { visibility: hidden; }
.still.is-broken .still-num { opacity: .6; transform: none; }
.still:focus-visible { outline-offset: -2px; }
.still:focus-visible img { filter: none; }
.still:focus-visible .still-num { opacity: .95; transform: none; }
@media (hover: hover) {
  .still:hover img { transform: scale(1.045); filter: none; }
  .still:hover::after { box-shadow: inset 0 0 0 1px rgba(214, 160, 100, .55); }
  .still:hover .still-num { opacity: .95; transform: none; }
}
@media (min-width: 768px) {
  .stills-grid { gap: 8px; margin-left: 0; margin-right: 0; }
  .still { border-radius: 2px; }
}
@media (min-width: 1024px) {
  .work-stills { margin-top: 40px; padding-top: 0; border-top: 0; gap: 18px; }
}
@media (min-width: 1200px) {
  .work-stills { margin-top: 24px; }
}

/* ---------- 作品画面：全屏查看 ---------- */
/* 比 .modal 的底部抽屉 / 顶部留白规则更具体：全屏铺满 */
.modal.viewer { align-items: stretch; padding: 0; overflow: hidden; z-index: 60; }
.viewer .viewer-backdrop { background: rgba(6, 7, 9, .99); }
.viewer-dialog {
  position: relative; flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column;
  padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
  opacity: 0; transition: opacity .25s var(--ease);
}
.viewer.is-open .viewer-dialog { opacity: 1; }
.viewer-top { flex-shrink: 0; height: 60px; padding: 0 8px 0 20px; display: flex; align-items: center; gap: 18px; }
.viewer-count { display: flex; align-items: baseline; gap: 8px; font-size: 14px; letter-spacing: .12em; color: var(--smoke); }
.viewer-slash, .viewer-total { color: var(--mist); }
.viewer-id { flex: 1 1 auto; min-width: 0; font-size: 11px; letter-spacing: .06em; color: var(--mist); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.viewer-close { width: 48px; height: 48px; color: var(--ash); transition: color .2s; }
.viewer-close:hover { color: var(--smoke); }

.viewer-stage { position: relative; flex: 1 1 auto; min-height: 0; display: flex; align-items: center; justify-content: center; touch-action: pan-y; }
.viewer-figure {
  position: relative; margin: 0;
  width: min(100%, calc((100vh - 170px) * 16 / 9));
  background: var(--char);
}
@supports (height: 100dvh) { .viewer-figure { width: min(100%, calc((100dvh - 170px - env(safe-area-inset-top) - env(safe-area-inset-bottom)) * 16 / 9)); } }
.viewer-img { width: 100%; height: auto; transition: opacity .25s var(--ease); -webkit-user-select: none; user-select: none; -webkit-user-drag: none; }
.viewer-img:not([src]) { visibility: hidden; }
.viewer-figure::before { content: ""; float: left; padding-top: 56.25%; }
.viewer-figure::after { content: ""; display: block; clear: both; }
.viewer-figure .viewer-img { position: absolute; top: 0; left: 0; }
.viewer-figure.is-loading .viewer-img { opacity: .3; }
.viewer-figure.is-broken .viewer-img { visibility: hidden; }
.viewer-figure.is-in[data-dir="next"] .viewer-img { animation: ss-still-next .45s var(--ease); }
.viewer-figure.is-in[data-dir="prev"] .viewer-img { animation: ss-still-prev .45s var(--ease); }
.viewer-figure.is-in[data-dir="none"] .viewer-img { animation: ss-still-in .4s var(--ease); }
@keyframes ss-still-next { from { opacity: .2; transform: translateX(18px); } to { opacity: 1; transform: none; } }
@keyframes ss-still-prev { from { opacity: .2; transform: translateX(-18px); } to { opacity: 1; transform: none; } }
@keyframes ss-still-in { from { opacity: 0; transform: scale(.985); } to { opacity: 1; transform: none; } }
.viewer-spin { position: absolute; top: 50%; left: 50%; margin: -17px 0 0 -17px; color: var(--ember); opacity: 0; pointer-events: none; }
.viewer-figure.is-loading .viewer-spin { animation: ss-spin 1.1s linear infinite, ss-appear .2s ease .35s forwards; }
@keyframes ss-appear { to { opacity: 1; } }
.viewer-error { position: absolute; top: 50%; left: 0; right: 0; transform: translateY(-50%); text-align: center; font-size: 14px; color: var(--ash); }

.viewer-nav {
  position: absolute; top: 50%; z-index: 1; width: 48px; height: 72px; margin-top: -36px;
  display: flex; align-items: center; justify-content: center;
  color: var(--smoke); filter: drop-shadow(0 1px 4px rgba(0, 0, 0, .7));
  transition: color .2s, background-color .2s, border-color .2s;
}
.viewer-prev { left: 0; }
.viewer-next { right: 0; }
.viewer-nav:hover { color: var(--ember-light); }

.viewer-strip {
  flex-shrink: 0; display: flex; gap: 6px; padding: 16px 20px 20px;
  overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.viewer-strip::-webkit-scrollbar { display: none; }
.viewer-strip > :first-child { margin-left: auto; }
.viewer-strip > :last-child { margin-right: auto; }
.viewer-thumb { position: relative; flex: 0 0 56px; height: 31.5px; overflow: hidden; border-radius: 1px; background: var(--char); }
.viewer-thumb img { width: 100%; height: 100%; object-fit: cover; opacity: .38; transition: opacity .25s var(--ease); }
.viewer-thumb::after { content: ""; position: absolute; top: 0; right: 0; bottom: 0; left: 0; box-shadow: inset 0 0 0 1px transparent; transition: box-shadow .25s var(--ease); }
.viewer-thumb:hover img { opacity: .75; }
.viewer-thumb.is-current img { opacity: 1; }
.viewer-thumb.is-current::after { box-shadow: inset 0 0 0 1px var(--ember); }
.viewer-thumb:focus-visible { outline-offset: 2px; }

@media (min-width: 768px) {
  .viewer-top { height: 72px; padding: 0 16px 0 32px; }
  .viewer-count { font-size: 15px; }
  .viewer-id { font-size: 12px; }
  .viewer-stage { padding: 0 88px; }
  .viewer-figure { width: min(100%, calc((100vh - 200px) * 16 / 9)); }
  @supports (height: 100dvh) { .viewer-figure { width: min(100%, calc((100dvh - 200px) * 16 / 9)); } }
  .viewer-nav {
    width: 52px; height: 52px; margin-top: -26px;
    border: 1px solid var(--line-strong); border-radius: 2px; filter: none;
  }
  .viewer-prev { left: 24px; }
  .viewer-next { right: 24px; }
  .viewer-nav:hover { border-color: var(--ember); background: rgba(214, 160, 100, .06); }
  .viewer-strip { gap: 8px; padding: 20px 32px 28px; }
  .viewer-thumb { flex-basis: 80px; height: 45px; }
}

/* ---------- 相关作品 ---------- */
.related { padding: 64px 0 72px; display: flex; flex-direction: column; gap: 20px; }
.related-track {
  display: flex; gap: 16px;
  padding: 0 var(--pad-r) 0 var(--pad-l);
  overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding: 0 var(--pad-l);
  scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.related-track::-webkit-scrollbar { display: none; }
.related-track::after { content: ""; flex: 0 0 1px; }
.related-track > .card { flex: 0 0 280px; scroll-snap-align: start; }
@media (min-width: 768px) {
  .related-track {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--gap); row-gap: 40px;
    max-width: calc(var(--maxw) + 2 * var(--gutter)); margin: 0 auto; width: 100%; overflow: visible;
  }
  .related-track::after { display: none; }
  .related-track > .card { flex: none; }
}
@media (min-width: 1024px) { .related { padding: 112px 0 120px; gap: 40px; } }
@media (min-width: 1200px) {
  .related-track { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 48px; }
  .related-track > .card:nth-child(n + 4) { display: none; }
}

/* ---------- 手机底部购买栏 ---------- */
.buybar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
  display: flex; gap: 10px;
  padding: 12px max(16px, env(safe-area-inset-right)) calc(12px + env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));
  background: var(--ink);
  border-top: 1px solid var(--line);
}
.copy-square { width: 52px; height: 52px; padding: 0; justify-content: center; }
.copy-square svg { width: 18px; height: 18px; }
.buybar-cta { flex: 1 1 auto; height: 52px; padding: 0 16px; gap: 8px; font-size: 16px; letter-spacing: .04em; }
body.has-buybar { padding-bottom: calc(76px + env(safe-area-inset-bottom)); }
@media (min-width: 768px) {
  .buybar { display: none; }
  body.has-buybar { padding-bottom: 0; }
}

/* ---------- 弹层：客服面板 ---------- */
html.is-locked, html.is-locked body { overflow: hidden; }
.modal {
  position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 50;
  display: flex; justify-content: center; align-items: flex-end;
}
.modal-backdrop { position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(6, 7, 9, .74); opacity: 0; transition: opacity .2s; }
.modal-dialog {
  position: relative; width: 100%; max-height: 92vh;
  overflow-y: auto; overscroll-behavior: contain;
  background: var(--char); border: 1px solid var(--line-strong); border-bottom: 0; border-radius: 12px 12px 0 0;
  box-shadow: 0 30px 80px rgba(0, 0, 0, .55);
  transform: translateY(24px); opacity: 0;
  transition: transform .25s var(--ease), opacity .2s;
}
@supports (height: 100svh) { .modal-dialog { max-height: 92svh; } }
.modal.is-open .modal-backdrop { opacity: 1; }
.modal.is-open .modal-dialog { transform: none; opacity: 1; }
@media (min-width: 768px) {
  .modal { align-items: flex-start; padding: max(24px, 12vh) 24px 24px; overflow-y: auto; }
  .modal-dialog { max-width: 640px; max-height: none; overflow: visible; border-bottom: 1px solid var(--line-strong); border-radius: 2px; transform: translateY(12px); }
}

.sheet-handle { width: 40px; height: 4px; margin: 10px auto 0; border-radius: 2px; background: var(--line-strong); }
.panel-head { padding: 12px 12px 0 20px; display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.panel-head .heading { gap: 10px; }
.panel-title { font-size: 24px; line-height: 1.2; --opsz: 9; }
.panel-close { margin: -6px -8px 0 0; color: var(--ash); }
.panel-close:hover { color: var(--smoke); }
.panel-steps { margin-top: 16px; padding: 0 20px; display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12px; color: var(--ash); }
.panel-steps li { display: flex; gap: 6px; align-items: baseline; }
.panel-steps .num { --opsz: 6; }
.panel-id { margin-top: 22px; padding: 0 20px; display: flex; flex-direction: column; gap: 10px; }
.panel .idbox { background: var(--ink); padding-right: 7px; }
.panel .id-value { font-size: 14px; }
.panel-hint { font-size: 12px; line-height: 1.6; color: var(--mist); }
.panel-channels { margin-top: 14px; padding: 0 20px; display: flex; flex-direction: column; }
.panel-foot {
  margin-top: 20px; padding: 14px 20px calc(26px + env(safe-area-inset-bottom));
  border-top: 1px solid var(--line);
  display: flex; flex-direction: column; gap: 6px;
  font-size: 12px; line-height: 1.6; color: var(--mist);
}

.pch {
  min-height: 76px; padding: 12px 0; border-bottom: 1px solid var(--line);
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px;
}
.pch-info { grid-column: 1; grid-row: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pch-actions { grid-column: 2; grid-row: 1; display: flex; gap: 8px; }
.pch-qr { grid-column: 1 / -1; grid-row: 2; display: none; flex-direction: column; align-items: center; gap: 10px; padding: 8px 0 4px; }
.pch.qr-open .pch-qr { display: flex; }
.pch-qr .qr-img, .pch-qr .qr-ph { width: 180px; height: 180px; }
.pch-name-row { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: baseline; }
.pch-name { font-size: 15px; }
.pch-tag { font-size: 11px; color: var(--mist); }
.pch-acc { font-family: var(--f-mono); font-size: 13px; color: var(--ash); word-break: break-all; }
.pch-qr-toggle { color: var(--ash); }
.pch-qr-toggle[aria-expanded="true"] { border-color: var(--ember); color: var(--ember-light); }
.qr-hint { font-size: 12px; color: var(--mist); text-align: center; }
.qr-img { background: #fff; padding: 6px; object-fit: contain; }
.qr-ph {
  display: flex; align-items: center; justify-content: center; text-align: center;
  border: 1px dashed var(--line-strong); font-size: 12px; color: var(--mist);
}
@media (min-width: 768px) {
  .sheet-handle { display: none; }
  .panel-head { padding: 28px 24px 0 32px; }
  .panel-title { font-size: 30px; --opsz: 10; }
  .panel-steps { padding: 0 32px; gap: 24px; font-size: 13px; }
  .panel-id { padding: 0 32px; }
  .panel .idbox { min-height: 60px; padding-left: 16px; }
  .panel .id-value { font-size: 17px; }
  .panel-channels { margin-top: 22px; padding: 0 32px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
  .pch { min-height: 0; padding: 16px; display: flex; flex-direction: column; align-items: stretch; gap: 12px; background: var(--ink); border: 1px solid var(--line); }
  .pch-qr { display: flex; order: -1; padding: 0; }
  .pch-qr .qr-img, .pch-qr .qr-ph { width: 128px; height: 128px; }
  .pch-qr .qr-hint, .pch-qr-toggle { display: none; }
  .pch-name-row { justify-content: space-between; gap: 6px; }
  .pch-actions { margin-top: auto; }
  .pch-actions .btn { flex: 1 1 auto; height: 40px; background: transparent; color: var(--smoke); border: 1px solid var(--line-strong); font-weight: 400; }
  .pch-actions .btn:hover { border-color: var(--ember); color: var(--ember-light); background: transparent; }
  .panel-foot { margin-top: 24px; padding: 16px 32px 20px; flex-direction: row; justify-content: space-between; }
  .panel-channels.single { grid-template-columns: minmax(0, 1fr); }
  .panel-channels.single .pch { flex-direction: row; align-items: center; gap: 20px; }
  .panel-channels.single .pch-info { flex: 1 1 auto; }
  .panel-channels.single .pch-actions { margin-top: 0; }
}

/* ---------- 联系我们 ---------- */
.steps { display: grid; grid-template-columns: minmax(0, 1fr); column-gap: var(--gap); }
.step { border-top: 1px solid var(--line-strong); padding: 24px 0 28px; display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.step-num { font-family: var(--f-serif); font-style: italic; font-size: 44px; line-height: 1; color: var(--ember); --opsz: 14; }
.step-title { margin-top: 4px; font-size: 22px; line-height: 1.3; --opsz: 8; }
.step p { font-size: 15px; line-height: 1.75; color: var(--ash); }
.demo-id {
  margin-top: 6px; height: 48px; padding: 0 6px 0 14px;
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  background: var(--graphite); border: 1px solid var(--line-strong); border-radius: 2px;
}
.demo-id .mono { min-width: 0; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.demo-copy { height: 34px; padding: 0 10px; flex-shrink: 0; display: flex; align-items: center; gap: 6px; border: 1px solid var(--ember); border-radius: 2px; color: var(--ember); font-size: 12px; }
.bubble-row { margin-top: 6px; display: flex; justify-content: flex-end; }
.bubble { max-width: 300px; padding: 10px 14px; border-radius: 12px 12px 2px 12px; background: var(--line); font-size: 13px; line-height: 1.6; }
.bubble .mono { font-size: 12px; color: var(--ember-light); word-break: break-all; }
.step .step-note { margin-top: 6px; min-height: 48px; padding: 12px 14px; display: flex; align-items: center; border: 1px dashed var(--line-strong); border-radius: 2px; font-size: 13px; line-height: 1.5; color: var(--mist); }
@media (min-width: 1024px) {
  .steps { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .step { padding: 28px 0 0; }
  .step-num { font-size: 60px; --opsz: 19; }
  .step-title { font-size: 26px; --opsz: 9; }
}

.channels { padding-top: 48px; }
.channels-inner { display: flex; flex-direction: column; gap: 24px; }
.channels-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 16px; }
.hours { font-size: 14px; color: var(--mist); }
.ch-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
.ch { padding: 20px; display: flex; gap: 20px; background: var(--char); border: 1px solid var(--line); min-width: 0; }
.ch-qr { width: 96px; height: 96px; flex-shrink: 0; }
.ch-qr .qr-img, .ch-qr .qr-ph { width: 100%; height: 100%; }
.ch-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.ch-text { display: flex; flex-direction: column; gap: 6px; }
.ch-name { font-size: 20px; line-height: 1.3; --opsz: 8; }
.ch-tag { font-size: 12px; color: var(--mist); }
.ch-acc { font-family: var(--f-mono); font-size: 14px; color: var(--ash); word-break: break-all; }
.ch-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.ch-actions > * { flex: 1 1 auto; }
.tip { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; line-height: 1.7; color: var(--ash); }
.tip svg { flex-shrink: 0; margin-top: 4px; color: var(--mist); }
@media (min-width: 1024px) {
  .channels { padding-top: 112px; }
  .channels-inner { gap: 40px; }
  .ch-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
  .ch { padding: 28px; flex-direction: column; }
  .ch-qr { width: 168px; height: 168px; align-self: center; }
  .ch-grid.single { grid-template-columns: minmax(0, 560px); }
  .ch-grid.single .ch { flex-direction: row; align-items: center; gap: 28px; }
}

.band { padding: 64px 0 72px; }
.band-box { padding: 28px 20px; display: flex; flex-direction: column; gap: 24px; border: 1px solid var(--line); }
.band-text { display: flex; flex-direction: column; gap: 8px; }
.band-title { font-size: 24px; line-height: 1.2; --opsz: 9; }
.band-text p { font-size: 15px; color: var(--ash); }
.band-btn { width: 100%; height: 52px; }
@media (min-width: 768px) { .band-btn { width: auto; } }
@media (min-width: 1024px) {
  .band { padding: 112px 0 120px; }
  .band-box { padding: 40px 48px; flex-direction: row; align-items: center; justify-content: space-between; }
  .band-title { font-size: 30px; --opsz: 10; }
}

/* ---------- 法律声明 ---------- */
.legal-updated { margin-top: 2px; font-size: 14px; color: var(--mist); }
.legal-grid { display: grid; grid-template-columns: minmax(0, 1fr); column-gap: var(--gap); align-items: start; padding-bottom: 72px; }
.toc { display: none; }
.legal-article { min-width: 0; }
.legal-body { max-width: 720px; display: flex; flex-direction: column; gap: 16px; font-size: 16px; line-height: 1.95; }
.legal-body-en { line-height: 1.75; }
.legal-body h2 { margin-top: 28px; display: flex; gap: 14px; align-items: baseline; font-size: 24px; line-height: 1.3; --opsz: 9; }
.legal-body h2 .n, .toc .n { font-family: var(--f-serif); font-style: italic; color: var(--ember); font-variation-settings: "opsz" var(--opsz, 6); }
.legal-note { margin-bottom: 8px; padding: 14px 16px; border: 1px solid var(--line); font-size: 14px; line-height: 1.7; color: var(--ash); }
.legal-sign { margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 6px; align-items: flex-end; font-size: 15px; }
@media (min-width: 1200px) {
  .legal-grid { grid-template-columns: repeat(12, minmax(0, 1fr)); padding-bottom: 120px; }
  .toc {
    grid-column: 1 / span 3; position: sticky; top: calc(var(--header-h) + 32px);
    display: flex; flex-direction: column;
    border-top: 1px solid var(--line-strong); padding-top: 16px;
  }
  .toc-title { margin-bottom: 8px; font-size: 12px; letter-spacing: .22em; font-weight: 500; color: var(--mist); }
  .toc a { min-height: 40px; display: flex; align-items: center; gap: 12px; font-size: 14px; color: var(--ash); }
  .toc .n { width: 16px; flex-shrink: 0; }
  .legal-article { grid-column: 5 / span 7; }
}

/* ---------- 404 ---------- */
.notfound { padding-top: 72px; padding-bottom: 96px; display: flex; flex-direction: column; align-items: flex-start; gap: 20px; }
.notfound-code { font-style: italic; font-size: 88px; line-height: 1; color: var(--ember); --opsz: 28; }
.notfound .page-sub { max-width: 560px; }
.notfound-actions { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 12px; }
@media (min-width: 1024px) { .notfound { padding-top: 120px; padding-bottom: 160px; } .notfound-code { font-size: 120px; --opsz: 36; } }

/* ---------- 提示条 ---------- */
.toast-region {
  position: fixed; left: 0; right: 0; z-index: 70;
  top: calc(var(--header-h) + 12px);
  padding: 0 20px;
  display: flex; justify-content: center;
  pointer-events: none;
}
.toast {
  max-width: 350px; padding: 13px 18px;
  display: flex; align-items: center; gap: 12px;
  background: var(--graphite); border: 1px solid var(--line-strong); border-radius: 2px;
  box-shadow: 0 16px 40px rgba(0, 0, 0, .5);
  animation: ss-toast .25s ease-out;
}
.toast > svg { flex-shrink: 0; color: var(--ember); }
.toast-text { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.toast-main { font-size: 14px; line-height: 1.5; }
.toast-sub { font-family: var(--f-mono); font-size: 12px; color: var(--ash); word-break: break-all; }
.toast-sub:empty { display: none; }
@keyframes ss-toast { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
/* 手机上打开客服面板时，提示条放到最上方的遮罩区域，不挡面板标题 */
html.is-locked .toast-region { top: 12px; }
@media (min-width: 768px) {
  .toast-region, html.is-locked .toast-region { top: auto; bottom: 40px; }
  .toast { max-width: 520px; }
}

/* ---------- 减少动效 ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---------- 打印 ---------- */
@media print {
  .site-header, .buybar, .menu, .modal, .toast-region, .filterbar, .more, .related { display: none !important; }
  body { background: #fff; color: #000; }
}
