@charset "UTF-8";

/* ==========================================================================
   KDU Corporate Site - print.css
   --------------------------------------------------------------------------
   役割：印刷時の最適化（ナビ・装飾の除去／コンテンツ重視／URL表示／改ページ制御）
   出自：短大サイト common.css の @media print セクション（L937-1020）
   読込：<link rel="stylesheet" href="/assets/css/print.css" media="print">
   方針：
     - 学科バリアントは含めない（印刷側に元々依存なし）
     - H2自動型アコーディオン（.c-accordion-*）は改名対象外。そのまま全展開
     - ナビ／フッターのクラス名は nav.css（.p-header / .p-gnav /
       .c-mega-menu / .p-footer 系）に整合済み（Step1-A）
     - ヘッダー／フッターは「最小構成」として position:static 化（短大方式）
     - 重要なお知らせバー（.p-notice）は時限情報のため印刷では非表示
   注記：
     - @media print で二重ガード（media="print" 指定でも単体で安全に動作）
   ========================================================================== */

@media print {

  /* ======================================================================
     1. ページ全体の基本設定
     ====================================================================== */
  html, body {
    width: 100%;
    min-width: auto;
    background-color: #fff;
    color: #000;
  }

  body {
    padding-top: 0; /* 固定ヘッダー用の余白を解除 */
    transform: none;
  }

  /* 画像はみ出し防止 */
  img {
    max-width: 100% !important;
  }


  /* ======================================================================
     2. 非コンテンツ要素を非表示（ナビ・お知らせ・フッター上部リンク）
     --------------------------------------------------------------------
     クラス名は nav.css（Step1-A）に整合
     ====================================================================== */
  html body .p-header__tool,      /* ツールナビ（アクセス/問合せ/言語/印刷/検索） */
  html body .p-gnav,              /* グローバルナビ */
  html body .c-mega-menu,         /* メガメニュー */
  html body .p-header__hamburger, /* SPハンバーガーボタン */
  html body .c-sp-nav,            /* SPナビ オーバーレイ */
  html body .p-notice,            /* 重要なお知らせバー（時限情報のため除外） */
  html body .p-breadcrumb,        /* パンくず（ナビゲーション要素） */
  html body .p-footer,            /* フッター上部：カテゴリリンク（サイトマップ相当） */
  html body .p-footer-bottom__links, /* フッター下部UIリンク（操作用・印刷で機能せず） */
  html body .p-footer__pagetop {  /* ページトップへ戻る（操作用・印刷で機能せず） */
    display: none;
  }


  /* ======================================================================
     3. ヘッダー・フッターの最小構成（sticky/全幅背景を解除）
     --------------------------------------------------------------------
     残すのは：ヘッダーのロゴ、フッター下部（ロゴ・住所・コピーライト）
     ====================================================================== */
  html body .p-header {
    position: static;
    display: block;
    border-bottom: 1px solid var(--color-border-light);
  }

  /* メインヘッダー：ロゴのみ残す（ナビは §2 で非表示） */
  html body .p-header__main .inner {
    display: block;
    padding-top: 10px;
    padding-bottom: 10px;
  }

  /* ロゴは表示（印刷用に縮小） */
  html body .p-header__logo {
    width: 160px;
  }

  /* フッター下部：白背景・通常フローで最小表示 */
  html body .p-footer-bottom {
    position: static;
    display: block;
    background-color: #fff;
    color: #000;
    border-top: 1px solid var(--color-border-light);
    padding: 16px 0;
  }

  html body .p-footer-bottom__inner {
    display: block;
  }

  /* --- 下層ページ KVビジュアル（.c-mv）：タイトルは残し、紺背景/画像/装飾を除去 ---
     見出しは文書の識別情報として残す。背景オーバーレイ・影・大余白は省く。 */
  html body .c-mv {
    position: static;
    min-height: 0;
    background: none !important;
    color: #000;
    padding-top: 20px;
    padding-bottom: 16px;
    border-bottom: 2px solid var(--color-main);
  }

  html body .c-mv::after {
    display: none; /* ブランドカラーのオーバーレイを除去 */
  }

  html body .c-mv__title {
    color: #000;
    text-shadow: none;
  }

  /* --- KVとh1の間の空白を詰める ---
     .c-box-content の padding-top（common.css・全下層ページ共通で85px）と、
     h1（.c-heading-1）の margin-top（normalize由来・未上書きのため0.67em≒17px）
     が印刷側で一切調整されておらず、KVの直後に約102pxの空白を生んでいたため。
     common.cssは変更しない方針のため、詳細度を上げてprint側で上書きする。 */
  html body .c-box-content {
    padding-top: 16px;
  }
  html body .c-heading-1 {
    margin-top: 8px;
  }


  /* ======================================================================
     4. アコーディオンの全展開（H2自動型 = c-accordion-*）
     ====================================================================== */
  html body .c-accordion-content {
    display: block;
    max-height: none !important; /* common.js がインラインstyleで max-height:0px を設定する場合に負けないように */
    overflow: visible;
    opacity: 1;
    visibility: visible;
    border-top: 1px solid var(--color-border-light);
  }

  html body .c-accordion-trigger {
    cursor: default;
    pointer-events: none;
  }

  html body .c-accordion-trigger::after,
  html body .c-faq__arrow {
    display: none;
  }

  /* ======================================================================
     4-2. 「すべて開く」ボタン（画面専用UIのため印刷では非表示）
     ====================================================================== */
  html body .c-accordion-expandAll {
    display: none;
  }


  /* ======================================================================
     5. リンクの URL を併記（コンテンツ内の外部・PDF系リンクのみ）
     --------------------------------------------------------------------
     ページ内アンカー（#）・JS リンク・アイコン由来の擬似要素は対象外
     ====================================================================== */
  .c-box-content a[href^="http"]::after,
  .c-box-content a[href$=".pdf"]::after {
    content: " (" attr(href) ")";
    font-size: 0.85em;
    color: #555;
    word-break: break-all;
  }

  /* メール・電話・ページ内アンカーには URL を付けない */
  .c-box-content a[href^="#"]::after,
  .c-box-content a[href^="mailto:"]::after,
  .c-box-content a[href^="tel:"]::after,
  .c-box-content a[href^="javascript:"]::after {
    content: "";
  }


  /* ======================================================================
     6. 改ページ制御（見出し・表・カードの分断を防ぐ）
     ====================================================================== */
  h1, h2, h3, h4,
  .c-heading-1, .c-heading-2, .c-heading-lvl3, .c-heading-lvl4 {
    break-after: avoid;
    page-break-after: avoid;
  }

  figure, .c-card, .c-info-card,
  .c-faq__item, .c-accordion-item {
    break-inside: avoid;
    page-break-inside: avoid;
  }

  /* 表：table・.c-table-wrapper 単位のbreak-inside:avoidは廃止。
     行数の多い表がまるごと次ページへ送られ、直前のページに
     大きな空白を生む原因になっていたため。代わりに行(tr)単位で分断を防ぎ、
     ページを跨ぐ場合は見出し行（thead）を繰り返す方式にする。 */
  thead {
    display: table-header-group;
  }
  tr {
    break-inside: avoid;
    page-break-inside: avoid;
  }

  /* 段落・リスト項目内での分断を抑制 */
  p, li {
    orphans: 3;
    widows: 3;
  }


  /* ======================================================================
     7. カラー出力許可
     ====================================================================== */
  * {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }


  /* ======================================================================
     8. トップページ：Swiperスライダーの印刷対応
     --------------------------------------------------------------------------
     紙は情報を読むためのもので、横スライドの見た目を再現する必要はない。
     対象：MV（.p-mv）／バナー（.p-banner-slider）／関連施設カルーセル（.p-related）。
     いずれも <div class="... swiper"> というCDN Swiperの基底クラスを持ち、
     overflow:hidden はそこ（swiper-bundle.min.css・変更不可）由来のため、
     ここで明示的に上書きする。
     ====================================================================== */

  /* 矢印・ページネーションは操作用のため共通で非表示 */
  html body .swiper-pagination,
  html body .swiper-button-prev,
  html body .swiper-button-next,
  html body .p-mv__pagination,
  html body .p-banner-slider__prev,
  html body .p-banner-slider__next,
  html body .p-related__prev,
  html body .p-related__next {
    display: none !important;
  }

  /* --- MV：1枚だけ表示し、通常フローに戻したうえで高さをA4の約1/3に抑える --- */
  html body .p-mv,
  html body .p-mv__slider,
  html body .p-mv__slide,
  html body .p-mv .swiper {
    overflow: visible;
  }
  html body .p-mv .swiper-wrapper {
    display: block;
    transform: none !important;
  }
  html body .p-mv .swiper-slide:not(:first-child) {
    display: none;
  }
  html body .p-mv__img {
    aspect-ratio: auto;
    height: 300px;
    max-height: 300px;
  }

  /* --- バナースライダー：装飾のため非表示（スライド自体を出す必要なし） --- */
  html body .p-banner-slider {
    display: none;
  }

  /* --- 関連施設カルーセル：装飾ではなくリンク集のため、全9件を3列で表示
     （縦1列だと長く伸びるため3列に変更） --- */
  html body .p-related .swiper {
    overflow: visible;
  }
  html body .p-related .swiper-wrapper {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 16px;
    transform: none !important;
  }
  html body .p-related__item {
    display: block;
    width: auto;
  }


  /* ======================================================================
     9. .c-cardGrid の改ページ制御・画像サイズ
     --------------------------------------------------------------------------
     前回 display:block に解除した結果、カードが紙幅いっぱいの1列表示になり
     画像が巨大化したため撤回。display:grid を維持したまま、印刷用の列数を
     PC と同じ値で明示し、カード画像側に高さ上限を設けて対応する。
     画面用のSP上書き（components.css・@media (max-width:768px)。screen限定
     ではなく幅条件のみのため、印刷時の幅次第では評価されうる）に列数で
     負けないよう、列数指定には !important を付ける。
     .c-cardGrid__item の break-inside:avoid は維持。トップページ（教育・研究／
     医療）・カテゴリートップ（education 等の .c-cardGrid--catTop.c-cardGrid--4）・
     下層ページ（donation・campusmap・studentcount・research/staff・sitemap
     ほか）すべての .c-cardGrid--2/--3/--4 に共通で効く。
     ====================================================================== */
  html body .c-cardGrid {
    display: grid !important;
  }
  html body .c-cardGrid--2 {
    grid-template-columns: repeat(2, 1fr) !important;
  }
  html body .c-cardGrid--3 {
    grid-template-columns: repeat(3, 1fr) !important;
  }
  html body .c-cardGrid--4 {
    grid-template-columns: repeat(4, 1fr) !important;
  }

  html body .c-cardGrid__item {
    break-inside: avoid;
    page-break-inside: avoid;
  }

  /* カード画像の高さ上限（A4縦=約1123pxの1/4=約281pxより少し小さく抑える）。
     aspect-ratio:4/3（components.css）は維持されるため、列数が多く画像幅が
     狭い場合は自然に収まりmax-heightは効かない。2列など幅が広い場合のみ
     max-heightが働き、object-fit:coverで上下がクロップされる。 */
  html body .c-cardGrid__img,
  html body .c-cardGrid__img img {
    max-height: 220px;
  }


  /* ======================================================================
     10. その他トップページのセクション
     --------------------------------------------------------------------------
     .p-about・.p-medical の背景色/背景画像は上記7節の print-color-adjust:exact
     （全称セレクタ）で既にカバー済みのため、ここでの追加指定は無し。
     .p-about__layout は2カラムの単純グリッド（.c-cardGridのような繰り返し行を
     持たない）で、9節と同種の不安定な分断は生じにくいと判断し対象外とした。
     .p-news__layout／.p-oc__layout の列数維持は11節でまとめて扱う。
     .p-program（体験プログラムの単一カード）・.p-oc__banner（オープンキャンパス
     2枚のカード）は .c-cardGrid 同様「カード単位で分断されると読みにくい」
     構造のため、分断防止のみ追加する。
     ====================================================================== */
  html body .p-program,
  html body .p-oc__banner {
    break-inside: avoid;
    page-break-inside: avoid;
  }


  /* ======================================================================
     11. トップページのさらなるコンパクト化
     --------------------------------------------------------------------------
     .p-oc__ / .p-program__ はトップページ専用クラス（top.cssでのみ定義、
     top.cssはindex.htmlにしか読み込まれない）のため、下層ページ・カテゴリー
     トップには影響しない。
     .p-news__ 系は2026-09-07のお知らせ移行でpages/news.cssへ移設され、
     index.htmlに加えて /corporations/news/ 配下の各ページでも読み込まれる
     ようになった（print.cssはmedia="print"で全ページ共通読み込みのため、
     このブロック自体はニュース一覧・記事詳細ページの印刷時にも評価される）。
     ただし .p-news（コンテナ）／.p-news__more／.p-news__layout はトップ
     ページの§4 NEWSセクション専用の構造（バナーとの2カラム・「一覧を見る」
     リンク）でのみ使われ、一覧・記事詳細ページのマークアップには現状登場
     しないため、実害は生じていない。
     .p-news__layout／.p-oc__layout は、components.css/top.css側のSP用上書き
     （@media (max-width:768px)。screen限定でないため印刷時にも評価されうる）
     で1カラムに潰され画像が巨大化する可能性があるため、9節の.c-cardGridと
     同じ理由でPCと同じ列数を!importantで維持する。
     ====================================================================== */

  /* --- NEWS：行間・上下余白を詰め、「一覧を見る」を非表示 --- */
  html body .p-news {
    padding: 16px 0 !important;
  }
  html body .p-news__link {
    padding: 4px 0;
  }
  html body .p-news__more {
    display: none;
  }
  html body .c-heading-top {
    margin-top: 8px;
    margin-bottom: 8px;
  }

  /* --- オープンキャンパス：2列を維持し、バナー画像を縮小 --- */
  html body .p-oc {
    padding: 16px 0 !important;
  }
  html body .p-oc__layout {
    grid-template-columns: 1fr 1fr !important;
  }
  html body .p-oc__banner {
    flex-direction: row !important;
  }
  html body .p-oc__img {
    width: 55% !important;
    max-height: 140px;
  }
  html body .p-oc__img img {
    max-height: 140px;
  }

  /* --- 体験プログラム：2カラムのNEWS内バナー幅を維持し、画像を縮小 --- */
  html body .p-news__layout {
    grid-template-columns: 1fr 380px !important;
  }
  html body .p-program__img {
    max-height: 200px;
  }
  html body .p-program__img img {
    max-height: 200px;
  }

  /* --- 数字で見るKDU：帯の高さを抑える --- */
  html body .p-stats__hero {
    height: 120px !important;
  }

  /* --- 関連施設カルーセル：上下余白を詰め、円形サムネイルを縮小して1ページに収める
     （矢印/ページネーション非表示・列数のgrid化は8節で対応済み） --- */
  html body .p-related {
    padding: 16px 0 !important;
  }
  html body .p-related__icon {
    width: 45%;
  }

  /* --- 関連リンク／SNS：上下余白を詰める --- */
  html body .p-related-link {
    padding: 16px 0 !important;
  }

  /* --- 教育・研究／医療：上下余白を詰める --- */
  html body .p-edu,
  html body .p-medical {
    padding: 16px 0 !important;
  }

  /* --- About：斜め装飾（.p-about__diagonal）の高さ分だけ上余白の確保が必要なため、
     他セクションのような一律16pxへの圧縮はせず、下余白のみ詰める --- */
  html body .p-about {
    padding-bottom: 16px !important;
  }


  /* ======================================================================
     12. 下層ページ：本文中のフロー画像に高さ上限
     --------------------------------------------------------------------------
     <img>は印刷時にページ境界をまたいで分断できない（ラスター画像の仕様上の
     制約）ため、見出し直後など早い位置にある画像が現在ページの残り高さに
     収まらないと、画像ごと次ページへ送られ、直前のページに空白を生む。
     対象は「.c-box-content 内で <p> の直接の子である <img>」。
     - /local/flower/ の .c-boxCol2 内の画像（<div class="c-boxCol"><p><img>…）
     - /local/evacaution/ の本文中の素の画像（<p class="u-ta_center"><img width="545">）
     はいずれもこのパターンに一致するため、共通の1ルールでカバーできる。
     .c-cardGrid__img 配下の img（9節で個別に220px指定済み）は
     <div class="c-cardGrid__img"><a class="c-cardGrid__link"><img>… という
     入れ子で <p> の子ではないため、このセレクタには一致せず競合しない。
     値は300px（A4縦=約1123pxの1/3=約374pxより少し小さく抑え、MVの
     max-height指定と同じ考え方・同じ値に揃えた）。
     インライン指定との整合：対象画像はいずれもwidth/height属性またはCSSの
     width:auto/height:autoのみで、aspect-ratioの明示指定は無いため、
     max-heightを追加してもブラウザは縦横比を保ったまま比例縮小する
     （object-fit:coverによるクロップではなく、画像全体を縮小して収める）。
     波及範囲：/local/flower/・/local/evacaution/ 以外にも、.c-box-content内で
     <p><img></p>という素朴な構造の画像を使う他ページ（例：
     /outline/kodairenkei/ の地図画像等）にも同様に効く。既存より小さくなる
     画像が出るため、他ページでも縮小自体は許容範囲と判断したが、
     個別ページでの見た目は未確認。
     ====================================================================== */
  html body .c-box-content p > img {
    max-height: 300px;
  }


  /* ======================================================================
     13. 見出し間マージンの圧縮
     --------------------------------------------------------------------------
     .c-heading-2 / .c-heading-lvl3 / .c-heading-lvl4 の margin-top
     （components.css・全下層ページ共通のトークン値）が印刷時に一切調整されて
     おらず、見出しが直接連続するページ（/local/seminar/ 等）でh1〜最初の
     本文までの間に大きな余白を生んでいたため。break-after:avoidは維持する
     （common.css・components.cssは変更しない）。
     h2/h3/h4 のタグセレクタ側には margin 指定が無い（bareのh1のみnormalize
     由来の margin: 0.67em 0 があり、これは前回 .c-heading-1 側で対応済み）。
     margin-bottom は既存値がいずれも margin-top より小さく、見出しと本文の
     間隔として妥当な範囲のため、今回は据え置く（現状値は下表を参照）。
     ------------------------------------------------------------------------
     margin-top：変更前 → 変更後
       .c-heading-2    48px(--spacing-2xl) → 16px
       .c-heading-lvl3 32px(--spacing-xl)  → 12px
       .c-heading-lvl4 24px(--spacing-lg)  →  8px
     margin-bottom（据え置き・参考）
       .c-heading-1    約37.5px(1.5em)
       .c-heading-2    28px(1em)
       .c-heading-lvl3 24px(--spacing-lg)
       .c-heading-lvl4 16px(--spacing-md)
     ====================================================================== */
  html body .c-heading-2 {
    margin-top: 16px;
  }
  html body .c-heading-lvl3 {
    margin-top: 12px;
  }
  html body .c-heading-lvl4 {
    margin-top: 8px;
  }
}
