/* Event Program & Schedule — [eps_program] 用スタイル。
   assets/program_style.html + card_css.txt + gen_program.EXTRA_CSS を .eps-program 配下へ
   スコープして生成（テーマ干渉防止）。再生成は build/dev-scope-assets 参照。 */

/* ============================================================
       DESIGN.md — pixiv design system
       Primary: #0096fa  Text: #464a4d  BG: #eeeeee  Surface: #fff
    ============================================================ */
    .eps-program *, .eps-program *::before, .eps-program *::after{ box-sizing: border-box; margin: 0; padding: 0; }
/* html{scroll-padding-top}.eps-program はページ全体へ漏れるため削除。アンカー着地は scroll-margin-top で代替 */
.eps-program .venue-section{scroll-margin-top:96px;}.eps-program{
      --primary:      #0096fa;
      --primary-dark: #0069b5;
      --accent:       #0096fa;
      --accent-light: #e6f4ff;
      --text:         #1f2937;
      --text-sub:     #4b5563;
      --text-dis:     #6b7280;
      --border:       #d6d6d6;
      --bg:           #eeeeee;
      --surface:      #ffffff;
      --danger:       #ff0000;
      --like:         #ff4060;
      --radius:       4px;
      --shadow-1:     0 1px 4px rgba(0,0,0,0.08);
      --shadow-2:     0 2px 8px rgba(0,0,0,0.12);
      --shadow-3:     0 4px 16px rgba(0,0,0,0.16);
    }.eps-program{
      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; /* コンテナ基準サイズ（内部は em）。テーマの rem 差の影響を受けない */
      word-break: break-all; overflow-wrap: break-word;
    }
/* HEADER */
    .eps-program .site-header{
      background: var(--surface);
      border-bottom: 1px solid var(--border);
      box-shadow: var(--shadow-1);
    }.eps-program .header-inner{ max-width: 1200px; margin: 0 auto; padding: 12px 16px 10px; }.eps-program .conf-label{ font-size:0.79em; color: var(--text-sub); margin-bottom: 2px; }.eps-program .conf-title{ font-size:0.86em; font-weight: 700; color: var(--text); margin-bottom: 6px; }.eps-program .page-title{
      font-size:clamp(1.07em,3vw,1.43em); font-weight: 700;
      color: var(--primary); line-height: 1.4; cursor: pointer;
    }.eps-program .page-title:hover{ color: var(--primary-dark); }
/* STICKY HEADER */
    /* --eps-head-top はログイン中の管理バーの高さ（JSが実測して入れる。既定 0）。 */
    .eps-program .sticky-header-block{ position: sticky; top: var(--eps-head-top, 0px); z-index: 100; }
    /* テーマ側の祖先に overflow が付いていて sticky が効かない環境で JS が付ける退避クラス。
       画面幅いっぱいになるので、中身のバーが中央寄せされても隙間から本文が透けないよう
       この要素自体にも背景を敷く。 */
    .eps-program .sticky-header-block.eps-head-fixed{
      position: fixed; top: var(--eps-head-top, 0px); left: 0; right: 0; z-index: 1000;
      background: var(--surface); box-shadow: var(--shadow-2);
    }
/* SEARCH BAR */
/* 上部の操作バーと、必要なときだけ開くパネル（2026-07-31 利用者報告）。
   旧構造は会場一覧を開いたまま固定ヘッダへ積んでいて、常時 200px 近く本文に被っていた。
   常時見えるのはこのバーだけにし、会場一覧と検索はパネルとして開閉する。 */
    .eps-program .eps-toolbar{
      max-width: 1200px; margin: 0 auto; padding: 6px 12px;
      display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
      background: var(--surface); border-bottom: 1px solid var(--border);
      box-shadow: var(--shadow-1);
    }
    .eps-program .tb-btn{
      display: inline-flex; align-items: center; gap: 4px;
      font-family: inherit; font-size:0.86em; font-weight: 700; color: var(--text-sub);
      background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
      padding: 6px 12px; cursor: pointer; white-space: nowrap;
      transition: color .15s, border-color .15s, background .15s;
    }
    .eps-program .tb-btn:hover{ color: var(--primary); border-color: var(--primary); }
    .eps-program .tb-btn.open{ color: #fff; background: var(--primary); border-color: var(--primary); }
    .eps-program .tb-btn .tb-ico{ font-size: 0.9em; transition: transform .15s; }
    .eps-program .tb-btn.open .tb-ico{ transform: rotate(180deg); }
    .eps-program .tb-btn:focus-visible{ outline: 2px solid var(--primary); outline-offset: 1px; }
    /* 押している項目名（会場／日程）と、いま選んでいる値。値だけ色を変えて読み分けられるように。 */
    .eps-program .tb-btn .tb-key{ font-weight: 700; }
    .eps-program .tb-btn .tb-val{
      font-weight: 600; color: var(--primary);
      max-width: 10em; overflow: hidden; text-overflow: ellipsis;
    }
    .eps-program .tb-btn .tb-val::before{ content: '：'; color: var(--text-dis); }
    .eps-program .tb-btn.open .tb-val{ color: #fff; }
    .eps-program .tb-btn.open .tb-val::before{ color: rgba(255,255,255,.6); }
    .eps-program .tb-sep{ width: 1px; align-self: stretch; background: var(--border); margin: 2px 2px; }
    /* 件数と前へ/次へ は右端へ。狭い画面では折り返して次の行の先頭に来る。 */
    .eps-program .tb-right{ margin-left: auto; display: inline-flex; align-items: center; gap: 6px; }
    .eps-program .eps-panel{
      max-width: 1200px; margin: 0 auto; padding: 8px 12px 10px;
      background: var(--surface); border-bottom: 1px solid var(--border);
      box-shadow: var(--shadow-2);
      /* 開いても画面を埋め尽くさない。会場が増えてもここでスクロールさせる。 */
      max-height: 50vh; overflow-y: auto;
    }
    .eps-program .eps-panel[hidden]{ display: none; }
    /* 絞込みの選択肢は会場・日程とも同じ四角いボタン（チップ）で並べる
       （利用者依頼 2026-07-31「会場は…四角型ボタン型で／日程も同じデザインで」）。 */
    .eps-program .eps-chip-grid{
      display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 6px;
    }
    .eps-program .eps-chip{
      display: flex; flex-direction: column; align-items: flex-start; justify-content: center;
      gap: 1px; min-height: 40px;
      background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
      padding: 6px 10px; text-align: left; text-decoration: none; cursor: pointer;
      font-family: inherit; font-size:0.86em; font-weight: 600; color: var(--primary);
      box-shadow: var(--shadow-1);
      transition: background .15s, border-color .15s, box-shadow .15s, color .15s;
    }
    .eps-program .eps-chip:hover{ background: var(--accent-light); box-shadow: var(--shadow-2); }
    .eps-program .eps-chip:focus-visible{ outline: 2px solid var(--primary); outline-offset: 1px; }
    .eps-program .eps-chip .chip-main{ line-height: 1.3; }
    .eps-program .eps-chip .chip-sub{ font-size:0.86em; font-weight: 500; color: var(--text-sub); line-height: 1.2; }
    .eps-program .eps-chip .chip-dots{ display: inline-flex; gap: 3px; margin-top: 2px; }
    /* 選択中（会場は .nav-active・日程は .active）。両方とも塗りつぶしで示す。 */
    .eps-program .eps-chip.nav-active,
    .eps-program .eps-chip.date-btn.active{
      background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 700;
    }
    .eps-program .eps-chip.nav-active .chip-sub,
    .eps-program .eps-chip.date-btn.active .chip-sub{ color: rgba(255,255,255,.85); }
    .eps-program .nav-venue-all{ font-weight: 700; }
    /* 2段目の検索窓。常時表示（開かないと検索できない作りは入口が分かりにくい）。 */
    .eps-program .eps-searchrow{
      max-width: 1200px; margin: 0 auto; padding: 6px 12px 8px;
      background: var(--surface); border-bottom: 1px solid var(--border);
      box-shadow: var(--shadow-1);
    }
    .eps-program .search-bar-inner{ max-width: 1200px; margin: 0 auto; position: relative; }.eps-program .search-icon-big{
      position: absolute; left: 10px; top: 50%; transform: translateY(-50%);
      font-size:1em; pointer-events: none; color: var(--text-sub);
    }.eps-program #searchInput{
      width: 100%; padding: 8px 36px 8px 34px;
      border: 1px solid var(--border); border-radius: var(--radius);
      background: var(--surface); color: var(--text);
      font-size:1em; outline: none; height: 36px;
      transition: border-color .15s, box-shadow .15s;
      font-family: inherit;
    }.eps-program #searchInput:focus{
      border-color: var(--primary);
      box-shadow: 0 0 0 2px rgba(0,150,250,.12);
    }
    /* type=search がブラウザ標準で出す消去ボタンを消す。自前の #searchClear と並んで
       ✕が2つ見えていた（利用者報告 2026-07-31）。自前の方は検索状態のリセットまで行うので、
       残すのはこちら側にする。 */
    .eps-program #searchInput::-webkit-search-cancel-button,
    .eps-program #searchInput::-webkit-search-decoration{ -webkit-appearance: none; appearance: none; }
    .eps-program #searchInput::-ms-clear{ display: none; width: 0; height: 0; }
    .eps-program #searchClear{
      position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
      background: none; border: none; color: var(--text-sub);
      font-size:1.14em; cursor: pointer; display: none; padding: 0 4px; line-height: 1;
    }.eps-program #searchClear:hover{ color: var(--text); }.eps-program #searchCount{ font-size:0.86em; color: var(--text-sub); padding-left: 4px; }.eps-program .search-meta-row{
      max-width: 1200px; margin: 0 auto;
      display: flex; align-items: center; justify-content: space-between;
      padding-top: 4px; min-height: 24px;
    }.eps-program #searchNav{ display: none; align-items: center; gap: 6px; }.eps-program #searchNav.visible{ display: flex; }.eps-program .result-nav-btn{
      background: var(--primary); color: #fff;
      border: none; border-radius: var(--radius);
      padding: 4px 12px; font-size:0.86em; font-weight: 700;
      cursor: pointer; transition: background .15s; font-family: inherit;
    }.eps-program .result-nav-btn:hover{ background: var(--primary-dark); }.eps-program .result-nav-btn:disabled{ background: var(--text-dis); cursor: default; }.eps-program #resultPos{ font-size:0.86em; font-weight: 700; color: var(--primary); min-width: 60px; text-align: center; }.eps-program .session-card.result-current{
      outline: 2px solid var(--primary); outline-offset: 2px;
      box-shadow: 0 0 0 4px rgba(0,150,250,.15), var(--shadow-2);
    }
/* MAIN */
    .eps-program main{ max-width: 1200px; margin: 0 auto; padding: 12px; } /* 12px は従来 inline で当たっていた実効値。CSS へ移した時点でも見た目を変えないため */
/* NO RESULT */
    .eps-program #noResult{
      display: none; text-align: center; padding: 48px 16px;
      color: var(--text-sub); font-size:1em;
    }
/* 冒頭の会場索引（.index-*）は、会場パネルのチップと中身が同じになったため廃止（0.1.43）。 */
/* VENUE SECTION */
    .eps-program .venue-section{ margin-bottom: 24px; }.eps-program .venue-header{
      background: var(--surface); border: 1px solid var(--border);
      border-radius: var(--radius) var(--radius) 0 0;
      padding: 8px 12px 7px; border-bottom: 2px solid var(--primary);
    }.eps-program .venue-name{ font-size:1em; font-weight: 700; color: var(--text); }.eps-program .venue-location{ font-size:0.82em; color: var(--text-sub); margin-top: 1px; }.eps-program .venue-body{
      background: var(--bg); border: 1px solid var(--border); border-top: none;
      border-radius: 0 0 var(--radius) var(--radius); padding: 8px;
      display: flex; flex-direction: column; gap: 8px;
    }
/* SESSION CARD */
    .eps-program .session-card{
      border: 1px solid var(--border); border-radius: var(--radius);
      overflow: hidden; box-shadow: var(--shadow-1); background: var(--surface);
    }.eps-program .session-card-header{
      background: #f8f8f8; border-bottom: 1px solid var(--border);
      padding: 6px 10px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
    }.eps-program .session-cat-badge{
      font-size:0.79em; font-weight: 700; color: #fff;
      padding: 2px 8px; border-radius: 2px; letter-spacing: .03em;
      display: inline-flex; align-items: center; gap: 4px;
    }.eps-program .badge-sep{ opacity: .45; font-weight: 400; font-size:0.71em; }.eps-program .badge-date{ font-size:0.71em; font-weight: 600; opacity: .88; }.eps-program .badge-special{ background: #8b1a1a; }.eps-program .badge-president{ background: #6b1a6b; }.eps-program .badge-luncheon{ background: #7a5200; }.eps-program .badge-coffee{ background: #2a6a2a; }.eps-program .badge-education{ background: #1a4a7a; }.eps-program .badge-symposium{ background: #1a5a5a; }.eps-program .badge-workshop{ background: #4a3a7a; }.eps-program .badge-epd{ background: #005a8b; }.eps-program .badge-poster{ background: #3a5a1a; }.eps-program .badge-general{ background: #3a4a5a; }.eps-program .badge-morning{ background: #15803d; }.eps-program .badge-evening{ background: #5a3a1a; }.eps-program .badge-report{ background: #3a3a3a; }.eps-program .badge-case{ background: #5a1a2a; }.eps-program .badge-online{ background: #1a3a6a; }.eps-program .badge-other{ background: #4a4a4a; }.eps-program .session-datetime{ font-size:0.82em; color: var(--text-sub); }.eps-program .session-cosponsor{
      font-size:0.79em; color: #5a4010; background: #fef8e8;
      border: 1px solid #e8d080; border-radius: var(--radius); padding: 1px 6px;
    }.eps-program .session-card-body{ padding: 8px 10px; background: var(--surface); }
/* THEME BOX */
    .eps-program .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-program .session-theme-label{
      font-size:0.71em; font-weight: 700; color: var(--primary);
      letter-spacing: .1em; text-transform: uppercase; margin-bottom: 1px;
    }.eps-program .session-theme-text{ font-size:0.86em; font-weight: 500; color: var(--text); line-height: 1.45; }
/* CHAIRS */
    .eps-program .chairs-row{ display: flex; align-items: flex-start; gap: 0 8px; margin-bottom: 6px; }.eps-program .chairs-names{
      flex: 1; min-width: 0; display: flex; flex-direction: column;
      gap: 3px;
    }.eps-program .chairs-role-label{
      font-size:0.79em; font-weight: 700; color: #fff;
      background: #8b1a1a; border-radius: var(--radius); padding: 1px 6px;
      white-space: nowrap; flex-shrink: 0;
    }.eps-program .chair-item{ font-size:0.86em; font-weight: 700; color: var(--text); min-width: 0; overflow-wrap: break-word; word-break: break-word; }.eps-program .chair-affil{ font-size:0.82em; font-weight: 400; color: var(--text-sub); }
/* PRESENTATION TABLE */
    .eps-program .pres-group{ border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }.eps-program .pres-group-head{
      background: var(--primary); color: #fff;
      font-size:0.71em; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
      padding: 3px 8px;
    }.eps-program .pres-table{ width: 100%; border-collapse: collapse; table-layout: auto; }.eps-program .pres-table tr{ border-bottom: 1px solid #f0f0f0; }.eps-program .pres-table tr:last-child{ border-bottom: none; }.eps-program .pres-table tr:nth-child(even) td{ background: #fafafa; }.eps-program .pres-table td{ padding: 5px 6px; vertical-align: top; font-size:0.86em; overflow: hidden; }.eps-program .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.79em; font-weight: 700; color: #fff; background: var(--primary);
      padding: 1px 5px; border-radius: var(--radius); display: inline-block;
    }.eps-program .pres-role-line{ margin-bottom: 2px; }.eps-program .pres-role-tag{
      font-size:0.79em; font-weight: 700; color: var(--primary);
      border: 1px solid var(--primary); border-radius: var(--radius); padding: 1px 5px;
      display: inline-block; white-space: normal; word-break: break-word; line-height: 1.4;
    }.eps-program .pres-title{ font-weight: 500; color: var(--text); line-height: 1.45; font-size:0.86em; }.eps-program .pres-name-affil{ font-size:0.82em; color: var(--text-sub); margin-top: 2px; }.eps-program .pres-name{ font-weight: 500; color: var(--text); font-size:0.86em; }
/* SEARCH HIGHLIGHT */
    .eps-program mark{ background: #fff176; border-radius: 2px; padding: 0 1px; color: inherit; }
    /* 前へ／次へ で現在指している一致。同じ黄色のままだと、共著者のように同一セッション内へ
       複数ヒットしたとき「今どれを見ているのか」が分からない（利用者報告 2026-07-29）。 */
    .eps-program mark.current{ background: #ff9800; box-shadow: 0 0 0 2px #ff9800; color: #000; }
/* BACK TO TOP */
    .eps-program .back-to-top{
      display: inline-flex; align-items: center; gap: 4px;
      color: var(--primary); font-size:0.82em; text-decoration: none;
      padding: 4px 12px; border: 1px solid var(--primary); border-radius: 20px;
      margin-top: 6px; background: var(--surface);
      transition: background .15s, color .15s;
    }.eps-program .back-to-top:hover{ background: var(--accent-light); }.eps-program footer{
      background: var(--text); color: rgba(255,255,255,.6);
      text-align: center; padding: 14px; font-size:0.82em;
    }
/* DATE DIVIDER */
    .eps-program .date-divider{ display: flex; align-items: center; gap: 8px; margin: 4px 0 2px; }.eps-program .date-divider:first-child{ margin-top: 0; }.eps-program .date-badge{
      display: inline-flex; align-items: center; gap: 4px;
      background: var(--primary); color: #fff;
      font-size:0.82em; font-weight: 700;
      padding: 3px 10px; border-radius: 20px;
      white-space: nowrap; letter-spacing: .03em; box-shadow: var(--shadow-1);
    }.eps-program .date-divider-line{
      flex: 1; height: 1px;
      background: linear-gradient(to right, var(--border), transparent);
    }
/* DAY GROUP */
    .eps-program .day-group{
      display: flex; flex-direction: column; gap: 8px;
      border-radius: var(--radius); padding: 8px 8px 10px;
      border-left: 3px solid transparent;
    }.eps-program .day-group.day-1{ background: #eef4fc; border-left-color: #0096fa; }.eps-program .day-group.day-2{ background: #edf7f2; border-left-color: #00c853; }.eps-program .day-group.day-3{ background: #fdf3ee; border-left-color: #f5a623; }
    /* 並び順「日付 → 会場」では日付が大見出しで、その中に会場の節が入る（会場順とは入れ子が逆）。
       日付の帯どうしを離し、中の会場は詰めて出す。 */
    .eps-program .eps-groups[data-mode="day-venue"] > .day-group,
    .eps-program .eps-groups[data-mode="day-time"] > .day-group{ margin-bottom: 20px; }
    .eps-program .day-group > .venue-section{ margin-bottom: 0; }
    .eps-program .day-group > .venue-section > .venue-body{ background: transparent; border-color: transparent; padding: 6px 0 0; }
/* ABSTRACT MODAL */
    .eps-program .pres-title.has-abstract{
      cursor: pointer; text-decoration: underline;
      text-decoration-style: dotted; text-decoration-color: var(--primary);
      text-underline-offset: 3px;
    }.eps-program .pres-title.has-abstract:hover{ color: var(--primary); }.eps-program #abstract-modal{
      display: none; position: fixed; inset: 0; z-index: 9000;
      background: rgba(0,0,0,.55);
      align-items: center; justify-content: center; padding: 20px;
    }.eps-program #abstract-modal.open{ display: flex; overscroll-behavior: contain; }.eps-program .abs-panel{
      background: var(--surface); border-radius: 8px;
      max-width: 780px; width: 100%; max-height: 88vh;
      display: flex; flex-direction: column;
      box-shadow: var(--shadow-3); overflow: hidden;
    }.eps-program .abs-panel-head{
      background: var(--primary); color: #fff;
      padding: 14px 18px; display: flex; align-items: flex-start; gap: 10px;
    }.eps-program .abs-panel-no{
      background: rgba(255,255,255,.2); border-radius: var(--radius);
      padding: 2px 8px; font-size:0.82em; font-weight: 700; white-space: nowrap;
      margin-top: 2px; flex-shrink: 0;
      font-family: SFMono-Regular, Consolas, Menlo, monospace;
    }.eps-program .abs-panel-title{ font-size:1em; font-weight: 700; line-height: 1.45; flex: 1; }.eps-program .abs-panel-close{
      background: none; border: none; cursor: pointer;
      color: rgba(255,255,255,.8); font-size:1.43em; line-height: 1;
      padding: 0 0 0 10px; flex-shrink: 0; transition: color .15s;
    }.eps-program .abs-panel-close:hover{ color: #fff; }.eps-program .abs-panel-body{
      padding: 16px 20px; overflow-y: auto;
      font-size:0.93em; line-height: 1.75; color: var(--text);
    }.eps-program .abs-panel-body br{ display: block; content: ""; margin-top: .5em; }.eps-program .abs-panel-body b{ font-weight: 700; }.eps-program .abs-panel-foot{
      padding: 10px 16px; border-top: 1px solid var(--border); text-align: right;
    }.eps-program .abs-foot-btn{
      background: var(--primary); color: #fff; border: none;
      border-radius: var(--radius); padding: 8px 24px;
      font-size:1em; font-weight: 700; cursor: pointer;
      transition: background .15s; font-family: inherit;
    }.eps-program .abs-foot-btn:hover{ background: var(--primary-dark); }
/* DATE FILTER — 日付の丸ボタン（.date-filter-row / 旧 .date-btn のピル型）は
   会場と同じチップへ統合したため廃止（0.1.43）。見た目は .eps-chip 側にある。 */
/* NAV DAY DOTS */
    .eps-program .nav-day-dot{
      display: inline-block; width: 5px; height: 5px;
      border-radius: 50%; margin-left: 2px; vertical-align: middle; margin-bottom: 1px;
    }.eps-program .nav-day-dot.d1{ background: #0096fa; }/* .nav-day-dot.d2 の旧定義（#00c853）は EXTRA_CSS の #e8990c に後勝ちされ静的版でも無効だったため削除（重複解消・見た目パリティ維持） */.eps-program .nav-day-dot.d3{ background: #f5a623; }.eps-program .nav-venue-inner .eps-chip.day-dim{ opacity: .35; }
/* ABSTRACT LOADING */
    .eps-program .abs-loading{ text-align: center; padding: 40px 0; color: var(--text-sub); }.eps-program .abs-spinner{
      display: inline-block; width: 18px; height: 18px;
      border: 2px solid var(--border); border-top-color: var(--primary);
      border-radius: 50%; animation: eps-abs-spin .7s linear infinite;
      margin-right: 8px; vertical-align: middle;
    }
    @keyframes eps-abs-spin {to{ transform: rotate(360deg); } }
/* RUBY */
    .eps-program ruby{ ruby-align: start; padding-right: .6em; }/* 基底文字より長いルビは右へはみ出し、隣の氏名のルビに重なる（利用者報告 2026-08-18・iOS Safari）。 ruby-align は start のまま＝座長を縦に並べたときの頭ぞろえ（0.1.12）を壊さないため。 余白は**右だけ**に入れる: はみ出しは右方向のみで、左に入れるとルビの付かない氏名（ローマ字など ruby 要素自体が出ない）と左端が揃わなくなる（実測 5.45px ずれ）。*/.eps-program ruby:last-of-type{ padding-right: 0; }/* 氏名の最後のルビには右余白を付けない: 直後には所属番号の <sup> や座長の（所属）が続き、そこに .6em が入ると不自然に離れる（実測 0px → 8.98px）。重なりを防ぐのは姓→名の間だけで足りる。*/.eps-program rt{ font-size: .7em; font-weight: normal; letter-spacing: .04em; }

    /* RESPONSIVE */
    @media (max-width: 767px) {.eps-program .eps-chip-grid{ grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); }.eps-program .tb-btn .tb-val{ max-width: 8.5em; }
    }.eps-program .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-program .session-theme-label{
      font-size:0.82em; font-weight: 700; color: var(--primary);
      letter-spacing: .1em; text-transform: uppercase; margin-bottom: 1px;
    }.eps-program .session-theme-text{ font-size:1.07em; font-weight: 500; color: var(--text); line-height: 1.45; }.eps-program .chairs-row{ display: flex; align-items: flex-start; gap: 0 8px; margin-bottom: 6px; }.eps-program .chairs-names{
      flex: 1; min-width: 0; display: flex; flex-direction: column;
      gap: 3px;
    }.eps-program .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-program .chair-item{ font-size:1.07em; font-weight: 700; color: var(--text); min-width: 0; overflow-wrap: break-word; word-break: break-word; }.eps-program .chair-affil{ font-size:1em; font-weight: 400; color: var(--text-sub); }.eps-program .pres-group{ border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }.eps-program .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-program .pres-table{ width: 100%; border-collapse: collapse; table-layout: auto; }.eps-program .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-program .pres-title{ font-weight: 500; color: var(--text); line-height: 1.45; font-size:1.07em; }.eps-program .pres-name-affil{ font-size:1em; color: var(--text-sub); margin-top: 2px; }.eps-program .pres-name{ font-weight: 500; color: var(--text); font-size:1.07em; }.eps-program .session-cosponsor{
      font-size:0.86em; color: #5a4010; background: #fef8e8;
      border: 1px solid #e8d080; border-radius: var(--radius); padding: 1px 6px;
    }.eps-program ruby{ ruby-align: start; padding-right: .6em; }/* 基底文字より長いルビは右へはみ出し、隣の氏名のルビに重なる（利用者報告 2026-08-18・iOS Safari）。 ruby-align は start のまま＝座長を縦に並べたときの頭ぞろえ（0.1.12）を壊さないため。 余白は**右だけ**に入れる: はみ出しは右方向のみで、左に入れるとルビの付かない氏名（ローマ字など ruby 要素自体が出ない）と左端が揃わなくなる（実測 5.45px ずれ）。*/.eps-program ruby:last-of-type{ padding-right: 0; }/* 氏名の最後のルビには右余白を付けない: 直後には所属番号の <sup> や座長の（所属）が続き、そこに .6em が入ると不自然に離れる（実測 0px → 8.98px）。重なりを防ぐのは姓→名の間だけで足りる。*/.eps-program rt{ font-size: .7em; font-weight: normal; letter-spacing: .04em; }.eps-program .pres-table tr{ border-bottom: 1px solid #f0f0f0; }.eps-program .pres-table tr:last-child{ border-bottom: none; }.eps-program .pres-table tr:nth-child(even) td{ background: #fafafa; }.eps-program .pres-table td{ padding: 5px 6px; vertical-align: top; font-size:1.07em; overflow: hidden; }.eps-program .session-venue-tag{font-size:0.79em;color:var(--primary);background:var(--accent-light);
 border:1px solid var(--primary);border-radius:var(--radius);padding:1px 6px;}.eps-program .pres-tbd{color:var(--text-dis);font-weight:normal;}.eps-program .nav-day-dot.d2{background:#e8990c;}.eps-program .session-card{scroll-margin-top:150px;}.eps-program .session-card:target{outline:3px solid var(--primary);outline-offset:2px;
 box-shadow:0 0 0 6px rgba(0,150,250,.15),var(--shadow-2);}.eps-program .badge-mdd{background:#5a3a7a;}.eps-program .badge-social{background:#8a2a5a;}.eps-program .session-cosponsor-box{font-size:0.82em;color:#5a4010;background:#fef8e8;
 border:1px solid #e8d080;border-radius:var(--radius);padding:3px 8px;margin-bottom:6px;display:inline-block;}.eps-program .pres-tbd-note{font-size:0.82em;color:var(--text-sub);padding:4px 2px;}

/* ==== 抄録（details/summary・no-JS開閉） ==== */
.eps-program .pres-abstract{ margin-top: 4px; }
.eps-program .pres-abstract summary{
  cursor: pointer; color: var(--primary); font-size: 0.86em; font-weight: 600;
  user-select: none; width: fit-content;
}
.eps-program .pres-abstract summary:hover{ text-decoration: underline; }
.eps-program .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-program .pres-presenter{ font-weight: 500; color: var(--text); font-size:1em; margin-top: 2px; line-height: 1.5; }
.eps-program .presenter-mark{ margin-right: 1px; }
.eps-program .pres-coauthors{ font-weight: 500; color: var(--text); font-size:0.93em; margin-top: 2px; line-height: 1.6; }
.eps-program .pres-affils{ font-size:0.86em; color: var(--text-sub); margin-top: 2px; line-height: 1.45; }
.eps-program .pres-author{ white-space: nowrap; }
.eps-program .pres-presenter sup,
.eps-program .pres-coauthors sup,
.eps-program .pres-affils sup{ color: var(--primary); font-size: 0.7em; font-weight: 600; line-height: 1; }
.eps-program .pres-presenter ruby rt,
.eps-program .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-program .chair-item ruby rt{ font-size: 0.55em; }
.eps-program .pres-abstract{ margin-top: 2px; }
.eps-program .pres-abstract-body{ margin-top: 2px; }


/* 演題テーブルは CSS grid で描く（2026-07-10 ユーザー指摘: 本文が右端で切れる）:
   table-layout:auto はズーム系環境で width:100% を無視して max-content（共著者を
   1行に並べた幅）まで広がり、本文・タイトルが右端で切れる（実測1226pxオーバー）。
   grid の max-content + minmax(0,1fr) は決定的で、番号列は内容幅・本文列は必ず残り幅に
   収まって折り返す。既存の tr 罫線・縞背景・td padding はそのまま適用される。 */
.eps-program .pres-table{ display: block; width: 100%; }
.eps-program .pres-table colgroup{ display: none; }
/* 列トラックは tbody（単一grid）で共有する: tr ごとの独立gridだと番号の文字数が行間で
   異なるとき本文の書き出し位置が行ごとにズレる（3種レビュー指摘）。番号列は fit-content(40%)
   で内容幅・上限つき（自由入力の長大な演題番号でも本文列が幅0に潰れない）。 */
.eps-program .pres-table tbody{ display: grid; grid-template-columns: fit-content(40%) minmax(0, 1fr); }
.eps-program .pres-table tr{ display: contents; }
/* 罫線は td 側に付ける（display:contents の tr はボックスを持たず border が描画されないため）。
   overflow-wrap:anywhere は長URL等の分割不能トークンの無警告切断防止（col 要素への旧指定は
   セルに作用しない死規則だった＝3種レビュー指摘）。overflow:visible は前方の td 規則
   （基本・埋め込みの両ブロック）の overflow:hidden を明示的に打ち消す（Copilot指摘）。 */
.eps-program .pres-table td{ display: block; min-width: 0; overflow: visible; overflow-wrap: anywhere; word-break: break-word; border-bottom: 1px solid #f0f0f0; }
.eps-program .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-program .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: 展開カードに謎の罫線が出る）:
   多くのテーマが `table td/th { border: 1px solid ... }` を当てるため、演題テーブルを
   grid 化した番号セル（狭い）の上下左右に線の断片が現れる。ここで枠線を一度リセットし、
   意図した行区切り（td の下線）だけを引き直す。border-spacing/背景もテーマ値を打ち消す。
   !important はテーマが `td{border:...!important}` を当てている場合に負けないため（この表は
   プラグイン専用でテーマ側が意図的に装飾する対象ではない＝上書きを塞いでも実害が無い）。 */
.eps-program .pres-table,
.eps-program .pres-table tbody,
.eps-program .pres-table tr,
.eps-program .pres-table td,
.eps-program .pres-table th{ border: 0 !important; background-image: none; }
.eps-program .pres-table{ border-collapse: collapse !important; border-spacing: 0 !important; }
.eps-program .pres-table td{ border-bottom: 1px solid #f0f0f0 !important; }
.eps-program .pres-table tr:last-child td{ border-bottom: 0 !important; }

/* スマホでテーマの左右余白ぶんだけ外へ広げる（ユーザー依頼 2026-07-29）。
   block テーマは本文コンテナに --wp--style--root--padding-* の余白を持つため、
   376px 幅の端末でプラグインに渡る幅が 304px（約2割減）になっていた。
   .alignfull と同じ手口でその余白を打ち消す。is-layout-constrained が
   margin:auto!important を当てるため !important が要る。変数が無いテーマでは
   0px にフォールバックし従来の幅のままになる（100vw 方式はスクロールバー幅ぶん
   横にあふれるため採らない）。実測: カード幅 244→304px、演題名の折り返し 583→447行。 */
@media (max-width: 640px){
  /* 親が実際にその余白を持つ場合に限定（変数は継承されるため、限定しないと
     サイドバー・カラム・入れ子グループ内ではみ出す。敵対レビュー[High]指摘）。 */
  :where(.has-global-padding) > .eps-program.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;
  }
}

/* ==== 会場の色分け（利用者報告 2026-07-31「第1会場と第2会場のアイコン表示が判り辛い」） ====
   会場ごとに枠番号（.venue-c1〜.venue-c4）を当て、色は1か所で持つ。
   区分（一般演題・シンポジウム…）の色とは別軸なので、区分の設定表には混ぜない。
   日付の帯（day-group の淡い背景）と喧嘩しないよう、こちらは彩度の高い文字色＋薄い地色にする。
   .venue-c4 は「合同（複数会場にまたがる）」の枠。 */
.eps-program .venue-c1{ --eps-venue: #1565c0; --eps-venue-bg: #e8f1fb; }
.eps-program .venue-c2{ --eps-venue: #b4256e; --eps-venue-bg: #fceaf3; }
.eps-program .venue-c3{ --eps-venue: #b45309; --eps-venue-bg: #fdf1e3; }
.eps-program .venue-c4{ --eps-venue: #6d28d9; --eps-venue-bg: #f2ecfd; }

/* カードの会場タグ。既定（会場名が判別できないデータ）は従来の色のまま。 */
.eps-program .session-venue-tag.venue-c1,
.eps-program .session-venue-tag.venue-c2,
.eps-program .session-venue-tag.venue-c3,
.eps-program .session-venue-tag.venue-c4{
  color: var(--eps-venue); background: var(--eps-venue-bg); border-color: var(--eps-venue); font-weight: 700;
}

/* 会場の節見出し。下線と会場名を同じ色にして、上から辿るときの目印にする。 */
.eps-program .venue-section.venue-c1 > .venue-header,
.eps-program .venue-section.venue-c2 > .venue-header,
.eps-program .venue-section.venue-c3 > .venue-header,
.eps-program .venue-section.venue-c4 > .venue-header{ border-bottom-color: var(--eps-venue); }
.eps-program .venue-section.venue-c1 > .venue-header .venue-name,
.eps-program .venue-section.venue-c2 > .venue-header .venue-name,
.eps-program .venue-section.venue-c3 > .venue-header .venue-name,
.eps-program .venue-section.venue-c4 > .venue-header .venue-name{ color: var(--eps-venue); }

/* 絞り込みの会場チップ。本文の目印と同じ色にして、押した先が想像できるようにする。 */
.eps-program .eps-chip.venue-c1,
.eps-program .eps-chip.venue-c2,
.eps-program .eps-chip.venue-c3,
.eps-program .eps-chip.venue-c4{ color: var(--eps-venue); border-left: 4px solid var(--eps-venue); }
.eps-program .eps-chip.venue-c1:hover,
.eps-program .eps-chip.venue-c2:hover,
.eps-program .eps-chip.venue-c3:hover,
.eps-program .eps-chip.venue-c4:hover{ background: var(--eps-venue-bg); }
/* 選択中は塗りつぶし（会場の色で塗る。既定の primary だとどの会場も同じ見え方になる）。 */
.eps-program .eps-chip.venue-c1.nav-active,
.eps-program .eps-chip.venue-c2.nav-active,
.eps-program .eps-chip.venue-c3.nav-active,
.eps-program .eps-chip.venue-c4.nav-active{ background: var(--eps-venue); border-color: var(--eps-venue); color: #fff; }

/* ==== スマホの幅（利用者依頼 2026-08-02「プログラムページの幅をスマホでもっと広げたい」） ====
   幅390pxで実測したところ、演題名に使えていたのは216px＝画面の55%だけだった。
   残り174px は入れ子の箱の余白（テーマ32／プログラム24／会場18／日付19／カード22／表14）と
   演題番号の左列45px。ここでは 640px 以下に限って、
     ・会場と日付の箱は「枠」をやめて位置だけの器にする（カードだけを枠として残す）
     ・演題番号を左の列から題名の上へ移す（列を1つ畳む）
   の2つを行う。実測 216px → 302px（1.40倍）。題名の行数も 12行 → 8行 に減った
   （幅だけ広げても行数は変わらなかったため、番号列を畳むところまでやって初めて効いた）。
   PC（641px以上）の見え方は一切変えない。 */
@media (max-width: 640px){
  .eps-program main{ padding-left: 6px; padding-right: 6px; }

  /* 会場の箱・日付の箱は、スマホでは枠と余白を持たない（位置と色だけ残す）。 */
  .eps-program .venue-body{
    padding-left: 0; padding-right: 0;
    border-left: 0; border-right: 0; border-radius: 0;
    background: transparent;
  }
  .eps-program .day-group{
    padding-left: 0; padding-right: 0;
    border-left-width: 0; border-radius: 0;
  }
  .eps-program .day-group > .date-divider{ padding-left: 2px; }

  .eps-program .session-card-body{ padding-left: 8px; padding-right: 8px; }

  /* 演題の表を縦積みにして、番号を題名の上へ。番号列（45px）を全行から畳む。
     display を変えるだけなので、検索のハイライトも行の並びもそのまま効く。 */
  .eps-program .pres-table,
  .eps-program .pres-table tbody,
  .eps-program .pres-table tr,
  .eps-program .pres-table td{ display: block; width: auto; }
  .eps-program .pres-table tr{ padding: 5px 6px 6px; }
  .eps-program .pres-table td{ padding: 0; }
  .eps-program .pres-table td:first-child{ margin-bottom: 2px; }
  /* 縞は td ではなく行に付ける（td が block になると縞が列単位に割れるため）。 */
  .eps-program .pres-table tr:nth-child(even) td{ background: transparent; }
  .eps-program .pres-table tr:nth-child(even){ background: #fafafa; }
}

/* ==== 抄録のパネル（同依頼「抄録部分の幅を倍ぐらいに」） ====
   抄録は演題名と同じセルの中に出るため、スマホでは216pxしかなかった。
   倍＝432px は 390px の画面に入らない（画面幅が上限で1.81倍）ため、
   実用上の上限に近い「画面いっぱいのパネルで開く」形にする。実測 350px＝1.62倍。
   パネルの見た目（.abs-panel 系）は以前から CSS だけ存在して未使用だったものを使う。
   PC は従来どおり、その場で開く（幅は既に1000px超あり、パネルにする理由がない）。 */
@media (max-width: 640px){
  .eps-program #abstract-modal{ padding: 8px; }
  .eps-program .abs-panel{ max-width: none; max-height: 92vh; }
  .eps-program .abs-panel-body{ padding: 12px; }
  /* パネルで開く画面では、その場の開閉ボックスは「ボタン」として振る舞う。 */
  .eps-program details.pres-abstract > summary{ cursor: pointer; }
}
/* パネルの中身は、カードの中と同じ見た目で読ませる（複製元のクラスをそのまま使う）。
   筆頭演者と所属1は details の外にある欄なので、パネルには JS 側で先頭へ入れている。 */
.eps-program .abs-panel-body .pres-presenter,
.eps-program .abs-panel-body .pres-coauthors,
.eps-program .abs-panel-body .pres-affils{ margin-bottom: 8px; }
.eps-program .abs-panel-body .pres-affils-lead{ margin-bottom: 10px; }
.eps-program .abs-panel-body .pres-abstract-body{ margin-top: 4px; }

/* ── 抄録の印刷（PDF保存）・プログラムの印刷（0.1.81・利用者依頼 2026-08-26）──────────
   刷る中身（.eps-abs-print 以下）の体裁を**画面用のこちら**に置いているのは、
   採寸するのが beforeprint の時点で、そこではまだ印刷用CSSが効いていないことがあるため
   （日程表で実際に踏んだ）。同じスタイルで測って同じスタイルで刷る。
   画面には出さないので、版面の外へ逃がしてある。印刷用CSSが版面へ引き戻す。 */
.eps-program .abs-actions{ display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; }
.eps-program .abs-act-btn{
  font:inherit; font-size:0.86em; font-weight:700; padding:6px 12px; cursor:pointer;
  border:1px solid var(--border); border-radius:8px; background:var(--surface); color:var(--text-sub);
}
.eps-program .abs-act-btn:hover:not(:disabled){ color:var(--primary); border-color:var(--primary); }
.eps-program .abs-act-btn:disabled{ opacity:.5; cursor:not-allowed; }
.eps-program .abs-act-pick.picked{ background:var(--primary); border-color:var(--primary); color:#fff; }

/* 帯は position:fixed なので、出ている間はページ末尾が下に隠れる（Copilot 指摘）。
   帯が出ているときだけ、その高さ（スクリプトが実寸を入れる）ぶんの余白を版面の下に足す。
   iOS のホームバーぶん（セーフエリア）も足す。印刷では版面の padding を 0 に戻すため効かない。 */
.eps-program.eps-tray-open{
  padding-bottom:calc(var(--eps-tray-h, 64px) + env(safe-area-inset-bottom, 0px) + 8px);
}

/* 溜めた抄録の帯。読みながら足せるよう画面の下に貼り付ける。 */
.eps-program .print-tray{
  position:fixed; left:0; right:0; bottom:0; z-index:40;
  display:flex; flex-wrap:wrap; align-items:center; gap:10px;
  padding:10px 14px; background:var(--surface); border-top:1px solid var(--border);
  box-shadow:0 -2px 10px rgba(0,0,0,.08); font-size:0.93em;
}
.eps-program .print-tray-count{ font-weight:700; }
.eps-program .print-tray-per{ display:inline-flex; align-items:center; gap:6px; }
.eps-program .print-tray-lab{ color:var(--text-sub); }
.eps-program .print-tray-btn,
.eps-program .print-tray-go,
.eps-program .print-tray-clear{
  font:inherit; font-weight:700; padding:6px 12px; cursor:pointer;
  border:1px solid var(--border); border-radius:8px; background:var(--surface); color:var(--text-sub);
}
.eps-program .print-tray-btn.active{ background:var(--primary); border-color:var(--primary); color:#fff; }
.eps-program .print-tray-go{ margin-left:auto; border-color:var(--primary); color:var(--primary); }
@media (max-width: 640px){
  .eps-program .print-tray{ font-size:0.86em; gap:6px; padding:8px 10px; }
  .eps-program .print-tray-go{ margin-left:0; width:100%; }
}

/* 刷る中身。画面には出さないが、採寸のために組み上げて版面の外に置く
   （display:none だと高さが測れず、収まるかどうかを判断できない）。 */
.eps-program .eps-abs-print{ position:absolute; left:-10000px; top:0; }
.eps-program .eps-abs-page{ display:grid; gap:0; overflow:hidden; }
.eps-program .eps-abs-print[data-per="1"] .eps-abs-page{ grid-template:1fr / 1fr; }
.eps-program .eps-abs-print[data-per="2"] .eps-abs-page{ grid-template:1fr 1fr / 1fr; }
.eps-program .eps-abs-print[data-per="4"] .eps-abs-page{ grid-template:1fr 1fr / 1fr 1fr; }
/* 枠線は出さない（利用者依頼 2026-09-01「各演題の枠線いらないです」）。
   面の境目は、内側の余白とセッション情報の下線で足りる。 */
.eps-program .eps-abs-sheet{
  overflow:hidden; min-width:0; min-height:0; padding:4mm;
  border:none; font-size:14px; color:var(--text); background:#fff;
}
/* 1抄録=1ページのときは紙面に余裕があるので、行間を広げて組む
   （利用者依頼 2026-09-01「1ページの場合は行間あけて、もっと大きく表示していい」）。
   文字は大きくしすぎない＝上限は本文 16pt（「もう少し字小さくて良い。14PT ぐらい？」で
   26 → 14pt へ下げ、続く「1ページの場合、16PT にしましょうか。老眼に優しく」で 16pt に落ち着いた。
   実際の値は eps-program.js の ABS_MAX_FONT）。
   字を小さくしたぶん行間の余白も比例して減るので、行送りは 1.9 → 2.1 へ広げる。
   実際の文字の大きさは、面に収まる範囲でスクリプトが上限まで広げる。 */
.eps-program .eps-abs-print[data-per="1"] .eps-abs-sheet{
  padding:0; line-height:2.1;
}
.eps-program .eps-abs-print[data-per="1"] .eps-abs-meta{ margin-bottom:10px; padding-bottom:5px; }
.eps-program .eps-abs-print[data-per="1"] .eps-abs-head{ margin-bottom:8px; }
.eps-program .eps-abs-print[data-per="1"] .pres-title{ line-height:1.5; }
.eps-program .eps-abs-print[data-per="1"] .pres-affils{ margin-bottom:10px; }
.eps-program .eps-abs-print[data-per="1"] .pres-abstract-body{ line-height:2.1; }
/* セッション情報の行は**必ず1行**に収める（利用者依頼 2026-09-01）。
   面付けすると幅が半分になり、折り返すと本文に使える高さをそのぶん食う。
   入り切らないときは末尾を省略する（どのセッションかは先頭の区分名で分かる）。 */
.eps-program .eps-abs-meta{
  font-size:0.82em; color:#555; border-bottom:1px solid #d9d9d9;
  padding-bottom:2px; margin-bottom:4px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.eps-program .eps-abs-head{ margin-bottom:3px; }
.eps-program .eps-abs-sheet .pres-no{ font-weight:700; margin-right:.4em; }
/* ふりがなは行の**上**に描かれる。行送りが詰まっていると前の行の文字と重なり、
   紙の上で字が読めなくなる（利用者報告 2026-09-01「4面になると、文字が被って消えてる」）。
   ふりがなを持つ行と、その上に来る行の行送りを広げる。 */
.eps-program .eps-abs-sheet .pres-title{ font-weight:700; line-height:1.5; }
.eps-program .eps-abs-sheet .pres-presenter,
.eps-program .eps-abs-sheet .pres-coauthors{ line-height:1.9; }
.eps-program .eps-abs-sheet .pres-affils{ font-size:0.9em; color:#444; line-height:1.5; margin-bottom:3px; }
/* 所属番号の <sup> は vertical-align:super でふりがなの帯まで持ち上がり、
   ふりがなと重なる（実測: ふりがなの帯 196〜206px に対し番号の上端 202px。
   利用者報告「ふりがなが施設番号に被る」）。帯より下へ下ろす。
   対象は**所属番号だけ**（氏名の後ろと所属名の後ろ）。演題名・抄録本文で装飾として
   使える <sup> まで縮めない（Copilot 指摘。TITLE_KSES が許可している）。 */
.eps-program .eps-abs-sheet .pres-author sup,
.eps-program .eps-abs-sheet .pres-affil-item sup{
  vertical-align:baseline; position:relative; top:-0.15em; font-size:0.62em;
}
.eps-program .eps-abs-sheet .pres-abstract-body{ line-height:1.45; text-align:justify; }
.eps-program .eps-abs-sheet summary,
.eps-program .eps-abs-sheet button{ display:none; }

/* ── 抄録本文のコピー抑止（設定 → 表示 →「抄録のコピー抑止」） ─────────────
   利用者依頼 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);
}

/* 抄録の面に脚注を入れるときは、面の中に**行を1つ足す**（重ねずに高さを譲る）。 */
.eps-program .eps-abs-print[data-per="1"] .eps-abs-page.has-note{ grid-template:1fr auto / 1fr; }
.eps-program .eps-abs-print[data-per="2"] .eps-abs-page.has-note{ grid-template:1fr 1fr auto / 1fr; }
.eps-program .eps-abs-print[data-per="4"] .eps-abs-page.has-note{ grid-template:1fr 1fr auto / 1fr 1fr; }
.eps-program .eps-abs-page .eps-print-note{ grid-column:1 / -1; }
/* 面は透かしの基準になる（面ごとに1枚敷く）。 */
.eps-program .eps-abs-page{ position:relative; }

/* ── 抄録の文字サイズ（小・中・大）─────────────────────────────────────
   利用者依頼 2026-09-02「抄録を見るのに文字のサイズ、小中大を選べるようにしたい。
   ただ表示は邪魔にならないようにしたい」。操作列の右端に小さく置き、既定（中）では
   ほとんど目に入らない濃さにする。効かせるのは**抄録本文だけ**（題名や氏名は動かさない）。 */
.eps-program .abs-fs{
  margin-left:auto; display:inline-flex; align-items:center; gap:4px;
  font-size:0.82em; color:var(--text-sub);
}
.eps-program .abs-fs-lab{ opacity:.75; }
.eps-program .abs-fs-btn{
  font:inherit; line-height:1; padding:3px 7px; cursor:pointer;
  border:1px solid var(--border); border-radius:5px;
  background:var(--surface); color:var(--text-sub);
}
.eps-program .abs-fs-btn:hover{ color:var(--primary); border-color:var(--primary); }
.eps-program .abs-fs-btn.active{
  background:var(--primary); border-color:var(--primary); color:#fff; font-weight:700;
}
/* 大きさは本文にだけ効かせる。既定（中）は 1em ＝従来どおり。 */
.eps-program.eps-fs-s .pres-abstract-body{ font-size:0.92em; }
.eps-program.eps-fs-m .pres-abstract-body{ font-size:1em; }
.eps-program.eps-fs-l .pres-abstract-body{ font-size:1.22em; }
/* 紙面は面付けの計算で決まるので、画面の選択に引きずられないようにする。 */
.eps-program .eps-abs-sheet .pres-abstract-body{ font-size:1em; }

/* 日程表の「抄録を見る」から飛んできたときの絞り込み（0.1.99）。
   該当の演題（セッション）だけを出し、解除の道を帯で示す。 */
.eps-program .pres-table tr.eps-row-off{ display:none; }
.eps-program .eps-focus-bar{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  margin:0 0 14px; padding:10px 14px;
  border:1px solid var(--primary); border-radius:var(--radius);
  background:var(--accent-light); color:var(--text); font-size:0.93em;
}
.eps-program .eps-focus-bar[hidden]{ display:none; }
.eps-program .eps-focus-clear{
  font:inherit; font-size:0.93em; font-weight:700; line-height:1;
  padding:7px 13px; cursor:pointer;
  border:1px solid var(--primary); border-radius:6px;
  background:#fff; color:var(--primary);
}
.eps-program .eps-focus-clear:hover,
.eps-program .eps-focus-clear:focus-visible{ background:var(--primary); color:#fff; }

