
/* Event Program & Schedule — [eps_schedule] 用スタイル。
   gen_schedule.py の CSS + card_css.txt を .eps-schedule 配下へスコープして生成。 */
.eps-schedule{--primary:#0096fa;--text:#111827;--text-sub:#475569;--text-dis:#64748b;--border:#e2e8f0;
 --bg:#f1f5f9;--surface:#fff;--accent-light:#e6f4ff;--radius:6px;
 --shadow-1:0 1px 3px rgba(0,0,0,.1);--shadow-2:0 6px 20px rgba(0,0,0,.16);}.eps-schedule *, .eps-schedule *::before, .eps-schedule *::after{box-sizing:border-box;margin:0;padding:0;}.eps-schedule{font-family:"Noto Sans JP","Hiragino Kaku Gothic ProN","Hiragino Sans",Meiryo,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
 background:transparent;color:var(--text);font-size:14px;line-height:1.5;}.eps-schedule .site-header{background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow-1);}.eps-schedule .header-inner{max-width:1200px;margin:0 auto;padding:14px 16px 12px;}.eps-schedule .conf-label{font-size:0.82em;color:var(--text-sub);margin-bottom:2px;}.eps-schedule .conf-title{font-size:0.93em;font-weight:700;margin-bottom:6px;}.eps-schedule .page-title{font-size:clamp(1.21em,3vw,1.71em);font-weight:800;color:var(--primary);}.eps-schedule .wrap{max-width:1200px;margin:0 auto;padding:16px;}.eps-schedule .hint{font-size:0.86em;color:var(--text-sub);margin:0 0 12px;}.eps-schedule .legend{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 16px;padding:11px 13px;
 background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:0.86em;box-shadow:var(--shadow-1);}.eps-schedule .lg{display:inline-flex;align-items:center;gap:6px;}.eps-schedule .lg-sw{width:14px;height:14px;border-radius:4px;display:inline-block;}
/* 凡例クリックで区分を絞り込む（2026-07-27）。ボタン化しても見た目は従来の凡例のまま。 */
.eps-schedule .lg-btn{background:none;border:1px solid transparent;border-radius:999px;padding:2px 9px 2px 6px;
 font:inherit;color:inherit;cursor:pointer;line-height:1.5;}
.eps-schedule .lg-btn:hover{background:rgba(0,0,0,.06);}
.eps-schedule .lg-btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px;}
.eps-schedule .lg-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);font-weight:700;}
.eps-schedule .lg-off{opacity:.45;} /* 該当セッションが無い凡例（押せない）。 */
.eps-schedule .lg-clear{background:none;border:1px solid var(--border);border-radius:999px;padding:2px 10px;
 font:inherit;color:var(--text-sub);cursor:pointer;line-height:1.5;}
.eps-schedule .lg-clear:hover{background:rgba(0,0,0,.06);}
/* 絞込で対象外になった枠。枠は絶対配置なので display:none にしても時間軸・列の高さは変わらない。 */
.eps-schedule .sess-blk.cat-filtered{display:none;}.eps-schedule .day-board{margin-bottom:32px;}.eps-schedule .day-title{font-size:1.21em;font-weight:800;margin:0 0 10px;padding-bottom:6px;border-bottom:3px solid var(--primary);}.eps-schedule .day-tabs{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 14px;}/* 印刷ボタンは日タブの右端へ。タブと同じ形にすると押し分けにくいので、枠線だけの控えめな見た目にして auto margin で離す。*/.eps-schedule .eps-print-btn{font:inherit;font-size:0.93em;font-weight:700;padding:8px 16px;cursor:pointer;margin-left:auto;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-sub);box-shadow:var(--shadow-1);transition:color .15s,border-color .15s;}.eps-schedule .eps-print-btn:hover{color:var(--primary);border-color:var(--primary);}.eps-schedule .day-tab{font:inherit;font-size:1.07em;font-weight:700;padding:8px 26px;cursor:pointer;
 border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-sub);
 box-shadow:var(--shadow-1);transition:color .15s,background .15s,border-color .15s;}.eps-schedule .day-tab:hover{color:var(--primary);border-color:var(--primary);}.eps-schedule .day-tab.active{background:var(--primary);border-color:var(--primary);color:#fff;}.eps-schedule .day-board{display:none;}.eps-schedule .day-board.active{display:block;}.eps-schedule .board{display:flex;background:var(--surface);border:1px solid var(--border);
 border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-1);}.eps-schedule .hour-col{position:relative;width:46px;flex-shrink:0;border-right:1px solid var(--border);background:#f8fafc;}.eps-schedule .hour-mark{position:absolute;left:0;width:46px;text-align:right;padding-right:6px;
 font-size:0.82em;color:var(--text-sub);transform:translateY(-7px);}/* 先頭の時刻（会期の開始時）は、目盛りを線に合わせる translateY(-7px) のぶんだけ盤面の
   上辺からはみ出し、盤面の overflow:hidden で上が切れる（実測 6px。積み残しの整理 2026-09-01）。
   先頭だけずらさずに全部見せる（印刷用CSSでも同じ扱いにしてある）。
   先頭の線は盤面の上辺そのものなので、ずらさなくても線と読み違えない。 */
.eps-schedule .hour-col .hour-mark:first-child{transform:none;}
.eps-schedule .hour-line{position:absolute;left:46px;width:2000px;border-top:1px dashed #eef2f6;}.eps-schedule .venue-cols{position:relative;display:flex;flex:1;}.eps-schedule .venue-col{flex:1 1 0;min-width:0;position:relative;border-right:1px solid var(--border);
 transition:flex-grow .45s cubic-bezier(.4,0,.2,1),flex-basis .45s cubic-bezier(.4,0,.2,1),opacity .3s;}.eps-schedule .venue-col:last-child{border-right:none;}.eps-schedule .venue-col-head{position:sticky;top:0;z-index:2;text-align:center;font-weight:700;font-size:0.93em;
 padding:9px 4px;background:#f8fafc;border-bottom:1px solid var(--border);cursor:pointer;
 transition:background .2s;}.eps-schedule .venue-col-head:hover{background:#eaf3fb;color:var(--primary);}.eps-schedule .venue-col-head::after{content:" ⤢";font-size:0.82em;opacity:.5;}.eps-schedule .venue-col-body{position:relative;}
/* venue focus mode */
.eps-schedule .venue-cols.focus .venue-col{flex-grow:0;flex-basis:0;opacity:0;pointer-events:none;overflow:hidden;}.eps-schedule .venue-cols.focus .venue-col.focused{flex-grow:1;flex-basis:100%;opacity:1;pointer-events:auto;}.eps-schedule .venue-cols.focus .joint-overlay{display:none;}.eps-schedule .sess-blk{position:absolute;left:5px;right:5px;border-radius:var(--radius);color:#fff;
 padding:5px 8px;overflow:hidden;box-shadow:var(--shadow-1);border:1px solid rgba(255,255,255,.18);
 display:block;transition:box-shadow .15s,filter .15s;}.eps-schedule .sess-blk.expandable{cursor:pointer;}.eps-schedule .sess-blk.expandable .blk-main{position:relative;}.eps-schedule .sess-blk.expandable .blk-main::after{content:"›";position:absolute;top:0;right:0;font-size:1.07em;
 font-weight:700;opacity:.7;transition:transform .2s;}.eps-schedule .sess-blk.expandable:hover{filter:brightness(1.07);box-shadow:var(--shadow-2);}.eps-schedule .blk-head{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;padding-right:14px;}.eps-schedule .blk-time{font-size:0.79em;font-weight:600;opacity:.92;white-space:nowrap;flex-shrink:0;}.eps-schedule .blk-label{font-size:0.93em;font-weight:700;line-height:1.25;
 display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
 word-break:break-word;min-width:0;}.eps-schedule .blk-sub{font-size:0.82em;font-weight:500;opacity:.95;line-height:1.3;margin-top:2px;
 display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}.eps-schedule .blk-detail{display:none;}
/* expanded card */
.eps-schedule .sess-blk.expanded{height:auto!important;min-height:var(--blk-h);z-index:30;right:5px;
 box-shadow:var(--shadow-2);filter:none;cursor:default;}.eps-schedule .sess-blk.expanded .blk-main::after{content:"×";transform:none;}.eps-schedule .sess-blk.expanded .blk-label{-webkit-line-clamp:unset;}.eps-schedule .sess-blk.expanded .blk-detail{display:block;margin-top:8px;background:var(--surface);
 color:var(--text);border-radius:var(--radius);padding:8px 10px;
 animation:eps-fadein .25s ease;}
@keyframes eps-fadein{from{opacity:0;transform:translateY(-4px);}to{opacity:1;transform:none;}}.eps-schedule .joint-overlay{position:absolute;top:30px;left:0;width:66.666%;pointer-events:none;}.eps-schedule .joint-overlay .sess-blk{pointer-events:auto;}.eps-schedule .sess-blk.joint{left:5px;right:5px;border:1px dashed rgba(255,255,255,.55);}.eps-schedule .sess-blk.compact{padding:2px 8px;}.eps-schedule .sess-blk.compact .blk-head{flex-wrap:nowrap;gap:6px;overflow:hidden;white-space:nowrap;}.eps-schedule .sess-blk.compact .blk-label{-webkit-line-clamp:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}/* 中継（サテライト）側の枠に付ける印（2026-07-31）。同じセッションが2会場に並ぶため、
   印が無いと別セッションに見える。枠の色は主会場側と同じにして同一セッションだと分かるようにする。 */
.eps-schedule .blk-sat{font-size:0.72em;font-weight:700;line-height:1;white-space:nowrap;flex-shrink:0;
 padding:2px 6px;border-radius:999px;background:rgba(255,255,255,.28);border:1px solid rgba(255,255,255,.5);}
.eps-schedule .sess-blk.satellite{border-style:dashed;}
.eps-schedule .note{font-size:0.82em;color:var(--text-sub);margin-top:8px;}
/* ==== program card content (expanded) ==== */
.eps-schedule .session-theme-box{
      background: var(--accent-light); border-left: 3px solid var(--primary);
      border-radius: 0 var(--radius) var(--radius) 0; padding: 4px 8px; margin-bottom: 6px;
    }.eps-schedule .session-theme-label{
      font-size:0.82em; font-weight: 700; color: var(--primary);
      letter-spacing: .1em; text-transform: uppercase; margin-bottom: 1px;
    }.eps-schedule .session-theme-text{ font-size:1.07em; font-weight: 500; color: var(--text); line-height: 1.45; }.eps-schedule .chairs-row{ display: flex; align-items: flex-start; gap: 0 8px; margin-bottom: 6px; }.eps-schedule .chairs-names{
      flex: 1; min-width: 0; display: flex; flex-direction: column;
      gap: 3px;
    }.eps-schedule .chairs-role-label{
      font-size:0.86em; font-weight: 700; color: #fff;
      background: #8b1a1a; border-radius: var(--radius); padding: 1px 6px;
      white-space: nowrap; flex-shrink: 0;
    }.eps-schedule .chair-item{ font-size:1.07em; font-weight: 700; color: var(--text); min-width: 0; overflow-wrap: break-word; word-break: break-word; }.eps-schedule .chair-affil{ font-size:1em; font-weight: 400; color: var(--text-sub); }.eps-schedule .pres-group{ border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }.eps-schedule .pres-group-head{
      background: var(--primary); color: #fff;
      font-size:0.82em; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
      padding: 3px 8px;
    }.eps-schedule .pres-table{ width: 100%; border-collapse: collapse; table-layout: auto; }.eps-schedule .pres-no{
      /* 演題番号は途中で折り返さない（ユーザー報告 2026-07-27: 本番で「O-1」が1文字ずつ縦に割れた）。
         overflow-wrap:anywhere は「どこでも改行してよい」＝この要素の最小幅が1文字になる指定で、
         grid の fit-content(40%) が最小幅まで潰れると番号が縦積みになる。テーマ側が
         word-break:break-all 等を全セルへ当てている場合も同じことが起きるため、
         この要素だけは継承を明示的に打ち消す。長大な番号は列幅を広げる側に倒す（切らない）。 */
      white-space: nowrap; overflow-wrap: normal; word-break: keep-all;
      font-family: SFMono-Regular, Consolas, Menlo, monospace;
      font-size:0.86em; font-weight: 700; color: #fff; background: var(--primary);
      padding: 1px 5px; border-radius: var(--radius); display: inline-block;
    }.eps-schedule .pres-title{ font-weight: 500; color: var(--text); line-height: 1.45; font-size:1.07em; }.eps-schedule .pres-name-affil{ font-size:1em; color: var(--text-sub); margin-top: 2px; }.eps-schedule .pres-name{ font-weight: 500; color: var(--text); font-size:1.07em; }.eps-schedule .session-cosponsor{
      font-size:0.86em; color: #5a4010; background: #fef8e8;
      border: 1px solid #e8d080; border-radius: var(--radius); padding: 1px 6px;
    }.eps-schedule ruby{ ruby-align: start; padding-right: .6em; }/* 同上（プログラム側と同じ規則を保つ）。*/.eps-schedule ruby:last-of-type{ padding-right: 0; }/* 氏名の最後のルビには右余白を付けない: 直後には所属番号の <sup> や座長の（所属）が続き、そこに .6em が入ると不自然に離れる（実測 0px → 8.98px）。重なりを防ぐのは姓→名の間だけで足りる。*/.eps-schedule rt{ font-size: .7em; font-weight: normal; letter-spacing: .04em; }.eps-schedule .pres-table tr{ border-bottom: 1px solid #f0f0f0; }.eps-schedule .pres-table tr:last-child{ border-bottom: none; }.eps-schedule .pres-table tr:nth-child(even) td{ background: #fafafa; }.eps-schedule .pres-table td{ padding: 5px 6px; vertical-align: top; font-size:1.07em; overflow: hidden; }

/* ==== 抄録（details/summary・no-JS開閉） ==== */
.eps-schedule .pres-abstract{ margin-top: 4px; }
.eps-schedule .pres-abstract summary{
  cursor: pointer; color: var(--primary); font-size: 0.86em; font-weight: 600;
  user-select: none; width: fit-content;
}
.eps-schedule .pres-abstract summary:hover{ text-decoration: underline; }
.eps-schedule .pres-abstract-body{
  margin-top: 4px; padding: 8px 10px; background: var(--accent-light);
  border-radius: var(--radius); font-size: 1em; line-height: 1.8; color: var(--text);
}

/* 演題の抄録集形式（2026-07-10 ユーザー指定の並び）:
   常時表示＝〇筆頭著者（読みruby・上付き所属番号）。
   抄録（details）内＝共著者→所属一覧→本文（「、」区切り・行間圧縮）。 */
.eps-schedule .pres-presenter{ font-weight: 500; color: var(--text); font-size:1em; margin-top: 2px; line-height: 1.5; }
.eps-schedule .presenter-mark{ margin-right: 1px; }
.eps-schedule .pres-coauthors{ font-weight: 500; color: var(--text); font-size:0.93em; margin-top: 2px; line-height: 1.6; }
.eps-schedule .pres-affils{ font-size:0.86em; color: var(--text-sub); margin-top: 2px; line-height: 1.45; }
.eps-schedule .pres-author{ white-space: nowrap; }
.eps-schedule .pres-presenter sup,
.eps-schedule .pres-coauthors sup,
.eps-schedule .pres-affils sup{ color: var(--primary); font-size: 0.7em; font-weight: 600; line-height: 1; }
.eps-schedule .pres-presenter ruby rt,
.eps-schedule .pres-coauthors ruby rt{ font-size: 0.55em; color: var(--text-sub); font-weight: 400; }
/* 座長・司会のルビも演者と同じ大きさにする（ユーザー依頼 2026-07-28: 名前のはみ出し軽減）。
   .chair-item と .pres-presenter は実測で同じ 14.98px のため、同じ 0.55em で実サイズが一致する。
   色は座長の見出し性を保つため変えない（依頼はフォントサイズのみ）。 */
.eps-schedule .chair-item ruby rt{ font-size: 0.55em; }
.eps-schedule .pres-abstract{ margin-top: 2px; }
.eps-schedule .pres-abstract-body{ margin-top: 2px; }

/* 短時間枠（開会挨拶等）は文字が枠をはみ出して隣の枠と重なって読めないため、
   ホバー／キーボードフォーカスで最前面に持ち上げ、高さを内容に合わせて広げて全文を見せる
   （上下の重なり順を入れ替える。2026-07-10 ユーザー依頼）。
   :hover はホバー可能な入力装置に限定する: タッチ端末はタップで :hover が貼り付き、
   拡大した枠が隣の枠を覆ったままになるため（タッチはタップ＝クリック展開で全文を見る）。 */
@media (hover: hover){
  .eps-schedule .sess-blk:not(.expanded):hover{
    z-index: 25;
    height: auto !important;
    min-height: var(--blk-h);
    box-shadow: var(--shadow-2);
  }
}
.eps-schedule .sess-blk:not(.expanded):focus-visible{
  z-index: 25;
  height: auto !important;
  min-height: var(--blk-h);
  box-shadow: var(--shadow-2);
}
/* タッチ端末では hover 効果（明るさ・影）も貼り付くため打ち消す（Copilot指摘）。
   タップ＝クリック展開で全文を見る運用に一本化する。 */
@media (hover: none){
  .eps-schedule .sess-blk.expandable:hover{ filter: none; box-shadow: none; }
}


/* 演題テーブルは CSS grid で描く（2026-07-10 ユーザー指摘: 本文が右端で切れる）:
   table-layout:auto はズーム系環境で width:100% を無視して max-content（共著者を
   1行に並べた幅）まで広がり、本文・タイトルが右端で切れる（実測1226pxオーバー）。
   grid の max-content + minmax(0,1fr) は決定的で、番号列は内容幅・本文列は必ず残り幅に
   収まって折り返す。既存の tr 罫線・縞背景・td padding はそのまま適用される。 */
.eps-schedule .pres-table{ display: block; width: 100%; }
.eps-schedule .pres-table colgroup{ display: none; }
/* 列トラックは tbody（単一grid）で共有する: tr ごとの独立gridだと番号の文字数が行間で
   異なるとき本文の書き出し位置が行ごとにズレる（3種レビュー指摘）。番号列は fit-content(40%)
   で内容幅・上限つき（自由入力の長大な演題番号でも本文列が幅0に潰れない）。 */
.eps-schedule .pres-table tbody{ display: grid; grid-template-columns: fit-content(40%) minmax(0, 1fr); }
.eps-schedule .pres-table tr{ display: contents; }
/* 罫線は td 側に付ける（display:contents の tr はボックスを持たず border が描画されないため）。
   overflow-wrap:anywhere は長URL等の分割不能トークンの無警告切断防止（col 要素への旧指定は
   セルに作用しない死規則だった＝3種レビュー指摘）。overflow:visible は前方の td 規則の
   overflow:hidden を明示的に打ち消す（折返し表示の意図と衝突＝Copilot指摘）。 */
.eps-schedule .pres-table td{ display: block; min-width: 0; overflow: visible; overflow-wrap: anywhere; word-break: break-word; border-bottom: 1px solid #f0f0f0; }
.eps-schedule .pres-table tr:last-child td{ border-bottom: none; }

/* ============================================================
   抄録の閲覧保護（2026-07-10 ユーザー依頼）
   認証バーはショートコードのルート要素（.eps-program/.eps-schedule）の外・
   キャッシュ外で描画されるため、プラグイン固有クラスで直接スコープする。
   ロック表示（.pres-abstract-locked）はカード内＝ルート配下。
   ============================================================ */
.eps-abs-bar{ display:flex; flex-wrap:wrap; align-items:center; gap:10px;
  background:#fff8e6; border:1px solid #e6c96e; border-radius:4px;
  padding:10px 14px; margin:0 0 14px; font-size:14px; line-height:1.5; }
.eps-abs-bar-ok{ background:#eefaf0; border-color:#9fd7ac; }
.eps-abs-bar .eps-abs-status{ font-weight:700; }
.eps-abs-bar .eps-abs-form{ display:flex; align-items:center; gap:6px; margin:0; }
.eps-abs-bar .eps-abs-input{ padding:5px 8px; border:1px solid #c8c8c8; border-radius:4px;
  font-size:14px; width:12em; max-width:50vw; }
.eps-abs-bar .eps-abs-btn{ padding:5px 14px; border:none; border-radius:4px; cursor:pointer;
  background:#0096fa; color:#fff; font-weight:700; font-size:13px; }
.eps-abs-bar .eps-abs-btn:hover{ background:#0069b5; }
.eps-abs-bar .eps-abs-btn-sub{ background:#64748b; }
.eps-abs-bar .eps-abs-btn-sub:hover{ background:#475569; }
.eps-abs-bar .eps-abs-error{ color:#b32d2e; font-weight:700; }
/* 管理者が設定した案内文。flex を折り返して入力欄の「下」に丸ごと1行で置く。 */
.eps-abs-bar .eps-abs-notice{ flex-basis:100%; width:100%; margin:2px 0 0;
  color:#4b5563; font-size:13px; line-height:1.6; }
.eps-schedule .pres-abstract-locked{ background:#f6f7f7; border:1px dashed #c8c8c8; border-radius:4px;
  color:#4b5563; padding:8px 10px; margin-top:4px; font-size:0.93em; }

/* ==== 小画面（スマホ）では展開カードを全画面表示する（ユーザー依頼 2026-07-27） ====
   列内 absolute のままだと iPhone SE 幅では列が狭く、演題名・所属が折り返して情報量が稼げない。
   展開時だけ position:fixed のシートに切り替え、画面いっぱいに出して縦スクロールで読ませる。
   ※ JS 側（eps-schedule.js）も同じブレークポイントで採寸・スクロール処理を切り替える。 */
@media (max-width: 640px){
  .eps-schedule .sess-blk.expanded{
    position:fixed !important;
    top:0 !important; left:0 !important; right:0 !important; bottom:0 !important;
    width:auto !important; height:auto !important; min-height:0 !important;
    margin:0 !important; border-radius:0 !important; border:none !important;
    z-index:10000; overflow-y:auto; -webkit-overflow-scrolling:touch;
    padding:0 0 calc(16px + env(safe-area-inset-bottom, 0px));
    box-shadow:none;
  }
  /* ヘッダ（時間・区分名・×）は上端に貼り付けて、長い本文を送っても閉じられるようにする。 */
  .eps-schedule .sess-blk.expanded .blk-main{
    position:sticky; top:0; z-index:2; background:inherit;
    padding:calc(10px + env(safe-area-inset-top, 0px)) 44px 8px 14px;
    box-shadow:0 1px 6px rgba(0,0,0,.18);
  }
  /* ×は指で押せる大きさに（44px 角の当たり判定）。 */
  .eps-schedule .sess-blk.expanded .blk-main::after{
    top:calc(10px + env(safe-area-inset-top, 0px)); right:6px;
    font-size:1.6em; line-height:1; width:32px; height:32px;
    display:flex; align-items:center; justify-content:center; opacity:.95;
  }
  .eps-schedule .sess-blk.expanded .blk-detail{ margin:8px 10px 0; }
  /* 背面のページはスクロールさせない（シート内スクロールと二重に動かない）。 */
  html.eps-blk-open, body.eps-blk-open{ overflow:hidden !important; }

  /* ==== スマホでの情報量を増やす（ユーザー依頼 2026-07-29） ====
     iPhone 実機で「一般演題1【臨床】」等が2行で切れ、何のセッションか判別できなかった。
     実測したところ原因は2つで、フォントサイズは3番目の要因でしかなかった:
       (1) テーマの左右余白でプラグインに渡る幅が 376→304px（約2割）削られていた
       (2) 題名が枠の高さと無関係に -webkit-line-clamp:2 で頭打ちだった
           （180px の枠が2行=33px しか使わず 119px 遊んでいた）
     376px 幅・実データ25枠で「題名が最後まで見える枠」は 6/25 → 24/25。 */

  /* (1) テーマの全体余白ぶんだけ外へ広げる（block テーマの .alignfull と同じ手口）。
     WordPress の is-layout-constrained が margin:auto!important を当てるため !important が要る。
     変数が無いテーマ（クラシックテーマ等）では 0px にフォールバックし従来の幅のままになる。
     margin:calc(50% - 50vw) 方式は 100vw がスクロールバー幅を含み横に6pxあふれたため採らない。 */
  /* 親が実際にその余白を持っている場合（has-global-padding）に限定する。
     変数は継承されるため、限定しないとサイドバー・カラム・入れ子グループの中に置いたときに
     存在しない余白ぶん外へはみ出す（敵対レビュー[High]指摘）。 */
  :where(.has-global-padding) > .eps-schedule.eps-root{
    margin-left: calc(-1 * var(--wp--style--root--padding-left, 0px)) !important;
    margin-right: calc(-1 * var(--wp--style--root--padding-right, 0px)) !important;
    max-width: none !important;
    width: auto !important;
    /* 端まで広げると見出し・タブ・プルダウンの文字が画面の縁に張り付くため、
       最小限の余白だけ戻す（盤面は下の負マージンで端まで使う）。 */
    padding-left: 10px;
    padding-right: 10px;
  }
  /* 盤面（時間×会場のグリッド）だけは端いっぱいに使う。列幅がそのまま情報量になるため。 */
  :where(.has-global-padding) > .eps-schedule.eps-root .board{
    margin-left: -10px;
    margin-right: -10px;
  }

  /* (2) 枠の高さぶんだけ行を使う。あふれた分は枠の overflow:hidden が切る。
     compact 枠（極端に短いセッション）は従来どおり1行＋省略記号のまま。 */
  /* 共催社名・セッション名（.blk-sub）を持つ枠は上限3行に留める。無制限にすると長い
     セミナー名が枠を使い切り、共催社名が押し出されて消える（敵対レビュー[Medium]指摘・
     実データで「イブニングセミナー2」の共催が完全に消えるのを再現）。
     :has() 非対応の古い端末では下2つとも不一致になり、元の2行上限がそのまま残る（安全側）。 */
  .eps-schedule .sess-blk:not(.compact):not(.expanded):not(:has(.blk-sub)) .blk-label{
    -webkit-line-clamp: unset; display: block;
  }
  .eps-schedule .sess-blk:not(.compact):not(.expanded):has(.blk-sub) .blk-label{
    -webkit-line-clamp: 3;
  }

  /* (3) 文字と余白を詰めて1行あたりの文字数を稼ぐ。題名は 13.0→12.3px に留めて可読性を保つ
     （11.5px まで下げると 23/25 になるが小さすぎるため採らない）。
     展開中の枠は全画面シートで別レイアウトのため padding を触らない。 */
  /* スマホの compact 枠は時刻と題名を2段にする（利用者依頼 2026-07-31）。
     会場列は 87px しかなく、時刻だけで 69px を使うため1行に詰めると題名の幅が 0px になり
     何も読めない。題名を次の行へ送ると 66px 確保できる。枠の高さ側は MIN_BLOCK_H=34 が
     2行ぶんを保証している（PHP 側の定数と対で効くので、片方だけ変えないこと）。
     題名そのものは1行＋省略記号のままにして、2段を超えて伸びないようにする。 */
  .eps-schedule .sess-blk.compact:not(.expanded) .blk-head{
    flex-wrap: wrap; white-space: normal; gap: 0 6px;
  }
  .eps-schedule .sess-blk.compact:not(.expanded) .blk-label{
    flex-basis: 100%; -webkit-line-clamp: 1;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  /* compact 枠（高さ15〜30px）は縦の余白を増やすと1行表示の上下が余計に切れるため、
     縦は従来の 2px のまま横だけ詰める（敵対レビュー[Low]指摘: コメントと実挙動のずれ）。 */
  .eps-schedule .sess-blk:not(.expanded):not(.compact){ padding: 3px 4px; }
  .eps-schedule .sess-blk.compact:not(.expanded){ padding: 2px 4px; }
  .eps-schedule .sess-blk:not(.expanded) .blk-head{ gap: 0 4px; padding-right: 11px; }
  .eps-schedule .sess-blk:not(.expanded) .blk-time{ font-size: 0.72em; }
  .eps-schedule .sess-blk:not(.expanded) .blk-label{ font-size: 0.88em; line-height: 1.2; }
  .eps-schedule .sess-blk:not(.expanded) .blk-sub{ font-size: 0.74em; line-height: 1.2; }
}

/* テーマ干渉の遮断（ユーザー報告 2026-07-27: 展開カードに謎の罫線が出る）:
   多くのテーマが `table td/th { border: 1px solid ... }` を当てるため、演題テーブルを
   grid 化した番号セル（狭い）の上下左右に線の断片が現れる。ここで枠線を一度リセットし、
   意図した行区切り（td の下線）だけを引き直す。border-spacing/背景もテーマ値を打ち消す。
   !important はテーマが `td{border:...!important}` を当てている場合に負けないため（この表は
   プラグイン専用でテーマ側が意図的に装飾する対象ではない＝上書きを塞いでも実害が無い）。 */
.eps-schedule .pres-table,
.eps-schedule .pres-table tbody,
.eps-schedule .pres-table tr,
.eps-schedule .pres-table td,
.eps-schedule .pres-table th{ border: 0 !important; background-image: none; }
.eps-schedule .pres-table{ border-collapse: collapse !important; border-spacing: 0 !important; }
.eps-schedule .pres-table td{ border-bottom: 1px solid #f0f0f0 !important; }
.eps-schedule .pres-table tr:last-child td{ border-bottom: 0 !important; }

/* ==== 会場の絞り込み（プルダウン）とその周り（ユーザー依頼 2026-07-29） ====
   会場名クリックでの拡大と同じ動きを、押しやすい位置から操作できるようにする。
   タブを横に並べる案は、スマホで会場が増えると横幅を食って盤面が狭くなるため採らない
   （ユーザー指摘「小さい画面で見づらいかなと」）。 */
.eps-schedule .venue-filter{ margin: 0 0 14px; }
.eps-schedule .venue-filter-lab{ display:inline-flex; align-items:center; gap:8px; }
.eps-schedule .venue-filter-cap{
  font-size:0.86em; font-weight:700; color:var(--text-sub); white-space:nowrap;
}
/* ネイティブの <select> は使わない（2026-07-29 差し戻し）。選択肢の一覧は OS が描くため
   CSS が効かず、テーマ側の拡大縮小が掛かると文字が極端に小さくなり位置もずれた（ユーザー報告）。
   下のリストはページ内に描画されるので、寸法をこちらで完全に決められる。 */
.eps-schedule .venue-pick{ position:relative; display:inline-flex; min-width:0; }
.eps-schedule .venue-btn{
  font:inherit; font-size:1em; font-weight:600; color:var(--text); text-align:left;
  padding:7px 30px 7px 12px; border:1px solid var(--border); border-radius:8px;
  background-color:var(--surface); box-shadow:var(--shadow-1); cursor:pointer;
  /* 矢印は data: URI の SVG（外部ファイルを増やさない・CSPで外部取得に頼らない）。 */
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%23555' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 10px center; background-size:11px 7px;
  -webkit-appearance:none; -moz-appearance:none; appearance:none;
  width:100%; max-width:100%; min-width:0;
}
.eps-schedule .venue-btn:focus-visible{ outline:2px solid var(--primary); outline-offset:1px; }
.eps-schedule .venue-btn[aria-expanded="true"]{ border-color:var(--primary); }
.eps-schedule .venue-btn-txt{
  display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.eps-schedule .venue-menu{
  position:absolute; top:calc(100% + 4px); left:0; z-index:30;
  margin:0; padding:4px; list-style:none; min-width:100%; max-height:60vh; overflow-y:auto;
  background:var(--surface); border:1px solid var(--border); border-radius:8px;
  box-shadow:var(--shadow-2);
}
.eps-schedule .venue-menu[hidden]{ display:none; }
.eps-schedule .venue-opt{
  font-size:1em; font-weight:600; color:var(--text); line-height:1.4;
  padding:9px 12px; border-radius:6px; cursor:pointer; white-space:nowrap;
}
.eps-schedule .venue-opt:hover{ background:#eaf3fb; color:var(--primary); }
.eps-schedule .venue-opt:focus-visible{ outline:2px solid var(--primary); outline-offset:-2px; }
.eps-schedule .venue-opt[aria-selected="true"]{ background:var(--primary); color:#fff; }

@media (max-width: 640px){
  /* スマホでは指で押せる高さを確保し、横幅いっぱいに広げる（狙いを外しにくくする）。 */
  .eps-schedule .venue-filter-lab{ display:flex; width:100%; }
  .eps-schedule .venue-pick{ flex:1 1 auto; }
  .eps-schedule .venue-btn{ padding-top:9px; padding-bottom:9px; }
  .eps-schedule .venue-opt{ padding:11px 12px; }
  /* 日付ボタンも同様に、細長い余白を削って押しやすくする。 */
  .eps-schedule .day-tab{ padding:8px 16px; font-size:1em; }
  .eps-schedule .eps-print-btn{ margin-left:0; width:100%; }
}

/* ── 抄録本文のコピー抑止（設定 → 表示 →「抄録のコピー抑止」） ─────────────
   利用者依頼 2026-09-01。版面に .eps-copy-guard が付いているときだけ効く。
   効き目は**画面の中の「うっかりコピー」を防ぐ**ところまで。印刷・PDF保存は
   これまでどおりでき、作られた PDF の中の文字はコピーできる（ブラウザの
   「PDFに保存」に権限フラグを付ける手段が無いため）。開発者ツール等でも回避できる。
   ※印刷では効かせない（@media screen で囲う）。user-select は紙面に影響しないが、
     印刷用CSSを追う人が迷わないよう、書いてあるとおりの適用範囲にしておく（Copilot 指摘）。 */
@media screen {
  .eps-copy-guard .pres-abstract-body{
    -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none;
    -webkit-touch-callout:none;
  }
}

/* ── 紙面に残す注記と透かし（設定 → 印刷）────────────────────────────────
   PDF への書き出しそのものは止められない（送信先を選ぶのはブラウザと OS の印刷ダイアログ）。
   代わりに、刷られた紙・PDF へ出所と断り書きを残す（利用者依頼 2026-09-01）。
   画面には出ない（スクリプトが印刷のあいだだけ作り、印刷後に消す）。
   **大きさの指定は画面用CSSに置く**: 抄録の面付けは beforeprint に高さを測って字を詰めるので、
   ここが印刷用CSSにあると「測ったときの姿」と「刷られる姿」が食い違う（0.1.80 の教訓）。 */
.eps-print-note{
  font-size:9pt; line-height:1.35; color:#333; text-align:center;
  border-top:1px solid #bbb; padding:3px 4px 0; box-sizing:border-box;
}
/* 透かしは重ねもの。版の高さを変えないよう絶対配置にし、字の当たり判定も持たせない。 */
.eps-print-mark{
  position:absolute; left:0; top:0; right:0; bottom:0;
  display:flex; flex-direction:column; align-items:center; justify-content:space-around;
  overflow:hidden; pointer-events:none; z-index:1;
}
.eps-print-mark span{
  font-size:44pt; font-weight:700; letter-spacing:.12em; white-space:nowrap;
  color:rgba(0,0,0,.08); transform:rotate(-30deg);
}

/* 展開した枠の「抄録を見る」（利用者依頼 2026-09-02）。詳細の先頭に小さく置く。
   **展開した詳細（.blk-detail）は白地**（--surface）。枠そのものの色地ではないので、
   白抜きにすると白地に白で消える（利用者報告 2026-09-02「ボタンが見えない」）。
   色は詳細の中の他の要素と同じ系統（--primary／--border）で組む。 */
.eps-schedule .blk-abs-open{
  font:inherit; font-size:0.86em; font-weight:700; line-height:1;
  margin:0 0 8px; padding:7px 13px; cursor:pointer;
  border:1px solid var(--primary); border-radius:6px;
  background:var(--surface); color:var(--primary);
}
.eps-schedule .blk-abs-open:hover,
.eps-schedule .blk-abs-open:focus-visible{ background:var(--primary); color:#fff; }

/* 演題ごとの「抄録を見る」（別ページの抄録集へ。利用者依頼 2026-09-02）。
   本文の流れを切らないよう、まとめボタンより控えめな字づらのリンクにする。 */
.eps-schedule .pres-abs-link-row{ margin:6px 0 2px; }
.eps-schedule .pres-abs-link{
  display:inline-block; font-size:0.86em; font-weight:700; line-height:1;
  padding:6px 11px; text-decoration:none;
  border:1px solid var(--primary); border-radius:6px;
  background:var(--surface); color:var(--primary);
}
.eps-schedule .pres-abs-link::after{ content:" ↗"; font-weight:400; }
/* セッションに1つだけ出すほう（利用者依頼 2026-09-02）。詳細の最後に少し離して置く。 */
.eps-schedule .sess-abs-link-row{ margin:12px 0 2px; }
.eps-schedule .pres-abs-link:hover,
.eps-schedule .pres-abs-link:focus{ background:var(--primary); color:#fff; }
