/* ===== 字体（如全局已引入可去重） ===== */
@font-face {
  font-family: "Inter";
  src: url("../font/inter/Inter_24pt-Regular.ttf") format("truetype");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter";
  src: url("../font/inter/Inter_24pt-SemiBold.ttf") format("truetype");
  font-weight: 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Inter";
  src: url("../font/inter/Inter_28pt-Black.ttf") format("truetype");
  font-weight: 900; font-style: normal; font-display: swap;
}

:root{
  --fs-body: clamp(14px, 1.1vw, 20px);
  --fs-h1: clamp(40px, 5vw, 80px);
  --fs-h2: clamp(24px, 2.4vw, 40px);
  --fs-lead: clamp(16px, 1.4vw, 22px);
  --fs-sub: clamp(13px, 1.1vw, 18px);

  --pad-x: clamp(20px, 4vw, 96px);

  --c-lg:#dadada; --c-md:#c6c6c6; --c-sm:#ececec; --c-xs:#bfbfbf;

  /* 卡片统一间距 */
  --card-gap: clamp(28px, 4vw, 56px);
}

*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;}
body{
  font-family:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif;
  color:#111;background:#fff;line-height:1.6;
}

/* 容器与段落 */
.wrapper{max-width:clamp(1040px,74vw,1560px);margin:0 auto;padding:0 var(--pad-x);}
.section-full{min-height:100vh;display:flex;align-items:center;}

/* ===== Hero ===== */
.hero{display:grid;grid-template-columns:1fr 1fr;align-items:center;justify-items:center;gap:clamp(16px,3vw,40px);}
.hero-text{width:min(100%,46rem);text-align:left;}
.hero-title{font-size:var(--fs-h1);font-weight:900;letter-spacing:-.01em;margin:0 0 .5rem;}
.hero-lead{font-size:var(--fs-lead);margin:0 0 8px;line-height:1.35;}
.hero-sub{font-size:var(--fs-sub);color:#333;max-width:42rem;}

.hero-ornaments{position:relative;width:clamp(260px,28vw,420px);height:clamp(260px,28vw,420px);}
.orb{position:absolute;border-radius:50%;filter:saturate(.95);}
.orb-lg{width:65%;height:65%;left:18%;top:28%;background:var(--c-lg);animation:float 10s ease-in-out infinite alternate;box-shadow:0 12px 28px rgba(0,0,0,.12);}
.orb-md{width:34%;height:34%;right:6%;top:4%;background:var(--c-md);animation:float 7s ease-in-out infinite alternate-reverse;}
.orb-sm{width:22%;height:22%;left:0;top:6%;background:var(--c-sm);animation:float 6s ease-in-out infinite alternate;}
.orb-xs{width:16%;height:16%;right:12%;bottom:6%;background:var(--c-xs);animation:float 5s ease-in-out infinite alternate-reverse;}
.orb-ring{width:52%;height:52%;left:26%;top:12%;border:1.5px solid #bdbdbd;border-radius:50%;background:transparent;animation:pulse 4.5s ease-in-out infinite;}
@keyframes float{from{transform:translateY(0) translateX(0);}to{transform:translateY(-8%) translateX(4%);}}
@keyframes pulse{0%,100%{transform:scale(1);opacity:.7;}50%{transform:scale(1.06);opacity:1;}}
@media (prefers-reduced-motion:reduce){.orb,.orb-ring{animation:none;}}

/* ===== Projects：统一 section 与间距 ===== */
.projects-section{
  padding-block: clamp(24px, 5vw, 64px);
}
.projects-section .project-card{
  margin-block: var(--card-gap);
}
.projects-section .project-card:first-of-type{ margin-top: 0; }
.projects-section .project-card:last-of-type{  margin-bottom: 0; }

/* 桌面端加大间距 */
@media (min-width:769px){
  :root{ --card-gap: clamp(64px, 6vw, 120px); }
}

/* ===== 项目卡片：16:9 外壳（桌面） ===== */
.project-card{
  width:100%;
  aspect-ratio:16/9;           /* 桌面端固定 16:9 */
  position:relative;
  border-radius:22px;
  overflow:hidden;
  background:#bfbfbf;
}

/* 用 <a> 包裹整张卡片 */
.project-card > .card-link{
  display:block;
  height:100%;
  color:inherit;
  text-decoration:none;
  border-radius:inherit;
  cursor:pointer;
}
.project-card > .card-link:focus-visible{
  outline:3px solid rgba(0,120,255,.6);
  outline-offset:4px;
  border-radius:inherit;
}

/* 内部网格铺满卡片，不破坏外层比例 */
.card-inner{
  position:absolute; inset:0;
  display:grid;
  grid-template-columns:1fr 1fr;
}
.card-left,.card-right{display:flex;flex-direction:column;justify-content:center;}
.card-left{padding:clamp(24px,4.4vw,60px);gap:10px;}
.pill{display:inline-block;font-size:12px;background:#ffdfe0;border-radius:999px;padding:4px 10px;width:fit-content;}
.card-title{font-size:clamp(22px,2.2vw,34px);font-weight:800;line-height:1.25;}
.card-desc{font-size:var(--fs-sub);color:#202020;max-width:48ch;}
.tags{display:flex;flex-wrap:wrap;gap:8px 12px;}
.tags span{display:inline-block;background:#fff;border-radius:999px;padding:4px 12px;font-size:12px;}

.card-right{
  position:relative;
  overflow:hidden;
  background:#666 center/cover no-repeat;
  min-width:0;
  filter:saturate(.95);
}

/* ===== 媒体风格 1：视频填充（手机屏） ===== */
.card-right.is-video{ background:none; }
.card-right.is-video .card-video{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center;
  display:block;
}

/* ===== 媒体风格 2：宽屏视频（白底 + 80% 宽，不裁切，播完停止） ===== */
.card-right.is-video-wide{
  background:#fff;
  display:flex; align-items:center; justify-content:center;
}
.card-right.is-video-wide .card-video{
  position:static; width:80%; height:auto; max-height:100%;
  object-fit:contain; object-position:center;
  display:block;
}

/* ===== 媒体风格 3：图片完整显示（FIXA 专用，深灰底） ===== */
.card-right.is-image-contain{
  background:#3A3A3A;
  display:flex; align-items:center; justify-content:center;
}
.card-right.is-image-contain .card-media{
  width:100%; height:100%;
  object-fit:contain; object-position:center;
  display:block;
}

/* ===== 媒体风格 4：图片填充（cover） ===== */
.card-right.is-image{ position:relative; overflow:hidden; background:none; }
.card-right.is-image .card-media{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center;
  display:block;
}

/* ===== 移动端：上下栈叠、媒体不裁切 ===== */
@media (max-width:768px){
  .section-full{min-height:unset;}
  .hero{grid-template-columns:1fr;}
  .hero-ornaments{order:2;width:clamp(220px,60vw,360px);height:auto;aspect-ratio:1/1;}

  .project-card{ aspect-ratio:auto; position:relative; border-radius:18px; }
  .card-link{ height:auto; }
  .card-inner{ position:static; display:flex; flex-direction:column; }

  .card-right{
    order:-1;
    width:100%;
    height:auto;              /* 让高度随内容 */
    background-position:center bottom;
    background-size:cover;
  }

  /* 移动端：所有视频与图片都按原比例展示（contain） */
  .card-right.is-video .card-video,
  .card-right.is-video-wide .card-video{
    position:static;
    width:100%; height:auto;
    object-fit:contain; object-position:center;
  }

  .card-right.is-image .card-media{
    position:static;
    width:100%; height:auto;
    object-fit:contain; object-position:center;
  }

  .card-right.is-image-contain{
    height:auto;
  }
  .card-right.is-image-contain .card-media{
    width:100%; height:auto;
    object-fit:contain;
  }
}


/* ===== Hero 照片与线条 ===== */
.hero-media{
  position: relative;
  width: clamp(260px, 34vw, 520px);
  aspect-ratio: 5/6; /* 近似 600x720 */
  translate: 0 6px; /* 轻微下沉更稳 */
  will-change: transform;
}

.hero-blob{
  position: relative;
  width: 100%;
  height: 100%;
  filter: drop-shadow(0 16px 32px rgba(0,0,0,.18))
          drop-shadow(0 3px 8px rgba(0,0,0,.08));
  transition: transform .4s ease;
  transform-style: preserve-3d;
}

/* 轮廓描边动画 */
.blob-stroke{
  stroke: color-mix(in oklab, #0b60ff 60%, #00c9a7 40%);
  stroke-width: 2.4;
  stroke-linejoin: round;
  stroke-dasharray: 14 10;
  stroke-dashoffset: 0;
  opacity: .85;
  animation: dashMove 6s linear infinite;
}
@keyframes dashMove{
  to { stroke-dashoffset: -48; }
}

/* 互动线条画布：盖在最底层 */
.hero-lines{
  position: absolute;
  inset: -6% -10% -10% -6%;
  width: 120%;
  height: 120%;
  pointer-events: none;   /* 只做视觉，不挡交互 */
  opacity: .7;
  filter: blur(.1px) contrast(1.02);
}

/* 悬停轻微抬头 */
@media (hover:hover){
  .hero-media:hover .hero-blob{ transform: translateZ(0) scale(1.01); }
}

/* 深色偏好适配（若你有主题切换，也可自行覆盖） */
@media (prefers-color-scheme: dark){
  .blob-stroke{ stroke: color-mix(in oklab, #9ac2ff 60%, #7fe9cc 40%); opacity: .95; }
}

.para{margin: 10px 20px;}

/* ====== 整屏 Logo 网格（不滚动） ====== */
.logo-gallery{
  /* 整个区块就是一屏 */
  height: 100vh;
  display: grid;
  grid-template-rows: auto 1fr; /* 头部 + 网格 */
  padding: clamp(16px, 3vw, 32px);
  background: #fff;
}

.logo-gallery__head{
  display: grid;
  place-items: center;
  padding-block: clamp(8px, 1.2vw, 16px);
}

.logo-gallery__title{
  margin: 0;
  font-weight: 800;
  font-size: clamp(22px, 4vw, 48px);
  letter-spacing: .2px;
  color: #0b2a5a; /* 参考你截图的蓝色调；想要全黑可改成 #111 */
}

/* 网格：用行列数量保证刚好一屏显示完 */
.logo-grid{
  /* 桌面：4 列 × 4 行 */
  --cols: 4;
  --rows: 4;

  height: 100%;
  display: grid;
  grid-template-columns: repeat(var(--cols), 1fr);
  grid-template-rows: repeat(var(--rows), 1fr);
  gap: clamp(16px, 2vw, 28px);
  align-items: center;
  justify-items: center;
}

/* 平板 */
@media (max-width: 1024px){
  .logo-grid{ --cols: 3; --rows: 5; }
}

/* 手机 */
@media (max-width: 640px){
  .logo-grid{ --cols: 2; --rows: 7; }
}

/* 单元格：无边框、仅放图，图自动等比缩放到格子内 */
.logo-cell{
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
}

.logo-cell img{
  max-width: 90%;
  max-height: 80%;
  width: auto;
  height: auto;
  display: block;
  object-fit: contain;
}

/* 空位（占格但不显示） */
.logo-cell.is-empty{ pointer-events: none; }

/* 区块内边距 */
.other-soft{
  padding-block: clamp(28px, 6vw, 64px);
  background: #fff;
}

/* 标题与说明受 wrapper 限制 */
.soft-head{ margin-bottom: clamp(12px, 2.2vw, 20px); }
.soft-title{
  margin: 0 0 .4em;
  font-weight: 800;
  font-size: clamp(22px, 3.8vw, 40px);

}
.soft-desc{
  margin: 0;
  max-width: 72ch;            /* 段落宽度更舒适；可去掉 */
  color: #222;
  line-height: 1.7;
}

/* ============= 全宽 Logo ============= */
/* 让容器“突破 wrapper”，真正铺满屏幕 */
.soft-logos{
  width: 100vw;
  margin-left: calc(50% - 50vw);   /* full-bleed 技巧 */
  margin-right: calc(50% - 50vw);
}

/* 自适应网格：不限制整体宽度 */
.soft-logos__grid{
  --gap: clamp(18px, 2vw, 28px);
  --row-h: clamp(90px, 14vw, 180px);     /* 每个格子的目标高度（会随屏自适应） */

  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--gap);
  padding: clamp(16px, 3vw, 40px) clamp(20px, 4vw, 64px);
  align-items: center;
  justify-items: center;
}

/* 单个 Logo：等比缩放，不被拉伸 */
.soft-logos__grid img{
  display: block;
  height: var(--row-h);      /* 高度跟随行高 */
  width: auto;               /* 宽度自适应 */
  max-width: min(100%, 520px);
  object-fit: contain;
  filter: saturate(1);       /* 如需更淡可调 <=1 */
  transition: transform .18s ease, filter .18s ease;
}
.soft-logos__grid img:hover{
  transform: translateY(-2px);
}

/* 小屏行高略小，避免过高 */
@media (max-width: 640px){
  .soft-logos__grid{ --row-h: clamp(80px, 20vw, 140px); }
}

/* —— 强制每行 4 列，整页铺满 —— */
.soft-logos{
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
}

.soft-logos__grid{
  /* 行列固定：4 列，整页铺满；按需调整左右内边距 */
  grid-template-columns: repeat(4, 1fr);
  padding-inline: clamp(12px, 2vw, 24px);
  --gap: clamp(16px, 2vw, 24px);
  --row-h: clamp(110px, 13vw, 170px); /* 行高决定 Logo 尺寸，可自行微调 */
}

/* Logo 等比缩放，填满单元但不拉伸 */
.soft-logos__grid img{
  height: var(--row-h);
  width: auto;
  max-width: 90%;        /* 让单元格里留一点呼吸空间 */
  object-fit: contain;
}

/* 小屏断点（可选）：手机 2 列、平板 3 列 */
@media (max-width: 1024px){
  .soft-logos__grid{ grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 640px){
  .soft-logos__grid{ grid-template-columns: repeat(2, 1fr); }
}

/* ===== 统一 Logo 视觉尺寸 ===== */
:root{
  /* 单元格目标高度：调这一条就能整体变大/变小 */
  --logo-cell-h: clamp(120px, 16vw, 200px);
  --logo-gap: clamp(16px, 2vw, 28px);
  --logo-pad: clamp(10px, 1.6vw, 18px);
}

/* 容器仍然全宽铺满（之前你就有这段，可保留） */
.soft-logos{
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
}

/* 每行 4 列，占满整页宽度 */
.soft-logos__grid{
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--logo-gap);
  padding-inline: clamp(12px, 2vw, 24px);
}

/* 单元格：固定统一的可视高度，居中摆放 */
.soft-logo{
  height: var(--logo-cell-h);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--logo-pad);
}

/* 图片：等比缩放到单元格，可留一点呼吸 */
.soft-logo img{
  max-height: calc(var(--logo-cell-h) - 2*var(--logo-pad));
  max-width: min(85%, 360px);
  width: auto;
  height: auto;
  object-fit: contain;
}

/* 响应式：平板 3 列、手机 2 列 */
@media (max-width: 1024px){
  .soft-logos__grid{ grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 640px){
  .soft-logos__grid{ grid-template-columns: repeat(2, 1fr); }
}

/* 三段水平排列的介绍文案 */
.soft-intro-grid{
  display: grid;
  grid-template-columns: repeat(3, minmax(240px, 1fr));
  gap: clamp(14px, 2vw, 24px);
  margin: clamp(12px, 2vw, 20px) auto clamp(18px, 3vw, 28px);
}

.soft-intro-item{
  margin: 0;
  color: #222;
  line-height: 1.8;
  font-size: clamp(14px, 1.1vw, 18px);
}

/* 响应式：平板 2 列、手机 1 列 */
@media (max-width: 1024px){
  .soft-intro-grid{ grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px){
  .soft-intro-grid{ grid-template-columns: 1fr; }
}

/* ===== 其他软件经验：一屏内自适应，统一 logo 视觉高度 ===== */
/* 把这三个选择器换成你实际的容器与项的类名 */
.other-logos {                                 /* 1) 外层容器（放所有 logo 的 grid） */
  --rows: 3;                                   /* 桌面：3 行 */
  --gap: clamp(16px, 2vw, 28px);
  --pad: clamp(20px, 4vw, 64px);

  display: grid;
  grid-template-columns: repeat(4, 1fr);       /* 桌面：每行 4 个 */
  gap: var(--gap);
  padding: var(--pad);
  align-items: center;
}

.other-logos .logo {                            /* 2) 单个格子（包着 <img> 的元素） */
  display: flex;
  align-items: center;
  justify-content: center;
  /* 避免文字/边框撑开 */
  min-height: 0;
  min-width: 0;
}

.other-logos .logo img {                        /* 3) 统一约束 logo 尺寸 */
  width: auto;                                  /* 保持比例 */
  max-width: 90%;
  height: auto;
  /* 用“视口高度 - 内边距 - 行间距”除以行数，得到单格可用高度，再乘系数做留白 */
  max-height: calc(
    (100vh - var(--pad)*2 - var(--gap)*(var(--rows) - 1)) / var(--rows) * 0.72
  );
  object-fit: contain;                          /* 宽图/高图都能塞进来 */
}

/* —— 响应式：到平板、手机时自动增加行数，logo 进一步变小，仍不溢出一屏 —— */
@media (max-width: 1200px) {
  .other-logos { grid-template-columns: repeat(3, 1fr); --rows: 4; }
}
@media (max-width: 900px) {
  .other-logos { grid-template-columns: repeat(2, 1fr); --rows: 6; }
}
@media (max-width: 560px) {
  .other-logos { grid-template-columns: repeat(2, 1fr); --rows: 8; }
}
