/* 埋め込みオーディオプレイヤー [ibo_player] 第1段（2026-09-22 サイト実装部）
 * SWELL の CSS 変数（--color_main / --color_text / --color_bg / --color_border）に馴染ませる。
 * 変数が無い環境でも fallback 値で成立する。
 */
.ibo-player {
  --ibo-accent: var(--color_main, #04384c);
  --ibo-text: var(--color_text, #333);
  --ibo-bg: var(--color_bg, #fdfdfd);
  --ibo-border: var(--color_border, rgba(0, 0, 0, .12));
  --ibo-muted: rgba(127, 127, 127, .55);
  --ibo-wave-base: rgba(127, 127, 127, .35);
  display: grid;
  grid-template-columns: minmax(180px, 38%) 1fr;
  gap: 0;
  margin: 1.8em 0;
  border: 1px solid var(--ibo-border);
  border-radius: 12px;
  background: var(--ibo-bg);
  color: var(--ibo-text);
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .06);
  line-height: 1.4;
}

/* ---- media slot（16:9・第2段/第3段はこの中身を差し替える） */
.ibo-player-media {
  position: relative;
  aspect-ratio: 16 / 9;
  background: #111;
  min-width: 0;
}
.ibo-player-thumb {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  margin: 0;
}
.ibo-player-thumb--empty {
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #1f2937, #0f172a);
}
.ibo-player-thumb--empty svg {
  width: 30%;
  height: 30%;
  fill: rgba(255, 255, 255, .35);
}
.ibo-player-yt {
  position: absolute;
  right: 8px;
  bottom: 8px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 9px;
  border-radius: 999px;
  background: rgba(0, 0, 0, .65);
  color: #fff !important;
  font-size: .72rem;
  font-weight: 700;
  text-decoration: none !important;
  line-height: 1;
  transition: background .15s;
}
.ibo-player-yt:hover { background: #cc0000; }
.ibo-player-yt[hidden] { display: none; }
.ibo-player-yt svg { width: 16px; height: 16px; fill: #fff; }

/* ---- 操作部 */
.ibo-player-body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
  padding: 14px 16px;
  min-width: 0;
}
.ibo-player-head {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}
.ibo-player-btn {
  flex: none;
  width: 44px;
  height: 44px;
  border: 0;
  border-radius: 50%;
  background: var(--ibo-accent);
  color: #fff;
  cursor: pointer;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform .1s, filter .15s;
}
.ibo-player-btn:hover { filter: brightness(1.12); }
.ibo-player-btn:active { transform: scale(.94); }
.ibo-player-btn:focus-visible { outline: 3px solid rgba(59, 130, 246, .6); outline-offset: 2px; }
.ibo-player-btn svg { width: 22px; height: 22px; fill: currentColor; }
.ibo-player-ico-pause { display: none; }
.ibo-player.is-playing .ibo-player-ico-play { display: none; }
.ibo-player.is-playing .ibo-player-ico-pause { display: block; }
.ibo-player.is-loading .ibo-player-btn { animation: ibo-player-pulse 1s ease-in-out infinite; }
@keyframes ibo-player-pulse { 50% { opacity: .55; } }

.ibo-player-titles { min-width: 0; }
.ibo-player-title {
  font-weight: 800;
  font-size: 1.02rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ibo-player-album {
  display: block;
  font-size: .78rem;
  color: var(--ibo-muted) !important;
  text-decoration: none !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ibo-player-album:hover { text-decoration: underline !important; }

/* ---- 波形 */
.ibo-player-wave {
  position: relative;
  height: 64px;
  margin-bottom: 1.3em;
  cursor: pointer;
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
  border-radius: 4px;
}
.ibo-player-wave:focus-visible { outline: 2px solid rgba(59, 130, 246, .6); outline-offset: 3px; }
.ibo-player-wave svg {
  display: block;
  width: 100%;
  height: 100%;
}
.ibo-player-wave-base { fill: var(--ibo-wave-base); }
.ibo-player-wave-done { fill: var(--ibo-accent); }
.ibo-player--flat .ibo-player-wave-base { fill: rgba(127, 127, 127, .25); }
.ibo-player-times {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1.35em;
  display: flex;
  justify-content: space-between;
  font-size: .72rem;
  font-variant-numeric: tabular-nums;
  color: var(--ibo-muted);
  pointer-events: none;
}

/* ---- プレイリスト */
.ibo-player-tracks {
  list-style: none;
  margin: 2px 0 0;
  padding: 0;
  border-top: 1px solid var(--ibo-border);
  max-height: 168px;
  overflow-y: auto;
}
.ibo-player-track button {
  display: grid;
  grid-template-columns: 2em 1fr auto;
  gap: 8px;
  width: 100%;
  padding: 6px 4px;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  font-size: .86rem;
  text-align: left;
  cursor: pointer;
  border-radius: 6px;
}
.ibo-player-track button:hover { background: rgba(127, 127, 127, .12); }
.ibo-player-track.is-active button { color: var(--ibo-accent); font-weight: 700; }
.ibo-player-track-no { color: var(--ibo-muted); font-variant-numeric: tabular-nums; }
.ibo-player-track-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ibo-player-track-dur { color: var(--ibo-muted); font-variant-numeric: tabular-nums; }

.ibo-player-audio { display: none; }

/* ---- スマホ幅: 縦積み（サムネ上・操作下） */
@media (max-width: 599px) {
  .ibo-player { grid-template-columns: 1fr; }
  .ibo-player-body { padding: 12px 14px 14px; }
  .ibo-player-wave { height: 56px; }
}

/* ---- ダーク配色（SWELL のダークモード class / OS 設定）に追従 */
@media (prefers-color-scheme: dark) {
  .ibo-player { --ibo-bg: var(--color_bg, #1b1b1b); --ibo-text: var(--color_text, #eee); }
}
body.-dark .ibo-player,
html[data-theme="dark"] .ibo-player {
  --ibo-bg: var(--color_bg, #1b1b1b);
  --ibo-text: var(--color_text, #eee);
}

/* ---- 第3段: 動画モード（.ibo-player--video）。<video> は media slot いっぱい・画像モードの曲では隠す */
.ibo-player-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #000;
  display: block;
  margin: 0;
  cursor: pointer;
}
.ibo-player-media[data-ibo-media="image"] .ibo-player-video { visibility: hidden; }
.ibo-player-media[data-ibo-media="video"] .ibo-player-thumb { visibility: hidden; }
.ibo-player-fs {
  position: absolute;
  right: 8px;
  bottom: 8px;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: rgba(0, 0, 0, .65);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background .15s;
}
.ibo-player-fs:hover { background: rgba(0, 0, 0, .85); }
.ibo-player-fs:focus-visible { outline: 3px solid rgba(59, 130, 246, .6); outline-offset: 2px; }
.ibo-player-fs svg { width: 18px; height: 18px; fill: currentColor; }
.ibo-player-media[data-ibo-media="image"] .ibo-player-fs { display: none; }
.ibo-player-media[data-ibo-media="video"] .ibo-player-yt { right: 46px; }
.ibo-player[data-ibo-error="hls"] .ibo-player-media::after {
  content: "動画を読み込めませんでした";
  position: absolute;
  left: 0; right: 0; bottom: 44px;
  text-align: center;
  color: #fff;
  font-size: .8rem;
  text-shadow: 0 1px 2px rgba(0, 0, 0, .8);
  pointer-events: none;
}

/* ---- 全画面（カード全体を全画面にする。動画は上いっぱい・操作部は下に残す） */
.ibo-player.is-fullscreen {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  margin: 0;
  border: 0;
  border-radius: 0;
  background: #000;
  --ibo-bg: #111;
  --ibo-text: #eee;
  --ibo-accent: #fff;
  --ibo-wave-base: rgba(255, 255, 255, .3);
}
.ibo-player.is-fullscreen .ibo-player-media {
  flex: 1 1 auto;
  aspect-ratio: auto;
  min-height: 0;
}
.ibo-player.is-fullscreen .ibo-player-body {
  flex: none;
  background: var(--ibo-bg);
  color: var(--ibo-text);
  padding: 12px 24px 16px;
}
.ibo-player.is-fullscreen .ibo-player-btn { background: #fff; color: #000; }
.ibo-player.is-fullscreen .ibo-player-tracks { max-height: 120px; }
