/* ===================================================
   RENESS コーポレートサイト
   =================================================== */

/* ---- Custom Properties ---- */
:root {
  --orange: #f87c11;
  --orange-btn: #f2790e;
  --dark: #292929;
  --mid: #4f4f4f;
  --gray: #454545;
  --light-gray: #707070;
  --white: #ffffff;
  --black: #000;
  --border-input: #E7E7E7;
  --border-orange-light: #FFDBBC;
  --muted: #9e9990;
  --news-tag: #464646;
  --error: #d93025;
  --header-h: 103px;
  --content-pad: 100px;

  /* 英数字は Inter、日本語だけ日本語フォントが担当するよう Inter を先頭に置いている。
     本文 = Noto Sans JP / 見出し = Zen Kaku Gothic New（読み込みは各 HTML の <link>） */
  --font-body: 'Inter', 'Noto Sans JP', sans-serif;
  --font-heading: 'Inter', 'Zen Kaku Gothic New', sans-serif;
}

/* ---- ScrollSmoother ---- */
#smooth-wrapper {
  overflow: hidden;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

#smooth-content {
  overflow: visible;
  width: 100%;
}

/* ---- Fade-in ----
   本文・カードのブロックが下からふわっと出る演出。見張り（IntersectionObserver）は
   各ページ末尾のインライン JS が張り、画面に入ったら .is-visible を付ける。
   隠すのは html.js 配下だけ（.rise / .wipe img と同じ考え方）。
   ・JS 無効なら .js が付かないので最初から表示される
   ・JS が途中で落ちて見張りを張れなかったときは、<head> の保険が 4 秒後に .js を外す
   → どちらの場合も本文が消えたままにならない */
.fade-in {
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.js .fade-in {
  opacity: 0;
  transform: translateY(24px);

  &.is-visible {
    opacity: 1;
    transform: translateY(0);
  }
}

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

html {
  scroll-behavior: smooth;
}

.sp-only { display: none; }
/* PC だけで使う改行。1024px 以下では見出しが 1 行に収まるので消す */
.pc-br { display: inline; }

body {
  font-family: var(--font-body);
  color: var(--dark);
  background: var(--white);
  overflow-x: hidden;
  position: relative;
}

/* 見出しは Zen Kaku Gothic New */
h1, h2, h3, h4,
.section-title,
.cta-title {
  font-family: var(--font-heading);
}

a {
  text-decoration: none;
  color: inherit;
}

ul {
  list-style: none;
}

address {
  font-style: normal;
}

/* ===================================================
   HEADER
   =================================================== */
.site-header {
  position: fixed;
  inset-block-start: 0;
  inset-inline: 0;
  z-index: 200;
  background: var(--white);
  block-size: var(--header-h);
  box-shadow: 0 4px 9.3px 0 rgba(0, 0, 0, 0.04);

  .header-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    block-size: 100%;
    padding-inline: var(--content-pad);
  }

  .main-nav {
    display: flex;
    align-items: center;
    gap: 40px;
  }

  .nav-list {
    display: flex;
    gap: 46px;

    a {
      font-size: 14px;
      font-weight: 700;
      line-height: normal;
      color: var(--black);
      transition: color 0.2s;

      &:hover { color: var(--orange); }
    }
  }

  .btn-contact {
    position: relative;
    overflow: hidden;
    display: flex;
    inline-size: 152px;
    padding: 10px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    background: var(--orange-btn);
    border-radius: 87px;
    color: var(--white);
    font-size: 12px;
    font-weight: 600;
    line-height: normal;
    white-space: nowrap;
    transition: opacity 0.2s;

    &:hover { opacity: 0.85; }

    /* ホバー時に光沢が左から右へ流れる */
    &::after {
      content: '';
      position: absolute;
      inset-block: 0;
      inset-inline: 0;
      background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.45), transparent);
      transform: translateX(-100%);
      transition: transform 0.5s ease;
      pointer-events: none;
    }

    &:hover::after { transform: translateX(100%); }
  }
}

.logo,
.footer-logo {
  display: flex;
  align-items: center;
  flex-shrink: 0;
}

/* ===================================================
   PAGE DECORATION
   =================================================== */
/* .page-deco / .page-deco-sp はインライン SVG（トップページ）。
   高さは JS の fitPageDeco() / fitPageDecoSp() が決めるので、
   aspect-ratio で幅を追従させて <img> のときと同じ見た目・位置を保つ。
   ※ 下の aspect-ratio は index.html の <svg viewBox> と同じ比にすること。
     js/deco.js が帯 SVG を preserveAspectRatio="none" で枠に合わせるので、
     比がずれると曲線が縦横に歪む（帯に切り分けたあとは <div> になるが同じ class を使う）。 */
.page-deco {
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  display: block;
  width: auto;
  aspect-ratio: 2008 / 3880;
  z-index: -1;
  pointer-events: none;
  opacity: 0.92;
}

.page-deco-sp {
  position: absolute;
  top: 0;
  display: none;
  width: auto;
  aspect-ratio: 402 / 4838;
  z-index: -1;
  pointer-events: none;
  opacity: 0.92;
}

/* 置き場所（top）と高さは index.html の fitPageDeco() / fitPageDecoSp() が JS で入れる。
   入る前の曲線は元の SVG の寸法のままページの先頭に置かれるので、読み込み直後の
   最初の 1 枚（外部 JS が届く前）にヒーローの裏で曲線が一瞬だけ見える。
   そこで JS が動く環境（html.js が付いているとき）だけ、置き場所が決まるまで隠しておく。
   visibility ではなく opacity なのは他の演出（.rise / .fade-in）と同じ考え方。
   ・置き終わったら index.html が html に .deco-placed を付けて元の濃さに戻す
   ・JS 無効なら .js が付かないので今までどおり見える
   ・JS が途中で落ちて置き場所が決まらなかったときは、<head> の 4 秒の保険が .js を外す */
.js .page-deco,
.js .page-deco-sp { opacity: 0; }

.js.deco-placed .page-deco,
.js.deco-placed .page-deco-sp { opacity: 0.92; }

/* .about-page-deco 以下はインライン SVG（js/deco.js が帯入りの <div> に組み替える）。
   <img> のときは元画像の縦横比で幅が決まっていたので、同じ比を aspect-ratio で明示する
   （<div> になると width: auto が「親いっぱい」の意味になり、比が保てないため）。
   ※ aspect-ratio は各 HTML の <svg viewBox> と同じ比にすること */
.about-page-deco {
  position: absolute;
  bottom: 60px;
  left: -17vw;
  height: 70%;
  width: auto;
  aspect-ratio: 778 / 2602;
  display: block;
  z-index: -1;
  pointer-events: none;
  opacity: 0.92;
}

/* こちらは幅も高さも CSS で決めているので、絵は縦横比を保ったまま枠の中央に置かれる
   （SVG の既定 preserveAspectRatio="xMidYMid meet"。<img> のときと同じ）。
   js/deco.js の layout() が同じ置き方で帯を並べる */
.about-page-deco-sp {
  position: absolute;
  top: 280vw;
  left: 0;
  height: 70%;
  width: 100%;
  display: none;
  z-index: -1;
  pointer-events: none;
  opacity: 0.92;
}

/* ===================================================
   HERO（トップページ）
   開いた直後の画面いっぱいのオレンジ（巨大な「r」）が、定位置の大きさまで縮む演出。
   組み立ては js/logo.js（読み込み時に自動再生・時間で進む）。
   ピン留めはしないので、スクロールは最初から普通に動く
   =================================================== */
.hero {
  position: relative;
  overflow: visible;
}

/* 最初の一画面。高さは画面ちょうど 1 枚。
   ヘッダーは position: fixed なので、その高さぶんを内側の余白で空けてから中央に置く */
.hero-stage {
  position: relative;
  min-block-size: 100vh; /* svh 非対応のブラウザ向け */
  min-block-size: 100svh;
  padding-block-start: var(--header-h);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 28px;
}

/* 開いた直後だけ「画面全体」をオレンジ一色に見せる層。markup は #smooth-wrapper の外
   （ヘッダーと同階層）。下の .hero-cover は #smooth-content の中にいるので position: fixed に
   できず、ヘッダーを覆えない。ヘッダーも含めて覆うのがこの 1 枚の仕事。
   面が縮み始める 0.2 秒から 0.35 秒かけて js/logo.js が消し、消えたら display: none にする
   （そのあいだ .hero-cover はまだほぼ全画面なので、境目は見えない）。
   演出しないとき（?fx=off / ?fx=nologo /「視差効果を減らす」設定 / 組み立てに失敗）は
   js/logo.js がこの要素ごと取り除く */
.hero-veil {
  position: fixed;
  inset: 0;
  /* ヘッダー（200）・?fx= のモード名（300）より上 */
  z-index: 400;
  background: var(--orange-btn);
  pointer-events: none;
  /* JS が動く環境でだけ出す（下の .js.logo-cover .hero-veil）*/
  opacity: 0;
}

/* 画面いっぱいを覆うオレンジの面。中身は「r」のマークそのもので、js/logo.js が
   線の内側に画面が入るほど拡大しておき、定位置の大きさまで縮めてから
   本物のマークと入れ替える（形は最初から最後まで変わらない）。
   #smooth-content の中には position: fixed を置けないので absolute。
   背景曲線（.page-deco は z-index: -1）より前面に来るので、面の下から線は透けない。
   縮んでいる間の形は画面よりずっと大きいので、枠の外を描かない（overflow: hidden）。
   演出しないとき（?fx=off / ?fx=nologo /「視差効果を減らす」設定 / 組み立てに失敗）は
   js/logo.js がこの要素ごと取り除く */
.hero-cover {
  position: absolute;
  inset: 0;
  inline-size: 100%;
  block-size: 100%;
  z-index: 3;
  pointer-events: none;
  overflow: hidden;
  /* JS が動く環境でだけ出す（下の .js .hero-cover）。JS 無効なら面は出ず、
     完成したロゴがそのまま見える */
  opacity: 0;
}

/* 面の色。拡大縮小は js/logo.js が .hero-cover-zoom の transform 属性で掛けるので、
   ここには書かない（transform-origin は支点の座標で直に指定するため要らない）*/
.cover-shape { fill: var(--orange-btn); }

.hero-logo {
  position: relative;
  z-index: 2;
  display: block;
  inline-size: min(560px, 42vw);
  block-size: auto;
}

/* ロゴの色。オレンジの面（.cover-shape）と同じ変数を見るので、
   色の指定は :root の --orange-btn 1 か所だけになる */
.hero-logo .logo-mark { fill: var(--orange-btn); }

/* 演出前は隠す。隠すのは html.js が付いているとき（= JS が動く環境）だけなので、
   JS 無効・js/logo.js が読めなかったときはロゴがそのまま出る。
   visibility ではなく opacity なのは、読み上げ・ページ内検索から消さないため
   （ロゴは aria-hidden だが、下の見出し .rise と同じ考え方で揃えている）*/
.js .hero-logo .logo-mark,
.js .hero-logo .logo-shadow,
.js .hero-logo .logo-text,
.js .hero-scroll { opacity: 0; }

/* オレンジの面は逆に、演出を始められるときだけ出す（既定は非表示）。
   .logo-cover を付けるのは js/logo.js 自身（読み込めた合図）。GSAP の CDN より前に読むので、
   面が出るのと同時に「1.5 秒で消す」保険も張られている。
   js/logo.js が読めなければ .logo-cover が付かず、面は 1 度も出ない */
.js.logo-cover .hero-cover,
.js.logo-cover .hero-veil { opacity: 1; }

/* 演出をしないとき（?fx=off / ?fx=nologo /「視差効果を減らす」設定 / 組み立てに失敗したとき）は、
   js/logo.js が html に .logo-shown を付けて完成した状態を出す
   （オレンジの面は js/logo.js が DOM から取り除くが、念のためここでも消す）*/
.js.logo-shown .hero-logo .logo-mark,
.js.logo-shown .hero-logo .logo-shadow,
.js.logo-shown .hero-logo .logo-text,
.js.logo-shown .hero-scroll,
.js.logo-shown .hero-text .rise { opacity: 1; }

.js.logo-shown .hero-cover,
.js.logo-shown .hero-veil { opacity: 0; }

@media (prefers-reduced-motion: reduce) {
  .js .hero-logo .logo-mark,
  .js .hero-logo .logo-shadow,
  .js .hero-logo .logo-text,
  .js .hero-scroll { opacity: 1; }

  /* 上の .js.logo-cover .hero-cover と同じ強さで打ち消す（class 2 つぶん）*/
  .js.logo-cover .hero-cover,
  .js.logo-cover .hero-veil { opacity: 0; }
}

.hero-text {
  position: relative;
  z-index: 2;
  inline-size: min(100%, 1100px);
  padding-inline: var(--content-pad);
  text-align: center;
}

.hero-title {
  font-size: 82px;
  font-weight: 700;
  line-height: 105px;
  letter-spacing: 13.94px;
  /* 字間は最後の 1 文字の右にも付く。中央寄せだとそのぶん左に寄って見えるので、
     同じ量を左の余白で足して見た目の中心を合わせる（字間を変える各段でも同じ値にすること）*/
  padding-inline-start: 13.94px;
  color: var(--dark);
  margin-block-end: 20px;
  white-space: nowrap;
}

.hero-sub {
  font-size: 15px;
  font-weight: 500;
  color: var(--black);
  line-height: normal;
}

/* 「下に続く」合図。文字は置かず、光が下へ流れる線と小さな下向きの矢じりだけで示す。
   オレンジの面に覆われている間は出さず、ロゴが組み上がった後に js/logo.js が出す */
.hero-scroll {
  position: absolute;
  inset-block-end: 34px;
  inset-inline-end: calc((100% - 1480px) / 2);
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  pointer-events: none;

  /* 下向きの矢じり（正方形の 2 辺だけ描いて 45 度回す） */
  &::after {
    content: '';
    inline-size: 7px;
    block-size: 7px;
    border-inline-end: 1px solid var(--orange);
    border-block-end: 1px solid var(--orange);
    transform: rotate(45deg);
    opacity: 0.55;
  }

  .hero-scroll-line {
    position: relative;
    inline-size: 1px;
    block-size: 56px;
    background: color-mix(in srgb, var(--orange) 25%, transparent);
    overflow: hidden;

    &::after {
      content: '';
      position: absolute;
      inset-block-start: 0;
      inset-inline-start: 0;
      inline-size: 100%;
      block-size: 100%;
      background: linear-gradient(to bottom, transparent, var(--orange));
      animation: hero-scroll-flow 2s ease-in-out infinite;
    }
  }
}

@keyframes hero-scroll-flow {
  from { transform: translateY(-100%); }
  to   { transform: translateY(100%); }
}

/* ===================================================
   NEWS (TOP PAGE)
   =================================================== */
.news-block {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 150px;
  max-width: 1376px;
  margin-inline: auto;
  padding-inline: 24px;
  padding-block: 150px;

  .news-label { flex-shrink: 0; }
  .btn-news-more { display: none; }

  .news-list { flex: 1; }

  .news-item {
    padding-block: 20px;
    border-bottom: 1px dotted var(--dark);
  }

  .news-meta {
    display: flex;
    align-items: center;
    gap: 20px;
    margin-block-end: 15px;

    time {
      font-size: 13px;
      font-weight: 500;
      line-height: 16.208px;
      color: var(--dark);
      inline-size: 130px;
      flex-shrink: 0;
    }
  }

  .news-tag {
    display: flex;
    inline-size: 109px;
    block-size: 20px;
    padding: 0 10px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    font-size: 10px;
    font-weight: 700;
    line-height: 16.208px;
    color: var(--news-tag);
    border: 1px solid var(--news-tag);
    border-radius: 2px;
    white-space: nowrap;
  }

  .news-ttl {
    font-size: 15px;
    font-weight: 700;
    line-height: 16.208px;
    color: var(--dark);

    a {
      transition: color 0.2s;
      &:hover { color: var(--orange); }
    }
  }
}

.news-more {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--orange-btn);
  margin-block-start: 24px;
  transition: opacity 0.2s;

  &:hover { opacity: 0.75; }
}

/* ===================================================
   ABOUT
   =================================================== */
.about {
  padding-block: 150px;

  .about-inner {
    position: relative;
    block-size: 551px;
  }

  .about-text {
    position: absolute;
    inset-block-start: 63px;
    inset-inline-start: calc((100% - 1376px) / 2 + 24px);
    inline-size: 490px;
    z-index: 2;
    display: flex;
    flex-direction: column;
  }

  .about-heading {
    font-size: 34px;
    font-weight: 700;
    line-height: normal;
    letter-spacing: -1.36px;
    margin-block-end: 36px;

    span {
      background: linear-gradient(90deg, var(--orange-btn) 0%, #8C4608 53.85%, var(--orange-btn) 100%);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      background-clip: text;
    }
  }

  .about-body {
    font-size: 16px;
    font-weight: 500;
    line-height: 29px;
    letter-spacing: 0.8px;
    color: var(--dark);
    margin-block-end: 48px;
  }

  .about-img-wrap {
    position: absolute;
    inset-block-start: 0;
    inset-inline-end: 0;
    inline-size: 827px;
    block-size: 551px;
    overflow: hidden;

    /* <picture> は inline のままだと画像の下に行間ぶんの隙間が出るので block にする */
    picture { display: block; }
  }

  .about-img {
    inline-size: 100%;
    /* width/height 属性（CLS 対策）が付いていると高さが確定して aspect-ratio が効かないので auto に戻す */
    block-size: auto;
    aspect-ratio: 827 / 551;
    object-fit: cover;
    /* 実写のエントランス（縦位置）を横長の枠に収めるので、被写体が中心に来る位置に寄せる */
    object-position: center 42%;
    display: block;
  }
}

/* ===================================================
   BUTTONS
   =================================================== */
.btn-outline {
  position: relative;
  display: flex;
  inline-size: 236px;
  block-size: 49px;
  padding: 10px;
  justify-content: center;
  align-items: center;
  gap: 10px;
  border-radius: 62px;
  background: var(--white);
  box-shadow: 0 4px 6.8px 0 rgba(0, 0, 0, 0.13);
  font-size: 15px;
  font-weight: 800;
  overflow: hidden;
  transition: box-shadow 0.35s ease;

  &::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(to right, var(--orange-btn), #999999);
    border-radius: inherit;
    opacity: 0;
    transition: opacity 0.35s ease;
  }

  &:hover {
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.18);

    &::before { opacity: 1; }
    span { -webkit-text-fill-color: var(--white); }
  }

  span {
    position: relative;
    z-index: 1;
    background: linear-gradient(to right, var(--orange), #92490b);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    transition: -webkit-text-fill-color 0.2s ease 0.1s;
  }
}

.btn-news-more {
  display: flex;
  inline-size: 308px;
  block-size: 60px;
  padding: 10px;
  justify-content: center;
  align-items: center;
  gap: 10px;
  border-radius: 87px;
  border: 2px solid #F2790E;
  background: #FFF;
  margin-block-start: 14px;
  margin-inline: auto;

  span {
    color: #F2790E;
    font-size: 15px;
    font-style: normal;
    font-weight: 600;
    line-height: normal;
  }
}

.btn-arrow {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  align-self: flex-end;
  margin-block-start: auto;
  inline-size: 49px;
  block-size: 49px;
  border-radius: 79.543px;
  border: 1px solid var(--orange);
  background: var(--white);
  overflow: hidden;
  white-space: nowrap;
  cursor: pointer;
  transition: inline-size 0.45s cubic-bezier(0.4, 0, 0.2, 1),
              background-color 0.35s ease,
              border-color 0.35s ease;

  &:hover {
    inline-size: 197px;
    background-color: var(--orange);
    border-color: var(--orange);

    .btn-arrow-label { max-inline-size: 130px; opacity: 1; margin-inline-end: 10px; }
    .btn-arrow-icon { color: var(--white); }
  }

  .btn-arrow-label {
    font-size: 15px;
    font-weight: 800;
    color: var(--white);
    max-inline-size: 0;
    overflow: hidden;
    opacity: 0;
    margin-inline-end: 0;
    transition: max-inline-size 0.35s ease,
                opacity 0.2s ease 0.12s,
                margin-inline-end 0.3s ease;
  }

  .btn-arrow-icon {
    flex-shrink: 0;
    font-size: 17px;
    font-weight: 600;
    color: var(--orange);
    line-height: 1;
    transition: color 0.25s ease;
  }
}

.btn-cta {
  position: relative;
  overflow: hidden;
  display: flex;
  inline-size: 227px;
  block-size: 46px;
  padding: 10px;
  justify-content: center;
  align-items: center;
  gap: 10px;
  background: var(--orange-btn);
  border-radius: 87px;
  color: var(--white);
  font-size: 12px;
  font-weight: 600;
  line-height: normal;
  transition: opacity 0.2s;

  &:hover { opacity: 0.85; }

  /* ホバー時に光沢が左から右へ流れる */
  &::after {
    content: '';
    position: absolute;
    inset-block: 0;
    inset-inline: 0;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.45), transparent);
    transform: translateX(-100%);
    transition: transform 0.5s ease;
    pointer-events: none;
  }

  &:hover::after { transform: translateX(100%); }
}

/* ===================================================
   VALUE
   =================================================== */
.section-header {
  min-width: 305px;
  max-width: 305px;
}

/* 英字（VALUE / BUSINESS / NEWS）が主見出し・日本語が副題という組み方をやめ、
   日本語だけの見出しにした。サイズと太さは下層ページの .pg-sec-title と揃えている */
.section-title {
  font-size: 32px;
  font-weight: 700;
  color: var(--dark);
  line-height: 1.45;
}

.value {
  display: flex;
  padding-block: 150px;
  max-width: 1376px;
  margin-inline: auto;
  padding-inline: 24px;

  .value-list {
    display: flex;
    flex-direction: column;
    gap: 60px;
  }

  .value-item {
    display: grid;
    grid-template-columns: 279px 1fr;
    gap: 36px;
    align-items: center;
  }

  .value-item picture { display: block; }

  .value-img {
    inline-size: 279px;
    /* width/height 属性（CLS 対策）が付いていると高さが確定して aspect-ratio が効かないので auto に戻す */
    block-size: auto;
    aspect-ratio: 279 / 179;
    object-fit: cover;
    display: block;
    flex-shrink: 0;
    border-radius: 15px;
  }

  .value-text {
    h3 {
      font-size: 22px;
      font-weight: 700;
      color: var(--dark);
      line-height: 29px;
      letter-spacing: 1.1px;
      margin-block-end: 20px;
    }

    p {
      font-size: 18px;
      font-weight: 500;
      line-height: 29px;
      letter-spacing: 0.9px;
      color: var(--dark);
    }
  }
}

/* ===================================================
   BUSINESS (TOP PAGE)
   =================================================== */
.business {
  padding-block: 150px 120px;
  max-width: 1376px;
  margin-inline: auto;
  padding-inline: 24px;

  .section-header { margin-block-end: 74px; }

  /* Bento グリッド。4列×2行の枠に、不動産売買を 2列×2行の主役、
     不動産買取を 2列×1行、残り 2 つを 1列×1行で置く。
     カードの写真は余った高さを埋める（object-fit: cover）ので、
     どのマスに入っても破綻しない */
  .business-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(2, 236px);
    gap: 24px;
  }

  .business-card {
    display: flex;
    flex-direction: column;
    background: var(--white);
    border-radius: 15px;
    overflow: hidden;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
    /* 現れ方（BUSINESS セクションが表示されたら順番に出る）と、
       hover の影の変化を 1 つの transition でまとめて扱う */
    opacity: 0;
    transform: translateY(16px);
    transition: opacity 0.6s ease,
                transform 0.6s ease,
                box-shadow 0.35s cubic-bezier(0.4, 0, 0.2, 1);

    &.is-featured { grid-column: span 2; grid-row: span 2; }
    &.is-wide { grid-column: span 2; }

    &.is-featured .business-info {
      padding: 24px 20px;

      h3 { font-size: 20px; }
      p { font-size: 14px; }
    }

    /* 小さいカードは文字ブロックを低くして、写真に高さを譲る。
       矢印ボタンは絶対配置にして、hover で伸びても本文が折り返さないようにする */
    &:not(.is-featured) .business-info {
      position: relative;
      padding: 16px 72px 16px 14px;

      h3 { line-height: 24px; margin-block-end: 4px; }
      p { margin-block-end: 0; }

      .btn-arrow {
        position: absolute;
        inset-block-start: 50%;
        inset-inline-end: 14px;
        transform: translateY(-50%);
        margin-block-start: 0;
      }
    }
  }

  .business-card picture {
    display: block;
    flex: 1;
    min-block-size: 0;
    overflow: hidden;
  }

  .business-img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .business-info {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    padding: 20px 13px;
    flex-shrink: 0;

    h3 {
      color: var(--dark);
      font-size: 16px;
      font-weight: 700;
      line-height: 29px;
      letter-spacing: 0.8px;
      margin-block-end: 8px;
    }

    p {
      color: var(--dark);
      font-size: 13px;
      font-weight: 500;
      line-height: 22px;
      letter-spacing: 0.65px;
      margin-block-end: 16px;
    }
  }
}

/* カードは BUSINESS セクションが表示されてから 100ms ずつずれて現れる。
   hover / 押下の反応まで遅れないよう、その 2 つは transition-delay を 0 に戻す */
.business.is-visible {
  .business-card {
    opacity: 1;
    transform: none;
  }

  .business-card:nth-child(2) { transition-delay: 0.1s; }
  .business-card:nth-child(3) { transition-delay: 0.2s; }
  .business-card:nth-child(4) { transition-delay: 0.3s; }

  .business-card:hover {
    transition-delay: 0s;
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.14);

    .business-img { transform: scale(1.03); }
  }

  .business-card:active {
    transition-delay: 0s;
    transform: translateY(2px);
  }
}

/* サービス詳細ページ・about の「特長 3 点」も同じ間隔で順に現れる */
.why .why-item {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.why.is-visible {
  .why-item {
    opacity: 1;
    transform: none;
  }

  .why-item:nth-child(2) { transition-delay: 0.1s; }
  .why-item:nth-child(3) { transition-delay: 0.2s; }
}

/* ===================================================
   CTA BANNER
   =================================================== */
.cta-banner {
  position: relative;
  z-index: 1;
  block-size: 385px;
  display: grid;
  place-items: center;
  overflow: hidden;

  .cta-bg {
    position: absolute;
    inset: 0;
    background-image: url('../images/top/footer.jpg');
    /* WebP が使えるブラウザは軽い方を読む。未対応なら上の url() が残る（472KB → 29KB） */
    background-image: image-set(url('../images/top/footer.webp') type('image/webp'),
                                url('../images/top/footer.jpg') type('image/jpeg'));
    background-size: cover;
    background-position: center;
    z-index: 0;
  }

  .cta-inner {
    position: relative;
    z-index: 1;
    text-align: center;
    color: var(--white);
    width: 641px;
    height: 230px;
    background: rgba(255, 255, 255, 0.60);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }

  .cta-title {
    color: var(--mid);
    text-align: center;
    font-size: 16px;
    font-weight: 700;
    line-height: 25px;
    letter-spacing: 0.8px;
    margin-block-end: 19px;
  }

  .cta-sub {
    color: var(--mid);
    text-align: center;
    font-size: 11px;
    font-weight: 400;
    line-height: 16px;
    letter-spacing: 0.55px;
    margin-block-end: 19px;
  }
}

/* パララックス（data-speed="auto"）用に上下へはみ出させる。
   ScrollSmoother が動くページ（#smooth-content 内）だけに限定する */
#smooth-content .cta-bg {
  inset-block: -12%;
}

/* ===================================================
   FOOTER
   =================================================== */
.site-footer {
  position: relative;
  z-index: 1;
  background: var(--white);
  padding-block: 57px 30px;

  .footer-inner {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    max-width: 955px;
    margin-inline: auto;
    margin-block-end: 50px;
    padding-inline: 24px;
  }

  .footer-brand {
    display: flex;
    flex-direction: column;
    gap: 6px;
  }

  .footer-address {
    font-size: 8px;
    font-weight: 500;
    color: var(--mid);
    line-height: 15px;
    padding-inline-start: 40px;
  }

  /* 住所の下の電話番号。住所（8px）より少し大きくして、番号だけは読めるようにする */
  .footer-tel {
    padding-inline-start: 40px;
    margin-block-start: 4px;

    a {
      color: var(--mid);
      font-size: 13px;
      font-weight: 700;
      line-height: 18px;
      letter-spacing: 0.5px;
      transition: color 0.2s;

      &:hover { color: var(--orange); }
    }

    .footer-tel-note {
      display: block;
      color: var(--mid);
      font-size: 9px;
      font-weight: 500;
      line-height: 15px;
    }
  }

  .footer-nav {
    display: flex;
    gap: 79px;
    padding-block-start: 12px;

    .footer-nav-col {
      h3 {
        font-size: 13px;
        font-weight: 900;
        color: var(--mid);
        line-height: 21px;
        margin-block-end: 4px;
      }

      ul {
        display: flex;
        flex-direction: column;
        gap: 4px;
      }

      a {
        display: block;
        font-size: 8px;
        font-weight: 500;
        line-height: 15px;
        color: var(--mid);
        padding-inline-start: 9px;
        transition: color 0.2s;

        &:hover { color: var(--orange); }
      }

      /* 見出しと直下のリンクが同じ文言になる列（私たちについて / お知らせ /
         お問い合わせ）は見出しを置いていない。そのリンク自体を見出しの見た目にして、
         他の列の見出し行と高さを揃える */
      &:not(:has(h3)) a {
        /* リンクは既定で本文フォント（Noto Sans JP は 900 を持たない）なので、
           見出しと同じ Zen Kaku Gothic New に切り替えないと太さが揃わない */
        font-family: var(--font-heading);
        font-size: 13px;
        font-weight: 900;
        line-height: 21px;
        padding-inline-start: 0;
      }
    }
  }

  .copyright {
    font-size: 8px;
    font-weight: 500;
    color: var(--mid);
    text-align: center;
  }
}

/* ===================================================
   PAGE HERO (about / business / news / contact)
   =================================================== */
.pg-hero {
  position: relative;
  padding-block-start: var(--header-h);
}

.pg-hero-layout {
  position: relative;
  block-size: 500px;
}

.pg-hero-img-wrap {
  position: absolute;
  inset-block-start: 0;
  inset-inline-end: 0;
  width: 100%;
  block-size: 100%;
  overflow: hidden;
  z-index: 0;
}

.pg-hero-img {
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
  object-position: center 25%;
  display: block;
}

/* パララックス（data-speed="auto"）用にマスクより高くしておく。
   ScrollSmoother が動くページ（#smooth-content 内）だけに限定する。
   SP ではマスクの高さが auto になるため 118% は auto に解決され、
   はみ出しが無い＝パララックスも自動的に効かない。
   picture は既定が inline で画像と同じ大きさに縮むと ScrollSmoother が
   はみ出し量を測れないため、マスクと同じ高さのブロックにしておく */
#smooth-content .pg-hero-img-wrap picture {
  display: block;
  block-size: 100%;
}

#smooth-content .pg-hero-img {
  block-size: 118%;
}

/* 実写の室内写真（4:3）は既定の center 25% だと天井ばかりが映るので、
   床や家具が入る位置まで下げる（about.html のヒーロー・リノベーションのヒーロー） */
.about-hero .pg-hero-img,
.svc-hero-interior .pg-hero-img {
  object-position: center 62%;
}

.pg-hero-cover {
  position: absolute;
  inset-block-end: 0;
  inset-inline-start: 0;
  inline-size: 100%;
  display: block;
  z-index: 2;
}

/* news.html は GSAP 非搭載で #smooth-wrapper（overflow: hidden）が無いため、
   下の .news-bg1（right: -10vw）が画面の外へはみ出して PC で横スクロールが出ていた（1440 で 144px）。
   ページの一番外側で切り取って止める。class を <html> に付けているのは、
   body に掛けても documentElement のはみ出しが残るため（実測）。
   overflow: hidden と違って clip は position: fixed の入れ物にならないので、
   固定ヘッダーの効き方は変わらない */
.news-list-page {
  overflow-x: clip;
}

.biz-bg1,
.news-bg1,
.contact-bg1 {
  position: absolute;
  top: 2vw;
  right: -10vw;
  display: block;
  z-index: 2;
}

.contact-bg1 {
  top: -6vw;
  right: unset;
  left: -1vw;
}

.pg-hero-text {
  position: absolute;
  inset-block-end: 32px;
  inset-inline-start: var(--content-pad);
  z-index: 3;
}

.pg-hero-title {
  font-size: 35px;
  font-weight: 700;
  line-height: 31px;
  /* 英字ラベル（旧 .pg-hero-en）を外したぶん、見出しと説明文の間を取り直している */
  margin-block-end: 16px;
}

.pg-hero-desc {
  font-size: 15px;
  font-weight: 500;
  line-height: 25px;
}

/* ===================================================
   TRUST & SOPHISTICATION
   =================================================== */
.trust-bg {
  inline-size: 100%;
  display: block;
}

.trust {
  background: #faf6f0;
  padding-block: 150px 120px;

  .trust-inner {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 109px;
    max-width: 1376px;
    margin-inline: auto;
    padding-inline: 24px;
  }

  .trust-heading {
    color: var(--dark);
    font-size: 34px;
    font-weight: 600;
    line-height: 44px;
    letter-spacing: 1.7px;
    margin-block-end: 20px;
  }

  .trust-body {
    display: flex;
    flex-direction: column;
    gap: 16px;
    color: var(--dark);
    font-size: 18px;
    font-weight: 500;
    line-height: 29px;
    letter-spacing: 0.9px;
  }

  /* <picture> は inline のままだと画像の下に行間ぶんの隙間が出るので block にする */
  .trust-photos picture { display: block; }

  .trust-photo {
    inline-size: 100%;
    /* width/height 属性（CLS 対策）が付いていると高さが確定して aspect-ratio が効かないので auto に戻す */
    block-size: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 12px;
    display: block;
  }
}

/* ===================================================
   WHY RENESS
   =================================================== */
.why {
  position: relative;
  overflow: hidden;

  .why-inner {
    position: relative;
    z-index: 1;
    padding-block: 150px 120px;
    max-width: 1376px;
    margin-inline: auto;
    padding-inline: 24px;
  }

  .why-header {
    text-align: center;
    margin-block-end: 80px;
  }

  .why-title {
    color: var(--dark);
    text-align: center;
    font-size: 35px;
    font-weight: 700;
    line-height: 31px;
  }

  .why-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 130px;
  }

  .why-item {
    display: flex;
    flex-direction: column;
    padding-block: 15px;

    &:first-of-type,
    &:last-of-type { position: relative; }

    &:first-of-type::after {
      content: "";
      position: absolute;
      top: 0;
      right: -65px;
      width: 1px;
      height: 100%;
      background: #EAEBEA;
    }

    &:last-of-type::after {
      content: "";
      position: absolute;
      top: 0;
      left: -65px;
      width: 1px;
      height: 100%;
      background: #EAEBEA;
    }
  }

  .why-item-title {
    color: var(--orange-btn);
    font-size: 22px;
    font-weight: 700;
    line-height: 29px;
    letter-spacing: 1.1px;
    margin-block-end: 20px;
  }

  .why-item-body {
    color: var(--dark);
    font-size: 18px;
    font-weight: 500;
    line-height: 29px;
    letter-spacing: 0.9px;
    margin-block-end: 24px;
  }

  /* <picture> で包むと、下端に寄せる auto マージンは img ではなく親に要る */
  .why-item picture {
    display: block;
    inline-size: 100%;
    margin-block-start: auto;
  }

  .why-item-img {
    inline-size: 100%;
    /* width/height 属性（CLS 対策）が付いていると高さが確定して aspect-ratio が効かないので auto に戻す */
    block-size: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 12px;
    display: block;
    margin-block-start: auto;
  }
}

/* ===================================================
   COMPANY INFO
   =================================================== */
.company {
  padding-block: 150px 120px;

  .company-inner {
    max-width: 1376px;
    margin-inline: auto;
    padding-inline: 24px;
  }

  /* 「COMPANY INFOMATION」をやめて日本語見出しにした。
     行の高さと下マージンは据え置きで、下のテーブルの位置は変えていない */
  .company-title {
    color: var(--dark);
    font-size: 32px;
    font-weight: 700;
    line-height: 89px;
    margin-block-end: 75px;
  }

  .company-table {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 53px;
    border-radius: 0 0 5px 5px;
    background: var(--white);
    box-shadow: 0 14px 10.9px 0 rgba(0, 0, 0, 0.07);
    overflow: hidden;
    padding: 48px 84px;
  }

  .company-dl {
    display: flex;
    flex-direction: column;
  }

  .company-row {
    display: grid;
    grid-template-columns: 118px 1fr;
    gap: 50px;
    padding-block: 18px;
    border-bottom: 1px solid #E1E1E1;
    align-items: baseline;

    &:last-child { border-bottom: none; }

    dt { color: var(--orange); font-size: 15px; font-weight: 500; }

    dd { color: var(--dark); font-size: 15px; font-weight: 500; line-height: 23px; }

    /* 電話番号はスマホでそのまま掛けられるよう tel: リンクにしてある。
       文字色は本文のまま（a { color: inherit }）で、hover のときだけ色が変わる */
    .company-tel {
      transition: color 0.2s;

      &:hover { color: var(--orange); }
    }
  }
}

/* ===================================================
   SHARED — Page section header
   =================================================== */
.pg-sec-hd {
  position: relative;
  text-align: center;
  margin-block-end: 60px;

  /* 背景の装飾曲線（.biz-bg2 など）が見出しに重なると文字が読みにくくなるので、
     見出しの後ろに白のぼかしを敷いて逃がす。
     白背景の上では何も見えないので、装飾が来ない見出し・SPでは影響しない */
  &::before {
    content: '';
    position: absolute;
    z-index: -1;
    inset-block: -40px;
    inset-inline-start: 50%;
    inline-size: min(600px, 100%);
    transform: translateX(-50%);
    pointer-events: none;
    background: radial-gradient(closest-side, #fff 0%, #fff 52%, rgba(255, 255, 255, 0) 100%);
  }

  /* 英字ラベル（旧 .pg-sec-en）を外したので、見出しの下マージンも外している */
  .pg-sec-title {
    font-size: 32px;
    font-weight: 700;
    color: var(--dark);
  }
}

/* ===================================================
   BUSINESS PAGE — SERVICE SECTION
   =================================================== */
.biz-bg2,
.news-bg2,
.contact-bg2 {
  position: absolute;
  bottom: 0;
  right: 0;
  display: block;
  z-index: 1;
  pointer-events: none;
  opacity: 0.92;
}

.news-bg2 {
  width: 100%;
  bottom: unset;
  top: 0;
  object-fit: cover;
  min-height: 80%;
}

/* .biz-bg1 / .biz-bg2 / .biz-bg2-sp もインライン SVG（js/deco.js が <div> に組み替える）。
   元の <img> の実寸・縦横比をここで明示しておく（理由は .about-page-deco のコメント参照） */
.biz-bg1 { top: -103px; right: 0; inline-size: 740px; aspect-ratio: 740 / 645; }
.biz-bg2 { z-index: -1; width: 100%; aspect-ratio: 1728 / 2553; }
.contact-bg2 { bottom: 256px; z-index: -1; }

.contact-bg2-sp {
  position: absolute;
  bottom: 150vw;
  right: 0;
  width: 100%;
  display: none;
  z-index: -1;
  pointer-events: none;
  opacity: 0.92;
}

.biz-bg2-sp {
  position: absolute;
  bottom: 0;
  right: 0;
  display: none;
  z-index: -1;
  width: 100%;
  aspect-ratio: 402 / 2632;
  pointer-events: none;
  opacity: 0.92;
}

.news-bg-sp {
  position: absolute;
  top: 0;
  right: 0;
  width: 100%;
  min-height: 80%;
  object-fit: cover;
  display: none;
  z-index: -1;
  pointer-events: none;
  opacity: 0.92;
}

.biz-service {
  position: relative;
  overflow: hidden;
  padding-block: 150px 120px;

  .biz-service-inner {
    position: relative;
    z-index: 1;
    max-width: 1203px;
    margin-inline: auto;
    padding-inline: 24px;
  }
}

.service-accordion {
  border: 2px solid var(--border-orange-light);
  border-radius: 0 0 5px 5px;
  overflow: hidden;
  background: var(--white);

  .service-item {
    border-bottom: 2px solid var(--border-orange-light);

    &:last-child { border-bottom: none; }

    &[open] {
      .toggle-plus { display: none; }
      .toggle-minus { display: block; }
    }
  }
}

.service-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 25px 50px;
  cursor: pointer;
  gap: 20px;
  list-style: none;

  &::-webkit-details-marker { display: none; }
  &::marker { display: none; }

  .service-summary-text {
    h3 {
      color: var(--dark);
      font-size: 22px;
      font-weight: 700;
      line-height: 29px;
      letter-spacing: 1.1px;
      margin-block-end: 15px;
    }

    p {
      color: var(--dark);
      font-size: 18px;
      font-weight: 500;
      line-height: 29px;
      letter-spacing: 0.9px;
    }
  }

  .service-toggle {
    inline-size: 49px;
    block-size: 49px;
  }
}

.toggle-minus { display: none; }

.service-body {
  padding: 40px 30px 30px;
  border-top: 2px solid var(--border-orange-light);
}

/* 写真＋本文の 2 カラム。business.html のアコーディオン内と、
   事業別ページ（service-*.html）のリード文で共用する */
.service-body-grid {
  display: grid;
  grid-template-columns: 452px 1fr;
  gap: 56px;
  margin-block-end: 60px;
  align-items: start;
}

.service-body-grid picture { display: block; }

.service-photo {
  inline-size: 100%;
  /* width/height 属性（CLS 対策）が付いていると高さが確定して aspect-ratio が効かないので auto に戻す */
  block-size: auto;
  aspect-ratio: 452 / 275;
  object-fit: cover;
  border-radius: 30px 30px 30px 0;
  display: block;
}

.service-detail {
  h4 {
    color: var(--orange);
    font-size: 26px;
    font-weight: 600;
    line-height: 44px;
    letter-spacing: 1.3px;
    margin-block-end: 20px;
  }

  p {
    color: var(--dark);
    font-size: 18px;
    font-weight: 500;
    line-height: 29px;
    letter-spacing: 0.9px;
    margin-block-end: 30px;

    &:last-child { margin-block-end: 0; }
  }
}

.service-coverage {
  position: relative;
  border-radius: 26px;
  border: 1px solid var(--orange);
  background: #F8F8F8;
  padding-block: 48px 34px;
  text-align: center;

  .coverage-label {
    position: absolute;
    top: -25px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 150px;
    height: 50px;
    color: var(--orange);
    font-size: 18px;
    font-weight: 700;
    line-height: 29px;
    letter-spacing: 0.9px;
    border-radius: 41px;
    border: 3px solid var(--border-orange-light);
    background: var(--white);
  }

  .coverage-pills {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;

    li {
      display: flex;
      align-items: center;
      gap: 8px;
      color: var(--dark);
      font-size: 18px;
      font-weight: 500;
      line-height: 29px;
      letter-spacing: 0.9px;
      border-radius: 55px;
      border: 1px solid var(--orange-btn);
      background: var(--white);
      padding: 5px 20px;

      &::before {
        content: '';
        display: inline-block;
        width: 19px;
        height: 19px;
        background: url('../images/business/check.svg') center / contain no-repeat;
        flex-shrink: 0;
      }
    }
  }
}

/* 施工例ギャラリー（.service-coverage と同じ枠・ラベルの見た目に合わせている） */
.service-works {
  position: relative;
  margin-block-start: 60px;
  border-radius: 26px;
  border: 1px solid var(--orange);
  background: #F8F8F8;
  padding: 48px 30px 34px;

  .works-label {
    position: absolute;
    top: -25px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 150px;
    height: 50px;
    color: var(--orange);
    font-size: 18px;
    font-weight: 700;
    line-height: 29px;
    letter-spacing: 0.9px;
    border-radius: 41px;
    border: 3px solid var(--border-orange-light);
    background: var(--white);
  }

  .works-gallery {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
  }

  .works-figure {
    display: flex;
    flex-direction: column;
    gap: 10px;

    /* <picture> は inline のままだと画像の下に行間ぶんの隙間が出るので block にする */
    picture { display: block; }
  }

  .works-photo {
    inline-size: 100%;
    /* width/height 属性（CLS 対策）が付いていると高さが確定して aspect-ratio が効かないので auto に戻す */
    block-size: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 12px;
    display: block;
  }

  figcaption {
    color: var(--mid);
    font-size: 15px;
    font-weight: 500;
    line-height: 23px;
    letter-spacing: 0.75px;
    text-align: center;
  }
}

/* ===================================================
   SERVICE DETAIL PAGES (service-*.html)
   =================================================== */
/* 事業別ページは business.html / about.html の部品をそのまま使う。
   ここに足しているのは「置き場所（余白と横幅）」だけ */
.svc-lead {
  position: relative;
  padding-block: 150px 0;

  .svc-lead-inner {
    position: relative;
    z-index: 1;
    max-width: 1203px;
    margin-inline: auto;
    padding-inline: 24px;
  }

  /* 次のセクション（.why）が続くので、2 カラムの下余白はここで閉じる */
  .service-body-grid { margin-block-end: 0; }
}

/* business.html のアコーディオン末尾に置く「詳しく見る」ボタンの受け皿。
   .btn-arrow は align-self: flex-end 前提なので flex コンテナで包む */
.service-more {
  display: flex;
  justify-content: flex-end;
  margin-block-start: 40px;
}

/* 事業別ページは business.html よりセクション数が多く、上下 150px の余白が
   隣り合って二重になる。ページ全体が間延びしないよう、間の余白は片側に寄せる */
.svc-page {
  .why .why-inner { padding-block: 120px 0; }
  .biz-service { padding-block: 120px 0; }
  .biz-flow { padding-block: 120px 0; }
  .biz-faq { padding-block: 120px; }
}

/* ===================================================
   BUSINESS PAGE — FLOW SECTION
   =================================================== */
.biz-flow {
  padding-block: 150px 120px;

  .biz-flow-inner {
    max-width: 1203px;
    margin-inline: auto;
    padding-inline: 24px;
  }
}

.flow-grid {
  position: relative;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  align-items: start;
  gap: 33px;

  &::after {
    content: '';
    position: absolute;
    width: 880px;
    left: 50%;
    transform: translateX(-50%);
    top: 65px;
    height: 1px;
    border: 1px dotted var(--orange);
  }
}

.flow-step {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;

  &:not(:last-of-type)::after {
    content: '';
    position: absolute;
    top: 55px;
    right: -26px;
    width: 23px;
    height: 23px;
    background: url('../images/business/flow-arrow.svg') center / contain no-repeat;
  }
}

.flow-icon {
  width: 140px;
  margin-block-end: 16px;
  flex-shrink: 0;

  svg, img {
    width: 140px;
    /* width/height 属性（CLS 対策）が付いているので高さは自動計算に戻す */
    block-size: auto;
    display: block;
  }
}

.flow-arr {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-block-start: 14px;

  svg { inline-size: 40px; block-size: 40px; }
}

.flow-num {
  color: var(--dark);
  text-align: center;
  font-size: 22px;
  font-weight: 700;
  line-height: 29px;
  letter-spacing: 1.1px;
  margin-block-end: 7px;
}

.flow-title {
  position: relative;
  color: var(--orange);
  text-align: center;
  font-size: 18px;
  font-weight: 600;
  line-height: 29px;
  letter-spacing: 0.9px;
  padding-block-end: 16px;
  margin-block-end: 26px;

  /* 背景の装飾曲線（.biz-bg2 など）が重なると、オレンジの見出しが同じオレンジの
     曲線に埋もれて読めなくなる。.pg-sec-hd と同じ考え方で白のぼかしを敷いて逃がす。
     白背景の上では何も見えないので、装飾が来ないページでは影響しない */
  &::before {
    content: '';
    position: absolute;
    z-index: -1;
    inset-block: -44px 0;
    inset-inline: -10px;
    pointer-events: none;
    background: radial-gradient(closest-side, #fff 0%, #fff 55%, rgba(255, 255, 255, 0) 100%);
  }

  &::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 27px;
    height: 1px;
    background: var(--orange);
  }
}

.flow-desc {
  color: var(--black);
  font-size: 15px;
  font-weight: 500;
  line-height: 25px;
  text-align: left;
}

/* ===================================================
   BUSINESS PAGE — FAQ SECTION
   =================================================== */
.biz-faq {
  position: relative;
  padding-block: 150px 120px;

  .biz-faq-inner {
    position: relative;
    z-index: 1;
    max-width: 1203px;
    margin-inline: auto;
    padding-inline: 24px;
  }
}

/* 不動産 / 不要品回収 のグループ分け */
.faq-group + .faq-group {
  margin-block-start: 50px;
}

.faq-group-title {
  display: flex;
  align-items: center;
  gap: 12px;
  color: var(--dark);
  font-size: 20px;
  font-weight: 700;
  line-height: 29px;
  letter-spacing: 1px;
  margin-block-end: 20px;

  &::before {
    content: '';
    flex-shrink: 0;
    inline-size: 4px;
    block-size: 20px;
    border-radius: 2px;
    background: var(--orange);
  }
}

/* 開閉はサービス一覧と同じ <details> パターン（クラスだけ faq- に分けている） */
.faq-accordion {
  border: 2px solid var(--border-orange-light);
  border-radius: 5px;
  overflow: hidden;
  background: var(--white);

  .faq-item {
    border-bottom: 2px solid var(--border-orange-light);

    &:last-child { border-bottom: none; }

    &[open] {
      .toggle-plus { display: none; }
      .toggle-minus { display: block; }
    }
  }
}

.faq-summary {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 25px 50px;
  cursor: pointer;
  list-style: none;
  transition: background-color 0.25s ease;

  &::-webkit-details-marker { display: none; }
  &::marker { display: none; }

  &:hover { background: color-mix(in srgb, var(--orange) 5%, var(--white)); }

  .faq-question {
    flex: 1;
    color: var(--dark);
    font-size: 18px;
    font-weight: 700;
    line-height: 29px;
    letter-spacing: 0.9px;
  }

  .faq-toggle {
    flex-shrink: 0;
    inline-size: 49px;
    block-size: 49px;
  }
}

.faq-body {
  display: flex;
  align-items: flex-start;
  gap: 20px;
  padding: 0 50px 30px;

  p {
    padding-block-start: 4px;
    color: var(--dark);
    font-size: 16px;
    font-weight: 500;
    line-height: 29px;
    letter-spacing: 0.8px;
  }
}

/* Q / A のバッジ */
.faq-q,
.faq-a {
  flex-shrink: 0;
  display: grid;
  place-items: center;
  inline-size: 34px;
  block-size: 34px;
  border-radius: 50%;
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
}

.faq-q {
  background: var(--orange);
  color: var(--white);
}

.faq-a {
  background: var(--white);
  color: var(--orange);
  border: 1px solid var(--orange);
}

/* ===================================================
   NEWS LIST PAGE
   =================================================== */
.news-list-hero {
  position: relative;
  block-size: 560px;
  overflow: hidden;
  margin-block-start: var(--header-h);

  .news-list-hero-photo {
    position: absolute;
    inset-block-start: 0;
    inset-inline-end: 0;
    inline-size: 56%;
    block-size: 56%;
    clip-path: polygon(13% 0, 100% 0, 100% 100%, 0% 100%);
  }

  .news-list-hero-img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    object-position: center 40%;
    display: block;
  }

  .news-list-hero-curves {
    position: absolute;
    inset: 0;
    inline-size: 100%;
    block-size: 100%;
    z-index: 1;
  }

  .news-list-hero-text {
    position: absolute;
    inset-block-end: 80px;
    inset-inline-start: var(--content-pad);
    z-index: 2;
  }

  .news-list-h1 {
    font-size: 40px;
    font-weight: 900;
    color: var(--dark);
    line-height: 1.2;
    margin-block-end: 4px;
  }

  .news-list-en {
    font-size: 13px;
    font-weight: 700;
    color: var(--orange);
    letter-spacing: 2px;
    margin-block-end: 20px;
  }

  .news-list-desc {
    font-size: 14px;
    font-weight: 500;
    line-height: 1.85;
    color: var(--dark);
  }
}

.news-list-section {
  padding-block: 150px 120px;

  .news-list-inner {
    max-width: 1117px;
    margin-inline: auto;
    padding-inline: 24px;
  }
}

.news-items {
  .news-item {
    padding-block: 20px;
    border-bottom: 1px dotted var(--dark);
  }

  .news-item-meta {
    display: flex;
    align-items: center;
    gap: 20px;
    margin-block-end: 15px;
  }

  .news-item-date {
    font-size: 13px;
    font-weight: 500;
    line-height: 16.208px;
    color: var(--dark);
    inline-size: 140px;
    flex-shrink: 0;
  }

  .news-item-title {
    font-size: 15px;
    font-weight: 700;
    line-height: 16.208px;
    color: var(--dark);

    a {
      color: var(--dark);
      transition: color 0.2s;
      &:hover { color: var(--orange); }
    }
  }
}

.news-item-tag {
  display: flex;
  inline-size: 109px;
  block-size: 20px;
  padding: 0 10px;
  justify-content: center;
  align-items: center;
  gap: 10px;
  font-size: 10px;
  font-weight: 700;
  line-height: 16.208px;
  color: var(--news-tag);
  border: 1px solid var(--news-tag);
  border-radius: 2px;
  white-space: nowrap;
}

.news-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin-block-start: 56px;
}

.news-page {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  inline-size: 33px;
  block-size: 37px;
  color: var(--orange-btn);
  font-size: 13px;
  font-weight: 500;
  line-height: 16.208px;
  border-radius: 1px;
  border: 1px solid var(--orange-btn);
  background: var(--white);
  transition: border-color 0.2s, color 0.2s;

  &:is(a):hover { border-color: var(--orange); color: var(--orange); }

  &--current {
    background: var(--orange-btn);
    border-color: var(--orange-btn);
    color: var(--white);
  }
}

.news-page-ellipsis {
  font-size: 14px;
  font-weight: 700;
  color: var(--muted);
  padding-inline: 4px;
}

/* ===================================================
   NEWS DETAIL PAGE
   =================================================== */
.news-detail-deco {
  position: absolute;
  top: 140px;
  left: -40px;
  display: block;
}

.news-detail {
  position: relative;
  overflow: hidden;
  padding-block: 120px 80px;
  padding-block-start: calc(var(--header-h) + 40px);

  .news-detail-inner {
    position: relative;
    z-index: 1;
    max-width: 1117px;
    margin-inline: auto;
    padding-inline: 24px;
  }
}

.thanks-bg3 {
  position: absolute;
  top: 140px;
  right: 0;
  display: block;
  bottom: -5vw;
}

.news-breadcrumb {
  margin-block-end: 216px;

  .news-breadcrumb-list {
    display: flex;
    align-items: center;
    gap: 8px;
    list-style: none;
    overflow: hidden;

    li {
      font-size: 13px;
      font-weight: 500;
      color: var(--muted);

      & + li::before { content: '>'; margin-inline-end: 8px; color: #c8c4bf; }

      &:last-child {
        color: var(--dark);
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        min-width: 0;
      }
    }

    a {
      color: var(--muted);
      transition: color 0.2s;
      &:hover { color: var(--orange); }
    }
  }
}

.news-article-wrap {
  max-width: 850px;
  margin-inline: auto;
}

.news-article-header {
  margin-block-end: 48px;

  .news-article-meta {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-block-end: 16px;
  }

  .news-article-date { font-size: 13px; font-weight: 500; color: var(--muted); }

  .news-article-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--dark);
    line-height: 1.45;
    margin-block-end: 24px;
  }

  .news-article-divider { border: none; border-top: 1.5px solid #e4e0db; }
}

.news-article-body {
  display: flex;
  flex-direction: column;
  gap: 24px;
  margin-block-end: 94px;

  p { font-size: 15px; font-weight: 500; line-height: 1.85; color: var(--dark); }
}

.news-back-wrap {
  text-align: center;
  margin-block-end: 100px;
}

.btn-back-list {
  display: flex;
  width: 284px;
  height: 46px;
  padding: 10px;
  justify-content: center;
  align-items: center;
  gap: 10px;
  border-radius: 87px;
  background: var(--orange-btn);
  color: var(--white);
  font-size: 12px;
  font-weight: 600;
  line-height: normal;
  transition: opacity 0.2s;
  margin-inline: auto;

  &:hover { opacity: 0.82; }
}

/* ===================================================
   CONTACT PAGE
   =================================================== */
.contact-hero {
  position: relative;
  block-size: 420px;
  overflow: hidden;
  margin-block-start: var(--header-h);

  .contact-hero-img {
    position: absolute;
    inset: 0;
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    object-position: center 30%;
  }

  .contact-hero-wave {
    position: absolute;
    bottom: -1px;
    left: 0;
    inline-size: 100%;
    block-size: 88px;
  }
}

.contact-intro {
  padding-block: 52px 12px;
  padding-inline: var(--content-pad);

  .contact-intro-inner { max-inline-size: 780px; }

  .contact-h1 { font-size: 38px; font-weight: 900; color: var(--dark); margin-block-end: 6px; line-height: 1.2; }

  .contact-en { font-size: 13px; font-weight: 700; color: var(--orange); letter-spacing: 2px; margin-block-end: 20px; }

  .contact-desc { font-size: 14px; font-weight: 500; line-height: 1.85; color: var(--dark); }
}

.contact-form-section {
  position: relative;
  /* サイドバーの position: sticky を効かせるため overflow は指定しない
     （overflow を持つ祖先はスクロール枠になり sticky が固定されなくなる） */
  padding-block: 150px 120px;

  .contact-form-deco {
    position: absolute;
    inset-block-start: -80px;
    inset-inline-end: -60px;
    inline-size: 520px;
    block-size: 780px;
    background-image: url('../images/contact/page-curves.svg');
    background-size: contain;
    background-repeat: no-repeat;
    background-position: top right;
    pointer-events: none;
    z-index: 0;
  }

  .contact-form-inner {
    position: relative;
    z-index: 1;
    max-width: 1203px;
    margin-inline: auto;
    padding-inline: 24px;
  }
}

/* PC はフォーム + 右サイドバーの2カラム（SP では 1024px 以下で縦積みにする） */
.contact-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 60px;
  align-items: start;
}

.contact-form {
  display: flex;
  flex-direction: column;
}

/* お問い合わせ先の情報。ページに ScrollSmoother が無いので sticky がそのまま効く */
.contact-sidebar {
  position: sticky;
  inset-block-start: calc(var(--header-h) + 24px);
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.contact-info-card {
  border: 1px solid var(--border-orange-light);
  border-block-start: 3px solid var(--orange);
  border-radius: 4px;
  background: var(--white);
  padding: 24px;

  h2 {
    color: var(--orange);
    font-size: 13px;
    font-weight: 700;
    line-height: normal;
    letter-spacing: 1px;
    margin-block-end: 14px;
  }

  p,
  address {
    color: var(--dark);
    font-size: 14px;
    font-weight: 500;
    line-height: 25px;
  }

  .contact-phone {
    display: block;
    color: var(--dark);
    font-size: 24px;
    font-weight: 700;
    line-height: normal;
    letter-spacing: 0.5px;
    margin-block-end: 8px;
    transition: color 0.2s ease;

    &:hover { color: var(--orange); }
  }

  .contact-hours {
    font-size: 13px;
    color: var(--light-gray);
    line-height: 22px;
  }
}

.form-message {
  padding-block: 12px;
  padding-inline: 20px;
  border-radius: 4px;
  background: color-mix(in srgb, green 10%, transparent);
  color: green;
  font-size: 14px;
  font-weight: 700;

  &.is-error {
    background: color-mix(in srgb, red 10%, transparent);
    color: red;
  }
}

.form-row {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 69px;
  align-items: center;
  padding-block: 15px;
}

.form-label {
  display: flex;
  align-items: center;
  gap: 28px;
  min-width: 205px;

  .form-label-text { color: var(--dark); font-size: 15px; font-weight: 700; line-height: 16.208px; }

  .form-required {
    flex-shrink: 0;
    display: flex;
    width: 34px;
    height: 20px;
    justify-content: center;
    align-items: center;
    gap: 10px;
    color: var(--white);
    font-size: 10px;
    font-weight: 700;
    line-height: 16.208px;
    background: var(--orange);
    border-radius: 4px;
  }

  /* 任意の項目。必須バッジと同じ大きさで、色だけ控えめにする */
  .form-optional {
    flex-shrink: 0;
    display: flex;
    width: 34px;
    height: 20px;
    justify-content: center;
    align-items: center;
    color: var(--light-gray);
    font-size: 10px;
    font-weight: 700;
    line-height: 16.208px;
    border: 1px solid var(--border-input);
    border-radius: 4px;
  }
}

.form-control {
  display: flex;
  flex-direction: column;
}

.form-radios {
  flex-direction: row;
  gap: 56px;
}

.form-radio-label {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 700;
  line-height: 16.208px;
  color: var(--dark);
  cursor: pointer;
  user-select: none;

  input[type="radio"] {
    appearance: none;
    inline-size: 14px;
    block-size: 14px;
    border: 1.5px solid var(--border-input);
    border-radius: 50%;
    flex-shrink: 0;
    transition: border-color 0.2s;
    position: relative;
    cursor: pointer;

    &::after {
      content: '';
      position: absolute;
      inset: 3px;
      border-radius: 50%;
      background: var(--orange);
      opacity: 0;
      transition: opacity 0.2s;
    }

    &:checked {
      border-color: var(--orange);
      &::after { opacity: 1; }
    }
  }
}

.form-select-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
  width: 386px;

  .form-select {
    inline-size: 100%;
    height: 45px;
    appearance: none;
    border-radius: 2px;
    border: 1px solid var(--border-input);
    padding: 0 18px;
    color: var(--dark);
    font-size: 15px;
    font-weight: 700;
    line-height: 16.208px;
    background: #ffffffb8;
    outline: none;
    cursor: pointer;
    transition: border-color 0.2s;

    &:focus { border-color: var(--orange); }
  }

  .form-select-arrow {
    position: absolute;
    inset-inline-end: 16px;
    font-size: 11px;
    color: var(--dark);
    pointer-events: none;
  }
}

.form-input {
  inline-size: 100%;
  border-radius: 2px;
  border: 1px solid var(--border-input);
  padding: 10px 4px;
  font-size: 14px;
  font-weight: 500;
  color: var(--dark);
  background: rgba(255, 255, 255, 0.9);
  outline: none;
  font-family: inherit;
  transition: border-color 0.2s;

  &:focus { border-color: var(--orange); }
}

.form-textarea {
  inline-size: 100%;
  min-block-size: 295px;
  border: 1px solid var(--border-input);
  border-radius: 2px;
  padding: 12px 14px;
  font-size: 14px;
  font-weight: 500;
  color: var(--dark);
  background: rgba(255, 255, 255, 0.9);
  outline: none;
  font-family: inherit;
  resize: vertical;
  transition: border-color 0.2s;

  &:focus { border-color: var(--orange); }
}

.form-privacy {
  padding-block: 45px 55px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;

  .form-privacy-note { color: var(--black); font-size: 15px; font-weight: 500; line-height: 25px; }
}

.form-privacy-note a,
.form-checkbox-label a {
  color: #564BCE;
  font-size: 15px;
  font-weight: 500;
  line-height: 25px;
  text-decoration-line: underline;
  text-decoration-style: solid;
  text-decoration-skip-ink: auto;
  text-decoration-thickness: auto;
  text-underline-offset: auto;
  text-underline-position: from-font;
}

.form-checkbox-label {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--black);
  font-size: 15px;
  font-weight: 500;
  line-height: 25px;
  cursor: pointer;
  user-select: none;

  input[type="checkbox"] {
    appearance: none;
    inline-size: 20px;
    block-size: 20px;
    border: 1px solid var(--border-input);
    border-radius: 2px;
    flex-shrink: 0;
    cursor: pointer;
    position: relative;
    transition: border-color 0.2s, background 0.2s;

    &:checked {
      background: var(--orange);
      border-color: var(--orange);

      &::after {
        content: '';
        position: absolute;
        inset-inline-start: 4px;
        inset-block-start: 1px;
        inline-size: 8px;
        block-size: 12px;
        border-inline-end: 2px solid white;
        border-block-end: 2px solid white;
        transform: rotate(45deg);
      }
    }
  }
}

/* 入力エラー（未入力の必須項目） */
.form-input.input-error,
.form-textarea.input-error,
.form-select.input-error {
  border-color: var(--error);
  background: color-mix(in srgb, var(--error) 4%, var(--white));
}

.form-radios.input-error input[type="radio"],
.form-checkbox-label.input-error input[type="checkbox"] {
  border-color: var(--error);
}

.form-radios.input-error .form-radio-label,
.form-checkbox-label.input-error {
  color: var(--error);
}

.form-submit-wrap {
  text-align: center;
  padding-block-start: 8px;
}

.btn-form-submit {
  display: inline-block;
  background: var(--orange);
  color: var(--white);
  font-size: 12px;
  font-weight: 600;
  line-height: normal;
  padding: 16px 72px;
  border-radius: 99px;
  border: none;
  cursor: pointer;
  transition: opacity 0.2s;
  letter-spacing: 1px;

  &:hover { opacity: 0.82; }
}

/* ===================================================
   ANTIQUE DEALER LICENSE (service-collection)
   =================================================== */
/* 古物営業法で求められる表示。相談帯の直前に小さく置く */
.antique-license {
  padding-block: 0 60px;

  .antique-license-inner {
    max-width: 1203px;
    margin-inline: auto;
    padding-inline: 24px;
    text-align: center;
  }

  .antique-license-title {
    color: var(--light-gray);
    font-size: 12px;
    font-weight: 700;
    line-height: 20px;
  }

  .antique-license-body {
    color: var(--light-gray);
    font-size: 13px;
    font-weight: 500;
    line-height: 22px;
  }
}

/* ===================================================
   THANKS PAGE
   =================================================== */
.thanks-section {
  position: relative;
  overflow: hidden;
  display: grid;
  place-items: center;
  padding-block: 225px 120px;
  padding-inline: 20px;
  padding-block-start: calc(var(--header-h) + 100px);

  .thanks-deco {
    position: absolute;
    inset-block-start: 0;
    inset-inline-end: -60px;
    inline-size: 520px;
    block-size: 780px;
    background-image: url('../images/contact/page-curves.svg');
    background-size: contain;
    background-repeat: no-repeat;
    background-position: top right;
    pointer-events: none;
    z-index: 0;
  }

  .thanks-inner {
    position: relative;
    z-index: 1;
    text-align: center;
    max-inline-size: 640px;
  }

  .thanks-title {
    color: var(--orange-btn);
    text-align: center;
    font-size: 35px;
    font-weight: 700;
    line-height: 31px;
    margin-block-end: 94px;
  }

  .thanks-body {
    display: flex;
    flex-direction: column;
    gap: 16px;
    margin-block-end: 94px;
    color: var(--black);
    font-size: 15px;
    font-weight: 500;
    line-height: 25px;

    p { font-size: 15px; font-weight: 500; line-height: 1.85; color: var(--dark); }
  }
}

/* 404。見出しが 2 行になるので、送信完了（1 行前提の line-height: 31px）より行間を広く取る */
.thanks-section.notfound .thanks-title {
  line-height: 1.45;
  margin-block-end: 64px;
}

.btn-back-top {
  display: inline-block;
  background: var(--orange);
  color: var(--white);
  font-size: 12px;
  font-weight: 600;
  line-height: normal;
  padding: 16px 64px;
  border-radius: 99px;
  transition: opacity 0.2s;

  &:hover { opacity: 0.82; }
}

/* ===================================================
   HAMBURGER MENU
   =================================================== */
.nav-toggle { display: none; }

.nav-hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  cursor: pointer;
  inline-size: 28px;
  block-size: 28px;
  padding: 2px;

  span {
    display: block;
    block-size: 2px;
    background: var(--dark);
    border-radius: 2px;
    transition: transform 0.3s ease, opacity 0.2s ease;
  }
}

.nav-drawer {
  display: none;
  position: fixed;
  inset-block-start: var(--header-h);
  inset-inline: 0;
  background: var(--white);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10);
  border-block-start: 2px solid rgba(248, 124, 17, 0.2);
  z-index: 150;
  flex-direction: column;

  ul { display: flex; flex-direction: column; }

  li {
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);

    a {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 18px 24px;
      font-size: 15px;
      font-weight: 700;
      color: var(--dark);
      border-inline-start: 3px solid transparent;
      transition: color 0.2s, border-color 0.2s, background-color 0.2s;

      &::after { content: '→'; font-size: 13px; color: var(--orange); transition: transform 0.2s ease; }

      &:hover {
        color: var(--orange);
        border-inline-start-color: var(--orange);
        background-color: rgba(248, 124, 17, 0.04);

        &::after { transform: translateX(4px); }
      }
    }
  }

  .btn-contact { inline-size: calc(100% - 48px); margin: 20px 24px; }
}

/* ===================================================
   MOTION（スクロール演出。動かすのは js/motion.js）
   =================================================== */

/* ---- 演出前の非表示 ----
   .js は各ページの <head> のインラインスクリプトが付ける（= JS が動く環境の印）。
   ここで先に隠すのは、js/motion.js が動くまでの一瞬だけ見えて消える「ちらつき」を
   無くすため。JS 無効なら .js が付かないので、見出しも写真も普通に表示される。
   ・visibility ではなく opacity で隠す（visibility:hidden は読み上げ・ページ内検索・
     クローラからも消えてしまう。透明なだけならテキストとしては残る）
   ・motion.js が読めなかったときは <head> の保険が 4 秒後に .js を外して必ず表示する */
.js .rise,
.js .wipe img { opacity: 0; }

@media (prefers-reduced-motion: reduce) {
  .js .rise,
  .js .wipe img { opacity: 1; }
}

/* ---- カラーワイプ ----
   主役写真の上をオレンジの帯が右→左に塗り、左→右に抜けたあとに写真が浮かぶ。
   帯は JS が <span class="wipe-bar"> を作って差し込む。JS が動かないとき・
   「視差効果を減らす」設定のときは帯そのものが無く、写真は普通に表示される */
.wipe {
  position: relative;
  display: block;
  overflow: hidden;
}

.wipe-bar {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: color-mix(in srgb, var(--orange) 85%, transparent);
  transform: scaleX(0);
  transform-origin: 100% 50%;
  pointer-events: none;
}

/* 帯が写真の角からはみ出さないよう、写真と同じ角丸で切り抜く */
.value-item .wipe { border-radius: 15px; }
.trust-photos .wipe { border-radius: 12px; }
.service-body-grid .wipe { border-radius: 30px 30px 30px 0; }
.works-figure .wipe { border-radius: 12px; }

/* ---- 見出しのせり上がり ----
   .rise-mask で下を刈り取り、中の .rise を下から持ち上げる。
   ・上下に padding の余裕を作るのは、ディセンダ（g・ぱ の下）や
     line-height が font-size より小さい見出し（.pg-hero-title = 35px/31px）が
     切れないようにするため。同じ量の負マージンで元の高さに戻している
   ・親の見出しを flow-root にしているのは、この負マージンが親のマージンと
     相殺されて位置がずれるのを防ぐため
   ・横は clip しない（.hero-title は white-space: nowrap ＋ letter-spacing で
     枠から少しはみ出す組み方なので、横も刈ると文字が欠ける） */
.has-rise { display: flow-root; }

.rise-mask {
  display: block;
  overflow-x: visible;
  overflow-y: clip;
  padding-block: 0.22em;
  margin-block: -0.22em;
}

.rise { display: block; }

/* ===================================================
   RESPONSIVE
   =================================================== */

@media (max-width: 1550px) {
  .hero-scroll { inset-inline-end: var(--content-pad); }
}

@media (max-width: 1376px) {
  .about .about-text { inset-inline-start: 24px; }
  .business .business-grid { gap: 24px; }
  .site-header .nav-list { gap: 20px; }
  .why .why-grid { gap: 70px; }
  .why .why-item:first-of-type::after { right: -35px; }
  .why .why-item:last-of-type::after { left: -35px; }
}

@media (max-width: 1024px) {
  :root { --content-pad: 48px; --header-h: 80px; }

  .news-list-hero { block-size: 460px; }
  .news-list-hero .news-list-h1 { font-size: 32px; }
  .news-list-hero .news-list-hero-photo { inline-size: 55%; block-size: 52%; }
  .news-article-header .news-article-title { font-size: 24px; }
  .news-detail { padding-block-start: calc(var(--header-h) + 32px); }

  .contact-hero { block-size: 320px; }
  .contact-hero .contact-h1 { font-size: 30px; }
  .form-row { gap: 16px; }

  /* 1024px 以下はサイドバーをフォームの下に縦積みにする
     （minmax(0, 1fr) にしないと中の固定幅セレクトで列がはみ出す） */
  .contact-layout { grid-template-columns: minmax(0, 1fr); gap: 48px; }
  .contact-sidebar { position: static; }
  .thanks-section .thanks-title { font-size: 28px; }

  .service-body-grid { grid-template-columns: 200px 1fr; gap: 24px; }
  .service-detail h4 { font-size: 16px; line-height: 1.5; }
  .service-detail p { font-size: 14px; line-height: 1.7; }

  .service-works { margin-block-start: 48px; padding: 44px 20px 24px; }
  .service-works .works-gallery { gap: 14px; }
  .service-works figcaption { font-size: 13px; line-height: 20px; }

  .faq-summary { padding: 20px 24px; }
  .faq-summary .faq-question { font-size: 16px; line-height: 1.6; }
  .faq-body { padding: 0 24px 24px; }
  .faq-body p { font-size: 14px; line-height: 1.8; }
  .flow-grid { grid-template-columns: 1fr; gap: 32px; }
  .flow-grid::after { display: none; }
  .flow-arr { display: none; }
  .flow-step:not(:last-of-type)::after { display: none; }
  .flow-step:last-of-type::before { display: none; }
  .flow-step {
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-rows: auto auto auto;
    column-gap: 24px;
    text-align: left;
  }
  .flow-icon { grid-column: 1; grid-row: 1 / 4; margin-block-end: 0; }
  .flow-num { grid-column: 2; grid-row: 1; font-size: 22px; text-align: left; }
  .flow-title { grid-column: 2; grid-row: 2; font-size: 13px; text-align: left; }
  .flow-title::after { left: 0; transform: none; }
  .flow-desc { grid-column: 2; grid-row: 3; font-size: 12px; }
  .flow-step::before {
    content: "";
    position: absolute;
    width: 1px;
    left: 70px;
    top: 65px;
    height: 100%;
    border: 1px dotted var(--orange);
    z-index: -1;
  }
  .pg-sec-title { font-size: 26px; }

  .pg-hero-layout { block-size: 380px; }
  .pg-hero-img-wrap { block-size: 100%; }
  .pg-hero-title { font-size: 30px; }

  .trust .trust-inner { gap: 50px; }
  .trust .trust-heading { font-size: 24px; }

  .why .why-grid { gap: 30px; }
  .why .why-title { font-size: 26px; }
  .why .why-item:first-of-type::after { right: -15px; }
  .why .why-item:last-of-type::after { left: -15px; }

  .company .company-table { display: block; padding: 24px; }
  .company .company-row { grid-template-columns: 90px 1fr; gap: 14px; }

  .site-header .header-inner { padding-inline: var(--content-pad); }
  .site-header .main-nav { gap: 24px; }
  .site-header .nav-list a { font-size: 13px; }

  .hero-title { font-size: 60px; line-height: 78px; letter-spacing: 8px; padding-inline-start: 8px; }

  .news-block { padding-inline: var(--content-pad); gap: 32px; }

  .about .about-inner { block-size: auto; display: flex; flex-direction: column; }
  .about .about-text { display: contents; }
  .about .about-heading { order: 1; padding-inline: var(--content-pad); padding-block-end: 24px; }
  .about .about-img-wrap { order: 2; position: static; inline-size: 100%; block-size: auto; padding-inline: var(--content-pad); }
  .about .about-body { order: 3; padding-inline: var(--content-pad); padding-block-start: 32px; }
  .about .about-inner .btn-outline { order: 4; margin-inline: var(--content-pad); margin-block-end: 32px; inline-size: calc(100% - (var(--content-pad) * 2)); }
  .about .about-img { aspect-ratio: 16 / 9; border-radius: 50px 0; }
  /* 写真の角丸が変わるので、ワイプの帯を切り抜く形も合わせる */
  .about .about-img-wrap .wipe { border-radius: 50px 0; }

  .value { flex-direction: column; }
  .section-header { min-inline-size: 100%; max-inline-size: 100%; margin-block-end: 36px; }
  .value .value-item { grid-template-columns: 200px 1fr; gap: 24px; }
  .value .value-img { inline-size: 200px; }

  .pc-br { display: none; }

  .business .section-header { margin-block-end: 40px; }
  /* Bento は 4 列×2 行前提。タブレット幅では素直な 2×2 に戻す。
     主役カードを横 2 マスに広げると、1 行 216px の中で文字ブロックに高さを取られ
     写真が 44px の帯になり、さらに 3 行目の右が空セルになるため */
  .business .business-grid {
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: repeat(2, 216px);
    gap: 20px;
  }

  .business .business-card {
    &.is-featured,
    &.is-wide { grid-column: span 1; grid-row: span 1; }

    /* 4 枚とも同じ大きさになるので、主役カードの文字ブロックも
       他の 3 枚と同じ「低い」組み方に揃える（矢印は絶対配置にして 1 行ぶん詰める）。
       そうしないと主役だけ写真が 60px の帯になる */
    &.is-featured .business-info {
      position: relative;
      padding: 16px 72px 16px 14px;

      h3 { font-size: 16px; line-height: 24px; margin-block-end: 4px; }
      p { font-size: 13px; margin-block-end: 0; }

      .btn-arrow {
        position: absolute;
        inset-block-start: 50%;
        inset-inline-end: 14px;
        transform: translateY(-50%);
        margin-block-start: 0;
      }
    }
  }

  .news-block, .about, .value, .business { padding-block: 100px; }
}

@media (max-width: 768px) {
  :root { --content-pad: 20px; --header-h: 69px; --section-pad: 33px; }

  html { scroll-padding-top: var(--header-h); }
  body { min-width: unset; }

  .news-list-hero { block-size: 360px; }
  .news-list-hero .news-list-h1 { font-size: 26px; }
  .news-list-hero .news-list-hero-photo { inline-size: 55%; block-size: 48%; }
  .news-list-hero .news-list-hero-text { inset-block-end: 40px; }
  .news-list-hero .news-list-desc br { display: none; }
  .news-detail-curves { display: none; }
  .news-detail { padding-block-start: calc(var(--header-h) + 24px); padding-block-end: 60px; }
  .news-article-header .news-article-title { font-size: 20px; }
  .news-breadcrumb { margin-block-end: 28px; }
  .news-list-section { padding-block: 40px 60px; }

  .contact-hero { block-size: 240px; }
  .contact-hero .contact-h1 { font-size: 26px; }
  .contact-hero .contact-desc br { display: none; }
  .contact-form-section .contact-form-deco, .thanks-section .thanks-deco { display: none; }
  .contact-bg2 { display: none; }
  .contact-bg2-sp { display: block; }
  .contact-bg1 { display: none; }
  .thanks-bg3 { display: none; }
  /* minmax(0, 1fr) にしないと、固定幅のセレクト(386px)で列が広がり画面からはみ出す */
  .form-row { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  .form-label { padding-block-start: 0; }
  .form-radios { flex-direction: row; gap: 24px; padding-block-start: 0; }
  .form-select-wrap { max-inline-size: 100%; }
  .contact-form-section { padding-block: 32px 60px; }
  /* SP はフォームが長いので、電話・所在地・対応エリアを先に見せる（PC の並びは変えない） */
  .contact-layout { gap: 36px; }
  .contact-layout .contact-sidebar { order: 1; }
  .contact-layout .contact-form { order: 2; }
  .contact-info-card { padding: 20px; }
  .contact-info-card .contact-phone { font-size: 22px; }
  .thanks-section { padding-block: 80px; }
  .thanks-section .thanks-title { font-size: 22px; }
  .thanks-section .thanks-body p { font-size: 14px; }

  .service-body-grid { grid-template-columns: 1fr; }
  .service-photo { aspect-ratio: 16 / 9; }
  .svc-lead { padding-block: 60px 0; }
  .service-more { margin-block-start: 28px; }
  .flow-grid { gap: 32px; row-gap: 40px; }
  .flow-arr { display: none; }
  .biz-service { padding-block: 60px; }
  .biz-flow { padding-block: 60px; }
  .biz-faq { padding-block: 60px; }
  .svc-page .why .why-inner { padding-block: 60px 0; }
  .svc-page .biz-service { padding-block: 60px 0; }
  .svc-page .biz-flow { padding-block: 60px 0; }
  .svc-page .biz-faq { padding-block: 60px; }
  .faq-group + .faq-group { margin-block-start: 36px; }
  .faq-group-title { font-size: 17px; margin-block-end: 14px; }
  .faq-summary { padding: 18px 20px; gap: 12px; }
  .faq-summary .faq-question { font-size: 15px; }
  .faq-summary .faq-toggle { inline-size: 36px; block-size: 36px; }
  .faq-summary .faq-toggle img { inline-size: 36px; block-size: 36px; }
  .faq-body { padding: 0 20px 20px; gap: 12px; }
  .faq-q, .faq-a { inline-size: 28px; block-size: 28px; font-size: 14px; }
  .service-summary { padding: 18px 20px; }
  .service-summary .service-summary-text h3 { font-size: 16px; line-height: 1.4; }
  .service-summary .service-summary-text p { font-size: 14px; line-height: 1.6; }
  .service-body { padding: 4px 20px 24px; }
  /* SP は 3枚横並びだと 1枚が小さすぎるので縦積みにする */
  .service-works { margin-block-start: 44px; padding: 40px 16px 20px; }
  .service-works .works-gallery { grid-template-columns: 1fr; gap: 16px; }
  .service-works .works-label { width: 120px; height: 40px; top: -20px; font-size: 15px; }

  .pg-hero-layout { block-size: auto; display: flex; flex-direction: column; }
  .pg-hero-img-wrap { position: static; inline-size: 100%; padding-inline-start: var(--content-pad); }
  .pg-hero-img { border-radius: 50px 0; }
  .pg-hero-wave { display: none; }
  .pg-hero-text { position: static; padding: 28px var(--content-pad) 40px; }
  .pg-hero-title { font-size: 26px; }
  .pg-hero-desc br { display: none; }

  .trust .trust-inner { grid-template-columns: 1fr; gap: 40px; }
  .trust .trust-heading { font-size: 22px; line-height: 1.4; }
  .trust .trust-body { font-size: 14px; line-height: 1.7; }

  .why .why-grid { grid-template-columns: 1fr; gap: 36px; }
  .why .why-header { margin-block-end: 36px; }
  .why .why-item {
    gap: 0 20px;
    align-items: start;
  }
  .why .why-item-img { border-radius: 50px 0; }
  .why .why-item-body { margin-block-end: 21px; }
  .why .why-title { font-size: 22px; }

  .company .company-table { grid-template-columns: 1fr; }
  .company .company-col + .company-col { border-inline-start: none; border-block-start: 1px solid #e4e4e4; }
  .company .company-row { grid-template-columns: 100px 1fr; gap: 12px; }
  .company .company-title { font-size: 26px; }

  .site-header .nav-list { display: none; }
  .site-header .main-nav { gap: 16px; }
  .logo img { block-size: 42px; width: auto; }

  .hero-stage { gap: 20px; }
  .hero-logo { inline-size: min(320px, 78vw); }
  .hero-title { color: #292929; font-size: 30px; font-style: normal; font-weight: 700; line-height: 38px; letter-spacing: 4.2px; padding-inline-start: 4.2px; white-space: normal; margin-bottom: 20px; }
  .hero-sub { line-height: 143%; }
  .sp-only { display: inline; }

  .hero-scroll { inset-inline-end: var(--content-pad); inset-block-end: 40px; }
  .hero-scroll .hero-scroll-line { block-size: 40px; }

  .news-block { flex-direction: column; align-items: flex-start; padding-inline: var(--content-pad); padding-block: var(--section-pad); gap: 16px; background: #FFF; }
  .news-block .btn-news-more { display: flex; }
  .news-block .news-list { inline-size: 100%; }
  .section-header { margin-block-end: 30px; }

  .news-block, .about, .value, .business { padding-block: var(--section-pad); }

  .about .about-heading { font-size: 35px; line-height: 151%; letter-spacing: -1.4px; padding-block-end: 0; margin-block-end: 15px; }
  .about .about-body { padding-block-start: 15px; font-size: 17px; font-style: normal; font-weight: 500; line-height: 29px; letter-spacing: 0.85px; margin-block-end: 20px; }

  .value { padding-inline: var(--content-pad); }
  .value .value-list { gap: 30px; }
  .value .value-item { grid-template-columns: 1fr; gap: 16px; }
  .value .value-img { inline-size: 100%; aspect-ratio: 16 / 9; }
  .value .value-text h3 { font-size: 22px; margin-block-end: 10px; }
  .value .value-text p { font-size: 17px; }

  .business { padding-inline: var(--content-pad); }
  /* SP は 1 列。高さを行で固定せず、写真は 16:9 で自然に積む */
  .business .business-grid { grid-template-columns: 1fr; grid-template-rows: none; gap: 16px; }
  .business .business-card.is-featured,
  .business .business-card.is-wide { grid-column: span 1; grid-row: span 1; }
  .business .business-card.is-featured .business-info { padding: 20px 13px; }
  .business .business-card.is-featured .business-info h3 { font-size: 16px; }
  .business .business-card.is-featured .business-info p { font-size: 13px; }
  .business .business-card picture { flex: none; }
  .business .business-img { block-size: auto; aspect-ratio: 16 / 9; }
  /* SP は写真の下にタイトル・説明・ボタンを縦に積む。
     タッチ端末ではボタンがラベル付きの横長になるので、絶対配置はやめて行を分ける。
     主役カード（.is-featured）も必ず並べること。1024px のブロックが入れ子の & で
     書かれていて :is(.business .business-card).is-featured … と展開され、
     クラス 5 つぶんの強さを持つ。こちらを .business-card だけで受けると
     クラス 4 つぶんで負け、絶対配置が残ったままボタンが説明文に重なる */
  .business .business-card .business-info,
  .business .business-card:not(.is-featured) .business-info { display: flex; flex-direction: column; align-items: flex-start; padding: 16px 14px; }
  .business .business-card:not(.is-featured) .business-info p { margin-block-end: 0; }
  .business .business-card .business-info .btn-arrow,
  .business .business-card.is-featured .business-info .btn-arrow,
  .business .business-card:not(.is-featured) .business-info .btn-arrow { position: static; transform: none; align-self: flex-start; margin-block-start: 14px; }

  .section-title { font-size: 26px; }

  .cta-banner { block-size: auto; padding: var(--content-pad); }
  .cta-banner .cta-inner { inline-size: 100%; block-size: auto; padding: var(--content-pad); }
  .cta-banner .cta-title { font-size: 14px; }

  .site-footer { padding-block: 40px 24px; }
  .site-footer .footer-inner { flex-direction: column; align-items: center; gap: 32px; padding-inline: var(--content-pad); }
  .site-footer .footer-address { padding-inline-start: 0; font-size: 12px; line-height: 1.6; }
  .site-footer .footer-tel { padding-inline-start: 0; }
  .site-footer .footer-tel a { font-size: 15px; }
  .site-footer .footer-tel .footer-tel-note { font-size: 11px; }
  /* SP は見出しごとのグループを 1 列に縦積みする。
     2 列に折り返すと、グループの項目数が違う（事業内容だけ 5 項目で他は 1 項目）ぶん
     列の高さが揃わず、最後のグループだけ左下に取り残されて崩れて見えるため。
     並びは HTML の順（私たちについて → 事業内容 → お知らせ → お問い合わせ）＝
     ヘッダーのナビと同じ順にする */
  .site-footer .footer-nav { flex-direction: column; gap: 20px; padding-block-start: 0; inline-size: 240px; }
  .site-footer .footer-nav .footer-nav-col h3 { font-size: 12px; }
  .site-footer .footer-nav .footer-nav-col a { font-size: 11px; }
  .site-footer .footer-nav .footer-nav-col:not(:has(h3)) a { font-size: 12px; }
  .site-footer .copyright { font-size: 10px; }

  .page-deco { display: none; }
  .page-deco-sp { display: block; }

  .nav-hamburger { display: flex; }

  .nav-toggle:checked ~ .nav-drawer { display: flex; animation: drawer-in 0.22s ease; }

  .site-header:has(.nav-toggle:checked) .nav-hamburger span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
  .site-header:has(.nav-toggle:checked) .nav-hamburger span:nth-child(2) { opacity: 0; }
  .site-header:has(.nav-toggle:checked) .nav-hamburger span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
}

@media (max-width: 480px) {
  .about-page-deco { display: none; }
  .about-page-deco-sp { display: block; }
  .company .company-title { margin-block-end: 32px; }
  .company { padding-block: 60px 40px; }
  .trust { padding-block: 60px 40px; }
  .why .why-inner { padding-block: 60px 40px; }
  .biz-bg2, .biz-bg1, .news-bg2, .news-bg1, .news-detail-deco { display: none; }
  .biz-bg2-sp { display: block; }
  .news-bg-sp { display: block; }
  .btn-back-list { inline-size: 100%; }
}

@keyframes drawer-in {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ===================================================
   TOUCH DEVICES
   （hover が無い端末では、hover でしか出ないラベルは常に見えるようにする）
   =================================================== */
@media (hover: none) {
  .btn-arrow {
    inline-size: auto;
    padding-inline: 18px;
    background-color: var(--orange);
    border-color: var(--orange);

    .btn-arrow-label {
      max-inline-size: none;
      opacity: 1;
      margin-inline-end: 10px;
    }

    .btn-arrow-icon { color: var(--white); }
  }

  /* SP の事業カードでも同じ（横並びの情報レイアウトに収まる幅にする） */
  .business .business-info .btn-arrow { margin-block-start: 0; }
}

/* 画面の低いとき（ノートを縦に狭くした・タスクバーで低くなった・スマホを横向きにした）。
   ヒーローは画面ちょうど 1 枚なので、ロゴと見出しが大きいままだと最初の画面で
   下が切れて見える（実測 1366×600 で 9px、1280×560 で 40px、
   横向きスマホ 844×390 で 59px、932×430 で 33px はみ出していた）。
   幅ではなく高さを条件にロゴと見出しを一段小さくする。
   下限を 769px にしているのは、SP 用の指定（max-width: 768px のブロック）と衝突させないため
   （縦長のスマホでも高さ 700px を切る端末があり、そこに PC 用の値を当てると字が大きすぎる）*/
@media (min-width: 769px) and (max-height: 700px) {
  .hero-stage { gap: 18px; }
  .hero-logo { inline-size: min(400px, 34vw); }
  .hero-title { font-size: 52px; line-height: 68px; letter-spacing: 8px; padding-inline-start: 8px; margin-block-end: 12px; }
  .hero-sub { font-size: 14px; }
  .hero-scroll { inset-block-end: 18px; }
}

/* さらに低いとき（横向きの iPhone 812×375 等）。上の一段だけだと 3px 収まらない */
@media (min-width: 769px) and (max-height: 380px) {
  .hero-stage { gap: 14px; }
  .hero-logo { inline-size: min(320px, 28vw); }
  .hero-title { font-size: 44px; line-height: 58px; letter-spacing: 6px; padding-inline-start: 6px; margin-block-end: 10px; }
  .hero-sub { font-size: 13px; }
  .hero-scroll { inset-block-end: 12px; }
}

/* ===================================================
   REDUCED MOTION
   （OS で「視差効果を減らす」設定の人向け。
     JS 側でも ScrollSmoother を smooth: 0 / effects: false にしている）
   =================================================== */
@media (prefers-reduced-motion: reduce) {
  /* パララックスが止まるので、画像のはみ出し分を元に戻す */
  #smooth-content .pg-hero-img { block-size: 100%; }
  #smooth-content .cta-bg { inset-block: 0; }

  /* 慣性スクロールも止まる＝ #smooth-wrapper の切り取りが外れるので、
     画面より広い背景曲線が横にはみ出さないよう中身の側で切り取る
     （理由は下の FX SWITCH の .fx-no-parallax と同じ）*/
  html:not(.fx-native) #smooth-wrapper { overflow-x: clip !important; }

  /* SCROLL インジケーターの流れる光を止める */
  .hero-scroll .hero-scroll-line::after { animation: none; opacity: 0.55; }

  /* ボタンの光沢スイープを止める */
  .site-header .btn-contact::after,
  .btn-cta::after { display: none; }

  /* 事業カードの写真ズーム・沈み込みを止める（現れ方のフェードだけ残す） */
  .business .business-img { transition: none; }
  .business.is-visible .business-card:hover .business-img { transform: none; }
  .business.is-visible .business-card:active { transform: none; }
  .business .business-card,
  .why .why-item { transform: none; transition: opacity 0.6s ease, box-shadow 0.35s ease; }
}

/* ===================================================
   FX SWITCH（?fx=）
   （js/fx.js。実機で演出を 1 つずつ切って原因を切り分けるための仕組み）
   =================================================== */
/* パララックスを止めたとき（?fx=off / ?fx=nosmooth）は、
   パララックス用にはみ出させてある画像を元の大きさに戻す。
   中身は上の @media (prefers-reduced-motion: reduce) と同じ */
.fx-no-parallax #smooth-content .pg-hero-img { block-size: 100%; }
.fx-no-parallax #smooth-content .cta-bg { inset-block: 0; }

/* 慣性スクロールを止めると（?fx=off / ?fx=nosmooth /「視差効果を減らす」設定）、
   ScrollSmoother が #smooth-wrapper の overflow: hidden を外して素のスクロールに戻す。
   すると画面より広い背景曲線（.page-deco は PC で 2113px）が右へはみ出し、
   横スクロールバーが出てしまう（実測 334px）。中身の側で横だけ切り取って止める。
   overflow-x: clip は「切り取るがスクロールはさせない」指定なので、
   縦のスクロールにも ScrollSmoother の動きにも影響しない。
   切り取るのは #smooth-wrapper 側。曲線は position: absolute で、その置き場所の
   基準（containing block）が #smooth-wrapper なので、中身（#smooth-content）を
   切り取っても曲線は切り取られない。
   !important なのは、ScrollSmoother が overflow: visible を直接（インラインで）
   書き込むため。CSS からはこれでしか上書きできない。
   ?fx=native（ScrollSmoother 自体を作らない最終手段の切り分け）だけは対象外
   ＝ページの幅をそのまま使う検証（tests/verify-index-same など）の前提を変えないため */
.fx-no-parallax:not(.fx-native) #smooth-wrapper { overflow-x: clip !important; }

/* ?fx=native は ScrollSmoother を作らない。上の「---- ScrollSmoother ----」で
   #smooth-wrapper に付けている position: fixed を打ち消して素のスクロールに戻す
   （noscript 用の打ち消しと同じ考え方。物理プロパティを直接上書きする） */
.fx-native #smooth-wrapper {
  position: relative;
  width: auto;
  height: auto;
  overflow: visible;
}

.fx-native #smooth-content { transform: none; }

/* いま見ているモードの表示。?fx= を付けたときだけ js/fx.js が差し込む。
   タップで ?fx=reset に飛ぶリンクなので、クリックは通す（pointer-events は既定のまま）。
   iPhone のホームバーに隠れないよう、その分だけ上げる */
.fx-badge {
  position: fixed;
  inset-block-end: calc(8px + env(safe-area-inset-bottom));
  inset-inline-end: 8px;
  z-index: 300;
  padding: 4px 8px;
  border-radius: 6px;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  font-size: 11px;
  line-height: 1.2;
  letter-spacing: 0.03em;
  text-decoration: none;
}
