@font-face {
  font-family: "JiRan Display Web";
  /* 刻意不留 local()：本機裝了激燃體的話會擋住子集的缺字，
     測起來正常、訪客看到的卻是備援字型。改文字後跑
     tools/build-font-subset.py 重新打包。 */
  src: url("fonts/burnfont-site.woff2") format("woff2");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

@font-face {
  font-family: "Noto Sans TC Web";
  src: url("fonts/noto-sans-tc-site.woff2?v=20260909-motion-editorial-1") format("woff2");
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
}

@font-face {
  font-family: "Noto Serif TC Web";
  src: url("fonts/noto-serif-tc-headings.woff2?v=20260905-final") format("woff2");
  font-style: normal;
  font-weight: 600;
  font-display: swap;
}

:root {
  /* 品牌色負責識別；純白與純黑負責長文閱讀，避免整頁被低彩度顏色罩灰。 */
  --black-sea: #021526;
  --sapphire-blue: #03346e;
  --coastal-blue: #6eacda;
  --olive-ivory: #e2e2b6;
  --brand: var(--sapphire-blue);
  --ink: #000000;
  --paper: #ffffff;
  --accent: var(--coastal-blue);
  --surface: var(--olive-ivory);
  --night: var(--black-sea);
  --line: var(--ink);
  --signature: "JiRan Display Web", "PingFang TC", "Microsoft JhengHei", sans-serif;
  --display: "Noto Serif TC Web", "Songti TC", "Noto Serif TC", serif;
  --body: "Noto Sans TC Web", "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif;
  --utility: var(--body);
  --content: 70rem;
  --reading: 60ch;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;
  --space-9: 6rem;
  --radius: 0.25rem;
  --focus: 0.2rem solid var(--brand);

  /* --w 是「凍結的 1vw」：斷點內是常數，所以同一個斷點內拖視窗完全不動。
     數值 = 該斷點的代表視窗寬度 / 100。 */
  --w-base: 15px;

  /* --w 由 --w-base 導出，首頁再乘上密度倍率（見 .home-page） */
  --w: var(--w-base);

  /* 頁首是透明浮層，這個值同時決定它的高度和底下要讓出的空間 */
  --header-h: 5.25rem;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

* {
  margin: 0;
}

html {
  scroll-behavior: smooth;
  scrollbar-gutter: stable;
}

body {
  min-width: 20rem;
  color: var(--ink);
  background: var(--paper);
  font-family: var(--body);
  font-size: clamp(1.0625rem, 1rem + 0.18 * var(--w), 1.125rem);
  line-height: 1.72;
  font-synthesis: none;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

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

button,
a {
  -webkit-tap-highlight-color: transparent;
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

p {
  text-wrap: pretty;
}

h1,
h2,
h3 {
  text-wrap: balance;
}

.display-lines {
  display: grid;
  gap: 0.06em;
  max-width: 100%;
  min-width: 0;
  overflow-wrap: normal;
  text-wrap: nowrap;
}

.display-lines > span {
  display: block;
  white-space: nowrap;
}

a {
  color: inherit;
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.22em;
}

a:hover {
  text-decoration-thickness: 0.14em;
}

:focus-visible {
  outline: var(--focus);
  outline-offset: 0.25rem;
}

.main-about :focus-visible,
.main-contact :focus-visible,
.proposal-contact :focus-visible {
  outline-color: var(--paper);
}

::selection {
  color: var(--paper);
  background: var(--brand);
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: fixed;
  z-index: 1400;
  inset: var(--space-4) auto auto var(--space-4);
  padding: 0.65rem 0.9rem;
  color: var(--paper);
  background: var(--ink);
  transform: translateY(-220%);
  transition: transform 150ms ease-out;
}

.skip-link:focus {
  transform: translateY(0);
}

/* 頁首沒有自己的底色（讓底下的海洋藍透出來），
   但仍然佔掉 --header-h 的高度，內容不會滑到它下面。 */
.page-header {
  position: absolute;
  z-index: 50;
  top: 0;
  right: 0;
  left: 0;
  display: grid;
  min-height: var(--header-h);
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  gap: var(--space-6);
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  padding-block: 1.25rem;
  color: var(--paper);
}

.page-brand {
  display: inline-flex;
  flex-direction: row;
  gap: 0.5em;
  width: fit-content;
  font-family: var(--utility);
  font-size: 1.12rem;
  font-weight: 900;
  line-height: 1.2;
  letter-spacing: 0.04em;
  text-decoration: none;
  text-transform: uppercase;
}

.page-header :focus-visible {
  outline-color: var(--paper);
}

.page-brand small {
  margin-top: var(--space-1);
  font-size: 0.8rem;
  font-weight: 500;
  letter-spacing: 0.08em;
}

.nav-toggle {
  display: none;
}

.page-nav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: clamp(1rem, 2.4 * var(--w), 2rem);
  font-family: var(--utility);
  font-size: 0.95rem;
  font-weight: 900;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.page-nav > a,
.page-nav__top {
  min-height: 2.75rem;
  display: inline-grid;
  place-items: center;
  padding-inline: 0.7rem;
  border-radius: 0.3rem;
  text-decoration: none;
  transition: background-color 160ms ease;
}

.page-nav > a:hover,
.page-nav > a:focus-visible {
  background: var(--brand);
}

.page-nav a:hover,
.page-nav a[aria-current="page"] {
  border-bottom-color: currentColor;
}

.primary-link,
.secondary-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 3rem;
  padding: 0.6rem 1rem;
  border: 0.1rem solid currentColor;
  border-radius: var(--radius);
  font-weight: 750;
  line-height: 1.2;
  text-decoration: none;
  transition:
    color 150ms ease-out,
    background-color 150ms ease-out;
}

.primary-link {
  color: var(--paper);
  background: var(--ink);
  border-color: var(--ink);
}

.primary-link:hover {
  color: var(--ink);
  background: var(--paper);
}

.secondary-link:hover {
  color: var(--paper);
  background: var(--ink);
  border-color: var(--ink);
}

/* Home: one hero thesis, one signature interaction. */
.home-page {
  background: var(--paper);
}

/* 案例頁／方案頁：品牌深色舞台裡的置中欄 */
.page-stage__inner {
  position: relative;
  z-index: 3;
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  padding-block: clamp(4.5rem, 8 * var(--w), 7.5rem);
}

/* 舞台裡的內容要浮在畫布、暗幕、顆粒三層之上 */
.page-stage > .proposal-hero {
  position: relative;
  z-index: 3;
}

/* 深色舞台使用淺色文字與分隔線。 */
.page-stage .work-heading,
.page-stage .proposal-hero__copy {
  color: var(--paper);
}

.page-stage .work-heading {
  border-bottom-color: var(--accent);
}

.page-stage .work-heading h1,
.page-stage .proposal-hero h1 {
  color: var(--paper);
}

.page-stage .work-heading > span,
.page-stage .proposal-kicker {
  color: var(--paper);
}

.page-stage .proposal-hero__aside {
  color: var(--paper);
  background: var(--black-sea);
  border-color: var(--accent);
}

/* 深色面板上的輔助文字使用 Coastal Blue，保留清楚的品牌對比。 */
.page-stage .proposal-hero__aside small {
  color: var(--accent);
}

.page-stage .primary-link,
.page-stage .secondary-link {
  color: var(--paper);
  border-color: var(--accent);
}

/* ── 首屏品牌流動背景 ──
   .home-stage 是 <main> 的直接子層，本來就滿版，所以不需要 100vw，
   也就不會被捲軸寬度撐出橫向溢出。 */
.home-stage,
.page-stage {
  position: relative;
  padding-top: var(--header-h);
  isolation: isolate;
  overflow: hidden;
  background: var(--black-sea); /* WebGL 還沒起來 / 不支援時的底色 */
}

.home-stage__canvas,
.page-stage__canvas {
  position: absolute;
  inset: 0;
  z-index: 0;
  display: block;
  width: 100%;
  height: 100%;
}

/* 流動色階上疊一層同色系暗幕，維持文字的對比。 */
.home-stage__scrim,
.page-stage__scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: radial-gradient(ellipse at 50% 45%, transparent, color-mix(in srgb, var(--black-sea) 42%, transparent) 100%);
  pointer-events: none;
}

/* 只留幾乎不可見的電影顆粒，避免舊版的灰霧感。 */
.home-stage__grain,
.page-stage__grain {
  position: absolute;
  inset: 0;
  z-index: 2;
  opacity: 0.025;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode: soft-light;
  pointer-events: none;
}

.home-hero {
  position: relative;
  z-index: 3;
  display: grid;
  align-content: center;
  justify-items: center;
  gap: var(--space-8);
  width: min(62rem, calc(100% - 3rem));
  min-height: min(36rem, calc(100svh - 5rem));
  margin-inline: auto;
  padding-block: var(--space-9);
  text-align: center;
}

.home-identity {
  display: grid;
  /* 招牌字字腔大，用 --space-5 會讓副標貼著主標。 */
  gap: clamp(1.75rem, 3 * var(--w), 3rem);
  width: 100%;
}

.home-name {
  color: var(--olive-ivory);
  font-family: var(--signature);
  font-size: clamp(4rem, 11 * var(--w), 8.75rem);
  font-style: normal;
  font-weight: 400;
  line-height: 0.86;
  letter-spacing: -0.025em;
}

.home-name__flip {
  position: relative;
  display: grid;
  width: 100%;
  min-height: 1em;
  padding: 0;
  color: inherit;
  background: transparent;
  border: 0;
  border-radius: var(--radius);
  cursor: pointer;
  perspective: 75rem;
}

.home-name__face {
  grid-area: 1 / 1;
  display: grid;
  place-items: center;
  gap: 0.04em;
  backface-visibility: hidden;
  white-space: nowrap;
  transform-style: preserve-3d;
  transition: transform 520ms cubic-bezier(0.2, 0.75, 0.25, 1);
}

.home-name__front {
  transform: rotateX(0deg);
}

.home-name__back {
  color: var(--accent);
  transform: rotateX(180deg);
}

.home-name__flip:hover .home-name__front,
.home-name__flip:focus-visible .home-name__front,
.home-name__flip.is-flipped .home-name__front {
  transform: rotateX(-180deg);
}

.home-name__flip:hover .home-name__back,
.home-name__flip:focus-visible .home-name__back,
.home-name__flip.is-flipped .home-name__back {
  transform: rotateX(0deg);
}

.home-lead {
  color: var(--paper);
  font-family: var(--utility);
  font-size: 0.95rem;
  font-weight: 800;
  letter-spacing: 0.14em;
}

.home-tagline {
  color: var(--paper);
  max-width: 22ch;
  margin-inline: auto;
  font-family: var(--body);
  font-size: clamp(1.6rem, 1.2rem + 2 * var(--w), 2.6rem);
  font-weight: 800;
  letter-spacing: -0.01em;
  line-height: 1.34;
}

.home-actions {
  display: grid;
  justify-items: center;
  gap: var(--space-5);
}

.home-tagline__accent {
  color: var(--accent);
}

.home-work-link {
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  min-height: 3rem;
  color: var(--paper);
  font-family: var(--body);
  font-size: clamp(1.15rem, 1.05rem + 0.6 * var(--w), 1.45rem);
  font-weight: 800;
  letter-spacing: 0.005em;
  line-height: 1.25;
  text-decoration-thickness: 0.09em;
  transition: gap 150ms ease-out;
}

.home-work-link:hover {
  gap: 1.1rem;
}

.home-actions__links {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-4);
}

.main-about,
.main-manifesto,
.main-systems,
.main-ads,
.main-contact {
  padding: clamp(3.25rem, 9 * var(--w), 7.5rem) max(1.5rem, calc((100% - var(--content)) / 2));
}

.main-about {
  color: var(--paper);
  background: var(--brand);
}

.main-about__grid {
  display: grid;
  gap: clamp(1.5rem, 3 * var(--w), 2.5rem);
  max-width: 58rem;
  margin-inline: auto;
}

.main-about h2 {
  max-width: 100%;
  font-family: var(--display);
  font-size: clamp(2.6rem, 2.1rem + 2.6 * var(--w), 4rem);
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.1;
}

.main-about__copy {
  display: grid;
  gap: var(--space-6);
  max-width: var(--reading);
}

.main-about__copy strong {
  font-family: var(--body);
  font-size: clamp(1.45rem, 1.2rem + 1.3 * var(--w), 2.15rem);
  font-weight: 800;
  letter-spacing: -0.005em;
  line-height: 1.42;
}

.main-about__copy p {
  max-width: 56ch;
  font-size: clamp(1.1rem, 1rem + 0.3 * var(--w), 1.25rem);
  line-height: 1.78;
}

.main-about__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
}

.main-about .secondary-link {
  color: var(--paper);
}

.main-about .secondary-link:hover {
  color: var(--brand);
  background: var(--paper);
  border-color: var(--paper);
}

.main-metrics {
  width: 100%;
  padding-block: clamp(2.5rem, 6 * var(--w), 6rem);
  color: var(--paper);
  background: var(--ink);
}

.main-metrics__title {
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  margin-bottom: clamp(2.25rem, 4 * var(--w), 3.75rem);
  font-family: var(--body);
  font-size: clamp(1.7rem, 1.25rem + 2 * var(--w), 2.5rem);
  font-weight: 800;
  letter-spacing: -0.01em;
  line-height: 1.25;
  text-align: center;
}

.main-metrics__grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(2rem, 3.5 * var(--w), 3.5rem);
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
}

.main-metric {
  display: flex;
  min-width: 0;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
  text-align: center;
}

.main-metric small {
  display: block;
  /* .display-lines 的 text-wrap: nowrap 會繼承下來（那是給展示標題防亂斷行用的），
     導致長標籤在窄欄位撐破版面。標籤本來就該換行。 */
  text-wrap: wrap;
  white-space: normal;
  font-family: var(--body);
  font-size: clamp(1rem, 0.85rem + 0.9 * var(--w), 1.15rem);
  font-weight: 700;
  letter-spacing: 0.01em;
  line-height: 1.45;
}

/* small 與數值同屬 <strong> 的 grid，用 order 把數值排到上面（對照參考圖） */
.main-metric .metric-value {
  order: 1;
}

.main-metric small {
  order: 2;
}

.main-metric strong {
  gap: 0.3rem;
  font-family: var(--body);
  font-size: clamp(2.1rem, 1.7rem + 2 * var(--w), 3rem);
  font-weight: 800;
  font-variant-numeric: tabular-nums lining-nums;
  letter-spacing: -0.015em;
  line-height: 1.1;
}

.metric-value {
  display: inline-block;
  font-variant-numeric: tabular-nums lining-nums;
  transform-origin: left bottom;
}

.main-manifesto {
  background: var(--paper);
}

.main-heading {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(17rem, 0.65fr);
  align-items: end;
  gap: var(--space-7);
  max-width: var(--content);
  margin-inline: auto;
  margin-bottom: var(--space-8);
}

.main-heading h2 {
  max-width: 100%;
  font-family: var(--display);
  font-size: clamp(2.35rem, 1.9rem + 2.3 * var(--w), 3.65rem);
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.1;
}

.main-heading p {
  max-width: 44ch;
  font-size: 1.08rem;
  line-height: 1.75;
}

.main-methods {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  max-width: var(--content);
  margin-inline: auto;
  border-block: 0.08rem solid var(--ink);
}

.main-method {
  display: grid;
  align-content: start;
  gap: var(--space-4);
  padding: var(--space-6);
  border-right: 0.08rem solid var(--ink);
}

.main-method:last-child {
  border-right: 0;
}

.main-method > span {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.82rem;
  font-weight: 800;
}

.main-method h3 {
  font-family: var(--utility);
  font-size: clamp(1.5rem, 2 * var(--w), 2rem);
  line-height: 1.15;
}

.main-method p {
  max-width: 34ch;
  line-height: 1.72;
}

.main-systems {
  color: var(--ink);
  background: var(--paper);
  border-top: 0;
}

.systems-story__layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-7);
  max-width: 60rem;
  margin-inline: auto;
}

.systems-story__intro {
  position: static;
  display: grid;
  gap: var(--space-5);
  max-width: 60ch;
}

.systems-story__eyebrow {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.82rem;
  font-weight: 800;
  letter-spacing: 0.12em;
}

.systems-story__intro h2 {
  color: var(--brand);
  font-family: var(--display);
  font-size: clamp(2.35rem, 1.9rem + 2.3 * var(--w), 3.65rem);
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.1;
}

.systems-story__intro > p {
  max-width: 34ch;
  font-size: clamp(1.05rem, 1rem + 0.25 * var(--w), 1.18rem);
  line-height: 1.75;
}

.systems-progress {
  display: grid;
  grid-template-columns: 0.35rem minmax(0, 1fr);
  gap: var(--space-5);
  align-items: stretch;
  margin-top: var(--space-4);
}

.systems-progress__track {
  position: relative;
  display: block;
  overflow: hidden;
  min-height: 10.5rem;
  background: var(--accent);
}

.systems-progress__track i {
  position: absolute;
  inset: 0;
  display: block;
  background: var(--brand);
  transform: scaleY(0);
  transform-origin: 50% 0;
}

.systems-progress ol {
  display: grid;
  align-content: space-between;
  gap: var(--space-4);
  list-style: none;
  padding: 0;
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.systems-progress li {
  color: var(--brand);
  transition: color 180ms ease-out;
}

.systems-progress li.is-active {
  color: var(--ink);
}

.main-systems .main-system-list {
  width: 100%;
  margin: 0;
  border-top: 0;
  border-color: var(--ink);
}

.main-systems .main-system {
  grid-template-columns: minmax(0, 1fr);
  align-items: center;
  min-height: auto;
  padding-block: clamp(2rem, 5 * var(--w), 3.5rem);
  border-color: var(--ink);
  transform-origin: 50% 50%;
}

.main-system__copy {
  display: grid;
  gap: clamp(1.25rem, 3 * var(--w), 2rem);
  min-width: 0;
}

.main-systems .main-system h3 {
  color: var(--ink);
  font-size: clamp(2rem, 1.45rem + 2.25 * var(--w), 3.35rem);
  line-height: 1.08;
}

.main-systems .main-system__detail {
  grid-column: 1;
  gap: var(--space-4);
}

.main-systems .main-system__detail strong {
  color: var(--brand);
}

.main-systems .main-system__detail p {
  font-size: clamp(1.05rem, 1rem + 0.25 * var(--w), 1.2rem);
}

.main-ads {
  color: var(--paper);
  background: var(--ink);
  border-top: 0.45rem solid var(--accent);
}

.main-ads .main-heading h2,
.main-ads .main-heading p {
  color: var(--paper);
}

.main-system-list {
  max-width: var(--content);
  margin-inline: auto;
  border-top: 0.08rem solid var(--paper);
}

.main-system {
  display: grid;
  grid-template-columns: minmax(14rem, 0.65fr) minmax(20rem, 1fr);
  gap: var(--space-6);
  padding-block: var(--space-7);
  border-bottom: 0.08rem solid var(--paper);
}

.main-system h3 {
  font-family: var(--body);
  font-size: clamp(1.35rem, 1.2rem + 0.9 * var(--w), 1.85rem);
  font-weight: 800;
  letter-spacing: -0.005em;
  line-height: 1.36;
}

.main-system__detail {
  display: grid;
  gap: var(--space-3);
  align-content: start;
  max-width: 55ch;
}

.main-system__detail strong {
  color: var(--paper);
  font-family: var(--utility);
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.main-system__detail p {
  line-height: 1.75;
}

/* 白底服務頁使用黑色結構線與藍色重點，不沿用深色區塊的白線設定。 */
.work-main > .main-system-list {
  border-color: var(--ink);
}

.work-main > .main-system-list > .main-system {
  border-color: var(--ink);
}

.work-main > .main-system-list .main-system__detail strong {
  color: var(--brand);
  font-size: 0.9rem;
  letter-spacing: 0.02em;
  text-transform: none;
}

.main-qr {
  position: relative;
  height: 155svh;
  color: var(--ink);
  background: var(--paper);
}

.main-qr :focus-visible {
  outline-color: var(--brand);
}

.main-qr__sticky {
  position: sticky;
  top: 0;
  display: grid;
  align-items: center;
  min-height: 100svh;
  overflow: hidden;
  padding: clamp(2.75rem, 8 * var(--w), 6.5rem) max(1.5rem, calc((100% - var(--content)) / 2));
}

.main-qr__layout {
  display: grid;
  grid-template-columns: minmax(17rem, 0.78fr) minmax(20rem, 1.22fr);
  align-items: center;
  gap: clamp(3rem, 7 * var(--w), 7rem);
  width: 100%;
  max-width: var(--content);
  margin-inline: auto;
}

.main-qr__copy {
  display: grid;
  gap: var(--space-5);
  align-content: center;
}

.main-qr__kicker {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.82rem;
  font-weight: 800;
  letter-spacing: 0.12em;
}

.main-qr h2 {
  font-family: var(--display);
  font-size: clamp(3rem, 2.15rem + 3.7 * var(--w), 5.2rem);
  font-weight: 600;
  letter-spacing: -0.03em;
  line-height: 1.06;
}

.main-qr__visual {
  display: grid;
  justify-items: center;
  gap: var(--space-5);
  min-width: 0;
}

.qr-stage {
  position: relative;
  display: block;
  width: min(100%, 34rem);
  aspect-ratio: 1;
  color: var(--ink);
  isolation: isolate;
  text-decoration: none;
}

/* 樹腳下的落地陰影，攤平成 QR 的過程中一起淡出 */
.qr-stage::after {
  content: "";
  position: absolute;
  z-index: 0;
  bottom: 7%;
  left: 50%;
  width: 46%;
  height: 6%;
  background: radial-gradient(ellipse at center, color-mix(in srgb, var(--ink) 22%, transparent), transparent 70%);
  opacity: calc(1 - var(--qr-progress, 0));
  transform: translateX(-50%);
  pointer-events: none;
}

.qr-stage canvas,
.qr-stage img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.qr-stage canvas {
  z-index: 1;
  opacity: 0;
}

.qr-stage img {
  z-index: 2;
  padding: clamp(1rem, 4 * var(--w), 2rem);
  background: var(--paper);
}

.has-qr-motion .qr-stage canvas {
  opacity: 1;
}

.has-qr-motion .qr-stage img {
  opacity: 0;
}

.main-qr__progress {
  position: absolute;
  inset: auto max(1.5rem, calc((100% - var(--content)) / 2)) 1.25rem;
  height: 0.22rem;
  overflow: hidden;
  background: var(--accent);
}

.main-qr__progress i {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--brand);
  transform: scaleX(0);
  transform-origin: 0 50%;
}

.main-contact {
  color: var(--paper);
  background: var(--brand);
}

.main-contact__inner {
  display: grid;
  gap: var(--space-8);
  max-width: 52rem;
  margin-inline: auto;
}

.main-contact__kicker {
  display: block;
  margin-bottom: var(--space-4);
  font-family: var(--utility);
  font-size: 0.82rem;
  font-weight: 800;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}

.main-contact h2 {
  max-width: 100%;
  font-family: var(--display);
  font-size: clamp(2.35rem, 1.9rem + 2.3 * var(--w), 3.65rem);
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.1;
}

.inquiry-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-6);
  padding-block: var(--space-7);
  border-block: 0.08rem solid var(--paper);
}

.inquiry-form label {
  display: grid;
  gap: var(--space-2);
  min-width: 0;
  font-weight: 750;
}

.inquiry-form input,
.inquiry-form textarea {
  width: 100%;
  color: var(--ink);
  background: var(--paper);
  border: 0.14rem solid var(--ink);
  border-radius: var(--radius);
  padding: 0.85rem 0.9rem;
  line-height: 1.5;
}

.inquiry-form input {
  min-height: 3rem;
}

.inquiry-form textarea {
  resize: vertical;
}

.inquiry-form input:focus-visible,
.inquiry-form textarea:focus-visible {
  outline-color: var(--paper);
  outline-offset: 0.18rem;
}

.inquiry-form__wide {
  grid-column: 1 / -1;
}

.inquiry-form__submit {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4) var(--space-5);
}

.inquiry-form__submit button {
  min-height: 3.25rem;
  padding: 0.7rem 1.15rem;
  color: var(--paper);
  background: var(--ink);
  border: 0.12rem solid var(--ink);
  border-radius: var(--radius);
  font-weight: 800;
  cursor: pointer;
  transition:
    color 150ms ease-out,
    background-color 150ms ease-out;
}

.inquiry-form__submit button:hover {
  color: var(--ink);
  background: var(--paper);
}

.inquiry-form__submit small {
  font-size: 0.88rem;
  line-height: 1.5;
}

.inquiry-form__submit button:disabled {
  opacity: 0.62;
  cursor: progress;
}

.inquiry-form__status {
  padding: 0.75rem 0.9rem;
  color: var(--ink);
  background: var(--paper);
  border: 0.12rem solid var(--ink);
  font-size: 0.92rem;
  font-weight: 750;
  line-height: 1.55;
}

.inquiry-form__status[data-state="success"] {
  border-left: 0.55rem solid var(--brand);
}

.inquiry-form__status[data-state="error"] {
  border-left: 0.55rem solid var(--ink);
}

.main-contact__meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: var(--space-4);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.main-contact__credit {
  flex-basis: 100%;
  margin-top: var(--space-2);
  padding-top: var(--space-4);
  border-top: 0.06rem solid var(--accent);
  color: var(--paper);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  line-height: 1.6;
  text-transform: none;
}

.main-contact__credit a {
  color: var(--paper);
}

/* Work: a centered, narrow showreel instead of scattered cards. */
.work-page {
  background: var(--paper);
}

.work-main {
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  padding-block: clamp(4.5rem, 8 * var(--w), 7.5rem);
}

.work-heading {
  display: grid;
  gap: var(--space-5);
  padding-bottom: var(--space-8);
  border-bottom: 0.08rem solid var(--ink);
}

.work-heading > span,
.proposal-kicker,
.proposal-section__heading > span,
.proposal-contact > div > span {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.82rem;
  font-weight: 800;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}

.work-heading h1 {
  color: var(--brand);
  font-family: var(--display);
  font-size: clamp(3.25rem, 7.5 * var(--w), 6rem);
  font-style: normal;
  font-weight: 600;
  line-height: 1.05;
}

.work-heading p {
  max-width: 50ch;
  font-size: clamp(1.15rem, 1rem + 0.4 * var(--w), 1.35rem);
  line-height: 1.7;
}

.work-audience {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-7);
  margin-block: var(--space-8);
  padding-block: var(--space-6);
  border-block: 0.08rem solid var(--ink);
}

.work-audience article {
  display: grid;
  align-content: start;
  gap: var(--space-3);
  max-width: 43ch;
}

.work-audience article + article {
  padding-left: var(--space-7);
  border-left: 0.08rem solid var(--ink);
}

.work-audience small {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.work-audience strong {
  font-size: 1.05rem;
  line-height: 1.55;
}

.work-group {
  padding-block: var(--space-8);
}

.work-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 19rem));
  justify-content: center;
  gap: clamp(2.5rem, 5 * var(--w), 4.5rem) clamp(1.5rem, 3 * var(--w), 2.5rem);
}

.work-card {
  display: grid;
  align-content: start;
  min-width: 0;
  color: var(--ink);
  text-decoration: none;
}

.work-card__media {
  position: relative;
  aspect-ratio: 9 / 16;
  overflow: hidden;
  background: var(--ink);
}

.work-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.work-card--linked .work-card__media img {
  transition: transform 180ms ease-out;
}

.work-card--linked:hover .work-card__media img,
.work-card--linked:focus-visible .work-card__media img {
  transform: scale(1.025);
}

.work-card__number,
.work-card__action {
  position: absolute;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  min-height: 2.5rem;
  padding: 0.45rem 0.7rem;
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 850;
  letter-spacing: 0.07em;
  line-height: 1.2;
  text-transform: uppercase;
}

.work-card__number {
  inset: 0 auto auto 0;
  color: var(--paper);
  background: var(--brand);
}

.work-card__action {
  inset: auto 0 0 auto;
  color: var(--paper);
  background: var(--ink);
}

.work-card__meta {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: end;
  gap: var(--space-4);
  padding-top: var(--space-4);
  border-top: 0.22rem solid var(--ink);
}

.work-card__title {
  min-width: 0;
}

.work-card__title h2 {
  font-family: var(--body);
  font-size: 1.02rem;
  font-weight: 800;
  line-height: 1.45;
}

.work-card__result {
  display: grid;
  justify-items: end;
  gap: 0.15rem;
  color: var(--brand);
}

.work-card__result small {
  font-family: var(--utility);
  font-size: 0.62rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.work-card__result strong {
  font-family: var(--utility);
  font-size: 1.55rem;
  font-variant-numeric: tabular-nums lining-nums;
  line-height: 1;
}

/* Proposal: editorial pitch layout with solid sections and strong reading measures. */
.proposal-page {
  background: var(--paper);
}

.proposal-main section {
  padding-inline: max(1.5rem, calc((100% - var(--content)) / 2));
}

.proposal-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) minmax(18rem, 0.65fr);
  align-items: end;
  gap: clamp(3rem, 7 * var(--w), 6rem);
  padding-block: clamp(5rem, 10 * var(--w), 9rem);
}

.proposal-hero__copy {
  display: grid;
  gap: var(--space-6);
}

.proposal-hero h1 {
  max-width: 13ch;
  color: var(--brand);
  font-family: var(--display);
  font-size: clamp(3.25rem, 5.5 * var(--w), 5.75rem);
  font-style: normal;
  font-weight: 600;
  letter-spacing: -0.03em;
  line-height: 1.08;
}

.proposal-hero__copy > p {
  max-width: 50ch;
  font-size: clamp(1.15rem, 1rem + 0.4 * var(--w), 1.35rem);
  line-height: 1.72;
}

.proposal-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
}

.proposal-hero__aside {
  display: grid;
  gap: var(--space-5);
  padding-left: var(--space-6);
  border-left: 0.35rem solid var(--brand);
}

.proposal-hero__aside small {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.07em;
  text-transform: uppercase;
}

.proposal-hero__aside strong {
  font-size: clamp(1.35rem, 2 * var(--w), 1.8rem);
  line-height: 1.45;
}

.proposal-hero__aside ul,
.proposal-service__detail ul {
  display: grid;
  gap: var(--space-2);
  padding-left: 1.2rem;
}

.proposal-fit,
.proposal-engagement {
  padding-block: clamp(4.5rem, 8 * var(--w), 7rem);
  border-top: 0.08rem solid var(--ink);
}

.proposal-section__heading {
  display: grid;
  gap: var(--space-4);
  margin-bottom: var(--space-7);
}

.proposal-section__heading h2 {
  max-width: 100%;
  font-family: var(--display);
  font-size: clamp(2.35rem, 1.9rem + 2.3 * var(--w), 3.65rem);
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.1;
}

.proposal-fit__grid,
.proposal-engagement__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  border-block: 0.08rem solid var(--ink);
}

.proposal-fit__grid article,
.proposal-engagement__grid article {
  display: grid;
  align-content: start;
  gap: var(--space-4);
  min-width: 0;
  padding: var(--space-6);
  border-right: 0.08rem solid var(--ink);
}

.proposal-fit__grid article:last-child,
.proposal-engagement__grid article:last-child {
  border-right: 0;
}

.proposal-fit__grid article > span,
.proposal-engagement__grid small {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.07em;
  text-transform: uppercase;
}

.proposal-fit__grid h3,
.proposal-engagement__grid h3 {
  font-size: clamp(1.35rem, 2 * var(--w), 1.75rem);
  line-height: 1.35;
}

.proposal-fit__grid p,
.proposal-engagement__grid p {
  max-width: 34ch;
  line-height: 1.72;
}

.proposal-services {
  padding-block: clamp(4.5rem, 8 * var(--w), 7rem);
  color: var(--paper);
  background: var(--ink);
  border-top: 0.45rem solid var(--accent);
}

.proposal-section__heading--light > span {
  color: var(--paper);
}

.proposal-service-list {
  border-top: 0.08rem solid var(--paper);
}

.proposal-service {
  display: grid;
  grid-template-columns: 3rem minmax(18rem, 0.8fr) minmax(19rem, 1fr);
  gap: var(--space-7);
  padding-block: var(--space-7);
  border-bottom: 0.08rem solid var(--paper);
}

.proposal-service__number {
  color: var(--paper);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 850;
}

.proposal-service__title,
.proposal-service__detail {
  display: grid;
  align-content: start;
  gap: var(--space-3);
}

.proposal-service__title small,
.proposal-service__detail strong {
  color: var(--paper);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.07em;
  text-transform: uppercase;
}

.proposal-service__title h3 {
  font-family: var(--body);
  font-size: clamp(1.35rem, 1.2rem + 0.9 * var(--w), 1.85rem);
  font-weight: 800;
  letter-spacing: -0.005em;
  line-height: 1.36;
}

.proposal-service__title p,
.proposal-service__detail li {
  max-width: 48ch;
  line-height: 1.72;
}

.proposal-process {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  margin-top: var(--space-8);
  padding: 0;
  color: var(--paper);
  background: var(--brand);
  list-style: none;
}

.proposal-process li {
  display: grid;
  gap: var(--space-2);
  min-width: 0;
  padding: var(--space-6);
  border-right: 0.08rem solid var(--paper);
}

.proposal-process li:last-child {
  border-right: 0;
}

.proposal-process span {
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
}

.proposal-process strong {
  font-family: var(--utility);
  font-size: 1.35rem;
}

.proposal-process p {
  line-height: 1.5;
}

.proposal-contact {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: end;
  gap: var(--space-7);
  padding-block: clamp(4.5rem, 8 * var(--w), 7rem);
  color: var(--paper);
  background: var(--brand);
}

.proposal-contact > div:first-child {
  display: grid;
  gap: var(--space-4);
}

.proposal-contact > div > span {
  color: var(--paper);
}

.proposal-contact h2 {
  max-width: 100%;
  font-family: var(--display);
  font-size: clamp(2.35rem, 1.9rem + 2.3 * var(--w), 3.65rem);
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.1;
}

.proposal-contact__actions {
  display: grid;
  justify-items: start;
  gap: var(--space-3);
  min-width: 12rem;
}

.proposal-contact__actions a {
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  font-weight: 800;
}

/* ── 首頁資訊密度 ──
   首頁區塊多、留白重，整體縮 25%。用 --w 乘倍率而不是全部等比縮小：
   clamp 的 rem 底線會保護小字，所以大標縮 25%、區塊標題縮 13%、內文只縮 6%，
   小標籤完全不動。這樣是變密，不是變小到看不清。 */
.home-page {
  --w: calc(var(--w-base) * 0.75);

  --space-5: 1.15rem;
  --space-6: 1.5rem;
  --space-7: 2.25rem;
  --space-8: 3rem;
  --space-9: 4.25rem;
}

/* ── 字級階梯 ──
   每一段的 --w 取「該段最窄的寬度 / 100」，也就是空間最緊的那一端。
   這樣在每段的下緣，字級剛好等於原本流體排版的值（不會溢出）；
   往上拖到該段上緣時字級不變，只是留白多一點。 */
@media (max-width: 90rem) {
  :root { --w-base: 12px; }   /* 1200 – 1440 */
}

@media (max-width: 75rem) {
  :root { --w-base: 10px; }   /* 992 – 1200 */
}

@media (max-width: 62rem) {
  :root { --w-base: 8.3px; }  /* 832 – 992 */
}

@media (max-width: 52rem) {
  :root { --w-base: 7px; }    /* 704 – 832 */
}

@media (max-width: 44rem) {
  :root { --w-base: 5.6px; }  /* 560 – 704 */
}

@media (max-width: 35rem) {
  :root { --w-base: 4.8px; }  /* 480 – 560 */
}

@media (max-width: 30rem) {
  :root { --w-base: 3.6px; }  /* 360 – 480 */
}

@media (max-width: 62rem) {
  .page-header {
    grid-template-columns: 1fr auto;
  }

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

  .systems-story__layout {
    grid-template-columns: 1fr;
    gap: var(--space-8);
  }

  .systems-story__intro {
    position: relative;
    top: auto;
    max-width: 40rem;
  }

  .systems-progress {
    max-width: 24rem;
  }

  .main-systems .main-system {
    grid-template-columns: minmax(0, 1fr);
    min-height: clamp(14rem, 32vh, 20rem);
  }

  .main-heading,
  .proposal-hero,
  .proposal-contact {
    grid-template-columns: 1fr;
    align-items: start;
  }

  .main-system,
  .proposal-service {
    grid-template-columns: 2.5rem minmax(0, 1fr);
  }

  .main-system__detail,
  .proposal-service__detail {
    grid-column: 2;
  }

  .proposal-process {
    grid-template-columns: repeat(2, 1fr);
  }

  .proposal-process li:nth-child(2) {
    border-right: 0;
  }

  .proposal-process li:nth-child(-n + 2) {
    border-bottom: 0.08rem solid var(--paper);
  }
}

@media (max-width: 44rem) {
  .page-header {
    width: min(100% - 2rem, var(--content));
    grid-template-columns: 1fr;
    justify-items: center;
    gap: var(--space-3);
    padding-block: var(--space-4);
  }

  .page-brand {
    align-items: center;
  }

  .page-nav {
    width: 100%;
    justify-content: space-between;
  }

  .home-hero {
    width: min(100% - 2rem, 62rem);
    min-height: clamp(22rem, 52svh, 28rem);
    gap: var(--space-7);
    padding-block: 2.5rem 3rem;
  }

  .home-identity {
    gap: 1.4rem;
  }

  .home-lead {
    font-size: 0.85rem;
    letter-spacing: 0.1em;
  }

  .home-tagline {
    font-size: 1.5rem;
  }

  .home-name {
    font-size: clamp(3rem, 15.5 * var(--w), 5.5rem);
  }

  .work-heading h1 {
    font-size: clamp(2.6rem, 10 * var(--w), 4rem);
  }

  .proposal-hero h1 {
    font-size: clamp(2.5rem, 11.5 * var(--w), 3.5rem);
  }

  .main-about,
  .main-manifesto,
  .main-systems,
  .main-ads,
  .main-contact,
  .proposal-main section {
    padding-inline: 1rem;
  }

  .systems-story__layout {
    gap: var(--space-7);
  }

  .systems-progress__track {
    min-height: 8.5rem;
  }

  .main-systems .main-system {
    grid-template-columns: 1fr;
    gap: var(--space-6);
    min-height: auto;
    padding-block: clamp(3.75rem, 15 * var(--w), 5.5rem);
  }

  .main-system__copy {
    gap: var(--space-6);
  }

  .main-systems .main-system h3 {
    font-size: clamp(2rem, 9.5 * var(--w), 2.8rem);
  }

  .main-qr {
    height: 145svh;
  }

  .main-qr__sticky {
    align-items: start;
    padding: clamp(3.25rem, 12 * var(--w), 4.75rem) 1rem 3.5rem;
  }

  .main-qr__layout {
    grid-template-columns: 1fr;
    gap: var(--space-7);
  }

  .main-qr h2 {
    font-size: clamp(3rem, 14 * var(--w), 4.25rem);
  }

  .main-qr__copy {
    gap: var(--space-4);
  }

  .main-qr__visual {
    justify-self: center;
    width: min(100%, 22rem);
  }


  .main-qr__progress {
    inset-inline: 1rem;
  }

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

  /* 兩欄一格只剩約 155px，「協助客戶建置 AI 系統」會孤字換行 */
  .main-metric small {
    text-wrap: balance;
  }

  .main-methods,
  .proposal-fit__grid,
  .proposal-engagement__grid {
    grid-template-columns: 1fr;
  }

  .main-method,
  .proposal-fit__grid article,
  .proposal-engagement__grid article {
    border-right: 0;
    border-bottom: 0.08rem solid var(--ink);
  }

  .main-method:last-child,
  .proposal-fit__grid article:last-child,
  .proposal-engagement__grid article:last-child {
    border-bottom: 0;
  }

  .main-system,
  .proposal-service {
    grid-template-columns: 1fr;
    gap: var(--space-4);
  }

  .main-system__detail,
  .proposal-service__detail {
    grid-column: 1;
  }

  .inquiry-form {
    grid-template-columns: 1fr;
  }

  .inquiry-form__wide {
    grid-column: 1;
  }

  .work-main {
    width: calc(100% - 2rem);
  }

  .work-audience {
    grid-template-columns: 1fr;
    gap: var(--space-5);
  }

  .work-audience article + article {
    padding-top: var(--space-5);
    padding-left: 0;
    border-top: 0.08rem solid var(--ink);
    border-left: 0;
  }

  .work-grid {
    grid-template-columns: minmax(0, 22rem);
  }

  .proposal-process {
    grid-template-columns: 1fr;
  }

  .proposal-process li,
  .proposal-process li:nth-child(2) {
    border-right: 0;
    border-bottom: 0.08rem solid var(--paper);
  }

  .proposal-process li:last-child {
    border-bottom: 0;
  }
}

/* 全站維持乾淨實色；顆粒僅限深色首屏的極淡局部層。 */
body::after {
  content: none;
}

/* ── 小螢幕標題上限 ──
   招牌字與襯線標題都保留安全上限，避免在窄螢幕撐出橫向捲動。
   必須放在既有 62rem / 44rem 區塊之後，否則會被它們蓋掉。 */
@media (max-width: 30rem) {
  .home-name {
    font-size: 3.6rem;
  }

  .main-about h2,
  .main-heading h2,
  .systems-story__intro h2,
  .main-qr h2,
  .main-contact h2,
  .proposal-section__heading h2,
  .proposal-contact h2 {
    font-size: 2.75rem;
  }

  .systems-story__intro,
  .main-qr__copy,
  .home-identity {
    min-width: 0;
  }
}

@media (max-width: 22.5rem) {
  .home-name {
    font-size: 3.05rem;
  }

  .main-about h2,
  .main-heading h2,
  .systems-story__intro h2,
  .main-qr h2,
  .main-contact h2,
  .proposal-section__heading h2,
  .proposal-contact h2 {
    font-size: 2.35rem;
  }
}

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

  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }

  .main-qr {
    height: auto;
  }

  .main-qr__sticky {
    position: relative;
    min-height: auto;
  }

  .qr-stage canvas {
    display: none;
  }

  .qr-stage img {
    opacity: 1 !important;
  }

  .main-qr__progress i,
  .systems-progress__track i {
    transform: none !important;
  }

  [data-system-step] {
    opacity: 1 !important;
    transform: none !important;
  }
}

@media print {
  .page-nav,
  .home-actions,
  .main-about__actions,
  .proposal-actions,
  .proposal-contact__actions,
  .inquiry-form {
    display: none;
  }

  body {
    color: #000;
    background: #fff;
    font-size: 11pt;
  }

  body::after {
    display: none;
  }

  .main-about,
  .main-systems,
  .main-ads,
  .main-qr,
  .main-contact,
  .proposal-services,
  .proposal-contact {
    color: #000;
    background: #fff;
  }

  .main-qr {
    height: auto;
  }

  .main-qr__sticky {
    position: static;
    min-height: auto;
  }

  .main-qr canvas,
  .main-qr__progress {
    display: none;
  }

  .work-card,
  .proposal-service,
  .main-system {
    break-inside: avoid;
  }
}

/* ── 右下角浮動按鈕組 ──
   LINE 在上、回到頂端在下。整組往左推半個圖示寬，
   LINE 因為上面多了一顆而自然抬高。 */
.fab-stack {
  --fab-size: clamp(3.25rem, 4.6 * var(--w), 4.25rem);
  --fab-edge: clamp(1rem, 2.4 * var(--w), 2rem);

  position: fixed;
  right: calc(var(--fab-edge) + var(--fab-size) / 2);
  bottom: calc(var(--fab-edge) * 3.5);
  z-index: 90;
  display: grid;
  justify-items: end;
  gap: 0.7rem;
}

/* 手機版把浮動鈕收回真正的角落。原本 right 多加了半個按鈕寬（42px），等於把它推進
   內文欄裡，數字成果與技術流程那幾行就被蓋住。順便縮一號，375 寬看起來才不會壓迫。 */
@media (max-width: 44rem) {
  .fab-stack {
    --fab-size: clamp(2.75rem, 4.6 * var(--w), 3.25rem);

    right: var(--fab-edge);
    bottom: calc(var(--fab-edge) * 1.5);
  }
}

.fab {
  display: flex;
  align-items: center;
  justify-content: center; /* 少了這行，回到頂端的箭頭會靠左、看起來是歪的 */
  gap: 0.5rem;
  padding: 0;
  background: none;
  border: 0;
  cursor: pointer;
  text-decoration: none;
}

/* LINE 圖檔是去背的（圓角是透明的），陰影必須用 filter: drop-shadow 才會沿著
   alpha 走；box-shadow 會在透明圓角外畫出一圈方形陰影。 */
.fab--line img {
  display: block;
  width: var(--fab-size);
  height: var(--fab-size);
  filter: drop-shadow(0 0.35rem 0.85rem color-mix(in srgb, var(--ink) 30%, transparent));
  transition: transform 220ms cubic-bezier(0.2, 0.75, 0.25, 1), filter 220ms ease;
}

/* 標籤刻意做成安靜的米色小籤，不是第二顆按鈕 ——
   LINE 圖本身已是綠色方塊，再包一層綠底會變成綠疊綠。 */
.fab__label {
  opacity: 0;
  transform: translateX(0.4rem);
  pointer-events: none;
  transition: opacity 200ms ease, transform 200ms cubic-bezier(0.2, 0.75, 0.25, 1);
  padding: 0.32rem 0.6rem;
  color: var(--ink);
  background: var(--paper);
  border-radius: 0.4rem;
  box-shadow: 0 0.25rem 0.7rem color-mix(in srgb, var(--ink) 18%, transparent);
  font-family: var(--body);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  white-space: nowrap;
}

.fab--line:hover .fab__label,
.fab--line:focus-visible .fab__label {
  opacity: 1;
  transform: none;
}

.fab--line:hover img,
.fab--line:focus-visible img {
  transform: translateY(-3px) scale(1.05);
  filter: drop-shadow(0 0.6rem 1.3rem color-mix(in srgb, var(--ink) 38%, transparent));
}

/* 回到頂端：比 LINE 小一號，因為它是次要動作 */
.fab--top {
  width: var(--fab-size);
  height: var(--fab-size);
  color: var(--paper);
  background: var(--brand);
  /* 22.5% 是 LINE 官方圖示的圓角比例，兩顆才會是同一個形狀語言 */
  border-radius: 22.5%;
  box-shadow: 0 0.35rem 0.85rem color-mix(in srgb, var(--ink) 30%, transparent);
  transition: transform 220ms cubic-bezier(0.2, 0.75, 0.25, 1), background 200ms ease;
}

.fab--top svg {
  width: 40%;
  height: 45%;
}

.fab--top:hover,
.fab--top:focus-visible {
  transform: translateY(-3px);
  background: var(--black-sea);
}

.fab--top[hidden] {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .fab--line img,
  .fab--top {
    transition: none;
  }

  .fab__label {
    transition: none;
  }

  .fab--line:hover img,
  .fab--line:focus-visible img,
  .fab--top:hover,
  .fab--top:focus-visible {
    transform: none;
  }
}

@media print {
  .fab-stack {
    display: none;
  }
}

/* ── 頁尾 ── */
.site-footer {
  color: var(--paper);
  background: var(--ink);
}

.site-footer__inner {
  display: grid;
  grid-template-columns: minmax(0, 1.6fr) repeat(2, minmax(0, 1fr));
  gap: clamp(2rem, 5 * var(--w), 4.5rem);
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  padding-block: clamp(3rem, 6 * var(--w), 5rem);
}

.site-footer__brand {
  display: grid;
  align-content: start;
  gap: var(--space-3);
}

.site-footer__brand strong {
  font-family: var(--body);
  font-size: clamp(1.25rem, 1.05rem + 1 * var(--w), 1.6rem);
  font-weight: 800;
  letter-spacing: 0.01em;
}

.site-footer__brand span {
  color: var(--accent);
  font-family: var(--utility);
  font-size: 0.82rem;
  font-weight: 800;
  letter-spacing: 0.16em;
}

.site-footer__brand p {
  max-width: 38ch;
  margin-top: var(--space-2);
  color: var(--paper);
  font-size: 0.95rem;
  line-height: 1.75;
}

.site-footer__col {
  display: grid;
  align-content: start;
  gap: var(--space-3);
}

.site-footer__col h2 {
  margin-bottom: var(--space-2);
  font-family: var(--body);
  font-size: 0.95rem;
  font-weight: 800;
  letter-spacing: 0.02em;
}

.site-footer__col a {
  color: var(--paper);
  font-size: 0.95rem;
  line-height: 1.5;
  text-decoration: none;
  transition: color 180ms ease;
}

.site-footer__col a:hover,
.site-footer__col a:focus-visible {
  color: var(--accent);
}

.site-footer__col a[aria-current="page"] {
  color: var(--accent);
}

/* 底部版權條：比主體再深一階，做出收尾的層次 */
.site-footer__bar {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: var(--space-3) var(--space-6);
  padding-block: var(--space-4);
  color: var(--ink);
  background: var(--accent);
}

.site-footer__bar small {
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  color: var(--ink);
  font-size: 0.8rem;
  line-height: 1.6;
}

.site-footer__bar .site-footer__credit a {
  color: var(--ink);
}

@media (max-width: 44rem) {
  .site-footer__inner {
    grid-template-columns: 1fr;
    gap: var(--space-7);
  }
}

/* ── IG × GPT API 展示模組（來自 ig-gpt-showcase.html）──
   所有 class 都有 igx- 前綴，不會污染既有樣式。
   配色已接到網站色票；模組自帶的區塊 padding 與底色移除，因為它是嵌在 AI 流程區裡。 */
/*
      IG × GPT API portfolio showcase
      All selectors are prefixed with igx- so this block can be moved into an existing site.
    */
    .igx-showcase {
      --igx-ink: var(--ink);
      --igx-paper: var(--paper);
      --igx-line: var(--line);
      --igx-brand: var(--brand);
      --igx-lilac: var(--accent);
      --igx-accent: var(--accent);
      --igx-surface: var(--paper);
      --igx-display: var(--body);
      --igx-body: var(--body);
      --igx-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;

      position: relative;
      isolation: isolate;
      overflow: hidden;
      box-sizing: border-box;
      width: 100%;
      color: var(--igx-ink);
      background: var(--igx-paper);
      font-family: var(--igx-body);
      padding: 0;
    }

    .igx-showcase *,
    .igx-showcase *::before,
    .igx-showcase *::after {
      box-sizing: border-box;
    }

    .igx-shell {
      width: min(1320px, 100%);
      margin: 0 auto;
    }

    .igx-intro {
      display: grid;
      grid-template-columns: minmax(0, 5fr) minmax(420px, 7fr);
      gap: clamp(36px, 6vw, 92px);
      align-items: end;
      margin-bottom: clamp(56px, 8vw, 110px);
    }

    .igx-kicker,
    .igx-core-small,
    .igx-chat-meta,
    .igx-proof-label {
      font-family: var(--igx-mono);
      letter-spacing: .12em;
      text-transform: uppercase;
    }

    .igx-kicker {
      display: flex;
      align-items: center;
      gap: 12px;
      margin: 0 0 20px;
      font-size: 11px;
      font-weight: 700;
    }

    .igx-kicker::before {
      content: "";
      width: 34px;
      height: 2px;
      background: var(--igx-brand);
    }

    .igx-title {
      max-width: 720px;
      margin: 0;
      font-family: var(--igx-display);
      font-size: clamp(48px, 6.7vw, 104px);
      font-stretch: condensed;
      font-weight: 900;
      line-height: .92;
      letter-spacing: -.065em;
    }

    .igx-title-emphasis {
      position: relative;
      display: inline-block;
      color: var(--igx-brand);
      white-space: nowrap;
    }

    .igx-title-emphasis::after {
      content: "";
      position: absolute;
      left: 2%;
      right: -4%;
      bottom: -.08em;
      height: .09em;
      background: var(--igx-lilac);
      transform: rotate(-1.4deg);
      z-index: -1;
    }

    .igx-summary {
      max-width: 610px;
      margin: 0 0 .1em;
      font-size: clamp(17px, 1.65vw, 24px);
      line-height: 1.72;
      letter-spacing: .01em;
    }

    .igx-summary strong {
      font-weight: 800;
      box-shadow: inset 0 -.42em 0 var(--igx-accent);
    }

    .igx-route {
      position: relative;
      display: grid;
      grid-template-columns: minmax(0, 1fr) minmax(9.5rem, 0.62fr) minmax(0, 1fr);
      align-items: center;
      gap: clamp(1.25rem, 3 * var(--w), 2.5rem);
      min-height: 0;
      padding-block: clamp(2rem, 5 * var(--w), 3rem);
      border-top: 1px solid var(--igx-ink);
      border-bottom: 1px solid var(--igx-ink);
    }

    /* 訊號軌道：SVG 用 preserveAspectRatio="none" 撐滿整列，線就永遠落在三張卡的垂直
       中線上，不必知道欄寬是多少。卡片不透明，所以訊號只在欄距露臉 —— 讀起來剛好是
       「訊息離開 IG → 進 GPT → 送回 IG」，中間那拍就是它在想。 */
    .igx-route-svg {
      position: absolute;
      z-index: 0;
      inset: 0;
      width: 100%;
      height: 100%;
      pointer-events: none;
    }

    .igx-route-base,
    .igx-route-active {
      fill: none;
      stroke-width: 2;
      vector-effect: non-scaling-stroke;
    }

    .igx-route-base {
      stroke: var(--igx-line);
      stroke-dasharray: 4 9;
      opacity: .45;
    }

    /* 亮段掃過去就是那顆訊號。動 stroke-dashoffset 不會觸發版面重算，內顯扛得住。 */
    .igx-route-active {
      stroke: var(--igx-brand);
      stroke-dasharray: 210 1000;
      stroke-linecap: round;
      opacity: 0;
    }

    .igx-route.is-visible .igx-route-active {
      opacity: 1;
      animation: igx-signal 5.5s linear infinite;
    }

    .igx-chat {
      position: relative;
      z-index: 2;
      width: auto;
      min-width: 0;
    }

    .igx-chat--incoming {
      grid-column: 1;
      grid-row: 1;
      transform: none;
    }

    .igx-chat--outgoing {
      grid-column: 3;
      grid-row: 1;
      transform: none;
    }

    .igx-chat-meta {
      display: flex;
      align-items: center;
      gap: 8px;
      margin: 0 0 10px;
      font-size: 10px;
      font-weight: 700;
    }

    .igx-chat-meta::before {
      content: "";
      width: 7px;
      height: 7px;
      border-radius: 50%;
      background: currentColor;
    }

    .igx-chat--incoming .igx-chat-meta { color: var(--brand); }
    .igx-chat--outgoing .igx-chat-meta { color: var(--ink); }

    .igx-bubble {
      position: relative;
      margin: 0;
      border: 1px solid var(--igx-ink);
      border-radius: 1rem;
      background: var(--igx-surface);
      padding: 20px 22px;
      font-size: clamp(15px, 1.5vw, 20px);
      font-weight: 600;
      line-height: 1.55;
      box-shadow: none;
    }

    .igx-chat--outgoing .igx-bubble {
      border-radius: 1rem;
      background: var(--igx-ink);
      color: var(--igx-surface);
      box-shadow: none;
    }

    .igx-core {
      position: relative;
      z-index: 3;
      grid-column: 2;
      grid-row: 1;
      display: grid;
      place-items: center;
      width: 100%;
      min-width: 9.5rem;
      padding: 1.6rem 1rem;
      border: 1px solid var(--igx-ink);
      border-radius: 1rem;
      background: var(--igx-brand);
      color: var(--igx-surface);
      transform: none;
      box-shadow: none;
    }

    .igx-core::before,
    .igx-core::after {
      content: none;
    }

    .igx-core::after {
      inset: -54px;
      border-color: var(--brand);
      animation-duration: 26s;
      animation-direction: reverse;
    }

    .igx-core-copy {
      position: relative;
      z-index: 1;
      text-align: center;
    }

    .igx-core-small {
      display: block;
      margin-bottom: 5px;
      font-size: 0.65rem;
      opacity: .75;
    }

    .igx-core-name {
      display: block;
      font-family: var(--igx-display);
      font-size: clamp(27px, 3.2vw, 43px);
      font-weight: 900;
      line-height: 1;
      letter-spacing: -.04em;
    }

    .igx-core-state {
      display: inline-flex;
      align-items: center;
      gap: 6px;
      margin-top: 12px;
      font-family: var(--igx-mono);
      font-size: 0.7rem;
      letter-spacing: .08em;
    }

    .igx-core-state::before {
      content: "";
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: var(--igx-accent);
      animation: igx-blink 1.3s ease-in-out infinite;
    }

    /* 訊號躲在卡片後面的那一拍，這排字負責說明 GPT 正在想什麼。 */
    .igx-thought {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      gap: var(--space-2);
      margin-top: var(--space-5);
    }

    .igx-thought span {
      display: inline-block;
      margin: 3px 2px;
      border-bottom: 1px solid var(--igx-line);
      padding: 3px 7px;
      font-family: var(--igx-mono);
      font-size: clamp(8px, .9vw, 11px);
      letter-spacing: .05em;
    }

    .igx-proof {
      display: grid;
      grid-template-columns: minmax(0, 4fr) minmax(420px, 8fr);
      gap: clamp(28px, 5vw, 70px);
      align-items: start;
      padding-top: clamp(38px, 5vw, 64px);
    }

    .igx-proof-label {
      margin: 5px 0 0;
      font-size: 10px;
      font-weight: 700;
      color: var(--igx-brand);
    }

    .igx-proof-copy {
      margin: 0;
      font-size: clamp(18px, 2vw, 28px);
      line-height: 1.55;
      letter-spacing: -.015em;
    }

    .igx-stack {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      gap: 8px 18px;
      margin-top: 1.25rem;
      color: var(--brand);
      font-family: var(--igx-mono);
      font-size: 0.75rem;
      letter-spacing: .04em;
      line-height: 1.6;
    }

    .igx-stack span + span::before {
      content: "→";
      margin-right: 18px;
      color: var(--igx-brand);
    }

    @keyframes igx-signal {
      from { stroke-dashoffset: 0; }
      to { stroke-dashoffset: -1210; }
    }

    @keyframes igx-signal-v {
      from { background-position: 50% -40%; }
      to { background-position: 50% 140%; }
    }

    @keyframes igx-orbit { to { transform: rotate(360deg); } }
    @keyframes igx-blink { 50% { opacity: .28; transform: scale(.72); } }

    @media (max-width: 820px) {
      .igx-showcase {
        background: var(--igx-paper);
        padding-inline: 0;
      }

      .igx-intro,
      .igx-proof {
        grid-template-columns: 1fr;
      }

      .igx-intro {
        gap: 28px;
      }

      .igx-title {
        max-width: 620px;
      }

      .igx-route {
        grid-template-columns: minmax(0, 1fr);
        gap: 1.25rem;
        min-height: 0;
        padding-block: 2rem;
      }

      /* 直式堆疊時軌道要走垂直中線。翻轉 SVG 需要知道容器高度才對得準，
         改用背景漸層跑：兩個尺寸都不必算，動的也只是 2px 寬的一條。 */
      .igx-route-svg {
        display: none;
      }

      .igx-route::before,
      .igx-route.is-visible::after {
        content: "";
        position: absolute;
        z-index: 0;
        top: 2rem;
        bottom: 2rem;
        left: 50%;
        width: 2px;
        margin-left: -1px;
      }

      .igx-route::before {
        background-image: repeating-linear-gradient(to bottom, var(--igx-line) 0 4px, transparent 4px 13px);
        opacity: .45;
      }

      .igx-route.is-visible::after {
        z-index: 1;
        background-image: linear-gradient(to bottom, transparent, var(--igx-brand), transparent);
        background-size: 100% 34%;
        background-repeat: no-repeat;
        animation: igx-signal-v 5.5s linear infinite;
      }

      .igx-chat {
        width: 100%;
      }

      .igx-chat--incoming {
        grid-column: 1;
        grid-row: 1;
      }

      .igx-chat--outgoing {
        grid-column: 1;
        grid-row: 3;
      }

      .igx-core {
        grid-column: 1;
        grid-row: 2;
        justify-self: stretch;
        width: 100%;
      }

      .igx-thought {
        bottom: 27%;
        width: 80%;
      }

      .igx-proof {
        gap: 14px;
      }

      .igx-stack {
        margin-top: 1rem;
      }
    }

    @media (prefers-reduced-motion: reduce) {
      .igx-showcase *,
      .igx-showcase *::before,
      .igx-showcase *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
      }
    }

/* ── 手機展示框 ──
   用 CSS 畫外框而不是疊在去背照片上：外框和螢幕是同一個盒子，
   影片用 object-fit: cover 填滿，所以任何尺寸／裝置都不可能對不準。
   也不需要載入手機圖片。 */
.phone-demo {
  display: flex;
  justify-content: center;
  margin-top: var(--space-6);
}

.phone-demo__frame {
  position: relative;
  width: min(15rem, 60%);
  aspect-ratio: 480 / 1044;   /* 對齊影片本身的比例 */
  padding: 0.42rem;
  background: var(--ink);
  border: 0.1rem solid var(--ink);
  border-radius: 2rem;
  box-shadow: 0 1rem 2.25rem color-mix(in srgb, var(--ink) 20%, transparent);
}

.phone-demo__island {
  position: absolute;
  z-index: 2;
  top: 1.05rem;
  left: 50%;
  width: 28%;
  height: 1.05rem;
  background: var(--black-sea);
  border-radius: 999px;
  transform: translateX(-50%);
}

.phone-demo__video {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 1.55rem;
  object-fit: cover;   /* 影片比例和螢幕一致，這裡只是保險 */
  background: var(--black-sea);
}

@media (max-width: 44rem) {
  .phone-demo__frame {
    width: min(13rem, 72%);
  }
}

/* ── 導覽下拉選單 ──
   用 :hover 開啟，:focus-within 讓鍵盤與觸控也能開（觸控沒有 hover 狀態）。
   用 visibility 而不是 display，才有淡入並且鍵盤 Tab 得進去。 */
.page-nav__group {
  position: relative;
}

.page-nav__top {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  padding-inline: 0.6rem;
  color: inherit;
  font: inherit;
  background: none;
  border: 0;
  cursor: pointer;
}

/* 滑到觸發鈕先反色，選單再跟著出現 */
.page-nav__group:hover .page-nav__top,
.page-nav__group:focus-within .page-nav__top {
  background: var(--brand);
}

.page-nav__menu {
  position: absolute;
  z-index: 60;
  top: 100%;
  left: 50%;
  display: grid;
  gap: 0.15rem;
  min-width: max-content;
  margin-top: 0.55rem;
  padding: 0.45rem;
  color: var(--paper);
  background: var(--black-sea);
  border: 0.06rem solid var(--coastal-blue);
  border-radius: 0.4rem;
  box-shadow: 0 0.6rem 1.6rem color-mix(in srgb, var(--ink) 18%, transparent);
  opacity: 0;
  visibility: hidden;
  transform: translate(-50%, -0.35rem);
  transition: opacity 180ms ease, transform 180ms ease, visibility 180ms;
}

/* 選單和觸發鈕之間的空隙會讓滑鼠移過去時關掉，用透明橋接住 */
.page-nav__group::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  width: 100%;
  height: 0.75rem;
}

.page-nav__group:hover .page-nav__menu,
.page-nav__group:focus-within .page-nav__menu {
  opacity: 1;
  visibility: visible;
  transform: translate(-50%, 0);
}

.page-nav__menu a {
  padding: 0.5rem 0.9rem;
  color: var(--paper);
  white-space: nowrap;
  text-decoration: none;
}

.page-nav__menu a:hover,
.page-nav__menu a:focus-visible,
.page-nav__menu a[aria-current="page"] {
  color: var(--paper);
  background: var(--brand);
}

@media (prefers-reduced-motion: reduce) {
  .page-nav__menu {
    transition: none;
  }
}

/* ── 首頁的服務入口 ── */
.main-services {
  width: min(var(--content), calc(100% - 3rem));
  margin-inline: auto;
  padding-block: clamp(3rem, 7 * var(--w), 6rem);
}

.service-cards {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1.25rem, 2.5 * var(--w), 2rem);
  margin-top: var(--space-7);
}

.service-card {
  display: grid;
  align-content: start;
  gap: var(--space-3);
  padding: clamp(1.5rem, 3 * var(--w), 2.25rem);
  color: var(--ink);
  background: var(--paper);
  border: 0.08rem solid var(--ink);
  text-decoration: none;
  transition: color 180ms ease, border-color 180ms ease;
}

.service-card:hover,
.service-card:focus-visible {
  color: var(--brand);
  border-color: var(--brand);
}

.service-card h3 {
  font-family: var(--body);
  font-size: clamp(1.2rem, 1rem + 1 * var(--w), 1.5rem);
  font-weight: 800;
}

.service-card p {
  font-size: 0.98rem;
  line-height: 1.7;
}

.service-card__go {
  margin-top: var(--space-2);
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.06em;
}

/* ── 價格表 ── */
.price-table {
  display: grid;
  gap: 0;
  margin-block: var(--space-6) var(--space-8);
  border-top: 0.08rem solid var(--ink);
}

.price-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.6fr);
  align-items: baseline;
  gap: var(--space-4) var(--space-5);
  padding-block: var(--space-5);
  border-bottom: 0.08rem solid var(--ink);
}

.price-row__name {
  font-weight: 800;
  font-size: 1.05rem;
}

.price-row__price {
  color: var(--brand);
  font-family: var(--body);
  font-size: clamp(1.15rem, 1rem + 1 * var(--w), 1.45rem);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

.price-row__price small {
  font-size: 0.72em;
  font-weight: 700;
}

.price-row__detail {
  font-size: 0.95rem;
  line-height: 1.7;
}

.price-note {
  max-width: 60ch;
  margin-bottom: var(--space-8);
  color: var(--ink);
  font-size: 0.9rem;
  line-height: 1.75;
}

.price-note--strong {
  color: var(--ink);
  font-weight: 800;
}

.price-compare {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(1.5rem, 3 * var(--w), 2.5rem);
  margin-block: var(--space-6) var(--space-8);
}

.price-compare__col {
  padding: clamp(1.5rem, 3 * var(--w), 2rem);
  border: 0.08rem solid var(--ink);
}

.price-compare__col h3 {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.5rem;
  margin-bottom: var(--space-4);
  font-family: var(--body);
  font-size: 1.15rem;
  font-weight: 800;
}

.price-compare__col h3 small {
  padding: 0.15rem 0.5rem;
  color: var(--paper);
  background: var(--brand);
  font-size: 0.7rem;
  letter-spacing: 0.06em;
}

.price-compare__col p {
  margin-bottom: var(--space-3);
  font-size: 0.95rem;
  line-height: 1.7;
}

.price-compare__col strong {
  display: block;
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.08em;
}

/* ── 服務邊界清單 ── */
.boundary-list {
  display: grid;
  gap: var(--space-4);
  max-width: 68ch;
  margin-block: var(--space-6) var(--space-8);
  padding: 0;
  list-style: none;
}

.boundary-list li {
  position: relative;
  padding-left: 1.4rem;
  font-size: 0.98rem;
  line-height: 1.75;
}

.boundary-list li::before {
  content: "";
  position: absolute;
  top: 0.62em;
  left: 0;
  width: 0.5rem;
  height: 0.5rem;
  background: var(--brand);
}

.section-cta {
  margin-block: var(--space-7) var(--space-8);
}

@media (max-width: 62rem) {
  .service-cards {
    grid-template-columns: 1fr;
  }

  .price-row {
    grid-template-columns: 1fr;
    gap: var(--space-2);
  }

  .price-compare {
    grid-template-columns: 1fr;
  }
}

/* ── 窄螢幕導覽 ──
   窄螢幕沒有 hover，原本讓下拉直接攤開，結果 header 被撐到 363px、
   整份選單壓在主視覺上。改成漢堡鈕開合的面板：header 維持 --header-h，
   選單用 position: fixed 脫離版面流，撐不到任何東西。 */
@media (max-width: 44rem) {
  /* 左邊補一個和漢堡鈕等寬的空欄，中間欄才會真的落在視窗正中央。
     只寫 1fr auto 的話，品牌是「在被擠窄的第一欄裡置中」，會偏左半個鈕寬。 */
  .page-header {
    grid-template-columns: 2.75rem minmax(0, 1fr) 2.75rem;
    gap: var(--space-3);
  }

  .page-brand {
    grid-column: 2;
  }

  .nav-toggle {
    grid-column: 3;
    display: inline-grid;
    place-items: center;
    width: 2.75rem;
    height: 2.75rem;
    padding: 0;
    color: inherit;
    background: none;
    border: 0;
    border-radius: 0.3rem;
    cursor: pointer;
  }

  .nav-toggle__bars,
  .nav-toggle__bars::before,
  .nav-toggle__bars::after {
    display: block;
    width: 1.35rem;
    height: 0.14rem;
    background: currentColor;
    border-radius: 0.1rem;
    transition: transform 200ms ease, background-color 160ms ease, top 200ms ease;
  }

  .nav-toggle__bars {
    position: relative;
  }

  .nav-toggle__bars::before,
  .nav-toggle__bars::after {
    content: "";
    position: absolute;
    left: 0;
  }

  .nav-toggle__bars::before { top: -0.45rem; }
  .nav-toggle__bars::after { top: 0.45rem; }

  .page-header[data-nav-open="true"] .nav-toggle__bars {
    background: transparent;
  }

  .page-header[data-nav-open="true"] .nav-toggle__bars::before {
    top: 0;
    transform: rotate(45deg);
  }

  .page-header[data-nav-open="true"] .nav-toggle__bars::after {
    top: 0;
    transform: rotate(-45deg);
  }

  /* 開啟時讓頁首與選單連成完整實心面板，不透出後方內容。 */
  .page-header[data-nav-open="true"]::before {
    content: "";
    position: fixed;
    z-index: -1;
    inset: 0 0 auto;
    height: var(--header-h);
    background: var(--black-sea);
  }

  .page-nav {
    position: fixed;
    z-index: 55;
    top: var(--header-h);
    right: 0;
    left: 0;
    display: grid;
    /* 舊規則留下的 justify-content: space-between 會讓欄寬縮成 max-content，
       選單項目只佔半個螢幕；這裡明確把單一欄撐滿 */
    grid-template-columns: minmax(0, 1fr);
    justify-content: normal;
    align-content: start;
    gap: 0;
    width: auto;
    max-height: calc(100dvh - var(--header-h));
    overflow-y: auto;
    padding: 0.5rem 1.25rem 1.5rem;
    color: var(--paper);
    font-size: 1rem;
    /* 不透明品牌底色；子選單展開時也不會透出頁面內容。 */
    background: var(--black-sea);
    box-shadow: 0 0.8rem 2rem color-mix(in srgb, var(--ink) 18%, transparent);
    opacity: 1;
    visibility: hidden;
    transform: translateY(-0.6rem);
    transition: transform 200ms ease;
  }

  .page-header[data-nav-open="true"] .page-nav {
    opacity: 1;
    visibility: visible;
    transform: none;
  }

  .page-header[data-nav-open="true"] ~ .fab-stack {
    visibility: hidden;
  }

  .page-nav > a,
  .page-nav__top {
    display: grid;
    place-items: center;
    width: 100%;
    padding-inline: 0.25rem;
    border-radius: 0;
    border-bottom: 0.06rem solid var(--coastal-blue);
  }

  .page-nav > a:hover,
  .page-nav > a:focus-visible,
  .page-nav__group:hover .page-nav__top,
  .page-nav__group:focus-within .page-nav__top {
    background: none;
  }

  .page-nav__group::after {
    display: none;
  }

  /* 面板裡的下拉預設收起，點標題才展開，項目直式一行一個 */
  .page-nav__menu {
    position: static;
    display: grid;
    gap: 0;
    min-width: 0;
    margin: 0;
    padding: 0.15rem 0 0.5rem;
    background: var(--black-sea);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    border: 0;
    box-shadow: none;
    opacity: 1;
    visibility: visible;
    transform: none;
    transition: none;
  }

  /* 桌機的 :hover / :focus-within 規則權重較高，觸控點開後會殘留
     translateX(-50%)，造成子選單整組往左跑。用相同狀態選擇器明確歸零。 */
  .page-nav__group[data-open="true"] .page-nav__menu,
  .page-nav__group[data-open="true"]:hover .page-nav__menu,
  .page-nav__group[data-open="true"]:focus-within .page-nav__menu {
    position: static;
    left: auto;
    width: 100%;
    opacity: 1;
    visibility: visible;
    transform: none;
  }

  /* 收起狀態。連 :hover / :focus-within 一起蓋掉，
     否則點過按鈕之後焦點還在上面，會自己展開 */
  .page-nav__group:not([data-open="true"]) .page-nav__menu,
  .page-nav__group:not([data-open="true"]):hover .page-nav__menu,
  .page-nav__group:not([data-open="true"]):focus-within .page-nav__menu {
    display: none;
  }

  .page-nav__menu a {
    min-height: 2.75rem;
    display: grid;
    place-items: center;
    padding: 0.55rem 0.5rem;
    color: var(--accent);
    font-size: 0.92em;
    text-align: center;
  }

  /* 展開時觸發項反色。要放在上面 background: none 那條之後才蓋得過去 */
  .page-nav__group[data-open="true"] .page-nav__top {
    color: var(--paper);
    background: var(--brand);
  }
}

/* ── 常見問題 ──
   用 <details> 而不是 JS 開合：搜尋引擎與 AI 爬蟲讀得到收合起來的答案，
   關掉 JS 也能用。 */
.faq-list {
  display: grid;
  gap: 0;
  margin-block: var(--space-6) var(--space-8);
  border-top: 0.08rem solid var(--ink);
}

.faq-item {
  border-bottom: 0.08rem solid var(--ink);
}

.faq-item summary {
  display: flex;
  align-items: baseline;
  gap: 0.75rem;
  padding-block: var(--space-5);
  font-size: clamp(1.05rem, 0.95rem + 0.5 * var(--w), 1.25rem);
  font-weight: 800;
  line-height: 1.5;
  cursor: pointer;
  list-style: none;
}

.faq-item summary::-webkit-details-marker {
  display: none;
}

.faq-item summary::before {
  content: "＋";
  flex: none;
  color: var(--brand);
  font-weight: 800;
}

.faq-item[open] summary::before {
  content: "－";
}

.faq-item summary:hover {
  color: var(--brand);
}

.faq-item p {
  max-width: 68ch;
  padding-bottom: var(--space-5);
  padding-left: 1.9rem;
  line-height: 1.8;
}

/* ── 方案卡片 ── */
.plan-card {
  margin-block: var(--space-6) var(--space-8);
  border: 0.08rem solid var(--ink);
}

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

.plan {
  display: grid;
  align-content: start;
  gap: var(--space-3);
  padding: clamp(1.5rem, 3 * var(--w), 2.25rem);
}

.plan + .plan {
  border-left: 0.08rem solid var(--ink);
}

.plan h3 {
  font-family: var(--body);
  font-size: 1.1rem;
  font-weight: 800;
}

.plan__price {
  color: var(--brand);
  font-family: var(--body);
  font-size: clamp(1.8rem, 1.4rem + 2 * var(--w), 2.6rem);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

.plan__price small {
  font-size: 0.42em;
  font-weight: 700;
}

.plan__detail {
  font-size: 0.95rem;
  line-height: 1.7;
}

.plan-card__spec {
  padding: clamp(1.5rem, 3 * var(--w), 2.25rem);
  background: var(--surface);
  border-top: 0.08rem solid var(--ink);
}

.plan-card__spec h4 {
  margin-bottom: var(--space-4);
  font-family: var(--utility);
  font-size: 0.85rem;
  font-weight: 900;
  letter-spacing: 0.1em;
}

.spec-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-4) clamp(1.5rem, 3 * var(--w), 2.5rem);
  margin: 0;
}

.spec-list > div {
  display: grid;
  gap: 0.2rem;
}

.spec-list dt {
  color: var(--brand);
  font-family: var(--utility);
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.06em;
}

.spec-list dd {
  margin: 0;
  font-size: 0.95rem;
  line-height: 1.65;
}

@media (max-width: 62rem) {
  .plan-card__grid,
  .spec-list {
    grid-template-columns: 1fr;
  }

  .plan + .plan {
    border-left: 0;
    border-top: 0.08rem solid var(--ink);
  }
}

/* 桌機導覽以整個頁面中線定位；左右等寬欄讓品牌文字不會把選單推偏。 */
@media (min-width: 62.01rem) {
  .page-header {
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    gap: var(--space-4);
  }

  .page-brand {
    grid-column: 1;
    justify-self: start;
  }

  .page-nav {
    grid-column: 2;
    justify-self: center;
    justify-content: center;
    flex-wrap: nowrap;
  }
}

/* 中尺寸保留完整導覽，但縮小字距與內距，仍以畫面中線排列。 */
@media (min-width: 44.01rem) and (max-width: 62rem) {
  .page-header {
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    gap: var(--space-2);
  }

  .page-brand {
    grid-column: 1;
    justify-self: start;
    font-size: 0.95rem;
  }

  .page-nav {
    grid-column: 2;
    justify-self: center;
    justify-content: center;
    flex-wrap: nowrap;
    gap: var(--space-2);
    font-size: 0.78rem;
  }

  .page-nav > a,
  .page-nav__top {
    padding-inline: 0.35rem;
  }
}

/* ── 首頁短影音區（來自 short-video-homepage-concept.html）──
   捲動時把橫向門市畫面收成 9:16 手機比例，講的是「門市 → 手機 → 到店理由」，
   不是作品縮圖牆；完整作品在 work.html。所有 class 都有 svx- 前綴。
   色票、字體與 clamp 裡的 vw 都已接到站內 token 與凍結的 --w。 */
.svx-home {
  --svx-paper: var(--surface);
  --svx-ink: var(--ink);
  --svx-coral: var(--brand);
  --svx-pool: var(--accent);
  --svx-butter: var(--surface);
  --svx-night: var(--night);
  --svx-rule: color-mix(in srgb, var(--ink) 22%, transparent);
  --svx-display: var(--display);
  --svx-body: var(--body);
  --svx-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;

  position: relative;
  box-sizing: border-box;
  min-height: 255vh;
  overflow: clip;
  background: var(--svx-paper);
  color: var(--svx-ink);
  font-family: var(--svx-body);
}

.svx-home *,
.svx-home *::before,
.svx-home *::after {
  box-sizing: border-box;
}

.svx-sticky {
  position: sticky;
  top: 0;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  height: 100svh;
  min-height: 720px;
  padding: clamp(28px, 4 * var(--w), 58px) clamp(22px, 5 * var(--w), 78px) clamp(22px, 3 * var(--w), 42px);
}

.svx-head {
  position: relative;
  z-index: 6;
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(300px, .55fr);
  gap: clamp(32px, 6 * var(--w), 100px);
  align-items: end;
  max-width: 1480px;
  width: 100%;
  margin: 0 auto;
  border-top: 1px solid var(--svx-ink);
  padding-top: clamp(18px, 2 * var(--w), 30px);
}

.svx-eyebrow,
.svx-step-number,
.svx-reel-ui,
.svx-progress-copy {
  font-family: var(--svx-mono);
  letter-spacing: .1em;
  text-transform: uppercase;
}

.svx-eyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 0 0 12px;
  font-size: 10px;
  font-weight: 700;
}

.svx-eyebrow::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--svx-coral);
  box-shadow: 14px 0 0 var(--svx-pool), 28px 0 0 var(--svx-butter);
  margin-right: 28px;
}

.svx-title {
  max-width: 950px;
  margin: 0;
  font-family: var(--svx-display);
  font-size: clamp(44px, 6 * var(--w), 92px);
  font-weight: 900;
  line-height: .94;
  letter-spacing: -.058em;
}

.svx-title-mark {
  position: relative;
  display: inline-block;
  color: var(--svx-coral);
  white-space: nowrap;
}

.svx-title-mark::after {
  content: "";
  position: absolute;
  right: -.08em;
  bottom: -.05em;
  width: .22em;
  height: .22em;
  border-radius: 50%;
  background: var(--svx-pool);
}

.svx-lead {
  max-width: 460px;
  margin: 0 0 .15em;
  font-size: clamp(15px, 1.45 * var(--w), 21px);
  line-height: 1.72;
}

.svx-stage {
  position: relative;
  width: 100%;
  max-width: 1480px;
  min-height: 0;
  margin: 0 auto;
}

.svx-frame {
  position: absolute;
  z-index: 2;
  left: 50%;
  top: 51%;
  width: min(980px, 78vw);
  height: min(551px, 44vw);
  overflow: hidden;
  border: 1px solid var(--svx-ink);
  border-radius: 2px;
  background: var(--svx-night);
  transform: translate(-50%, -50%);
  will-change: width, height, border-radius;
}

.svx-frame::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image: radial-gradient(rgba(255,255,255,.28) .7px, transparent .7px);
  background-size: 4px 4px;
  mix-blend-mode: soft-light;
  opacity: .28;
}

.svx-scene {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.svx-reel-ui {
  position: absolute;
  z-index: 3;
  inset: 0;
  color: white;
  font-size: 8px;
  opacity: 0;
  transition: opacity .35s ease;
  pointer-events: none;
}

.svx-frame.is-phone .svx-reel-ui { opacity: 1; }

.svx-reel-top {
  position: absolute;
  top: 20px;
  left: 18px;
  right: 18px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.svx-reel-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--svx-coral);
  box-shadow: 0 0 0 3px rgba(255,255,255,.25);
}

.svx-reel-actions {
  position: absolute;
  right: 15px;
  bottom: 48px;
  display: grid;
  gap: 13px;
  justify-items: center;
  font-size: 17px;
}

.svx-reel-caption {
  position: absolute;
  left: 18px;
  right: 50px;
  bottom: 25px;
  font-family: var(--svx-body);
  font-size: 10px;
  font-weight: 700;
  line-height: 1.45;
  letter-spacing: 0;
  text-transform: none;
}

.svx-step {
  position: absolute;
  z-index: 4;
  width: min(270px, 24vw);
  opacity: .18;
  transform: translateY(18px);
  transition: opacity .45s ease, transform .45s ease;
}

.svx-step.is-active {
  opacity: 1;
  transform: translateY(0);
}

.svx-step--one { left: 1%; top: 23%; }
.svx-step--two { right: 1%; top: 34%; }
.svx-step--three { left: 3%; bottom: 11%; }

.svx-step-number {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 8px;
  font-size: 9px;
  font-weight: 700;
  color: var(--svx-coral);
}

.svx-step-number::after {
  content: "";
  flex: 1;
  height: 1px;
  background: currentColor;
}

.svx-step-title {
  margin: 0 0 7px;
  font-family: var(--svx-display);
  font-size: clamp(25px, 2.45 * var(--w), 40px);
  font-weight: 900;
  line-height: 1;
  letter-spacing: -.045em;
}

.svx-step-copy {
  margin: 0;
  font-size: clamp(12px, 1 * var(--w), 15px);
  line-height: 1.6;
}


.svx-progress {
  position: absolute;
  z-index: 6;
  right: 0;
  bottom: 0;
  left: 0;
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 14px;
  align-items: center;
}

.svx-progress-copy {
  margin: 0;
  font-size: 8px;
  font-weight: 700;
}

.svx-progress-track {
  height: 1px;
  background: var(--svx-rule);
}

.svx-progress-value {
  width: 0;
  height: 100%;
  background: var(--svx-coral);
}

.svx-work-link {
  position: absolute;
  z-index: 5;
  right: 1%;
  bottom: 9%;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  border-bottom: 1px solid currentColor;
  color: var(--svx-ink);
  padding: 8px 0;
  font-size: 13px;
  font-weight: 800;
  text-decoration: none;
  opacity: .2;
  transform: translateY(14px);
  transition: opacity .35s ease, transform .35s ease, color .2s ease;
}

.svx-work-link.is-active {
  opacity: 1;
  transform: translateY(0);
}

.svx-work-link:hover,
.svx-work-link:focus-visible {
  color: var(--svx-coral);
}

.svx-work-link:focus-visible {
  outline: 2px solid var(--svx-coral);
  outline-offset: 5px;
}

@media (max-width: 760px) {
  .svx-home {
    min-height: auto;
    overflow: hidden;
  }

  .svx-sticky {
    position: relative;
    display: block;
    height: auto;
    min-height: 0;
    padding: 52px 20px 72px;
  }

  .svx-head {
    display: block;
    padding-top: 18px;
  }

  .svx-lead {
    margin-top: 24px;
  }

  .svx-stage {
    display: grid;
    grid-template-columns: 1fr;
    gap: 26px;
    padding-top: 52px;
  }

  .svx-frame {
    position: relative;
    left: auto;
    top: auto;
    justify-self: center;
    width: min(330px, 86vw) !important;
    height: min(586px, 153vw) !important;
    border-radius: 28px !important;
    transform: none;
  }

  .svx-reel-ui { opacity: 1; }

  .svx-step {
    position: relative;
    left: auto;
    right: auto;
    top: auto;
    bottom: auto;
    width: 100%;
    border-top: 1px solid var(--svx-rule);
    padding-top: 18px;
    opacity: 1;
    transform: none;
  }

  .svx-step-title { font-size: 32px; }
  .svx-step-copy { max-width: 430px; font-size: 14px; }

  .svx-progress { display: none; }

  .svx-work-link {
    position: relative;
    right: auto;
    bottom: auto;
    justify-self: start;
    opacity: 1;
    transform: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .svx-step,
  .svx-reel-ui,
  .svx-work-link { transition: none; }
}
