/**
 * 功能说明：定义香瓜手札的静态站视觉系统，负责首页、子页和简历页的版式、配色与交互状态。
 * 职责边界：只处理静态页面展示和响应式布局，不负责数据请求、路由控制与部署逻辑。
 */

@font-face {
  font-family: 'DayruneFont';
  src: url('/fonts/hanchan.ttf') format('truetype');
  font-weight: 400;
  font-display: swap;
}

:root {
  color-scheme: light;
  /* 全站只从这一处取字体；以后替换字库时无需改动组件选择器。 */
  --font-site: 'DayruneFont', "PingFang SC", sans-serif;
  --font-display: var(--font-site);
  --font-body: var(--font-site);
  --font-mono: var(--font-site);
  --bg: #f7f4ee;
  --bg-alt: #efeae1;
  --surface: #fdfbf7;
  --surface-soft: #f8f4ed;
  --surface-strong: #ffffff;
  --text: #403c36;
  --text-soft: rgba(64, 60, 54, 0.76);
  --text-muted: rgba(64, 60, 54, 0.52);
  --line: rgba(64, 60, 54, 0.09);
  --line-strong: rgba(64, 60, 54, 0.14);
  --accent: #5a8c78;
  --accent-deep: #3a5f4e;
  --accent-soft: #c8dcd3;
  --clay: #6f7e76;
  --shadow-soft: 0 24px 56px rgba(31, 28, 23, 0.08);
  --shadow-card: 0 18px 34px rgba(31, 28, 23, 0.06);
  --radius-xl: 34px;
  --radius-lg: 26px;
  --radius-md: 18px;
  --header-height: 84px;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
}

body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.52), transparent 20%),
    radial-gradient(circle at top left, rgba(190, 178, 160, 0.08), transparent 24%),
    linear-gradient(180deg, var(--bg) 0%, #f0ece4 100%);
  color: var(--text);
  font-family: var(--font-body);
  text-rendering: optimizeLegibility;
}

/* sticky footer: push footer to bottom on short pages */
.page-main { flex: 1; }

h1,
h2,
h3,
p,
ul {
  margin: 0;
}

ul {
  padding: 0;
  list-style: none;
}

a {
  color: inherit;
  text-decoration: none;
}

button,
input,
textarea,
object {
  font: inherit;
}

img {
  display: block;
  max-width: 100%;
}

.shell {
  width: min(1120px, calc(100vw - 48px));
  margin: 0 auto;
}

.shell--wide {
  width: min(1240px, calc(100vw - 40px));
}

.site-header {
  position: sticky;
  top: 0;
  z-index: 40;
  border-bottom: 1px solid var(--line);
  background: rgba(247, 244, 238, 0.84);
  backdrop-filter: blur(18px) saturate(118%);
}

.header-row {
  min-height: var(--header-height);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  min-height: 56px;
  flex: 0 0 auto;
}

.brand-mark {
  display: grid;
  place-items: center;
  width: 48px;
  height: 48px;
  overflow: hidden;
  border-radius: 14px;
  border: 1px solid var(--line-strong);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(248, 244, 237, 0.98));
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.72);
}

.brand-image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.brand-copy {
  display: grid;
  gap: 2px;
  min-width: 0;
}

.brand-copy strong {
  font-size: 1rem;
  line-height: 1.25;
  font-weight: 680;
  color: var(--text);
}

.brand-copy small {
  font-size: 0.76rem;
  line-height: 1.35;
  color: var(--text-muted);
  white-space: nowrap;
}

.nav {
  display: inline-flex;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.nav a,
.footer-links a,
.footer-records a,
.inline-links a {
  font-size: 0.95rem;
  line-height: 1.4;
  color: var(--text-soft);
  transition: color 180ms ease;
}

.nav a:hover,
.nav a:focus-visible,
.footer-links a:hover,
.footer-links a:focus-visible,
.footer-records a:hover,
.footer-records a:focus-visible,
.inline-links a:hover,
.inline-links a:focus-visible {
  color: var(--text);
}

.page-home main,
.page-sub main {
  padding-bottom: 88px;
}

.hero,
.section-block,
.page-intro {
  padding-top: clamp(68px, 6vw, 88px);
  scroll-margin-top: calc(var(--header-height) + 18px);
}

.hero-banner {
  position: relative;
  display: grid;
  min-height: clamp(500px, calc(100dvh - 170px), 580px);
  overflow: hidden;
  border-radius: 36px;
  border: 1px solid var(--line);
  background: #292b27;
  box-shadow: var(--shadow-soft);
}

.hero-motion,
.hero-banner-shade,
.hero-banner-copy,
.hero-identity {
  grid-area: 1 / 1;
}

.hero-motion {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(circle at 76% 28%, rgba(232, 190, 138, 0.28), transparent 25%),
    radial-gradient(circle at 52% 78%, rgba(90, 140, 120, 0.24), transparent 31%),
    linear-gradient(135deg, #252823 0%, #35342e 48%, #504a40 100%);
}

.hero-motion::before {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0.13;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.62' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.65'/%3E%3C/svg%3E");
  mix-blend-mode: soft-light;
}

.hero-motion::after {
  content: "";
  position: absolute;
  top: -45%;
  right: -20%;
  width: 72%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 239, 210, 0.3), rgba(200, 220, 211, 0.08) 42%, transparent 68%);
  filter: blur(10px);
  animation: heroLightDrift 12s ease-in-out infinite alternate;
}

.hero-motion-glow {
  position: absolute;
  left: 42%;
  bottom: -42%;
  width: 58%;
  aspect-ratio: 1.3;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(184, 120, 74, 0.3), transparent 67%);
  filter: blur(24px);
  animation: heroGlowBreathe 8s ease-in-out infinite;
}

.hero-motion-lines {
  position: absolute;
  inset: -9% -6%;
  width: 112%;
  height: 118%;
  overflow: visible;
  filter: drop-shadow(0 10px 16px rgba(10, 14, 11, 0.18));
  animation: heroLinesDrift 15s ease-in-out infinite alternate;
}

.hero-motion-line {
  fill: none;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
}

.hero-motion-line--one {
  stroke: rgba(200, 220, 211, 0.64);
  stroke-width: 1.8;
  stroke-dasharray: 18 15 4 24;
  animation: heroInkFlow 18s linear infinite;
}

.hero-motion-line--two {
  stroke: rgba(239, 189, 135, 0.48);
  stroke-width: 1.4;
  stroke-dasharray: 8 22;
  animation: heroInkFlow 24s linear infinite reverse;
}

.hero-motion-line--three {
  stroke: rgba(255, 253, 248, 0.24);
  stroke-width: 1;
  stroke-dasharray: 3 13;
  animation: heroInkFlow 15s linear infinite;
}

.hero-motion-orbit {
  position: absolute;
  border: 1px solid rgba(200, 220, 211, 0.24);
  border-radius: 50%;
  pointer-events: none;
}

.hero-motion-orbit::after {
  content: "";
  position: absolute;
  top: 50%;
  left: -5px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #efbd87;
  box-shadow: 0 0 0 8px rgba(239, 189, 135, 0.08);
}

.hero-motion-orbit--outer {
  top: 8%;
  right: 2%;
  width: 56%;
  height: 72%;
  transform: rotate(-8deg);
  animation: heroOrbitOuter 24s linear infinite;
}

.hero-motion-orbit--inner {
  top: 24%;
  right: 17%;
  width: 32%;
  height: 43%;
  border-color: rgba(239, 189, 135, 0.22);
  transform: rotate(17deg);
  animation: heroOrbitInner 17s linear infinite reverse;
}

.hero-motion-seal {
  position: absolute;
  top: 26%;
  right: 31%;
  width: 52px;
  aspect-ratio: 1;
  border: 1px solid rgba(239, 189, 135, 0.5);
  border-radius: 50%;
  background:
    radial-gradient(circle, rgba(184, 120, 74, 0.78) 0 18%, transparent 20%),
    repeating-conic-gradient(rgba(239, 189, 135, 0.44) 0 5deg, transparent 5deg 18deg);
  box-shadow: 0 0 0 10px rgba(184, 120, 74, 0.08);
  animation: heroSealTurn 28s linear infinite;
}

.hero-motion-dot {
  position: absolute;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #c8dcd3;
  box-shadow: 0 0 0 8px rgba(200, 220, 211, 0.08);
  animation: heroDotPulse 3.8s ease-in-out infinite;
}

.hero-motion-dot--one { top: 21%; left: 35%; }
.hero-motion-dot--two { top: 67%; right: 10%; animation-delay: -1.3s; }
.hero-motion-dot--three { bottom: 14%; left: 57%; animation-delay: -2.6s; }
.hero-motion-dot--four { top: 14%; right: 18%; width: 5px; height: 5px; animation-delay: -0.7s; }
.hero-motion-dot--five { top: 48%; right: 34%; background: #efbd87; animation-delay: -1.9s; }
.hero-motion-dot--six { bottom: 18%; right: 4%; width: 6px; height: 6px; background: #b8784a; animation-delay: -3.1s; }

@keyframes heroLightDrift {
  from { translate: 0 0; scale: 0.94; }
  to { translate: -12% 14%; scale: 1.08; }
}

@keyframes heroGlowBreathe {
  0%, 100% { opacity: 0.48; transform: scale(0.94); }
  50% { opacity: 0.86; transform: scale(1.08); }
}

@keyframes heroLinesDrift {
  from { transform: translate3d(-1.5%, -1%, 0) rotate(-1deg); }
  to { transform: translate3d(1.5%, 1%, 0) rotate(1deg); }
}

@keyframes heroInkFlow {
  to { stroke-dashoffset: -240; }
}

@keyframes heroOrbitOuter {
  to { transform: rotate(352deg); }
}

@keyframes heroOrbitInner {
  to { transform: rotate(377deg); }
}

@keyframes heroSealTurn {
  to { transform: rotate(1turn); }
}

@keyframes heroDotPulse {
  0%, 100% { opacity: 0.4; transform: scale(0.72); }
  50% { opacity: 1; transform: scale(1); }
}

.hero-banner-shade {
  background:
    linear-gradient(90deg, rgba(18, 17, 15, 0.56) 0%, rgba(18, 17, 15, 0.24) 28%, rgba(18, 17, 15, 0.08) 48%, rgba(18, 17, 15, 0.02) 100%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.02) 0%, rgba(20, 19, 16, 0.09) 100%);
}

.hero-banner-copy {
  position: relative;
  z-index: 1;
  display: grid;
  align-content: end;
  gap: 0;
  width: min(520px, calc(100% - 64px));
  padding: 54px 56px 50px;
}

.eyebrow {
  font-size: 0.8rem;
  font-weight: 700;
  line-height: 1.4;
  color: var(--accent);
}

.hero-title,
.page-intro h1 {
  margin-top: 18px;
  font-size: clamp(3rem, 4.2vw, 4.05rem);
  line-height: 1.1;
  font-weight: 560;
  letter-spacing: -0.01em;
  letter-spacing: 0;
  color: #fffdf8;
}

.hero-title {
  max-width: none;
  white-space: nowrap;
}

.page-intro h1 {
  max-width: 4.8ch;
}

.hero-lead,
.page-intro p:last-child {
  margin-top: 18px;
  font-size: clamp(1rem, 1.06vw, 1.08rem);
  line-height: 1.88;
  color: rgba(255, 253, 248, 0.9);
}

.hero-lead {
  max-width: none;
}

.page-intro p:last-child {
  max-width: 15ch;
}

.hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 26px;
}

.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 50px;
  padding: 0 20px;
  border-radius: 999px;
  border: 1px solid var(--line-strong);
  font-size: 0.94rem;
  font-weight: 620;
  line-height: 1;
  transition: transform 180ms ease, background-color 180ms ease, color 180ms ease, border-color 180ms ease;
}

.button:hover,
.button:focus-visible,
.project-card:hover,
.project-card:focus-visible,
.project-row:hover,
.project-row:focus-visible {
  transform: translateY(-2px);
}

.button--solid {
  background: var(--accent-deep);
  border-color: var(--accent-deep);
  color: #f4fbf7;
}

.button--ghost {
  background: rgba(255, 255, 255, 0.82);
  color: #1d221f;
}

.hero-list {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 16px;
}

.hero-list li,
.platform-chip {
  display: inline-flex;
  align-items: center;
  min-height: 30px;
  padding: 0 12px;
  border-radius: 999px;
  border: 1px solid var(--line-strong);
  background: rgba(255, 255, 255, 0.84);
  font-size: 0.75rem;
  font-weight: 640;
  line-height: 1;
  color: var(--text-soft);
}

.platform-chip--neutral {
  color: rgba(25, 23, 18, 0.58);
}

.hero-identity {
  position: relative;
  z-index: 1;
  display: grid;
  align-self: end;
  justify-self: end;
  width: min(344px, calc(100% - 56px));
  margin: 0 26px 26px 0;
  padding: 18px 18px 15px;
  border-radius: 22px;
  border: 1px solid rgba(255, 255, 255, 0.62);
  background: rgba(253, 251, 247, 0.78);
  backdrop-filter: blur(14px) saturate(106%);
  box-shadow: 0 14px 34px rgba(25, 23, 18, 0.12);
}

.hero-identity-head {
  display: grid;
  grid-template-columns: 62px minmax(0, 1fr);
  gap: 12px;
  align-items: center;
}

.hero-identity-avatar {
  width: 62px;
  aspect-ratio: 1 / 1;
  padding: 6px;
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.94);
  border: 1px solid rgba(25, 23, 18, 0.08);
}

.project-art img,
.project-row-art img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hero-identity-avatar img {
  width: 100%;
  height: 100%;
  border-radius: 14px;
  object-fit: cover;
}

.hero-identity-meta {
  display: grid;
  gap: 5px;
}

.hero-identity-meta strong {
  font-size: 1.52rem;
  line-height: 1.08;
  font-weight: 590;
}

.hero-identity-meta span {
  font-size: 0.92rem;
  line-height: 1.5;
  color: var(--text-muted);
}

.hero-identity-copy {
  margin-top: 12px;
  max-width: none;
  font-size: 0.9rem;
  line-height: 1.72;
  color: var(--text-soft);
  white-space: nowrap;
}

.hero-identity-links {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin-top: 12px;
}

.hero-identity-links a {
  font-size: 0.92rem;
  line-height: 1.4;
  color: var(--accent-deep);
}

.theme-yokai .project-art,
.theme-yokai .project-art,
.theme-yokai .project-row-art {
  background: linear-gradient(180deg, #6f3022, #9a4a31 72%, #dcc8b3);
}

.theme-kacha .project-art,
.theme-kacha .project-art,
.theme-kacha .project-row-art {
  background: linear-gradient(180deg, #FBF3EB, #F5E1CE 72%, #FFF9F4);
}

.theme-timeart .project-art,
.theme-timeart .project-art,
.theme-timeart .project-row-art {
  background: linear-gradient(180deg, #151b26, #2a3548 70%, #edf1f6);
}

.theme-sparksafe .project-row-art {
  background: linear-gradient(180deg, #f2eee8, #dfd7cc 70%, #fcfaf5);
}

.theme-classgrid .project-row-art {
  background: linear-gradient(180deg, #f5f2eb, #e4dbcf 72%, #fdfaf4);
}

.tool-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
}

.tool-card {
  position: relative;
  display: grid;
  min-height: 226px;
  gap: 18px;
  align-content: space-between;
  overflow: hidden;
  padding: 18px;
  border: 1px solid rgba(29, 34, 31, 0.1);
  border-radius: 8px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(246, 244, 239, 0.98));
  box-shadow: 0 14px 26px rgba(31, 28, 23, 0.045);
  transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}

.tool-card::before {
  content: "";
  position: absolute;
  inset: 0 0 auto;
  height: 3px;
  background: var(--tool-accent, var(--accent));
}

.tool-card:hover,
.tool-card:focus-visible {
  transform: translateY(-2px);
  border-color: rgba(29, 34, 31, 0.18);
  box-shadow: 0 18px 32px rgba(31, 28, 23, 0.075);
}

.tool-card-head,
.tool-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
}

.tool-icon {
  display: grid;
  place-items: center;
  width: 56px;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border: 1px solid rgba(29, 34, 31, 0.1);
  border-radius: 8px;
  background: var(--tool-icon-bg, rgba(255, 255, 255, 0.76));
}

.tool-icon img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.tool-card-body {
  display: grid;
  gap: 8px;
}

.tool-card-body h3 {
  font-size: 1.34rem;
  font-weight: 640;
  line-height: 1.2;
  letter-spacing: 0;
  word-break: break-word;
  overflow-wrap: anywhere;
}

.tool-card-body p {
  font-size: 0.92rem;
  line-height: 1.72;
  color: var(--text-soft);
}

.tool-domain {
  min-width: 0;
  font-family: var(--font-mono);
  font-size: 0.76rem;
  line-height: 1.4;
  color: rgba(29, 34, 31, 0.52);
  overflow-wrap: anywhere;
}

.tool-open {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 34px;
  padding: 0 11px;
  border-radius: 6px;
  background: #27342e;
  font-size: 0.84rem;
  font-weight: 680;
  line-height: 1;
  color: #fffaf3;
  white-space: nowrap;
}

.theme-toolstory {
  --tool-accent: #78a892;
  --tool-icon-bg: #eef6f1;
}

.theme-toolemotion {
  --tool-accent: #c98968;
  --tool-icon-bg: #fbf0e7;
}

.theme-toolscreenshot {
  --tool-accent: #5b6abf;
  --tool-icon-bg: #eef0fa;
}

.theme-toolskills {
  --tool-accent: #b8784a;
  --tool-icon-bg: #faf3eb;
}

.theme-toolscenes {
  --tool-accent: #9b6a32;
  --tool-icon-bg: #f6efe4;
}

.theme-toolwallpaper {
  --tool-accent: #9a91ad;
  --tool-icon-bg: #f0eef5;
}

.theme-toolpatterns {
  --tool-accent: #235789;
  --tool-icon-bg: #f9f7f1;
}

.news-list {
  display: grid;
  gap: 22px;
}

.news-home-stack {
  display: grid;
  gap: 12px;
}

.news-gateway,
.news-list-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 22px;
  align-items: center;
  padding: 22px;
  border: 1px solid rgba(29, 34, 31, 0.1);
  border-radius: 8px;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(248, 244, 237, 0.98)),
    var(--surface);
  box-shadow: var(--shadow-card);
  transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}

.news-gateway:hover,
.news-gateway:focus-visible,
.news-list-card:hover,
.news-list-card:focus-visible {
  border-color: rgba(25, 23, 18, 0.18);
  box-shadow: 0 20px 38px rgba(31, 28, 23, 0.08);
  transform: translateY(-2px);
}

.news-gateway h3,
.news-list-card h2 {
  margin-top: 6px;
  font-size: clamp(1.42rem, 2vw, 1.92rem);
  line-height: 1.18;
  font-weight: 640;
  letter-spacing: 0;
}

.news-gateway p,
.news-list-card p {
  margin-top: 9px;
  max-width: 62ch;
  font-size: 0.96rem;
  line-height: 1.74;
  color: var(--text-soft);
}

.news-gateway-action,
.news-list-card-side strong,
.news-backlink {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 38px;
  padding: 0 13px;
  border-radius: 6px;
  background: #27342e;
  font-size: 0.86rem;
  font-weight: 680;
  line-height: 1;
  color: #fffaf3;
  white-space: nowrap;
}

.news-image-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 38px;
  padding: 0 13px;
  border: 1px solid rgba(29, 34, 31, 0.14);
  border-radius: 6px;
  background: rgba(253, 251, 247, 0.68);
  font-size: 0.86rem;
  font-weight: 680;
  line-height: 1;
  color: var(--accent-deep);
  white-space: nowrap;
  transition: border-color 180ms ease, background-color 180ms ease, color 180ms ease;
}

.news-image-link:hover,
.news-image-link:focus-visible {
  border-color: rgba(29, 34, 31, 0.24);
  background: rgba(255, 255, 255, 0.92);
  color: var(--text);
}

.news-image-link--download {
  border-style: dashed;
}

.news-list--archive {
  gap: 14px;
}

.news-list--home {
  gap: 12px;
}

.news-list-card-side {
  display: grid;
  justify-items: end;
  gap: 12px;
}

.news-list-card h3 {
  margin-top: 6px;
  font-size: clamp(1.42rem, 2vw, 1.92rem);
  line-height: 1.18;
  font-weight: 640;
  letter-spacing: 0;
}

.news-more-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 56px;
  padding: 0 16px;
  border: 1px dashed rgba(29, 34, 31, 0.16);
  border-radius: 8px;
  background: rgba(253, 251, 247, 0.48);
  color: var(--text-soft);
  transition: border-color 180ms ease, background-color 180ms ease, color 180ms ease;
}

.news-more-link:hover,
.news-more-link:focus-visible {
  border-color: rgba(29, 34, 31, 0.26);
  background: rgba(253, 251, 247, 0.82);
  color: var(--text);
}

.news-more-link span {
  font-size: 0.92rem;
  line-height: 1.4;
}

.news-more-link strong {
  font-size: 0.88rem;
  line-height: 1.4;
  color: var(--accent-deep);
}

.page-intro h1.news-page-title {
  max-width: none;
  color: var(--text);
}

.news-page-intro p:last-child {
  max-width: 30ch;
  color: var(--text-soft);
}

.page-news-detail .news-page-title {
  font-size: clamp(2rem, 7.4vw, 3.2rem);
  line-height: 1.12;
}

.news-detail-section .shell {
  display: grid;
  gap: 18px;
}

.news-detail-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-bottom: 4px;
}

.news-detail-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
}

.news-detail-head .news-date {
  margin-bottom: 0;
}

.news-entry {
  display: grid;
  gap: 20px;
  padding: 26px 0 4px;
  border-top: 1px solid rgba(29, 34, 31, 0.12);
}

.news-entry-head {
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 18px;
}

.news-date {
  display: block;
  margin-bottom: 8px;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  line-height: 1.3;
  color: rgba(29, 34, 31, 0.5);
}

.news-entry-head h3 {
  font-size: clamp(1.55rem, 2.4vw, 2.25rem);
  line-height: 1.12;
  font-weight: 620;
  letter-spacing: 0;
}

.news-tag {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 30px;
  padding: 0 11px;
  border: 1px solid rgba(90, 140, 120, 0.22);
  border-radius: 999px;
  background: rgba(200, 220, 211, 0.34);
  font-size: 0.76rem;
  font-weight: 700;
  line-height: 1;
  color: var(--accent-deep);
  white-space: nowrap;
}

.news-lead,
.news-iphone-note,
.news-source {
  font-size: 0.96rem;
  line-height: 1.78;
  color: var(--text-soft);
}

.news-lead {
  max-width: 74ch;
}

.news-table-groups {
  display: grid;
  gap: 16px;
}

.news-table-card {
  overflow: hidden;
  border: 1px solid rgba(29, 34, 31, 0.1);
  border-radius: 8px;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(248, 244, 237, 0.98)),
    var(--surface);
  box-shadow: 0 14px 28px rgba(31, 28, 23, 0.045);
}

.news-table-title {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 54px;
  padding: 14px 16px;
  border-bottom: 1px solid rgba(29, 34, 31, 0.08);
}

.news-table-title span {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 8px;
  background: #27342e;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  color: #fffaf3;
}

.news-table-title h2,
.news-table-title h4 {
  font-size: 1.08rem;
  line-height: 1.25;
  font-weight: 680;
  letter-spacing: 0;
}

.news-table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
  scrollbar-color: rgba(29, 34, 31, 0.26) transparent;
}

.price-table {
  width: 100%;
  min-width: 760px;
  border-collapse: separate;
  border-spacing: 0;
}

.price-table th,
.price-table td {
  padding: 15px 16px;
  border-bottom: 1px solid rgba(29, 34, 31, 0.075);
  vertical-align: middle;
}

.price-table thead th {
  background: rgba(239, 234, 225, 0.74);
  font-size: 0.78rem;
  font-weight: 700;
  line-height: 1.4;
  color: rgba(29, 34, 31, 0.56);
  text-align: right;
}

.price-table thead th:first-child,
.price-table tbody th {
  text-align: left;
}

.price-table tbody th {
  width: 42%;
  font-size: 0.95rem;
  font-weight: 680;
  line-height: 1.42;
  color: var(--text);
}

.price-table tbody th span {
  display: block;
  margin-top: 4px;
  font-size: 0.78rem;
  font-weight: 500;
  color: var(--text-muted);
}

.price-table td {
  font-family: var(--font-mono);
  font-size: 0.9rem;
  line-height: 1.35;
  color: var(--text-soft);
  text-align: right;
  white-space: nowrap;
}

.price-table td:last-child {
  color: var(--accent-deep);
}

.price-table td:last-child strong,
.price-table td:last-child span {
  display: block;
}

.price-table td:last-child span {
  margin-top: 3px;
  color: rgba(58, 95, 78, 0.72);
}

.price-table tbody tr:last-child th,
.price-table tbody tr:last-child td {
  border-bottom: 0;
}

.price-table tbody tr:hover {
  background: rgba(232, 137, 75, 0.055);
}

.news-highlights {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.news-highlight {
  display: grid;
  gap: 8px;
  min-height: 92px;
  align-content: center;
  padding: 16px;
  border: 1px solid rgba(29, 34, 31, 0.1);
  border-radius: 8px;
  background: rgba(253, 251, 247, 0.76);
}

.news-highlight span {
  font-size: 0.78rem;
  font-weight: 700;
  line-height: 1.4;
  color: var(--text-muted);
}

.news-highlight strong {
  font-size: clamp(1.12rem, 1.8vw, 1.45rem);
  line-height: 1.2;
  font-weight: 700;
  color: var(--text);
}

.news-iphone-note {
  padding: 14px 16px;
  border-left: 3px solid #e8894b;
  border-radius: 0 8px 8px 0;
  background: rgba(232, 137, 75, 0.07);
}

.news-source {
  max-width: 82ch;
  font-size: 0.84rem;
  color: var(--text-muted);
}

.news-source a {
  color: var(--accent-deep);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

.project-body,
.project-row-body {
  display: grid;
  gap: 8px;
}

.project-type {
  font-size: 0.76rem;
  font-weight: 700;
  line-height: 1.4;
  color: rgba(25, 23, 18, 0.56);
}

.project-body h3,
.project-row-body h3,
.about-card h2,
.note-card h2,
.resume-copy h2,
.section-heading h2,
.about-strip h2,
.essay-grid h2 {
  font-weight: 620;
  letter-spacing: 0;
  word-break: break-word;
  overflow-wrap: anywhere;
}

.section-heading {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(220px, 0.36fr);
  gap: 24px;
  align-items: end;
  padding-bottom: 22px;
}

.section-heading h2 {
  margin-top: 10px;
  font-size: clamp(1.7rem, 2.4vw, 2.35rem);
  line-height: 1.12;
}

.section-heading p,
.about-strip-copy p,
.essay-copy p,
.about-card p,
.note-card p,
.resume-copy p,
.footer-grid p {
  font-size: 0.98rem;
  line-height: 1.84;
  color: var(--text-soft);
}

.section-note {
  max-width: 28ch;
  justify-self: end;
}

.project-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px;
}

.project-card,
.project-row,
.about-card,
.note-card,
.resume-card,
.resume-viewer {
  border-radius: var(--radius-lg);
  border: 1px solid var(--line);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(248, 244, 237, 0.98));
  box-shadow: var(--shadow-card);
}

.project-card {
  display: grid;
  gap: 16px;
  padding: 16px;
  transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}

.project-card:hover,
.project-card:focus-visible,
.project-row:hover,
.project-row:focus-visible {
  border-color: rgba(25, 23, 18, 0.18);
  border-left-color: var(--accent);
  box-shadow: 0 22px 42px rgba(27, 23, 16, 0.1);
  transform: translateY(-2px);
}

.project-art {
  aspect-ratio: 1 / 0.92;
  min-height: 0;
  overflow: hidden;
  border-radius: 18px;
}

.project-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.platform-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.project-body h3,
.project-row-body h3 {
  font-size: 1.44rem;
  line-height: 1.22;
}

.project-body p,
.project-row-body p {
  font-size: 0.94rem;
  line-height: 1.8;
  color: var(--text-soft);
}

.project-link,
.project-row-link {
  font-size: 0.88rem;
  font-weight: 650;
  line-height: 1.4;
  color: var(--accent-deep);
}

.project-rows {
  display: grid;
  gap: 14px;
}

.project-row {
  display: grid;
  grid-template-columns: 132px minmax(0, 1fr) auto;
  gap: 20px;
  align-items: center;
  padding: 16px;
  transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}

.project-row-art {
  width: 132px;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border-radius: 18px;
}

.about-strip-grid,
.essay-grid,
.page-intro-grid,
.resume-layout {
  display: grid;
  grid-template-columns: minmax(0, 0.92fr) minmax(320px, 0.86fr);
  gap: 42px;
}

.about-strip-copy,
.essay-copy {
  display: grid;
  gap: 18px;
  align-content: end;
}

.inline-links {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
}

.inline-links a {
  position: relative;
}

.inline-links a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -3px;
  height: 1px;
  background: currentColor;
  opacity: 0.24;
}

.page-intro-grid {
  align-items: end;
}

.page-intro h1 {
  max-width: 10ch;
}

.about-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}

.about-card,
.note-card,
.resume-card {
  padding: 24px;
}

.note-stack {
  display: grid;
  gap: 16px;
}

.resume-layout {
  align-items: start;
}

.resume-copy {
  display: grid;
  gap: 16px;
}

.resume-viewer {
  min-height: 760px;
  padding: 0;
  overflow: hidden;
}

.resume-object {
  display: block;
  width: 100%;
  min-height: 760px;
  border: 0;
  background: #f8f4ed;
}

.resume-placeholder {
  display: grid;
  place-items: center;
  gap: 10px;
  min-height: 760px;
  padding: 40px;
  text-align: center;
  color: var(--text-soft);
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.84), rgba(248, 244, 237, 0.98)),
    var(--surface);
}

.page-resume {
  min-height: 100vh;
  background:
    radial-gradient(circle at top right, rgba(225, 218, 208, 0.2), transparent 22%),
    linear-gradient(180deg, #f7f4ee 0%, #f1ece4 100%);
}

.page-resume .site-footer {
  display: none;
}

.resume-stage-main {
  padding: 18px 0 40px;
}

.resume-stage {
  display: grid;
  gap: 14px;
}

.resume-stage-head {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 20px;
}

.resume-stage-head h1 {
  margin-top: 6px;
  font-size: clamp(1.6rem, 2.5vw, 2.2rem);
  line-height: 1.08;
  font-weight: 590;
}

.resume-stage-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: flex-end;
}

.resume-stage-viewer {
  overflow: hidden;
  min-height: calc(100vh - 154px);
  border-radius: 34px;
  border: 1px solid rgba(29, 34, 31, 0.08);
  background: rgba(255, 255, 255, 0.72);
  box-shadow: 0 24px 64px rgba(25, 23, 18, 0.08);
  backdrop-filter: blur(12px) saturate(104%);
}

.resume-object--stage {
  width: 100%;
  min-height: calc(100vh - 154px);
  background: #eae6df;
}

.resume-placeholder--stage {
  min-height: calc(100vh - 154px);
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(248, 244, 237, 0.98)),
    var(--surface);
}

.site-footer {
  padding: 24px 0 42px;
}

.footer-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, auto);
  gap: 24px 36px;
  align-items: start;
  padding-top: 28px;
  border-top: 1px solid var(--line);
}

.footer-brand {
  display: grid;
  gap: 6px;
}

.footer-title {
  font-size: 1.08rem;
  font-weight: 680;
  line-height: 1.25;
  color: var(--text);
}

.footer-mail {
  font-size: 0.92rem;
  line-height: 1.4;
  color: var(--text-muted);
}

.footer-links {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 20px;
  justify-content: flex-start;
  align-items: center;
  justify-self: start;
}

.footer-records {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 18px;
  justify-content: flex-end;
  align-items: center;
}

.footer-records span {
  font-size: 0.94rem;
  line-height: 1.5;
  color: var(--text-muted);
}

.police-record {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.police-record img {
  width: 18px;
  height: 18px;
  flex: 0 0 auto;
}

.reveal-ready [data-reveal] {
  opacity: 0;
  translate: 0 18px;
  transition: opacity 500ms ease, translate 500ms ease;
}

.reveal-ready [data-reveal].is-visible {
  opacity: 1;
  translate: 0 0;
}

/* 重复内容按阅读顺序轻量错峰，保持页面进入时的方向感。 */
.project-grid > [data-reveal]:nth-child(1) { transition-delay: 0.00s; }
.project-grid > [data-reveal]:nth-child(2) { transition-delay: 0.06s; }
.project-grid > [data-reveal]:nth-child(3) { transition-delay: 0.12s; }
.project-grid > [data-reveal]:nth-child(4) { transition-delay: 0.18s; }
.project-grid > [data-reveal]:nth-child(5) { transition-delay: 0.24s; }
.project-grid > [data-reveal]:nth-child(6) { transition-delay: 0.30s; }
.module-grid > [data-reveal]:nth-child(1),
.curated-grid > [data-reveal]:nth-child(1) { transition-delay: 0.00s; }
.module-grid > [data-reveal]:nth-child(2),
.curated-grid > [data-reveal]:nth-child(2) { transition-delay: 0.07s; }
.module-grid > [data-reveal]:nth-child(3),
.curated-grid > [data-reveal]:nth-child(3) { transition-delay: 0.14s; }
.module-grid > [data-reveal]:nth-child(4),
.curated-grid > [data-reveal]:nth-child(4) { transition-delay: 0.21s; }

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  .button,
  .project-card,
  .project-row,
  .tool-card,
  .news-gateway,
  .news-list-card,
  .news-image-link,
  .nav a,
  .footer-links a,
  .footer-records a,
  .inline-links a {
    transition: none;
  }

  .reveal-ready [data-reveal] {
    opacity: 1;
    translate: none;
    transition: none;
  }
}

/* =============================================
   作品页 Hero：用真实项目图标构成轻量生成艺术星图。
   只负责视觉叙事，不承担项目导航，避免与下方作品卡重复交互。
   ============================================= */
.page-works .page-intro {
  position: relative;
  isolation: isolate;
  display: block;
  overflow: hidden;
  height: clamp(350px, 46vh, 420px);
  min-height: 0;
  padding: 26px 0;
  border-bottom-color: rgba(64, 60, 54, 0.1);
  background:
    radial-gradient(circle at 78% 42%, rgba(90, 140, 120, 0.25), transparent 27%),
    radial-gradient(circle at 58% 82%, rgba(196, 126, 78, 0.18), transparent 28%),
    linear-gradient(135deg, #f8f5ee 0%, #eee9df 54%, #f7f2e9 100%);
}

.page-works .page-intro::before {
  z-index: -1;
  opacity: 0.045;
}

.page-works .page-intro::after {
  content: "";
  right: clamp(-230px, -12vw, -120px);
  bottom: clamp(-280px, -20vw, -150px);
  width: clamp(520px, 54vw, 820px);
  aspect-ratio: 1;
  border-radius: 50%;
  background: repeating-conic-gradient(
    from 24deg,
    rgba(90, 140, 120, 0.2) 0 1.5deg,
    transparent 1.5deg 10deg,
    rgba(184, 120, 74, 0.13) 10deg 11deg,
    transparent 11deg 22deg
  );
  color: transparent;
  opacity: 0.78;
  mask: radial-gradient(circle, transparent 0 52%, #000 52.3% 52.8%, transparent 53.1% 100%);
  animation: worksHaloTurn 42s linear infinite;
}

.page-works .page-intro-grid {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(300px, 0.88fr) minmax(420px, 1.12fr);
  gap: clamp(24px, 4vw, 56px);
  align-items: center;
  width: min(1240px, calc(100vw - 56px));
  height: 100%;
  min-height: 0;
}

.works-hero-copy {
  position: relative;
  z-index: 3;
  display: grid;
  justify-items: start;
  align-content: center;
}

.works-hero-kicker {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--accent-deep);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.18em;
}

.works-hero-kicker::before {
  content: "";
  width: 28px;
  height: 1px;
  background: currentColor;
}

.page-works .page-intro h1 {
  position: relative;
  max-width: none;
  margin-top: 14px;
  color: #3f3a34;
  font-size: clamp(5.4rem, 8.2vw, 7.2rem);
  font-weight: 620;
  line-height: 0.78;
  letter-spacing: -0.055em;
  text-shadow: 0 14px 36px rgba(57, 49, 40, 0.08);
}

.page-works .page-intro h1::after {
  content: "";
  position: absolute;
  right: -0.16em;
  top: 0.03em;
  width: 0.13em;
  aspect-ratio: 1;
  border-radius: 50%;
  background: #b8784a;
  box-shadow: 0 0 0 8px rgba(184, 120, 74, 0.1);
}

.page-works .works-hero-lead {
  max-width: 22ch;
  margin-top: 20px;
  color: var(--text-soft);
  font-size: clamp(1rem, 1.4vw, 1.18rem);
  line-height: 1.75;
}

.works-hero-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 16px;
}

.works-hero-tags span {
  display: inline-flex;
  align-items: center;
  min-height: 30px;
  padding: 0 12px;
  border: 1px solid rgba(64, 60, 54, 0.12);
  border-radius: 999px;
  background: rgba(255, 253, 248, 0.54);
  color: var(--text-soft);
  font-size: 0.76rem;
  line-height: 1;
  backdrop-filter: blur(8px);
}

.works-hero-visual {
  position: relative;
  z-index: 1;
  min-height: 310px;
  perspective: 900px;
}

.works-hero-visual::before {
  content: "";
  position: absolute;
  inset: 2% 2% 0 4%;
  border-radius: 50%;
  background:
    radial-gradient(circle at 44% 42%, rgba(255, 255, 255, 0.98), rgba(255, 252, 246, 0.48) 42%, transparent 70%),
    repeating-radial-gradient(circle at 50% 50%, rgba(90, 140, 120, 0.15) 0 1px, transparent 1px 18px);
  filter: blur(0.2px);
  transform: rotate(-8deg);
}

.works-hero-orbit {
  position: absolute;
  border: 1.5px solid rgba(64, 60, 54, 0.3);
  border-radius: 50%;
  pointer-events: none;
}

.works-hero-orbit::after {
  content: "";
  position: absolute;
  top: 50%;
  left: -5px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #b8784a;
  box-shadow: 0 0 0 7px rgba(184, 120, 74, 0.09);
}

.works-hero-orbit--outer {
  inset: 2% 3% 1% 6%;
  transform: rotate(12deg);
  animation: worksOrbitOuter 18s ease-in-out infinite alternate;
}

.works-hero-orbit--inner {
  inset: 18% 18% 15% 16%;
  border-color: rgba(90, 140, 120, 0.48);
  transform: rotate(-18deg);
  animation: worksOrbitInner 14s ease-in-out infinite alternate;
}

.works-hero-tile {
  position: absolute;
  z-index: 2;
  width: clamp(92px, 8vw, 124px);
  aspect-ratio: 1;
  margin: 0;
  overflow: hidden;
  padding: 7px;
  border: 2px solid rgba(255, 255, 255, 0.94);
  border-radius: 24px;
  background: rgba(255, 253, 248, 0.94);
  box-shadow:
    0 20px 42px rgba(57, 49, 40, 0.24),
    0 0 0 1px rgba(64, 60, 54, 0.08),
    inset 0 1px 0 rgba(255, 255, 255, 0.92);
  backdrop-filter: blur(14px) saturate(108%);
}

.works-hero-tile img {
  width: 100%;
  height: 100%;
  border-radius: 18px;
  object-fit: cover;
}

.works-hero-tile--kacha {
  top: 1%;
  right: 18%;
  transform: rotate(7deg);
  animation: worksTileFloat 7.2s ease-in-out infinite;
}

.works-hero-tile--yokai {
  top: 34%;
  left: 6%;
  width: clamp(106px, 9.5vw, 146px);
  transform: rotate(-8deg);
  animation: worksTileFloat 8.4s ease-in-out -2.6s infinite;
}

.works-hero-tile--timeart {
  right: 2%;
  bottom: 0;
  width: clamp(98px, 8.8vw, 136px);
  transform: rotate(5deg);
  animation: worksTileFloat 7.8s ease-in-out -4.2s infinite;
}

.works-hero-spark {
  position: absolute;
  z-index: 3;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 8px rgba(90, 140, 120, 0.08);
  animation: worksSparkPulse 3.6s ease-in-out infinite;
}

.works-hero-spark--one { top: 16%; left: 23%; }
.works-hero-spark--two { top: 56%; right: 27%; animation-delay: -1.2s; }
.works-hero-spark--three { bottom: 12%; left: 38%; animation-delay: -2.4s; }

.page-works .page-intro + .section-block {
  padding-top: clamp(44px, 4vw, 62px);
}

@keyframes worksHaloTurn {
  to { transform: rotate(1turn); }
}

@keyframes worksOrbitOuter {
  from { transform: rotate(8deg) scale(0.985); }
  to { transform: rotate(18deg) scale(1.015); }
}

@keyframes worksOrbitInner {
  from { transform: rotate(-24deg) scale(1.02); }
  to { transform: rotate(-10deg) scale(0.98); }
}

@keyframes worksTileFloat {
  0%, 100% { translate: 0 0; }
  50% { translate: 0 -12px; }
}

@keyframes worksSparkPulse {
  0%, 100% { opacity: 0.42; transform: scale(0.75); }
  50% { opacity: 1; transform: scale(1); }
}

@media (max-width: 900px) {
  .page-works .page-intro {
    height: 370px;
    padding: 22px 0;
  }

  .page-works .page-intro-grid {
    grid-template-columns: minmax(220px, 0.9fr) minmax(250px, 1.1fr);
    width: min(100vw - 40px, 820px);
    gap: 16px;
  }

  .page-works .page-intro h1 {
    font-size: clamp(4.8rem, 13vw, 6.1rem);
  }

  .works-hero-visual {
    min-height: 290px;
  }
}

@media (max-width: 640px) {
  .page-works .page-intro {
    height: 360px;
    min-height: 0;
    padding: 24px 0;
  }

  .page-works .page-intro-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(180px, 0.72fr);
    width: min(100vw - 28px, 600px);
    height: 100%;
    min-height: 0;
    gap: 8px;
  }

  .works-hero-copy {
    align-self: center;
  }

  .page-works .page-intro h1 {
    margin-top: 12px;
    font-size: clamp(4rem, 15vw, 5rem);
  }

  .page-works .works-hero-lead {
    margin-top: 18px;
    font-size: 0.92rem;
  }

  .works-hero-tags {
    gap: 6px;
    margin-top: 14px;
  }

  .works-hero-visual {
    position: relative;
    z-index: 1;
    top: auto;
    right: auto;
    width: auto;
    min-height: 260px;
    opacity: 1;
    filter: none;
  }

  .works-hero-tile {
    box-shadow: 0 18px 36px rgba(57, 49, 40, 0.1);
  }

  .page-works .page-intro::after {
    right: -280px;
    bottom: -260px;
    width: 560px;
    opacity: 0.52;
  }
}

@media (max-width: 480px) {
  .page-works .page-intro-grid {
    grid-template-columns: 1fr;
  }

  .works-hero-copy {
    width: 76%;
  }

  .page-works .page-intro h1 {
    font-size: clamp(4.2rem, 22vw, 5.2rem);
  }

  .works-hero-visual {
    position: absolute;
    z-index: -1;
    top: 14px;
    right: -104px;
    width: 320px;
    min-height: 300px;
    opacity: 0.66;
  }

  .works-hero-tile--yokai {
    left: 12%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .page-works .page-intro::after,
  .works-hero-orbit,
  .works-hero-tile,
  .works-hero-spark {
    animation: none;
  }
}

@media (max-width: 1100px) {
  .about-strip-grid,
  .essay-grid,
  .page-intro-grid,
  .resume-layout {
    grid-template-columns: 1fr;
  }

  .project-grid,
  .about-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .tool-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .section-heading {
    grid-template-columns: 1fr;
    gap: 10px;
  }

  .section-note {
    justify-self: start;
  }
}

@media (max-width: 860px) {
  .shell {
    width: min(100vw - 32px, 1120px);
  }

  .shell--wide {
    width: min(100vw - 28px, 1240px);
  }

  .header-row {
    min-height: 76px;
  }

  .nav {
    gap: 14px 18px;
  }

  .section-heading {
    padding-bottom: 18px;
  }

  .project-grid,
  .about-grid,
  .tool-grid {
    grid-template-columns: 1fr;
  }

  .project-row,
  .footer-grid {
    grid-template-columns: 1fr;
  }

  .news-highlights {
    grid-template-columns: 1fr;
  }

  .news-gateway,
  .news-list-card {
    grid-template-columns: 1fr;
  }

  .news-list-card-side {
    justify-items: start;
  }

  .news-detail-head {
    align-items: start;
    flex-direction: column;
  }

  .project-row-link,
  .footer-links,
  .footer-records {
    justify-content: flex-start;
  }

  .project-row-art {
    width: 124px;
  }

  .hero-banner {
    min-height: 550px;
  }

  .resume-viewer,
  .resume-object,
  .resume-placeholder {
    min-height: 560px;
  }
}

@media (max-width: 640px) {
  .hero,
  .section-block,
  .page-intro {
    padding-top: 44px;
    scroll-margin-top: 126px;
  }

  .header-row {
    align-items: flex-start;
    flex-direction: column;
    justify-content: center;
    padding: 12px 0;
    gap: 10px;
  }

  .brand {
    min-height: 48px;
  }

  .brand-mark {
    width: 44px;
    height: 44px;
    border-radius: 12px;
  }

  .brand-copy strong {
    font-size: 0.96rem;
  }

  .nav {
    width: 100%;
    gap: 12px 16px;
    justify-content: flex-start;
  }

  .news-entry {
    gap: 16px;
    padding-top: 22px;
  }

  .news-entry-head {
    flex-direction: column;
    gap: 12px;
  }

  .news-table-title {
    min-height: 50px;
    padding: 12px;
  }

  .price-table {
    min-width: 680px;
  }

  .price-table th,
  .price-table td {
    padding: 13px 12px;
  }

  .news-highlight {
    min-height: 82px;
  }

  .hero-title,
  .page-intro h1 {
    font-size: clamp(2.2rem, 10vw, 3.1rem);
  }

  .page-intro h1 {
    max-width: 5.2ch;
  }

  .hero-lead,
  .page-intro p:last-child {
    max-width: none;
    font-size: 1rem;
  }

  .hero-actions {
    margin-top: 22px;
  }

  .hero-banner {
    min-height: 560px;
    border-radius: 24px;
  }

  .hero-banner-copy {
    width: calc(100% - 32px);
    align-content: start;
    padding: 28px 20px 24px;
  }

  .hero-banner-shade {
    background:
      linear-gradient(180deg, rgba(18, 17, 15, 0.4) 0%, rgba(18, 17, 15, 0.2) 38%, rgba(18, 17, 15, 0.09) 100%),
      linear-gradient(180deg, rgba(255, 255, 255, 0.02) 0%, rgba(20, 19, 16, 0.1) 100%);
  }

  .hero-motion::after {
    top: -18%;
    right: -58%;
    width: 132%;
  }

  .hero-motion-lines {
    inset: -4% -36%;
    width: 172%;
    height: 108%;
  }

  .hero-motion-orbit--outer {
    top: 17%;
    right: -22%;
    width: 82%;
    height: 58%;
  }

  .hero-motion-orbit--inner {
    top: 30%;
    right: 2%;
    width: 48%;
    height: 34%;
  }

  .hero-motion-seal {
    top: 34%;
    right: 18%;
    width: 44px;
  }

  .hero-motion-dot--one { top: 26%; left: 12%; }
  .hero-motion-dot--two { top: 58%; right: 8%; }
  .hero-motion-dot--three { bottom: 12%; left: 34%; }
  .hero-motion-dot--four { top: 18%; right: 22%; }
  .hero-motion-dot--five { top: 46%; right: 30%; }
  .hero-motion-dot--six { bottom: 16%; right: 6%; }

  .hero-identity {
    width: calc(100% - 24px);
    margin: 0 12px 12px;
    padding: 16px 16px 13px;
    border-radius: 20px;
  }

  .hero-identity-head {
    grid-template-columns: 60px minmax(0, 1fr);
  }

  .hero-identity-avatar {
    width: 60px;
    border-radius: 18px;
  }

  .hero-identity-avatar img {
    border-radius: 12px;
  }

  .hero-identity-meta strong {
    font-size: 1.48rem;
  }

  .hero-identity-copy {
    max-width: none;
    white-space: normal;
  }

  .project-art {
    aspect-ratio: 1 / 0.72;
  }

  .project-row {
    gap: 16px;
  }

  .tool-card {
    min-height: 0;
  }

  .project-row-art {
    width: min(120px, 38vw);
  }

  .section-heading h2 {
    font-size: clamp(1.5rem, 7vw, 2rem);
  }

  .section-note {
    max-width: none;
  }

  .resume-stage-main {
    padding: 18px 0 32px;
  }

  .resume-stage-head {
    align-items: start;
    flex-direction: column;
    gap: 14px;
  }

  .resume-stage-actions {
    justify-content: flex-start;
  }

  .resume-viewer,
  .resume-object,
  .resume-placeholder,
  .resume-stage-viewer,
  .resume-object--stage,
  .resume-placeholder--stage {
    min-height: 420px;
  }
}

/* ══ 创意背景 + 动效 v2 ══ */

/* 1. 鼠标火花拖尾 */
/* 2. Hero 标题渐变流光 */
.hero-title {
  color: #efbd87;
  animation: none;
}
@keyframes titleShimmer {
  0%, 100% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
}

.sparkle {
  position: fixed; z-index: 9998; pointer-events: none;
  width: 8px; height: 8px; border-radius: 50%;
  animation: sparkleFade 0.8s ease-out forwards;
}
@keyframes sparkleFade {
  0% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(0) translateY(-20px); }
}


/* 3. 卡片霓虹边框 */
.project-card.project-card--feature {
  position: relative;
  overflow: visible;
}
.project-card.project-card--feature::before {
  content: '';
  position: absolute; inset: -2px; z-index: -1;
  border-radius: inherit;
  background: linear-gradient(135deg, transparent 30%, var(--accent), #e8894b, transparent 70%);
  background-size: 400% 400%;
  opacity: 0;
  transition: opacity 0.3s;
  animation: borderGlow 3s linear infinite;
}
.project-card.project-card--feature:hover::before {
  opacity: 1;
}
@keyframes borderGlow {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* 4. 全局动态线条波浪 */
.wave-bg {
  position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden;
}
.wave-bg svg { position: absolute; width: 120%; height: 120%; top: -10%; left: -10%; }
.wave-line { fill: none; stroke-width: 1.5; opacity: 0.14; }
.wave-line.w1 { stroke: #5a8c78; animation: waveDrift 10s ease-in-out infinite; }
.wave-line.w2 { stroke: #E8894B; animation: waveDrift 12s ease-in-out infinite reverse; }
.wave-line.w3 { stroke: #c8a2c8; animation: waveDrift 14s ease-in-out infinite; }
.wave-line.w4 { stroke: #5a8c78; animation: waveDrift 16s ease-in-out infinite reverse; stroke-dasharray: 10 6; opacity: 0.06; }
.wave-line.w5 { stroke: #E8894B; animation: waveDrift 18s ease-in-out infinite; stroke-dasharray: 4 8; opacity: 0.06; }
@keyframes waveDrift {
  0%, 100% { transform: translate(0, 0); }
  25% { transform: translate(20px, -15px); }
  50% { transform: translate(-15px, 20px); }
  75% { transform: translate(-20px, -10px); }
}





/* 1. 浮动光晕 — 固定覆盖层 */
.orb-layer {
  position: fixed; inset: 0; z-index: 9999; pointer-events: none;
}
.orb-1, .orb-2, .orb-3 {
  position: absolute; border-radius: 50%; filter: blur(60px);
  animation: orbFloat 10s ease-in-out infinite alternate;
}
.orb-1 {
  width: 500px; height: 500px; top: 10%; left: 15%;
  background: radial-gradient(circle, rgba(232,137,75,0.25), transparent);
  animation-duration: 11s;
}
.orb-2 {
  width: 400px; height: 400px; top: 50%; left: 70%;
  background: radial-gradient(circle, rgba(90,140,120,0.22), transparent);
  animation-duration: 13s;
  animation-delay: -3s;
}
.orb-3 {
  width: 350px; height: 350px; top: 75%; left: 35%;
  background: radial-gradient(circle, rgba(180,160,210,0.18), transparent);
  animation-duration: 15s;
  animation-delay: -6s;
}


/* 2. 卡片 3D 倾斜 — hover 时微旋转 */
.project-card.project-card--feature {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.project-card.project-card--feature:hover {
  transform: rotateX(3deg) rotateY(-3deg) translateY(-6px) scale(1.02) !important;
  box-shadow: 0 30px 70px rgba(27,23,16,0.15) !important;
  border-color: var(--accent) !important;
}

/* 3. Hero 标题光晕 — 背景光斑随鼠标 */
.hero-banner {
  position: relative;
  overflow: hidden;
}
.hero-banner::after {
  content: none;
  position: absolute;
  top: -50%; left: -50%;
  width: 200%; height: 200%;
  background: radial-gradient(circle at center, rgba(232,137,75,0.08) 0%, transparent 50%);
  animation: heroGlow 8s ease-in-out infinite;
  pointer-events: none;
}

/* 4. 链接下划线滑动 */
a[href]:not(.button):not(.brand):not(.project-card):not(.tool-card):not(.nav a):not(.footer-links a):not(.footer-records a):not(.inline-links a):hover {
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-color: var(--accent);
}

/* 5. CTA 按钮脉冲 */
.button--solid {
  animation: none;
}

/* 6. 滚动视差 — 精选作品区微浮动 */
.featured-section {
  overflow: hidden;
}
.featured-section .section-heading {
  transition: transform 0.1s linear;
}

/* =============================================
   模块导航卡片 — 首页四模块入口
   取代原来的分类罗列，每个模块一张大卡片
   ============================================= */
.module-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
}

.module-card {
  position: relative;
  display: grid;
  gap: 11px;
  align-content: start;
  min-height: 308px;
  padding: 12px 14px 18px;
  overflow: hidden;
  border-radius: 14px;
  border: 1px solid rgba(29, 34, 31, 0.1);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(246, 244, 239, 0.98));
  box-shadow: 0 12px 24px rgba(52, 46, 38, 0.04);
  transition: transform 200ms ease, border-color 200ms ease, box-shadow 200ms ease;
}

.module-card::before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 3px;
  background: var(--mod-accent, var(--accent));
  border-radius: 0;
  transition: width 200ms ease, filter 200ms ease;
}

.module-card:hover,
.module-card:focus-visible {
  transform: translateY(-4px);
  border-color: rgba(29, 34, 31, 0.18);
  box-shadow: 0 18px 32px rgba(31, 28, 23, 0.075);
}

.module-card:hover::before {
  width: 6px;
  filter: saturate(1.16);
}

.module-card-art {
  position: relative;
  display: block;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: 10px;
  border: 1px solid rgba(29, 34, 31, 0.08);
  background: var(--mod-icon-bg, rgba(255, 255, 255, 0.84));
  isolation: isolate;
}

.module-card-art::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.26);
}

.module-card-art img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 420ms cubic-bezier(0.22, 1, 0.36, 1), filter 220ms ease;
}

.module-card:hover .module-card-art img,
.module-card:focus-visible .module-card-art img {
  transform: scale(1.035);
  filter: saturate(1.04) contrast(1.015);
}

.module-card-title {
  margin-top: 2px;
  font-size: 1.28rem;
  font-weight: 640;
  line-height: 1.2;
}

.module-card-count {
  font-size: 0.84rem;
  color: var(--text-muted);
  line-height: 1.4;
}

.module-card-desc {
  min-height: 3em;
  font-size: 0.88rem;
  line-height: 1.5;
  color: var(--text-soft);
}

.module-card-arrow {
  margin-top: auto;
  font-size: 0.84rem;
  font-weight: 640;
  color: var(--mod-accent, var(--accent));
}

/* 模块卡片配色 */
.module-card--works {
  --mod-accent: #5a8c78;
  --mod-icon-bg: #eef6f1;
}

.module-card--tools {
  --mod-accent: #b8784a;
  --mod-icon-bg: #faf3eb;
}

.module-card--news {
  --mod-accent: #5b6abf;
  --mod-icon-bg: #eef0fa;
}

.module-card--atlas {
  --mod-accent: #9b6a32;
  --mod-icon-bg: #f6efe4;
}

/* =============================================
   精选推荐区 — 跨模块策展，首页只放 4 个精选
   ============================================= */
.curated-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
}

.curated-card {
  position: relative;
  display: grid;
  gap: 14px;
  align-content: start;
  padding: 16px;
  overflow: hidden;
  border-radius: 14px;
  border: 1px solid var(--line);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(248, 244, 237, 0.98));
  box-shadow: 0 12px 24px rgba(52, 46, 38, 0.04);
  transition: transform 200ms ease, border-color 200ms ease, box-shadow 200ms ease;
}

.curated-card::before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 3px;
  background: var(--card-accent, var(--accent));
  opacity: 0.34;
  transition: width 200ms ease, opacity 200ms ease;
}

.curated-card:hover,
.curated-card:focus-visible {
  transform: translateY(-4px);
  border-color: rgba(25, 23, 18, 0.18);
  border-left-color: var(--card-accent, var(--accent));
  box-shadow: 0 22px 42px rgba(27, 23, 16, 0.1);
}

.curated-card:hover::before,
.curated-card:focus-visible::before {
  width: 6px;
  opacity: 1;
}

.curated-card-art {
  aspect-ratio: 1 / 0.75;
  min-height: 0;
  overflow: hidden;
  border-radius: 8px;
  background: var(--card-art-bg, var(--surface));
  border: 1px solid rgba(25, 23, 18, 0.07);
}

.curated-card-art img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 420ms cubic-bezier(0.22, 1, 0.36, 1), filter 220ms ease;
}

.curated-card:hover .curated-card-art img,
.curated-card:focus-visible .curated-card-art img {
  transform: scale(1.025);
  filter: saturate(1.035) contrast(1.015);
}

.curated-card:nth-child(1) { --card-accent: #c66936; }
.curated-card:nth-child(2) { --card-accent: #9f3d32; }
.curated-card:nth-child(3) { --card-accent: #9b6a32; }
.curated-card:nth-child(4) { --card-accent: #4b7664; }

.curated-card-source {
  display: inline-flex;
  align-items: center;
  min-height: 26px;
  padding: 0 10px;
  border-radius: 999px;
  border: 1px solid var(--line-strong);
  font-size: 0.72rem;
  font-weight: 640;
  line-height: 1;
  color: var(--text-muted);
  width: fit-content;
}

.curated-card h3 {
  font-size: 1.2rem;
  line-height: 1.25;
  font-weight: 620;
  letter-spacing: 0;
}

.curated-card p {
  font-size: 0.88rem;
  line-height: 1.7;
  color: var(--text-soft);
}

/* 移动端 — 模块卡片 2 列 → 1 列 */
@media (max-width: 1100px) {
  .module-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .curated-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .module-grid {
    grid-template-columns: 1fr;
  }
  .curated-grid {
    grid-template-columns: 1fr;
  }
  .module-card {
    min-height: 0;
    padding: 12px 12px 18px;
  }
}

/* =============================================
   子页模块配色 — 作品/工具/热点/图谱各不同色
   原则：全宽大标题 + 水印汉字 + 纸纹 + 呼吸动画
   ============================================= */
.page-works    { --mod-accent: #5a8c78; }
.page-tools    { --mod-accent: #b8784a; }
.page-atlas    { --mod-accent: #9b6a32; }
.page-news-index { --mod-accent: #5b6abf; }

/* 图谱 Hero：从粒子轨迹获得灵感，用纸面等高线呈现数据流动。 */
.page-sub.page-atlas .page-intro {
  min-height: 320px;
  padding-top: 42px;
  padding-bottom: 42px;
  background:
    radial-gradient(circle at 76% 44%, rgba(90, 140, 120, 0.1), transparent 28%),
    radial-gradient(circle at 58% 82%, rgba(184, 120, 74, 0.08), transparent 25%),
    #f6f5f2;
}

.page-sub.page-atlas .page-intro::after {
  content: none;
}

.page-atlas .page-intro .page-intro-grid {
  display: flex;
  align-items: center;
  min-height: 236px;
  position: static;
}

.page-atlas .page-intro .atlas-intro-copy {
  position: relative;
  z-index: 3;
  padding: 24px 38px 24px 0;
}

.page-atlas .page-intro .page-intro-grid h1 {
  font-size: clamp(4.6rem, 8vw, 6.8rem);
  line-height: 0.9;
  letter-spacing: 0.015em;
}

.page-atlas .page-intro-grid .atlas-intro-copy p:last-child {
  margin-top: 20px;
  max-width: 20ch;
  font-size: clamp(1rem, 1.15vw, 1.12rem);
  line-height: 1.8;
  color: var(--text-soft);
}

.atlas-hero-field {
  position: absolute;
  top: -42px;
  left: 50%;
  z-index: 1;
  width: 100vw;
  height: calc(100% + 84px);
  overflow: hidden;
  pointer-events: none;
  transform: translateX(-50%);
}

.atlas-hero-field::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    linear-gradient(90deg, rgba(246, 245, 242, 0.96) 0%, rgba(246, 245, 242, 0.82) 20%, rgba(246, 245, 242, 0.18) 46%, transparent 72%),
    linear-gradient(180deg, rgba(246, 245, 242, 0.2), transparent 22% 78%, rgba(246, 245, 242, 0.28));
}

.atlas-hero-field svg {
  width: 100%;
  height: 100%;
  overflow: visible;
}

.atlas-grid-plane {
  fill: rgba(255, 255, 255, 0.1);
}

.atlas-grid-line {
  fill: none;
  stroke: rgba(64, 60, 54, 0.075);
  stroke-width: 1;
}

.atlas-contour,
.atlas-route {
  fill: none;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
}

.atlas-contour {
  stroke: rgba(90, 140, 120, 0.25);
  stroke-width: 1.2;
  stroke-dasharray: 5 10;
  animation: atlasContourDrift 9s ease-in-out infinite alternate;
}

.atlas-contour--two {
  stroke: rgba(155, 106, 50, 0.2);
  animation-delay: -3s;
}

.atlas-contour--three {
  stroke: rgba(184, 120, 74, 0.18);
  animation-delay: -6s;
}

.atlas-route {
  stroke: url(#atlas-route-gradient);
  stroke-width: 2;
  stroke-dasharray: 18 12 3 16;
  opacity: 0.72;
  animation: atlasRouteFlow 13s linear infinite;
}

.atlas-node-halo {
  fill: rgba(90, 140, 120, 0.1);
  stroke: rgba(90, 140, 120, 0.18);
}

.atlas-node-core {
  fill: #5a8c78;
}

.atlas-node--two .atlas-node-core,
.atlas-node--four .atlas-node-core {
  fill: #b8784a;
}

.atlas-node {
  transform-box: fill-box;
  transform-origin: center;
  animation: atlasNodePulse 3.6s ease-in-out infinite;
}

.atlas-node--two { animation-delay: -0.9s; }
.atlas-node--three { animation-delay: -1.8s; }
.atlas-node--four { animation-delay: -2.7s; }

.atlas-radar-ring {
  fill: none;
  stroke: rgba(155, 106, 50, 0.22);
  stroke-width: 1;
  stroke-dasharray: 4 7;
}

.atlas-radar-ring--inner {
  stroke: rgba(90, 140, 120, 0.28);
}

.atlas-radar-sweep {
  fill: rgba(184, 120, 74, 0.09);
  stroke: rgba(184, 120, 74, 0.18);
  stroke-width: 1;
  transform-origin: 0 0;
  animation: atlasRadarSweep 8s linear infinite;
}

.atlas-radar-center {
  fill: #9b6a32;
}

@keyframes atlasRouteFlow {
  to { stroke-dashoffset: -196; }
}

@keyframes atlasContourDrift {
  from { translate: -5px -2px; }
  to { translate: 8px 4px; }
}

@keyframes atlasNodePulse {
  0%, 100% { opacity: 0.58; scale: 0.86; }
  50% { opacity: 1; scale: 1; }
}

@keyframes atlasRadarSweep {
  to { transform: rotate(1turn); }
}

/* 图谱封面：统一成纸艺数据插画，同时保留各专题的独立色温。 */
.page-atlas .section-heading h2 {
  margin-top: 0;
}

.page-atlas .atlas-card {
  --accent: #a45f45;
}

.page-atlas .atlas-card:nth-child(2) {
  --accent: #477b70;
}

.page-atlas .atlas-cover {
  position: relative;
  aspect-ratio: 3 / 2;
  border: 1px solid rgba(54, 45, 35, 0.08);
  background: #eee8dd;
  isolation: isolate;
}

.page-atlas .atlas-cover::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.28);
}

.page-atlas .atlas-cover img {
  transition: transform 420ms cubic-bezier(0.22, 1, 0.36, 1), filter 220ms ease;
}

.page-atlas .atlas-card:hover .atlas-cover img,
.page-atlas .atlas-card:focus-visible .atlas-cover img {
  transform: scale(1.025);
  filter: saturate(1.04) contrast(1.015);
}

/* 水印呼吸动画 */
@keyframes watermarkBreath {
  0%, 100% { opacity: 0.028; }
  50%      { opacity: 0.055; }
}

/* 标题流光 — 对角线光扫过文字 */
@keyframes textShimmer {
  0%   { background-position: 200% center; }
  100% { background-position: -200% center; }
}

/* 子页 page-intro：小 hero 区 */
.page-tools .page-intro,
.page-atlas .page-intro,
.page-news-index .page-intro {
  position: relative;
  overflow: hidden;
  background: #f6f5f4;
  padding-top: 80px;
  padding-bottom: 44px;
  border-bottom: 1px solid rgba(0,0,0,0.08);
}

/* 纸纹噪点 — SVG feTurbulence 叠加在暖白底上 */
.page-tools .page-intro::before,
.page-atlas .page-intro::before,
.page-news-index .page-intro::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  opacity: 0.028;
  pointer-events: none;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* 拆掉默认的左右两栏 grid — 标题全宽独占，抬到纸纹之上 */
.page-tools .page-intro-grid,
.page-atlas .page-intro-grid,
.page-news-index .page-intro-grid {
  display: block;
  position: relative;
  z-index: 1;
}

/* 水印汉字 — 巨大，略加深，呼吸动画 */
.page-tools .page-intro::after {
  content: "工";
  position: absolute;
  right: -4%;
  bottom: -22%;
  z-index: 0;
  font-size: 22rem;
  font-weight: 700;
  line-height: 1;
  color: rgba(0,0,0,0.04);
  pointer-events: none;
  user-select: none;
  animation: watermarkBreath 8s ease-in-out infinite;
}
.page-atlas .page-intro::after {
  content: "谱";
  position: absolute;
  right: -4%;
  bottom: -22%;
  z-index: 0;
  font-size: 22rem;
  font-weight: 700;
  line-height: 1;
  color: rgba(0,0,0,0.04);
  pointer-events: none;
  user-select: none;
  animation: watermarkBreath 8s ease-in-out infinite;
}
.page-news-index .page-intro::after {
  content: "闻";
  position: absolute;
  right: -4%;
  bottom: -22%;
  z-index: 0;
  font-size: 22rem;
  font-weight: 700;
  line-height: 1;
  color: rgba(0,0,0,0.04);
  pointer-events: none;
  user-select: none;
  animation: watermarkBreath 8s ease-in-out infinite;
}

/* h1 — 全宽，巨大，紧字距，流光扫过 */
.page-tools .page-intro h1,
.page-atlas .page-intro h1,
.page-news-index .page-intro h1 {
  color: rgba(0,0,0,0.9);
  font-size: clamp(4rem, 9vw, 7rem);
  line-height: 0.92;
  letter-spacing: -0.035em;
  font-weight: 640;
  background: linear-gradient(110deg,
    rgba(0,0,0,0.9) 25%,
    rgba(0,0,0,0.45) 42%,
    rgba(0,0,0,0.9) 58%
  );
  background-size: 200% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: textShimmer 6s ease-in-out infinite;
}

/* 描述文字 — 跟在标题下方，左对齐，克制 */
.page-tools .page-intro-grid p:last-child,
.page-atlas .page-intro-grid p:last-child,
.page-news-index .page-intro-grid p:last-child {
  margin-top: 18px;
  font-size: 1.05rem;
  color: rgba(0,0,0,0.5);
  max-width: 36ch;
}

/* ══ Codex 四技能映射：字体、暖灰、呼吸感与克制微交互 ══ */
h1,
h2,
h3,
.brand-copy strong,
.hero-identity-meta strong,
.module-card-title {
  font-family: var(--font-display);
}

.hero-title {
  letter-spacing: 0.045em;
  text-wrap: balance;
  -webkit-text-fill-color: currentColor;
}

.hero-lead {
  max-width: 24ch;
  font-size: clamp(1.03rem, 1.2vw, 1.18rem);
  font-weight: 520;
  letter-spacing: 0.04em;
}

.section-heading {
  padding-bottom: 28px;
}

.section-heading h2 {
  color: var(--text);
  letter-spacing: 0.015em;
}

.page-tools .page-intro h1,
.page-atlas .page-intro h1,
.page-news-index .page-intro h1 {
  color: var(--text);
  background: none;
  -webkit-text-fill-color: currentColor;
  animation: none;
}

.page-tools .page-intro-grid p:last-child,
.page-atlas .page-intro-grid p:last-child,
.page-news-index .page-intro-grid p:last-child {
  color: var(--text-muted);
}

.module-card:focus-visible,
.curated-card:focus-visible {
  outline: 2px solid color-mix(in srgb, var(--accent) 72%, white);
  outline-offset: 3px;
}

@media (max-width: 640px) {
  .hero,
  .section-block,
  .page-intro {
    padding-top: 54px;
  }

  .hero-actions .button {
    flex: 1 1 136px;
    padding-inline: 16px;
  }

  .hero-identity {
    justify-self: center;
    margin: 0 0 12px;
  }

  .section-heading {
    padding-bottom: 22px;
  }

  .page-sub.page-atlas .page-intro {
    min-height: 0;
    padding-top: 36px;
    padding-bottom: 32px;
  }

  .page-atlas .page-intro .page-intro-grid {
    min-height: 230px;
  }

  .page-atlas .page-intro .atlas-intro-copy {
    padding: 18px 24px 18px 0;
  }

  .page-atlas .page-intro .page-intro-grid h1 {
    font-size: clamp(3.7rem, 18vw, 5rem);
  }

  .page-atlas .page-intro-grid .atlas-intro-copy p:last-child {
    margin-top: 14px;
    max-width: none;
  }

  .atlas-hero-field {
    top: -36px;
    height: calc(100% + 68px);
  }

  .atlas-hero-field::after {
    background:
      linear-gradient(90deg, rgba(246, 245, 242, 0.94) 0%, rgba(246, 245, 242, 0.76) 48%, rgba(246, 245, 242, 0.16) 86%),
      linear-gradient(180deg, rgba(246, 245, 242, 0.18), transparent 24% 76%, rgba(246, 245, 242, 0.3));
  }
}

@media (prefers-reduced-motion: reduce) {
  .hero-title,
  .wave-line,
  .hero-motion::after,
  .hero-motion-glow,
  .hero-motion-lines,
  .hero-motion-line,
  .hero-motion-orbit,
  .hero-motion-seal,
  .hero-motion-dot,
  .page-works .page-intro::after,
  .page-tools .page-intro::after,
  .page-atlas .page-intro::after,
  .page-news-index .page-intro::after {
    animation: none;
  }

  .atlas-contour,
  .atlas-route,
  .atlas-node,
  .atlas-radar-sweep {
    animation: none;
  }

  .module-card-art img,
  .curated-card-art img {
    transition: none;
  }

  .page-atlas .atlas-cover img {
    transition: none;
  }
}
