/* =========================================================
   LINDO — テーマ本体スタイル（No4 Swiss Minimal 踏襲・拡張）
   硬質グリッド × 特大 Archivo タイポ × ピンク1色アクセント。
   注意: clamp()/calc() の +/- は前後に必ず半角スペース。
   ========================================================= */

:root {
  /* 色はロゴのブランドガイドライン（LINDO_LOGOIDEAver.4）の指定値。
     olive #424426 (CMYK 74.64.100.40) / pink #d98d93 (CMYK 0.56.27.0)
     地色のサンドはガイドラインに規定が無いためサイト側の選択。 */
  --bg: #fdfbf4;
  --paper: #f3efe4;
  --ink: #424426;
  --olive: #424426;
  --muted: #7c7a64;
  --pink: #d98d93;
  --pink-soft: #f0d5d7;
  --line: #424426;
  --hairline: rgba(66, 68, 38, 0.18);

  /* 組版は2書体。ロゴ導入前の構成に戻してある。
     見出しから小さいラベルまで欧文は Archivo、和文は Zen Kaku Gothic New。
     一時期ロゴに合わせてディドン体（Bodoni Moda）と明朝（Zen Old Mincho）を
     見出しに入れたが、ヒーローのゴシックと各見出しのセリフが同居して
     ちぐはぐに見えたため撤去した。ロゴは SVG なので書体に依存しない。 */
  --grot: "Archivo", system-ui, sans-serif;
  --sans: "Zen Kaku Gothic New", "Hiragino Kaku Gothic ProN", system-ui, sans-serif;

  --ease: cubic-bezier(0.16, 1, 0.3, 1);
  --dur-fast: 200ms;
  --dur: 360ms;
  --dur-slow: 720ms;

  /* トリミング（object-fit:cover）時に残す位置。素材の約7割が縦長で、
     中央基準(50% 50%)だと上下が均等に落ちて顔・頭が切れるため、やや上寄せ。
     画像ごとに変えたい場合は、その <img> に style="--img-pos: 50% 10%" 等で上書きする。 */
  --img-pos: 50% 30%;

  /* イントロローダーの幕が引き上がるのに合わせてヒーローを出す */
  --hero-delay: 1.7s;

  --maxw: 1320px;
  --header-h: 64px;
}

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

html {
  scroll-behavior: smooth;
}
html.is-locked {
  overflow: hidden;
}

/* 固定ヘッダー分のオフセット（アンカー着地が隠れない） */
#main,
/* ナビから飛んだとき、固定ヘッダーの下に潜り込ませない。
   ここに書き漏らすとそのセクションだけ見出しが隠れる（#talents で実際に起きた）。
   ※ #artists は 03 Works、#talents は 04 Artists。 */
#about,
#service,
#artists,
#talents,
#contact {
  scroll-margin-top: calc(var(--header-h) + 10px);
}
html.is-loading {
  overflow: hidden;
}

/* ============ intro loader（かっこいいイントロ）============
   砂色のカーテン → マークがせり上がり → ピンクのバーが伸び →
   ~2.2s でカーテンが上へ引き上がってヒーローが現れる。
   CSS駆動なので JS 無効でも必ず消える。reduced-motion では非表示。 */
.loader {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background: var(--bg);
  display: grid;
  place-items: center;
  will-change: transform;
  animation: loaderOut 2.2s var(--ease) forwards;
}
.loader-inner {
  text-align: center;
  padding: 0 1.5rem;
}
.loader-mark {
  display: block;
  font-size: clamp(2.4rem, 1.2rem + 6vw, 5.4rem);
  line-height: 1;
  color: var(--pink);
  opacity: 0;
  transform: translateY(20px);
  animation: loaderRise 0.9s var(--ease) 0.15s forwards;
}
.loader-mark .brand-logo {
  margin-inline: auto;
}
.loader-sub {
  display: block;
  margin-top: 1.1rem;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: var(--muted);
  opacity: 0;
  transform: translateY(12px);
  animation: loaderRise 0.9s var(--ease) 0.32s forwards;
}
.loader-count {
  position: absolute;
  right: clamp(1.2rem, 0.6rem + 3vw, 2.6rem);
  bottom: clamp(1.4rem, 0.8rem + 3vw, 2.8rem);
  font-family: var(--grot);
  font-weight: 700;
  font-size: clamp(1rem, 0.8rem + 1vw, 1.4rem);
  letter-spacing: 0.02em;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.loader-count .pk {
  color: var(--pink);
}
.loader-bar {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: var(--hairline);
}
.loader-bar > span {
  display: block;
  height: 100%;
  background: var(--pink);
  transform: scaleX(0);
  transform-origin: left center;
  animation: loaderFill 1.9s var(--ease) forwards;
}
@keyframes loaderRise {
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes loaderFill {
  to {
    transform: scaleX(1);
  }
}
@keyframes loaderOut {
  0%,
  72% {
    transform: translateY(0);
  }
  100% {
    transform: translateY(-101%);
    visibility: hidden;
  }
}
@media (prefers-reduced-motion: reduce) {
  .loader {
    display: none !important;
  }
}

body {
  font-family: var(--sans);
  background: var(--bg);
  color: var(--ink);
  line-height: 1.8;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

img {
  display: block;
  max-width: 100%;
}
a {
  color: inherit;
  text-decoration: none;
}
button {
  font: inherit;
  color: inherit;
  background: none;
  border: 0;
  cursor: pointer;
}

.wrap {
  width: min(100% - 2.5rem, var(--maxw));
  margin-inline: auto;
}
.grot {
  font-family: var(--grot);
}

.skip {
  position: absolute;
  left: -999px;
}
.skip:focus {
  left: 1rem;
  top: 1rem;
  z-index: 200;
  background: var(--ink);
  color: var(--bg);
  padding: 0.7em 1.2em;
}

/* 見た目には出さず、読み上げと文書構造にだけ残す。
   要素ごと消すと節から見出しが無くなり、構造が読めなくなるため。 */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

:focus-visible {
  outline: 2px solid var(--pink);
  outline-offset: 3px;
}

/* ブランドの選択ハイライト */
::selection {
  background: var(--pink);
  color: var(--paper);
}

/* 見出し・本文の改行品質（対応外ブラウザは無視＝安全） */
h1,
h2,
.modal-info h3,
.rep-name {
  text-wrap: balance;
}
.hero-row p,
.sec-body .sub,
.rep-bio,
.modal-info .bio,
.contact-lead .sub {
  text-wrap: pretty;
}

/* スクロール進捗バー（最上部・CSSスクロール駆動／JS不要） */
.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  z-index: 95;
  background: var(--pink);
  transform: scaleX(0);
  transform-origin: left center;
  pointer-events: none;
}
@supports (animation-timeline: scroll()) {
  .scroll-progress {
    animation: growProgress auto linear;
    animation-timeline: scroll(root block);
  }
}
@keyframes growProgress {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}

/* ============ header ============ */
/* 最上部は色を抜いて透過。スクロールで初めて薄い面＋ブラーが乗る。 */
.hd {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 90;
  background: transparent;
  border-bottom: 1px solid transparent;
  /* backdrop-filter はトランジションに含めない。
     blur を毎フレーム補間するとSPの初回スクロールで一瞬かくつくため、
     スクロール境界(24px)で一度だけ適用し、色/影のみ滑らかにフェードさせる。 */
  transition: background var(--dur) var(--ease),
    border-color var(--dur) var(--ease),
    box-shadow var(--dur) var(--ease);
}
.hd.scrolled {
  background: color-mix(in srgb, var(--bg) 72%, transparent);
  backdrop-filter: saturate(1.1) blur(10px);
  border-bottom-color: var(--hairline);
  box-shadow: 0 10px 30px rgba(31, 30, 17, 0.05);
}
.hd-in {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: var(--header-h);
}
.logo {
  display: inline-flex;
  align-items: center;
}

/* ── ブランドロゴ（SVG）────────────────────────────────
   支給された .ai からベクターのまま取り出したワードマーク。
   定義は template-parts/site-logo-defs.php に1回だけ置き、<use> で参照する。
   fill は currentColor なので、置く場所の color がそのまま色になる。
   幅は指定せず「高さ × 縦横比」で決める（比率 639.17:197.78 ≒ 3.232）。 */
.brand-logo {
  display: block;
  height: 1em;
  width: calc(1em * 3.232);
  color: inherit;
}
.logo .brand-logo {
  font-size: 1.55rem;
  color: var(--ink);
  transition: color var(--dur) var(--ease);
}
.logo:hover .brand-logo,
.logo:focus-visible .brand-logo {
  color: var(--pink);
}
.nav {
  display: flex;
  gap: 0;
}
.nav a {
  position: relative;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.6em 1.1em;
  border-left: 1px solid var(--line);
  transition: background var(--dur-fast) var(--ease),
    color var(--dur-fast) var(--ease);
}
.nav a:hover {
  background: var(--ink);
  color: var(--bg);
}
.nav-toggle {
  display: none;
}

@media (max-width: 820px) {
  .nav {
    position: fixed;
    inset: var(--header-h) 0 auto 0;
    flex-direction: column;
    background: var(--bg);
    transform: translateY(-12px);
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease);
    border-bottom: 1px solid var(--line);
  }
  .nav.open {
    opacity: 1;
    transform: none;
    pointer-events: auto;
  }
  .nav a {
    border-left: 0;
    border-top: 1px solid var(--line);
    padding: 1em 1.5rem;
    font-size: 0.85rem;
  }
  .nav-toggle {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 5px;
    width: 44px;
    height: 44px;
    background: none;
    border: 1px solid var(--line);
  }
  .nav-toggle span {
    display: block;
    width: 20px;
    height: 2px;
    background: var(--ink);
    transition: transform var(--dur-fast) var(--ease),
      opacity var(--dur-fast) var(--ease);
  }
  .nav-toggle[aria-expanded="true"] span:nth-child(1) {
    transform: translateY(7px) rotate(45deg);
  }
  .nav-toggle[aria-expanded="true"] span:nth-child(2) {
    opacity: 0;
  }
  .nav-toggle[aria-expanded="true"] span:nth-child(3) {
    transform: translateY(-7px) rotate(-45deg);
  }
}

/* ============ hero ============ */
.hero {
  padding: calc(var(--header-h) + 46px) 0 0;
  border-bottom: 1px solid var(--line);
}
.hero-top {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1.5rem;
  align-items: end;
  padding-bottom: 2rem;
}
.hero-top .lbl {
  grid-column: 1 / 5;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
}
.hero-top .lbl b {
  color: var(--pink);
}
.hero-top .meta {
  grid-column: 10 / 13;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  text-align: right;
  color: var(--muted);
}
.hero h1 {
  font-family: var(--grot);
  font-weight: 800;
  font-size: clamp(3rem, 1rem + 11vw, 11rem);
  line-height: 0.86;
  letter-spacing: -0.03em;
  padding: 1.5rem 0 2rem;
}
.hero h1 .pk {
  color: var(--pink);
}
.hero-row {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1.5rem;
  border-top: 1px solid var(--line);
}
.hero-row p {
  grid-column: 1 / 7;
  padding: 1.6rem 0;
  color: var(--olive);
  font-size: 1.05rem;
}
.hero-row .tags {
  grid-column: 8 / 13;
  padding: 1.6rem 0 1.6rem 1.5rem;
  font-family: var(--grot);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-align: right;
  font-size: 1.05rem;
  border-left: 1px solid var(--line);
}

/* hero 入場（ローダーの幕上げに同期） */
.hero-title {
  opacity: 0;
  transform: translateY(26px);
  animation: heroRise var(--dur-slow) var(--ease) var(--hero-delay) forwards;
}
.hero h1 .ln {
  display: block;
  position: relative;
  width: fit-content;
}
.hero h1 .ln-text {
  position: relative;
  display: inline-block;
}
@keyframes heroRise {
  to {
    opacity: 1;
    transform: none;
  }
}

/* ===== カーソル近傍だけ正方形ブロックに分解（hero-shatter.js が有効化）=====
   見出しを小さな正方形タイルで敷き詰め（普段は隙間なく＝通常の文字に見える）。
   カーソル半径内のタイルだけ縮小して隙間を作る＝その部分だけ分解。範囲外はそのまま。
   実テキストはDOMに維持（SEO/A11y）。動きはCSSトランジション＋クラス付替の差分更新。 */
.shatter {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.shatter-cell {
  position: absolute;
  overflow: hidden;
  transform: none;
  transform-origin: center;
  /* 戻り：素早く綺麗にくっつく */
  transition: transform 0.16s ease-out;
}
.shatter-cell .sc-inner {
  position: absolute;
  display: inline-block;
  white-space: nowrap;
}
/* カーソル近傍：各ブロックがランダムな方向・回転で飛び散る */
.shatter-cell.on {
  /* サイズは均等（一律 scale）。散らばりは位置と回転のみ。 */
  transform: translate(var(--sx, 0), var(--sy, 0)) rotate(var(--sr, 0deg))
    scale(0.86);
  transition: transform 0.22s cubic-bezier(0.2, 0.8, 0.3, 1);
  will-change: transform;
}
/* JS有効時は実テキストを隠してタイルで再構成（カーソル外は継ぎ目なく整列） */
.hero-title.shatter-ready .ln-text {
  opacity: 0;
}

@media (max-width: 820px) {
  .hero-top .lbl,
  .hero-top .meta,
  .hero-row p,
  .hero-row .tags {
    grid-column: 1 / -1;
    text-align: left;
    border-left: 0;
    padding-left: 0;
  }
}

/* ============ sections (numbered grid) ============ */
.sec {
  border-bottom: 1px solid var(--line);
}
.sec-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1.5rem;
}
.sec-no {
  grid-column: 1 / 4;
  padding: 2.6rem 0;
  font-family: var(--grot);
  font-weight: 700;
  font-size: 1rem;
  letter-spacing: 0.04em;
  color: var(--pink);
  border-right: 1px solid var(--line);
}
.sec-no small {
  display: block;
  color: var(--muted);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin-top: 0.3rem;
}
.sec-body {
  grid-column: 4 / 13;
  padding: 2.6rem 0 2.6rem 1.5rem;
}
.sec-body h2 {
  font-family: var(--grot);
  font-weight: 700;
  font-size: clamp(1.6rem, 1rem + 2.4vw, 2.8rem);
  line-height: 1.1;
  letter-spacing: -0.01em;
  /* 文節（<wbr>）でだけ折り返す。収まらない場合の保険に anywhere */
  word-break: keep-all;
  overflow-wrap: anywhere;
}
.sec-body .sub {
  color: var(--muted);
  /* CJK は 1ch が狭く 54ch だと半分で折返すため、em ベースの広めの計測幅に */
  max-width: 48em;
  margin-top: 1rem;
}
@media (max-width: 820px) {
  .sec-no {
    grid-column: 1 / -1;
    border-right: 0;
    padding-bottom: 0;
  }
  .sec-body {
    grid-column: 1 / -1;
    padding-left: 0;
  }
}

/* ============ about: 代表ブロック（画像なし・文章のみ）============ */
.about-rep {
  margin-top: 2.2rem;
  padding-top: 1.8rem;
  border-top: 1px solid var(--line);
}
.rep-label {
  display: block;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--pink);
  margin-bottom: 0.9rem;
}
.rep-label span {
  color: var(--muted);
  margin: 0 0.45em;
}
.rep-head {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 0.5rem 1.3rem;
}
.rep-name {
  font-family: var(--didone);
  font-weight: 500;
  font-size: clamp(1.4rem, 1rem + 1.4vw, 2rem);
  line-height: 1.05;
  letter-spacing: -0.01em;
}
.rep-title {
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.76rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}
.rep-bio {
  margin-top: 1.1rem;
  color: var(--olive);
  max-width: 46em;
}
.rep-bio p {
  font-size: 0.98rem;
}
.rep-bio p + p {
  margin-top: 0.7rem;
}

/* ============ services ============ */
.svc {
  margin-top: 2rem;
  border-top: 1px solid var(--line);
}
.svc-item {
  display: grid;
  grid-template-columns: 3rem 1fr 1fr;
  gap: 1.5rem;
  padding: 1.4rem 0;
  border-bottom: 1px solid var(--line);
  align-items: baseline;
  transition: background var(--dur) var(--ease);
}
.svc-item:hover {
  background: var(--paper);
}
.svc-item .i {
  font-family: var(--grot);
  font-weight: 700;
  color: var(--pink);
}
.svc-item .t {
  font-family: var(--grot);
  font-weight: 700;
  font-size: 1.15rem;
  letter-spacing: -0.01em;
}
.svc-item .t {
  transition: transform var(--dur) var(--ease);
}
.svc-item:hover .t {
  transform: translateX(8px);
}
.svc-item .d {
  color: var(--muted);
  font-size: 0.9rem;
}
@media (max-width: 620px) {
  .svc-item {
    grid-template-columns: 2rem 1fr;
  }
  .svc-item .d {
    grid-column: 2;
  }
}

/* ============ artists（Worksを置換）============ */
.artists {
  margin-top: 2rem;
  border-top: 1px solid var(--line);
  display: grid;
  /* minmax(0,…) でトラックが内容（長い role 等）で膨らんで溢れるのを防ぐ */
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.artist-card {
  position: relative;
  display: flex;
  flex-direction: column;
  text-align: left;
  border-right: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 0;
  background: transparent;
  transition: background var(--dur) var(--ease);
}
.artist-card:nth-child(3n) {
  border-right: 0;
}
/* 一覧カードのカスケード出現（reveal の opacity/transform のみに効く） */
.artists .artist-card {
  transition-delay: calc(var(--ci, 0) * 70ms);
}
.artist-card:hover,
.artist-card:focus-visible {
  background: var(--paper);
}
.artist-card .ph {
  position: relative;
  overflow: hidden;
  aspect-ratio: 4 / 5;
  background: var(--olive);
}
.artist-card .ph img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--img-pos);
  transform: scale(1.001);
  transition: transform var(--dur-slow) var(--ease),
    filter var(--dur) var(--ease);
  filter: saturate(0.92) contrast(1.02);
}
.artist-card:hover .ph img,
.artist-card:focus-visible .ph img {
  transform: scale(1.06);
  filter: saturate(1) contrast(1.04);
}
/* 連番は写真の上に乗るので、どんな写真でも読める必要がある。
   以前は mix-blend-mode: difference で反転させていたが、これは中間色の背景では
   反転結果が背景と同化して**完全に消える**（実際に暗い写真と紫の写真で読めなかった）。
   地色のタイルに乗せる方式に変更。写真の明るさに一切依存しない。 */
.artist-card .idx {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 2;
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.8rem;
  letter-spacing: 0.04em;
  line-height: 1;
  color: var(--ink);
  background: var(--bg);
  padding: 0.5em 0.7em;
}
.artist-card .open-flag {
  position: absolute;
  right: 0.9rem;
  bottom: 0.9rem;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.66rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink);
  background: var(--pink-soft);
  padding: 0.45em 0.7em;
  transform: translateY(6px);
  opacity: 0;
  transition: transform var(--dur) var(--ease), opacity var(--dur) var(--ease);
}
.artist-card:hover .open-flag,
.artist-card:focus-visible .open-flag {
  transform: none;
  opacity: 1;
}
.artist-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.5rem;
  padding: 1rem 1.1rem 1.2rem;
}
.artist-meta .nm {
  font-family: var(--grot);
  font-weight: 800;
  font-size: clamp(1.15rem, 1rem + 0.7vw, 1.55rem);
  line-height: 1.05;
  letter-spacing: -0.01em;
}
.artist-meta .nm small {
  display: block;
  font-weight: 500;
  font-size: 0.7rem;
  letter-spacing: 0.06em;
  color: var(--muted);
  margin-top: 0.35rem;
  font-family: var(--sans);
}
.artist-meta .role {
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.66rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--pink);
  text-align: left;
  /* 長い担当表記（例: No No GIRLS）でも溢れないよう折り返し可 */
  overflow-wrap: anywhere;
}
@media (max-width: 820px) {
  .artists {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .artist-card:nth-child(3n) {
    border-right: 1px solid var(--line);
  }
  .artist-card:nth-child(2n) {
    border-right: 0;
  }
}
@media (max-width: 520px) {
  .artists {
    grid-template-columns: minmax(0, 1fr);
  }
  .artist-card,
  .artist-card:nth-child(3n),
  .artist-card:nth-child(2n) {
    border-right: 0;
  }
}

/* ============ talents（04 Artists / 公式サイトへのリンク）============ */
/* 03 Works の .artists とは意図的に別の見た目にしている。
   03 は「押すとモーダルが開く」＝サイト内、04 は「押すと外部サイトへ出る」。
   同じ枠線グリッドにすると押した結果が予想できない。
   こちらは罫線も枠も持たせず、写真・名前・導線の3つだけで構成する。 */
.talents {
  /* 見出し（h2）を出していないぶん、写真の上端を左の「04」に揃える。
     他のセクションは h2 が番号と揃うので、ここも同じ線に乗る。 */
  margin-top: 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(1.6rem, 1rem + 2.4vw, 3rem);
  /* 1組だけのときに引き伸ばさない。左詰めで余白を残す方が編集的に見える。 */
  justify-content: start;
}
.talent-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
}
/* 一覧カードのカスケード出現（.artists と同じ規則） */
.talents .talent-card {
  transition-delay: calc(var(--ci, 0) * 70ms);
}
.talent-card .ph {
  position: relative;
  overflow: hidden;
  aspect-ratio: 3 / 2;
  background: var(--olive);
}
.talent-card .ph img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.001);
  transition: transform var(--dur-slow) var(--ease),
    filter var(--dur) var(--ease);
  filter: saturate(0.92) contrast(1.02);
}
a.talent-card:hover .ph img,
a.talent-card:focus-visible .ph img {
  transform: scale(1.04);
  filter: saturate(1) contrast(1.04);
}

/* 名前の行。罫線は引かない。名前（大）と導線（小）を同じベースラインに並べ、
   1行そのものが下線代わりの区切りになる。 */
.talent-meta {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  margin-top: 1rem;
}
.talent-meta .nm {
  position: relative;
  /* 先方が長い名前を登録しても「OFFICIAL SITE ↗」を押し出さない。
     flex の初期値 min-width:auto だと縮まずに溢れる。 */
  min-width: 0;
  overflow-wrap: anywhere;
  font-family: var(--grot);
  font-weight: 800;
  font-size: clamp(1.2rem, 1rem + 0.8vw, 1.7rem);
  line-height: 1.05;
  letter-spacing: -0.01em;
}
/* ホバーの下線は名前の幅ぶんだけ左から伸ばす。border ではなく擬似要素の
   transform で動かす（レイアウトを触らない＝コンポジタだけで完結する）。 */
.talent-meta .nm::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -0.22em;
  height: 1px;
  background: var(--pink);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur) var(--ease);
}
a.talent-card:hover .nm::after,
a.talent-card:focus-visible .nm::after {
  transform: scaleX(1);
}
.talent-meta .go {
  flex: none;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.66rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
  white-space: nowrap;
  transition: color var(--dur) var(--ease);
}
.talent-meta .go span {
  display: inline-block;
  transition: transform var(--dur) var(--ease);
}
a.talent-card:hover .go,
a.talent-card:focus-visible .go {
  color: var(--pink);
}
a.talent-card:hover .go span,
a.talent-card:focus-visible .go span {
  transform: translate(0.18em, -0.18em);
}
.talent-sub {
  font-family: var(--sans);
  font-weight: 500;
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  color: var(--muted);
  margin-top: 0.4rem;
}
@media (max-width: 620px) {
  .talents {
    grid-template-columns: minmax(0, 1fr);
  }
}
@media (prefers-reduced-motion: reduce) {
  .talent-card .ph img,
  .talent-meta .nm::after,
  .talent-meta .go,
  .talent-meta .go span {
    transition: none;
  }
}

/* ============ artist modal (native <dialog>) ============ */
.artist-modal {
  width: min(100% - 1.5rem, 1100px);
  max-width: none;
  max-height: calc(100dvh - 1.5rem);
  margin: auto;
  padding: 0;
  border: 1px solid var(--line);
  background: var(--paper);
  color: var(--ink);
  overflow: hidden;
  opacity: 0;
  transform: translateY(14px) scale(0.99);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease),
    overlay var(--dur) allow-discrete, display var(--dur) allow-discrete;
}
.artist-modal[open] {
  opacity: 1;
  transform: none;
}
@starting-style {
  .artist-modal[open] {
    opacity: 0;
    transform: translateY(14px) scale(0.99);
  }
}
.artist-modal::backdrop {
  background: rgba(20, 19, 8, 0.62);
  backdrop-filter: blur(2px);
  opacity: 0;
  transition: opacity var(--dur) var(--ease),
    overlay var(--dur) allow-discrete, display var(--dur) allow-discrete;
}
.artist-modal[open]::backdrop {
  opacity: 1;
}
@starting-style {
  .artist-modal[open]::backdrop {
    opacity: 0;
  }
}
.artist-modal-scroll {
  max-height: calc(100dvh - 1.5rem);
  overflow-y: auto;
  overscroll-behavior: contain;
}
.modal-close {
  position: sticky;
  top: 0;
  z-index: 5;
  display: flex;
  justify-content: flex-end;
  align-items: center;
  height: 0;
}
.modal-close button {
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  background: var(--bg);
  border: 1px solid var(--line);
  font-family: var(--grot);
  font-size: 1.2rem;
  line-height: 1;
  transition: background var(--dur-fast) var(--ease),
    color var(--dur-fast) var(--ease);
}
.modal-close button:hover {
  background: var(--ink);
  color: var(--bg);
}
.modal-head {
  display: grid;
  grid-template-columns: 42% 1fr;
  border-bottom: 1px solid var(--line);
}
.modal-portrait {
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--olive);
  border-right: 1px solid var(--line);
}
.modal-portrait img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--img-pos);
}
.modal-info {
  padding: clamp(1.5rem, 1rem + 2vw, 2.8rem);
  display: flex;
  flex-direction: column;
  gap: 1.1rem;
}
/* 紹介文・タグ・リンクが全て空だと、肩書きと名前の2行だけが上端に貼りつき、
   ポートレート（4/5）の高さ分（1440pxで約440px）が下に空く。空のときだけ
   中央に置いて「意図した余白」に見せる。microCMS に原稿が入れば :has() が
   外れ、従来どおり上揃えに戻る。 */
.modal-info:not(:has(.bio, .modal-tags, .modal-links)) {
  justify-content: center;
}
.modal-info .eyebrow {
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.68rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--pink);
}
.modal-info h3 {
  font-family: var(--grot);
  font-weight: 800;
  font-size: clamp(2rem, 1.2rem + 3vw, 3.6rem);
  line-height: 0.92;
  letter-spacing: -0.02em;
}
.modal-info h3 small {
  display: block;
  font-family: var(--sans);
  font-weight: 500;
  font-size: 0.9rem;
  letter-spacing: 0.04em;
  color: var(--muted);
  margin-top: 0.6rem;
}
.modal-info .bio {
  color: var(--olive);
  font-size: 0.98rem;
  max-width: 46ch;
}
.modal-info .bio p + p {
  margin-top: 0.8rem;
}
.modal-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.2rem;
}
.modal-tags span {
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.66rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--olive);
  border: 1px solid var(--hairline);
  padding: 0.4em 0.8em;
}
.modal-links {
  display: flex;
  flex-wrap: wrap;
  gap: 1.2rem;
  margin-top: auto;
  padding-top: 0.6rem;
}
.modal-links a {
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.74rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  border-bottom: 2px solid var(--pink);
  padding-bottom: 0.2em;
  transition: color var(--dur-fast) var(--ease);
}
.modal-links a:hover {
  color: var(--pink);
}
@media (max-width: 720px) {
  .modal-head {
    grid-template-columns: 1fr;
  }
  .modal-portrait {
    border-right: 0;
    border-bottom: 1px solid var(--line);
    /* aspect-ratio は上書きせず 4/5 のまま継ぐ。以前は 16/11（横長）にしていたが、
       素材の約7割が縦長のため平均40%が失われ、人物の頭が切れていた。 */
  }
}

/* ---- Instagram風グリッド ---- */
.ig-grid-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.8rem;
  padding: 1.2rem clamp(1.2rem, 1rem + 2vw, 2.8rem);
  /* 右上の sticky な✕ボタン(44px+余白)の下に「N posts」が潜り込んで
     重ならないよう、右側だけ最低クリアランスを確保する */
  padding-right: max(clamp(1.2rem, 1rem + 2vw, 2.8rem), 4rem);
  border-bottom: 1px solid var(--line);
}
.ig-grid-head .t {
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.ig-grid-head .c {
  flex: none;
  white-space: nowrap;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  color: var(--muted);
}
.ig-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 3px;
  padding: 3px;
  background: var(--line);
}
.ig-cell {
  position: relative;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--olive);
}
.ig-cell img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--img-pos);
  transition: transform var(--dur-slow) var(--ease);
}
.ig-cell::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--pink);
  opacity: 0;
  mix-blend-mode: multiply;
  transition: opacity var(--dur) var(--ease);
}
.ig-cell:hover img {
  transform: scale(1.07);
}
.ig-cell:hover::after {
  opacity: 0.16;
}
/* モーダルを開いた時にセルが段階的に出る */
.artist-modal[open] .ig-cell {
  animation: igCellIn 0.5s var(--ease) backwards;
  animation-delay: calc(var(--ci, 0) * 30ms + 0.08s);
}
@keyframes igCellIn {
  from {
    opacity: 0;
    transform: translateY(14px);
  }
}
@media (max-width: 520px) {
  .ig-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* 写真セルはボタン/リンク要素。既定装飾をリセットしてクリック可能に。 */
button.ig-cell,
a.ig-cell {
  appearance: none;
  -webkit-appearance: none;
  border: 0;
  margin: 0;
  padding: 0;
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
  display: block;
  width: 100%;
}
.ig-cell:focus-visible {
  outline: 2px solid var(--pink);
  outline-offset: -2px;
  z-index: 1;
}
/* 作品グループの区切り（2つ目以降の見出しに上罫） */
.ig-grid + .ig-grid-head {
  border-top: 1px solid var(--line);
}

/* MV 等の外部リンクタイル（サムネ＋▶＋キャプション） */
.ig-grid--link {
  grid-template-columns: 1fr;
}
.ig-cell--link {
  aspect-ratio: 16 / 9;
}
.ig-cell--link::after {
  display: none; /* 通常セルのピンク hover オーバーレイは使わない */
}
.ig-cell--link img {
  transition: transform var(--dur-slow) var(--ease), filter var(--dur) var(--ease);
  filter: brightness(0.92);
}
.ig-cell--link:hover img,
.ig-cell--link:focus-visible img {
  transform: scale(1.03);
  filter: brightness(1);
}
.ig-play {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: clamp(3.2rem, 2.6rem + 2.4vw, 4.6rem);
  height: clamp(3.2rem, 2.6rem + 2.4vw, 4.6rem);
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--pink);
  color: var(--ink);
  font-size: 1rem;
  padding-left: 0.15em; /* ▶ の視覚的中央合わせ */
  transition: transform var(--dur) var(--ease);
}
.ig-cell--link:hover .ig-play,
.ig-cell--link:focus-visible .ig-play {
  transform: translate(-50%, -50%) scale(1.08);
}
.ig-link-cap {
  position: absolute;
  left: 0;
  bottom: 0;
  margin: 0.9rem;
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
  padding: 0.5em 0.8em;
  background: var(--bg);
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink);
}

/* ============ ライトボックス（native <dialog>・全画面拡大）============ */
.lightbox {
  width: 100vw;
  max-width: 100vw;
  height: 100dvh;
  max-height: 100dvh;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  overflow: hidden;
  opacity: 0;
  transform: scale(0.99);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease),
    overlay var(--dur) allow-discrete, display var(--dur) allow-discrete;
}
.lightbox[open] {
  opacity: 1;
  transform: none;
}
@starting-style {
  .lightbox[open] {
    opacity: 0;
    transform: scale(0.99);
  }
}
.lightbox::backdrop {
  background: rgba(12, 11, 4, 0.92);
  opacity: 0;
  transition: opacity var(--dur) var(--ease),
    overlay var(--dur) allow-discrete, display var(--dur) allow-discrete;
}
.lightbox[open]::backdrop {
  opacity: 1;
}
@starting-style {
  .lightbox[open]::backdrop {
    opacity: 0;
  }
}
.lb-figure {
  margin: 0;
  width: 100%;
  height: 100%;
  display: grid;
  /* 行の高さを確定させる。auto 行のままだと .lb-img の max-height:100% が
     「高さ不定の親に対する%」となり none 扱いで無効化され、画像が原寸描画→
     .lightbox の overflow:hidden で下が切れる（1440x900 で約430px）。 */
  grid-template-rows: minmax(0, 1fr);
  place-items: center;
  padding: clamp(1rem, 0.4rem + 3vw, 4rem);
}
.lb-img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
}
/* スワイプ中の追従は素の transform、指を離した後のスライドだけ遷移させる */
.lb-img.is-anim {
  transition: transform 0.26s var(--ease), opacity 0.26s var(--ease);
}
.lb-btn {
  position: fixed;
  z-index: 2;
  display: grid;
  place-items: center;
  background: var(--ink);
  color: var(--paper);
  border: 1px solid rgba(243, 239, 228, 0.55);
  box-shadow: 0 6px 22px rgba(0, 0, 0, 0.5);
  cursor: pointer;
  font-family: var(--grot);
  font-weight: 600;
  line-height: 1;
  transition: background var(--dur-fast) var(--ease),
    color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);
}
/* hover はホバー可能デバイス限定（SPはタップ後に :hover が残留するため） */
@media (hover: hover) {
  .lb-btn:hover {
    background: var(--pink);
    color: var(--ink);
    border-color: var(--pink);
  }
}
/* タップ/クリック押下中のフィードバック（指を離せば元に戻る） */
.lb-btn:active {
  background: var(--pink);
  color: var(--ink);
  border-color: var(--pink);
}
.lb-close {
  top: clamp(0.8rem, 0.5rem + 1vw, 1.4rem);
  right: clamp(0.8rem, 0.5rem + 1vw, 1.4rem);
  width: 46px;
  height: 46px;
  font-size: 1.15rem;
}
.lb-nav {
  top: 50%;
  transform: translateY(-50%);
  width: 52px;
  height: 52px;
  font-size: 1.9rem;
}
.lb-prev {
  left: clamp(0.6rem, 0.3rem + 1vw, 1.4rem);
}
.lb-next {
  right: clamp(0.6rem, 0.3rem + 1vw, 1.4rem);
}
.lb-count {
  position: fixed;
  bottom: clamp(0.8rem, 0.5rem + 1vw, 1.6rem);
  left: 50%;
  transform: translateX(-50%);
  z-index: 2;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.78rem;
  letter-spacing: 0.1em;
  color: var(--paper);
  background: rgba(12, 11, 4, 0.5);
  padding: 0.4em 0.9em;
}
@media (max-width: 520px) {
  .lb-nav {
    width: 44px;
    height: 44px;
    font-size: 1.5rem;
  }
}

/* ============ partners ============ */
.cl {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  border-top: 1px solid var(--line);
  margin-top: 2rem;
}
.cl span {
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.9rem;
  padding: 1.3rem 1rem;
  border-right: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  transition: background var(--dur-fast) var(--ease),
    color var(--dur-fast) var(--ease);
}
.cl span:nth-child(5n) {
  border-right: 0;
}
.cl span:hover {
  background: var(--paper);
}
@media (max-width: 720px) {
  .cl {
    grid-template-columns: repeat(2, 1fr);
  }
  .cl span:nth-child(5n) {
    border-right: 1px solid var(--line);
  }
  .cl span:nth-child(2n) {
    border-right: 0;
  }
}

/* ============ contact ============ */
.contact {
  padding: clamp(3.5rem, 2rem + 6vw, 6.5rem) 0;
}
.contact-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1.5rem;
  align-items: start;
}
.contact-lead {
  grid-column: 1 / 6;
}
.contact-lead h2 {
  font-family: var(--grot);
  font-weight: 800;
  font-size: clamp(2.2rem, 1.2rem + 4.4vw, 5rem);
  line-height: 0.95;
  letter-spacing: -0.03em;
}
.contact-lead h2 .pk {
  color: var(--pink);
}
.contact-lead .sub {
  color: var(--muted);
  margin-top: 1.4rem;
  /* 文の途中で不自然に折り返さないよう、幅は制限しない（横いっぱいに流す）。
     文の区切りは <br> で明示（全幅で1文ずつ改行）。 */
}
.contact-lead .direct {
  margin-top: 1.8rem;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.82rem;
  letter-spacing: 0.04em;
}
.contact-lead .direct a {
  border-bottom: 2px solid var(--pink);
  padding-bottom: 0.15em;
}
.contact-form-wrap {
  grid-column: 7 / 13;
  border-left: 1px solid var(--line);
  padding-left: 2rem;
}
@media (max-width: 820px) {
  .contact-lead,
  .contact-form-wrap {
    grid-column: 1 / -1;
  }
  .contact-form-wrap {
    border-left: 0;
    padding-left: 0;
    margin-top: 2.4rem;
    border-top: 1px solid var(--line);
    padding-top: 2.4rem;
  }
}

/* CF7 / フォールバックフォーム共通スタイル */
.lindo-form .field {
  display: block;
  margin-bottom: 1.4rem;
}
.lindo-form label,
.lindo-form .label {
  display: block;
  font-family: var(--grot);
  font-weight: 600;
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 0.5rem;
}
.lindo-form .req {
  color: var(--pink);
  margin-left: 0.3em;
}
.lindo-form input[type="text"],
.lindo-form input[type="email"],
.lindo-form input[type="tel"],
.lindo-form textarea,
.lindo-form select {
  width: 100%;
  font-family: var(--sans);
  font-size: 1rem;
  color: var(--ink);
  background: var(--bg);
  border: 0;
  border-bottom: 1px solid var(--line);
  padding: 0.85rem 0.2rem;
  transition: border-color var(--dur-fast) var(--ease),
    background var(--dur-fast) var(--ease);
}
.lindo-form textarea {
  min-height: 8rem;
  resize: vertical;
  line-height: 1.7;
}
.lindo-form input:focus,
.lindo-form textarea:focus,
.lindo-form select:focus {
  outline: none;
  border-bottom-color: var(--pink);
  background: var(--paper);
}
.lindo-form input::placeholder,
.lindo-form textarea::placeholder {
  color: color-mix(in srgb, var(--muted) 75%, transparent);
}
.lindo-form .btn,
.lindo-form input[type="submit"],
.lindo-form button[type="submit"] {
  display: inline-block;
  margin-top: 0.6rem;
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.8rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  background: var(--ink);
  color: var(--bg);
  border: 1px solid var(--ink);
  padding: 1.05em 2.6em;
  cursor: pointer;
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.lindo-form .btn:hover,
.lindo-form input[type="submit"]:hover,
.lindo-form button[type="submit"]:hover {
  background: var(--pink);
  border-color: var(--pink);
}
/* CF7 状態メッセージ */
.wpcf7 form .wpcf7-response-output {
  margin: 1.4rem 0 0;
  padding: 0.9rem 1rem;
  border: 1px solid var(--line);
  font-size: 0.85rem;
}
.wpcf7-not-valid-tip {
  color: var(--pink);
  font-size: 0.78rem;
}
.wpcf7 .wpcf7-spinner {
  margin: 0 0 0 0.6rem;
}
span.wpcf7-list-item {
  margin-left: 0;
}

/* ハニーポット。人間には見せず、ボットには「存在する入力欄」に見せる。
   display:none だと埋めないボットがいるので、視覚的にだけ隠す。 */
.lindo-form .hp {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

/* ---- メール導線（フォームの送信実装ができるまでの中身） ----
   上の .lindo-form 一式は消していない。render.php の LINDO_CONTACT_PART を
   'contact-form-fallback' に戻せばフォームに戻る。 */
.contact-mail__label {
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
}
.contact-mail__note {
  margin-top: 1.1rem;
  color: var(--muted);
  font-size: 0.92rem;
}
.contact-mail__hints {
  margin-top: 1.1rem;
  list-style: none;
  border-top: 1px solid var(--hairline);
}
.contact-mail__hints li {
  border-bottom: 1px solid var(--hairline);
  padding: 0.85rem 0 0.85rem 1.1rem;
  position: relative;
  font-size: 0.9rem;
  line-height: 1.6;
}
/* 箇条書きの点は装飾。ピンクの「.」の反復でトーンを揃える。 */
.contact-mail__hints li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 1.45em;
  width: 4px;
  height: 4px;
  background: var(--pink);
}
.contact-mail__action {
  margin-top: 1.8rem;
}
.contact-mail__action .btn {
  display: inline-block;
  font-family: var(--grot);
  font-weight: 700;
  font-size: 0.8rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  background: var(--ink);
  color: var(--bg);
  border: 1px solid var(--ink);
  padding: 1.05em 2.6em;
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.contact-mail__action .btn:hover,
.contact-mail__action .btn:focus-visible {
  background: var(--pink);
  border-color: var(--pink);
}

/* ============ footer ============ */
.ft {
  border-top: 1px solid var(--line);
  padding: 2.6rem 0;
}
.ft-in {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1.5rem;
  font-family: var(--grot);
  font-size: 0.8rem;
  letter-spacing: 0.04em;
}
.ft .b {
  grid-column: 1 / 5;
  font-size: 1.4rem;
  color: var(--ink);
}
.ft .a {
  grid-column: 5 / 9;
  color: var(--muted);
}
.ft .c {
  grid-column: 9 / 13;
  color: var(--muted);
}
.ft .c a {
  display: block;
}
.ft .c a:hover {
  color: var(--pink);
}
.ft .cp {
  grid-column: 1 / -1;
  margin-top: 1.6rem;
  padding-top: 1.2rem;
  border-top: 1px solid var(--line);
  color: var(--muted);
  font-size: 0.72rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
@media (max-width: 820px) {
  .ft .b,
  .ft .a,
  .ft .c {
    grid-column: 1 / -1;
  }
}

/* ============ reveal & motion ============ */
.rv {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity var(--dur-slow) var(--ease),
    transform var(--dur-slow) var(--ease);
}
.rv.in {
  opacity: 1;
  transform: none;
}
.rv.d1 {
  transition-delay: 0.08s;
}
.rv.d2 {
  transition-delay: 0.16s;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.001ms !important;
    animation-delay: 0ms !important;
    transition-duration: 0.001ms !important;
  }
  .rv {
    opacity: 1;
    transform: none;
  }
  .hero-title {
    opacity: 1;
    transform: none;
  }
  .scroll-progress {
    display: none;
  }
}
