/* ============================================
   春岡ゼミナール（デモ） - style.css
   全ページ共通スタイル。
   「わかるまで、を当たり前に。」
   配色: ネイビー×ゴールド×明朝(Zen Old Mincho)。他デモ(介護=ベージュ×コーラル、
   土木・美容室・歯科等)と被らない、知的・誠実トーンの学習塾向けデザインシステム。
   参考実装(介護施設HP/css/style.css・js/main.js)の演出方式(慣性スクロール・
   カスタムカーソル・パララックス・背景巨大文字・スクロールリビール・
   カウントアップ・フルスクリーン円形メニュー・ページ遷移カーテン)を
   仕様として踏襲しつつ、コンポーネント意匠(ハードシャドウPOP)は使わず、
   白カード+1px罫線+ホバー4px浮きの控えめな影に作り直している。
   ============================================ */

:root{
  --base:#f5f6f8;       /* ページ背景(青みの薄グレー白) */
  --paper:#ffffff;       /* カード・ヘッダー */
  --warm:#faf7f0;        /* ごく淡い生成り地(ゴールド微混じり)。セクション背景のリズム用 */
  --ink:#1f2735;         /* 本文・見出し(濃紺墨) */
  --navy:#23406b;        /* プライマリ(ボタン・リンク・帯) */
  --navy-deep:#16294a;   /* 帯セクション地・フッター */
  --navy-soft:#e4ebf4;   /* 淡ネイビー背景 */
  --gold:#b98d3e;        /* アクセント(実績・下線・バッジ地・大きめ装飾)。地色として使う分には単体でよい */
  --gold-deep:#83601a;   /* 白/生成り地の上に乗せる小さめゴールド文字用。実測4.5:1以上(白地5.75:1・base地5.32:1・warm地5.37:1・gold-soft地4.81:1) */
  --gold-soft:#f3ead8;   /* ゴールド淡色地 */
  --accent:#cf5a3d;      /* CTA(体験授業ボタン)限定の朱色。多用しない */
  --line:#dfe3ea;        /* 罫線 */
  --dim:#5f6878;         /* 補足テキスト。base地で4.5:1を割っていた#6b7486(4.347:1)から実測調整(base地5.20:1・白地5.62:1) */
  --danger:#b4544a;
  --ease:cubic-bezier(0.16,1,0.3,1);
  /* 8px基準スペーシングスケール */
  --sp-1:8px;--sp-2:16px;--sp-3:24px;--sp-4:32px;--sp-5:48px;--sp-6:64px;--sp-7:88px;--sp-8:120px;
  /* コンテナ左右padding(スマホ/タブレット/PC) */
  --gutter:20px;
}
@media(min-width:641px){:root{--gutter:28px}}
@media(min-width:1025px){:root{--gutter:40px}}

/* ---------- リセット ---------- */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;font-size:16px}
body{
  font-family:"Zen Kaku Gothic New",sans-serif;
  background:var(--base);
  color:var(--ink);
  line-height:1.9;
  font-size:1rem;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
/* 慣性スムーススクロール有効時、#smooth側で本文を描画するため
   ネイティブスクロールバーの出入りによるガタつきを防ぐ */
body.is-hijack{overflow-y:scroll}
body.is-hijack .smooth{position:fixed;top:0;left:0;width:100%;will-change:transform}
a{color:inherit;text-decoration:none}
ul,ol{list-style:none}
img,svg{max-width:100%;display:block}
button{font:inherit;background:none;border:none;cursor:pointer;color:inherit}
table{border-collapse:collapse}

/* キーボード操作時のフォーカスリング(マウスクリックでは出さない) */
:focus-visible{outline:2px solid var(--navy);outline-offset:2px}
.fs-menu :focus-visible,.band :focus-visible,.cta :focus-visible,.hero-kv :focus-visible{outline-color:#fff}

.mincho{font-family:"Zen Old Mincho",serif}
.en{font-family:"Outfit",sans-serif;letter-spacing:.06em}

/* 写真プレースホルダー(写真が用意できるまでの仮置き用) */
.ph{position:relative;background:linear-gradient(135deg,var(--navy-soft),var(--base) 55%,var(--gold-soft));overflow:hidden}
.ph img,.ph svg{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}

/* ============================================
   共通ヘッダー
   ============================================ */
.hd{
  position:sticky;top:0;z-index:60;
  display:flex;justify-content:space-between;align-items:center;
  padding:14px 28px;background:var(--paper);
  border-bottom:1px solid var(--line);
  transition:background .3s var(--ease),padding .3s var(--ease),box-shadow .3s var(--ease),backdrop-filter .3s var(--ease);
}
/* スクロール80px超で高さを縮め、半透明+ぼかしのガラス調に切り替える(main.jsがbody.is-scrolledを付与) */
body.is-scrolled .hd{
  padding:8px 28px;background:rgba(255,255,255,.82);backdrop-filter:blur(10px);
  box-shadow:0 6px 20px rgba(31,39,53,.08);
}
@supports not (backdrop-filter:blur(1px)){
  body.is-scrolled .hd{background:rgba(255,255,255,.96)}
}
@media(max-width:640px){
  body.is-scrolled .hd{padding:8px 16px}
}
body.menu-open .hd{z-index:130}
.logo{display:flex;align-items:center;gap:12px}
.logo .mark{
  width:38px;height:38px;border-radius:50%;background:var(--navy);border:1.5px solid var(--gold);
  display:grid;place-items:center;color:#fff;font-family:"Zen Old Mincho",serif;font-weight:700;font-size:1.05rem;flex-shrink:0;
}
.logo .txt b{display:block;font-size:.94rem;font-weight:700;letter-spacing:.03em;font-family:"Zen Old Mincho",serif;color:var(--ink)}
.logo .txt span{font-size:.56rem;color:var(--dim);letter-spacing:.14em;font-family:"Outfit",sans-serif}

.hd nav{display:flex;gap:16px;font-size:.72rem;font-weight:700;flex-wrap:wrap;max-width:620px}
/* PCナビは下線が左から走るホバー演出(現在地はborder-bottomで常時表示のまま維持) */
.hd nav a{
  padding:4px 0;border-bottom:2px solid transparent;white-space:nowrap;letter-spacing:.02em;
  background-image:linear-gradient(var(--gold),var(--gold));background-repeat:no-repeat;background-position:left bottom;background-size:0 2px;
  transition:background-size .3s var(--ease),border-color .2s,color .2s;
}
.hd nav a:hover{background-size:100% 2px;color:var(--navy)}
.hd nav a.is-current{border-color:var(--gold);color:var(--navy)}

.hd-right{display:flex;align-items:center;gap:12px}
.hd .btn.sm{padding:10px 22px;font-size:.7rem}

@media(max-width:1180px){
  .hd nav{display:none}
}
@media(max-width:640px){
  .hd .btn.sm{display:none}
  .hd{padding:12px 16px;gap:8px}
}

/* ハンバーガーボタン(1180px以下で表示) */
.menu-btn{
  display:none;width:40px;height:40px;flex-direction:column;justify-content:center;align-items:center;gap:5px;
  position:relative;z-index:120;flex-shrink:0;
}
.menu-btn span{display:block;width:22px;height:2px;background:var(--ink);transition:transform .3s var(--ease),opacity .2s var(--ease)}
body.menu-open .menu-btn span:nth-child(1){transform:translateY(7px) rotate(45deg)}
body.menu-open .menu-btn span:nth-child(2){opacity:0}
body.menu-open .menu-btn span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
@media(max-width:1180px){.menu-btn{display:flex}}

/* ============================================
   フルスクリーン円形メニュー(演出10)
   ハンバーガーボタン位置を中心にclip-path:circle()展開で開閉する。
   ============================================ */
.fs-menu{
  position:fixed;inset:0;z-index:110;background:var(--navy-deep);color:#fff;
  display:flex;flex-direction:column;justify-content:flex-start;align-items:center;
  padding:96px 28px 40px;overflow-y:auto;
  clip-path:circle(0% at calc(100% - 3.6rem) 3.4rem);
  pointer-events:none;
  transition:clip-path .7s var(--ease);
}
body.menu-open{overflow:hidden}
body.menu-open .fs-menu{clip-path:circle(150% at calc(100% - 3.6rem) 3.4rem);pointer-events:auto}
@media(max-width:640px){
  .fs-menu{clip-path:circle(0% at calc(100% - 2.6rem) 2.9rem)}
  body.menu-open .fs-menu{clip-path:circle(150% at calc(100% - 2.6rem) 2.9rem)}
}
.fs-menu nav{display:flex;flex-direction:column;width:100%;max-width:480px;margin:auto auto 0}
.fs-menu nav a{
  font-family:"Zen Old Mincho",serif;font-weight:700;font-size:clamp(18px,4.6vw,25px);letter-spacing:.04em;
  padding:14px 2px;border-bottom:1px solid rgba(255,255,255,.16);display:flex;justify-content:space-between;align-items:center;
  opacity:0;transform:translateY(14px);color:#fff;
  transition:opacity .5s var(--ease),transform .5s var(--ease),color .2s;
}
.fs-menu nav a span{font-family:"Outfit",sans-serif;font-size:.6rem;color:var(--gold);letter-spacing:.1em}
.fs-menu nav a:hover{color:var(--gold)}
body.menu-open .fs-menu nav a{opacity:1;transform:translateY(0)}
.fs-menu nav a:nth-child(1){transition-delay:.04s}
.fs-menu nav a:nth-child(2){transition-delay:.07s}
.fs-menu nav a:nth-child(3){transition-delay:.10s}
.fs-menu nav a:nth-child(4){transition-delay:.13s}
.fs-menu nav a:nth-child(5){transition-delay:.16s}
.fs-menu nav a:nth-child(6){transition-delay:.19s}
.fs-menu nav a:nth-child(7){transition-delay:.22s}
.fs-menu nav a:nth-child(8){transition-delay:.25s}
.fs-menu nav a:nth-child(9){transition-delay:.28s}
.fs-menu nav a:nth-child(10){transition-delay:.31s}
.fs-menu nav a:nth-child(11){transition-delay:.34s}
.fs-menu nav a:nth-child(12){transition-delay:.37s}
.fs-menu nav a:nth-child(13){transition-delay:.40s}
.fs-menu nav a:nth-child(14){transition-delay:.43s}

.fs-menu .fs-foot{
  width:100%;max-width:480px;margin:26px auto auto;display:flex;flex-direction:column;gap:14px;align-items:center;text-align:center;
  opacity:0;transform:translateY(14px);transition:opacity .5s var(--ease) .4s,transform .5s var(--ease) .4s;
}
body.menu-open .fs-menu .fs-foot{opacity:1;transform:translateY(0)}
.fs-menu .fs-foot .tel-big{font-family:"Outfit",sans-serif;font-size:1.3rem;letter-spacing:.04em;color:#fff}
.fs-menu .fs-foot .cta-row{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}

@media(max-height:700px){
  .fs-menu{padding:84px 28px 28px}
  .fs-menu nav a{padding:9px 2px}
  .fs-menu .fs-foot{margin-top:16px;gap:8px}
}

.menu-close{position:absolute;top:14px;right:22px;width:40px;height:40px;display:none}

/* ============================================
   スマホ下部固定タブバー(560px以下)
   トップ/コース/料金/体験予約の4タブ+右端「メニュー」ブロック
   ============================================ */
.sp-bar{
  display:none;position:fixed;left:0;right:0;bottom:0;z-index:90;
  grid-template-columns:repeat(4,1fr) auto;
  background:var(--paper);border-top:1px solid var(--line);
  box-shadow:0 -4px 16px rgba(31,39,53,.06);
}
.sp-bar .sp-tab{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  padding:11px 4px calc(11px + env(safe-area-inset-bottom,0px));
  font-size:.68rem;line-height:1.2;font-weight:700;letter-spacing:.01em;color:var(--dim);
  border-right:1px solid var(--line);
  min-height:44px;
  transition:background .2s,color .2s;
}
.sp-bar .sp-tab .ico{width:20px;height:20px;color:var(--dim);transition:color .2s}
.sp-bar .sp-tab.is-current{color:var(--navy);background:var(--navy-soft)}
.sp-bar .sp-tab.is-current .ico{color:var(--navy)}
.sp-bar .sp-tab:active{background:var(--gold-soft)}
.sp-bar .sp-menu-btn{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  padding:11px 12px calc(11px + env(safe-area-inset-bottom,0px));
  background:var(--navy);color:#fff;font-size:.68rem;line-height:1.2;font-weight:700;
  min-height:44px;
}
.sp-bar .sp-menu-btn .ico{width:20px;height:20px;color:#fff}
.sp-bar .sp-menu-btn:active{background:var(--gold)}
@media(max-width:560px){
  .sp-bar{display:grid}
  body{padding-bottom:64px}
}

/* ============================================
   ボタン
   ============================================ */
.btn{display:inline-flex;align-items:center;gap:10px;font-weight:700;font-size:.82rem;letter-spacing:.04em;padding:15px 30px;border-radius:6px;border:1.5px solid var(--navy);transition:background .3s var(--ease),color .3s var(--ease),border-color .3s var(--ease),box-shadow .2s var(--ease),transform .2s var(--ease)}
.btn.fill{background:var(--navy);color:#fff}
.btn.fill:hover{background:var(--navy-deep);box-shadow:0 8px 20px rgba(22,41,74,.28);transform:translateY(-2px)}
.btn.line{border:1.5px solid var(--navy);color:var(--navy);background:var(--paper)}
.btn.line:hover{background:var(--navy);color:#fff;transform:translateY(-2px)}
.fs-menu .btn.line, .hero-kv .btn.line{background:transparent}
/* CTA(体験授業)限定の朱色ボタン。ホバーで背景グラデーションがゆっくり流れる演出 */
.btn.accent{
  background-image:linear-gradient(115deg,var(--accent) 0%,#e0805f 50%,var(--accent) 100%);
  background-size:240% 100%;background-position:0% 0%;
  color:#fff;border-color:var(--accent);
  transition:background-position 1.2s var(--ease),box-shadow .3s var(--ease),transform .2s var(--ease);
}
.btn.accent:hover{background-position:100% 0%;box-shadow:0 8px 20px rgba(207,90,61,.32);transform:translateY(-2px)}
/* .btn内の矢印(→)。ホバーで右に4pxスライドするマイクロアニメーション */
.btn .ar{display:inline-block;transition:transform .25s var(--ease)}
.btn:hover .ar{transform:translateX(4px)}

/* 「詳しく見る」等に添える紺の正円+白矢印アイコンボタン共通クラス。
   ホバーでゴールドに反転。 */
.circle-arrow{
  display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
  width:32px;height:32px;border-radius:50%;
  background:var(--navy);color:#fff;font-family:"Outfit",sans-serif;font-size:.9rem;
  transition:background .25s var(--ease),color .25s var(--ease),transform .25s var(--ease);
}

/* ============================================
   セクション見出し
   明朝の大きな日本語h2+ゴールドの短い下線。ENキャプションは小さく装飾扱い。
   セクション番号「01」等をOutfitで添える(装飾)。
   ============================================ */
.sec{max-width:1120px;margin:0 auto;padding:var(--sp-6) var(--gutter) 0;position:relative}
@media(min-width:641px){.sec{padding-top:clamp(var(--sp-7),10vw,128px)}}
.label{display:flex;align-items:baseline;gap:14px;margin-bottom:var(--sp-2)}
.label .no{font-family:"Outfit",sans-serif;font-weight:700;font-size:.9rem;color:var(--gold-deep);letter-spacing:.06em}
/* リビール発火時に軽くフェード+上がり(親.rvが.onを受けたときだけ。.rvの外では常時表示) */
.rv .label .no{opacity:0;transform:translateY(6px);transition:opacity .5s var(--ease) .1s,transform .5s var(--ease) .1s}
.rv.on .label .no,.label.rv.on .no{opacity:1;transform:translateY(0)}
.band .label .no{color:var(--gold)}
.label .en{
  display:inline-block;font-family:"Outfit",sans-serif;font-weight:600;
  font-size:.72rem;letter-spacing:.18em;line-height:1;
  color:var(--dim);text-transform:uppercase;
}
h1,h2,h3,.mincho{font-feature-settings:"palt";letter-spacing:.04em}
h2{
  font-family:"Zen Old Mincho",serif;font-size:clamp(1.5rem,1.1rem + 1.8vw,2.1rem);font-weight:700;
  line-height:1.3;margin-bottom:var(--sp-3);color:var(--ink);position:relative;padding-bottom:var(--sp-2);
}
/* 下線はscaleX(0)→1の描画演出(演出7)。.rvの中にある見出しだけ初期状態で隠し、
   スクロールリビール発火(.on)と連動させる。.rvの外(フォーム送信完了メッセージ等)の
   見出しは対象外にして常時表示のまま(下記「見出し下線の描画」ブロックで上書き)。 */
h2::after{content:"";position:absolute;left:0;bottom:0;width:44px;height:3px;background:var(--gold);transform-origin:left;transition:transform .5s var(--ease)}
.band h2::after{background:var(--gold)}
/* .rvスコープ内(祖先.rvまたはh2自身が.rv)の見出しだけ初期状態でscaleX(0)にし、
   リビール発火(.on付与)でscaleX(1)に描画する。.rvの外の見出しはここに掛からず
   base rule(transform指定なし=既定値scaleX(1)相当の表示)のまま常時表示。 */
.rv h2::after,h2.rv::after{transform:scaleX(0)}
.rv.on h2::after,h2.rv.on::after{transform:scaleX(1)}
.no-js h2::after{transform:scaleX(1)!important}
.sec-lead{max-width:600px;color:var(--dim);margin-bottom:var(--sp-5)}

/* ============================================
   帯セクション(ネイビー全幅帯・白文字)
   ============================================ */
.band{width:100%;background:var(--navy-deep);color:#fff;padding:var(--sp-6) 0}
@media(min-width:641px){.band{padding-top:clamp(var(--sp-7),10vw,128px);padding-bottom:clamp(var(--sp-7),10vw,128px)}}
.band .sec{padding:0 var(--gutter)}
.band .sec-lead{color:rgba(255,255,255,.72)}
.band + .sec,.sec + .band{margin-top:0}

/* 理由グリッド(3分割テキストカード。recruit.html「働く環境」で使用中。
   index.htmlの「選ばれる理由」は2026年第5弾改修で写真番号カード
   (.reason-list/.reason-card。次のブロック)に切り替えたため、
   このクラスは recruit.html 専用として維持する) */
.reason-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
@media(max-width:900px){.reason-grid{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.reason-grid{grid-template-columns:1fr}}
.reason-item{
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.16);border-radius:12px;padding:var(--sp-4) var(--sp-3);
  transition:transform .25s var(--ease),background .25s var(--ease),box-shadow .25s var(--ease);
}
.reason-item:hover{transform:translateY(-4px);background:rgba(255,255,255,.08);box-shadow:0 12px 28px rgba(0,0,0,.22)}
.reason-item .no{font-family:"Outfit",sans-serif;font-weight:700;font-size:.78rem;color:var(--gold);letter-spacing:.1em;margin-bottom:12px;display:block}
.reason-item b{display:block;font-family:"Zen Old Mincho",serif;font-weight:700;font-size:1.02rem;letter-spacing:.02em;margin-bottom:8px}
.reason-item span{font-size:.82rem;color:rgba(255,255,255,.7);line-height:1.9;display:block}

/* 選ばれる理由(写真+大きな番号オーバーレイのカードを縦に積み、
   PCでは奇数=左寄せ・偶数=右寄せに交互オフセットするジグザグ配置。
   豊田自動織機技能専修学園のStrengths表現を参考に、自前で言語化・
   実装したもの。帯の中に個別カードとして配置し、.rvは各カードに
   個別付与する。index.htmlのみで使用) */
.reason-list{display:flex;flex-direction:column;gap:40px}
.reason-card{
  width:100%;max-width:640px;display:grid;grid-template-columns:1fr;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.16);border-radius:14px;overflow:hidden;
  transition:transform .25s var(--ease),background .25s var(--ease),box-shadow .25s var(--ease);
}
.reason-card:hover{transform:translateY(-4px);background:rgba(255,255,255,.08);box-shadow:0 14px 32px rgba(0,0,0,.22)}
@media(min-width:901px){
  .reason-card:nth-child(odd){margin-right:auto}
  .reason-card:nth-child(even){margin-left:auto}
}
.reason-card .img-wrap{position:relative;aspect-ratio:3/2;overflow:hidden}
.reason-card .img-wrap img{width:100%;height:100%;object-fit:cover}
.reason-card .img-wrap .no{
  position:absolute;left:16px;bottom:-6px;font-family:"Outfit",sans-serif;font-weight:700;
  font-size:clamp(3.2rem,7vw,4.6rem);line-height:1;color:rgba(255,255,255,.9);
  text-shadow:0 2px 18px rgba(0,0,0,.35);letter-spacing:.02em;
}
.reason-card .body{padding:var(--sp-4)}
.reason-card b{display:block;font-family:"Zen Old Mincho",serif;font-weight:700;font-size:1.06rem;letter-spacing:.02em;margin-bottom:10px}
.reason-card span{font-size:.84rem;color:rgba(255,255,255,.7);line-height:1.9;display:block}
@media(max-width:900px){
  .reason-card{max-width:none}
}

/* ============================================
   カード(白カード+1px罫線+ホバーで4px浮く控えめシャドウ)
   コース紹介グリッド
   ============================================ */
.course-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
@media(max-width:980px){.course-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.course-grid{grid-template-columns:1fr}}
.course-card{
  background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:var(--sp-4) var(--sp-3);
  transition:transform .25s var(--ease),box-shadow .25s var(--ease),border-color .25s var(--ease);
  display:block;position:relative;
}
.course-card:hover{transform:translateY(-4px);box-shadow:0 16px 32px rgba(31,39,53,.1);border-color:var(--gold)}
.course-card .ico{width:44px;height:44px;margin-bottom:16px}
.course-card .badge{margin-bottom:12px}
.course-card h3{font-family:"Zen Old Mincho",serif;font-size:1.06rem;font-weight:700;letter-spacing:.02em;margin:0 0 10px}
.course-card p{font-size:.84rem;color:var(--dim)}
.course-card .fee{margin-top:18px;padding-top:14px;border-top:1px dashed var(--line);font-size:.72rem;color:var(--dim)}
.course-card .fee b{font-family:"Outfit",sans-serif;font-size:1.02rem;color:var(--ink);letter-spacing:.02em;font-weight:600;font-variant-numeric:tabular-nums}
.course-card .more-link{margin-top:16px;display:inline-flex;align-items:center;gap:8px;font-size:.78rem;font-weight:700;color:var(--navy)}
.course-card:hover .circle-arrow{background:var(--gold)}

/* ============================================
   教室だより一覧カード(reports.html。京進「グループストーリー」の
   ようなブログ型CMSの一覧表示。一覧コンテナ.report-grid自体には
   .rvを付けず、各カードに個別付与する)
   ============================================ */
.report-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
@media(max-width:900px){.report-grid{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.report-grid{grid-template-columns:1fr;max-width:420px;margin:0 auto}}
.report-card[hidden]{display:none!important}
.report-card{
  display:block;background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden;
  transition:transform .25s var(--ease),box-shadow .25s var(--ease);color:inherit;
}
.report-card:hover{transform:translateY(-4px);box-shadow:0 16px 32px rgba(31,39,53,.1)}
.report-card .ph{aspect-ratio:3/2;border-radius:0;border:none;border-bottom:1px solid var(--line)}
.report-card .body{padding:var(--sp-3)}
.report-card .meta{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.report-card .meta time{font-family:"Outfit",sans-serif;font-size:.7rem;color:var(--dim)}
.report-card h3{font-family:"Zen Old Mincho",serif;font-size:.98rem;font-weight:700;letter-spacing:.02em;margin-bottom:8px;line-height:1.7}
.report-card p{font-size:.8rem;color:var(--dim);line-height:1.8}
.report-empty{padding:40px 4px;text-align:center;color:var(--dim);font-size:.86rem;display:none}
.report-empty.is-visible{display:block}

/* ============================================
   バッジ(コース種別・カテゴリ)
   ============================================ */
.badge{display:inline-block;font-size:.64rem;padding:3px 12px;border-radius:999px;font-weight:700;letter-spacing:.03em}
.badge-shogaku{background:var(--navy);color:#fff}
.badge-chugaku{background:var(--navy-deep);color:#fff}
.badge-kobetsu{background:var(--gold-deep);color:#fff}
.badge-koko{background:var(--gold-soft);color:var(--ink)}

/* ============================================
   タブ(カテゴリ/年度絞り込み。faq/voices/resultsで共有)
   ============================================ */
.tab-row{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:34px}
.tab-btn{font-size:.76rem;letter-spacing:.02em;padding:9px 20px;border:1.5px solid var(--line);border-radius:20px;color:var(--ink);background:var(--paper);transition:background .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease)}
.tab-btn:hover{border-color:var(--navy)}
.tab-btn.is-active{background:var(--navy);border-color:var(--navy);color:#fff}
.tab-btn .cnt{margin-left:4px;font-family:"Outfit",sans-serif;font-size:.64rem;opacity:.75}

/* ============================================
   講師紹介グリッド
   ============================================ */
.teacher-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}
@media(max-width:980px){.teacher-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.teacher-grid{grid-template-columns:1fr}}
.teacher-card{
  background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden;
  transition:transform .25s var(--ease),box-shadow .25s var(--ease);
}
.teacher-card:hover{transform:translateY(-4px);box-shadow:0 16px 32px rgba(31,39,53,.1)}
.teacher-card .ph{aspect-ratio:1/1;border-radius:0;border:none;border-bottom:1px solid var(--line)}
.teacher-card .body{padding:var(--sp-3)}
.teacher-card .role{display:inline-block;font-size:.62rem;color:#fff;background:var(--navy);font-weight:700;letter-spacing:.04em;padding:3px 12px;border-radius:999px}
.teacher-card h3{font-family:"Zen Old Mincho",serif;font-size:.98rem;font-weight:700;margin:10px 0 8px}
.teacher-card p{font-size:.78rem;color:var(--dim);line-height:1.8}

/* ============================================
   カウントアップ実績帯(「数字で見る春ゼミ」navy-deep全面帯)
   各項目は「小見出し(白)/巨大数字(白)/※注記(白70%)」の横組みを
   1px罫線(rgba(255,255,255,.18))で縦に積む構成(豊田自動織機技能専修学園の
   Why Choose Us帯を参考に、自前で言語化・実装したもの)。
   ============================================ */
.stat-rows{border-top:1px solid rgba(255,255,255,.18)}
.stat-row{
  display:grid;grid-template-columns:220px 1fr;grid-template-areas:"label num" "label note";
  column-gap:28px;row-gap:6px;align-items:center;
  padding:34px 0;border-bottom:1px solid rgba(255,255,255,.18);
}
.stat-row:last-child{border-bottom:none}
.stat-row-label{grid-area:label;font-size:.84rem;font-weight:700;letter-spacing:.03em;color:#fff;align-self:center}
.stat-row-num{grid-area:num;font-family:"Outfit",sans-serif;font-weight:700;font-size:clamp(3rem,7vw,6.5rem);color:#fff;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.stat-row-note{grid-area:note;font-size:.72rem;color:rgba(255,255,255,.7);letter-spacing:.02em}
@media(max-width:700px){
  .stat-row{grid-template-columns:1fr;grid-template-areas:"label" "num" "note";row-gap:8px;padding:26px 0}
  .stat-row-label{align-self:start}
}

/* ============================================
   料金表・合格実績表
   ============================================ */
/* 横スクロールラッパー(演出10・横スクロール根絶)。各ページのローカル<style>にも
   同名クラスの重複定義があるが値は同一のため衝突しない。ここでタッチ操作向けの
   -webkit-overflow-scrolling:touchを一括で足す。 */
.svc-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.fee{width:100%;border-collapse:collapse;background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden;font-size:.84rem}
.fee thead th{background:var(--navy);color:#fff;font-weight:700;letter-spacing:.04em;font-size:.74rem;padding:14px 12px;text-align:left}
.fee td,.fee th{padding:14px 12px;border-bottom:1px solid var(--line);text-align:left}
.fee tbody th{font-weight:700;letter-spacing:.02em;white-space:nowrap;font-family:"Zen Old Mincho",serif}
.fee tbody tr:last-child td,.fee tbody tr:last-child th{border-bottom:none}
.fee td .amt{font-family:"Outfit",sans-serif;font-weight:700;color:var(--ink);font-size:1.02rem;font-variant-numeric:tabular-nums}
.fee-note{font-size:.76rem;color:var(--dim);margin-top:16px;line-height:1.9}
.fee-note.warn{color:var(--danger)}

table.result-table{width:100%;border-collapse:collapse;background:var(--paper);border:1px solid var(--line);border-radius:12px;overflow:hidden;font-size:.86rem}
.result-table thead th{background:var(--navy-deep);color:#fff;font-weight:700;font-size:.76rem;padding:14px 14px;text-align:left}
.result-table td,.result-table th{padding:13px 14px;border-bottom:1px solid var(--line);text-align:left}
.result-table tbody tr:last-child td{border-bottom:none}
.result-table td.num,.result-table th.num{font-family:"Outfit",sans-serif;font-weight:700;color:var(--navy);text-align:right;font-variant-numeric:tabular-nums}

/* ============================================
   卒塾生のひとこと(results.html。豊田学園の座談会人物リストのような
   一覧行表示。カードにせず細罫線区切りの行リストにする。一覧コンテナ
   .grad-voice-list自体には.rvを付けず、各行に個別付与する)
   ============================================ */
.grad-voice-list{border-top:1px solid var(--line)}
.grad-voice-row{
  display:grid;grid-template-columns:200px 1fr;gap:24px;padding:24px 0;
  border-bottom:1px solid var(--line);align-items:baseline;
}
.grad-voice-row .who{display:flex;flex-direction:column;gap:4px}
.grad-voice-row .school{font-size:.7rem;color:var(--dim);letter-spacing:.02em}
.grad-voice-row .name{font-family:"Zen Old Mincho",serif;font-weight:700;font-size:1.02rem;color:var(--ink)}
.grad-voice-row .comment{font-size:.86rem;color:var(--ink);line-height:1.9}
@media(max-width:620px){
  .grad-voice-row{grid-template-columns:1fr;gap:8px;padding:20px 0}
}

/* ============================================
   セクション背景のリズム(warm地)
   全セクションがbase一色にならないよう、下層ページのページヘッダーなど
   1箇所以上に生成り(--warm)の全幅背景を挟む。文字はink基調のままで
   コントラスト上の問題は生じない(黒#1f2735 vs warm#faf7f0で14:1)。
   ============================================ */
.warm{width:100%;background:var(--warm)}
.head-warm{width:100%;background:var(--warm);padding-bottom:var(--sp-6)}

/* ============================================
   下層ページ用: パンくず/ページヘッダー
   ============================================ */
.crumbs{max-width:1120px;margin:0 auto;padding:var(--sp-2) var(--gutter) 0;font-size:.72rem;color:var(--dim);display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.crumbs a{color:var(--dim);transition:color .2s}
.crumbs a:hover{color:var(--navy)}
.crumbs .sep{color:#b6bccb}
.crumbs .now{color:var(--ink)}

.page-head{max-width:1120px;margin:0 auto;padding:var(--sp-4) var(--gutter) 0;position:relative}
.page-head .en{display:block;font-family:"Outfit",sans-serif;font-size:.8rem;font-weight:700;letter-spacing:.18em;color:var(--gold-deep);margin-bottom:var(--sp-2)}
.page-head h1{font-family:"Zen Old Mincho",serif;font-size:clamp(28px,4.2vw,42px);font-weight:700;letter-spacing:.03em;line-height:1.7}
.page-head p{max-width:620px;margin-top:16px;color:var(--dim)}

/* ============================================
   画像+テキスト2分割レイアウト(理念/塾長挨拶/沿革などで使用)
   ============================================ */
.split-media{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
@media(max-width:820px){.split-media{grid-template-columns:1fr}}
.split-media .ph{aspect-ratio:4/3;border-radius:12px;border:1px solid var(--line)}
.split-media--narrow{grid-template-columns:320px 1fr}
@media(max-width:820px){.split-media--narrow{grid-template-columns:1fr}}
.split-media--narrow .ph{aspect-ratio:3/4}
.split-media blockquote{font-family:"Zen Old Mincho",serif;font-weight:700;font-size:1.14rem;line-height:2;letter-spacing:.02em}
.split-media .who{margin-top:22px;font-size:.8rem;color:var(--dim);line-height:1.9}
.split-media .who b{display:block;font-size:1rem;color:var(--ink);letter-spacing:.03em;font-family:"Zen Old Mincho",serif;font-weight:700}

.policy-points{display:grid;gap:0;border-top:1px solid var(--line)}
.pp{display:grid;grid-template-columns:52px 1fr;gap:18px;padding:22px 0;border-bottom:1px solid var(--line)}
.pp .no{font-family:"Outfit",sans-serif;font-weight:700;font-size:.76rem;color:#fff;background:var(--navy);border-radius:50%;width:38px;height:38px;display:grid;place-items:center}
.pp h3{font-family:"Zen Old Mincho",serif;font-size:.96rem;font-weight:700;letter-spacing:.02em;margin-bottom:6px}
.pp p{font-size:.84rem;color:var(--dim)}

/* 沿革タイムライン */
.timeline{display:grid;gap:0;border-top:1px solid var(--line)}
.tl-item{display:grid;grid-template-columns:110px 1fr;gap:18px;padding:22px 0;border-bottom:1px solid var(--line);align-items:baseline}
@media(max-width:560px){.tl-item{grid-template-columns:78px 1fr}}
.tl-item .time{font-family:"Outfit",sans-serif;font-weight:700;color:var(--navy);font-size:.92rem;white-space:nowrap}
.tl-item h3{font-family:"Zen Old Mincho",serif;font-size:.92rem;font-weight:700;margin-bottom:4px}
.tl-item p{font-size:.8rem;color:var(--dim)}

/* ============================================
   入塾までの流れ(5ステップ)
   ============================================ */
.flow{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;counter-reset:step}
@media(max-width:980px){.flow{grid-template-columns:1fr 1fr 1fr}}
@media(max-width:680px){.flow{grid-template-columns:1fr 1fr}}
@media(max-width:460px){.flow{grid-template-columns:1fr}}
.fstep{
  background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:var(--sp-3);position:relative;
  transition:transform .25s var(--ease),box-shadow .25s var(--ease);
}
.fstep:hover{transform:translateY(-4px);box-shadow:0 16px 32px rgba(31,39,53,.1)}
.fstep::before{counter-increment:step;content:"0" counter(step);font-family:"Outfit",sans-serif;font-weight:700;font-size:.8rem;color:var(--gold-deep);letter-spacing:.1em}
.fstep h3{font-family:"Zen Old Mincho",serif;font-size:.9rem;font-weight:700;letter-spacing:.02em;margin:10px 0 6px}
.fstep p{font-size:.8rem;color:var(--dim)}
.fstep .time{margin-top:10px;font-size:.68rem;color:var(--dim)}
.fstep .time b{color:var(--navy)}

/* ============================================
   アクセス
   ============================================ */
.info{display:grid;grid-template-columns:1.1fr 1fr;gap:40px;align-items:start}
@media(max-width:820px){.info{grid-template-columns:1fr}}
.access .ph{aspect-ratio:16/9;border-radius:12px;margin-bottom:16px;border:1px solid var(--line)}
.access p{font-size:.86rem;color:var(--dim)}
.access p b{color:var(--ink)}

/* ============================================
   CTA
   ============================================ */
.cta{max-width:1120px;margin:var(--sp-8) auto 0;padding:0 var(--gutter);position:relative}
.cta .box{background:var(--navy-deep);color:#fff;border-radius:16px;padding:var(--sp-6) var(--sp-4);text-align:center;position:relative;overflow:hidden}
.cta .box::before{content:"";position:absolute;width:340px;height:340px;border-radius:50%;background:rgba(185,141,62,.14);top:-160px;right:-100px}
.cta h2{color:#fff;margin-bottom:8px}
.cta h2::after{background:var(--gold)}
.cta p{font-size:.86rem;color:rgba(255,255,255,.72);margin-bottom:28px;position:relative;max-width:520px;margin-left:auto;margin-right:auto}
.cta .btn.line{border-color:#fff;color:#fff;margin-left:10px;background:transparent}
.cta .btn.line:hover{background:#fff;color:var(--navy-deep)}
@media(max-width:560px){.cta .btn{display:flex;justify-content:center}.cta .btn.line{margin:12px 0 0}}

/* お知らせティッカー/FAQ抜粋(トップページ用) */
.ticker{border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden;background:var(--paper)}
.ticker-in{max-width:1120px;margin:0 auto;padding:16px 24px;display:flex;align-items:center;gap:22px}
.ticker-in .en{font-family:"Outfit",sans-serif;font-size:.7rem;color:var(--navy);font-weight:700;flex-shrink:0;letter-spacing:.18em}
.ticker-list{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.ticker-list a{display:flex;gap:14px;align-items:baseline;font-size:.82rem;color:var(--dim);padding:4px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ticker-list a:hover{color:var(--navy)}
.ticker-list time{font-family:"Outfit",sans-serif;font-size:.68rem;color:var(--dim);flex-shrink:0}
.ticker-list .cat{flex-shrink:0;font-size:.64rem;padding:2px 10px;border-radius:999px;background:var(--navy-soft);color:var(--navy);letter-spacing:.02em;font-weight:700}
.ticker-list .ttl{color:var(--ink);overflow:hidden;text-overflow:ellipsis}

/* ============================================
   お知らせ一覧(news.html)
   ============================================ */
.news-list{display:grid;gap:0;border-top:1px solid var(--line)}
.news-item[hidden]{display:none!important}
.news-item{display:flex;gap:20px;align-items:baseline;padding:26px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.news-item time{font-family:"Outfit",sans-serif;font-size:.78rem;color:var(--dim);width:96px;flex-shrink:0}
.news-item .cat{flex-shrink:0}
.news-item .ttl{flex:1;min-width:200px;font-size:.9rem;color:var(--ink);transition:color .2s}
.news-item:hover .ttl{color:var(--navy)}

.faq-top{display:grid;gap:0;border-top:1px solid var(--line)}
.faq-item{border-bottom:1px solid var(--line)}
.faq-q{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:22px 4px;cursor:pointer;font-size:.92rem;font-weight:500}
.faq-q .qmark{font-family:"Outfit",sans-serif;color:var(--navy);font-weight:700;flex-shrink:0}
.faq-q .plus{flex-shrink:0;width:22px;height:22px;position:relative}
.faq-q .plus::before,.faq-q .plus::after{content:"";position:absolute;background:var(--ink);top:50%;left:50%;transform:translate(-50%,-50%)}
.faq-q .plus::before{width:14px;height:1.5px}
.faq-q .plus::after{width:1.5px;height:14px;transition:transform .25s var(--ease)}
.faq-item.is-open .faq-q .plus::after{transform:translate(-50%,-50%) rotate(90deg)}
.faq-a{max-height:0;overflow:hidden;transition:max-height .35s var(--ease)}
.faq-a p{padding:0 4px 22px;font-size:.84rem;color:var(--dim);max-width:680px}
.faq-item.is-open .faq-a{max-height:500px}
.faq-cat-label{font-family:"Zen Old Mincho",serif;font-size:1rem;font-weight:700;margin:44px 0 8px;color:var(--ink)}
.faq-cat-label:first-child{margin-top:0}

/* ============================================
   フォーム(体験授業予約・お問い合わせ共通)
   ============================================ */
.form{max-width:680px}
.form-grid{display:grid;gap:20px}
.field{display:grid;gap:8px}
.field.row2{display:grid;grid-template-columns:1fr 1fr;gap:20px}
@media(max-width:560px){.field.row2{grid-template-columns:1fr}}
.field label{font-size:.82rem;font-weight:700;letter-spacing:.02em;display:flex;align-items:center;gap:8px}
.field .req{font-size:.62rem;background:var(--accent);color:#fff;padding:2px 8px;border-radius:10px;font-weight:700;letter-spacing:.04em}
.field .opt{font-size:.62rem;background:var(--paper);color:var(--dim);border:1.5px solid var(--line);padding:1px 8px;border-radius:10px;font-weight:700;letter-spacing:.04em}
.field input[type="text"],
.field input[type="email"],
.field input[type="tel"],
.field input[type="date"],
.field select,
.field textarea{
  width:100%;border:1.5px solid var(--line);border-radius:8px;padding:13px 16px;
  font:inherit;font-size:1rem;color:var(--ink);background:var(--paper);
  transition:border-color .2s,box-shadow .2s;
}
.field textarea{resize:vertical;min-height:130px;line-height:1.8}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px var(--navy-soft)}
.field .hint{font-size:.7rem;color:var(--dim)}
.field-check{display:flex;align-items:flex-start;gap:10px;font-size:.8rem;color:var(--dim)}
.field-check input{margin-top:4px}
/* ハニーポット(人には見えず、botの自動入力だけ拾うための隠しフィールド) */
.hp-field{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;opacity:0}
.form-submit{margin-top:6px}
.form-note{font-size:.74rem;color:var(--dim);margin-top:18px;line-height:1.9}
.form-msg{display:none;border-radius:10px;padding:18px 20px;font-size:.86rem;line-height:1.8;margin-bottom:24px}
.form-msg.is-show{display:block}
.form-msg.ok{background:var(--navy-soft);color:var(--navy-deep);border:1.5px solid var(--navy)}
.form-msg.err{background:rgba(180,84,74,.08);color:var(--danger);border:1.5px solid var(--danger)}

/* ============================================
   ご利用者様・保護者・塾生の声
   ============================================ */
.voice-list{display:grid;gap:0;border-top:1px solid var(--line)}
.voice-item[hidden]{display:none!important}
.voice-item{display:grid;grid-template-columns:240px 1fr;gap:32px;padding:48px 0;border-bottom:1px solid var(--line);align-items:start}
.voice-item--rev{grid-template-columns:1fr 240px}
.voice-item--rev .voice-photo{order:2}
@media(max-width:760px){
  .voice-item,.voice-item--rev{grid-template-columns:1fr;padding:36px 0}
  .voice-item--rev .voice-photo{order:0}
}
.voice-photo .ph{aspect-ratio:4/3;border-radius:12px;border:1px solid var(--line)}
.voice-body .badge{margin-bottom:14px}
.voice-body .relation{font-size:.8rem;color:var(--dim);margin-bottom:2px}
.voice-body .name-note{font-family:"Zen Old Mincho",serif;font-size:1rem;font-weight:700;margin-bottom:20px}
.voice-qa{display:grid;gap:18px}
.voice-qa .q{font-size:.86rem;font-weight:700;color:var(--navy);margin-bottom:6px}
.voice-qa .a{font-size:.86rem;color:var(--ink)}

.voice-empty{padding:40px 4px;text-align:center;color:var(--dim);font-size:.86rem;display:none}
.voice-empty.is-visible{display:block}

.voice-mini-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
@media(max-width:900px){.voice-mini-grid{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.voice-mini-grid{grid-template-columns:1fr;max-width:420px;margin:0 auto}}
.voice-mini{display:block;background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:22px 22px 20px;transition:transform .25s var(--ease),box-shadow .25s var(--ease);color:inherit}
.voice-mini:hover{transform:translateY(-4px);box-shadow:0 16px 32px rgba(31,39,53,.1)}
.voice-mini .badge{margin-bottom:12px}
.voice-mini .relation{font-size:.74rem;color:var(--dim);margin-bottom:2px}
.voice-mini .name-note{font-family:"Zen Old Mincho",serif;font-size:.88rem;font-weight:700;margin-bottom:14px}
.voice-mini .q{font-size:.78rem;font-weight:700;margin-bottom:6px;color:var(--navy)}
.voice-mini .a{font-size:.78rem;color:var(--dim);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* ============================================
   共通フッター
   ============================================ */
.ft{margin-top:96px;border-top:1px solid var(--line);padding:56px 28px 30px;background:var(--navy-deep);color:rgba(255,255,255,.82)}
.ft-in{max-width:1120px;margin:0 auto;display:flex;justify-content:space-between;flex-wrap:wrap;gap:40px}
.ft-brand .logo .txt b{color:#fff}
.ft-brand .logo .mark{background:var(--gold);border-color:#fff}
.ft-brand address{font-style:normal;font-size:.78rem;color:rgba(255,255,255,.6);line-height:2.1;margin-top:16px}
.ft-cols{display:flex;gap:52px;flex-wrap:wrap}
.ft-col h4{font-size:.68rem;letter-spacing:.08em;color:rgba(255,255,255,.5);margin-bottom:14px}
.ft-col ul{display:flex;flex-direction:column;gap:10px;font-size:.8rem}
/* フッターの主要リンクも下線が左から走るホバー演出(静的なtext-decorationから変更) */
.ft-col ul a{
  display:inline-block;color:rgba(255,255,255,.85);
  background-image:linear-gradient(var(--gold),var(--gold));background-repeat:no-repeat;background-position:left bottom;background-size:0 1px;
  transition:background-size .3s var(--ease),color .2s;
}
.ft-col ul a:hover{color:var(--gold);background-size:100% 1px}
.ft .cp{max-width:1120px;margin:36px auto 0;font-size:.64rem;color:rgba(255,255,255,.4);letter-spacing:.04em;border-top:1px solid rgba(255,255,255,.14);padding-top:16px}
@media(max-width:760px){
  .ft-in{gap:32px}
  .ft-cols{gap:32px;width:100%}
}

/* ============================================
   スクロールリビール(演出6)
   一覧コンテナの親要素には.rvを付けず、各アイテム個別に.rvを付ける方針。
   介護施設HPで「一覧コンテナ親に.rvが付き高さ6800px超でリビール発火条件
   15%を物理的に満たせずカード群が表示されない」バグを踏んだため、
   本サイトでは list/grid の親コンテナ(.course-grid, .voice-list等)には
   .rvを付与しない。各カード/各行に.rvまたは.rv-popを個別に付ける。
   ============================================ */
.rv{opacity:0;transform:translateY(14px);transition:opacity .4s var(--ease),transform .4s var(--ease)}
.rv.on{opacity:1;transform:translateY(0)}
.rv-d1{transition-delay:.06s}
.rv-d2{transition-delay:.12s}
.rv-d3{transition-delay:.18s}
.rv-d4{transition-delay:.24s}

/* 画像の「ピント合い」演出: opacity+scale+blurが同時に収束する */
.rv-pop{opacity:0;transform:scale(.97);filter:blur(6px);transition:opacity .6s var(--ease),transform .6s var(--ease),filter .6s var(--ease)}
.rv-pop.on{opacity:1;transform:scale(1);filter:blur(0)}
.rv-pop-d1{transition-delay:.05s}
.rv-pop-d2{transition-delay:.1s}
.rv-pop-d3{transition-delay:.15s}
.rv-pop-d4{transition-delay:.2s}
.rv-pop-d5{transition-delay:.25s}
.no-js .rv-pop{opacity:1;transform:none}
@media (prefers-reduced-motion: reduce){
  .rv-pop{transition:opacity .5s ease!important;transform:none!important}
}

/* ============================================
   no-js フォールバック(JS無効環境・検索クローラー対策)
   ============================================ */
.no-js .rv{opacity:1;transform:none}
.no-js .loader{display:none}
.no-js .faq-a{max-height:none}

/* ============================================
   ローダー
   ============================================ */
.loader{
  position:fixed;inset:0;z-index:200;background:var(--navy-deep);
  display:flex;align-items:center;justify-content:center;
  transition:opacity .5s ease,visibility .5s ease;
}
.loader .mark{
  width:56px;height:56px;border-radius:50%;background:var(--navy);color:#fff;border:1.5px solid var(--gold);
  font-family:"Zen Old Mincho",serif;font-weight:700;font-size:1.4rem;display:grid;place-items:center;
  opacity:0;transform:scale(.82);
  animation:loaderIn .8s var(--ease) forwards;
}
@keyframes loaderIn{
  0%{opacity:0;transform:scale(.82)}
  55%{opacity:1;transform:scale(1.05)}
  100%{opacity:1;transform:scale(1)}
}
.loader.is-hidden{opacity:0;visibility:hidden;pointer-events:none}
.loader.is-skip{display:none}

/* ============================================
   ページ遷移カーテン(演出11。js/main.jsで開閉。全ページ共通静的マークアップ)
   内部リンククリック時、濃紺→ゴールドの2枚パネルが覆ってから遷移する。
   ============================================ */
.page-curtain{position:fixed;inset:0;z-index:250;pointer-events:none;display:flex}
.page-curtain .pc-panel{position:absolute;top:0;bottom:0;width:56%;transition:transform .6s var(--ease)}
.page-curtain .pc-1{left:0;background:var(--navy-deep);transform:translateX(-100%)}
.page-curtain .pc-2{right:0;background:var(--gold);transform:translateX(100%);transition-delay:.06s}
.page-curtain.is-covering .pc-1,
.page-curtain.is-covering .pc-2{transform:translateX(0)}
.no-js .page-curtain{display:none!important}

/* ============================================
   フォトウォール・ヒーロー(演出3。旧マウスパララックスの代わり)
   3カラム(モバイル2カラム)のタイルが縦に無限ループ。中央カラムは
   逆方向に流れる。タイルは当面SVGプレースホルダ。
   ============================================ */
.hero-photowall{
  position:absolute;top:0;right:0;bottom:0;width:min(48vw,480px);z-index:0;
  display:flex;gap:14px;padding:0 22px;pointer-events:none;
  -webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 16%,#000 84%,transparent 100%);
  mask-image:linear-gradient(to bottom,transparent 0%,#000 16%,#000 84%,transparent 100%);
}
.pw-col{flex:1;overflow:hidden;position:relative;min-width:0}
.pw-track{display:flex;flex-direction:column;gap:14px;width:100%;animation:pwDown 28s linear infinite}
.pw-col-b .pw-track{animation-name:pwUp;animation-duration:24s}
.pw-col-c .pw-track{animation-duration:34s}
.pw-tile{flex-shrink:0;width:100%;aspect-ratio:3/4;border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.16)}
.pw-tile img{width:100%;height:100%;object-fit:cover}
/* 実写タイル(images/*-photo.webp)。イラストタイルと同じ.pw-tileの角丸+overflow:hiddenで
   自然にクロップされるが、object-fit:coverを明示して縦横比が崩れないようにしている
   (彩度・色味は加工しない) */
.pw-tile img.pw-photo{object-fit:cover;object-position:center}
@keyframes pwDown{from{transform:translateY(-50%)}to{transform:translateY(0)}}
@keyframes pwUp{from{transform:translateY(0)}to{transform:translateY(-50%)}}
@media(max-width:880px){
  .hero-photowall{position:absolute;inset:0;width:auto;right:auto;left:0;padding:0 14px;opacity:.28}
  .pw-col-c{display:none}
}
@media (prefers-reduced-motion: reduce){
  .pw-track{animation:none!important;transform:none!important}
}

/* ============================================
   教室のようすフォトバンド(演出7・Ken Burns風クロスフェード。CSSのみ)
   初期はSVGプレースホルダ3枚。実写差し替え時も構造は変えず<img> src差替のみでよい。
   ============================================ */
.photo-band{max-width:1120px;margin:0 auto;padding:88px 24px 56px}
.photo-band-stage{
  position:relative;aspect-ratio:21/9;border-radius:16px;overflow:hidden;
  border:1px solid var(--line);
}
.pb-img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transform:scale(1);
  animation:pbFade 18s ease-in-out infinite, pbZoom 18s ease-out infinite;
}
.pb-img-1{animation-delay:0s,0s}
.pb-img-2{animation-delay:6s,6s}
.pb-img-3{animation-delay:12s,12s}
@keyframes pbFade{
  0%{opacity:0}
  4%{opacity:1}
  30%{opacity:1}
  36%{opacity:0}
  100%{opacity:0}
}
@keyframes pbZoom{
  0%{transform:scale(1)}
  100%{transform:scale(1.12)}
}
@media(max-width:640px){.photo-band-stage{aspect-ratio:4/3}}
@media (prefers-reduced-motion: reduce){
  .pb-img{animation:none!important;transform:none!important;opacity:0}
  .pb-img-1{opacity:1}
}

/* ============================================
   縦書きラベル(演出8。セクション脇の和文アクセント)
   ============================================ */
.vert-label{
  position:absolute;top:50%;transform:translateY(-50%);z-index:1;
  writing-mode:vertical-rl;text-orientation:upright;
  font-family:"Zen Old Mincho",serif;font-weight:700;
  font-size:.82rem;letter-spacing:.34em;color:var(--navy);opacity:.32;
  pointer-events:none;
}
.band .vert-label{color:#fff;opacity:.28}
.vert-label.right{right:-4px}
.vert-label.left{left:-4px}
@media(max-width:900px){.vert-label{display:none}}

/* ============================================
   無限テキストマーキー帯(演出5・セクション区切り用。CSSキーフレームのみ)
   ============================================ */
.text-marquee{border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden;background:var(--navy)}
.text-marquee-track{display:flex;width:max-content;gap:52px;padding:15px 0;animation:textMarquee 32s linear infinite}
.text-marquee-track span{
  display:inline-flex;align-items:center;gap:52px;
  font-family:"Zen Old Mincho",serif;font-weight:700;font-size:.92rem;letter-spacing:.06em;
  color:#fff;white-space:nowrap;
}
.text-marquee-track span::before{content:"—";color:var(--gold)}
@keyframes textMarquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ============================================
   モーション低減設定
   ============================================ */
@media (prefers-reduced-motion: reduce){
  *{animation:none!important;transition:none!important}
  html{scroll-behavior:auto!important}
  .rv{opacity:1!important;transform:none!important}
  .rv .label .no{opacity:1!important;transform:none!important}
  h2::after{transform:scaleX(1)!important}
  .loader{display:none!important}
  .page-curtain{display:none!important}
  body.is-hijack .smooth{position:static!important;transform:none!important}
}

/* デモ用トースト(tel:リンク押下時の案内) */
.demo-toast{
  position:fixed;left:50%;bottom:96px;transform:translateX(-50%) translateY(8px);
  z-index:200;max-width:calc(100vw - 32px);
  background:var(--ink);color:#fff;
  font-size:.8rem;letter-spacing:.02em;line-height:1.7;
  padding:12px 20px;border-radius:10px;box-shadow:0 10px 28px rgba(31,39,53,.28);
  opacity:0;pointer-events:none;transition:opacity .35s var(--ease),transform .35s var(--ease);
}
.demo-toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

/* ============================================
   紺地(navy-deep)上で使う白アウトラインボタン用モディファイア
   .btn.lineは既定でbackground:var(--paper)(白)のため、文字色だけを
   白にインラインstyleで上書きすると背景が白のまま残り、白文字が
   読めなくなる(ヒーロー「コースを見る」・フルスクリーンメニュー
   「電話で相談する」で発生していた)。このクラスを付けるだけで
   背景透過+白縁・白文字になり、ホバー時は白地×ネイビー文字に反転する。
   ============================================ */
.btn.line.on-dark{background:transparent;border-color:#fff;color:#fff}
.btn.line.on-dark:hover{background:#fff;color:var(--navy);border-color:#fff}

/* ============================================
   コースかんたん診断(演出/機能追加。COURSES_DATAのdiagnosisから
   学年・目的の選択肢を自動生成し、その場で該当コースを表示する)
   ============================================ */
.diag{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:var(--sp-4);margin-top:var(--sp-5)}
.diag-title{font-family:"Zen Old Mincho",serif;font-size:1.06rem;font-weight:700;margin-bottom:6px}
.diag-lead{font-size:.82rem;color:var(--dim);margin-bottom:22px}
.diag-form{display:grid;grid-template-columns:1fr 1fr auto;gap:16px;align-items:end}
@media(max-width:700px){.diag-form{grid-template-columns:1fr}}
.diag-form .btn{white-space:nowrap;justify-content:center}
.diag-result{margin-top:26px}
.diag-result[hidden]{display:none}
.diag-result-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
@media(max-width:620px){.diag-result-grid{grid-template-columns:1fr}}
.diag-empty{padding:20px 22px;background:var(--navy-soft);border-radius:10px;font-size:.86rem;color:var(--ink);line-height:1.9}
.diag-empty a{color:var(--navy);font-weight:700;text-decoration:underline}

/* ============================================
   期間限定告知バナー(CMS・campaigns-data.js駆動。index.htmlのみ)
   ============================================ */
.campaign-banner{background:var(--navy-soft);border-bottom:1px solid var(--line)}
.campaign-banner[hidden]{display:none!important}
.cb-in{max-width:1120px;margin:0 auto;padding:12px 24px;display:flex;align-items:center;gap:16px}
.cb-link{flex:1;min-width:0;display:flex;align-items:center;gap:14px;color:var(--ink);font-size:.82rem;transition:color .2s}
.cb-link:hover{color:var(--navy)}
.cb-link:hover .cb-arrow{transform:translateX(4px)}
.cb-tag{flex-shrink:0;font-size:.64rem;font-weight:700;letter-spacing:.03em;padding:4px 12px;border-radius:999px;background:var(--navy);color:#fff}
.cb-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cb-arrow{flex-shrink:0;color:var(--navy);font-family:"Outfit",sans-serif;transition:transform .25s var(--ease)}
.cb-close{flex-shrink:0;width:26px;height:26px;display:grid;place-items:center;color:var(--dim);font-size:1rem;border-radius:50%;transition:background .2s,color .2s}
.cb-close:hover{background:rgba(31,39,53,.08);color:var(--ink)}
@media(max-width:640px){.cb-title{white-space:normal}}

