/* ============================================================
   Deal HP — 共通スタイル（全ページで読み込む）
   ------------------------------------------------------------
   読み込み順：common.css → 各ページ専用CSS
   ここに置くもの：
   ・デザイントークン（色・フォント・サイズ・余白）
   ・リセット / ベース
   ・レイアウトプリミティブ（.shell / .section-inner）
   ・スクロール出現（.reveal ※JSは common.js）
   ・見出しタイポグラフィ（.en-h2 / .en-h3 / .section-head）
   ・ロゴカード（.logo-card）
   ・共通コンポーネント（.button-cta / .link-more / .icon-arrow）
   ・配下ページ用ヘッダー（.site-header）
   ・フッター（.footer）
   ページ固有のスタイル・配置指定はここに書かない
   ============================================================ */

:root {
  /* ---- brand ---- */
  --teal-300: #1ed9c3;
  --teal-400: #1abdaa;
  --teal-200: #35e7d0;
  --teal-900: #0e3b34;
  /* ---- neutral ---- */
  --neutral-900: #2b2520;
  --neutral-800: #4d453b;
  --neutral-700: #5b5246;
  --neutral-50: #faf7f0;
  /* ---- accent ----
     鮮やか版と、くすませた -deep 版の2組。brand/primary → --deep と同じ作法。
     ⚠️ 以前は --amber / --red-pink / --coral / --accent-yellow の4つだったが、
        同系色なのに名前が並列でどちらを使うか判断できなかったため改名した。
        --red-pink(#eb4365) は使用箇所が無かったので削除済み。
     ⚠️ クラス名の修飾子（.header-cta--amber 等）はトークン名とは独立した色ラベル。
        .button-cta--teal が --teal-300 を使うのと同じ扱いなので改名していない */
  --accent-yellow: #fad825;       /* レポートモックのハイライトバー */
  --accent-yellow-deep: #e7cc3f;  /* ヘッダーCTA「無料相談」／Expert Reviewカード背景 */
  --accent-pink: #ff446a;         /* フォームの必須マーク */

  /* ---- fonts ---- */
  --font-jp: "Noto Sans JP", sans-serif;
  --font-en-serif: "Young Serif", serif;
  --font-maru: "Zen Maru Gothic", sans-serif;
  --font-inter: "Inter", sans-serif;

  /* ============================================================
     幅・余白の設計トークン
     ------------------------------------------------------------
     ● 全幅レイヤー (width:100%)  … 背景色が画面端まで届く要素
     ● 最大幅レイヤー (--shell)   … 中身は --shell で頭打ち＋中央寄せ
     ● 左右padding／余白は 1440px 基準の vw で画面幅に比例
         （clamp の中間項 = 設計px ÷ 14.4 vw。上下限だけクランプ）
     ============================================================ */
  --shell: 1200px;                          /* コンテンツ列の最大幅 */
  --edge: clamp(16px, 2.78vw, 64px);        /* 左右padding（40px@1440・画面比例） */
  --page-inset: clamp(48px, 5.56vw, 160px); /* 白面をPCで画面端から離す量（80px@1440・画面比例） */
  --pad-section: clamp(56px, 8.33vw, 160px);/* セクション/大カードの上下（120px@1440） */
  --pad-card: clamp(28px, 4.44vw, 96px);    /* カード内側（64px@1440） */
  --gap-stack: clamp(56px, 8.61vw, 180px);  /* セクション内ブロックの縦間隔（124px@1440） */
  --radius: clamp(20px, 2.22vw, 40px);      /* カード角丸（標準・32px@1440） */
  --radius-lg: clamp(32px, 4.44vw, 80px);   /* カード角丸（大・64px@1440） */

  /* ---- 文字サイズ：1440px 基準の vw 比例（clamp の中間項 = px ÷ 14.4vw）---- */
  --fs-display: clamp(34px, 3.75vw, 72px);  /* 53.98@1440：EN特大見出し / HEROタイトル */
  --fs-en-h3:   clamp(26px, 2.78vw, 54px);  /* 40@1440：EN中見出し */
  --fs-jp-xl:   clamp(24px, 2.64vw, 32px);  /* 帯見出し専用。超ワイド画面で握手画像と重ならないよう上限を抑制 */
  --fs-jp-lg:   clamp(22px, 2.22vw, 44px);  /* 32@1440：JP見出し */
  --fs-jp-md:   clamp(18px, 1.67vw, 32px);  /* 24@1440：中見出し / menu英字 */
  --fs-ttl:     clamp(17px, 1.39vw, 27px);  /* 20@1440：カード見出し */
  --fs-body:    clamp(15px, 1.25vw, 24px);  /* 18@1440：本文 */
  --fs-body-sm: clamp(13px, 1.11vw, 21px);  /* 16@1440：小本文 / 日付 */
  --fs-sm:      clamp(12px, 0.97vw, 18px);  /* 14@1440：ラベル */
}

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

html { scrollbar-gutter: stable; } /* スクロールバー出現で本編が左にズレるのを防止 */

body {
  background: var(--neutral-50);
  font-family: var(--font-jp);
  color: var(--neutral-900);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden; /* 横スクロール事故防止 */
}

a { text-decoration: none; color: inherit; }
img { display: block; max-width: 100%; }

/* ============================================================
   日本語の改行位置
   既定のブラウザは日本語をほぼどの文字間でも折り返すため、SP幅で
   「時代／へ。」「こと／が、」のように意味の切れ目でない位置で
   改行されてしまう。文節（意味のかたまり）単位で折り返させる。
   - word-break: auto-phrase … 文節で改行（html[lang="ja"]が前提。全ページ指定済み）
   - text-wrap: balance … 見出しの各行の長さを均す（数行の短い塊向け）
   - text-wrap: pretty … 本文の行分けを全体最適化し、最終行の孤立を防ぐ
     （実測で「そのズレを可視化し、解消する／ことが、」→「そのズレを可視化し、／
       解消することが、」に改善した。auto-phraseとの併用が前提）
   :where() で指定しているので詳細度0。個別に上書きしたい箇所は
   通常のセレクタで普通に勝てる。未対応ブラウザは従来の折り返しに
   なるだけで、レイアウトは崩れない。

   注意：手打ちの <br> は原則そのまま残すこと。<br> で区切られた塊ごとに
   auto-phrase が効くので、両方あるほうが改行位置は良くなる。実測でも
   <br> を消すと h1 が「問われるのは、"」で切れるなど悪化した。
   SPで明らかに不自然になる <br> だけ個別に .br-pc を付けて無効化する。
   ============================================================ */
/* word-break は継承プロパティなので body に1回だけ置く。
   以前はタグを列挙していたが、このサイトは本文を <span class="○○__desc">
   のような block 化した span で組んでいる箇所が多く（work-card__desc /
   menu-card__desc / news-item__title / article-card__title など7種）、
   そこだけ文節改行が効かず「向上しま／した。」と単語の途中で切れていた。
   継承させれば要素の種類に関係なく全テキストへ行き渡る。
   折り返さない要素（ピル・nowrap指定）では何も起きないので副作用はない */
:where(body) { word-break: auto-phrase; }
:where(h1, h2, h3, h4, h5, h6) { text-wrap: balance; }
/* ⚠️ text-wrap: pretty は auto-phrase が効くブラウザ（＝Chrome系）限定にする。
   Safari は auto-phrase 非対応な一方 pretty を「段落全体の行長最適化」として
   実装しているため、両方が揃わないと
   ・文節では切れない（語の途中で折れる）
   ・なのに行が詰め切られず右に80〜100pxの余白が残る
   という最悪の組み合わせになる（iPhone実機で確認）。
   @supports の条件に auto-phrase を使えば、この2つは必ずセットで効く。
   Safari では既定の折り返し＝行を最後まで詰める挙動に戻る */
@supports (word-break: auto-phrase) {
  :where(p, li, dd, figcaption) { text-wrap: pretty; }
}

/* 途中で切りたくない語句を囲む（例: <span class="nowrap">RapiQ</span>） */
.nowrap { white-space: nowrap; }

/* 視覚的には隠すが、スクリーンリーダーとクローラには読ませる。
   ⚠️ display:none / visibility:hidden は使わないこと。一部のAIクローラが
   テキストを読み取らなくなる（レビュー指摘。reveal演出も同じ理由でopacityを使う）。
   用途：h1にサービス概要を含める／NEWS・BLOGカードに要約文を添える など */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* SPで不自然になる手打ち改行に個別に付ける。英字2行見出し（CLIENTS &/WORKS）や
   会社概要の和名/英名のような「意味のある改行」には付けないこと */
@media (max-width: 767.98px) {
  br.br-pc { display: none; }
}

/* ============================================================
   Layout primitive
   .shell = 「最大幅で中央寄せ」の共通コンテナ。
   各セクションはこの規則で中央1カラムに収まる。
   ============================================================ */
.shell {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding-inline: var(--edge);
}

/* .section-inner = 全幅セクションの「中身」を最大幅で中央寄せする層。
   背景色は親（全幅）が担当し、中身だけこの幅で頭打ちにする。 */
.section-inner {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
}

/* ============ Scroll reveal（発火JSは common.js） ============ */
.reveal {
  opacity: 0;
  transform: translateY(32px);
  transition: opacity 0.7s cubic-bezier(0.16, 0.84, 0.44, 1),
              transform 0.7s cubic-bezier(0.16, 0.84, 0.44, 1);
  transition-delay: var(--reveal-delay, 0s);
}
.reveal.is-visible { opacity: 1; transform: translateY(0); }

@media (prefers-reduced-motion: reduce) {
  .reveal { transition: none; opacity: 1; transform: none; }
}

/* ============ Typography (英字見出し) ============ */
.en-h2 {
  font-family: var(--font-en-serif);
  font-weight: 400;
  font-size: var(--fs-display);
  line-height: 1.1;
  letter-spacing: 4.66px;
  color: var(--teal-900);
}
.en-h3 {
  font-family: var(--font-en-serif);
  font-weight: 400;
  font-size: var(--fs-en-h3);
  line-height: 1.3;
  letter-spacing: 5px;
  color: var(--teal-900);
}

/* ============ 見出し行（SP:縦 / PC:横） ============ */
.section-head { display: flex; flex-direction: column; gap: 16px; }
.section-head__ttl { width: 100%; }
.section-head__jp {
  font-size: var(--fs-body);
  line-height: 1.85;
  letter-spacing: 2px;
  color: var(--neutral-700);
}
.section-head__body { color: var(--teal-900); }
.section-head__body h3 {
  font-size: var(--fs-jp-lg);
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: 5px;
  color: var(--teal-400);
}
.section-head__body p {
  margin-top: 24px;
  font-size: var(--fs-body);
  line-height: 1.85;
  letter-spacing: 2px;
}

/* ============ Logo card (header & footer) ============ */
/* 虹色の囲み線（Figmaのグラデーションborder再現：コーラル→ゴールド→ティール）。
   conic-gradient の開始角度 --logo-angle をループさせ、色が輪郭に沿ってゆっくり回る。
   実装は「透明ボーダー＋二層背景」方式：mask方式だと内側の角丸半径が外側と同じ値になり
   四隅だけ線が太くカクカクして見えるため、ブラウザに内側の角丸を計算させるこの方式にしている */
@property --logo-angle {
  syntax: '<angle>';
  inherits: false;
  initial-value: 135deg;
}
/* ---- 虹色リング（ロゴカード／SNSカードで共有） ----
   padding-box に白、border-box に conic-gradient を敷き、border を透明にすると
   「枠だけ虹色」になる。線幅は border-width、角丸は border-radius で各自が指定。
   ⚠️ グラデーションは background なので、これを使う要素で background を
   上書きするとリングごと消える（.contact-sns から background:#fff を外した理由）。
   ⚠️ --logo-angle は @property で inherits:false 登録済み。:root 経由の
   間接参照にすると初期値で固まってアニメーションしないので、直接ここで使うこと */
.logo-card,
.contact-sns {
  border: 2.5px solid transparent; /* 虹色線の線幅（.contact-sns 側で2pxに上書き） */
  background:
    linear-gradient(#fff 0 0) padding-box,
    conic-gradient(from var(--logo-angle, 135deg),
      #fc6a6d, #ffa36a, #ffd169, #9ab55b, #00cca0, #00bd9f, #fc6a6d) border-box;
  animation: logo-hue-rotate 9s linear infinite;
}
.logo-card {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;      /* 1行タグライン時も中身を上下中央に */
  /* 140px → 120px。中のシンボル＋Deal文字を0.8倍にしたぶんカードも詰め、
     白余白を12px前後に保つ（中身の高さ82.8px ＋ 上下の余白）。
     マークのサイズを変えたらこの値も一緒に見直すこと */
  width: 120px;
  aspect-ratio: 1;              /* カードは正方形を保つ */
  /* ⚠️ padding を縮めても見た目の白場は変わらない
     （中身のほうが content-box より小さく、中央に浮いているだけなので）。
     白場を詰めたいときは下の .logo-card__symbol / __name を大きくする。
     下だけ2px厚いのは、justify-content:center の中身を1px上へ寄せるため
     （シンボル上部の余白ぶん、上が広く見えていた） */
  padding: 12px 12px 14px;
  border-radius: 18px;
  text-align: center;
}
@keyframes logo-hue-rotate {
  to { --logo-angle: 495deg; } /* 135deg + 360deg で1周・継ぎ目なし */
}
@media (prefers-reduced-motion: reduce) {
  .logo-card, .contact-sns { animation: none; }
}
.logo-card__symbol { width: 78px; height: 62px; margin-bottom: -6px; }
.logo-card__name {
  font-family: var(--font-en-serif);
  font-size: 29.8px;
  line-height: 0.9;
  letter-spacing: -0.3px;
  color: var(--neutral-900);
}
/* .logo-card__tagline（旧タグライン）と .logo-card--small は削除。
   ヘッダーのロゴはタグライン無しのシンボル＋Dealのみになり、
   小サイズ版を使っていたフッターのロゴカードも撤去済み（現在は .footer__logo）。
   復活させる場合はシンボルと名前の垂直中央（justify-content: center）が
   タグラインぶんずれる点に注意 */

/* ==============================================
   共通コンポーネント：CTAボタン
   使い方：
   <a class="button-cta" href="...">
     <span class="button-cta__text">ラベル</span>
     <span class="button-cta__arrow icon-arrow" aria-hidden="true"></span>
   </a>
   マージンは持たない（配置は使用側のCSSで指定する）
   ============================================== */
/* claymorphism：現実の「厚み5〜8mmの粘土ボタン」を box-shadow だけで表現。
   ・表面…ほぼ無地＋縁の薄いハイライト（スムースなコーナー感）
   ・厚み…下方向の押し出し影（0 6px 5px -2px 側面色）＝ボタンの側面。
     わずかにぼかしてコーナーが滑らかに回り込んで見えるようにする
   ・接地…その下に柔らかい落ち影
   色は変数化してあり、--dark 修飾子で濃緑（PRODUCT背景色）に切替可能。
   明るい背景には --dark、ティール等の色背景には既定のアイボリーを使う */
.button-cta {
  /* 面をわずかに落として（#fdfaf1→#fbf7ec）、白のハイライトが視認できるようにしている。
     元の値だとほぼ白地に白のハイライトで「ふくらみ」が出ず、外側の厚み帯だけが
     見えて角が立って見えていた */
  --cta-bg-top: #fbf7ec;                      /* 表面（上端） */
  --cta-bg-bottom: #efe8d6;                   /* 表面（下端） */
  /* 側面＝厚み。不透明色だと縁が線として立つので半透明にする（ヘッダーCTAと同じ考え方） */
  --cta-side: rgba(184, 170, 138, 0.5);
  --cta-text: var(--teal-900, #0e3b34);
  --cta-hl: rgba(255, 255, 255, 0.95);        /* 内側ハイライト（左上）＝ふくらみ */
  --cta-lo: rgba(198, 185, 156, 0.5);         /* 内側シェード（右下）＝ふくらみ */
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 18px 44px;   /* 左右は 32 → 44px（テキストの両脇にゆとりを持たせる） */
  background: linear-gradient(180deg, var(--cta-bg-top) 0%, var(--cta-bg-bottom) 100%);
  border: none;
  border-radius: 999px;
  text-decoration: none;
  color: var(--cta-text); /* テキスト・icon-arrow が currentColor で継承 */
  cursor: pointer;
  /* クレイ質感：内側の左上ハイライト＋右下シェードで「ぷっくり」した厚み、
     外側は下方向の押し出し影＋やわらかい落ち影で浮遊感。
     insetの数値はヘッダー右上ボタン（.header-cta/.header-menu）と統一 */
  box-shadow:
    inset 5px 5px 11px var(--cta-hl),
    inset -6px -6px 12px var(--cta-lo),
    0 6px 7px -3px var(--cta-side),
    0 9px 12px rgba(14, 59, 52, 0.12),
    0 16px 24px rgba(14, 59, 52, 0.12);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
/* ---- 色バリアント（追加するときは必ずここに足す。個別CSSで作らないこと） ---- */
/* 濃緑（明るい背景用）：内側ハイライト/シェードも濃色寄りに */
.button-cta--dark {
  --cta-bg-top: #14493f;
  --cta-bg-bottom: #0e3b34;
  --cta-side: rgba(7, 35, 30, 0.5);
  --cta-text: #fff;
  --cta-hl: rgba(255, 255, 255, 0.16);
  --cta-lo: rgba(0, 0, 0, 0.32);
}
/* 白（色面・写真の上に置く用）。旧 .contact__pill 相当 */
.button-cta--white {
  --cta-bg-top: #ffffff;
  --cta-bg-bottom: #f7f4ec;
  --cta-side: rgba(184, 170, 138, 0.5);
  --cta-text: var(--teal-900);
  --cta-hl: rgba(255, 255, 255, 0.9);
  --cta-lo: rgba(224, 215, 193, 0.55);
}
/* ティール（ヘッダーCTA相当）。旧 .header-cta の配色 */
.button-cta--teal {
  --cta-bg-top: #35e7d0;
  --cta-bg-bottom: #1ed9c3;
  --cta-side: rgba(14, 130, 116, 0.5);
  --cta-text: var(--teal-900);
  --cta-hl: rgba(255, 255, 255, 0.5);
  --cta-lo: rgba(14, 90, 80, 0.35);
}
/* アンバー（黄）。ヘッダー右上の無料相談（.header-cta--amber）と同じ配色で、
   「相談する」導線の色をサイト内で揃えるためのもの */
.button-cta--amber {
  --cta-bg-top: #f0d95a;
  --cta-bg-bottom: #e7cc3f;
  --cta-side: rgba(150, 122, 30, 0.5);
  --cta-text: var(--teal-900);
  --cta-hl: rgba(255, 255, 255, 0.7);
  --cta-lo: rgba(180, 148, 50, 0.35);
}
/* ---- サイズ修飾子 ---- */
.button-cta--sm { padding: 12px 24px; }
.button-cta--sm .button-cta__text { font-size: 14px; letter-spacing: 2px; }
/* ホバー：厚みの半分だけ沈む（ふくらみは保ちつつ落ち影を弱める＝押している感） */
.button-cta:hover {
  transform: translateY(3px);
  box-shadow:
    inset 4px 4px 9px var(--cta-hl),
    inset -5px -5px 10px var(--cta-lo),
    0 3px 3px -1px var(--cta-side),
    0 5px 8px rgba(14, 59, 52, 0.10);
}
/* .contact__pill も .button-cta と同じ「素の矢印」に揃えたので、
   矢印まわりの指定は両方を対象にする（丸ボタン .btn-round は使わない） */
.button-cta:hover .button-cta__arrow,
.contact__pill:hover .button-cta__arrow {
  transform: translateX(8px);
}
/* クリック中：底まで押し切る。内側の陰影を右下→左上に寄せて凹み感を出す */
.button-cta:active {
  transform: translateY(5px);
  box-shadow:
    inset 5px 5px 11px var(--cta-lo),
    inset -5px -5px 10px var(--cta-hl),
    0 1px 2px -1px var(--cta-side);
}
.button-cta__text {
  font-family: "Noto Sans JP", sans-serif;
  font-weight: 700;
  font-size: 16px;
  color: inherit; /* バリアント（--cta-text）に追従 */
  letter-spacing: 4px;
  white-space: nowrap;
  line-height: 1.85;
}
/* SP：長いラベルだと画面からはみ出す（例「私たちが大切にしていること」は
   letter-spacing込みで364px必要だが、375px端末の利用可能幅は287px）。
   詰めたうえで折り返しも許可して、必ず画面内に収める */
@media (max-width: 599.98px) {
  /* 最長ラベル「私たちが大切にしていること」を1行に収めるための詰め。
     ⚠️ 2行になるのはNGという要件なので、padding を広げたら必ずここを測り直すこと。
     375pxでの実測：ボタン幅287 − 左右padding52 − gap8 − 矢印28 ＝ テキストに使える199px。
     14px/letter-spacing0.5px で必要188px（余裕11px）。
     360px系は使える幅が184pxまで落ちるので、下の374.98pxブロックで13pxに落とす */
  .button-cta {
    max-width: 100%;
    padding-inline: 26px;   /* 14 → 26px（PC同様に +12px） */
  }
  .button-cta__text {
    /* normal のままにしてあるのは、将来もっと長いラベルが来たときに
       はみ出すより折り返したほうが被害が小さいため。
       現状のラベルはすべて下のサイズで1行に収まる */
    white-space: normal;
    font-size: 14px;
    letter-spacing: 0.5px;
    text-align: center;
  }
  /* .icon-arrow（32px）はこのブロックより後ろで定義されていて同詳細度＝後勝ちなので、
     クラス2つ書いて詳細度で勝たせる */
  .button-cta .button-cta__arrow,
  .contact__pill .button-cta__arrow { width: 28px; height: 28px; }
}

/* 375px未満（Android 360px系など）はもう一段小さくして1行を維持する。
   375px時点で余裕が2.5pxしか無く、360pxでは使える幅が272pxまで落ちて
   上の指定だけでは2行になるため。font-size 16→15px ＋ letter-spacing 1→0.5px
   ＋ padding 14→12px で必要幅261.5px（360pxで余裕10.5px）。
   これより狭い端末（320px等）では .nowrap（HTML側）が効いて
   「私たちが／大切にしていること」で折れる＝「こと」だけが残らない */
@media (max-width: 374.98px) {
  .button-cta { padding-inline: 24px; }   /* 12 → 24px（PC同様に +12px） */
  /* 360pxではテキストに使える幅が184pxまで落ち、14pxだと188pxで足りない。
     13px/0.5px なら175pxで収まる（余裕9px） */
  .button-cta__text { font-size: 13px; }
}

/* ==============================================
   共通コンポーネント：詳細リンク（テキスト＋長矢印）
   使い方：
   <a class="link-more" href="...">
     <span class="link-more__text">詳細を見る</span>
     <span class="icon-arrow" aria-hidden="true"></span>
   </a>
   ============================================== */
.link-more {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: var(--teal-900, #0e3b34);
}
.link-more__text {
  font-family: "Noto Sans JP", sans-serif;
  font-weight: 700;
  font-size: 16px;
  letter-spacing: 4px;
  line-height: 1;
  padding: 0 4px 10px;
  border-bottom: 2px solid currentColor;
  white-space: nowrap;
}
.link-more .icon-arrow {
  margin-bottom: 10px; /* 下線ぶんの視覚バランス調整 */
}
.link-more:hover .icon-arrow {
  transform: translateX(8px);
}
/* ---- サイズ修飾子（.button-cta--sm と同じ命名） ----
   セクション内の副次的な導線（NEWS/BLOGの「一覧を見る」など）で使う。
   下線の太さは2pxのまま。細くすると小さい字で下線がかすれて見える */
.link-more--sm { gap: 6px; }
.link-more--sm .link-more__text {
  font-size: 14px;
  letter-spacing: 3px;
  padding: 0 3px 8px;
}
.link-more--sm .icon-arrow {
  width: 26px;
  height: 26px;
  margin-bottom: 8px;
}
.link-more--sm:hover .icon-arrow { transform: translateX(6px); }

/* ==============================================
   共通コンポーネント：矢印アイコン（Figma 650:406）
   使い方：<span class="icon-arrow" aria-hidden="true"></span>
   色は currentColor を継承。サイズは width/height で上書き可
   ============================================== */
.icon-arrow {
  display: inline-block;
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  background: currentColor;
  -webkit-mask: url('assets/icon-arrow.svg') no-repeat center / contain;
  mask: url('assets/icon-arrow.svg') no-repeat center / contain;
  transition: transform 0.2s ease;
}

/* ==============================================
   共通コンポーネント：丸矢印ボタン（.btn-round）
   ------------------------------------------------
   以前はカード・関連ページ・カルーセルなどで個別に定義され、
   38〜56pxの6種類に散らばっていた。役割で2サイズだけに統一する。
   ・既定（主導線）… 48px。カード／関連ページ行など「進む」導線
   ・--sm（補助）  … 40px。カルーセル送りなど操作系
   使い方：
   <span class="btn-round btn-round--fill"><span class="icon-arrow" aria-hidden="true"></span></span>
   配色は修飾子で選ぶ（新しい配色が要るときは必ずここに足すこと）：
   --fill（濃緑地・白抜き）/ --invert（白地・濃緑）/ --outline（枠線のみ）/ --ghost（地なし）
   ============================================== */
.btn-round {
  --br-size: 48px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  width: var(--br-size);
  height: var(--br-size);
  border: none;
  border-radius: 50%;
  background: var(--teal-900);
  color: #fff;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease, opacity 0.2s ease;
}
.btn-round .icon-arrow { width: 46%; height: 46%; }
.btn-round--sm { --br-size: 40px; }
/* 配色バリアント */
.btn-round--invert { background: #fff; color: var(--teal-900); }
.btn-round--outline {
  background: transparent;
  border: 1px solid currentColor;
  color: var(--teal-400);
}
.btn-round--ghost { background: transparent; color: var(--neutral-900); }
/* ホバーは「矢印が少し進む」で統一（親のhoverでも効くようにする） */
.btn-round:hover .icon-arrow,
a:hover > .btn-round .icon-arrow,
a:hover .btn-round .icon-arrow { transform: translateX(3px); }
.btn-round:disabled { opacity: 0.3; cursor: default; }
.btn-round:disabled .icon-arrow { transform: none; }

/* ==============================================
   共通コンポーネント：関連ページリンク（行リスト）
   使い方：
   <nav class="related" aria-label="関連ページ">
     <a class="related-row" href="...">
       <span>
         <span class="related-row__en">Company profile</span>
         <span class="related-row__jp" style="display:block">会社概要</span>
       </span>
       <span class="btn-round btn-round--outline"><span class="icon-arrow" aria-hidden="true"></span></span>
     </a>
   </nav>
   ============================================== */
/* 回遊リンクの上余白。全ページ共通で標準セクション間隔に統一（88px@1280）。
   各ページで前セクションの trailing 余白は 0 にしてあるので、この margin だけが
   唯一の間隔になり、どのページでも同じ見た目になる */
.related { margin-top: clamp(56px, 7vw, 120px); }
.related-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding-block: clamp(28px, 3.5vw, 48px);
  border-top: 1px solid #ddd7c9;
}
.related-row:last-child { border-bottom: 1px solid #ddd7c9; }
.related-row__en {
  font-family: var(--font-en-serif);
  font-size: clamp(22px, 2vw, 32px);
  letter-spacing: 2px;
  color: var(--teal-900);
}
.related-row__jp {
  margin-top: 6px;
  font-size: var(--fs-sm);
  letter-spacing: 2px;
  color: var(--neutral-700);
}
/* 丸矢印は共通の .btn-round--outline（上部で定義）。ここでは行ホバー時の反転だけ足す */
.related-row:hover .btn-round--outline {
  background: var(--teal-400);
  color: #fff;
}

/* ==============================================
   共通コンポーネント：お知らせ1件（NEWS行）
   TOPのNEWS抜粋と news.html（一覧）で共用。
   使い方：
   <a class="news-item" href="...">
     <span class="news-item__meta">
       <time class="news-item__date">2026/05/27</time>
       <span class="news-badge" style="--c:#ff446a">サービス</span>
     </span>
     <span class="news-item__title">見出しテキスト</span>
   </a>
   ============================================== */
/* 左右は12px。ホバー時に敷く背景（下の :hover）が文字にぴったり付いて
   窮屈に見えるため、ホバー時だけでなく常時この余白を持たせている */
.news-item {
  display: block;
  padding: 18px 12px 19px;
  border-bottom: 1px solid #ece4d4;
  transition: background 0.2s ease;
}
.news-item:hover { background: var(--neutral-50); }
.news-item__meta { display: flex; align-items: center; gap: 12px; }
.news-item__date {
  font-family: var(--font-en-serif);
  font-size: var(--fs-body-sm);
  line-height: 1.52;
  letter-spacing: 2px;
  color: var(--teal-900);
  opacity: 0.8;
}
.news-badge {
  background: var(--c);
  border-radius: 16px;
  padding: 6px 10px;
  font-size: 13px;
  font-weight: 700;
  line-height: 1.14;
  letter-spacing: 2px;
  color: #fff;
  white-space: nowrap;
}
.news-item__title {
  display: block;
  padding-top: 8px;
  font-size: var(--fs-body-sm);
  line-height: 1.85;
  letter-spacing: 2px;
  color: var(--teal-900);
}

/* ============================================================
   ヘッダー（全ページ共通・スクロール追従）
   ------------------------------------------------------------
   マークアップは2系統あるが、中身のパーツは共通：
   ・配下ページ … <header class="site-header"> に .logo-card ＋ .site-header__actions
   ・トップ     … FV演出の <header class="hero"> が同じパーツを内包
   どちらも position:fixed で画面左上／右上に貼り付け、スクロールしても
   消えないようにする。スクロール後は body.is-scrolled（common.js が付与）で
   ひとまわり小さくして本文の邪魔をしないサイズに落とす。

   --hd-inset  … 画面端からの距離（従来の 40px@PC / 16px@SP と同値）
   --hd-scale  … ロゴカードの倍率／--hd-scale-a … 右上アクションの倍率
   ============================================================ */
:root { --hd-inset: clamp(16px, 3vw, 40px); }

.site-header {
  position: relative;
  width: 100%;
  padding: var(--hd-inset) 0 0 var(--hd-inset);
  /* ロゴをfixedにするとフローから抜けてヘッダーが潰れ、本文が140px競り上がる。
     元の高さ（上余白＋ロゴカード140px）を確保して見た目を維持する */
  min-height: calc(var(--hd-inset) + 140px);
}

.site-header .logo-card,
.hero .logo-card {
  position: fixed;
  top: var(--hd-inset);
  left: var(--hd-inset);
  z-index: 60;              /* about SPの「人を想う」固定バー(z50)より前面 */
  transform: scale(var(--hd-scale, 1));
  transform-origin: top left;
  transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1), opacity 0.25s ease;
}

/* ==============================================
   ヘッダー右側アクション：無料相談CTA＋ハンバーガー
   ロゴと対に「画面右上40px（PC）・SPは縮小」で置く。
   角丸はロゴカード（18px）に合わせる
   ============================================== */
.site-header__actions {
  position: fixed;
  top: var(--hd-inset);
  right: var(--hd-inset);
  display: flex;
  align-items: stretch;
  gap: 10px;
  z-index: 60;
  transform: scale(var(--hd-scale-a, 1));
  transform-origin: top right;
  transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1), opacity 0.25s ease;
}

/* SPは初期状態からロゴをひとまわり小さく（従来どおり） */
@media (max-width: 599.98px) {
  .site-header .logo-card,
  .hero .logo-card { --hd-scale: 0.8; }
}

/* ---- スクロール後：小さく畳む ---- */
body.is-scrolled .site-header .logo-card,
body.is-scrolled .hero .logo-card { --hd-scale: 0.66; }
body.is-scrolled .site-header__actions { --hd-scale-a: 0.82; }
@media (max-width: 599.98px) {
  body.is-scrolled .site-header .logo-card,
  body.is-scrolled .hero .logo-card { --hd-scale: 0.58; }
  body.is-scrolled .site-header__actions { --hd-scale-a: 0.78; }
}
@media (prefers-reduced-motion: reduce) {
  .site-header .logo-card,
  .hero .logo-card,
  .site-header__actions { transition: none; }
}
/* ヘッダー右上ボタン：CTAボタンと同じクレイ質感（内側の左上ハイライト＋
   右下シェードでぷっくり、外側は押し出し影＋落ち影。ホバーで沈む） */
.header-cta,
.header-menu {
  border-radius: 18px;             /* ロゴカードと同じ角丸 */
  border: none;
  box-shadow:
    inset 5px 5px 11px var(--clay-hl),
    inset -6px -6px 12px var(--clay-lo),
    0 5px 4px -2px rgba(14, 59, 52, 0.18),
    0 9px 12px rgba(14, 59, 52, 0.12),
    0 16px 24px rgba(14, 59, 52, 0.12);
  transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.2s ease;
}
.header-cta:hover,
.header-menu:hover {
  transform: translateY(3px);
  box-shadow:
    inset 4px 4px 9px var(--clay-hl),
    inset -5px -5px 10px var(--clay-lo),
    0 3px 3px -1px rgba(14, 59, 52, 0.16),
    0 5px 8px rgba(14, 59, 52, 0.10);
}
.header-cta:active,
.header-menu:active {
  transform: translateY(5px);
  box-shadow:
    inset 5px 5px 11px var(--clay-lo),
    inset -5px -5px 10px var(--clay-hl),
    0 1px 2px -1px rgba(14, 59, 52, 0.16);
}
.header-cta {
  --clay-hl: rgba(255, 255, 255, 0.5);   /* ティール地：白ハイライト */
  --clay-lo: rgba(14, 90, 80, 0.35);     /* 深めティールのシェード */
  display: inline-flex;
  align-items: center;
  height: 56px;
  padding: 0 24px;
  background: var(--teal-300);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 2px;
  color: var(--teal-900);
}
.header-cta:hover { background: var(--teal-400); }
/* アンバー（黄）バリアント */
.header-cta--amber {
  --clay-hl: rgba(255, 255, 255, 0.7);
  --clay-lo: rgba(180, 148, 50, 0.35);
  background: var(--accent-yellow-deep);
}
.header-cta--amber:hover { background: #d4a017; }
.header-menu {
  --clay-hl: rgba(255, 255, 255, 0.2);   /* 濃緑地：白ハイライト */
  --clay-lo: rgba(0, 20, 15, 0.5);       /* 深緑シェード */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  width: 56px;
  height: 56px;
  padding: 0;
  background: var(--teal-900);  /* RapiQセクションと同じ濃緑 */
  cursor: pointer;
}
.header-menu span {
  width: 22px;
  height: 2px;
  border-radius: 2px;
  background: #fff;
}
/* PCはテキストのみ。アイコンはSP専用なので隠す */
.header-cta__icon { display: none; }

@media (max-width: 599.98px) {
  .site-header__actions {
    transform: scale(0.8);
    transform-origin: top right;
  }
  /* SPは横並びのテキストボタン2つだとロゴカードに重なっていた（375pxで実測60px重複）。
     アイコン＋小さなラベルの縦積み・正方形にして、ハンバーガーと同じ56px角に揃える。
     これで3つ並べても150px（0.8倍後）に収まり、ロゴと干渉しない */
  .header-cta {
    flex-direction: column;
    justify-content: center;
    gap: 3px;
    /* 幅は固定しない。「資料ダウンロード」は10pxでも約80px必要で、
       ハンバーガーと同じ56px角には収まらないため */
    padding: 0 10px;
  }
  .header-cta__icon {
    display: block;
    width: 22px;
    height: 22px;
  }
  .header-cta__label {
    font-size: 10px;
    letter-spacing: 0;
    line-height: 1.1;
    white-space: nowrap;
  }
}

/* 開いている間はハンバーガーの3本線をクローズ(×)に変形 */
.header-menu[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.header-menu[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.header-menu[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.header-menu span { transition: transform 0.25s ease, opacity 0.15s ease; }

/* ==============================================
   ナビゲーションドロワー
   マークアップは common.js が全ページに生成する
   （リンク構成はフッターナビと揃える）。
   ============================================== */
.nav-drawer {
  position: fixed;
  inset: 0;
  z-index: 100;
  visibility: hidden;
  pointer-events: none;
}
.nav-drawer.is-open { visibility: visible; pointer-events: auto; }

.nav-drawer__scrim {
  position: absolute;
  inset: 0;
  background: rgba(14, 59, 52, 0.45);
  opacity: 0;
  transition: opacity 0.3s ease;
}
.nav-drawer.is-open .nav-drawer__scrim { opacity: 1; }

.nav-drawer__panel {
  position: absolute;
  top: 0;
  right: 0;
  width: min(420px, 100%);
  height: 100%;
  /* 上パディングは×ボタン（top最大40px＋高さ56px）を避ける値。
     ⚠️ パネル自体はスクロールさせない。スクロールは内側の .nav-drawer__body。
     ここを overflow:auto にすると×ボタン（absolute）まで一緒に流れてしまう */
  padding: clamp(96px, 14vw, 140px) clamp(28px, 5vw, 56px) 48px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  overscroll-behavior: contain;
  background: var(--teal-900);
  color: #fff;
  transform: translateX(100%);
  transition: transform 0.35s cubic-bezier(0.22, 0.8, 0.3, 1);
}
.nav-drawer.is-open .nav-drawer__panel { transform: none; }

/* メニュー本体だけをスクロールさせる。こうすることで×ボタン（パネル基準の
   絶対配置）は流れず、iPhone SEのような小さい画面でも常に押せる */
.nav-drawer__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: none;
}
.nav-drawer__body::-webkit-scrollbar { display: none; }

/* ドロワーは全画面を覆いうるので、パネル内に必ず閉じる手段を置く
   （.site-header は position:relative でスクロール位置によっては画面外にいる） */
/* ×ボタンはパネル基準の絶対配置。スクロールするのは内側の
   .nav-drawer__body なので、パネル自体は動かず常に同じ位置に留まる。
   ⚠️ パネルごとスクロールさせると、中身が画面に収まらない端末（iPhone SE等）で
   ボタンが画面外へ流れて閉じられなくなる（375×667で実測：スクロール後 top:-89px） */
.nav-drawer__close {
  position: absolute;
  top: clamp(16px, 3vw, 40px);
  right: clamp(16px, 3vw, 40px);
  z-index: 1;
  width: 56px;
  height: 56px;
  display: grid;
  place-content: center;
  border: none;
  border-radius: 18px;
  background: rgba(255, 255, 255, 0.1);
  cursor: pointer;
}
.nav-drawer__close:hover { background: rgba(255, 255, 255, 0.18); }
.nav-drawer__close span {
  grid-area: 1 / 1;
  width: 22px;
  height: 2px;
  border-radius: 2px;
  background: #fff;
}
.nav-drawer__close span:nth-child(1) { transform: rotate(45deg); }
.nav-drawer__close span:nth-child(2) { transform: rotate(-45deg); }

.nav-drawer__group + .nav-drawer__group { margin-top: 40px; }
.nav-drawer__heading {
  font-family: var(--font-en-serif);
  font-size: 13px;
  letter-spacing: 3px;
  color: var(--teal-300);
}
.nav-drawer__group ul { list-style: none; margin-top: 16px; }
.nav-drawer__group li + li { margin-top: 4px; }
.nav-drawer__group a {
  display: block;
  padding: 10px 0 10px 14px;
  font-family: var(--font-maru);
  font-size: 16px;
  letter-spacing: 1px;
  /* 現在地の縦ラインぶんの座を常に確保しておく（付いた瞬間に文字が動かないように）。
     既定は透明なので見た目には出ない。
     border(2)+padding(14)=16px ぶん左へ引き戻すことで、文字の左端は
     見出し（SERVICE等）と揃ったまま、ラインだけパネルの左余白側に出る */
  border-left: 2px solid transparent;
  margin-left: -16px;
}
.nav-drawer__group a:hover { color: var(--teal-300); }
/* 現在開いているページ。以前は文字色をティールにしていたが、
   直前まで「リンク先が無い項目」を灰色で並べていた名残で、
   色違い＝押せる/押せないの差に見えて紛らわしかった。
   文字色は他と同じ白のまま、左の細いラインだけで示す */
.nav-drawer__group a[aria-current="page"] {
  border-left-color: var(--teal-300);
}
/* .is-todo（未作成ページの灰色表示）は撤去。押せないリンクは載せない方針に変更 */

/* ドロワー末尾のCTA。ヘッダー右上と同じ2つ（資料ダウンロード＋無料相談）を縦に並べる。
   配色・形状は .header-cta--doc / --amber をそのまま使い、ここでは配置だけ持つ。
   ⚠️ ヘッダーはSPでアイコン＋10pxラベルに切り替わるが、ドロワー内は幅に余裕が
   あるので文字のまま出す（下でSP用の上書きを打ち消している） */
.nav-drawer__ctas {
  margin-top: 48px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
}
@media (max-width: 599.98px) {
  /* ヘッダー用のSP指定（縦積み・アイコン表示・幅可変）をドロワー内では打ち消す */
  .nav-drawer__ctas .header-cta {
    flex-direction: row;
    padding: 0 24px;
    gap: 0;
  }
  .nav-drawer__ctas .header-cta__icon { display: none; }
  .nav-drawer__ctas .header-cta__label { font-size: 14px; letter-spacing: 2px; }
  /* SPではヘッダーから隠している資料ダウンロードも、ドロワーでは必ず出す */
  .nav-drawer__ctas .header-cta--doc { display: inline-flex; }
}

@media (prefers-reduced-motion: reduce) {
  .nav-drawer__panel,
  .nav-drawer__scrim,
  .header-menu span { transition: none; }
}

/* ============================================================
   FOOTER   —  背景は全幅 / 中身は --shell で中央寄せ
   ============================================================ */
.footer {
  width: 100%;
  background: var(--teal-900);
  color: #fff;
}
.footer__inner {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  /* 上下は非対称。下は区切り線を消してコピーライト1行だけになったので、
     上と同値(100px)だと下に68pxの空きが残って間延びして見えた。
     上の下限は56→80px。SPでは 8vw が30pxにしかならず下限が効くため、
     直前のSNSカードとナビが詰まって見えていた */
  padding: clamp(80px, 8vw, 100px) var(--edge) clamp(24px, 2.5vw, 36px);
  display: flex;
  flex-direction: column;
  gap: clamp(48px, 7vw, 80px);
}
.footer__top {
  display: flex;
  flex-direction: column;
  gap: 48px;
}
.footer__nav {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(40px, 8vw, 80px);
}
/* フォントは body の --font-jp（Noto Sans JP）を継承させる。
   以前ここだけ --font-maru（Zen Maru Gothic）を指定していて、
   フッターのメニューだけ字面が丸くサイト内で浮いていた。
   --font-maru はヒーローの「人を想う」など意図的なアクセント箇所に限定する */
/* 文字は左揃え。中央に置くのは「メニュー全体」で、列の中身ではない
   （.footer__nav 側の justify-content: center が担当）。
   見出しとリンクの頭が縦に揃うので、3列が読み取りやすくなる */
.footer__col {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
  gap: 16px;
}
/* SERVICE / ABOUT / SUPPORT はリンクではなく見出し。押せそうに見えないよう
   リンクより沈ませて「ラベル」であることを示す（PC・SP共通）。
   ⚠️ opacity 0.9 では効かない。見出しは bold(700)・リンクは 400 で、
   0.9 だと見た目の明度差が 24/255（約9%）しかなく、太さの強さに打ち消されて
   逆に浮いて見える（実測）。0.7 で差が 72/255（約28%）になり、
   はっきり一段沈む。背景 #0e3b34 とのコントラストは 8:1 以上あり可読性も十分 */
.footer__heading { font-weight: 700; font-size: 12px; opacity: 0.7; }
.footer__col a { font-size: 13px; }
.footer__col a:hover { text-decoration: underline; }

/* SPのフッターナビは SERVICE/ABOUT/SUPPORT を3列横並びにする。
   ロゴは footer__top から外し、コピーライト直上に移した（下の .footer__logo） */
@media (max-width: 599.98px) {
  .footer__nav {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
  }
  .footer__col { min-width: 0; }
}

/* コピーライト直上のロゴ。SP・PCとも中央。
   .footer__bottom（flex column・gap 16px）の1つ目の子。
   縦組みなのでコピーライトとは少しだけ離す（16+8=24px） */
.footer__logo {
  display: block;
  width: fit-content;
  margin: 0 auto 8px;
}
.footer__logo img { display: block; width: 108px; height: auto; }

/* 区切り線は削除済み。上の余白だけでナビと切り分ける
   （利用規約／プライバシーポリシーも削除したので中身はコピーライト1行のみ）。
   線が無くなって間が開きすぎたので、区切り線があった頃の40pxから32px詰めて8pxに */
.footer__bottom {
  padding-top: 8px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  font-size: 11px;      /* フォントはメニューと同じく --font-jp を継承 */
  text-align: center;   /* コピーライトは中央 */
  /* 見出し（.footer__heading）と同じく、押せるリンクより一段沈ませる */
  opacity: 0.9;
}

/* ============================================================
   共通のレスポンシブ拡張
   ============================================================ */

@media (min-width: 960px) {
  /* PCの本文サイズを2pxずつ下げる（18@1440→16 / 16@1440→14） */
  :root {
    --fs-body: clamp(13px, 1.11vw, 21px);
    --fs-body-sm: clamp(11px, 0.97vw, 18px);
  }

  /* 見出し：左にタイトル / 右に本文 */
  .section-head {
    flex-direction: row;
    gap: 40px;
    align-items: flex-start;
  }
  .section-head__ttl { width: 340px; flex-shrink: 0; }
  .section-head__body { flex: 1; }
  .section-head--column { flex-direction: column; gap: 24px; }
  .section-head--column .section-head__ttl { width: 100%; }

  /* FOOTER：ロゴは footer__top から抜けてコピーライト直上へ移ったので、
     残ったナビ3列を中央に置く（以前はロゴと左右に振り分けていた） */
  .footer__nav { justify-content: center; }

  /* Clients & Worksの実績カード見出しはPCのみ2px小さく。
     --fs-ttl は他の見出し（pillar__catchなど）でも共用のトークンなので、
     トークン自体は変えずこのセレクタだけ上書きする */
  .work-card__title { font-size: calc(var(--fs-ttl) - 2px); }
}

/* ==============================================
   共通コンポーネント：CONTACT（お問い合わせ・SNS）
   TOP（Figma node 630:182）とnews-detail.htmlで共用。
   フッター直前のプレフッターCTAとして使う。
   ============================================== */
.contact {
  position: relative;
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding: var(--pad-section) var(--edge);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(40px, 6vw, 64px);
  /* 透かし文字は画面幅100%まで背景としてはみ出させるため、ここではクリップしない。
     横スクロール対策は body の overflow-x:hidden に任せる */
}

.contact__stage {
  position: relative;
  width: 100%;
  max-width: 860px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(48px, 9vw, 130px) 0;
}
.contact__bg-text {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100vw; /* stageの箱幅を無視して画面幅100%まで背景として広げる */
  transform: translate(-50%, -50%);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-en-serif);
  font-weight: 400;
  font-size: clamp(40px, 11.5vw, 200px); /* 画面幅いっぱいを基準に比例スケール */
  line-height: 1.1;
  letter-spacing: 4.66px;
  color: var(--neutral-900);
  opacity: 0.1;
  white-space: nowrap;
  pointer-events: none;
}
/* 改行はSPのみ。PCは1行のまま */
.contact__bg-br { display: none; }
/* SPは1行だと43pxまでしか大きくできず、ピルとちょうど同じ高さに重なって
   「背景の透かし」ではなく文字の被りに見えていた。
   CONTACT / US の2行に割って画面幅いっぱいまで拡大し、
   ピルの上下にはみ出させることで背景として成立させる */
@media (max-width: 599.98px) {
  .contact__bg-text {
    /* ⚠️ display:flex のままだとテキストが匿名フレックスアイテムになり
       <br> で改行されない。block に戻して text-align で中央に置く */
    display: block;
    text-align: center;
    white-space: normal;
    /* 17vw＝375pxで64px。最長行「CONTACT」の必要幅356pxが画面幅375pxに収まる上限。
       これ以上上げると横スクロールが出る（19vwで396px必要になり溢れた）。
       1行だった頃の43pxに対して1.5倍 */
    font-size: 17vw;
    line-height: 0.95;
    letter-spacing: 2px;
  }
  .contact__bg-br { display: inline; }
}
/* 3つのティール装飾ブロック：ピルの周りに浮かせる（%位置なので画面幅に比例） */
/* ティール装飾3枚は撤去（背景の透かし文字＋ピルのみ残す） */
.contact__deco { display: none; }

/* アンバー（黄）のクレイ質感（insetの数値は他のボタンと統一）。
   ホバーで沈み、クリックで内側の陰影が反転して押し込み。
   配色は .button-cta--amber ／ .header-cta--amber と同じで、
   「相談する」導線の色をサイト内で揃えている（以前はここだけ白だった）。
   --clay-side は押し出し影＝ボタンの側面の色で、地色に合わせて濃い黄土色にする
   （白地時代の #d9d1bd のままだとアンバーの下に灰色の縁が出て濁る） */
.contact__pill {
  --clay-hl: rgba(255, 255, 255, 0.7);       /* アンバー地：内側ハイライト */
  --clay-lo: rgba(180, 148, 50, 0.35);       /* アンバーのシェード */
  --clay-side: rgba(150, 122, 30, 0.5);      /* 押し出し（側面） */
  /* 矢印（.icon-arrow）は currentColor で塗るので、ここで色を決めておく。
     指定しないとページ既定の --neutral-900 を継承して文字色とズレる */
  color: var(--teal-900);
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: clamp(10px, 1.17vw, 14px);
  background: linear-gradient(#f0d95a, #e7cc3f);
  border-radius: 999px;
  padding: clamp(8px, 0.83vw, 12px) clamp(16px, 1.67vw, 24px);
  box-shadow:
    inset 5px 5px 11px var(--clay-hl),
    inset -6px -6px 12px var(--clay-lo),
    0 5px 4px -2px var(--clay-side),
    0 9px 12px rgba(14, 59, 52, 0.12),
    0 16px 24px rgba(14, 59, 52, 0.12);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.contact__pill:hover {
  transform: translateY(3px);
  box-shadow:
    inset 4px 4px 9px var(--clay-hl),
    inset -5px -5px 10px var(--clay-lo),
    0 3px 3px -1px var(--clay-side),
    0 5px 8px rgba(14, 59, 52, 0.10);
}
.contact__pill:active {
  transform: translateY(5px);
  box-shadow:
    inset 5px 5px 11px var(--clay-lo),
    inset -5px -5px 10px var(--clay-hl),
    0 1px 2px -1px var(--clay-side);
}
.contact__pill-text {
  font-weight: 700;
  font-size: clamp(15px, 1.32vw, 19px);
  line-height: 1.85;
  letter-spacing: 2px;
  /* アンバー地なので、白地時代の --neutral-700（灰）から濃緑へ。
     他のアンバーCTAの文字色（--cta-text）と揃えている */
  color: var(--teal-900);
  white-space: nowrap;
}
/* 矢印は共通の .btn-round--invert（上部で定義）。
   以前はここだけホバー時に背景をティールへ反転させる個別ルールがあり、
   「ホバーは矢印が3px進むだけ」という共通ボタンの挙動から外れて見えた
   （common.css内の .btn-round:hover が全ボタン共通で担っている）。
   個別の色反転は撤去し、他の .btn-round--invert と全く同じホバーに揃えた */

/* SNSカード：中身の幅ぶんだけの「島」として中央に置く。
   フッターとの境界を32px跨ぐ（親セクションの下padding＝--pad-sectionを
   打ち消して32px食い込ませ、z-indexでフッター背景の上に載せる） */
.contact-sns {
  position: relative;
  z-index: 1;
  margin-bottom: calc(-1 * var(--pad-section) - 32px);
  width: fit-content;
  max-width: 100%;
  margin-inline: auto;
  /* 白背景＋虹色リングは上の共有ルール（.logo-card, .contact-sns）が担当。
     ⚠️ ここで background を指定するとリングが消えるので書かないこと */
  border-width: 2px;
  border-radius: var(--radius);
  padding: clamp(36px, 2.22vw, 48px) clamp(40px, 2.78vw, 56px);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(18px, 1.94vw, 28px);
}
.contact-sns__icons { display: flex; flex-wrap: wrap; gap: clamp(20px, 2.78vw, 40px); }
/* SNSボタン：各サービスのブランドカラー（--sns-c）＋CTAと同じクレイ質感。
   内側の左上ハイライト＋右下シェードで「ぷっくり」、外側は押し出し影＋落ち影。
   ホバーで半分沈み、クリックで底まで押し切る（button-cta準拠） */
.sns-btn {
  --sns-c: var(--neutral-900);
  /* flex-shrink:0 と aspect-ratio が要る。既定の flex-shrink:1 だと、
     横幅の足りない枠（service.htmlのContactは2カラムで狭い）で
     幅だけ縮んで 71×76 の楕円になっていた。円は絶対に潰さない */
  flex-shrink: 0;
  width: clamp(40px, 5.28vw, 76px);
  aspect-ratio: 1;
  border-radius: 50%;
  background: var(--sns-c);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow:
    inset 4px 4px 9px rgba(255, 255, 255, 0.38),
    inset -5px -5px 10px rgba(0, 0, 0, 0.30),
    0 6px 5px -2px rgba(0, 0, 0, 0.28),
    0 11px 14px rgba(14, 59, 52, 0.13),
    0 20px 30px rgba(14, 59, 52, 0.14);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
/* SPは下限40pxだと小さく押しにくいので72pxに上げる（PC側の clamp は据え置き）。
   ⚠️ この上書きは .sns-btn の定義より後ろに置くこと。
   同詳細度なので前に置くと clamp に負ける */
@media (max-width: 599.98px) {
  .sns-btn { width: 72px; }
}
.sns-btn:hover {
  transform: translateY(3px);
  box-shadow:
    inset 3px 3px 7px rgba(255, 255, 255, 0.38),
    inset -4px -4px 8px rgba(0, 0, 0, 0.30),
    0 3px 3px -1px rgba(0, 0, 0, 0.26),
    0 6px 9px rgba(14, 59, 52, 0.11),
    0 12px 18px rgba(14, 59, 52, 0.11);
}
.sns-btn:active {
  transform: translateY(5px);
  box-shadow:
    inset 4px 4px 9px rgba(0, 0, 0, 0.30),
    inset -4px -4px 8px rgba(255, 255, 255, 0.30),
    0 1px 2px -1px rgba(0, 0, 0, 0.26),
    0 3px 5px rgba(14, 59, 52, 0.10);
}
.sns-btn svg { width: 38%; height: 38%; }
.sns-btn--in { --sns-c: #0a66c2; }
.sns-btn--yt { --sns-c: #ff0000; }
.contact-sns__text { text-align: center; }
.contact-sns__catch {
  font-size: calc(var(--fs-ttl) - 4px);
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: 2px;
  color: var(--neutral-900);
}
.contact-sns__lead {
  margin-top: 6px;
  font-size: var(--fs-sm);
  line-height: 1.85;
  letter-spacing: 2px;
  color: var(--neutral-700);
}

/* ============================================================
   CLIENTS & WORKS（共通コンポーネント）
   ------------------------------------------------------------
   index.html と service.html で同じものを使う。以前は styles.css
   （TOP専用）にあり、service.html側は .client-logos / .case-card という
   別実装になっていて見た目が揃っていなかったため、こちらへ一本化した。
   ・マークアップは index.html の <section class="clients"> をそのまま複製する
   ・横送りのJSは common.js（#worksNav 一式）
   ・ロゴの色付きシンボルは #deal-symbol-tint のSVGスプライトを各ページに置くこと
   TOP固有の差分（NEWSの重なりぶんの下padding）だけ styles.css 側に残してある
   ============================================================ */
/* ============================================================
   CLIENTS & WORKS
   ロゴ帯・実績カード＝画面幅いっぱい / 見出し＝最大幅・中央寄せ
   ============================================================ */
.clients {
  width: 100%;
  /* 上下ともゆったり（144px@1440）。TOPだけは直後のNEWSが -64px 重なるので
     styles.css 側で padding-bottom を上書きしている */
  padding: clamp(72px, 10vw, 176px) 0;
  display: flex;
  flex-direction: column;
  gap: clamp(40px, 4.5vw, 64px);
}
/* 見出し＋リード文：シェル幅で中央寄せ（全セクション共通の縦ラインに合わせる） */
.clients .section-head--column {
  width: 100%;
  max-width: min(var(--shell), calc(100% - 2 * var(--edge)));
  margin-inline: auto;
}
.clients__desc {
  font-size: var(--fs-body);
  line-height: 1.85;
  letter-spacing: 2px;
  color: var(--neutral-700);
  opacity: 0.8;
}

@media (prefers-reduced-motion: reduce) {
}

/* 実績カード：シェルライン起点の横並びレール。
   カードが増えると右へ伸び、画面からはみ出す分は横スクロール＋ナビで送る */
.works {
  display: flex;
  gap: clamp(24px, 2.78vw, 40px);
  width: 100%;
  /* 先頭カードの左端を見出しと同じ縦ライン（シェルライン）に揃える */
  padding-inline: max(var(--edge), calc((100% - var(--shell)) / 2));
  overflow-x: auto;
  overflow-y: hidden;
  /* スナップは使わない：はみ出しが1カード未満のときに吸い戻されるため。送りはナビボタンで行う */
  scrollbar-width: none; /* スクロールバーは隠す */
  /* hoverの浮き・影・reveal入場が上下で切れないよう余白を確保し、負マージンで相殺 */
  padding-block: 12px 48px;
  margin-block: -12px -48px;
}
.works::-webkit-scrollbar { display: none; }
/* カード横送りナビ（はみ出す枚数の時だけJSが表示） */
.works-nav {
  width: 100%;
  max-width: min(var(--shell), calc(100% - 2 * var(--edge)));
  margin-inline: auto;
  margin-bottom: calc(-1 * clamp(16px, 2vw, 32px)); /* カードとの間を少し詰める */
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 16px;
}
.works-nav[hidden] { display: none; }
.works-nav__count {
  font-family: var(--font-inter);
  font-size: var(--fs-sm);
  letter-spacing: 3px;
  color: var(--neutral-700);
}
.works-nav__btn--prev .icon-arrow { transform: rotate(180deg); }
.work-card {
  min-width: 0;
  flex: 0 0 min(320px, 82vw); /* 1枚の幅。増えた分は右へ */
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  gap: 16px;
  border-radius: 20px;
  box-shadow: 0 8px 22px rgba(43, 37, 32, 0.06);
  overflow: hidden;
  transition: translate 0.25s ease, box-shadow 0.25s ease;
}
/* ⚠️ ホバーの浮き上がりは撤去。初期リリースでは事例の下層ページを出さないため
   カードを <a> から <div> に変えており、押せないのに反応すると導線に見えて紛らわしい。
   下層ページを用意したら <a> に戻して、この浮きも一緒に復活させる */
/* hover用transitionがrevealのフェードを上書きしないよう統合
   （opacity/transformにのみ出現ディレイを適用） */
.work-card.reveal {
  transition: translate 0.25s ease, box-shadow 0.25s ease,
              opacity 0.7s cubic-bezier(0.16, 0.84, 0.44, 1),
              transform 0.7s cubic-bezier(0.16, 0.84, 0.44, 1);
  transition-delay: 0s, 0s, var(--reveal-delay, 0s), var(--reveal-delay, 0s);
}
.work-card--purple { background: #920897; }
.work-card--yellow { background: #edc700; }
.work-card--green  { background: #009b27; }
.work-card--teal   { background: var(--teal-300); }
.work-card--blue   { background: #436fc0; }
.work-card--kot    { background: #1d9e48; } /* クラス名は旧・実ロゴ紐付け時代の名残（ロゴ自体は撤去済み） */
.work-card--red    { background: #c4161c; }
.work-card--darkteal { background: #00615f; }

.work-card__title {
  padding: clamp(24px, 2.2vw, 40px) clamp(24px, 2.2vw, 40px) 0; /* 32px@1440 */
  font-size: var(--fs-ttl);
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: 2px;
  color: #fff;
}
.work-card--yellow .work-card__title { color: var(--neutral-900); }

/* 実クライアントのロゴ＋Dealシンボルを重ねた白いモチーフ（.work-card__blob /
   __blob-bg / __logo / __logo-img* / __mark）は、ロゴ掲載の許可が取れるまで
   カードから撤去（index.html / service.html 両方）。掲載可否が決まったら
   ⚠️ card-blob.svg・client-logo-* の素材は削除済み。戻す場合は素材から作り直す */

/* 下端の "Business / Strategy Design" 黒帯を削除したので、
   .work-card__cat が担っていた下側の余白(padding:8px16px)ぶんを
   ここで確保する（無いと本文がカード下端にそのまま付いてしまう） */
.work-card__meta { padding: 0 clamp(24px, 2.2vw, 40px) clamp(24px, 2.2vw, 40px); }
.work-card__tags { display: flex; gap: 8px; flex-wrap: wrap; }
.tag {
  background: #fff;
  border-radius: 999px;
  padding: 5px 11px;
  font-size: 11px;
  font-weight: 700;
  color: var(--neutral-700);
  white-space: nowrap;
}
.work-card__desc {
  display: block;
  padding-top: 12px;
  font-size: 13.5px;
  line-height: 1.85;
  color: #fff;
}
.work-card--yellow .work-card__desc { color: var(--neutral-800); }
.work-card--teal .work-card__desc { color: var(--neutral-700); }

/* ---- 配下ページ（<main>でラップしているページ）での縦ライン合わせ ----
   TOPは .clients の見出し／先頭カードを「--shell を画面中央に置いたライン」
   （1425pxで113px）に揃えている。一方 service.html などの配下ページは .shell
   （--shell の内側にさらに --edge のpadding）で組んでいるため152pxになる。
   このままでは同一ページ内で40pxずれるので、配下ページだけ --edge ぶん内側へ寄せる。
   TOPには <main> が無いのでこのルールは当たらない＝TOPの見た目は変わらない */
main .clients .section-head--column {
  max-width: var(--shell);
  padding-inline: var(--edge);
}
main .clients .works {
  padding-inline: calc(max(0px, (100% - var(--shell)) / 2) + var(--edge));
}
main .clients .works-nav {
  max-width: var(--shell);
  padding-inline: var(--edge);
}

/* 実績カードは左から順番に現れる */
.works .work-card:nth-child(2) { --reveal-delay: 0.15s; }
.works .work-card:nth-child(3) { --reveal-delay: 0.3s; }
.works .work-card:nth-child(4) { --reveal-delay: 0.45s; }

/* ==============================================
   共通コンポーネント：フォーム部品
   contact.html（お問い合わせ）と download.html（資料DL）で共用。
   元は contact.css にあったが2ページで使うようになったため移設した。
   ページ側は外側の箱（.contact-form / .download-form）だけ持つ
   ============================================== */
.form-field { display: flex; flex-direction: column; gap: 10px; }
.form-field__label {
  font-weight: 700;
  font-size: var(--fs-body-sm);
  letter-spacing: 2px;
  color: var(--teal-900);
}
.form-field__required { color: var(--accent-pink); margin-left: 2px; }
/* 任意項目のラベル。必須(*)と区別できるよう、控えめな枠つきの小さなバッジにする */
.form-field__optional {
  margin-left: 6px;
  padding: 1px 6px;
  border-radius: 4px;
  border: 1px solid rgba(14, 59, 52, 0.3);
  font-size: 11px;
  font-weight: 400;
  letter-spacing: 0.5px;
  color: rgba(14, 59, 52, 0.6);
  vertical-align: middle;
}
/* 入力欄の下に添える補足（例：資料DLの「メールでも送ります」） */
.form-field__note {
  font-size: var(--fs-sm);
  line-height: 1.7;
  letter-spacing: 1px;
  color: var(--neutral-700);
}

.form-field__control {
  width: 100%;
  padding: 14px 18px;
  border: 1px solid rgba(14, 59, 52, 0.22);
  border-radius: 12px;
  background: #fff;
  font-family: var(--font-jp);
  font-size: var(--fs-body-sm);
  line-height: 1.6;
  color: var(--neutral-900);
  transition: border-color 0.2s ease;
}
.form-field__control::placeholder { color: var(--neutral-700); opacity: 0.7; }
.form-field__control:focus { outline: none; border-color: var(--teal-300); }

.form-field__control--textarea { min-height: 180px; resize: vertical; }

/* select：ネイティブ矢印を消し、共通の矢印表現に寄せた簡易インジケーターに差し替え */
.form-select { position: relative; }
.form-select select.form-field__control {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 44px;
  cursor: pointer;
}
.form-select::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 18px;
  width: 10px;
  height: 10px;
  border-right: 2px solid var(--teal-900);
  border-bottom: 2px solid var(--teal-900);
  transform: translateY(-70%) rotate(45deg);
  pointer-events: none;
}

/* ============ 「弊社をどこで知りましたか」チェックリスト ============ */
.form-checklist {
  margin-top: 12px;
  display: grid;
  gap: 14px;
}
.form-checklist__item {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: var(--fs-body-sm);
  letter-spacing: 1px;
  color: var(--neutral-800);
  cursor: pointer;
}
.form-checklist__item input,
.form-consent input {
  width: 18px;
  height: 18px;
  accent-color: var(--teal-300);
  cursor: pointer;
}

@media (min-width: 600px) {
  .form-checklist { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}

/* ============ プライバシー同意 ============ */
.form-consent {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: var(--fs-sm);
  letter-spacing: 1px;
  color: var(--neutral-800);
  cursor: pointer;
}
.form-consent a { color: #3a87f1; text-decoration: underline; text-underline-offset: 2px; }
.form-consent a:hover { opacity: 0.75; }


/* 送信結果の通知（contact.html のコメント参照：hidden を付けないこと） */
.form-status {
  align-self: center;
  max-width: 40em;
  margin-top: 4px;
  font-size: var(--fs-body-sm);
  line-height: 1.8;
  letter-spacing: 1px;
  text-align: center;
  color: var(--teal-400);
}
/* 空のときは余白ごと消す。hidden を使わないのは aria-live を
   生かすため（contact.html のコメント参照） */
.form-status:empty { margin: 0; }
.form-status.is-error { color: #c4161c; }

/* ============================================================
   Contact＋SNS パネル（下層ページ共通・フッター直前に置く）
   ============================================================ */
.contact-panel-section { margin-block: clamp(48px, 6vw, 96px) clamp(56px, 8.33vw, 160px); }
.contact-panel {
  padding: var(--pad-card);
  border-radius: var(--radius-lg);
  background: linear-gradient(160deg, var(--teal-300) 0%, var(--teal-400) 100%);
  color: #fff;
}
.contact-panel__main {
  display: flex;
  align-items: center;
  gap: 20px;
  color: inherit;
}
.contact-panel__texts { display: block; }
/* 3つとも1段階大きく（--fs-jp-md → --fs-jp-lg / --fs-body-sm → --fs-body） */
.contact-panel__en {
  display: block;
  font-family: var(--font-en-serif);
  font-size: var(--fs-jp-lg);
  letter-spacing: 3px;
}
.contact-panel__jp {
  display: block;
  margin-top: 10px;
  font-size: var(--fs-body);
  font-weight: 700;
  letter-spacing: 2px;
}
.contact-panel__body {
  display: block;
  margin-top: 6px;
  font-size: var(--fs-body);
  line-height: 1.9;
  letter-spacing: 1px;
}

/* ---- SNS（白の内カード） ---- */
.sns {
  margin-top: clamp(20px, 2.5vw, 36px);
  padding: clamp(20px, 2.2vw, 32px);
  border-radius: var(--radius);
  background: #fff;
}
/* リード文は「行の左端は揃えたまま、塊としてカード中央に置く」。
   text-align:center にすると行ごとに左端がバラけるので、幅をfit-contentにして
   margin:auto で中央に寄せている（アイコン行の中央配置と縦のラインが合う） */
.sns__lead {
  width: fit-content;
  margin-inline: auto;
  font-size: var(--fs-body-sm);
  line-height: 1.9;
  letter-spacing: 1px;
  color: var(--neutral-800);
  text-align: left;
}
/* タイトル行（1文目）は太字で強調 */
.sns__lead-title {
  font-weight: 700;
  color: var(--teal-900);
}
/* タイトル下の説明行は1段階小さく。
   ⚠️ --fs-sm は使わない：960px以上で --fs-body-sm が clamp(11px,.97vw,18px)に
   上書きされ、--fs-sm（clamp(12px,.97vw,18px)）と最大値・vw係数が同じになるため、
   画面幅によっては「1段階小さいはずのfs-smが逆にfs-body-smより大きくなる」
   （実測：985pxでタイトル11px・本文12pxと逆転）。
   親の font-size（=.sns__lead の --fs-body-sm）からの相対値にして、
   どの画面幅でも確実にタイトルより小さくする */
.sns__lead-body {
  display: inline-block;
  margin-top: 4px;
  font-size: 0.85em;
}
/* アイコン本体（.sns-btn / .contact-sns__icons）は common.css 側の定義を使う。
   ここでは見出しとの間隔だけ調整する */
/* このページのContactはPCで2カラム＝白カードの内側が約350pxしかない。
   共通の円76px×4＋gap19px×3＝361pxで1pxだけ溢れて3+1に折り返していたため、
   ここだけ円を小さくしgapも詰めて必ず4つ横一列に収める。
   flex-wrap:nowrap で「あと少し足りない」時に折り返さず詰まる側に倒す
   （1265px幅で 58px×4＋15px×3＝277px。カードが狭い側に振れても余裕がある） */
.sns .contact-sns__icons {
  margin-top: 16px;
  flex-wrap: nowrap;
  justify-content: center;   /* 4つの並びをカードの中央に */
  gap: clamp(10px, 1.2vw, 18px);
}
.sns .sns-btn { width: clamp(40px, 4.6vw, 62px); }

/* 768px以上：SNSを右に回して2カラム化。
   ⚠️ service.css から移設したもの。元は service.css の 768px ブロックにあった */
@media (min-width: 768px) {
  .contact-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(24px, 3vw, 48px);
    align-items: center;
  }
  .sns { margin-top: 0; }
}
