/* =========================================================
   下層ページ用の部品（トークンと共通シェルは top.css 側）
   使い方: <link css/top.css> の後に読み込む。body に data-page / data-depth を付ける。
   色・字サイズは top.css の :root 変数だけを使う（生の色を書かない）
   ========================================================= */

/* --- ページ見出し（全下層ページの先頭） --- */
.phero { position: relative; min-height: clamp(280px, 34vw, 420px); display: flex; align-items: flex-end; padding: calc(var(--hd-h) + 56px) var(--gut) clamp(40px, 4vw, 64px); color: #fff; overflow: hidden; background: var(--navy-900); }
.phero::before { content: ""; position: absolute; inset: 0; background: radial-gradient(60% 80% at 78% 12%, rgba(124, 86, 168, .45), transparent 65%), radial-gradient(70% 90% at 12% 100%, rgba(61, 90, 171, .5), transparent 70%), linear-gradient(180deg, #0b1438, #0a1130); }
.phero__in { position: relative; width: 100%; max-width: 1560px; margin-inline: auto; }
.phero__en { font-family: var(--f-en); font-weight: var(--fw-medium); font-size: var(--fs-eyebrow); letter-spacing: .24em; color: rgba(255,255,255,.7); display: flex; align-items: center; gap: 22px; }
.phero__en .bar { width: 54px; }
.phero h1 { margin-top: 18px; font-weight: var(--fw-bold); font-size: var(--fs-display); line-height: 1.32; letter-spacing: .02em; }
.phero__lead { margin-top: 18px; max-width: 46em; font-size: var(--fs-lead); line-height: 1.95; color: rgba(255,255,255,.88); }
.crumbs { position: relative; margin-top: 22px; display: flex; flex-wrap: wrap; gap: 6px 10px; font-size: var(--fs-eyebrow); color: rgba(255,255,255,.6); }
.crumbs a:hover { color: #fff; }
.crumbs li + li::before { content: "／"; margin-right: 10px; color: rgba(255,255,255,.35); }
.crumbs ol, .crumbs ul { display: contents; }
.crumbs li { list-style: none; display: flex; align-items: center; }

/* --- セクション --- */
.sec { padding-block: clamp(48px, 5.5vw, 96px); }
.sec--tint { background: var(--paper); }
.sec--dark { background: var(--navy-900); color: #fff; }
.sec--dark .lead, .sec--dark .prose { color: rgba(255,255,255,.86); }
.sec__in { max-width: 1560px; margin-inline: auto; }
.sec__head { display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; margin-bottom: clamp(24px, 2.4vw, 40px); }
.sec__head .h2 { margin-top: 12px; }
.sec--narrow .sec__in { max-width: 900px; }

/* --- 本文（記事・規約・お知らせ） --- */
.prose { font-size: var(--fs-body-sub); line-height: 2; color: var(--ink-2); }
.prose > * + * { margin-top: 1.4em; }
.prose h2 { margin-top: 2.2em; font-size: var(--fs-h3); font-weight: var(--fw-bold); line-height: 1.5; color: var(--ink); letter-spacing: .02em; }
.prose h2::after { content: ""; display: block; width: 32px; height: 2px; margin-top: 14px; background: var(--grad); border-radius: 2px; }
.prose h3 { margin-top: 1.8em; font-size: var(--fs-item-title); font-weight: var(--fw-bold); line-height: 1.6; color: var(--ink); }
.prose p { color: inherit; }
.prose strong, .prose b { font-weight: var(--fw-bold); color: var(--ink); }
.prose a { color: var(--c1); border-bottom: 1px solid currentColor; }
.prose a:hover { color: var(--c3); }
.prose ul, .prose ol { padding-left: 1.4em; }
.prose li + li { margin-top: .5em; }
.prose ul > li { list-style: none; position: relative; }
.prose ul > li::before { content: ""; position: absolute; left: -1.1em; top: .82em; width: 5px; height: 5px; border-radius: 50%; background: var(--c3); }
.prose ol { list-style: decimal; }
.prose ol > li::marker { color: var(--c1); font-family: var(--f-en); font-weight: var(--fw-semibold); }
.prose blockquote { padding: 4px 0 4px 20px; border-left: 2px solid var(--c3); color: var(--ink); }
/* height:auto が要る。top.css の `img, video { max-width:100% }` だけだと、
   width/height 属性を持つ記事画像が横だけ縮んで縦に伸びる。 */
.prose img { height: auto; border-radius: 6px; }
.prose figure { margin-top: 1.8em; }
.prose figcaption { margin-top: 10px; font-size: var(--fs-eyebrow); color: var(--ink-3); }
.prose hr { border: 0; border-top: 1px solid var(--line); margin-block: 2.2em; }
.sec--dark .prose a { color: #b9c6ff; }
.sec--dark .prose strong, .sec--dark .prose h2, .sec--dark .prose h3 { color: #fff; }

/* --- カード（一覧・特徴） --- */
.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr)); gap: clamp(14px, 1.6vw, 24px); }
.cards--2 { grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr)); }
.card { position: relative; display: flex; flex-direction: column; padding: clamp(22px, 2.2vw, 34px); background: #fff; border: 1px solid var(--line); border-radius: 8px; transition: transform .5s var(--ease), box-shadow .5s var(--ease); }
a.card:hover { transform: translateY(-4px); box-shadow: 0 22px 44px -30px rgba(20, 30, 80, .45); }
.card__no { font-family: var(--f-en); font-weight: var(--fw-semibold); font-size: var(--fs-label); letter-spacing: .1em; color: var(--c3); }
.card__title { margin-top: 8px; font-size: var(--fs-item-title); font-weight: var(--fw-bold); line-height: 1.5; color: var(--ink); }
.card__title span { display: block; font-family: var(--f-en); font-weight: var(--fw-medium); font-size: var(--fs-eyebrow); letter-spacing: .2em; color: var(--ink-3); margin-top: 4px; }
.card__text { margin-top: 12px; font-size: var(--fs-body); line-height: 1.85; color: var(--ink-2); }
.card__img { margin: calc(clamp(22px, 2.2vw, 34px) * -1) calc(clamp(22px, 2.2vw, 34px) * -1) clamp(18px, 1.8vw, 24px); aspect-ratio: 1.9; overflow: hidden; border-radius: 8px 8px 0 0; background: var(--paper); }
.card__img img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s var(--ease); }
a.card:hover .card__img img { transform: scale(1.05); }
.card .link-u { margin-top: auto; padding-top: 18px; align-self: flex-start; }
.card--flat { border: 0; background: transparent; padding: 0; }
.card--dark { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
.sec--dark .card__title, .sec--dark .card--dark .card__title { color: #fff; }
.sec--dark .card__text { color: rgba(255,255,255,.78); }

/* --- 手順（STEP） --- */
.steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr)); gap: clamp(14px, 1.6vw, 26px); counter-reset: step; }
.step { position: relative; padding-top: 26px; border-top: 2px solid var(--line); }
.step::before { counter-increment: step; content: "STEP " counter(step, decimal-leading-zero); position: absolute; top: -12px; left: 0; padding-right: 12px; background: #fff; font-family: var(--f-en); font-weight: var(--fw-semibold); font-size: var(--fs-label); letter-spacing: .12em; color: var(--c3); }
.sec--tint .step::before { background: var(--paper); }
.step h3 { font-size: var(--fs-card-title); font-weight: var(--fw-bold); color: var(--ink); line-height: 1.5; }
.step p { margin-top: 10px; font-size: var(--fs-body); line-height: 1.85; color: var(--ink-2); }

/* --- 料金プラン --- */
.plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: clamp(14px, 1.6vw, 24px); align-items: stretch; }
.plan { display: flex; flex-direction: column; padding: clamp(24px, 2.4vw, 36px); border: 1px solid var(--line); border-radius: 8px; background: #fff; }
.plan--reco { border-color: transparent; box-shadow: 0 0 0 2px var(--c3) inset; }
.plan__tag { font-family: var(--f-en); font-weight: var(--fw-semibold); font-size: var(--fs-label); letter-spacing: .12em; color: var(--c1); }
.plan__name { margin-top: 10px; font-size: var(--fs-item-title); font-weight: var(--fw-bold); color: var(--ink); }
.plan__price { margin-top: 14px; font-family: var(--f-en); font-weight: var(--fw-bold); font-size: var(--fs-h3); line-height: 1.1; color: var(--ink); font-variant-numeric: tabular-nums; }
.plan__price small { font-family: var(--f-jp); font-weight: var(--fw-regular); font-size: var(--fs-body); color: var(--ink-2); margin-left: 6px; }
.plan__note { margin-top: 8px; font-size: var(--fs-eyebrow); color: var(--ink-3); line-height: 1.8; }
.plan__list { margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--line); display: grid; gap: 10px; font-size: var(--fs-body); color: var(--ink-2); }
.plan__list li { position: relative; padding-left: 18px; line-height: 1.8; }
.plan__list li::before { content: ""; position: absolute; left: 0; top: .72em; width: 8px; height: 2px; background: var(--c3); }

/* --- 表 --- */
.table-wrap { overflow-x: auto; }
.table { width: 100%; border-collapse: collapse; font-size: var(--fs-body); line-height: 1.8; }
.table th, .table td { padding: 16px 18px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
.table th { width: 30%; min-width: 120px; font-weight: var(--fw-semibold); color: var(--ink); background: var(--paper); }
.table td { color: var(--ink-2); }
.table--plain th { background: transparent; }

/* --- FAQ --- */
.faq { display: grid; gap: 10px; }
.faq details { border: 1px solid var(--line); border-radius: 8px; background: #fff; }
.faq summary { display: flex; align-items: flex-start; gap: 14px; padding: 18px clamp(18px, 2vw, 28px); font-size: var(--fs-card-title); font-weight: var(--fw-semibold); color: var(--ink); cursor: pointer; list-style: none; line-height: 1.6; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::before { content: "Q"; font-family: var(--f-en); font-weight: var(--fw-bold); color: var(--c3); }
.faq summary::after { content: ""; width: 10px; height: 10px; margin-left: auto; border-right: 2px solid var(--ink-3); border-bottom: 2px solid var(--ink-3); transform: rotate(45deg); transition: transform .3s var(--ease); flex: none; margin-top: 6px; }
.faq details[open] summary::after { transform: rotate(-135deg); }
.faq__a { display: flex; gap: 14px; padding: 0 clamp(18px, 2vw, 28px) 20px; font-size: var(--fs-body); line-height: 1.95; color: var(--ink-2); }
.faq__a::before { content: "A"; font-family: var(--f-en); font-weight: var(--fw-bold); color: var(--c1); }

/* --- 一覧（お知らせ・ブログ・記事） --- */
.list { display: grid; gap: 0; border-top: 1px solid var(--line); }
.list__item { border-bottom: 1px solid var(--line); }
.list__item a { display: grid; grid-template-columns: clamp(120px, 14vw, 220px) minmax(0, 1fr) auto; align-items: center; gap: clamp(16px, 2vw, 32px); padding: clamp(16px, 1.6vw, 24px) 0; }
/* height:auto が要る。img の width/height 属性は presentational hint として height を決めてしまい、
   max-width で縮むと縦がそのまま比例して伸びる（aspect-ratio が使われない）。 */
.list__item img { width: 100%; height: auto; aspect-ratio: 1.6; object-fit: cover; border-radius: 5px; background: var(--paper); }
.list__item h3 { margin-top: 8px; font-size: var(--fs-card-title); font-weight: var(--fw-bold); line-height: 1.6; color: var(--ink); }
.list__item .arw { color: var(--ink); }
.list__item a:hover h3 { color: var(--c1); }

/* --- ページ送り・戻る --- */
.pager { display: flex; justify-content: space-between; gap: 16px; padding-top: clamp(28px, 3vw, 48px); border-top: 1px solid var(--line); margin-top: clamp(32px, 3.4vw, 56px); }

/* --- フォーム（お問い合わせ） --- */
.form { display: grid; gap: clamp(16px, 1.8vw, 24px); max-width: 780px; }
.form__row { display: grid; gap: 8px; }
.form label { font-size: var(--fs-body); font-weight: var(--fw-semibold); color: var(--ink); }
.form .req { margin-left: 8px; padding: 2px 8px; border-radius: 999px; background: var(--c3); color: #fff; font-size: 11px; font-weight: var(--fw-semibold); letter-spacing: .06em; }
.form input, .form select, .form textarea { width: 100%; padding: 14px 16px; font: inherit; font-size: var(--fs-body); color: var(--ink); background: #fff; border: 1px solid var(--line); border-radius: 6px; transition: border-color .25s, box-shadow .25s; }
.form input:focus, .form select:focus, .form textarea:focus { outline: none; border-color: var(--c1); box-shadow: 0 0 0 3px rgba(61, 90, 171, .14); }
.form textarea { min-height: 180px; resize: vertical; }
.form__note { font-size: var(--fs-eyebrow); color: var(--ink-3); line-height: 1.8; }
.form__submit { justify-self: start; }

/* --- 小物 --- */
.tagline { font-family: var(--f-en); font-size: var(--fs-eyebrow); letter-spacing: .22em; color: var(--ink-3); }
.note { font-size: var(--fs-eyebrow); color: var(--ink-3); line-height: 1.85; }
.center { text-align: center; }
.stack-lg > * + * { margin-top: clamp(28px, 3vw, 48px); }

@media (max-width: 900px) {
  .sec__head { flex-direction: column; align-items: flex-start; }
  .list__item a { grid-template-columns: 110px minmax(0, 1fr); }
  .list__item .arw { display: none; }
  .phero { min-height: 0; padding-top: calc(var(--hd-h) + 36px); }
}

/* --- フォームの同意チェック（contact.html 用に追記・既存セレクタは変更なし）
       .form input の width:100%/padding がチェックボックスにも効いてしまうため、ここだけ打ち消す --- */
.form__consent label { display: flex; align-items: flex-start; gap: 12px; font-weight: var(--fw-regular); font-size: var(--fs-body); line-height: 1.85; color: var(--ink-2); cursor: pointer; }
.form__consent input[type="checkbox"] { width: 18px; height: 18px; flex: none; margin: .34em 0 0; padding: 0; accent-color: var(--c1); }
.form__consent a { color: var(--c1); border-bottom: 1px solid currentColor; }
.form__consent a:hover { color: var(--c3); }

/* --- 導入事例のロゴ一覧（cases/index.html）
   TOPの .band（流れる帯）は社名を文字で出さないので、ロゴ＋社名を対で並べる静的グリッドを追加。
   既存セレクタは変更していない（末尾追記のみ）。 --- */
.logos { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(clamp(150px, 14vw, 200px), 100%), 1fr)); gap: clamp(12px, 1.4vw, 20px); }
.logos__item { display: flex; flex-direction: column; align-items: center; gap: clamp(14px, 1.4vw, 20px); padding: clamp(20px, 2vw, 30px) clamp(12px, 1.4vw, 18px); background: #fff; border: 1px solid var(--line); border-radius: 8px; }
.logos__logo { display: grid; place-items: center; width: 100%; height: clamp(46px, 4.2vw, 62px); }
.logos__logo img { width: 100%; height: 100%; object-fit: contain; object-position: center; }
.logos__name { font-size: var(--fs-body); font-weight: var(--fw-semibold); line-height: 1.6; color: var(--ink); text-align: center; word-break: normal; overflow-wrap: anywhere; }

/* --- カード内の役職（about/index.html のメンバーカード）
   .card__no は英数字用（Montserrat・字間.1em）なので、和文の役職には字間の詰まった専用クラスを使う。
   既存セレクタは変更していない（末尾追記のみ）。 --- */
.card__role { font-size: var(--fs-eyebrow); letter-spacing: .04em; color: var(--ink-3); margin-top: 4px; }

/* --- 会社の数字（recruit/index.html「数字で見るHiroshimAI」）
   本番と同じ dl（dt=ラベル／dd=値）のまま並べるグリッド。料金プラン（.plans/.plan__price）の流用をやめるための追記。
   値には日本語（広島・紙屋町）も入るため、英字フォントと tabular-nums は数値 [data-count] にだけ当てる。
   新規クラスは .facts の1つだけ／既存セレクタは変更していない（末尾追記のみ）。 --- */
.facts { margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr)); gap: clamp(22px, 2.4vw, 34px) clamp(14px, 1.6vw, 24px); }
.facts > div { position: relative; padding-top: 20px; border-top: 2px solid var(--line); }
.facts > div::before { content: ""; position: absolute; top: -2px; left: 0; width: 28px; height: 2px; background: var(--c3); }
.facts dt { font-size: var(--fs-label); font-weight: var(--fw-semibold); letter-spacing: .06em; color: var(--ink-3); }
.facts dd { margin: 10px 0 0; font-size: var(--fs-h3); font-weight: var(--fw-medium); line-height: 1.35; color: var(--ink); }
.facts dd [data-count] { font-family: var(--f-en); font-weight: var(--fw-bold); font-variant-numeric: tabular-nums; }
.facts dd small { margin-left: 6px; font-size: var(--fs-body); font-weight: var(--fw-regular); color: var(--ink-2); }
.facts dd + dd { margin-top: 8px; font-size: var(--fs-eyebrow); font-weight: var(--fw-regular); line-height: 1.8; color: var(--ink-3); }

/* --- 単独使用のチェックリスト（services/training.html の CURRICULUM まとめ）
   .plan__list は .plan の中で使う前提（カード内の区切り）なので、.plan の外でも使える同じ見た目を用意した。
   見え方は .plan__list と同一（上の区切り線＋8pxのダッシュ）。既存セレクタは変更していない。 --- */
.list-check { padding-top: 18px; border-top: 1px solid var(--line); display: grid; gap: 10px; font-size: var(--fs-body); color: var(--ink-2); }
.list-check li { position: relative; padding-left: 18px; line-height: 1.8; }
.list-check li::before { content: ""; position: absolute; left: 0; top: .72em; width: 8px; height: 2px; background: var(--c3); }

/* --- STEP 番号を本文に持つ手順（services/training.html の FLOW）
   .steps は .step::before の自動採番で「STEP 01」を出すが、本番の表記は「STEP 1〜4」。
   採番を止めて .card__no に本番どおりの文字を置く。位置・見た目は ::before と同じ。
   （.step p が .card__no より詳細度が高いので、文字色とサイズもここで戻す）既存セレクタは変更していない。 --- */
.steps--plain .step::before { content: none; }
.steps--plain .step > .card__no { position: absolute; top: -12px; left: 0; margin: 0; padding-right: 12px; background: #fff; font-size: var(--fs-label); letter-spacing: .12em; color: var(--c3); line-height: 1.4; }
.sec--tint .steps--plain .step > .card__no { background: var(--paper); }

/* --- 「一覧へ戻る」の左向き矢印（news/20260906-560df4e2.html の .pager 用に追記）
   top.css の :is(.btn-grad,…,.link-u,…):hover .arw は transform を translateX(5px) に上書きするため、
   .arw--left（scaleX(-1)）がホバー時だけ右向きに戻ってしまう。反転を保ったまま左へ動かす分だけを足す。
   既存セレクタは変更していない（末尾追記のみ）。 --- */
.link-u:hover .arw--left { transform: scaleX(-1) translateX(5px); }

/* --- プランカードの並びを本番どおり（箇条書き → 説明文）に戻した分の余白調整（services/advisory.html）
   .plan__note の margin-top:8px は「価格のすぐ下」前提の値なので、リストの直後に来たときだけ広げる。
   新クラスは足さず既存セレクタも変更していない（末尾追記のみ）。 --- */
.plan__list + .plan__note { margin-top: 16px; }

/* --- 準備中の記事カード（media/index.html）
   /media の6本は本番も COMING SOON のプレースホルダで、開ける記事がまだ無い＝カードをリンクにしない。
   クリックできない枠だと一目で分かるよう、実体のあるカード（白・実線）と区別して破線＋地色のままにする。
   中身は「COMING SOON バッジ → 日付・カテゴリ → タイトル」の縦積みなので、.meta の上だけ空ける。
   新規クラスは .card--soon の1つで、既存セレクタは変更していない（末尾追記のみ）。 --- */
.card--soon { background: transparent; border-style: dashed; }
.card--soon .meta { margin-top: 14px; }

/* --- サムネイルを置かないお知らせ一覧（news/index.html）
   .list__item a は「サムネイル／本文／矢印」の3カラム前提だが、お知らせ47件分のサムネイルは
   img/site に無い（実在する3件だけ画像を出すと行ごとに体裁が変わる）。そこで画像列を持たない
   2カラムの行として組む。あわせて、本番の一覧に含まれる「記事ページを持たない行」（2026.07.03 の
   3件は a ではなく div）にも同じ行の体裁を与える。
   新規クラスは .list--plain の1つだけ／既存セレクタは変更していない（末尾追記のみ）。 --- */
.list--plain .list__item > a,
.list--plain .list__item > div { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: clamp(16px, 2vw, 32px); padding: clamp(16px, 1.6vw, 24px) 0; }

/* --- 記事カードの署名（blog/index.html のメンバー名＋肩書）
   本番 .bl-byline は「氏名（太字）＋肩書」の1行。氏名は一覧の主情報なので、
   役職だけを薄く小さく出す .card__role では役割が逆になる。氏名は本文サイズ・
   肩書は1段落として並べる行を用意した。既存セレクタは変更していない（末尾追記のみ）。 --- */
.card__byline { margin-top: auto; padding-top: 16px; display: flex; align-items: baseline; gap: 10px; font-size: var(--fs-body); line-height: 1.6; color: var(--ink-2); }
.card__byline b { font-weight: var(--fw-semibold); color: var(--ink); }
.card__byline span { font-size: var(--fs-eyebrow); color: var(--ink-3); }

/* --- 目次・関連リンクのように「1行まるごとがリンク」の箇所も 24px を確保する
   （本文の途中に埋まったリンクは対象外＝WCAG 2.5.8 のインライン例外）。 --- */
.prose li > a:only-child, .prose p > a:only-child { display: inline-block; min-height: 24px; }   /* inline-flex は中の要素ごとに分かれて崩れる */

/* --- メンバー（about/index.html）
   本番 .member-grid と同じ「3:4のポートレート → 役職 → 氏名」。写真が無い人は頭文字を出す。
   カードの枠は付けず、写真そのものを面として見せる。既存セレクタは変更していない（末尾追記のみ）。 --- */
.cards--member { grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); gap: clamp(26px, 2.6vw, 40px) clamp(14px, 1.6vw, 28px); }
.card--member { padding: 0; background: transparent; border: 0; }
.card--member:hover { transform: none; box-shadow: none; }
.card__face { position: relative; aspect-ratio: 3 / 4; overflow: hidden; border-radius: 8px; background: var(--paper); }
.card__face img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s var(--ease); }
.card--member:hover .card__face img { transform: scale(1.04); }
.card__face[data-initial]::after { content: attr(data-initial); position: absolute; inset: 0; display: grid; place-items: center; font-size: clamp(40px, 5vw, 60px); font-weight: var(--fw-light); color: var(--ink-3); background: linear-gradient(140deg, rgba(61,90,171,.10), rgba(214,51,108,.08)); }
.card--member .card__role { margin-top: 16px; font-family: var(--f-en); font-weight: var(--fw-semibold); letter-spacing: .1em; color: var(--c3); }
.card--member .card__title { margin-top: 6px; }

/* --- ページ見出しの下に置く横一枚の写真（サービス各ページ・導入事例・採用情報ほか）
   暗いヒーローから白い本文へ渡す帯。上端だけヒーローの色をかぶせて継ぎ目を消す。 --- */
.pband { position: relative; height: clamp(180px, 24vw, 360px); overflow: hidden; background: var(--navy-900); }
.pband img { width: 100%; height: 100%; object-fit: cover; }
.pband::after { content: ""; position: absolute; inset: 0 0 auto; height: 40%; background: linear-gradient(180deg, rgba(10,17,48,.55), transparent); }

/* --- 準備中カードの写真（記事・ブログ）。写真は薄く敷いて「まだ読めない」感じを保つ --- */
.card--soon .card__img { aspect-ratio: 2.4; opacity: .5; filter: grayscale(.3); }

/* --- 手順の線画アイコン（受託開発・IoT開発）
   本番 css/tech-2026.css の .step-ic と同じ作り。SVGは線画なので mask で抜いて
   ブランドのグラデを敷く（1ファイルのまま色を変えられる）。 --- */
.step-ic { display: block; width: 26px; height: 26px; margin-bottom: 12px; background: var(--grad); -webkit-mask: var(--ic) center / contain no-repeat; mask: var(--ic) center / contain no-repeat; }
.step-ic[data-ic="dev-spec"] { --ic: url("../../assets/ic-dev-spec.svg"); }
.step-ic[data-ic="dev-build"] { --ic: url("../../assets/ic-dev-build.svg"); }
.step-ic[data-ic="dev-ops"] { --ic: url("../../assets/ic-dev-ops.svg"); }
.step-ic[data-ic="iot-device"] { --ic: url("../../assets/ic-iot-device.svg"); }
.step-ic[data-ic="iot-data"] { --ic: url("../../assets/ic-iot-data.svg"); }
.step-ic[data-ic="iot-view"] { --ic: url("../../assets/ic-iot-view.svg"); }

/* --- 登山演出へのスクロール誘導（本番 .mvv-scrollcue） --- */
.mvv-cue { margin-top: clamp(28px, 3vw, 44px); font-family: var(--f-en); font-size: var(--fs-eyebrow); letter-spacing: .28em; color: rgba(255,255,255,.66); }

/* --- 写真を敷いたページ見出し（サービス各ページ）
   .phero の地色とグラデはそのまま、その上に写真→暗幕の順で重ねる。
   文字のコントラストは暗幕側で確保する（写真が明るくても本文が沈まない）。 --- */
.phero--media { min-height: clamp(360px, 40vw, 560px); }
.phero__bg { position: absolute; inset: 0; overflow: hidden; }
.phero__bg img { width: 100%; height: 100%; object-fit: cover; opacity: .58; }
.phero__bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10,17,48,.84) 0%, rgba(10,17,48,.42) 42%, rgba(10,17,48,.94) 100%); }

/* --- 見出し直下の要点（月額・期間・プラン数など。文言はページ本文にあるものだけ） --- */
.pkeys { background: var(--navy-950, #070d24); color: #fff; }
.pkeys__in { max-width: 1560px; margin-inline: auto; padding-block: clamp(22px, 2.2vw, 34px); }
.pkeys dl { margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(190px, 100%), 1fr)); gap: clamp(18px, 2vw, 30px); }
.pkeys > .pkeys__in > dl > div { position: relative; padding-left: clamp(16px, 1.6vw, 26px); }
.pkeys > .pkeys__in > dl > div + div { border-left: 1px solid rgba(255,255,255,.16); }
.pkeys dt { font-family: var(--f-en); font-size: var(--fs-label); font-weight: var(--fw-semibold); letter-spacing: .14em; color: rgba(255,255,255,.55); }
.pkeys dd { margin: 8px 0 0; font-size: var(--fs-h3); font-weight: var(--fw-bold); line-height: 1.3; color: #fff; }
.pkeys dd small { display: block; margin-top: 8px; font-size: var(--fs-eyebrow); font-weight: var(--fw-regular); line-height: 1.7; color: rgba(255,255,255,.7); }

/* --- 写真を背景に敷いた締めのセクション（各サービスのCTA） --- */
.sec--photo { position: relative; overflow: hidden; }
.sec--photo > .sec__bg { position: absolute; inset: 0; }
.sec--photo > .sec__bg img { width: 100%; height: 100%; object-fit: cover; opacity: .34; }
.sec--photo > .sec__bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(100deg, rgba(10,17,48,.92) 30%, rgba(10,17,48,.62)); }
.sec--photo > .sec__in { position: relative; }

/* =========================================================
   送信結果モーダル（js/forms.js が生成する .form-modal 一式）
   本番 css/style.css の見た目は踏襲しつつ、色・字形・サイズは
   すべて top.css の :root トークンで書き直している（本番 style.css は参照しない）。
   本番の var(--font-en)/var(--ink-soft)/var(--magenta) は top.css に無いため、
   それぞれ --f-en / --ink-3 / --c3 に読み替えた。
   SVG の url(#fmGrad) は forms.js 内の linearGradient（#3d5aab→#8c5a9c→#d6336c）
   ＝パレットBそのものなので、--c1/--c2/--c3 と齟齬は出ない。
   ========================================================= */
.form-modal { position: fixed; inset: 0; z-index: 1000; display: none; align-items: center; justify-content: center; padding: clamp(16px, 4vw, 24px); }
.form-modal.is-open { display: flex; }

.form-modal__overlay {
  position: absolute; inset: 0; opacity: 0;
  background: rgba(6, 11, 32, .55); /* --navy-950 #060b20 相当 */
  backdrop-filter: blur(8px) saturate(1.1);
  -webkit-backdrop-filter: blur(8px) saturate(1.1);
}
.form-modal.is-open .form-modal__overlay { animation: fmOverlay .35s var(--ease) forwards; }
@keyframes fmOverlay { to { opacity: 1; } }

.form-modal__box {
  position: relative; width: 100%; max-width: 432px; overflow: hidden;
  padding: clamp(34px, 6vw, 46px) clamp(22px, 5vw, 40px) clamp(26px, 4vw, 34px);
  text-align: center; background: var(--white); border-radius: 22px;
  box-shadow: 0 40px 100px -24px rgba(6, 11, 32, .5);
  opacity: 0; transform: translateY(18px) scale(.96);
}
.form-modal.is-open .form-modal__box { animation: fmBox .5s cubic-bezier(.22, 1, .36, 1) forwards .04s; }
@keyframes fmBox { to { opacity: 1; transform: none; } }
/* 上端のグラデ罫＝ページ共通のアクセント。下は見出し裏のごく淡いにじみ */
.form-modal__box::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--grad); }
.form-modal__box::after {
  content: ""; position: absolute; top: 6px; left: 50%; width: 210px; height: 130px;
  transform: translateX(-50%); pointer-events: none;
  background: radial-gradient(50% 60% at 50% 40%, rgba(140, 90, 156, .15), transparent 70%);
}

/* --- アイコン: リング→チェック（エラー時はバツ）を線画で描く --- */
.form-modal__icon { position: relative; width: 76px; height: 76px; margin: 4px auto 22px; }
.fm-svg { display: block; width: 76px; height: 76px; }
.fm-ring { fill: none; stroke: url(#fmGrad); stroke-width: 2.4; stroke-linecap: round; stroke-dasharray: 145; stroke-dashoffset: 145; }
.fm-check { fill: none; stroke: url(#fmGrad); stroke-width: 3.2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 44; stroke-dashoffset: 44; }
.fm-cross { display: none; fill: none; stroke: var(--c3); stroke-width: 3.2; stroke-linecap: round; stroke-dasharray: 40; stroke-dashoffset: 40; }
.form-modal.is-open .fm-ring { animation: fmDraw .6s var(--ease) forwards .12s; }
.form-modal.is-open .fm-check { animation: fmDraw .42s var(--ease) forwards .55s; }
.form-modal.is-error .fm-check { display: none; }
.form-modal.is-error .fm-cross { display: inline; }
.form-modal.is-error .fm-ring { stroke: var(--c3); }
.form-modal.is-error.is-open .fm-cross { animation: fmDraw .4s var(--ease) forwards .55s; }
@keyframes fmDraw { to { stroke-dashoffset: 0; } }

/* --- 文言 --- */
.form-modal__eyebrow {
  margin: 0 0 12px; font-family: var(--f-en); font-size: var(--fs-label); font-weight: var(--fw-bold); letter-spacing: .32em;
  background: var(--grad); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
/* エラー時はグラデを外して単色に＝抜き文字のままだと色が伝わらない */
.form-modal.is-error .form-modal__eyebrow { background: none; -webkit-text-fill-color: var(--c3); color: var(--c3); }
.form-modal__title {
  margin: 0 0 12px; font-size: var(--fs-item-title); font-weight: var(--fw-bold); line-height: 1.45; letter-spacing: .01em;
  color: var(--ink); text-wrap: balance; word-break: keep-all;
}
.form-modal__msg {
  margin: 0 auto 28px; max-width: 340px; font-size: var(--fs-body-sub); line-height: 1.95; color: var(--ink-3); text-wrap: pretty;
}
.form-modal__msg .fm-ph { white-space: nowrap; } /* 文節は途中で折らない＝改行位置を文節境界に揃える */
.form-modal.is-open .form-modal__eyebrow,
.form-modal.is-open .form-modal__title,
.form-modal.is-open .form-modal__msg,
.form-modal.is-open .form-modal__btn { animation: fmUp .5s var(--ease) both; }
.form-modal.is-open .form-modal__eyebrow { animation-delay: .18s; }
.form-modal.is-open .form-modal__title { animation-delay: .24s; }
.form-modal.is-open .form-modal__msg { animation-delay: .3s; }
.form-modal.is-open .form-modal__btn { animation-delay: .36s; }
@keyframes fmUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* --- 閉じるボタン: top.css の button リセット（border:0/padding:0/background:none）を上書きする --- */
.form-modal__btn {
  padding: 13px 44px; border: 0; border-radius: 999px; cursor: pointer;
  font-family: var(--f-jp); font-size: var(--fs-body); font-weight: var(--fw-bold); letter-spacing: .04em; color: var(--white);
  background: var(--grad); background-size: 180% 100%; background-position: 0 0;
  box-shadow: 0 10px 26px -6px rgba(214, 51, 108, .5);
  transition: background-position .4s var(--ease), transform .2s var(--ease), box-shadow .2s var(--ease);
}
.form-modal__btn:hover { background-position: 100% 0; transform: translateY(-2px); box-shadow: 0 14px 30px -6px rgba(214, 51, 108, .6); }
.form-modal__btn:active { transform: translateY(0); }
/* forms.js が開いた直後にこのボタンへ focus() する＝キーボード利用者に位置が分かる輪郭を必ず出す */
.form-modal__btn:focus-visible { outline: 3px solid var(--c1); outline-offset: 3px; }

@media (prefers-reduced-motion: reduce) {
  .form-modal__overlay, .form-modal__box, .fm-ring, .fm-check, .fm-cross,
  .form-modal__eyebrow, .form-modal__title, .form-modal__msg, .form-modal__btn { animation: none !important; }
  .form-modal__overlay { opacity: 1; }
  .form-modal__box { opacity: 1; transform: none; }
  .fm-ring, .fm-check, .fm-cross { stroke-dashoffset: 0; }
}

/* --- 掲載写真の無いお知らせ（一覧の行）
   tools/publish-news.py は写真の無い記事に .list__ph を出す。サムネと同じ大きさの無地ブロックで、
   行の左端を揃える（写真のある行と混ざっても列が崩れない）。 --- */
.list__ph { display: block; width: 100%; aspect-ratio: 1.6; border-radius: 5px; background: var(--paper); }

/* --- 送信ボタンの矢印（js/forms.js は送信後に textContent で文言を戻すので、
   中に <i> を置くと消える。矢印は疑似要素で描く） --- */
.has-arw::after {
  content: ""; display: inline-block; width: 14px; height: 10px; margin-left: 14px; vertical-align: middle;
  background: currentColor; transition: transform .35s var(--ease);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'%3E%3Cpath d='M0 5h13M9 1l4 4-4 4' fill='none' stroke='%23000' stroke-width='1.5'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'%3E%3Cpath d='M0 5h13M9 1l4 4-4 4' fill='none' stroke='%23000' stroke-width='1.5'/%3E%3C/svg%3E") center / contain no-repeat;
}
.has-arw:hover::after { transform: translateX(5px); }

/* --- 端数のカードが1枚だけ取り残されないようにする --- */
/* サービス一覧は4本ちょうど。auto-fit だと3列＋1枚になるので、列数を決め打ちする */
/* 件数が増えても崩れないように、並べ方は flex にして最後の行を中央へ寄せる（4枚でも5枚でも穴が空かない）。
   幅は伸ばさない＝カードの大きさは常に同じ。 */
.cards--4 { display: flex; flex-wrap: wrap; justify-content: center; }
.cards--4 > * { flex: 0 1 calc((100% - 2 * clamp(14px, 1.6vw, 24px)) / 3); }
@media (max-width: 1180px) { .cards--4 > * { flex: 0 1 calc((100% - clamp(14px, 1.6vw, 24px)) / 2); } }
@media (max-width: 560px) { .cards--4 > * { flex: 0 1 100%; } }

/* 取引先ロゴとサイトマップは件数が決まっていないので、最後の行を中央に寄せる */
.logos { display: flex; flex-wrap: wrap; justify-content: center; }
.logos__item { flex: 0 1 clamp(150px, 12vw, 175px); }
.sitemap-cards { display: flex; flex-wrap: wrap; justify-content: flex-start; }
.sitemap-cards .card { flex: 1 1 clamp(220px, 22vw, 300px); }
@media (max-width: 560px) {
  .logos__item { flex: 0 1 calc(50% - 6px); }
  .sitemap-cards .card { flex: 1 1 100%; }
}

/* --- お問い合わせ：フォームの右に補足を置く（広い画面で右側が空かないように） --- */
.sec--form .sec__in { max-width: 1180px; }
.form-layout { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: clamp(24px, 3.2vw, 56px); align-items: start; }
.form-layout .form { max-width: none; }
.form-aside { display: grid; gap: clamp(14px, 1.4vw, 20px); }
.form-aside__box { padding: clamp(20px, 2vw, 28px); background: #fff; border: 1px solid var(--line); border-radius: 8px; }
.form-aside__t { font-size: var(--fs-card-title); font-weight: var(--fw-bold); color: var(--ink); }
.form-aside__t::after { content: ""; display: block; width: 26px; height: 2px; margin-top: 10px; background: var(--grad); border-radius: 2px; }
.form-aside__lead { margin-top: 14px; font-size: var(--fs-body); line-height: 1.85; color: var(--ink-2); }
.form-steps { margin: 14px 0 0; padding: 0; list-style: none; display: grid; gap: 10px; }
.form-steps li { display: flex; align-items: baseline; gap: 12px; font-size: var(--fs-body); line-height: 1.7; color: var(--ink-2); }
.form-steps span { font-family: var(--f-en); font-weight: var(--fw-semibold); font-size: var(--fs-label); letter-spacing: .1em; color: var(--c3); }
.form-qa { margin: 14px 0 0; }
.form-qa dt { font-size: var(--fs-body); font-weight: var(--fw-semibold); line-height: 1.7; color: var(--ink); }
.form-qa dt + dd { margin-top: 6px; }
.form-qa dd { margin: 0 0 14px; font-size: var(--fs-body); line-height: 1.85; color: var(--ink-2); }
.form-qa dd:last-child { margin-bottom: 0; }
.form-qa a { color: var(--c1); border-bottom: 1px solid currentColor; display: inline-block; min-height: 24px; }
@media (max-width: 900px) { .form-layout { grid-template-columns: 1fr; } }

/* --- 下層ページにもトップと同じ巨大な英字の透かしを置く（js/v2/shell.js が最初のセクションへ入れる） --- */
.sec { position: relative; overflow: hidden; }
.sec > .sec__in { position: relative; z-index: 1; }
.sec .water { top: clamp(-10px, 1vw, 20px); }
.sec--dark .water { background: linear-gradient(90deg, rgba(255,255,255,.10), rgba(255,255,255,.04) 60%, rgba(255,255,255,.09)); -webkit-background-clip: text; background-clip: text; }
@media (max-width: 560px) { .sec .water { font-size: 34vw; } }
