@charset "UTF-8";

/* ========================================================================
//  variables - 変数
======================================================================== */
:where(:root) {
  /* Colors (ウォームアース系カラー中心に) */
  --color-white: #fff;
  --color-black: #000;
  --color-gray-800: #2d2b28;
  --color-gray-500: #7a6b5e;
  --color-gray-400: #b5a898;
  --color-gray-50: #f7f2ec; /* 背景のアクセント */
  --color-dark-800: #1a1410; /* ヘッダーや強い強調 */

  /* デザインによって、ここはアレンジする。上の色から呼び出しをする。
  --color-main: var();
  --color-accent: var(); */
  --color-text: var(--color-gray-800);

  /* Z-index Layers */
  --z-loading: 300;
  --z-modal: 100;
  --z-drawer: 40;
  --z-floating: 30;
  --z-header: 20;
  --z-footer: 10;
  --z-default: 1;
}

/* ========================================================================
//  base - 初期設定
======================================================================== */
html {
  scroll-behavior: smooth;
  font-family: 'Noto Serif JP', serif;
  scroll-padding-block-start: 2.5rlh;

  @media (768px <= width) {
    scroll-padding-block-start: calc(80 / 24 * 1rlh);
  }
}

body {
  color: var(--color-text);

  &.is-fixed {
    /* iOS としては、html 要素にも指定する必要があるか要検証 */
    overflow: hidden;
  }
}

button {
  padding: 0;
  cursor: pointer;
  outline: none; /* ⚠️ 後述の :focus-visible を必ず定義すること */

  &:focus-visible {
    /* ここに共通のフォーカススタイルを入れる */
    outline: 1px solid;
  }
}

/* ========================================================================
//  layout
======================================================================== */
.inner {
  max-inline-size: 640px;
  padding-inline: 32px;
  margin-inline: auto;

  @media (768px <= width) {
    box-sizing: unset;
    max-inline-size: 880px;
  }
}

/* ========================================================================
//  component - 共通パーツ
======================================================================== */
.button {
  --_button-color: currentcolor;
  --_button-border-width: 1px;

  position: relative;
  overflow: hidden;
  display: inline flex;
  column-gap: 0.625rem;
  inline-size: min(10rem, 100%);
  padding-block: 0.25rlh;
  padding-inline: 24px 10px;
  color: var(--_button-color);

  transition:
    color 0.3s,
    opacity 0.3s,
    border-color 0.3s;

  &[data-variant="contained"] {
    --_button-color: var(--color-dark-800);

    background-color: var(--color-white);

    @media (any-hover: hover) {
      &:hover {
        opacity: 0.7;
      }
    }
  }

  &[data-variant="outlined"] {
    padding-block: calc(0.25rlh - var(--_button-border-width));
    border: var(--_button-border-width) solid currentcolor;

    /* 左から白くスライドするエフェクト */
    &::before {
      content: '';
      position: absolute;
      inset: 0;
      background-color: var(--color-white);
      transform: scaleX(0);
      transform-origin: left;
      transition: transform 0.3s ease;
      z-index: 0;
    }

    @media (any-hover: hover) {
      &:hover {
        color: var(--color-dark-800);
        border-color: transparent;
      }
      &:hover::before {
        transform: scaleX(1);
      }
    }
  }
}

.button__icon {
  position: relative;
  z-index: 1;

  svg {
    inline-size: 1.25rem;
  }

  path {
    fill: currentcolor;
  }
}

.button__text {
  position: relative;
  z-index: 1;
  font-weight: 700;
  letter-spacing: 0.03em;
}

.x-logo {
  scale: 0.8;
}

.section {
  padding-block: 2rlh;
}

.section__heading-group {
  & + * {
    margin-block-start: 0.75rem;
  }
}

.section__title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 2.5rem;
  font-weight: 700;
  letter-spacing: 0.05em;

  @media (768px <= width) {
    font-size: 3.375rem;
  }

  @media (1024px <= width) {
    font-size: 3.75rem;
  }
}

.section__text {
  margin-block-start: 0.25rem;
  font-size: 0.9rem;
  font-weight: 700;
  letter-spacing: 0.05em;
}

.section__lead {
  line-height: 1.6;
}

.section__contents {
  margin-block-start: 1rem;
}

/* ========================================================================
//  header
======================================================================== */
.header {
  position: fixed;
  inset-block-start: 0;
  inset-inline: 0;
  z-index: var(--z-header);
  color: var(--color-white);
  /* background-color: transparent; ←headerを透明化*/
  background-color: rgb(26 20 16 / 50%);
  backdrop-filter: blur(8px);
}

.header__wrap {
  position: relative;
  display: block flex;
  align-items: center;
  justify-content: space-between;
  block-size: 2.5rlh; /* スマホ時のヘッダー高さ */
  padding-inline: max(16px, 5%);

  @media (768px <= width) {
    block-size: calc(80 / 24 * 1rlh); /* PC時のヘッダー高さ */
  }
}

.header__logo {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 8px;
}

.header__logo-img {
  block-size: 26px;
  inline-size: auto;
  filter: drop-shadow(0 1px 4px rgb(0 0 0 / 50%));

  @media (768px <= width) {
    block-size: 32px;
  }
}

.header__logo-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.header__logo-name {
  font-size: 0.95rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  color: var(--color-white);

  @media (768px <= width) {
    font-size: 1.6rem;
  }
}

.header__logo-sub {
  font-size: 0.55rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  color: rgb(255 255 255 / 95%);

  @media (768px <= width) {
    font-size: 0.6rem;
  }
}

.header__menu-button {
  position: absolute;
  inset-block-start: 50%;
  inset-inline-end: 16px;
  translate: 0 -50%;
}

.header__contents {
  position: absolute;
  inset-block-start: 2.5rlh; /* ヘッダー高さの下からドロワーを出す */
  inset-inline: 0;
  block-size: 0;
  overflow-y: hidden;
  background-color: transparent;
  transition: block-size 0.5s ease;

  &.is-open {
    block-size: calc(100svb - 2.5rlh);
    overflow-y: auto;

    @media (width < 768px) {
      background-color: rgb(26 20 16 / 88%);
      backdrop-filter: blur(4px);
    }
  }

  @media (768px <= width) {
    position: revert;
    block-size: revert;

    /* overflow-y: revert;
    background-color: revert; */
  }
}

.header__nav {
  padding-block: 40px;

  @media (768px <= width) {
    padding-block: revert;
  }
}

.header__list {
  @media (768px <= width) {
    display: block flex;
    gap: 2rem;
  }
}

.header__list-item {
  text-align: center;
}

.header__link {
  display: block flow;
  padding-block: 1rlh;
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  /* 下線を background-size でアニメーション（overflow の影響を受けない） */
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 0 1px;
  background-position: left bottom;
  background-repeat: no-repeat;
  transition: background-size 0.3s, opacity 0.3s;

  @media (768px <= width) {
    padding-block: 0;
    font-size: 0.95rem;
  }

  /* SP のみ: タップ時 opacity フェード */
  @media (any-hover: hover) and (width < 768px) {
    &:hover {
      opacity: 0.7;
    }
  }

  /* PC: 下線が左から右へ伸びるエフェクト */
  @media (768px <= width) and (any-hover: hover) {
    &:hover {
      background-size: 100% 1px;
    }
  }
}

.menu-button {
  display: block flex;
  flex-direction: column;
  justify-content: space-between;
  inline-size: 30px;
  block-size: 26px;
  border: none;

  &:focus-visible {
    outline: 1px solid var(--color-white);
  }

  @media (768px <= width) {
    display: none;
  }
}

.menu-button__bar {
  inline-size: 100%;
  block-size: 4px;
  background-color: var(--color-white);
  border-radius: calc(1px / 0);
  transition:
    translate 0.5s ease,
    rotate 0.5s ease,
    opacity 0.5s ease;

  .is-checked &:first-of-type {
    rotate: 225deg;
    translate: 0 calc((26px - 4px / 2 * 2) / 2);
  }

  .is-checked &:nth-of-type(2) {
    opacity: 0;
  }

  .is-checked &:last-of-type {
    rotate: -225deg;
    translate: 0 calc((26px - 4px / 2 * 2) / 2 * -1);
  }
}

/* ========================================================================
//  main (ヘッダーはheroに重ねるため余白なし)
======================================================================== */
.main {
  padding-block-start: 0;
}

/* ========================================================================
//  hero
======================================================================== */
.hero {
  position: relative;
  inline-size: 100%;
  block-size: calc(750 / 24 * 1rlh);

  &::before {
    content: '';
    position: absolute;
    inset-block-start: 0;
    inset-inline: 0;
    block-size: 40%;
    /* background: linear-gradient(to bottom, rgb(0 0 0 / 55%) 0%, transparent 100%); */
    z-index: 1;
  }
}

.hero__image {
  inline-size: inherit;
  block-size: inherit;

  img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
  }
}

.hero__contents {
  position: absolute;
  inset-block-end: 26px;
  inset-inline: 0;
  min-height: 160px;
  padding-block: calc(20 / 24 * 1rlh);
  padding-inline: max(32px, 5%);
  color: var(--color-white);
  background-color: rgb(26 20 16 / 70%);

  @media (768px <= width) {
    inset-block-end: 100px;
    max-inline-size: calc(627 / 16 * 1rem);
    min-height: 174px;
    padding-block-start: 1rlh;
    padding-inline: min(8.4%, 96px) 32px;
  }
}

.hero__subtitle {
  font-size: 0.85;
  letter-spacing: 0.2em;
  margin-block-end: 0rem;
  color: rgb(255 255 255 / 85%);
}

.hero__title {
  margin-block: unset;
  font-family: 'Cormorant Garamond', serif;
  font-size: clamp(3rem, 8vw, 6rem);
  font-weight: 600;
  line-height: 0.9;
  letter-spacing: 0.05em;
}

.hero__ja {
  margin-block-start: 0rem;
  font-family: 'Noto Serif JP', serif;
  font-size: clamp(0.85rem, 2vw, 1.1rem);
  font-weight: 300;
  letter-spacing: 0.3em;
  color: rgb(255 255 255 / 80%);
}

.hero__description0 {
  margin-block-start: 1rem;
  font-size: clamp(1.0rem, 2.5vw, 1.2rem);
  font-weight: 500;
  color: rgb(255 255 255 / 90%);
  line-height: 1.6;
}

.hero__description {
  margin-block-start: 0rem;
  font-size: clamp(1.0rem, 2.5vw, 1.2rem);
  font-weight: 500;
  color: rgb(255 255 255 / 90%);
  line-height: 1.6;
}

/* ========================================================================
//  about
======================================================================== */
.about {
}

.about__wrap {
  @media (768px <= width) {
    display: flex;
    flex-direction: row-reverse;
    column-gap: 4.5%;
    align-items: center;
  }
}

.about__image {
  img {
    box-shadow: 0 4px 15px 0 rgb(0 0 0 / 15%);
  }
}

.about__text-wrap {
  margin-block-start: calc(32 / 24 * 1rlh);

  @media (768px <= width) {
    margin-block-start: revert;
  }
}

.about__title {
  white-space: nowrap;
  font-size: clamp(1.3rem, 5vw, 3.375rem) !important;

  @media (1024px <= width) {
    font-size: 3.75rem !important;
  }
}

.about__description {
  line-height: 1.6;

  & + & {
    margin-block-start: 1lh;
  }
}

/* ========================================================================
//  works
======================================================================== */
.works {
  background-color: var(--color-gray-50);
}

.works__map {
  position: relative;
  text-align: center;
  margin-bottom: 2rem;

  img {
    border-radius: 15px;
    display: block;
    margin: 0 auto;
  }
}

/* ピンボタン共通 */
.map-pin {
  position: absolute;
  left: var(--pin-x);
  top: var(--pin-y);
  /* ラベルが上・アイコンが下なので、アイコン先端（ボトム）が座標を指す */
  transform: translate(-50%, -100%);
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  z-index: 2;

  @media (any-hover: hover) {
    &:hover .map-pin__icon {
      transform: translateY(-5px) scale(1.2);
      filter: drop-shadow(0 4px 8px rgb(0 0 0 / 40%));
    }
    &:hover .map-pin__label {
      background: rgb(255 255 255 / 100%);
    }
  }
}

/* ピンアイコン */
.map-pin__icon {
  display: block;
  inline-size: 22px;
  block-size: auto;
  filter: drop-shadow(0 2px 4px rgb(0 0 0 / 30%));
  transition: transform 0.2s ease, filter 0.2s ease;

  @media (768px <= width) {
    inline-size: 30px;
  }
}

/* ラベル（ピンの上に表示） */
.map-pin__label {
  font-family: 'Noto Serif JP', serif;
  font-size: 0.65rem;
  white-space: nowrap;
  color: #2c2416;
  background: rgb(255 255 255 / 85%);
  padding: 2px 6px;
  border-radius: 4px;
  box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
  pointer-events: none;
  transition: background 0.2s;

  @media (768px <= width) {
    font-size: 0.8rem;
  }
}

.works__list {
  display: flex;
  flex-direction: column;
  gap: 1rem;

  @media (768px <= width) {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1.5rem;
  }
}

.works__list-item {
  /* gap で間隔管理するため margin リセット */
}

/* カード本体 */
.works-item {
  display: flex;
  flex-direction: row; /* SP: 横並び */
  align-items: stretch;
  position: relative;
  background: #fff;
  border: 1px solid rgba(139, 115, 85, 0.15);
  border-radius: 14px;
  overflow: hidden;
  transition: border-color 0.3s, transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.45s;

  /* ピンクリック時のリフトアップ */
  &.is-active {
    transform: translateY(-100px);
    box-shadow: 0 12px 28px rgb(0 0 0 / 15%);
    border-color: rgba(139, 115, 85, 0.45);
    z-index: 2;
  }

  /* SP: 右端に › 矢印 */
  &::after {
    content: "›";
    position: absolute;
    inset-inline-end: 1rem;
    inset-block-start: 50%;
    translate: 0 -50%;
    font-size: 1.5rem;
    color: #b8a898;
    font-family: serif;
    line-height: 1;
  }

  @media (any-hover: hover) {
    &:hover {
      border-color: rgba(139, 115, 85, 0.35);
    }
  }

  /* PC: 縦並び */
  @media (768px <= width) {
    flex-direction: column;
    border-radius: 20px;

    &::after {
      display: none;
    }
  }
}

/* 画像エリア */
.works-item__image {
  flex-shrink: 0;
  inline-size: 36%; /* SP: 左36% */
  overflow: hidden;

  img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    transition: transform 0.5s;
  }

  @media (768px <= width) {
    inline-size: 100%; /* PC: 全幅 */

    img {
      aspect-ratio: 4 / 5;
      block-size: auto;
    }
  }
}

/* hover で画像ズーム */
@media (any-hover: hover) {
  .works-item:hover .works-item__image img {
    transform: scale(1.05);
  }
}

/* テキストエリア */
.works-item__info {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 1.1rem 2.5rem 1.1rem 1.1rem; /* SP: 右に余白（矢印分） */

  @media (768px <= width) {
    padding: 1.5rem;
  }
}

.works-item__name {
  font-family: 'Cormorant Garamond', serif;
  font-size: 1rem;
  font-weight: 600;
  margin-block-end: 0.25rem;
  color: #2c2416;

  @media (768px <= width) {
    font-size: 1.1rem;
    margin-block-end: 0.5rem;
  }
}

.works-item__description {
  font-size: 0.82rem;
  line-height: 1.7;
  color: #8b7355;

  @media (768px <= width) {
    font-size: 0.88rem;
  }
}

/* ========================================================================
//  service
======================================================================== */
.service {
}

.service__list {
  display: flex;
  flex-direction: column;
  gap: 1rem;

  @media (768px <= width) {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 1.5rem;
  }
}

.service__list-item {
  /* gap で間隔管理するため margin リセット */
}

/* カード本体 */
.service-item {
  display: flex;
  flex-direction: row; /* SP: 横並び */
  align-items: stretch;
  position: relative;
  background: #fff;
  border: 1px solid rgba(139, 115, 85, 0.15);
  border-radius: 14px;
  overflow: hidden;
  transition: border-color 0.3s;

  /* SP: 右端に › 矢印 */
  &::after {
    content: "›";
    position: absolute;
    inset-inline-end: 1rem;
    inset-block-start: 50%;
    translate: 0 -50%;
    font-size: 1.5rem;
    color: #b8a898;
    font-family: serif;
    line-height: 1;
  }

  @media (any-hover: hover) {
    &:hover {
      border-color: rgba(139, 115, 85, 0.35);
    }
  }

  /* PC: 縦並び */
  @media (768px <= width) {
    flex-direction: column;
    border-radius: 20px;

    &::after {
      display: none;
    }
  }
}

/* 画像エリア */
.service-item__image {
  flex-shrink: 0;
  inline-size: 36%; /* SP: 左36% */
  overflow: hidden;

  img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    transition: transform 0.5s;
  }

  @media (768px <= width) {
    inline-size: 100%; /* PC: 全幅 */

    img {
      aspect-ratio: 4 / 5;
      block-size: auto;
    }
  }
}

/* hover で画像ズーム */
@media (any-hover: hover) {
  .service-item:hover .service-item__image img {
    transform: scale(1.04);
  }
}

/* テキストエリア */
.service-item__info {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 1.1rem 2.5rem 1.1rem 1.1rem; /* SP: 右に余白（矢印分） */

  @media (768px <= width) {
    padding: 1.5rem;
  }
}

.service-item__name {
  font-family: 'Cormorant Garamond', serif;
  font-size: 1rem;
  font-weight: 600;
  margin-block-end: 0.2rem;
  color: #2c2416;

  @media (768px <= width) {
    font-size: 1.2rem;
  }
}

.service-item__description {
  font-size: 0.8rem;
  line-height: 1.7;
  color: #8b7355;

  @media (768px <= width) {
    font-size: 0.88rem;
  }
}

/* ========================================================================
//  message
======================================================================== */
.message {
  background-color: var(--color-gray-50);
}

.message__wrap {
  @media (768px <= width) {
    display: flex;

    /* Aboutセクションと画像配置を左右逆にしてリズムを出す */
    flex-direction: row;
    column-gap: 4.5%;
    align-items: center;
  }
}

.message__image {
  @media (768px <= width) {
    flex: 0 0 35%; /* 画像は幅45%で固定 */
  }

  img {
    inline-size: 100%;
    box-shadow: 0 4px 15px 0 rgb(0 0 0 / 15%);
  }
}

.message__text-wrap {
  margin-block-start: calc(32 / 24 * 1rlh);

  @media (768px <= width) {
    flex: 1;           /* 残りの幅をすべて使う */
    min-inline-size: 0; /* テキストのはみ出し防止 */
    margin-block-start: revert;
  }
}

.message__description {
  line-height: 1.6;
}

/* ========================================================================
//  footer
======================================================================== */
.footer {
  color: var(--color-white);
  text-align: center;
}

.footer__wrapper {
  display: flex;
  justify-content: center;
}


.x__title {
  font-size: 2rem;

  media (768px <= width) {
    font-size: 1.25rem;
  }
}


.contact,
.x {
  padding: 40px;

  @media (768px <= width) {
    padding-block: 15px;
    padding-inline: 8px;
  }
}

.contact {
  background-color: var(--color-gray-500);
}

.x {
  inline-size: 100%;
  background-color: var(--color-dark-800);
}

.contact__link,
.x__link {
  max-inline-size: 100%;
}

.footer__copylight {
  padding-block: calc(10 / 24 * 1rlh);
  padding-inline: 0.625rem;

  /* background-color: var(--color-dark-800); */

  small {
    font-family: sans-serif;
    font-size: 0.6875rem;
    color: var(--color-gray-400);
  }
}

/* ========================================================================
//  cursor: pointer — クリッカブルカード
======================================================================== */
.works-item,
.service-item {
  cursor: pointer;
}


/* ========================================================================
//  slideshow — スライドショーモーダル
======================================================================== */
.slideshow {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  /* 開閉フェード */
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 2.0s ease, visibility 2.0s;
}

/* hidden 属性があっても display は維持（visibility で制御するため） */
.slideshow[hidden] {
  display: flex;
}

/* 表示中 */
.slideshow.is-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

/* 暗色オーバーレイ（クリックで閉じる） */
.slideshow__overlay {
  position: absolute;
  inset: 0;
  background: rgb(0 0 0 / 88%);
  cursor: pointer;
}

/* 中央コンテナ */
.slideshow__container {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  max-inline-size: min(92vw, 960px);
  max-block-size: 92svh;
  gap: 0;
}

/* × 閉じるボタン */
.slideshow__close {
  position: absolute;
  inset-block-start: -2.75rem;
  inset-inline-end: 0;
  background: none;
  border: none;
  color: rgb(255 255 255 / 80%);
  font-size: 2rem;
  line-height: 1;
  cursor: pointer;
  padding: 0.25rem 0.5rem;
  transition: color 0.2s;

  @media (any-hover: hover) {
    &:hover {
      color: #fff;
    }
  }
}

/* 画像ラッパー（2枚を絶対配置で重ねる） */
.slideshow__image-wrap {
  position: relative;
  inline-size: min(92vw, 960px);
  block-size: calc(92svh - 5rem);
}

/* 2枚の画像（クロスフェード用） */
.slideshow__image {
  position: absolute;
  inset: 0;
  inline-size: 100%;
  block-size: 100%;
  object-fit: contain;
  transition: opacity 0.8s ease;
}

.slideshow__image--a {
  opacity: 1;
  z-index: 2;
}

.slideshow__image--b {
  opacity: 0;
  z-index: 1;
}

/* コントロールバー（← タイトル/枚数 →） */
.slideshow__controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  inline-size: 100%;
  padding-block-start: 0.75rem;
  color: #fff;
  gap: 0.75rem;
}

/* ‹ › ナビボタン共通 */
.slideshow__prev,
.slideshow__next {
  flex-shrink: 0;
  inline-size: 2.5rem;
  block-size: 2.5rem;
  border-radius: 50%;
  border: 1px solid rgb(255 255 255 / 35%);
  background: transparent;
  color: #fff;
  font-size: 1.6rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.2s, border-color 0.2s;

  @media (any-hover: hover) {
    &:hover:not(:disabled) {
      background: rgb(255 255 255 / 15%);
      border-color: rgb(255 255 255 / 60%);
    }
  }

  &:disabled {
    opacity: 0.25;
    cursor: default;
  }
}

/* タイトル・枚数 */
.slideshow__info {
  flex: 1;
  text-align: center;
}

.slideshow__title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 1.2rem;
  font-weight: 400;
  letter-spacing: 0.06em;
  margin-block-end: 0.15rem;
}

.slideshow__counter {
  font-size: 0.75rem;
  color: rgb(255 255 255 / 55%);
  letter-spacing: 0.1em;
}

/* ========================================================================
//  loader — オープニングアニメーション
======================================================================== */
.loader {
  position: fixed;
  inset: 0;
  z-index: var(--z-loading);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  background-color: var(--color-dark-800);
  transition: translate 0.7s cubic-bezier(0.65, 0, 0.35, 1), visibility 0.7s;
}

/* ローダー退場（上方向へスライド） */
.loader.is-done {
  translate: 0 -100%;
  visibility: hidden;
  pointer-events: none;
}

.loader__logo {
  font-family: 'Cormorant Garamond', serif;
  font-size: clamp(1.8rem, 6vw, 3rem);
  font-weight: 500;
  letter-spacing: 0.12em;
  color: var(--color-white);
  opacity: 0;
  animation: loader-fade-in 1s ease 0.2s forwards;
}

.loader__sub {
  font-size: clamp(0.6rem, 2vw, 0.8rem);
  letter-spacing: 0.25em;
  color: rgb(255 255 255 / 65%);
  opacity: 0;
  animation: loader-fade-in 1s ease 0.6s forwards;
}

@keyframes loader-fade-in {
  from {
    opacity: 0;
    translate: 0 12px;
  }
  to {
    opacity: 1;
    translate: 0 0;
  }
}

/* ========================================================================
//  hero stagger & Ken Burns — ヒーロー演出
======================================================================== */

/* 文字は初期非表示 → body.is-loaded で順番にフェードアップ */
.hero__subtitle,
.hero__title,
.hero__ja,
.hero__description0,
.hero__description {
  opacity: 0;
}

body.is-loaded {
  .hero__subtitle     { animation: hero-fade-up 0.9s ease 0.1s forwards; }
  .hero__title        { animation: hero-fade-up 0.9s ease 0.25s forwards; }
  .hero__ja           { animation: hero-fade-up 0.9s ease 0.4s forwards; }
  .hero__description0 { animation: hero-fade-up 0.9s ease 0.55s forwards; }
  .hero__description  { animation: hero-fade-up 0.9s ease 0.7s forwards; }
}

@keyframes hero-fade-up {
  from {
    opacity: 0;
    translate: 0 20px;
  }
  to {
    opacity: 1;
    translate: 0 0;
  }
}

/* ケンバーンズ効果（ゆっくりズームし続ける） */
.hero {
  overflow: hidden;
}

.hero__image img {
  animation: kenburns 18s ease-in-out infinite alternate;
}

@keyframes kenburns {
  from { scale: 1; }
  to   { scale: 1.08; }
}

/* ========================================================================
//  js-reveal — スクロールでふわっと表示
======================================================================== */
.js-reveal {
  opacity: 0;
  translate: 0 28px;
  transition: opacity 0.9s ease, translate 0.9s cubic-bezier(0.22, 1, 0.36, 1);
}

.js-reveal.is-inview {
  opacity: 1;
  translate: 0 0;
}

/* カードは1枚ずつ時間差で表示 */
.works__list .js-reveal:nth-child(2) { transition-delay: 0.1s; }
.works__list .js-reveal:nth-child(3) { transition-delay: 0.2s; }
.works__list .js-reveal:nth-child(4) { transition-delay: 0.3s; }

.service__list .js-reveal:nth-child(2) { transition-delay: 0.12s; }
.service__list .js-reveal:nth-child(3) { transition-delay: 0.24s; }

/* ========================================================================
//  watermark & section number — 透かし英字・セクション番号
======================================================================== */
.section[data-watermark] {
  position: relative;
  overflow: hidden;

  &::before {
    content: attr(data-watermark);
    position: absolute;
    inset-block-start: 0.5rem;
    inset-inline-end: -0.05em;
    font-family: 'Cormorant Garamond', serif;
    font-size: clamp(5rem, 18vw, 14rem);
    font-weight: 700;
    line-height: 1;
    letter-spacing: 0.02em;
    color: var(--color-gray-800);
    opacity: 0.05;
    pointer-events: none;
    user-select: none;
  }
}

/* 偶数セクションは左上に配置して単調さを避ける */
.section[data-watermark="CITIES"]::before,
.section[data-watermark="MESSAGE"]::before {
  inset-inline-end: auto;
  inset-inline-start: -0.05em;
}

.section__number {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  font-family: 'Cormorant Garamond', serif;
  font-size: 0.85rem;
  font-weight: 500;
  letter-spacing: 0.2em;
  color: var(--color-gray-400);

  /* 番号の後ろに細い罫線 */
  &::after {
    content: '';
    inline-size: 3rem;
    block-size: 1px;
    background-color: var(--color-gray-400);
  }
}

/* ========================================================================
//  service list — スマホで横スクロールギャラリー
======================================================================== */
@media (width < 768px) {
  .service__list {
    flex-direction: row;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    padding-block-end: 0.75rem; /* スクロールバー分の余白 */
    -webkit-overflow-scrolling: touch;
  }

  .service__list-item {
    flex: 0 0 72%;
    scroll-snap-align: center;
  }
}

/* ========================================================================
//  reduced motion — 動きを減らす設定への配慮
======================================================================== */
@media (prefers-reduced-motion: reduce) {
  .loader {
    transition: none;
  }

  .loader__logo,
  .loader__sub {
    animation: none;
    opacity: 1;
  }

  .hero__subtitle,
  .hero__title,
  .hero__ja,
  .hero__description0,
  .hero__description {
    opacity: 1;
    animation: none !important;
  }

  .hero__image img {
    animation: none;
  }

  .js-reveal {
    opacity: 1;
    translate: 0 0;
    transition: none;
  }
}
