/* =========================================================
   YUKINON VOICE FINAL POLISH
   Ver.1.0
   ========================================================= */

body{
  -webkit-text-size-adjust:100%;

  text-rendering:
    optimizeLegibility;

  -webkit-font-smoothing:
    antialiased;
}


/* =========================================================
   FOCUS / TOUCH
   ========================================================= */

.voice-header a:focus-visible,
.voice-header button:focus-visible,
button:focus-visible,
select:focus-visible,
input:focus-visible{
  outline:
    3px solid
    rgba(238,102,173,.48);

  outline-offset:
    4px;
}


button,
a,
select{
  touch-action:
    manipulation;
}


/* =========================================================
   PLAYER SURFACES
   ========================================================= */

.player-card,
.library-card,
.voice-library,
.episode-card,
.episode-item,
.art-stage,
.voice-reaction{
  transition:
    background .35s ease,
    border-color .3s ease,
    box-shadow .3s ease,
    color .25s ease;
}


/* =========================================================
   NIGHT READABILITY
   ========================================================= */

body[data-theme="night"]
.voice-reaction p{
  color:
    #fff7fc !important;
}


body[data-theme="night"]
.voice-reaction span{
  color:
    #ff9fce !important;
}


body[data-theme="night"]
.episode-card,
body[data-theme="night"]
.episode-item{
  color:
    #f9eff8;
}


body[data-theme="night"]
.episode-card small,
body[data-theme="night"]
.episode-item small{
  color:
    #cfc0cf;
}


/* =========================================================
   DAY READABILITY
   ========================================================= */

body:not([data-theme="night"])
.voice-reaction p,
body[data-theme="day"]
.voice-reaction p{
  color:
    #49384f;
}


body:not([data-theme="night"])
.voice-reaction span,
body[data-theme="day"]
.voice-reaction span{
  color:
    #db5f9f;
}


/* =========================================================
   CONTROLS
   ========================================================= */

.series-chip,
.player-card button,
.library-card button,
.voice-library button{
  min-height:
    44px;
}


.series-chip{
  transition:
    transform .18s ease,
    background .2s ease,
    color .2s ease,
    border-color .2s ease;
}


@media(hover:hover){

  .series-chip:hover{
    transform:
      translateY(-1px);
  }

}


/* =========================================================
   RANGE
   ========================================================= */

input[type="range"]{
  cursor:pointer;

  touch-action:
    pan-x;
}


/* =========================================================
   REACTION
   ========================================================= */

.voice-reaction{
  line-height:1.7;
}


.voice-reaction p{
  font-weight:
    500;
}


/* =========================================================
   MOBILE
   ========================================================= */

@media(max-width:780px){

  .voice-header{
    padding-left:
      max(
        16px,
        env(safe-area-inset-left)
      );

    padding-right:
      max(
        16px,
        env(safe-area-inset-right)
      );
  }


  .player-card,
  .library-card,
  .voice-library{
    border-radius:
      24px;
  }


  .voice-reaction{
    padding:
      13px 15px;
  }


  .voice-reaction p{
    font-size:
      .82rem;
  }


  .series-filter{
    scroll-snap-type:
      x proximity;
  }


  .series-chip{
    scroll-snap-align:
      start;
  }

}


/* =========================================================
   SMALL MOBILE
   ========================================================= */

@media(max-width:430px){

  .player-card button,
  .voice-library button{
    min-width:
      44px;

    min-height:
      44px;
  }


  .voice-reaction p{
    font-size:
      .78rem;
  }

}


/* =========================================================
   REDUCED MOTION
   ========================================================= */

@media(
  prefers-reduced-motion:
  reduce
){

  *,
  *::before,
  *::after{
    animation-duration:
      .001ms !important;

    animation-iteration-count:
      1 !important;

    transition-duration:
      .001ms !important;
  }

}


/* =========================================================
   VOICE DEVICE QA V1.1
   PC / iPhone / Android
   ========================================================= */

html,
body{
  width:100%;
  max-width:100%;
}

body{
  overflow-x:clip;
}

@supports not (overflow-x:clip){
  body{
    overflow-x:hidden;
  }
}


img,
svg,
video{
  max-width:100%;
}


.voice-header,
.player-card,
.library-card,
.voice-library,
.episode-card,
.episode-item,
.art-stage{
  min-width:0;
}


/* =========================================================
   TABLET
   ========================================================= */

@media(max-width:1020px){

  .voice-header{
    padding-left:
      max(
        18px,
        env(safe-area-inset-left)
      ) !important;

    padding-right:
      max(
        18px,
        env(safe-area-inset-right)
      ) !important;
  }


  .player-card,
  .library-card,
  .voice-library{
    max-width:100%;
  }

}


/* =========================================================
   PHONE
   ========================================================= */

@media(max-width:780px){

  body{
    padding-bottom:
      env(safe-area-inset-bottom);
  }


  .voice-header{
    width:100%;

    gap:10px;

    padding-left:
      max(
        14px,
        env(safe-area-inset-left)
      ) !important;

    padding-right:
      max(
        14px,
        env(safe-area-inset-right)
      ) !important;
  }


  .voice-brand{
    flex:0 1 auto;

    min-width:0;
  }


  .voice-header a,
  .voice-header button{
    min-height:44px;
  }


  /*
   * メインプレイヤーとライブラリを
   * スマホでは確実に1列化。
   */
  .player-card,
  .library-card,
  .voice-library{
    width:100%;
    max-width:100%;
  }


  .series-filter{
    width:100%;

    overflow-x:auto;

    overscroll-behavior-x:
      contain;

    -webkit-overflow-scrolling:
      touch;
  }


  .series-chip{
    flex:0 0 auto;

    min-height:42px;
  }


  .voice-reaction{
    max-width:100%;
  }


  .voice-reaction p{
    overflow-wrap:anywhere;
  }


  input[type="range"]{
    width:100%;
    max-width:100%;
  }

}


/* =========================================================
   SMALL PHONE
   ========================================================= */

@media(max-width:430px){

  .voice-header{
    gap:7px;
  }


  .player-card,
  .library-card,
  .voice-library{
    border-radius:
      20px !important;
  }


  .voice-reaction{
    padding:
      12px 13px !important;
  }


  .series-chip{
    padding-left:12px;
    padding-right:12px;
  }

}


/* =========================================================
   SHORT LANDSCAPE
   ========================================================= */

@media(
  max-width:900px
)
and
(
  max-height:520px
)
and
(
  orientation:landscape
){

  .voice-header{
    position:relative;
  }


  .player-card{
    min-height:0 !important;
  }


  .voice-reaction{
    margin-top:8px;
  }

}


/* =========================================================
   TOUCH
   ========================================================= */

@media(hover:none) and (pointer:coarse){

  button,
  a,
  select,
  input[type="range"]{
    touch-action:
      manipulation;
  }


  button{
    min-width:44px;
    min-height:44px;
  }

}



/* =========================================================
   VOICE MOBILE COVER CENTER FIX V1.2
   iPhone / Android
   ========================================================= */

@media(max-width:780px){

  /*
   * ジャケット表示領域
   */
  .player-card .art-stage{
    position:relative !important;

    width:100% !important;
    max-width:100% !important;

    box-sizing:border-box !important;

    text-align:center !important;
  }


  /*
   * ジャケット画像本体
   * 左寄せを解除して中央固定
   */
  .player-card .art-stage .cover{
    display:block !important;

    width:
      min(
        100%,
        390px
      ) !important;

    max-width:390px !important;

    height:auto !important;

    margin-left:auto !important;
    margin-right:auto !important;
    margin-inline:auto !important;

    object-fit:cover !important;

    object-position:
      center center !important;

    float:none !important;
  }


  /*
   * PUBLICバッジ
   */
  .player-card .art-stage
  .access-badge{
    left:34px !important;
    right:auto !important;
  }


  /*
   * STANDARD / NIGHT 等のシーンバッジ
   * 右にはみ出させない
   */
  .player-card .art-stage
  .scene-badge{
    left:auto !important;
    right:34px !important;

    max-width:
      calc(
        100% - 68px
      ) !important;

    white-space:nowrap;
  }

}


/* =========================================================
   SMALL PHONE
   430px以下
   ========================================================= */

@media(max-width:430px){

  .player-card .art-stage{
    padding-left:16px !important;
    padding-right:16px !important;
  }


  .player-card .art-stage .cover{
    width:100% !important;

    max-width:390px !important;

    margin-inline:auto !important;
  }


  .player-card .art-stage
  .access-badge{
    left:28px !important;
  }


  .player-card .art-stage
  .scene-badge{
    right:28px !important;
  }

}



/* =========================================================
   VOICE MOBILE COVER TRUE CENTER V1.2.1
   scene-character時の左シフトをスマホだけ解除
   ========================================================= */

@media(max-width:780px){

  /*
   * scene visual側で入っている
   *
   * body.has-scene-character .cover {
   *   transform: translateX(-8%);
   * }
   *
   * をスマホ時だけ解除
   */

  body.has-scene-character
  .player-card
  .art-stage
  .cover{
    position:relative !important;

    left:auto !important;
    right:auto !important;

    transform:none !important;
    translate:none !important;

    width:
      min(
        100%,
        390px
      ) !important;

    max-width:
      390px !important;

    margin-left:auto !important;
    margin-right:auto !important;
    margin-inline:auto !important;

    align-self:center !important;
  }


  /*
   * scene-characterが無い通常時も
   * 同じ中央座標へ統一
   */
  .player-card
  .art-stage
  .cover{
    transform:none !important;
    translate:none !important;

    margin-inline:auto !important;
  }

}


/* =========================================================
   SMALL PHONE
   ========================================================= */

@media(max-width:430px){

  body.has-scene-character
  .player-card
  .art-stage
  .cover,

  .player-card
  .art-stage
  .cover{
    width:100% !important;

    max-width:390px !important;

    transform:none !important;

    margin-inline:auto !important;
  }

}



/* =========================================================
   VOICE SCENE VISUAL RESPONSIVE FIX V1.3
   PC / Tablet / Mobile
   ========================================================= */


/* =========================================================
   VISUAL STAGE
   ========================================================= */

.player-card .art-stage{
  position:relative !important;

  isolation:isolate;

  overflow:hidden !important;
}


/*
 * 既存Scene Visualと
 * fallbackで生成するScene Visualの両方に対応
 */
.player-card .art-stage
.voice-scene-standee-fix,

.player-card .art-stage
img.scene-character,

.player-card .art-stage
.scene-character img,

.player-card .art-stage
img.scene-visual,

.player-card .art-stage
.scene-visual img,

.player-card .art-stage
img[data-scene-visual],

.player-card .art-stage
.player-scene-visual img,

.player-card .art-stage
img[src*="/assets/uploads/voice/visuals/"]{
  position:absolute !important;

  right:0 !important;
  bottom:0 !important;

  left:auto !important;
  top:auto !important;

  display:block !important;

  width:68% !important;
  height:94% !important;

  max-width:68% !important;
  max-height:94% !important;

  object-fit:contain !important;

  object-position:
    right bottom !important;

  margin:0 !important;

  opacity:1 !important;
  visibility:visible !important;

  transform:none !important;
  translate:none !important;

  clip-path:none !important;

  pointer-events:none !important;

  z-index:2 !important;
}


/*
 * wrapper自身がdisplay:noneになっているケースも解除
 */
body.has-scene-character
.player-card .art-stage
.scene-character,

body.has-scene-character
.player-card .art-stage
.scene-visual,

body.has-scene-character
.player-card .art-stage
.player-scene-visual{
  display:block !important;

  opacity:1 !important;

  visibility:visible !important;
}


/*
 * ジャケット画像は立ち絵より手前
 */
.player-card .art-stage .cover{
  position:relative !important;

  z-index:4 !important;
}


/*
 * PUBLIC / STANDARD等も最前面
 */
.player-card .art-stage
.access-badge,

.player-card .art-stage
.scene-badge{
  z-index:6 !important;
}


/* =========================================================
   PC
   ========================================================= */

@media(min-width:1101px){

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    width:66% !important;
    height:94% !important;

    max-width:66% !important;
    max-height:94% !important;

    right:0 !important;
    bottom:0 !important;

    object-position:
      right bottom !important;
  }

}


/* =========================================================
   TABLET
   立ち絵が見切れていた範囲
   ========================================================= */

@media(
  min-width:781px
)
and
(
  max-width:1100px
){

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    width:58% !important;
    height:88% !important;

    max-width:58% !important;
    max-height:88% !important;

    right:2% !important;
    bottom:0 !important;

    object-fit:contain !important;

    object-position:
      center bottom !important;
  }

}


/* =========================================================
   MOBILE
   ========================================================= */

@media(max-width:780px){

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    width:54% !important;
    height:88% !important;

    max-width:54% !important;
    max-height:88% !important;

    right:0 !important;
    bottom:0 !important;

    object-fit:contain !important;

    object-position:
      right bottom !important;

    opacity:1 !important;

    transform:none !important;
  }

}


/* =========================================================
   SMALL MOBILE
   ========================================================= */

@media(max-width:430px){

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    width:50% !important;
    height:84% !important;

    max-width:50% !important;
    max-height:84% !important;
  }

}



/* =========================================================
   VOICE PLAYER LAYER + BADGE FIX V1.4
   ========================================================= */


/* ---------------------------------------------------------
   ART STAGE
   --------------------------------------------------------- */

.player-card .art-stage{
  position:relative !important;
  isolation:isolate !important;

  overflow:hidden !important;
}


/*
 * ジャケットは背景側
 */
.player-card .art-stage .cover{
  position:relative !important;

  z-index:3 !important;
}


/*
 * 立ち絵はジャケットより前
 */
.player-card .art-stage
.voice-scene-standee-fix,

.player-card .art-stage
img.scene-character,

.player-card .art-stage
.scene-character img,

.player-card .art-stage
img.scene-visual,

.player-card .art-stage
.scene-visual img,

.player-card .art-stage
img[data-scene-visual],

.player-card .art-stage
.player-scene-visual img,

.player-card .art-stage
img[src*="/assets/uploads/voice/visuals/"]{
  position:absolute !important;

  display:block !important;

  top:auto !important;
  left:auto !important;

  right:10px !important;
  bottom:10px !important;

  width:44% !important;
  height:68% !important;

  max-width:none !important;
  max-height:none !important;

  object-fit:contain !important;

  object-position:
    right bottom !important;

  margin:0 !important;

  opacity:1 !important;

  visibility:visible !important;

  transform:none !important;
  translate:none !important;

  filter:none !important;

  clip-path:none !important;

  pointer-events:none !important;

  z-index:7 !important;
}


/*
 * wrapperそのものが非表示に
 * なっているケースも解除
 */

body.has-scene-character
.player-card .art-stage
.scene-character,

body.has-scene-character
.player-card .art-stage
.scene-visual,

body.has-scene-character
.player-card .art-stage
.player-scene-visual{
  display:block !important;

  visibility:visible !important;

  opacity:1 !important;

  z-index:7 !important;
}


/* =========================================================
   PUBLIC / STANDARD COMMON BADGE
   ========================================================= */

.player-card .art-stage
.access-badge,

.player-card .art-stage
.scene-badge,

.player-card .art-stage
.scene-label,

.player-card .art-stage
.voice-access-badge-normalized,

.player-card .art-stage
.voice-scene-badge-normalized,

.player-card .art-stage
[data-scene-badge],

.player-card .art-stage
#sceneBadge{
  position:absolute !important;

  top:16px !important;
  bottom:auto !important;

  display:inline-flex !important;

  align-items:center !important;
  justify-content:center !important;

  width:auto !important;
  height:28px !important;

  min-width:0 !important;
  min-height:28px !important;

  padding:
    0 12px !important;

  margin:0 !important;

  border:
    1px solid
    rgba(255,255,255,.16) !important;

  border-radius:
    999px !important;

  color:
    #fff7fc !important;

  background:
    rgba(42,31,49,.88) !important;

  box-shadow:
    0 7px 18px
    rgba(5,2,8,.18) !important;

  backdrop-filter:
    blur(10px) !important;

  -webkit-backdrop-filter:
    blur(10px) !important;

  font-family:
    Arial,
    Helvetica,
    sans-serif !important;

  font-size:
    10px !important;

  font-style:
    normal !important;

  font-weight:
    800 !important;

  line-height:
    1 !important;

  letter-spacing:
    .11em !important;

  text-transform:
    uppercase !important;

  white-space:
    nowrap !important;

  text-shadow:
    none !important;

  transform:
    none !important;

  z-index:
    20 !important;
}


/* ---------------------------------------------------------
   PUBLIC = 左上
   --------------------------------------------------------- */

.player-card .art-stage
.access-badge,

.player-card .art-stage
.voice-access-badge-normalized{
  left:16px !important;
  right:auto !important;
}


/* ---------------------------------------------------------
   STANDARD = 右上
   --------------------------------------------------------- */

.player-card .art-stage
.scene-badge,

.player-card .art-stage
.scene-label,

.player-card .art-stage
.voice-scene-badge-normalized,

.player-card .art-stage
[data-scene-badge],

.player-card .art-stage
#sceneBadge{
  left:auto !important;
  right:16px !important;
}


/* =========================================================
   NIGHT
   ========================================================= */

body[data-theme="night"]
.player-card .art-stage
.access-badge,

body[data-theme="night"]
.player-card .art-stage
.scene-badge,

body[data-theme="night"]
.player-card .art-stage
.scene-label,

body[data-theme="night"]
.player-card .art-stage
.voice-access-badge-normalized,

body[data-theme="night"]
.player-card .art-stage
.voice-scene-badge-normalized,

body[data-theme="night"]
.player-card .art-stage
[data-scene-badge],

body[data-theme="night"]
.player-card .art-stage
#sceneBadge{
  color:
    #fff7fc !important;

  background:
    rgba(42,31,49,.88) !important;

  border-color:
    rgba(244,155,197,.20) !important;
}


/* =========================================================
   DAY
   ========================================================= */

body:not([data-theme="night"])
.player-card .art-stage
.access-badge,

body:not([data-theme="night"])
.player-card .art-stage
.scene-badge,

body:not([data-theme="night"])
.player-card .art-stage
.scene-label,

body:not([data-theme="night"])
.player-card .art-stage
.voice-access-badge-normalized,

body:not([data-theme="night"])
.player-card .art-stage
.voice-scene-badge-normalized{
  color:
    #60445f !important;

  background:
    rgba(255,250,253,.90) !important;

  border-color:
    rgba(218,135,180,.24) !important;
}


/* =========================================================
   TABLET
   ========================================================= */

@media(
  min-width:781px
)
and
(
  max-width:1100px
){

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    width:40% !important;
    height:62% !important;

    right:8px !important;
    bottom:8px !important;

    z-index:7 !important;
  }

}


/* =========================================================
   MOBILE
   ========================================================= */

@media(max-width:780px){

  /*
   * スマホでは立ち絵を少し小さくして
   * ジャケット右下へ重ねる
   */

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    display:block !important;

    width:42% !important;
    height:58% !important;

    max-width:none !important;
    max-height:none !important;

    right:8px !important;
    bottom:8px !important;

    opacity:1 !important;

    visibility:visible !important;

    transform:none !important;

    z-index:7 !important;
  }


  /*
   * バッジを上端へ
   */

  .player-card .art-stage
  .access-badge,

  .player-card .art-stage
  .scene-badge,

  .player-card .art-stage
  .scene-label,

  .player-card .art-stage
  .voice-access-badge-normalized,

  .player-card .art-stage
  .voice-scene-badge-normalized,

  .player-card .art-stage
  [data-scene-badge],

  .player-card .art-stage
  #sceneBadge{
    top:12px !important;

    height:26px !important;

    min-height:26px !important;

    padding:
      0 10px !important;

    font-size:
      9px !important;

    z-index:20 !important;
  }


  .player-card .art-stage
  .access-badge,

  .player-card .art-stage
  .voice-access-badge-normalized{
    left:12px !important;
    right:auto !important;
  }


  .player-card .art-stage
  .scene-badge,

  .player-card .art-stage
  .scene-label,

  .player-card .art-stage
  .voice-scene-badge-normalized,

  .player-card .art-stage
  [data-scene-badge],

  .player-card .art-stage
  #sceneBadge{
    left:auto !important;
    right:12px !important;
  }

}


/* =========================================================
   SMALL MOBILE
   ========================================================= */

@media(max-width:430px){

  .player-card .art-stage
  .voice-scene-standee-fix,

  .player-card .art-stage
  img.scene-character,

  .player-card .art-stage
  .scene-character img,

  .player-card .art-stage
  img.scene-visual,

  .player-card .art-stage
  .scene-visual img,

  .player-card .art-stage
  img[data-scene-visual],

  .player-card .art-stage
  img[src*="/assets/uploads/voice/visuals/"]{
    width:40% !important;
    height:54% !important;

    right:6px !important;
    bottom:6px !important;
  }


  .player-card .art-stage
  .access-badge,

  .player-card .art-stage
  .voice-access-badge-normalized{
    left:10px !important;
  }


  .player-card .art-stage
  .scene-badge,

  .player-card .art-stage
  .scene-label,

  .player-card .art-stage
  .voice-scene-badge-normalized,

  .player-card .art-stage
  [data-scene-badge],

  .player-card .art-stage
  #sceneBadge{
    right:10px !important;
  }

}

