/* Hallmark · shape: Product Directory · genre: modern-minimal · theme: neutral-institutional
 * paper: oklch(98% 0.002 250) · accent: oklch(38% 0.07 255) · display: Manrope · body: Inter · hero: masthead · nav: edge-aligned · footer: rule · signature: a searchable catalogue where the real product screenshots carry the page
 * axes: neutral-paper/Manrope/ink · posture: restrained · surface: absolute · contrast: pass · fold: pass · v2.1.0 */
/* Hallmark · pre-emit critique: P5 H5 E5 S5 R5 V4 · weakest: V, a catalogue has to earn attention with order and real screenshots rather than decoration */
@import url("./tokens.css");
@import url("./base.css");

.skip {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: var(--z-toast);
  padding: var(--space-sm) var(--space-md);
  background: var(--color-accent);
  color: var(--color-accent-ink);
  border-radius: var(--radius-card);
}
.skip:focus { left: var(--space-md); top: var(--space-md); }
.wordmark, .pcard__more, .foot__nav a, .skip { text-decoration: none; }

/* 顶栏：字标与链接分居两端，只有一条细线 */
.site-head {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky-nav);
  background: var(--color-paper-2);
  border-bottom: var(--rule-hair) solid var(--color-rule);
}
.head-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-lg);
  min-height: 64px;
}
.wordmark { display: inline-flex; align-items: baseline; gap: var(--space-sm); flex-shrink: 0; }
.wordmark__en {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-lg);
  letter-spacing: 0.01em;
  color: var(--color-ink);
}
.wordmark__cn { font-size: var(--text-sm); color: var(--color-muted); }
.nav { display: flex; align-items: center; gap: var(--space-lg); flex-wrap: wrap; }
.nav a, .foot__nav a {
  font-size: var(--text-sm);
  color: var(--color-ink-2);
  text-decoration: none;
  white-space: nowrap;
  border-bottom: var(--rule-hair) solid transparent;
  transition: color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out);
}
.nav a:hover, .foot__nav a:hover { color: var(--color-accent); border-bottom-color: var(--color-accent); }
.nav a.is-active { color: var(--color-accent); border-bottom-color: var(--color-accent); }
/* 语言切换：桌面只留地球图标，窄屏补一个短标签（手机没有 hover）。
   不做色块、胶囊或下划线，避免和导航当前项的激活态混淆。 */
.lang-toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2xs);
  min-height: 28px;
  padding: 0 var(--space-2xs);
  border: 0;
  background: transparent;
  color: var(--color-ink-2);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  white-space: nowrap;
  cursor: pointer;
  transition: color var(--dur-short) var(--ease-out);
}
.lang-toggle:hover { color: var(--color-accent); }
.lang-toggle__icon { display: block; flex-shrink: 0; }
.lang-toggle__label { display: none; font-size: var(--text-xs); }

/* 品牌门面：一行标题、一段说明、右侧四行事实 */
.masthead { padding-top: var(--space-xl); padding-bottom: var(--space-lg); background: var(--color-paper-2); border-bottom: var(--rule-hair) solid var(--color-rule); }
.masthead__grid {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 4fr);
  align-items: start;
  gap: var(--space-3xl);
}
.masthead h1 { max-width: 22ch; font-size: var(--text-brand); line-height: 1.2; }
.masthead .lead { margin-top: var(--space-md); color: var(--color-ink-2); }
.masthead__facts { margin: 0; }
.masthead__facts > div {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-md);
  padding: var(--space-xs) 0;
  border-top: var(--rule-hair) solid var(--color-rule);
}
.masthead__facts dt { font-size: var(--text-sm); color: var(--color-muted); white-space: nowrap; }
.masthead__facts dd { margin: 0; font-size: var(--text-md); font-weight: 600; color: var(--color-ink); text-align: right; overflow-wrap: anywhere; }
.masthead__facts a { color: var(--color-accent); }

/* 目录区：标题、结果数、工具条、场景入口、卡片网格 */
.directory { padding-block: var(--space-xl); background: var(--color-paper); }
.section-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-md);
  margin-bottom: var(--space-md);
}
.section-head h2, .compare h2, .about h2 { font-size: var(--text-section-2); line-height: 1.25; }
.section-head__meta { font-size: var(--text-sm); color: var(--color-muted); white-space: nowrap; }

.toolbar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-md) var(--space-lg);
  padding-block: var(--space-md);
  border-top: var(--rule-hair) solid var(--color-rule);
  border-bottom: var(--rule-hair) solid var(--color-rule);
}
.search {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  width: min(100%, 380px);
  padding-inline: var(--space-md);
  background: var(--color-paper-2);
  border: var(--rule-hair) solid var(--color-rule-strong);
  border-radius: var(--radius-card);
  transition: border-color var(--dur-short) var(--ease-out), box-shadow var(--dur-short) var(--ease-out);
}
/* 焦点态只画在整个搜索框上：input 自己不再叠一层描边，避免框中框 */
.search:focus-within {
  border-color: var(--color-accent);
  box-shadow: 0 0 0 var(--rule-hair) var(--color-accent);
}
.search__icon { color: var(--color-muted); flex-shrink: 0; }
.search input {
  flex: 1;
  min-width: 0;
  height: 44px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--color-ink);
  font-size: var(--text-md);
  -webkit-appearance: none;
  appearance: none;
}
.search input:focus-visible { outline: none; }
.search input::placeholder { color: var(--color-muted); }
.filters { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-xs); }
.chip {
  padding: var(--space-xs) var(--space-md);
  font-size: var(--text-sm);
  color: var(--color-ink-2);
  background: var(--color-paper-2);
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-chip);
  cursor: pointer;
  white-space: nowrap;
  transition: border-color var(--dur-short) var(--ease-out), color var(--dur-short) var(--ease-out), background-color var(--dur-short) var(--ease-out);
}
.chip:hover { border-color: var(--color-accent); color: var(--color-accent); }
.chip[aria-pressed="true"] { background: var(--color-accent-soft); border-color: var(--color-accent); color: var(--color-accent); font-weight: 600; }
.reset, .linkbtn {
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--color-accent);
  font-size: var(--text-sm);
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 0.2em;
}
.reset { margin-left: auto; white-space: nowrap; }
.reset:hover, .linkbtn:hover { color: var(--color-accent-hover); }

/* 场景入口做成文字行，和下面的卡片网格明确区分 */
.scenarios { margin-top: var(--space-lg); }
.scenarios__title {
  max-width: none;
  margin: 0 0 var(--space-sm);
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0;
  color: var(--color-muted);
}
.scenarios__list { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0 var(--space-lg); }
.scenario {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-2xs);
  min-width: 0;
  padding: var(--space-sm) 0;
  text-align: left;
  background: transparent;
  border: 0;
  border-top: var(--rule-hair) solid var(--color-rule);
  cursor: pointer;
}
.scenario__label { font-size: var(--text-md); font-weight: 600; color: var(--color-ink); transition: color var(--dur-short) var(--ease-out); }
/* 场景名不拆行；按钮内含标题、说明、动作三段文字，nowrap 只给标题，不影响说明折行 */
.scenario .scenario__label { white-space: nowrap; }
.scenario__desc { font-size: var(--text-sm); color: var(--color-muted); line-height: 1.5; }
.scenario__go { margin-top: var(--space-2xs); font-size: var(--text-sm); color: var(--color-accent); }
.scenario:hover .scenario__label { color: var(--color-accent); }
.scenario[aria-pressed="true"] { border-top-color: var(--color-accent); }
.scenario[aria-pressed="true"] .scenario__label { color: var(--color-accent); }

/* 统一卡片：一套网格、一套边框、一套间距，产品多了自动换行 */
.catalog {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-lg);
  margin-top: var(--space-lg);
  align-items: stretch;
}
.pcard {
  display: flex;
  flex-direction: column;
  min-width: 0;
  padding: var(--space-lg);
  background: var(--color-paper-2);
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-card);
  transition: border-color var(--dur-short) var(--ease-out);
}
.pcard:hover { border-color: var(--color-rule-strong); }
.pcard__head { display: flex; align-items: flex-start; gap: var(--space-sm); min-width: 0; }
.pcard__mark { width: 32px; height: 32px; object-fit: contain; flex-shrink: 0; }
.pcard__ident { min-width: 0; }
.pcard__name { max-width: none; font-size: var(--text-title); line-height: 1.25; }
.pcard__subtitle { margin-top: var(--space-3xs); font-size: var(--text-sm); color: var(--color-muted); }
.pcard__problem {
  margin-top: var(--space-md);
  min-height: 5.1em;
  font-size: var(--text-md);
  line-height: 1.7;
  color: var(--color-ink-2);
}
.pcard__visual {
  margin-top: var(--space-md);
  min-width: 0;
  background: var(--color-paper-2);
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-card);
  overflow: hidden;
}
.pcard__visual img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; object-position: top left; }
.pcard__meta { margin: var(--space-md) 0 0; }
.pcard__meta > div {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-sm);
  padding: var(--space-xs) 0;
  border-top: var(--rule-hair) solid var(--color-rule);
}
.pcard__meta dt { font-size: var(--text-sm); color: var(--color-muted); white-space: nowrap; }
.pcard__meta dd { margin: 0; font-size: var(--text-sm); font-weight: 600; color: var(--color-ink-2); text-align: right; }
/* 三张卡的主按钮统一通栏：宽度、左右边缘、高度都对齐 */
.pcard__actions { display: flex; margin-top: auto; padding-top: var(--space-lg); }
.pcard__actions > .btn, .pcard__actions > .download { width: 100%; }
.pcard__more {
  display: inline-block;
  align-self: flex-start;
  margin-top: var(--space-sm);
  font-size: var(--text-sm);
  color: var(--color-accent);
}
.pcard__more:hover { color: var(--color-accent-hover); text-decoration: underline; }
/* 说明行固定两行高：不因文案长短把主按钮顶得高低不一 */
.pcard__note { margin-top: var(--space-sm); min-height: 3.2em; font-size: var(--text-sm); color: var(--color-muted); line-height: 1.6; }
.catalog__empty { margin-top: var(--space-xl); padding: var(--space-xl); background: var(--color-paper-2); border: var(--rule-hair) solid var(--color-rule); border-radius: var(--radius-card); color: var(--color-ink-2); }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: var(--space-sm) var(--space-lg);
  font-size: var(--text-md);
  font-weight: 600;
  white-space: nowrap;
  text-decoration: none;
  border-radius: var(--radius-card);
  border: var(--rule-hair) solid transparent;
  cursor: pointer;
  transition: background-color var(--dur-short) var(--ease-out),
              color var(--dur-short) var(--ease-out),
              border-color var(--dur-short) var(--ease-out);
}
.btn-primary { background: var(--color-accent); color: var(--color-accent-ink); border-color: var(--color-accent); }
.btn-primary:hover { background: var(--color-accent-hover); border-color: var(--color-accent-hover); }
.btn:active { transform: translateY(1px); }

/* 控件禁用态：目录里没有不可用产品，规则先备着，扩展时不必再补 */
.chip:disabled, .scenario:disabled, .reset:disabled, .linkbtn:disabled, .btn:disabled, .lang-toggle:disabled, .search input:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}
.chip:disabled, .scenario:disabled, .btn:disabled {
  color: var(--color-muted);
  background: var(--color-paper-3);
  border-color: var(--color-rule);
}
.reset:disabled, .linkbtn:disabled, .lang-toggle:disabled { color: var(--color-muted); }

/* 桌面端产品：主按钮展开平台选择，无脚本时 details 也能开。
   面板向上浮出、不占布局高度，展开时三张卡的按钮仍然对齐。 */
.download { position: relative; display: block; width: 100%; }
.download__summary { list-style: none; width: 100%; }
.download__summary::-webkit-details-marker { display: none; }
.download__panel {
  position: absolute;
  bottom: calc(100% + var(--space-sm));
  left: 0;
  right: 0;
  z-index: var(--z-dropdown);
  padding: var(--space-md);
  background: var(--color-paper-2);
  border: var(--rule-hair) solid var(--color-rule-strong);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-pop);
}
.download__note { font-size: var(--text-sm); color: var(--color-ink-2); line-height: 1.65; }
.download__list { margin-top: var(--space-sm); }
.download__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  padding: var(--space-sm) 0;
  border-top: var(--rule-hair) solid var(--color-rule);
  flex-wrap: wrap;
}
.download__os { font-size: var(--text-sm); font-weight: 600; color: var(--color-ink); }
.download__link { font-size: var(--text-sm); color: var(--color-accent); font-weight: 600; }
.download__link:hover { color: var(--color-accent-hover); }

/* 对照表：与卡片区不同的一套版式，产品增加时列数跟着增加 */
.compare { padding-block: var(--space-3xl); background: var(--color-paper-2); border-block: var(--rule-hair) solid var(--color-rule); }
.compare__lead { margin-bottom: var(--space-xl); color: var(--color-ink-2); }
.compare__table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.compare__table th, .compare__table td {
  padding: var(--space-md) var(--space-lg);
  text-align: left;
  vertical-align: top;
  border-bottom: var(--rule-hair) solid var(--color-rule);
  overflow-wrap: break-word;
}
.compare__table thead th {
  font-family: var(--font-display);
  font-size: var(--text-title);
  font-weight: 700;
  color: var(--color-ink);
  border-bottom-color: var(--color-rule-strong);
}
.compare__table tbody th {
  width: 18%;
  font-weight: 600;
  font-size: var(--text-md);
  color: var(--color-muted);
}
.compare__table td { color: var(--color-ink-2); line-height: 1.6; }

/* 关于与页脚：中性色收尾。只留两列——左侧标题与一句话简介，右侧独立的扫码联系入口。 */
.about { padding-block: var(--space-xl); background: var(--color-paper); }
.about__grid {
  display: grid;
  grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
  align-items: start;
  gap: var(--space-3xl);
}
.about__body { min-width: 0; }
.about__body h2 { margin-bottom: var(--space-md); }
/* 简介与门面说明同字号，左栏才有足够分量和右侧二维码平衡 */
.about__body > p { max-width: 46ch; font-size: var(--text-lead); color: var(--color-ink-2); line-height: 1.8; }
/* 成立日期别在窄屏被拆成两行 */
.nowrap { white-space: nowrap; }
.about__contact {
  margin: 0;
  padding-left: var(--space-3xl);
  border-left: var(--rule-hair) solid var(--color-rule);
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-sm);
}
.about__contact img {
  width: 160px;
  height: 160px;
  object-fit: contain;
  padding: var(--space-xs);
  background: var(--color-paper-2);
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-card);
}
.about__contact figcaption { display: flex; flex-direction: column; gap: var(--space-3xs); }
.about__contact-title { font-size: var(--text-md); font-weight: 600; color: var(--color-ink); }
.about__contact-note { font-size: var(--text-sm); color: var(--color-muted); }

.foot { padding-block: var(--space-2xl); background: var(--color-paper-2); border-top: var(--rule-hair) solid var(--color-rule); }
/* 一行三段：左字标、中导航、右版权备案。每个边缘都有锚点，不再多甩一条短行 */
.foot__inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  column-gap: var(--space-lg);
}
.foot__wordmark {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-xl);
  color: var(--color-ink);
}
.foot__wordmark .foot__wordmark-cn { font-size: var(--text-sm); font-weight: 400; color: var(--color-muted); margin-left: var(--space-xs); }
.foot__nav { display: flex; gap: var(--space-lg); flex-wrap: wrap; justify-content: center; }
.foot__nav a { color: var(--color-ink-2); }
.foot__nav a:hover { color: var(--color-accent); border-bottom-color: var(--color-accent); }
.foot__legal { justify-self: end; text-align: right; font-size: var(--text-sm); color: var(--color-muted); }
.foot__icp { margin-left: var(--space-sm); }

.fallback { padding-block: var(--space-xl); color: var(--color-ink-2); }
.fallback h2 { margin-top: var(--space-lg); font-size: var(--text-title); }
.fallback p { margin-top: var(--space-sm); }
.fallback a { color: var(--color-accent); }

@media (max-width: 72rem) {
  .catalog { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 60rem) {
  .head-row { flex-wrap: wrap; padding-block: var(--space-sm); }
  .masthead__grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-xl); }
  .about__grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-xl); }
  .about__contact {
    padding-left: 0;
    padding-top: var(--space-xl);
    border-left: 0;
    border-top: var(--rule-hair) solid var(--color-rule);
  }
  .search { width: 100%; }
  .compare__table tbody th { width: 24%; }
  .foot__inner { grid-template-columns: minmax(0, 1fr); row-gap: var(--space-md); }
  .foot__nav { justify-content: flex-start; }
  .foot__legal { justify-self: start; text-align: left; }
}

@media (max-width: 40rem) {
  .masthead, .directory, .compare, .about { padding-block: var(--space-xl); }
  .nav { gap: var(--space-md); }
  .nav a, .lang-toggle { font-size: var(--text-xs); }
  .lang-toggle__label { display: inline; }
  .masthead__facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--space-md); }
  .masthead__facts > div { display: block; }
  .masthead__facts > div:last-child { grid-column: 1 / -1; }
  .masthead__facts dd { margin-top: var(--space-3xs); text-align: left; }
  .catalog { grid-template-columns: minmax(0, 1fr); margin-top: var(--space-lg); }
  .scenarios__list { grid-template-columns: minmax(0, 1fr); }
  .pcard__problem { min-height: 0; }
  .compare__table thead { display: none; }
  .compare__table tr { display: block; padding-block: var(--space-sm); border-bottom: var(--rule-hair) solid var(--color-rule); }
  .compare__table tbody th { display: block; width: auto; padding: 0; border: 0; font-size: var(--text-sm); }
  .compare__table td { display: block; padding: var(--space-xs) 0; border: 0; }
  .compare__table td::before {
    content: attr(data-product);
    display: block;
    font-size: var(--text-xs);
    color: var(--color-muted);
  }
}

@media (prefers-reduced-motion: reduce) {
  .btn:active { transform: none; }
}
