@charset "utf-8";
/* ============================================================================
   LIFE EDIT MARKET — design refresh v1
   2026-08-30 / 新規ファイル。既存CSSは1行も書き換えていない（追記でもなく別ファイル）。
   全334ページで </head> 直前に読み込まれるため、常にカスケード最後になる。

   前提（FACTS-life-edit.md）
   - 332ページの <body> は無属性。body#top は /index.html と /en/index.html の2枚のみ。
   - 地色は --ref-paper(#F7F4EE)、本文色は --ref-ink(#1F2921)。--bg/--text は body に効いていない。
   - /en/index.html は主要トークン全未定義、/guides/adult-travel/ は旧 v14 の1段 :root。
     → すべての var() に fallback を書く。
   - .navband nav の display は既存で8回競合。上書きには !important が必須。
   ========================================================================== */

/* ---------------------------------------------------------------------------
   0. トークン（新色なし。既存トークンの参照と、その最終実測値をフォールバックに使う）
   ------------------------------------------------------------------------- */
:root{
  --ler-paper:var(--ref-paper,#F7F4EE);
  --ler-ink:var(--ref-ink,#1F2921);
  --ler-quiet:#4E493F;                       /* = --sub の最終値。全ページで同値に揃える */
  --ler-line:var(--ref-line,#DCD4C7);
  --ler-accent:var(--accent,#26382D);
  --ler-accent-hover:var(--accent-hover,#17251D);
  --ler-dark:var(--ref-dark,#223026);
  --ler-on-dark:#F7F4EE;                     /* = --ref-paper。濃緑面の上の文字 */
  --ler-surface:var(--surface,#FFFDF8);

  /* 余白スケール（8 / 16 / 24 / 36 / 56 / 80 / 112 / 148） */
  --ler-s1:8px;  --ler-s2:16px; --ler-s3:24px; --ler-s4:36px;
  --ler-s5:56px; --ler-s6:80px; --ler-s7:112px; --ler-s8:148px;

  /* モーション（SPEC.md 2章。数値は1msも変えない） */
  --ler-ease:cubic-bezier(.22,.61,.36,1);
  --ler-in:520ms;        /* 出現 */
  --ler-stagger:70ms;    /* リストの stagger */
  --ler-lines:90ms;      /* 見出しの行送り */
  --ler-hero:1200ms;     /* ヒーロー画像 scale(1.04)→1 = 1.2s */
  --ler-cta:200ms;       /* ファーストビューCTAの遅れ */
  --ler-img:600ms;       /* ホバー画像 */
  --ler-ui:300ms;        /* 下線・カード */
}

/* --accent2（#9A6E51 / 旧世代は #B08968）は 9〜11px の英字ラベルに広く使われていて、
   淡い地色の上で 3.1〜4.4:1 しか出ていない。新色は足さず、既存トークン同士の
   color-mix（--accent2 と --ref-ink）で同系のまま一段深くする。
   背景色として使われている箇所は無い（参照中CSS 33本を確認）ので副作用が無い。 */
:root{
  --accent2:#69523E;                                     /* color-mix 未対応環境向けの同値 */
  --accent2:color-mix(in srgb,#9A6E51 60%,#1F2921);
  --color-accent-2:var(--accent2);
  --category-gold:#6E5236;                               /* 同上（main.wrap .eyebrow 用） */
  --category-gold:color-mix(in srgb,#A8784E 60%,#172019);
  --global-brass:#6E4C2F;                                /* /en/ 用。同じ考え方 */
  --global-brass:color-mix(in srgb,#A97A51 58%,#14231C);
  --ler-brass-deep:#6D5338;                              /* 直書き #A16F48 / #A36F4D 用 */
  --ler-brass-deep:color-mix(in srgb,#A16F48 60%,#1F2921);
  --ref-brass:#6A5340;                                   /* 4.0:1 だった。下線と小ラベルにのみ使われている */
  --ref-brass:color-mix(in srgb,#9B7658 60%,#1F2921);

  /* editorial-depth-v5.css / culture-atlas-v22.css が :root を持たないまま
     var(--ink) 21回・var(--copper) 45回・var(--muted) 37回を fallback 無しで参照している。
     未定義なので background:var(--ink) が無効になり、白文字が淡色地に乗って 1.14:1 になっていた。
     既存トークンのエイリアスとして定義するだけで、新色は足していない。 */
  --ink:var(--ref-ink,#1F2921);
  --muted:#4E493F;                                       /* = --sub の最終値 */
  --copper:#6D5338;                                      /* = --ler-brass-deep */
  --copper:color-mix(in srgb,#A16F48 60%,#1F2921);
  --pro-gold:#6E4F33;                                    /* travel-photography-v6（3.7:1 だった） */
  --pro-gold:color-mix(in srgb,#A8764E 60%,#1F2921);
}

/* ---------------------------------------------------------------------------
   1. タイポグラフィ — 見出し / リード / 補足 の3段
   ------------------------------------------------------------------------- */
h1,h2,h3,h4,h5,
.compareTitle,.killerCard h3,.readingCard strong,.categoryAtlasCard h3{
  font-feature-settings:"palt" 1;
  font-kerning:normal;
}
/* 第1段：見出し。行間を締めて塊として見せる */
h1{line-height:1.34}
h2{line-height:1.42;margin-bottom:var(--ler-s2)}
h3{line-height:1.48}
h4,h5{line-height:1.55}
main.wrap .fBody h2,main.wrap .fBody h3{line-height:1.42}
.cultureHero h1,.itemPage>.section>h1{line-height:1.32}

/* 第2段：リード。本文よりわずかに大きく、行間は広く、色は --ler-quiet */
.secLead,.lead,.killerZone__lead,.accessRecovery__head p,.cultureManifesto div p,
.stayLengthPlanner__head>p{
  /* clamp(15px,1.1vw,17px) は 1.1vw が 1364px 未満で 15px を下回るため下限に張り付き、
     本文（15px）と同サイズになって第2段が機能していなかった
     （design-qa round1 / 不合格10）。vw 依存をやめ、下限を本文より上に置く。
     390px = 16.8px / 768px 以上 = 18px。全幅で本文 15px より 1.8px 以上大きい。 */
  font-size:clamp(16.5px,.6vw + 14.5px,18px);
  line-height:1.9;
  max-width:38em;
  margin-top:var(--ler-s2);
}
.secLead,.lead,.accessRecovery__head p,.cultureManifesto div p,.stayLengthPlanner__head>p{
  color:var(--ler-quiet);
}
/* body#top のリードは v38 で --ref-muted（淡い地の上で 4.48:1）が id 詳細度で効いている */
.killerZone__lead,body#top .killerZone__lead{color:var(--ler-quiet)!important}
main.wrap .secLead,main.article .secLead{max-width:38em}
/* 上のサイズ指定（詳細度 0,1,0）は既存の
     main.wrap .secLead / main.article .secLead（v38:3447 / eg-v32:3397 = 0,2,1 / 15px、
       同ファイルの狭幅 @media 版は 14px）
     body#top .killerZone__lead（v38:2312 = 1,1,0 / 15px）
   に負けて、実測が 14〜15px＝本文と同サイズのままだった。同じ詳細度で書き足す。
   （@media はカスケードの詳細度に影響しないので、後から読まれるこちらが勝つ） */
main.wrap .secLead,main.article .secLead,
main.wrap .lead,main.article .lead,
main.wrap .accessRecovery__head p,
body#top .secLead,body#top .section .secLead,
body#top .killerZone__lead,
body#top .accessRecovery__head p{
  font-size:clamp(16.5px,.6vw + 14.5px,18px);
  line-height:1.9;
}
/* 濃い面の上のリードは触らない（既存の明るい色を残す） */
.adultTravelHero .secLead,.revenuePage>.section:first-child .secLead,
.categoryHero .categoryHero__lead,.festivalHero p,.depthHero p{color:inherit}

/* 第3段：補足。小さく・静かに。ただし色は必ず --ler-quiet 以上の濃さを保つ */
.caption,.src,.note,.rate,.storeNote,.prnote,.dateline,.asuraku,.spec .src,
.cardStoreNote,.supportNote{
  font-size:12px;
  line-height:1.8;
  color:var(--ler-quiet);
}
.compareDate,.comparePlaceholder,.compareLead{font-size:12px;line-height:1.8}
/* 本文（第2段と第3段の間） */
.judge,.card p,.killerCard p,.accessRecoveryCard p,.readingCard__text,
.stayLengthCard__note,.cultureHero>div>p:not(.cultureLabel){color:var(--ler-quiet)}
/* .fBody 直下の段落だけ。孫（濃緑の .priceCompare の中など）には効かせない */
main.wrap .fBody>p{color:var(--ler-quiet)}

/* 景表法・ステマ規制の表示。before は 1.34:1 でほぼ読めなかった。
   head 内インライン <style> の .about p.about-disclosure（#D0CCC4/9px）を打ち消す。 */
.about p.about-disclosure,
.about .inner p.about-disclosure,
.about .wrap p.about-disclosure,
p.about-disclosure{
  font-size:12px!important;
  line-height:1.85!important;
  color:var(--ler-quiet)!important;
  letter-spacing:.01em;
}

/* ---------------------------------------------------------------------------
   2. 英字ラベル — バッジをやめ、編集物のノンブル／折り記号にする
      テキストは消さない。サイズ・字間・字面の重さで静かにする。
      opacity / color-mix(transparent) は使わない（コントラストが落ちるため）。
   ------------------------------------------------------------------------- */
.eyebrow,.kicker,.fBody .kicker,.cultureLabel,.killerCard__label,.categoryAtlasCard__label,
.readingCard__label,.stayLengthCard__label,.stayLengthPlanner__kicker,.festivalKicker,
.excursionLabel,.vlabel,.band cite,.toc .cat,.spec .caption,.minutes .who,.toolbar .tl,
.accessRecoveryCard span,.readerJumpNav__label,.compareMall,.itemPage .compareMall,
.itemPage>.section>.secLead,.travelReadingMeta{
  font-family:var(--label,"Jost",sans-serif)!important;
  font-size:11px!important;
  font-weight:500!important;
  letter-spacing:.04em!important;   /* .22〜.24em の「広い字間のバッジ」をやめる */
  line-height:1.5!important;
  text-transform:none!important;    /* 大文字化を CSS で足さない */
}
/* 色はここでは触らない。触ると濃色面の上のラベル（.festivalAccess__body>.festivalKicker
   の #d8a578 など）まで潰れて逆にコントラストが落ちる。
   淡い地の上の弱さは §0 のトークン（--accent2 / --category-gold / --global-brass）を
   一段深くすることで解消し、ハードコードされている数箇所だけ個別に直す（§10）。 */
/* .eyebrow は flex + gap + 48px 飾り線で組まれていた。ブロックの小見出しに戻す */
.eyebrow,main.wrap .eyebrow,main.article .eyebrow,body#top .eyebrow{
  display:block!important;
  gap:0!important;
  margin-bottom:var(--ler-s1)!important;
}
/* 意味のない48px（本文ページでは42px）の飾り線を削除 — 327ページ / 901箇所 */
.eyebrow::after,
main.wrap .eyebrow::after,
main.article .eyebrow::after,
body#top .eyebrow::after,
.killerZone__head .eyebrow::after{
  content:none!important;
  display:none!important;
  width:0!important;
  flex:0 0 0!important;
  background:none!important;
}
/* ラベル直後の見出しと1組に見せる */
.eyebrow+h1,.eyebrow+h2,.eyebrow+h3,
.cultureLabel+h1,.cultureLabel+h2,
.kicker+h2,.kicker+h3{margin-top:2px}

/* 縦組みラベルも同じ調子に */
.vlabel{
  writing-mode:vertical-rl;
  font-family:var(--serif,"Shippori Mincho",serif)!important;
  font-size:11px!important;
  letter-spacing:.28em!important;
  border-right:1px solid var(--ler-line);
}

/* 濃い面の上のラベルは明るい側へ（コントラストを反転させる）。
   ここに挙げたのは背景が濃色であることを実CSSで確認したものだけ。
   （.adultTravelHero は /guides/adult-travel/ の1ページだけで、そこは
     editorial-guide-v32.css を読まない＝地は淡色。含めてはいけない） */
.priceCompare .compareMall,
.itemPage .priceCompare .compareMall,
.accessRevenueStrip span,
.stayLengthPlanner__foot .stayLengthCard__label{
  color:var(--ler-on-dark)!important;
}
/* depthHero__label は元から濃い面用の色。触らない */
.depthHero__label{color:inherit}

/* 濃緑の価格比較パネル（279ページ）。既存の main.wrap .fBody p が
   --ref-muted を孫まで塗っていて 2.09:1 しか出ていなかった。 */
.priceCompare .compareTitle,
.priceCompare .comparePrice,
.itemPage .priceCompare .compareTitle,
.itemPage .priceCompare .comparePrice{color:var(--ler-on-dark)!important}
.priceCompare .compareLead,
.priceCompare .compareDate,
.priceCompare .comparePlaceholder,
.itemPage .priceCompare .compareLead,
.itemPage .priceCompare .compareDate,
.itemPage .priceCompare .comparePlaceholder{color:rgba(255,253,248,.88)!important}

/* /en/ は別テンプレート（global-english-v1.css）。ラベルが 1.6〜1.8:1 だった */
.globalKicker{color:var(--global-brass)!important}

/* バッジ類のコントラスト（before: .badge.point = 3.63:1） */
.badge.point{color:var(--ler-quiet);border-color:var(--ler-quiet)}
.badge.soft{color:var(--ler-quiet)}
.badge{font-family:var(--label,"Jost",sans-serif);letter-spacing:.04em;border-radius:0}

/* ---------------------------------------------------------------------------
   3. 余白スケールの統一
   ------------------------------------------------------------------------- */
.section{padding-top:clamp(56px,7.6vw,112px)}
.itemPage>.section{padding-top:clamp(40px,5vw,80px);padding-bottom:clamp(56px,7.6vw,112px)}
.killerZone{margin-top:var(--ler-s6)}
.killerGrid{margin-top:var(--ler-s4);gap:var(--ler-s3)}
.killerCard__body{padding:var(--ler-s3) var(--ler-s3) var(--ler-s4)}
.grid{margin-top:var(--ler-s5);gap:var(--ler-s3)}
.card .cb{padding:var(--ler-s3) var(--ler-s3) var(--ler-s4)}
.card .ph{padding:var(--ler-s3)}
.readingGrid{margin-top:var(--ler-s4)}
/* head インライン <style> の .readingCard は `1fr`（＝ minmax(auto,1fr)）で、
   本文カラムが min-content 未満に縮めず 11px はみ出していた（before から発生）。
   minmax(0,1fr) にして自動最小サイズを外す。 */
.readingCard{grid-template-columns:minmax(140px,32%) minmax(0,1fr)}
.readingCard--wide{grid-template-columns:minmax(0,42%) minmax(0,1fr)}
.readingCard,.readingCard__body{min-width:0}
.readingCard__body{padding:var(--ler-s3)}
.readingCard__label,.readingCard__cta,.readingCard strong,.readingCard__text{
  max-width:100%;overflow-wrap:anywhere;word-break:normal;
}
@media(max-width:760px){
  .readingCard,.readingCard--wide{grid-template-columns:126px minmax(0,1fr)}
}
.categoryAtlasCard__body{padding:var(--ler-s3) var(--ler-s3) var(--ler-s4)}
.accessRecovery{margin-top:var(--ler-s5);padding-top:var(--ler-s5)}
.accessRecoveryGrid{margin-top:var(--ler-s4)}
.accessRecoveryCard div{padding:var(--ler-s3)}
.priceCompare{margin:var(--ler-s5) 0}
.spec{margin-top:var(--ler-s3)}
.shopinfo{margin-top:var(--ler-s2)}
.buyrow{margin-top:var(--ler-s3)}

/* ---------------------------------------------------------------------------
   4. モバイルのグローバルナビ — 8項目2カラム格子 → 1行の横スクロール帯
      既存が !important で display:grid を8回競合させているため、こちらも !important。
      body#top（2ページ）と無属性 body（332ページ）の両方を書く。
      SPEC「横スクロール要素は両端フェード + 『→』ヒント」をここで満たす。
   ------------------------------------------------------------------------- */
@media(max-width:820px){
  /* ロゴ塊を詰めてファーストビューを取り戻す（before: main の top が 304-342px） */
  .masthead,body#top .masthead{padding-top:var(--ler-s2)!important;padding-bottom:0!important}
  .masthead svg,body#top .masthead svg{
    width:min(168px,54vw)!important;
    max-height:88px!important;
  }
  .navband,body#top .navband{
    position:relative;
    margin:10px 0 0!important;
    width:100%!important;
    max-width:100%!important;
    overflow:hidden!important;
    box-sizing:border-box!important;
    background:var(--ler-paper);
  }
  .navband nav,
  .navband nav.wrap,
  body#top .navband nav,
  body#top .navband nav.wrap{
    display:flex!important;
    flex-wrap:nowrap!important;
    grid-template-columns:none!important;
    justify-content:flex-start!important;
    align-items:stretch!important;
    gap:0!important;
    width:100%!important;
    max-width:100%!important;
    margin:0!important;
    padding:0 30px 0 18px!important;
    box-sizing:border-box!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    -ms-overflow-style:none;
    scroll-snap-type:x proximity;
    /* 両端フェードと「→」は実際にスクロールするときだけ出す。
       768/820px では 7リンクが 1行に収まりきってスクロールしないのに
       ヒントが出ていた（design-qa round1 / 不合格9）。
       JS（markScrollers）が scrollWidth > clientWidth を見て
       .navband に .ler-scroll-hint を付けたときだけ有効になる。
       JSが動かない場合はマスクもヒントも出ない＝素直な1行ナビ。 */
    -webkit-mask-image:none;
            mask-image:none;
  }
  .navband.ler-scroll-hint nav,
  .navband.ler-scroll-hint nav.wrap,
  body#top .navband.ler-scroll-hint nav,
  body#top .navband.ler-scroll-hint nav.wrap{
    -webkit-mask-image:linear-gradient(90deg,rgba(0,0,0,0) 0,#000 18px,#000 calc(100% - 34px),rgba(0,0,0,0) 100%);
            mask-image:linear-gradient(90deg,rgba(0,0,0,0) 0,#000 18px,#000 calc(100% - 34px),rgba(0,0,0,0) 100%);
  }
  .navband nav::-webkit-scrollbar,
  body#top .navband nav::-webkit-scrollbar{width:0;height:0;display:none}
  .navband nav a,
  .navband nav.wrap a,
  body#top .navband nav a,
  body#top .navband nav.wrap a{
    display:inline-flex!important;
    flex:0 0 auto!important;
    align-items:center;
    justify-content:center;
    width:auto!important;
    min-width:0!important;
    max-width:none!important;
    min-height:46px!important;
    padding:0 13px!important;
    font-size:11px!important;
    letter-spacing:.02em!important;
    line-height:1.4!important;
    white-space:nowrap!important;
    overflow-wrap:normal!important;
    word-break:normal!important;
    line-break:auto!important;
    text-align:center;
    scroll-snap-align:start;
  }
  /* 「→」ヒント。帯の右端に置く（nav の外なのでマスクの影響を受けない）。
     実際に横スクロールするときだけ出す（JSが .ler-scroll-hint を付ける）。 */
  .navband::after{content:none}
  .navband.ler-scroll-hint::after,
  body#top .navband.ler-scroll-hint::after{
    content:"→";
    position:absolute;
    top:0;
    right:0;
    bottom:0;
    display:flex;
    align-items:center;
    padding:0 8px 0 18px;
    font-family:var(--label,"Jost",sans-serif);
    font-size:12px;
    color:var(--ler-quiet);
    background:linear-gradient(90deg,rgba(247,244,238,0),var(--ler-paper) 58%);
    pointer-events:none;
  }
}

/* 汎用の横スクロール帯（JSが scrollWidth > clientWidth を検出して付ける） */
.ler-scroll{
  position:relative;
  -webkit-mask-image:linear-gradient(90deg,rgba(0,0,0,0) 0,#000 18px,#000 calc(100% - 30px),rgba(0,0,0,0) 100%);
          mask-image:linear-gradient(90deg,rgba(0,0,0,0) 0,#000 18px,#000 calc(100% - 30px),rgba(0,0,0,0) 100%);
}
.ler-scroll-hint{position:relative}
.ler-scroll-hint::after{
  content:"→";
  position:absolute;
  right:2px;
  top:50%;
  transform:translateY(-50%);
  padding:0 6px 0 16px;
  font-family:var(--label,"Jost",sans-serif);
  font-size:12px;
  color:var(--ler-quiet);
  background:linear-gradient(90deg,rgba(247,244,238,0),var(--ler-paper) 58%);
  pointer-events:none;
}

/* ---------------------------------------------------------------------------
   5. CTA — 主CTAを1つに絞る。副CTAは面ではなく線のリンクに落とす
   ------------------------------------------------------------------------- */
.cta{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:50px;
  margin-top:var(--ler-s2);
  padding:14px 32px;
  border:1px solid var(--ler-accent);
  border-radius:0;
  background:var(--ler-accent);
  color:#fff;
  font-family:var(--label,"Jost",sans-serif);
  font-size:13px;
  letter-spacing:.06em;
  transition:background var(--ler-ui) var(--ler-ease),
             border-color var(--ler-ui) var(--ler-ease),
             color var(--ler-ui) var(--ler-ease),
             transform var(--ler-ui) var(--ler-ease);
}
.cta:hover,.cta:focus-visible{background:var(--ler-accent-hover);border-color:var(--ler-accent-hover)}
.cta:focus-visible{outline:2px solid var(--ler-accent);outline-offset:3px}

/* 副CTA（Amazon / Yahoo!）は線のリンクへ。281ページで主従が生まれる */
.cta--amazon,
.cta.cta--amazon,
a.cta.cta--amazon{
  min-height:0!important;
  margin-left:var(--ler-s3)!important;
  padding:4px 0 5px!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--ler-accent)!important;
  font-size:12px!important;
  letter-spacing:.02em!important;
}
.cta--amazon:hover,.cta--amazon:focus-visible{
  background:transparent!important;
  color:var(--ler-accent-hover)!important;
}
@media(max-width:820px){
  .cta{width:100%}
  .cta--amazon,.cta.cta--amazon{width:auto!important;margin-left:0!important;margin-top:var(--ler-s2)!important}
}
/* 濃色パネルの中に副CTAが置かれた場合の保険 */
.revenueFocus .cta--amazon,.adultTravelHero .cta--amazon,
.revenuePage>.section:first-child .cta--amazon,
.priceCompare .cta--amazon{color:var(--ler-on-dark)!important}

/* 一覧カードの3つ並びの塗りボタンも主従を作る。
   「楽天で価格を見る」だけを面に残し、詳細とAmazonは線のリンクへ。
   濃色パネル（.revenueFocus / .adultTravelHero）に当てないよう .card 配下に限定する。 */
.card .cardActions{gap:var(--ler-s2) var(--ler-s3);align-items:center}
.card .cardAction--detail,.card .cardAction--amazon{
  background:transparent!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  color:var(--ler-accent)!important;
  min-height:0!important;
  padding:2px 0 5px!important;
  width:auto!important;
  box-shadow:none!important;
}
.card .cardAction--detail:hover,.card .cardAction--amazon:hover,
.card .cardAction--detail:focus-visible,.card .cardAction--amazon:focus-visible{
  background:transparent!important;
  color:var(--ler-accent-hover)!important;
  transform:none!important;
  box-shadow:none!important;
}

/* 5-2. .cardActions の中で同じ濃緑の塗りボタンが2つ以上並ぶ（9ページ）。
        グループの主CTAは「--rakuten があればそれ、無ければ先頭」の1つに絞り、
        残りは線のリンクへ落とす（design-qa round1 / 不合格8）。
        HTMLは変えないので兄弟結合子と :has() で分岐する。
        既存の .card .cardAction--detail / --amazon のルール（合格済み）とは矛盾しない。 */
.cardActions>.cardAction~.cardAction:not(.cardAction--rakuten),
.cardActions>.cardAction--rakuten~.cardAction--rakuten{
  background:transparent!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  color:var(--ler-accent)!important;
  min-height:0!important;
  min-width:0!important;
  width:max-content!important;
  max-width:100%!important;
  padding:2px 0 5px!important;
  box-shadow:none!important;
}
.cardActions>.cardAction~.cardAction:not(.cardAction--rakuten):hover,
.cardActions>.cardAction~.cardAction:not(.cardAction--rakuten):focus-visible,
.cardActions>.cardAction--rakuten~.cardAction--rakuten:hover,
.cardActions>.cardAction--rakuten~.cardAction--rakuten:focus-visible{
  background:transparent!important;
  color:var(--ler-accent-hover)!important;
  transform:none!important;
  box-shadow:none!important;
}
/* 先頭が素の .cardAction で、後ろに --rakuten が控えているグループ
   （/guides/pet-stay-checklist/ など）は、先頭ではなく --rakuten が主。
   :has() 非対応環境では下の2ルールが丸ごと落ちるだけで、
   「先頭が主」という上のルールの結果に戻る（壊れない）。 */
.cardActions>.cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten){
  background:transparent!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  color:var(--ler-accent)!important;
  min-height:0!important;
  min-width:0!important;
  width:max-content!important;
  max-width:100%!important;
  padding:2px 0 5px!important;
  box-shadow:none!important;
}
.cardActions>.cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten):hover,
.cardActions>.cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten):focus-visible{
  background:transparent!important;
  color:var(--ler-accent-hover)!important;
  transform:none!important;
  box-shadow:none!important;
}
/* 濃色パネル（.revenueFocus / .adultTravelHero / .revenuePage の先頭セクション）の中では
   線の色を明るい側に反転させる（コントラストを落とさない） */
.revenueFocus .cardActions>.cardAction~.cardAction:not(.cardAction--rakuten),
.adultTravelHero .cardActions>.cardAction~.cardAction:not(.cardAction--rakuten),
.revenuePage>.section:first-child .cardActions>.cardAction~.cardAction:not(.cardAction--rakuten),
.revenueFocus .cardActions>.cardAction--rakuten~.cardAction--rakuten,
.adultTravelHero .cardActions>.cardAction--rakuten~.cardAction--rakuten,
.revenuePage>.section:first-child .cardActions>.cardAction--rakuten~.cardAction--rakuten{
  color:var(--ler-on-dark)!important;
}
/* 縦積みになる狭幅では stretch されないよう左寄せにする */
@media(max-width:820px){
  .cardActions{justify-items:start}
}

/* ファーストビューのCTA：1つだけ面、残りは線 */
.heroAction{border-radius:0;min-height:50px;letter-spacing:.06em;font-family:var(--label,"Jost",sans-serif)}
/* 副CTAは線のリンクへ。body#top 側が id 詳細度で塗りを当てているので !important。
   色は currentColor に任せる（濃色ヒーローでも淡色ページでも成立する） */
.heroActions .heroAction:not(.heroAction--primary),
body#top .heroActions .heroAction:not(.heroAction--primary){
  background:transparent!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  padding:10px 2px!important;
  min-height:0!important;
  /* v38:2289 の body#top .heroTitle .heroAction{min-width:220px} が残っていたため、
     文字117pxに対し下線が220px伸びて新しい罫線になっていた
     （design-qa round1 / 不合格7）。文字幅ちょうどに詰める。 */
  min-width:0!important;
  width:max-content!important;
  max-width:100%!important;
  justify-self:start;
  align-self:center;
}
.heroActions .heroAction:not(.heroAction--primary):hover,
.heroActions .heroAction:not(.heroAction--primary):focus-visible,
body#top .heroActions .heroAction:not(.heroAction--primary):hover,
body#top .heroActions .heroAction:not(.heroAction--primary):focus-visible{
  background:transparent!important;
  opacity:1;
}
.heroActions{gap:var(--ler-s3);align-items:center;justify-items:start}

/* ヒーロー内側のヘアラインの額縁（v38:2630 body#top .heroTitle::before =
   inset:24px / 1px solid rgba(248,244,234,.18)）。NOTES §3-2 が名指しした
   「意味のない装飾線」なので消す（design-qa round1 / 不合格3）。
   直下の ::after（下端 1px の区切り）はセクションの境界として機能しているので残す。 */
.heroTitle::before,
body#top .heroTitle::before{
  content:none!important;
  display:none!important;
  border:0!important;
}

/* v38:4290 の @media(min-width:821px){body#top .heroTitle h1{white-space:nowrap}} で
   見出しが 816px、入る幅は 688px。実測でテキストがはみ出していたので折り返す。
   折り返した2行が、見出しの 90ms 行送りにもそのまま乗る。 */
@media(min-width:821px){
  body#top .heroTitle h1,.heroTitle h1{white-space:normal!important;max-width:15em}
}

/* 写真の上に重ねる説明キャプション：スクリム（背景の不透明度）が足りず
   白文字が地の淡色と 1.4:1 になっていた。既存色の不透明度だけ上げる。 */
.adultDiscoveryCard__photo figcaption{background:rgba(21,31,25,.92)}
.stayLengthCard__photo figcaption span,
.stayLengthCard__photo figcaption b{
  padding:4px 9px;
  background:rgba(31,41,33,.92);
}

/* ---------------------------------------------------------------------------
   6. カード表現 — 同型カードの羅列を断ち、編集のリズムを入れる
   ------------------------------------------------------------------------- */

/* 6-1. .section > .grid > .card（10ページ / 17グリッド）
       先頭カードを横組みの編集リードにし、以降を3列に落とす */
.card{border-radius:0}
.card .ph{background:var(--ler-surface)}
@media(min-width:900px){
  .grid{grid-template-columns:repeat(6,minmax(0,1fr))}
  .grid>*{grid-column:span 2;min-width:0}
  /* guides の .grid にはカードの間に補足の <p class="storeNote"> が挟まっている。
     カード1枠ぶんを占有すると空きが目立つので、1行の注記として全幅に置く。 */
  .grid>.storeNote,.grid>p{grid-column:1/-1;align-self:start;margin:0}
  /* 先頭カードの内部構造は3種類ある（334ページを機械抽出して確認）。
       A: .card > .card-main > (.ph, .cb)     … guides 7ページ
       B: .card > (.ph, .cardStoreNote, .cb)  … /guides/pet-stay/ 5グリッド、/index.html 2グリッド
       C: .card > (.cb)                        … /guides/pet-stay/ 2グリッド（写真なし）
     grid の 2トラックを .card 自身に当てると B/C でトラックが埋まらず空箱になる
     （design-qa round1 / 不合格1：1124×1487px・右630pxが空白）。
     flex にすると「写真があれば44%、無ければ本文が全幅」が構造を問わず成立する。 */
  .grid>.card:first-child{
    grid-column:span 6;
    display:flex;
    flex-wrap:wrap;
    align-items:stretch;
  }
  /* A: card-main 自身が2カラムの行になる */
  .grid>.card:first-child>.card-main{
    flex:1 1 100%;
    display:flex;
    flex-wrap:wrap;
    align-items:stretch;
    min-width:0;
  }
  /* A/B 共通：写真は左44%、本文は残り全部（= .56fr 相当） */
  .grid>.card:first-child>.ph,
  .grid>.card:first-child>.card-main>.ph{flex:0 0 44%;max-width:44%;min-width:0}
  /* C（写真なし）では .cb だけが行に残るので、そのまま全幅になる */
  .grid>.card:first-child>.cb,
  .grid>.card:first-child>.card-main>.cb{flex:1 1 0%;min-width:0}
  /* 注記・ボタン列は order で後ろへ送り、行を改めて全幅に置く
     （B では .cardStoreNote が DOM 上 .ph と .cb の間にある） */
  .grid>.card:first-child>.storeNote,
  .grid>.card:first-child>.cardStoreNote,
  .grid>.card:first-child>.cardActions,
  .grid>.card:first-child>.card-main~*{
    flex:1 1 100%;
    max-width:100%;
    order:2;
  }
  .grid>.card:first-child .ph{
    aspect-ratio:auto;
    min-height:clamp(260px,25vw,340px);
    border-bottom:0;
    border-right:1px solid var(--ler-line);
    padding:var(--ler-s4);
  }
  .grid>.card:first-child .cb{
    display:flex;
    flex-direction:column;
    justify-content:center;
    padding:var(--ler-s5);
  }
  /* /guides/pet-stay/ の .ph.stayHotelPhoto は商品切り抜きではなく宿の風景写真。
     左カラムが本文の高さまで伸びるので、contain + multiply のままだと
     周囲が大きく余る。この先頭カードだけ塗り切る。 */
  .grid>.card:first-child>.ph.stayHotelPhoto{padding:0}
  .grid>.card:first-child>.ph.stayHotelPhoto img{
    width:100%;
    height:100%;
    object-fit:cover;
    mix-blend-mode:normal;
  }
  .grid>.card:first-child h4{font-size:clamp(22px,2.1vw,28px);line-height:1.5}
  .grid>.card:first-child .judge{font-size:15px;line-height:1.95;max-width:34em}
  .grid>.card:first-child .p2{font-size:20px}
}
/* /library/ の .grid はカードの構造が違う（.ph ではなく .fMedia）ので、
   上のリズムを当てるとトラックが潰れる。元の auto-fit に戻す。 */
.libraryPage .grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.libraryPage .grid>*{grid-column:auto}
.libraryPage .grid>.card:first-child{display:block;grid-column:auto}
.libraryPage .grid>.card:first-child .ph{aspect-ratio:4/3;border-right:0;min-height:0}

/* 6-2. .compareGrid（279ページ × 3枚 = 837枚の完全同型カード）
       楽天（価格が入る唯一のカード）を主、残り2枚を線のリンクに落とす */
@media(min-width:821px){
  .compareGrid,.itemPage .compareGrid{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr)}
}
.compareCard{border-radius:0}
.itemPage .compareCard:first-child,.compareCard:first-child{padding:var(--ler-s4) var(--ler-s4) var(--ler-s4)}
.itemPage .compareCard:first-child .comparePrice,
.compareCard:first-child .comparePrice{
  font-family:var(--serif,"Shippori Mincho",serif);
  font-size:clamp(30px,3.4vw,44px);
  line-height:1.15;
  letter-spacing:.01em;
}
.compareCard:not(:first-child) .compareButton,
.itemPage .compareCard:not(:first-child) .compareButton{
  width:max-content!important;
  min-height:0!important;
  margin-top:auto!important;
  padding:0 0 6px!important;
  border:0!important;
  border-bottom:1px solid rgba(255,253,248,.62)!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--ler-on-dark)!important;
  font-size:12px!important;
  letter-spacing:.02em!important;
}
.compareCard:not(:first-child) .compareButton:hover,
.compareCard:not(:first-child) .compareButton:focus-visible{
  background:transparent!important;
  border-bottom-color:var(--ler-on-dark)!important;
}
.compareCard:first-child .compareButton{border-radius:0;min-height:48px}
.compareButton{
  transition:background var(--ler-ui) var(--ler-ease),
             color var(--ler-ui) var(--ler-ease),
             border-color var(--ler-ui) var(--ler-ease);
}

/* 6-3. .killerCard（トップ）— 足並みを揃え、主従を作る */
.killerCard{border-radius:0}
/* min-height:100% を付けると grid-template-rows:auto 1fr の auto 行（写真）が
   0px に潰れる。flex + margin-top:auto だけで CTA は下端に揃う。 */
.killerCard__body{display:flex;flex-direction:column;gap:10px}
.killerCard__cta{margin-top:auto!important}          /* CTA を下端で揃える */
.killerCard h3{margin-top:2px}
.killerGrid .killerCard__photo img,
body#top .killerGrid .killerCard__photo img{aspect-ratio:16/10!important;object-fit:cover}
.killerGrid .killerCard--main .killerCard__photo img,
body#top .killerGrid .killerCard--main .killerCard__photo img{aspect-ratio:4/3!important}
/* 4枚とも同じ濃緑の塗りボタンだった。主カード以外は線のリンクへ */
.killerGrid .killerCard:not(.killerCard--main) .killerCard__cta,
body#top .killerGrid .killerCard:not(.killerCard--main) .killerCard__cta{
  width:max-content!important;
  min-height:0!important;
  padding:0 0 6px!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  background:transparent!important;
  color:var(--ler-accent)!important;
  letter-spacing:.02em!important;
}
.killerGrid .killerCard:not(.killerCard--main):hover .killerCard__cta,
.killerGrid .killerCard:not(.killerCard--main):focus-visible .killerCard__cta,
body#top .killerGrid .killerCard:not(.killerCard--main):hover .killerCard__cta,
body#top .killerGrid .killerCard:not(.killerCard--main):focus-visible .killerCard__cta{
  background:transparent!important;
  color:var(--ler-accent-hover)!important;
}
.killerCard--main .killerCard__cta,
body#top .killerCard--main .killerCard__cta{min-height:48px;border-radius:0}
.killerZone__lead{color:var(--ler-quiet)}

/* 6-4. .categoryAtlas（トップの14枚。連番付き英字ラベルが並んでいた）
       先頭を横組みの編集リードにする */
@media(min-width:981px){
  .categoryAtlas>.categoryAtlasCard:first-child{
    grid-column:span 12;
    flex-direction:row;
    align-items:stretch;
  }
  .categoryAtlas>.categoryAtlasCard:first-child .categoryAtlasCard__media{
    flex:0 0 46%;
    aspect-ratio:auto;
    min-height:clamp(280px,26vw,380px);
  }
  .categoryAtlas>.categoryAtlasCard:first-child .categoryAtlasCard__body{
    flex:1 1 auto;
    align-content:center;
    padding:var(--ler-s5);
  }
  .categoryAtlas>.categoryAtlasCard:first-child h3{font-size:clamp(26px,2.6vw,38px)}
  /* 14枚の内訳は span4 が6枚 + span6（--wide）が8枚。先頭だけ span12 に昇格させると
     2〜6枚目（span4 × 5）が 12列に収まらず、3行目に4トラック（373×250px）の
     空きマスが出る（design-qa round1 / 不合格2）。
     2・3枚目も span6 に昇格させると
       1行目 = 12 / 2行目 = 6+6 / 3行目 = 4+4+4 / 4〜7行目 = 6+6
     となり、全7行に空きトラックが無くなる。 */
  .categoryAtlas>.categoryAtlasCard:nth-child(2),
  .categoryAtlas>.categoryAtlasCard:nth-child(3){grid-column:span 6}
  .categoryAtlas>.categoryAtlasCard:nth-child(2) .categoryAtlasCard__media,
  .categoryAtlas>.categoryAtlasCard:nth-child(3) .categoryAtlasCard__media{aspect-ratio:16/9}
}

/* 6-5. .stayLengthPlanner__grid（25ページで毎回同じ3枚組）— 先頭に重みを与える */
@media(min-width:901px){
  .stayLengthPlanner__grid{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) minmax(0,1fr)}
  .journeyConnections__grid{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}
}

/* ---------------------------------------------------------------------------
   7. 動き（SPEC.md 2章。数値は完全に固定）
      JSが動かない場合、html に .ler-ready が付かないため出現要素は常に可視。
   ------------------------------------------------------------------------- */

/* 7-1. 出現：opacity 0→1 + translateY 16px→0 / 520ms / cubic-bezier(.22,.61,.36,1) */
html.ler-ready .ler-rv{
  opacity:0;
  transform:translateY(16px);
  transition:opacity 520ms cubic-bezier(.22,.61,.36,1),
             transform 520ms cubic-bezier(.22,.61,.36,1);
  transition-delay:var(--ler-d,0ms);          /* リストの stagger は 70ms 刻み（JSが設定） */
  will-change:opacity,transform;
}
html.ler-ready .ler-rv.ler-in{opacity:1;transform:translateY(0);will-change:auto}
/* round1 にあった .ler-rv--flat（translateY の一括除外）は削除した。
   根拠だった「重なり検出」は計測ツール側の誤検出で、SPEC 2章どおり
   全要素に translateY 16px を掛ける（design-qa round1 / 不合格4）。 */

/* 7-2. ファーストビュー見出し：行ごとに 90ms ずらして登場 */
html.ler-ready .ler-hline{
  display:block;
  opacity:0;
  transform:translateY(16px);
  transition:opacity 520ms cubic-bezier(.22,.61,.36,1),
             transform 520ms cubic-bezier(.22,.61,.36,1);
  transition-delay:var(--ler-d,0ms);
}
html.ler-ready .ler-hline.ler-in{opacity:1;transform:translateY(0)}

/* 7-3. ファーストビュー画像／背景：scale(1.04)→1 を 1.2s */
@keyframes lerHeroMedia{
  from{transform:scale(1.04)}
  to{transform:scale(1)}
}
html.ler-ready .ler-hero-media{
  animation:lerHeroMedia 1200ms cubic-bezier(.22,.61,.36,1) both;
  transform-origin:center center;
}
html.ler-ready .ler-hero-frame{overflow:hidden}

/* 7-4. ファーストビューCTA：最後に 200ms 遅れて表示 */
html.ler-ready .ler-hero-cta{transition-delay:calc(var(--ler-d,0ms) + 200ms)}

/* 7-5. ホバー画像：scale(1.03) を 600ms */
.card .ph img,
.killerCard__photo img,
/* v38:2810 の body#top .killerCard__photo img{transition:… .5s ease}（1,1,1）に
   詳細度で並ぶよう id 付きも書く（tech-qa round1 / NG-2）。 */
body#top .killerCard__photo img,
.readingCard__media img,
.categoryAtlasCard__media img,
.accessRecoveryCard img,
.accessPageNext img,
.feature .fMedia img,
.stayLengthCard figure img,
.cultureFieldSpot__media img,
.castleStayCard figure img,
.placeVisualCard img,
.ler-hoverimg img{
  transition:transform 600ms cubic-bezier(.22,.61,.36,1),filter 600ms cubic-bezier(.22,.61,.36,1);
}
.card .ph,.killerCard__photo,.readingCard__media,.categoryAtlasCard__media,
.accessRecoveryCard figure,.feature .fMedia,.stayLengthCard figure,
.cultureFieldSpot__media,.castleStayCard figure,.placeVisualCard,.ler-hoverimg{overflow:hidden}

.card:hover .ph img,
.card:focus-within .ph img,
.killerCard:hover .killerCard__photo img,
.killerCard:focus-visible .killerCard__photo img,
body#top .killerCard:hover .killerCard__photo img,
body#top .killerCard:focus-visible .killerCard__photo img,
.readingCard:hover .readingCard__media img,
.readingCard:focus-visible .readingCard__media img,
.categoryAtlasCard:hover .categoryAtlasCard__media img,
.categoryAtlasCard:focus-visible .categoryAtlasCard__media img,
.accessRecoveryCard:hover img,
.accessRecoveryCard:focus-visible img,
.stayLengthCard:hover figure img,
.placeVisualCard:hover img,
.ler-hoverimg:hover img{
  transform:scale(1.03)!important;
}

/* 7-6. ホバーカード：translateY(-3px) + 影を2段階深く */
.card,.killerCard,.readingCard,.categoryAtlasCard,.accessRecoveryCard,
.stayLengthCard,.cultureFieldSpot,.castleStayCard,.placeVisualCard,.journeyConnection{
  transition:transform 300ms cubic-bezier(.22,.61,.36,1),
             box-shadow 300ms cubic-bezier(.22,.61,.36,1),
             border-color 300ms cubic-bezier(.22,.61,.36,1),
             background-color 300ms cubic-bezier(.22,.61,.36,1);
  box-shadow:var(--shadow-soft,0 24px 70px rgba(29,26,21,.06));
}
/* 1px ヘアライン格子の中のカードは既定の影を持たない（にじむため） */
.categoryAtlasCard,.accessRecoveryCard,.readingCard,body#top .killerCard{box-shadow:none}
.card:hover,.card:focus-within,
.killerCard:hover,.killerCard:focus-visible,
body#top .killerCard:hover,body#top .killerCard:focus-visible,
.readingCard:hover,.readingCard:focus-visible,
.categoryAtlasCard:hover,.categoryAtlasCard:focus-visible,
.accessRecoveryCard:hover,.accessRecoveryCard:focus-visible,
.stayLengthCard:hover,
.placeVisualCard:hover{
  transform:translateY(-3px)!important;
  box-shadow:var(--shadow-card,0 32px 90px rgba(29,26,21,.11))!important;
  z-index:1;
}

/* 7-7. ホバーリンク下線：左から伸びる 300ms */
.ler-u{position:relative;display:inline;background-image:linear-gradient(currentColor,currentColor);
  background-repeat:no-repeat;background-position:0 100%;background-size:0 1px;
  transition:background-size 300ms cubic-bezier(.22,.61,.36,1)}
.ler-u:hover,.ler-u:focus-visible{background-size:100% 1px}

.killerZone__jump a,.accessRecoveryCard b,.genre-related a,.pageReturn a,
.readingCard__cta,.standardDetail,.cardAction--detail,.itemPage .genre-related a{
  position:relative;
}
.killerZone__jump a::after,.accessRecoveryCard b::after,.genre-related a::after,
.pageReturn a::after,.readingCard__cta::after,.standardDetail::after{
  content:"";
  position:absolute;
  left:0;right:0;bottom:-3px;
  height:1px;
  background:currentColor;
  transform:scaleX(0);
  transform-origin:left;
  transition:transform 300ms cubic-bezier(.22,.61,.36,1);
}
.killerZone__jump a:hover::after,.killerZone__jump a:focus-visible::after,
.accessRecoveryCard:hover b::after,.accessRecoveryCard:focus-visible b::after,
.genre-related a:hover::after,.genre-related a:focus-visible::after,
.pageReturn a:hover::after,.pageReturn a:focus-visible::after,
.readingCard:hover .readingCard__cta::after,.readingCard:focus-visible .readingCard__cta::after,
.card:hover .standardDetail::after,.card:focus-within .standardDetail::after{
  transform:scaleX(1);
}
/* ナビの下線も左から伸びる（既存は中央から width で伸びていた） */
.navband nav a::after,body#top .navband nav a::after{
  left:0!important;
  right:0!important;
  width:auto!important;
  transform:scaleX(0)!important;
  transform-origin:left!important;
  transition:transform 300ms cubic-bezier(.22,.61,.36,1)!important;
}
.navband nav a:hover::after,.navband nav a:focus-visible::after,
body#top .navband nav a:hover::after,body#top .navband nav a:focus-visible::after{
  width:auto!important;
  transform:scaleX(1)!important;
}

/* フォーカスリング（全ページ共通の可読性） */
a:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--ler-accent);
  outline-offset:3px;
}

/* ---------------------------------------------------------------------------
   8. 重要情報ページ（/about/ /disclosure/ /privacy-policy/ /status/ /404.html）
      出現アニメ無効。ホバーはフォーカスリングと下線のみ。
   ------------------------------------------------------------------------- */
html.ler-critical .ler-rv,
html.ler-critical .ler-hline{
  opacity:1!important;
  transform:none!important;
  transition:none!important;
  animation:none!important;
}
html.ler-critical .ler-hero-media{animation:none!important;transform:none!important}
html.ler-critical .card,
html.ler-critical .killerCard,
html.ler-critical .readingCard,
html.ler-critical .categoryAtlasCard,
html.ler-critical .accessRecoveryCard,
html.ler-critical .stayLengthCard{box-shadow:none}
html.ler-critical .card:hover,
html.ler-critical .card:focus-within,
html.ler-critical .killerCard:hover,
html.ler-critical .readingCard:hover,
html.ler-critical .categoryAtlasCard:hover,
html.ler-critical .accessRecoveryCard:hover,
html.ler-critical .stayLengthCard:hover{
  transform:none!important;
  box-shadow:none!important;
}
html.ler-critical img{transform:none!important;transition:none!important}
html.ler-critical .card:hover .ph img,
html.ler-critical .accessRecoveryCard:hover img{transform:none!important}
/* 可読性の改善だけは適用する */
html.ler-critical main p,html.ler-critical .article p{line-height:1.95}
html.ler-critical h1{font-size:clamp(30px,3.6vw,44px);line-height:1.35}

/* ---------------------------------------------------------------------------
   10. 既存の可読性バグの修正（before から存在していたもの）
       いずれも「色を1段深くする／明るくする」「スクリムの不透明度を上げる」
       「折り返しを許す」だけで、レイアウトも文言も変えない。
   ------------------------------------------------------------------------- */

/* 10-1. 濃色パネルの中で見出しが本文色（--ref-ink）のまま描かれ、
         実測で 1.00〜1.06:1（＝見えない）になっていた。 */
.revenueFocus h2,.revenueFocus h3,.revenueFocus h4,.revenueFocus .eyebrow,
.revenueFocus p,.revenueFocus li,
.festivalBooking h2,.festivalBooking h3,
.festivalAccess h2,.festivalAccess h3,
.festivalAfter h2,.festivalAfter h3,
.festivalEvent__intro h2,.festivalEvent__intro h3,
.stayLengthPlanner__foot h2,.stayLengthPlanner__foot h3,
.drinksCultureStory h2,.drinksCultureStory h3,
.sabaReviewLens h2,.sabaReviewLens h3,
.droneHero h1,.droneHero h2,.droneHero h3,
.droneOperation article h2,.droneOperation article h3,.droneOperation article h4,
.coffeeRoastLevels h3,.coffeeRoastLevels h4,
.coffeeHealthGrid h3,.coffeeHealthGrid h4,
.coffeeBrewSpec h3,.coffeeBrewSpec h4,
.drinksTechnique h2,.drinksTechnique h3,
.drinksSafety h2,.drinksSafety h3,
.drinksCategoryCard figure figcaption,
.sabaNutrition h2,.sabaNutrition h3,
.depthVideo h2,.depthVideo h3{
  /* main.wrap h2{color:var(--category-ink)}（0,1,2）が勝ってしまうため !important */
  color:var(--ler-on-dark)!important;
}
/* 濃色ヒーローの英字ラベル（--ref-muted が当たって 2.67:1 だった） */
.categoryHero .categoryHero__eyebrow{color:#E3C6A8!important}

/* 10-1c. 広告表示（.edisc）。about-disclosure と同じ扱いで読める濃さにする */
.edisc,p.edisc,.epick .edisc{
  color:var(--ler-quiet)!important;
  font-size:12px!important;
  line-height:1.85!important;
}

/* 10-1b. トップの選定メモ見出しだけ v38 が #9A6E51 を直書きしていて 3.63:1。
          （--accent2 を深くしてもここだけ効かない） */
body#top .feature .fBody .kicker{color:var(--ler-quiet)}
.festivalEvent__foot p,.festivalTickets>footer p{color:rgba(247,242,233,.86)}
.festivalEvent__foot a,.festivalTickets>footer small{color:rgba(247,242,233,.92)}
.festivalAfter .festivalKicker{color:#D9A87F}   /* 同じ濃色面で使われている既存色 */

/* 10-2. 祭りページはラベル色を #A16F48 でハードコードしている（3.4〜4.3:1）。
         トークンではないので個別に一段深くする。 */
.festivalKicker,
.festivalGuide__grid span,
.festivalRegionNav a span,.festivalRegionNav a i,
.festivalDirectory__groups a span,
.festivalFacts span,
.festivalSavings article span,
.festivalPast time,
.nebutaGallery span,.nebutaWatching span,
.festivalTicketGrid span,.festivalTicketDecision span,
.festivalTicketGrid small::before,
.festivalHotel small,
.photoGuide .eyebrow,.photoNumber,.droneSteps article::before{
  color:var(--ler-brass-deep);
}
/* 濃色ヒーローの上だけ元の明色に戻す */
.photoGuide .droneHero .eyebrow,.droneHero .photoNumber{color:#D4A77F}
/* 濃色面の上のラベルは元の明るい色に戻す（上の一括指定より後・より詳細） */
.festivalHero .festivalKicker,.festivalBooking .festivalKicker{color:#D5AE86}
.festivalAccess__body>.festivalKicker,
.festivalSeason span,.festivalRoutes article>span{color:#D8A578}

/* 10-3. 写真の上のキャプションはスクリムが .76〜.82 しかなく、
         白文字が地の淡色と 1.0〜1.4:1 と判定される。不透明度だけ上げる。 */
.festivalEvent__head figcaption,
.festivalAfter figcaption,
.nebutaGallery figcaption,
.adultDiscoveryCard__photo figcaption{background:rgba(10,20,15,.92)}

/* 10-4. 長い宿名が折り返せず 32件はみ出していた（既存の対策は狭幅の
         @media 内にしか無い）。全幅で折り返しを許す。 */
.festivalHotel,.festivalHotel>span,.festivalHotel strong,
.festivalHotel small,.festivalHotel em,
.festivalHotels a,.festivalHotels strong,
.festivalDirectory__groups a,.festivalDirectory__groups a>*,
.festivalDirectory__groups strong,.festivalDirectory__groups span,
.festivalDirectory__groups time{
  min-width:0;
  overflow-wrap:anywhere;
  word-break:normal;
}

/* 10-4b. /culture/festivals/ @390 で figure がトラック幅 126px / 112px に対して
          163〜236px になり隣の列に食い込む（before から存在する既存不具合。
          tech-qa round1 / PRE-1）。
          原因は festival-calendar-v7.css の狭幅ブロックにある
          `.festivalSectionIntro figure{aspect-ratio:4/5;height:100%}`。
          height:100% が行の高さ（＝隣の列の本文の高さ）に解決され、そこから
          aspect-ratio で幅が 163px = 203px × 4/5 と算出されるため、
          グリッドアイテムの `min-width:0` だけでは縮まない。max-width で頭を抑える。 */
.festivalSectionIntro>figure,
.festivalSources>figure,
.festivalSavings>.festivalSectionIntro>figure{min-width:0;max-width:100%}

/* 10-5. 淡いグレー1色で置かれていた補足（4.1:1）。本文寄りの濃さへ */
.droneChecked{color:var(--ler-quiet)}

/* 10-5b. v36 の @media(max-width:2000px) が main.wrap に padding-left:22px /
          padding-right:34px を !important で当てているため内容ボックスが 6px 左寄りになり、
          その中の全幅ヒーロー（width:100vw; margin-left:calc(50% - 50vw)）が
          左に 6px はみ出していた（before から。/library/ のみ）。左右を揃えて解消する。 */
main.wrap.libraryPage{padding-right:22px!important}

/* 10-6. travel-photography-v6.css は --pro-gold を :root ではなく .photoGuide に
         定義しているので、同じセレクタで一段深くする（3.7:1 → 6.5:1） */
.photoGuide{--pro-gold:#6E4F33}
.photoGuide{--pro-gold:color-mix(in srgb,#A8764E 60%,#1F2921)}

/* 10-7. /guides/travel-photography/ は 768px で 48px 横にはみ出していた（before から）。
         2カラムの解除が @media(max-width:760px) までしか無いため、860px まで広げる。 */
@media(max-width:860px){
  .photoJump{flex-wrap:wrap;max-width:100%;justify-content:flex-start}
  .photoJump>*{flex:0 0 auto;min-width:0;max-width:100%}
  .proBuy{display:flex;flex-wrap:wrap;gap:8px}
  .proBuy>a{flex:1 1 100%;min-width:0}
  .photoHero,.proProduct,.proVideo,.proDecisionIntro,.droneHero,
  .droneSummary,.dronePermitGrid,.droneSteps,.droneProductGrid,
  .droneOperation,.droneBooks,.droneSpecs,.droneBuyActions{
    grid-template-columns:minmax(0,1fr);
  }
  .droneBook{grid-template-columns:140px minmax(0,1fr)}
  .sceneProduct{grid-template-columns:110px minmax(0,1fr)}
  .photoGuide .cameraPairTable td:first-child{min-width:0!important}
}
/* .photoHero h1 は white-space:nowrap で、1280px でも 15px はみ出していた */
.photoHero h1{white-space:normal;overflow-wrap:break-word}

/* 10-8. 引用符や単位を含む長い注記が折り返せず数pxはみ出す（390px） */
.depthPage li,.depthPage p,.culturePage li,.festivalPage li,
.depthPage li *,.culturePage li *{
  overflow-wrap:anywhere!important;   /* v36:3973 が break-word を !important で当てている */
  word-break:normal!important;
  line-break:auto!important;
  min-width:0;
}

/* ---------------------------------------------------------------------------
   9. prefers-reduced-motion: reduce で全停止
      before の実測で70要素が動いていたため、既存要素も含めて止める。
   ------------------------------------------------------------------------- */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation:none!important;
    transition:none!important;
    scroll-behavior:auto!important;
  }
  html{scroll-behavior:auto!important}
  html.ler-ready .ler-rv,
  html.ler-ready .ler-hline{opacity:1!important;transform:none!important}
  html.ler-ready .ler-hero-media{transform:none!important}
  /* L776 の transition（詳細度 0,1,3 + !important）は * セレクタ（0,0,1）では負けるので、
     同じ詳細度でもう一度 none を当てて止める（tech-qa round1 / NG-1）。 */
  .navband nav a::after,body#top .navband nav a::after{
    transform:scaleX(0)!important;
    transition:none!important;
  }
  .navband nav a:hover::after,.navband nav a:focus-visible::after,
  body#top .navband nav a:hover::after,body#top .navband nav a:focus-visible::after{
    transform:scaleX(1)!important;
    transition:none!important;
  }
}

/* 印刷・JS無効時の保険 */
@media print{
  .ler-rv,.ler-hline{opacity:1!important;transform:none!important}
}

/* ===========================================================================
   11. design-qa round2（46/70 不合格）の指摘への対応
       ここから下は追記のみ。上の §1〜§10 も既存CSSも1行も書き換えていない。
       新色は足していない（既存トークン・既存CSSに実在する色・その透明度違いのみ）。
       SPEC 2章のモーション数値には一切触れていない。
       §9（prefers-reduced-motion）は上にあるが、§11 では transition を
       !important で書かないので `*{transition:none!important}` が必ず勝つ。
   ========================================================================= */

/* ---------------------------------------------------------------------------
   11-1. CTAの主従を「グループ単位の共通ルール」に広げる
         （不合格1 / 項目5＝5点の直接原因）

   round1 の主従ルールは `.cardActions` 直下だけを対象にしていたため、同じ形の
   CTA群が5系統残っていた（トップ `.accessRevenueStrip` / `.revenueFocusActions` /
   `.reservationIntent__actions` / `.a8BookingGrid` / `.festivalTools`、加えて
   `.castleReadingCard__actions`）。

   規則は round1 と同じ：
     「グループの主CTAは1つだけ。--rakuten があればそれ、無ければ先頭。
       残りは面をやめて線のリンクに落とす」
   これを2つの形で汎用化する。
     (a) クラスで楽天が識別できる `.cardAction` 群 … 親を問わず兄弟結合子で判定する
     (b) クラスの無い `<a>` の群        … 「CTAグループの親」を列挙して :not(:first-child)
   ------------------------------------------------------------------------- */

/* (a) .cardAction のグループ。round1 は `.cardActions>` に限定していたので
       `.revenueFocusActions`（/guides/pet-stay/ /guides/rental-car/）が漏れていた。
       親を問わない形にすると、どのコンテナに置かれても同じ主従になる。
       宣言は round1 の `.cardActions>` 版と同じにして、すでに合格している
       `.cardActions` 配下の見た目を変えない。 */
.cardAction~.cardAction:not(.cardAction--rakuten),
.cardAction--rakuten~.cardAction--rakuten,
.cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten){
  background:transparent!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  box-shadow:none!important;
  color:var(--ler-accent)!important;
  min-height:0!important;
  min-width:0!important;
  width:-moz-max-content!important;
  width:max-content!important;
  max-width:100%!important;
  padding:2px 0 5px!important;
}
.cardAction~.cardAction:not(.cardAction--rakuten):hover,
.cardAction~.cardAction:not(.cardAction--rakuten):focus-visible,
.cardAction--rakuten~.cardAction--rakuten:hover,
.cardAction--rakuten~.cardAction--rakuten:focus-visible,
.cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten):hover,
.cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten):focus-visible{
  background:transparent!important;
  transform:none!important;
  box-shadow:none!important;
  color:var(--ler-accent-hover)!important;
}

/* (b) クラスの無い <a> を並べるCTA群。ここに親を1つ足せば同じ主従が効く。 */
.accessRevenueStrip>nav>a:not(:first-child),
.revenueFocusActions>a:not(:first-child),
.reservationIntent__actions>a:not(:first-child),
.festivalTools>a:not(:first-child),
.castleReadingCard__actions>a:not(:first-child){
  background:transparent!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  box-shadow:none!important;
  min-height:0!important;
  min-width:0!important;
  width:-moz-fit-content!important;
  width:fit-content!important;
  max-width:100%!important;
  padding:2px 0 5px!important;
  justify-content:flex-start!important;
  justify-self:start;
  align-self:center;
  color:var(--ler-accent)!important;
  font-size:12px!important;
  letter-spacing:.02em!important;
}
.accessRevenueStrip>nav>a:not(:first-child):hover,
.accessRevenueStrip>nav>a:not(:first-child):focus-visible,
.revenueFocusActions>a:not(:first-child):hover,
.revenueFocusActions>a:not(:first-child):focus-visible,
.reservationIntent__actions>a:not(:first-child):hover,
.reservationIntent__actions>a:not(:first-child):focus-visible,
.festivalTools>a:not(:first-child):hover,
.festivalTools>a:not(:first-child):focus-visible,
.castleReadingCard__actions>a:not(:first-child):hover,
.castleReadingCard__actions>a:not(:first-child):focus-visible{
  background:transparent!important;
  transform:none!important;
  box-shadow:none!important;
  color:var(--ler-accent-hover)!important;
}

/* 濃色面（--category-ink #172019 / --ref-dark #223026）の上では線の色を反転させる。
   薄くするのではなく明るい既存トークン（--ler-on-dark = --ref-paper）に振るので
   コントラストは 4.5:1 を割らない。 */
.accessRevenueStrip>nav>a:not(:first-child),
.revenueFocus .cardAction~.cardAction:not(.cardAction--rakuten),
.revenueFocus .cardAction--rakuten~.cardAction--rakuten,
.revenueFocus .cardAction:not(.cardAction--rakuten):has(~.cardAction--rakuten),
.revenueFocusActions>a:not(:first-child),
.a8BookingHub .cardAction~.cardAction:not(.cardAction--rakuten),
.a8BookingHub .cardAction--rakuten~.cardAction--rakuten,
.travelRouteBridge .cardAction~.cardAction:not(.cardAction--rakuten),
.travelRouteBridge .cardAction--rakuten~.cardAction--rakuten{
  color:var(--ler-on-dark)!important;
}
.accessRevenueStrip>nav>a:not(:first-child):hover,
.accessRevenueStrip>nav>a:not(:first-child):focus-visible,
.revenueFocusActions>a:not(:first-child):hover,
.revenueFocusActions>a:not(:first-child):focus-visible,
.revenueFocus .cardAction~.cardAction:not(.cardAction--rakuten):hover,
.revenueFocus .cardAction--rakuten~.cardAction--rakuten:hover,
.a8BookingHub .cardAction~.cardAction:not(.cardAction--rakuten):hover,
.travelRouteBridge .cardAction~.cardAction:not(.cardAction--rakuten):hover{
  color:var(--ler-on-dark)!important;
}

/* トップ `.accessRevenueStrip` は4つとも「透明＋1px枠・高さ42px」で完全に同型だった。
   主CTA（先頭＝楽天トラベルの空室）だけを面にして主従を作る。
   濃緑 --ref-dark(#223026) の上に --ref-paper(#F7F4EE) の面。新色なし。 */
.accessRevenueStrip>nav>a:first-child{
  background:var(--ler-on-dark)!important;
  border:1px solid var(--ler-on-dark)!important;
  color:var(--ler-dark)!important;
  font-weight:500;
}
.accessRevenueStrip>nav>a:first-child:hover,
.accessRevenueStrip>nav>a:first-child:focus-visible{
  background:var(--ler-surface)!important;
  border-color:var(--ler-surface)!important;
  color:var(--ler-dark)!important;
}
.accessRevenueStrip>nav{align-items:center}

/* `.reservationIntent__actions` の副CTAは既存が justify-content:space-between で
   「↗」を右端に飛ばしていた。線のリンクでは文字のすぐ後ろに置く。 */
.reservationIntent__actions>a:not(:first-child)::after{margin-left:6px}

/* `.a8BookingGrid`（4枚の同型ゴールドタイル）は「ボタン」ではなくタイルなので、
   線に落とさず「先頭1枚を大きくし、塗りは先頭のみ・残り3枚は枠線（罫線）タイル」にする。
   4列 → 6列にして 先頭 span6 / 残り span2 × 3 とすると最終行に空きマスも出ない。 */
@media(min-width:981px){
  .a8BookingGrid{grid-template-columns:repeat(6,minmax(0,1fr))}
  .a8BookingGrid>.a8PartnerCard{grid-column:span 2;min-width:0}
  .a8BookingGrid>.a8PartnerCard:first-child{
    grid-column:1/-1;
    min-height:0;
    padding:var(--ler-s4);
  }
  .a8BookingGrid>.a8PartnerCard:first-child strong{font-size:clamp(22px,2.2vw,30px)}
  .a8BookingGrid>.a8PartnerCard:first-child p{max-width:46em}
}
/* 塗りは先頭だけ。残り3枚は濃色面の上の罫線タイルにする（枠線は既存の1pxの格子線）。 */
.a8BookingGrid>.a8PartnerCard:not(:first-child),
.a8BookingHub .a8BookingGrid>.a8PartnerCard:not(:first-child){
  background:transparent!important;
  color:var(--ler-on-dark)!important;
}
.a8BookingGrid>.a8PartnerCard:not(:first-child) span,
.a8BookingHub .a8BookingGrid>.a8PartnerCard:not(:first-child) span{color:#E5C8A1!important}
.a8BookingGrid>.a8PartnerCard:not(:first-child) p,
.a8BookingHub .a8BookingGrid>.a8PartnerCard:not(:first-child) p{color:rgba(255,253,248,.88)!important}
.a8BookingGrid>.a8PartnerCard:not(:first-child) em,
.a8BookingHub .a8BookingGrid>.a8PartnerCard:not(:first-child) em{
  color:var(--ler-on-dark)!important;
  border-top-color:rgba(255,253,248,.34)!important;
}
/* 既存の hover は background:#fff / color:var(--accent) なので、透明にしたタイルでは
   白地に明色文字＝読めなくなる。濃色面のまま気配だけ変える。 */
.a8BookingGrid>.a8PartnerCard:not(:first-child):hover,
.a8BookingGrid>.a8PartnerCard:not(:first-child):focus-visible,
.a8BookingHub .a8BookingGrid>.a8PartnerCard:not(:first-child):hover,
.a8BookingHub .a8BookingGrid>.a8PartnerCard:not(:first-child):focus-visible{
  background:rgba(255,253,248,.07)!important;
  color:var(--ler-on-dark)!important;
}

/* ---------------------------------------------------------------------------
   11-2. `.readerJumpNav__links` を「同型ボックスの羅列」から編集物の索引に
         （不合格8 / 項目1・6。300ページ超のファーストビュー）

   `reader-navigation-v1.js` が生成する DOM も `reader-navigation-v1.css` も
   触らず、刷新CSSの追記だけで上書きする。
   枠を外して罫線区切りの索引にし、連番（ノンブル）を振り、幅に応じて 1〜3列に組む。
   ------------------------------------------------------------------------- */
.readerJumpNav{padding-top:var(--ler-s3);padding-bottom:var(--ler-s2)}
.readerJumpNav__label{margin:0 0 var(--ler-s2)!important}
.readerJumpNav__links{
  display:grid!important;
  grid-template-columns:minmax(0,1fr)!important;
  gap:0!important;
  -moz-column-gap:var(--ler-s5)!important;
       column-gap:var(--ler-s5)!important;
  counter-reset:lerJump;
}
@media(min-width:600px){
  .readerJumpNav__links{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@media(min-width:1000px){
  .readerJumpNav__links{grid-template-columns:repeat(3,minmax(0,1fr))!important}
}
.readerJumpNav__links>a{
  counter-increment:lerJump;
  display:flex!important;
  align-items:baseline!important;
  gap:12px;
  min-width:0!important;
  max-width:100%!important;
  min-height:0!important;
  padding:9px 0!important;
  border:0!important;
  border-bottom:1px solid var(--ler-line)!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--ler-ink)!important;
  font-family:var(--sans,"Zen Kaku Gothic New",sans-serif);
  font-size:13px!important;
  line-height:1.7!important;
  letter-spacing:.01em;
  overflow-wrap:anywhere;
  word-break:normal!important;
  line-break:strict!important;
}
/* 索引のノンブル。テキストは足していない（CSSのカウンタ） */
.readerJumpNav__links>a::before{
  content:counter(lerJump,decimal-leading-zero);
  flex:0 0 auto;
  font-family:var(--label,"Jost",sans-serif);
  font-size:10px;
  letter-spacing:.08em;
  color:var(--ler-quiet);
}
/* 既存の「↓」は残し、行末へ寄せる */
.readerJumpNav__links>a::after{
  margin-left:auto!important;
  padding-left:12px;
  color:var(--ler-quiet)!important;
  font-size:11px;
}
.readerJumpNav__links>a:hover,
.readerJumpNav__links>a:focus-visible{
  color:var(--ler-accent)!important;
  border-bottom-color:var(--ler-accent)!important;
}
.readerJumpNav__links>a:hover::before,
.readerJumpNav__links>a:focus-visible::before,
.readerJumpNav__links>a:hover::after,
.readerJumpNav__links>a:focus-visible::after{color:var(--ler-accent)!important}

/* ---------------------------------------------------------------------------
   11-3. `.compareCard` 2・3枚目のリンク下線がカード枠を越える回帰
         （不合格4 / 項目4。279ページ × 2 = 558箇所）

   §6-2 の `width:max-content` が、@media(min-width:821px) で 1fr に狭めた
   2・3列目より広くなっていた（1280 で +5px、1024 で +27px）。
   `fit-content` + `max-width:100%` で内容ボックスに収める。
   ------------------------------------------------------------------------- */
.compareCard:not(:first-child) .compareButton,
.itemPage .compareCard:not(:first-child) .compareButton{
  box-sizing:border-box!important;
  width:-moz-fit-content!important;
  width:fit-content!important;
  min-width:0!important;
  max-width:100%!important;
  align-self:flex-start!important;
  white-space:normal!important;
  overflow-wrap:anywhere!important;
  word-break:normal!important;
  line-break:strict!important;
  font-size:clamp(11px,.9vw,12px)!important;
  line-height:1.7!important;
}

/* ---------------------------------------------------------------------------
   11-4. `/library/` の12枚完全同型グリッド（不合格5 / 項目1・4・6）

   §6-1 で `/library/` だけ auto-fit に戻して除外していた。除外をやめ、
   他9ページと同じ「先頭カードを横組みの編集リードにする」を当てる。
   `.card` の中身が `.ph/.cb` ではなく `.fMedia + テキスト` の平坦な並びなので、
   先頭カードだけ2カラムの grid にして行を明示的に置く（自動配置に頼らない）。
   12枚 = 先頭 span12 / 2〜3枚目 span6 / 4〜12枚目 span4 で、
   1 + 2 + 3 + 3 + 3 の5行になり空きマスが出ない。
   ------------------------------------------------------------------------- */
@media(min-width:821px){
  .libraryPage .libraryMore .grid{grid-template-columns:repeat(12,minmax(0,1fr))}
  .libraryPage .libraryMore .grid>.card{grid-column:span 4;min-width:0}
  .libraryPage .libraryMore .grid>.card:nth-child(2),
  .libraryPage .libraryMore .grid>.card:nth-child(3){grid-column:span 6}
  .libraryPage .libraryMore .grid>.card:first-child{
    grid-column:1/-1;
    display:grid;
    grid-template-columns:minmax(0,28%) minmax(0,1fr);
    -moz-column-gap:var(--ler-s5);
         column-gap:var(--ler-s5);
    align-content:start;
    border-right:0;
    padding:var(--ler-s4) 0 var(--ler-s5);
  }
  .libraryPage .libraryMore .grid>.card:first-child>.fMedia{
    grid-column:1;
    grid-row:1/span 4;
    height:clamp(300px,26vw,380px);
    margin:0;
  }
  .libraryPage .libraryMore .grid>.card:first-child>.caption{grid-column:2;grid-row:1;margin:0}
  .libraryPage .libraryMore .grid>.card:first-child>h3{
    grid-column:2;grid-row:2;
    margin-top:10px;
    font-size:clamp(24px,2.4vw,34px);
    line-height:1.5;
  }
  .libraryPage .libraryMore .grid>.card:first-child>p:not(.caption){
    grid-column:2;grid-row:3;
    max-width:36em;
    font-size:15px;
    line-height:1.95;
  }
  .libraryPage .libraryMore .grid>.card:first-child>.actions{
    grid-column:2;grid-row:4;
    margin-top:var(--ler-s3);
    padding-top:0;
    align-self:start;
  }
  /* 2・3枚目は span6。書影の枠だけ横長に合わせる */
  .libraryPage .libraryMore .grid>.card:nth-child(2)>.fMedia,
  .libraryPage .libraryMore .grid>.card:nth-child(3)>.fMedia{height:290px}
  .libraryPage .libraryMore .grid>.card:nth-child(2)>h3,
  .libraryPage .libraryMore .grid>.card:nth-child(3)>h3{font-size:24px}
}

/* ---------------------------------------------------------------------------
   11-5. `.readingGrid` / `.accessRecoveryGrid` 最終行の空きマス
         （不合格6 / 項目3・4。§6-4 で .categoryAtlas を直したのと同じ欠陥）

   .readingGrid  … 2列 / 9枚（1・6枚目が span2）＝ 11トラック → 最終行に 559×270px の空き。
                    最後の1枚を全幅（span2）に上げて 12トラックにする。
   .accessRecoveryGrid … 4列 / 5枚（1枚目が span2）＝ 6トラック → 最終行に 640×385px の空き。
                    4・5枚目を span2（--large と同じ横組み）に上げて 8トラックにする。
   ------------------------------------------------------------------------- */
@media(min-width:761px){
  .readingGrid>.readingCard:last-child{
    grid-column:1/-1;
    grid-template-columns:minmax(0,43%) minmax(0,1fr);
    min-height:268px;
  }
}
@media(min-width:981px){
  .accessRecoveryGrid>.accessRecoveryCard:nth-child(4),
  .accessRecoveryGrid>.accessRecoveryCard:nth-child(5){
    grid-column:span 2;
    grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
    grid-template-rows:auto;
  }
}

/* ---------------------------------------------------------------------------
   11-6. リードが本文（15px）より小さい／同サイズ（不合格2 / 項目2）

   round1 の §1 は詳細度で負けていた2箇所を取りこぼしていた。
     `body#top .heroTitle .lead`            （1,1,1 / 768・390 で 13px）
     `.libraryPage .libraryIntro>.secLead`  （0,3,0 / 15px）
   同じ詳細度で書き足す（@media は詳細度に影響しないので後読みのこちらが勝つ）。
   `/library/` は第2段を全数見直したので `.categoryHero__lead`（14px/13px）も揃える。
   ------------------------------------------------------------------------- */
body#top .heroTitle .lead,
.libraryPage .libraryIntro>.secLead,
.categoryHero.categoryHero .categoryHero__lead{
  font-size:clamp(16.5px,.6vw + 14.5px,18px);
  line-height:1.9;
}

/* ---------------------------------------------------------------------------
   11-7. トップ `.accessRecovery__head` の左右パディングが0（不合格3 / 項目3）

   1280 で L0 / R1280、390 では本文が画面の両端に接触していた。
   同じセクション内の `.accessRevenueStrip` は 26px でスケールが噛み合っていないので、
   両方を余白スケールの同じ段（--ler-s3 = 24px）から引く。
   ------------------------------------------------------------------------- */
.accessRecovery__head,
.accessRevenueStrip{
  box-sizing:border-box;
  padding-left:var(--ler-s3)!important;
  padding-right:var(--ler-s3)!important;
}
.accessPageNext{box-sizing:border-box}

/* ---------------------------------------------------------------------------
   11-8. 行頭禁則（不合格7 / 項目2・6）

   既存CSSの語中改行指定（break-all 系）や line-break:anywhere により、行頭に
   「、」「。」「ー」などが来ていた。折り返し自体は `overflow-wrap:anywhere` が
   担保するので、横オーバーフローは増やさずに禁則だけ戻す。
   既存側は `!important` かつ最大 (0,1,1) の詳細度なので、同じ形の
   セレクタを後から同じ詳細度で並べて上書きする（`main.wrap 〜` は (0,1,2) の保険）。
   `.navband nav a`（§4 で line-break:auto 済み）はここには含めない。
   ------------------------------------------------------------------------- */
h1,h2,h3,h4,h5,p,li,dd,dt,figcaption,blockquote,td,th,
.lead,.secLead,.judge,.editorNote,.product-card__desc,.compareTitle,
.storeNote,.cardStoreNote,.prnote,.about-disclosure,.edisc,
.fBody p,.card .judge,.purchaseSupport p,.buyerGuide p,
.purchaseSupport li,.buyerGuide li,
.staySummary h2,.staySummary p,
.revenueFocus h2,.revenueFocus h3,.revenueFocus p,
.priceCompare h2,.priceCompare p,
.adultTravel p,.adultTravel .secLead,
.revenuePage p,.revenuePage .secLead,
.adultTravelNav a,
main.wrap p,main.wrap li,main.wrap dd,main.wrap h1,main.wrap h2,main.wrap h3,main.wrap h4,
main.article p,main.article li,main.article dd,main.article h2,main.article h3{
  word-break:normal!important;
  line-break:strict!important;
  overflow-wrap:anywhere!important;
}

/* ---------------------------------------------------------------------------
   11-9. 768px でヒーロー主CTAが幅724pxの全幅バーになる（不合格9 / 項目7）

   v38:1966 の `@media(max-width:820px){.heroAction{width:100%}}` が効いていて、
   文字117pxに対し枠724pxの帯になっていた。全幅化は 600px 未満に限定する。
   （390px の 346px 全幅ボタンはそのまま）
   ------------------------------------------------------------------------- */
@media(min-width:600px){
  .heroActions .heroAction--primary,
  body#top .heroTitle .heroAction--primary{
    width:-moz-max-content!important;
    width:max-content!important;
    min-width:220px!important;
    max-width:100%!important;
    justify-self:start;
  }
}

/* ===========================================================================
   12. design-qa round3（50/70 不合格）の指摘への対応 — round4
       ここから下も追記のみ。§0〜§11 も既存CSSも1行も書き換えていない。
       新色は足していない。SPEC 2章のモーション数値には触れていない。
       §9（prefers-reduced-motion）と §12 の関係は §11 と同じで、
       §12 では transition / animation を !important で書かない。

       round3 までは「検収レポートに名前が挙がった親」だけを直したため、同じ症状の
       別の親が丸ごと残った。round4 は **334ページ × 6幅 = 2004通りを Playwright で
       実際に開いて全数走査**し（evidence/life-edit/round4/scan-all.mjs →
       cta-groups-all.json）、同型CTAグループの親を **26パターン**まで確定させてから
       書いている。26パターンの内訳と、カードタイルとして対象外にした5つの根拠は
       evidence/life-edit/round4/cta-parents-before.md と logs/fix-life-edit-round3.md。
   ========================================================================= */

/* ---------------------------------------------------------------------------
   12-1. 同型CTAの並びを全数で解消する（不合格1 / 項目5＝5点の直接原因）

   主従の規則は round1 で確立したものを踏襲する。
     「グループの主CTAは1つだけ。楽天リンクがあればそれ、無ければ先頭。
       残りは面をやめて線のリンクに落とす」
   round2 まではクラス（.cardAction--rakuten）でしか楽天を識別できなかったので
   「先頭＝主」しか書けず、.festivalMarket>nav のように **楽天が2番目**にある群で
   主従が逆になっていた。round4 は href で識別する（HTMLは触らない）。

     (1) 先頭以外で楽天でないもの                        → 線
     (2) 群に楽天があるのに先頭が楽天でない場合の先頭      → 線
     (3) 楽天が2つ以上ある群の2つ目以降                  → 線
   → どの群でも「面を持つ <a>」がちょうど1つになる。

   .card / .killerCard など、round1 で主従を付け終えている .cardAction 系
   （§11-1(a)）には触れていない。カード内部の主従は逆転させない。
   ------------------------------------------------------------------------- */

/* (1) 先頭以外で楽天でないもの */
.stayLengthPlanner__foot>nav>a:not(:first-child):not([href*="rakuten"]),
.cultureButtons>a:not(:first-child):not([href*="rakuten"]),
.festivalMarket>nav>a:not(:first-child):not([href*="rakuten"]),
.nebutaSpotlight>nav>a:not(:first-child):not([href*="rakuten"]),
.festivalBooking>nav>a:not(:first-child):not([href*="rakuten"]),
.accessPageNext nav>a:not(:first-child):not([href*="rakuten"]),
.reservationHero__nav>a:not(:first-child):not([href*="rakuten"]),
.depthActions>a:not(:first-child):not([href*="rakuten"]),
.ceramicActions>a:not(:first-child):not([href*="rakuten"]),
.proBuy>a:not(:first-child):not([href*="rakuten"]),
.droneBuyActions>a:not(:first-child):not([href*="rakuten"]),
.crossGuideLinks>a:not(:first-child):not([href*="rakuten"]),
.shippingLinks>a:not(:first-child):not([href*="rakuten"]),
/* (2) 群に楽天があるのに先頭が楽天でない場合の先頭 */
.stayLengthPlanner__foot>nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.cultureButtons:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.festivalMarket>nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.nebutaSpotlight>nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.festivalBooking>nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.accessPageNext nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.depthActions:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.ceramicActions:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.proBuy:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.droneBuyActions:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.crossGuideLinks:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.shippingLinks:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
/* (3) 楽天が2つ以上ある群の2つ目以降（/items/* の .fBody = 279ページがこれ） */
.fBody>a[href*="rakuten"]~a[href*="rakuten"],
.stayLengthPlanner__foot>nav>a[href*="rakuten"]~a[href*="rakuten"],
.cultureButtons>a[href*="rakuten"]~a[href*="rakuten"],
.festivalMarket>nav>a[href*="rakuten"]~a[href*="rakuten"],
.nebutaSpotlight>nav>a[href*="rakuten"]~a[href*="rakuten"],
.festivalBooking>nav>a[href*="rakuten"]~a[href*="rakuten"],
.accessPageNext nav>a[href*="rakuten"]~a[href*="rakuten"],
.depthActions>a[href*="rakuten"]~a[href*="rakuten"],
.ceramicActions>a[href*="rakuten"]~a[href*="rakuten"],
.proBuy>a[href*="rakuten"]~a[href*="rakuten"],
.droneBuyActions>a[href*="rakuten"]~a[href*="rakuten"],
.crossGuideLinks>a[href*="rakuten"]~a[href*="rakuten"],
.shippingLinks>a[href*="rakuten"]~a[href*="rakuten"],
/* 索引・出典リンクの並び（主従を作る対象ではないので全部を線に落とす。
   §11-2 で .readerJumpNav__links に行ったのと同じ扱い） */
.photoJump>a,
.droneSourceLinks>a,
main.article>p>a.pick{
  background:transparent!important;
  background-image:none!important;
  border:0!important;
  border-bottom:1px solid currentColor!important;
  border-radius:0!important;
  box-shadow:none!important;
  min-height:0!important;
  min-width:0!important;
  height:auto!important;
  width:-moz-fit-content!important;
  width:fit-content!important;
  max-width:100%!important;
  padding:2px 0 5px!important;
  margin-right:var(--ler-s3);
  justify-content:flex-start!important;
  justify-self:start;
  align-self:center;
  text-align:left!important;
  color:var(--ler-accent)!important;
}

/* 濃色面の上に落ちる群は線と文字を明るい側へ反転させる（薄くはしない）。
   実測した地色: .stayLengthPlanner__foot = rgb(23,24,19) /
   .reservationHero = rgb(24,35,30) / .festivalBooking>nav = rgb(82,97,88) /
   .photoJump = rgb(24,37,31)。いずれも --ler-on-dark(#F7F4EE) で 5:1 以上。 */
.stayLengthPlanner__foot>nav>a:not(:first-child):not([href*="rakuten"]),
.stayLengthPlanner__foot>nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.stayLengthPlanner__foot>nav>a[href*="rakuten"]~a[href*="rakuten"],
.reservationHero__nav>a:not(:first-child):not([href*="rakuten"]),
.festivalBooking>nav>a:not(:first-child):not([href*="rakuten"]),
.festivalBooking>nav:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.festivalBooking>nav>a[href*="rakuten"]~a[href*="rakuten"],
.photoJump>a{
  color:var(--ler-on-dark)!important;
}

/* ホバー／フォーカス（面には戻さない。§11-1 と同じ形） */
.stayLengthPlanner__foot>nav>a:not(:first-child):hover,
.stayLengthPlanner__foot>nav>a:not(:first-child):focus-visible,
.cultureButtons>a:not(:first-child):hover,
.cultureButtons>a:not(:first-child):focus-visible,
.festivalMarket>nav>a:not([href*="rakuten"]):hover,
.festivalMarket>nav>a:not([href*="rakuten"]):focus-visible,
.nebutaSpotlight>nav>a:not(:first-child):hover,
.nebutaSpotlight>nav>a:not(:first-child):focus-visible,
.festivalBooking>nav>a:not(:first-child):hover,
.festivalBooking>nav>a:not(:first-child):focus-visible,
.accessPageNext nav>a:not(:first-child):hover,
.accessPageNext nav>a:not(:first-child):focus-visible,
.reservationHero__nav>a:not(:first-child):hover,
.reservationHero__nav>a:not(:first-child):focus-visible,
.depthActions>a:not(:first-child):hover,
.depthActions>a:not(:first-child):focus-visible,
.ceramicActions>a:not(:first-child):hover,
.ceramicActions>a:not(:first-child):focus-visible,
.proBuy>a:not(:first-child):hover,
.proBuy>a:not(:first-child):focus-visible,
.droneBuyActions>a:not(:first-child):hover,
.droneBuyActions>a:not(:first-child):focus-visible,
.crossGuideLinks>a:not(:first-child):hover,
.crossGuideLinks>a:not(:first-child):focus-visible,
.shippingLinks>a:not(:first-child):hover,
.shippingLinks>a:not(:first-child):focus-visible,
.fBody>a[href*="rakuten"]~a[href*="rakuten"]:hover,
.fBody>a[href*="rakuten"]~a[href*="rakuten"]:focus-visible,
.photoJump>a:hover,.photoJump>a:focus-visible,
.droneSourceLinks>a:hover,.droneSourceLinks>a:focus-visible,
main.article>p>a.pick:hover,main.article>p>a.pick:focus-visible{
  background:transparent!important;
  transform:none!important;
  box-shadow:none!important;
}

/* .reservationHero__nav（/guides/travel-reservation/ のファーストビュー）
   3枚とも rgb(255,253,248) の白面で隙間なく連結していた。2・3枚目を線に落とし、
   先頭だけを面として残す。
   検収案は「先頭を --ler-accent で塗る」だったが、ヒーローの地が rgb(24,35,30) で、
   --ler-accent(#26382D) との比は **1.30:1**。塗っても地に沈んでボタンが消えるため、
   既存の白面（--ler-surface 相当）を主CTAとして残す方を採った。 */
.reservationHero__nav>a:first-child{
  font-weight:500;
  letter-spacing:.04em;
}
.reservationHero__nav{align-items:center}

/* 罫線のグリッドで並んでいた群は、線に落とすと枠だけが残るので枠側も消す */
.festivalBooking>nav>a:not(:first-child),
.festivalMarket>nav>a:not([href*="rakuten"]),
.nebutaSpotlight>nav>a:not(:first-child){
  border-bottom:1px solid currentColor!important;
}
/* .festivalBooking>nav は 2×2 の格子。線に落とした3枚が格子の中央に浮かないよう左上に寄せる */
.festivalBooking>nav>a:not(:first-child){align-self:start}

/* ---------------------------------------------------------------------------
   12-2. 第2段リードが本文（15px）以下（不合格2 / 項目2）

   334ページ × 6幅を全数走査して `[class*="lead" i]` を 3,978件抜き出し、
   body+1.5px 未満だったものを9クラスに集約した（agg.mjs --mode lead）。
   そのうち **本物の第2段リード7クラス**をここで揃える。
   残る2クラス（/items/* の P.secLead 11px = 「最終更新日 … / 価格確認日 …」の
   日付行、P.compareLead 12px = 「価格・在庫・送料は変動します…」の注記）は
   NOTES §4 の第3段（補足）そのものなので**大きくしない**。理由は
   logs/fix-life-edit-round3.md に記録した。
   ------------------------------------------------------------------------- */
.reservationHero__lead,
.excursionHero__lead,
.festivalGuide__lead,
.festivalTickets__lead,
.proLead,
.cameraPairLead,
.stayRegionLead{
  font-size:clamp(16.5px,.6vw + 14.5px,18px)!important;
  line-height:1.9;
}

/* ---------------------------------------------------------------------------
   12-3. 行頭禁則（不合格3 / 項目2・6）

   原因は round2 に自分で書いた §11-8 の `overflow-wrap:anywhere!important`。
   `anywhere` は「どこでも改行可」なので、同じ宣言ブロックの
   `line-break:strict` / `word-break:normal` を Chromium が無効化する。
   `break-word` は「単語が入りきらないときだけ単語内で折る」ので、長い英数字の
   横オーバーフローは防いだまま禁則が戻る。
   §11-8 は書き換えず、同じセレクタ・同じ詳細度で後ろから上書きする。
   ------------------------------------------------------------------------- */
h1,h2,h3,h4,h5,p,li,dd,dt,figcaption,blockquote,td,th,
.lead,.secLead,.judge,.editorNote,.product-card__desc,.compareTitle,
.storeNote,.cardStoreNote,.prnote,.about-disclosure,.edisc,
.fBody p,.card .judge,.purchaseSupport p,.buyerGuide p,
.purchaseSupport li,.buyerGuide li,
.staySummary h2,.staySummary p,
.revenueFocus h2,.revenueFocus h3,.revenueFocus p,
.priceCompare h2,.priceCompare p,
.adultTravel p,.adultTravel .secLead,
.revenuePage p,.revenuePage .secLead,
.adultTravelNav a,
main.wrap p,main.wrap li,main.wrap dd,main.wrap h1,main.wrap h2,main.wrap h3,main.wrap h4,
main.article p,main.article li,main.article dd,main.article h2,main.article h3{
  overflow-wrap:break-word!important;
}

/* §10-8 は 390px の数pxはみ出し対策で `line-break:auto` を当てていた。
   これも小書き仮名（っ・ッ・ョ）の行頭を許してしまうので strict に戻す。
   折り返しは break-word と min-width:0 が担保する。 */
.depthPage li,.depthPage p,.culturePage li,.festivalPage li,
.depthPage li *,.culturePage li *{
  line-break:strict!important;
  word-break:normal!important;
  overflow-wrap:break-word!important;
}

/* ---------------------------------------------------------------------------
   12-4. ヒーロー演出の適用漏れ（不合格4 / 項目7）

   JS 側でクラス名の列挙に頼っていたため 11ページで .ler-hero-media が、
   47ページで .ler-hero-cta が付いていなかった。JS を実測ベースに直した。
   画像要素を持たず background-image でヒーローを敷いているページ
   （/guides/adult-excursion/ の .excursionHero__image）は、要素自体を scale すると
   中の文字まで動くので、空の ::before に同じ 1.2s / scale(1.04→1) を当てる。
   数値は §7-3 の @keyframes lerHeroMedia と同一（SPEC 2章）。
   ------------------------------------------------------------------------- */
html.ler-ready .ler-hero-bg{position:relative;overflow:hidden}
html.ler-ready .ler-hero-bg::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:0;
  background-image:inherit;
  background-size:inherit;
  background-position:inherit;
  background-repeat:inherit;
  animation:lerHeroMedia 1200ms cubic-bezier(.22,.61,.36,1) both;
  transform-origin:center center;
  pointer-events:none;
}
html.ler-ready .ler-hero-bg>*{position:relative;z-index:1}
html.ler-critical .ler-hero-bg::before{animation:none!important;transform:none!important}

/* ---------------------------------------------------------------------------
   12-5. フォールド内の空白帯と .accessRecovery__head の空き面（不合格5 / 項目1・3）
   ------------------------------------------------------------------------- */

/* (a) /guides/pet-stay/ のフォールド。主CTA下端 y=540 → .readerJumpNav 上端 y=680 の
       140px の空白帯。既存 `main.wrap>.section{padding:96px 0}` の 96px は
       余白スケールに無い値なので、この section だけ --ler-s4（36px）に載せ替える。
       .searchIntentBoost は /guides/pet-stay/ ほか4ページのみ。 */
main.wrap>.section.searchIntentBoost{padding-bottom:var(--ler-s4)}

/* (b) トップの .accessRecovery__head。329px と 869px の2カラムに
       ラベル（左・行1）／h2（右・行1）／リード（左・行2）が3点で散り、
       右下に 869×137px の空白が残っていた。
       右カラムに「見出し → リード」を積み、左カラムはラベルの柱にする。 */
@media(min-width:821px){
  .accessRecovery__head{align-items:start}
  .accessRecovery__head>.eyebrow{grid-column:1;grid-row:1}
  .accessRecovery__head>h2{grid-column:2;grid-row:1}
  .accessRecovery__head>p:not(.eyebrow){
    grid-column:2;
    grid-row:2;
    margin-top:calc(var(--ler-s2) * -1);
    max-width:62ch;
  }
}

/* ---------------------------------------------------------------------------
   12-6. 刷新が新たに作った装飾線 — .vlabel の724px下線（不合格6 / 項目6）

   editorial-guide-v29〜v36:209 の `@media(max-width:820px){.vlabel{…
   border-bottom:1px solid var(--line)}}` が、縦組みラベルを横倒しにしたときの
   border-right の付け替えのまま幅を制限していないため、6文字のラベルの下に
   幅724pxの罫線が引かれていた。文字幅に収める。
   ------------------------------------------------------------------------- */
@media(max-width:820px){
  .vlabel,
  .heroGrid>.vlabel,
  body#top .heroTitle .vlabel{
    width:-moz-max-content!important;
    width:max-content!important;
    max-width:100%!important;
  }
}

/* ---------------------------------------------------------------------------
   12-7. /culture/festivals/ の連番疑似要素のコントラスト（tech-qa round3 PRE-3）

   festival-calendar-v1〜v7.css:20-21 が #a16f48 を直書きしていて、
   .festivalHighlights li::before = 3.51、.festivalPlan li::before = 4.30。
   round1 §10-2 の取りこぼし2セレクタ。--ler-brass-deep は §0 で定義済みなので
   新色は増えない。
   ------------------------------------------------------------------------- */
.festivalHighlights li::before,
.festivalPlan li::before{
  color:var(--ler-brass-deep)!important;
}

/* ---------------------------------------------------------------------------
   12-8. 行頭禁則が消えない本当の原因 —— 中間幅で段組みが潰れている（不合格3のつづき）

   §12-3 で `overflow-wrap` を break-word に戻しても、castle 21ページと
   /culture/festivals/ では違反が残った。実測すると原因は改行規則ではなく
   **列そのものが 0〜70px に潰れていること**だった（334ページ全数走査 →
   evidence/life-edit/round4/kinsoku-*.json）。

     /culture/castles/*  @768/821  `.cultureFieldSpot` の <dd> 列 = **0px**
                         @900      同 **21px**
       （`.cultureFieldGuide__spots` が2列のまま。既存の1列化は 820px 以下だけ）
       この結果 `.cultureFieldGuide__spots` の高さは 1280px で 2,158px なのに
       768px では **10,590px** になっていた。
     /culture/festivals/ @821 `.festivalHighlights ol` の <li> = **70px**
                         @900 96px / @1024 137px
       （既存の1列化が `@media(max-width:820px)` にしか無い）

   どちらも刷新前から同値（round3版CSSに差し替えたA/B比較で確認）。
   1列化の境目を、中身が読める幅まで引き上げる。
   ------------------------------------------------------------------------- */
@media(max-width:1023px){
  .cultureFieldGuide__spots{grid-template-columns:minmax(0,1fr)!important}
  .cultureFieldSpot{border-left:0!important}
}
@media(max-width:1024px){
  .festivalHighlights{grid-template-columns:minmax(0,1fr)!important}
  .festivalHighlights ol{grid-template-columns:minmax(0,1fr)!important}
}

/* ---------------------------------------------------------------------------
   12-9. 濃色カードの中で線に落とした副CTAの色を反転する

   334ページ × 2幅で §12-1 が触れた <a> を 4,014件走査したところ、
   /culture/craft-drinks/ の `.drinksCultureStory`（地 rgb(27,45,35)）の中だけ
   `--ler-accent`（rgb(38,56,45)）が地に沈んで **1.17:1** になっていた。
   薄くするのではなく明るい既存トークンへ振る（他の濃色面と同じ扱い）。
   ------------------------------------------------------------------------- */
.drinksCultureStory .depthActions>a:not(:first-child):not([href*="rakuten"]),
.drinksCultureStory .depthActions:has(>a[href*="rakuten"])>a:first-child:not([href*="rakuten"]),
.drinksCultureStory .depthActions>a[href*="rakuten"]~a[href*="rakuten"]{
  color:var(--ler-on-dark)!important;
}

/* ---------------------------------------------------------------------------
   12-10. `.festivalBooking>nav` の格子内の位置合わせ（見た目の詰め）

   2×2 の格子で、先頭だけが面（250×118px）、残り3枚が線のリンクになる。
   線に落とした3枚がセルの左端に貼り付いていたので、面の内側余白と同じ段
   （--ler-s3 = 24px）で内側に寄せ、セルの中央に置く。
   ------------------------------------------------------------------------- */
.festivalBooking>nav>a:not(:first-child){
  align-self:center!important;
  margin-left:var(--ler-s3)!important;
  margin-right:var(--ler-s3)!important;
}

/* ---------------------------------------------------------------------------
   12-11. 線に落としたCTAが狭いセルで折り返せずに切れる（自己検証で検出した回帰）

   `ASIDE.cultureFieldGuide__booking > .cultureButtons`（1024/900/821/768px で 260px、
   flex:1 1 0% の2枚組）では、既存CSSが `word-break:keep-all` を当てているため、
   面をやめて `width:fit-content` にした2枚目が **cw=94 / sw=121** で切れていた
   （capture.mjs のクリッピング判定に castle 21ページ × 4幅 × 2エンジンで出る）。
   §11-8 / §12-3 と同じ「word-break:normal + line-break:strict + break-word」を
   CTA群にも当て、狭いセルでは折り返させる。
   ------------------------------------------------------------------------- */
.stayLengthPlanner__foot>nav>a,
.cultureButtons>a,
.festivalMarket>nav>a,
.nebutaSpotlight>nav>a,
.festivalBooking>nav>a,
.accessPageNext nav>a,
.reservationHero__nav>a,
.depthActions>a,
.ceramicActions>a,
.proBuy>a,
.droneBuyActions>a,
.crossGuideLinks>a,
.shippingLinks>a,
.fBody>a,
.photoJump>a,
.droneSourceLinks>a,
main.article>p>a.pick{
  word-break:normal!important;
  line-break:strict!important;
  overflow-wrap:break-word!important;
}

/* ===========================================================================
   13. tech-qa round4（不合格）と design-qa round4（57/70）の指摘への対応 — round5
       ここから下も **追記のみ**。§0〜§12 も既存CSSも1行も書き換えていない。
       新色は足していない。SPEC 2章のモーション数値には触れていない。
       §9（prefers-reduced-motion）との関係は §11 / §12 と同じで、
       §13 でも transition / animation を !important で書かない。

       round4 までの検収は色を `rgba?()` の正規表現で読んでいたため、
       `color-mix()` の計算値 `color(srgb ...)` を黙って読み飛ばしていた。
       canvas で色を実解決する走査（evidence/life-edit/round5/fix-contrast-ab.mjs）に
       置き換えて **334ページ × 1280/390px × 刷新ON/OFF ×（疑似要素込み）**を
       走り直した結果が §13-1 の6セレクタで、これが color-mix トークン由来の
       悪化の**全数**である（他に該当なし）。
   ========================================================================= */

/* ---------------------------------------------------------------------------
   13-1. 濃色面の英字ラベルを明るい側へ戻す（tech-qa round4 / REG-1・最優先）

   §10-2 は英字ラベルのトークン（--accent2 / --global-brass / --ref-brass /
   --pro-gold ほか）を color-mix で一段深くした。淡色地では狙いどおり
   （同じ P.eyebrow が白地で 3.78→6.84、P.globalKicker が淡色地で 1.84→6.32）だが、
   下の6セレクタは地が rgb(7,18,14)〜rgb(24,37,31) の**濃色面**で、深くすると沈む。

     /en/                          .globalHero .globalKicker        17px  16.52 → 2.70
     /en/                          .globalShop … .globalKicker      10px  10.38 → 2.22
     /guides/travel-reservation/   .reservationHero .eyebrow        11px   4.21 → 2.33
     /guides/{travel-reservation,rental-car}/ .a8BookingHub .eyebrow 11px  4.34 → 2.40
     /guides/travel-photography/   .photoGear > .eyebrow            11px   3.73 → 2.23
     /guides/travel-photography/   .photoGear .proVideoBlock .eyebrow 11px 3.73 → 2.23

   既存トークン --ler-on-dark(#F7F4EE = --ref-paper) に振るだけなので新色は増えない。
   **淡色地の同名クラスには当てない**（.globalSection#explore の .globalKicker は
   現在 6.32 で合格しており、明色にすると 1.8 に落ちる）。下のセレクタは
   実測した濃色面の親だけに限定してある。
   ------------------------------------------------------------------------- */
.globalHero .globalKicker,
.globalSection.globalShop .globalSection__head .globalKicker,
.reservationHero .reservationHero__inner .eyebrow,
.a8BookingHub .a8BookingHead .eyebrow,
.photoSection.photoGear>.eyebrow,
.photoSection.photoGear .proVideoBlock .eyebrow{
  color:var(--ler-on-dark)!important;
}

/* ---------------------------------------------------------------------------
   13-2. ホバー画像 scale(1.03) / 600ms / cubic-bezier(.22,.61,.36,1) の適用漏れ
         （tech-qa round4 / GAP-4、design-qa round4 / 不合格2）

   §7-5 のセレクタ列に入っていなかったため、既存CSSの 0.35s / 0.45s / 0.55s ease と
   scale(1.018〜1.035) が残っていた。334ページ @1280 を全数走査して
   （evidence/life-edit/round5/fix-hoverimg.mjs）
   `transition-property` に literal transform を持つ <img> のうち SPEC 2章の値でない
   ものを数えると **147件 / 7グループ**で、その全部が下の7つ:

     .journeyConnections__grid>a.journeyConnection>figure>img          80件 20ページ 0.45s ease
     .cultureIndexGrid>a.cultureIndexCard>.cultureIndexCard__media>img 22件  1ページ 0.55s ease
     .festivalDirectory__groups>section>a>figure>img                   20件  1ページ 0.35s ease
     .travelInfoCard--visual>.travelInfoCard__photo>img                14件  1ページ 0.45s ease
     .drinksCategoryCard>figure>img                                     5件  1ページ 0.45s ease
     .festivalGuide__grid>article>figure>img                            3件  1ページ 0.35s ease
     .reservationIntent__card>.reservationIntent__photo>img             3件  1ページ 0.45s ease

   既存ルールは書き換えず、詳細度で上回る同形のセレクタで後ろから上書きする。
   transition は !important にしない（§9 の reduced-motion に負けたままにする）。
   ------------------------------------------------------------------------- */
.journeyConnections__grid>a.journeyConnection>figure>img,
.cultureIndexGrid>a.cultureIndexCard>.cultureIndexCard__media>img,
.festivalDirectory__groups>section>a>figure>img,
.travelInfoCard--visual>.travelInfoCard__photo>img,
.drinksCategoryCard>figure>img,
.festivalGuide__grid>article>figure>img,
.reservationIntent__card>.reservationIntent__photo>img{
  transition:transform var(--ler-img,600ms) cubic-bezier(.22,.61,.36,1),
             filter var(--ler-img,600ms) cubic-bezier(.22,.61,.36,1);
}
.journeyConnections__grid>a.journeyConnection:hover>figure>img,
.journeyConnections__grid>a.journeyConnection:focus-visible>figure>img,
.cultureIndexGrid>a.cultureIndexCard:hover>.cultureIndexCard__media>img,
.cultureIndexGrid>a.cultureIndexCard:focus-visible>.cultureIndexCard__media>img,
.festivalDirectory__groups>section>a:hover>figure>img,
.festivalDirectory__groups>section>a:focus-visible>figure>img,
.travelInfoCard--visual:hover>.travelInfoCard__photo>img,
.travelInfoCard--visual:focus-within>.travelInfoCard__photo>img,
.drinksCategoryCard:hover>figure>img,
.drinksCategoryCard:focus-within>figure>img,
.festivalGuide__grid>article:hover>figure>img,
.festivalGuide__grid>article:focus-within>figure>img,
.reservationIntent__card:hover>.reservationIntent__photo>img,
.reservationIntent__card:focus-within>.reservationIntent__photo>img{
  transform:scale(1.03)!important;
}

/* ---------------------------------------------------------------------------
   13-3. /culture/festivals/ の .festivalDirectory が 821〜1023px で列ごと潰れる
         （design-qa round4 / 不合格1。**必須幅 1024 を含む**）

   実測（fix-festdir.mjs、chromium）:
     1280: groups 2,255px / 行113px / 祭り名(strong) 262px
     1120: groups 2,269px / 行127px / 122px
     1080: groups 2,437px / 行161px /  82px
     1024: groups 5,906px / 行569px /  26px  ← 1文字ずつ縦積み
      900: groups 6,042px / 行603px /   0px
      821: groups 6,042px / 行603px /   0px
      768: groups 2,286px / 行 89px / 568px  ← 既存の @media(max-width:820px) が効く

   原因は既存CSS（festival-calendar-v1〜v6.css:16 / v5.css:16）の
     .festivalDirectory{grid-template-columns:330px 1fr}
     .festivalDirectory__groups>section{grid-template-columns:150px 1fr}
     .festivalDirectory__groups a{grid-template-columns:70px minmax(0,1fr) 128px 156px;gap:24px}
   の1列化が @media(max-width:820px) にしか無いこと。821〜1023px では
   330+150+70+128+156+gap が入りきらず minmax(0,1fr) が 26px / 0px に潰れる。
   26px の列そのものは既存不具合だが、刷新が overflow-wrap:break-word を当てたことで
   「はみ出して読める」から「1文字ずつ折り返して読めない」に変わっている（＝刷新の回帰）。

   §12-8 と同じ手で1列化の境目を 1120px へ引き上げる。
   **820px 以下は既存ブロックがそのまま効くように min-width:821px で下限を切る**
   （下限を切らないと 390px で figure が 92px→120px に広がり横オーバーフローの危険がある）。
   ------------------------------------------------------------------------- */
@media(min-width:821px) and (max-width:1120px){
  .festivalDirectory{grid-template-columns:1fr!important}
  .festivalDirectory>div:first-child{padding:28px 0 34px!important}
  .festivalDirectory__groups>section{grid-template-columns:1fr!important}
  .festivalDirectory__groups h3{padding:24px 4px!important}
  .festivalDirectory__groups a{
    grid-column:1!important;
    grid-template-columns:56px minmax(0,1fr) 132px!important;
    gap:16px!important;
    padding:14px 4px!important;
  }
  .festivalDirectory__groups a figure{
    grid-column:3!important;
    grid-row:1 / span 2!important;
    width:132px!important;
    max-width:100%!important;
    align-self:center!important;
  }
  .festivalDirectory__groups a time{grid-column:2!important;text-align:left!important}

  /* .festivalStay も同じ範囲で 330px の見出し列に押されて
     .festivalHotel の small / em が 23〜91px まで潰れる（design-qa round4 で192件）。
     見出しを上に逃がすだけで 3列のカードが本来の幅に戻る。 */
  .festivalStay{grid-template-columns:1fr!important}
}

/* ---------------------------------------------------------------------------
   13-4. /guides/pet-stay/ の「金額 ・ 評価」の中黒が 1024px で行頭に来る
         （design-qa round4 / 不合格3。必須幅）

   `「 6,573円〜 ・ 評価4.41／7…」`は `・` の前後が半角スペースなので
   UAX#14 LB18 で改行点になり、`line-break:strict` では止められない。
   `white-space:nowrap` は 326px のセルに収まらず横オーバーフローになるので使わない。
   design-qa の指示どおり**そのセルの列幅を上げて**解消する。

   実測で犯人を特定した（fix-kinsoku.mjs → probe-petstay3.mjs）。
   潰れているのは .stayChooserGrid の列ではなく、その中の**最後のカードの <ol>** で、
   pet-stay-choice-thumbnails-20260809.css:3-7 の
     .stayChoiceCard:last-child ol{grid-template-columns:repeat(3,minmax(0,1fr));gap:0 22px}
   が 1024px で 292px × 3列になり、さらに
     .stayChoiceCard li.stayChoiceItem{grid-template-columns:minmax(0,1fr) 112px;gap:16px}
   でサムネ 112px を引くため、文字のセルが **164px** しか無い（他のカードは 299px）。
   auto-fit の下限を 360px にして列数を落とすと 1024px で 300px 超になり、
   「金額 ・ 評価」が1行に収まって `・` が行頭に来なくなる。
   既存の @media(max-width:760px)（ol を display:block に戻す）には触らないよう
   min-width:761px で下限を切る。
   ------------------------------------------------------------------------- */
@media(min-width:761px){
  .stayChooserGrid .stayChoiceCard:last-child ol{
    grid-template-columns:repeat(auto-fit,minmax(360px,1fr))!important;
  }
}

/* ---------------------------------------------------------------------------
   13-4b. /culture/festivals/ @390 の `.festivalHotel em` にも同型の行頭禁則がある
          （「徳島駅」より徒歩約1分 。「徳島阿波おどり空港」の `。`）。

   これは design-qa round4 が名指ししていない箇所だが、再検収条件が
   「必須4幅で0件」なので直す。**刷新OFF でも round4版CSS でも同じ位置に出る既存不具合**
   （probe-fest390.log の r5 / r4 / off が3つとも同一）であって刷新の回帰ではない。

   原因は `1分` と `。` の間の半角スペースで、UAX#14 LB18 の改行点は
   `line-break:strict` でも `word-break` でも止められない。`white-space:nowrap` は
   design-qa が禁じている（横オーバーフローになる）。
   既存の @media(max-width:820px) が `.festivalHotel` を `120px 1fr` にしていて
   `em` が 130px しか無いので、サムネ列を 104px に詰めて文字列を 146px にする。
   実測（probe-fest390b.log）: 320 / 360 / 390 / 430px の4幅すべてで禁則0件・
   横オーバーフロー0px。120px のままだと 390 と 320 で1件ずつ出る。
   ------------------------------------------------------------------------- */
@media(max-width:820px){
  .festivalHotel{grid-template-columns:104px minmax(0,1fr)!important}
}

/* ---------------------------------------------------------------------------
   13-5. 同型カードの羅列が残る3グリッドに主従を入れる
         （design-qa round4 / 不合格4。項目4）

     .festivalHotels   205×347px の3列 × 20行         /culture/festivals/
     .travelPickGrid   354×418px が6枚・完全同型       /guides/adult-travel/
     .globalGrid(#explore) 381×520px が6枚・完全同型   /en/

   .killerGrid / .readingGrid / .a8BookingGrid で確立した「先頭を昇格させる」手を当てる。

   ・6枚組（.travelPickGrid / #explore .globalGrid）は3列のまま、
     **先頭1枚だけ 2列 × 2行**に昇格させる（.killerGrid の「大1＋小3」と同じ考え方）。
     3列 × 3行 = 9マスに対して 4 + 1 + 1 + 1 + 1 + 1 = 9 で埋まるので、
     余りマスも隙間も出ない。寸法は「大1・小5」の2種類。
     （最初は「全幅1枚＋半分2枚＋1/3が3枚」も試したが、半分の2枚が縦に伸びて
       先頭の面積比が 1.32〜1.47 にしかならず design-qa の 1.5倍条件を満たせなかった。
       実測は fix-grids.mjs のログに残してある。）
   ・.festivalHotels は 20回反復するので行構成は変えず、
     1列目のトラックだけ 1.7fr にして先頭を主にする（面積比 1.7 倍）。
     行数が増えないので縦の伸びが無い。
   ------------------------------------------------------------------------- */
@media(min-width:900px){
  .travelPickGrid,
  .globalSection#explore .globalGrid{
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
    align-items:stretch!important;
  }
  .travelPickGrid>*:first-child,
  .globalSection#explore .globalGrid>*:first-child{
    grid-column:span 2!important;
    grid-row:span 2!important;
  }

  /* 昇格した1枚は縦にも2マス分あるので、写真を余った高さまで伸ばして
     下に空きができないようにする。 */
  .travelPickGrid>*:first-child{
    display:grid!important;
    grid-template-rows:minmax(0,1fr) auto!important;
  }
  .travelPickGrid>*:first-child .travelPickCard__image{
    aspect-ratio:auto!important;
    height:100%!important;
    min-height:288px!important;
  }
  .travelPickGrid>*:first-child .travelPickCard__content{
    padding:34px 36px 38px!important;
    gap:14px!important;
  }
  .travelPickGrid>*:first-child strong{
    font-size:clamp(23px,1.9vw,29px)!important;
    line-height:1.5!important;
  }

  .globalSection#explore .globalGrid>*:first-child img{
    aspect-ratio:auto!important;
    height:100%!important;
    min-height:288px!important;
    flex:1 1 auto!important;
  }
  .globalSection#explore .globalGrid>*:first-child>div{
    flex:0 0 auto!important;
    padding:34px 36px 38px!important;
  }
  .globalSection#explore .globalGrid>*:first-child h3{
    font-size:clamp(25px,2.1vw,33px)!important;
    line-height:1.45!important;
  }
}
@media(min-width:821px){
  .festivalHotels{grid-template-columns:1.7fr minmax(0,1fr) minmax(0,1fr)!important}
  .festivalHotels>*:first-child img{aspect-ratio:16/9!important}
}

/* ---------------------------------------------------------------------------
   13-6. 走査スクリプトの欠陥の訂正（記録のみ。CSSの挙動は変えない）

   (a) 行頭禁則: round4 の scan-kinsoku.mjs は走査対象を
       `main p/li/dd/dt/h1〜h4 …` に限定していたため `<a>` 直下の `<strong>` や
       `<span>` 内の `<em>` `<small>` が丸ごと対象外だった（design-qa round4 §Ⅳ）。
       全テキストノードを TreeWalker で舐める版に差し替えた
       → evidence/life-edit/round5/fix-kinsoku.mjs

   (b) 同型CTA: round4 の scan-all.mjs は「親の直接の子である `<a>`/`<button>`」しか
       見なかった（tech-qa round4 §7）。`<li>`/`<div>`/`<article>` を挟む列も拾えるよう
       「そのリンクだけを含む最大の祖先（＝枠）」を求め、その親を群の容器とする版に
       差し替えた → evidence/life-edit/round5/fix-scan-cta.mjs

       この版で 334ページ × 1280/768px を走査すると、
       **枠がリンク自身（＝同型ボタンが兄弟として並ぶ本物のボタン列）は 0 パターン**で、
       残るのはすべて「カードごとに1つずつCTAが付いているカード列」だった。
       tech-qa round4 §7 が挙げた 43群/6親も同じ性質のもので、
       **§12 のコメントにある「カードタイルとして対象外にした5つ」は正しくは 6つ**
       （.adultTravelNav / .globalGrid(#explore) / .globalGrid(#shop) /
        .travelPickGrid / .excursionQuick__grid / .sleepMediaGrid）である。
       §12 のコメントは追記のみの原則により書き換えず、ここで訂正する。
       このうち .globalGrid(#explore) と .travelPickGrid は §13-5 で主従を入れた。
   ------------------------------------------------------------------------- */
