/* =========================================================
   POP LIVE MOTION（2026-10-08）
   「自分を応援する、POPなライブ会場」に没入する動きの層。
   - 既存の transform を壊さないよう、translate / rotate / scale の個別プロパティだけを動かす
   - html.pm-on のときだけ動く（OSの動き軽減・「動きを止める」ボタンで外れる）
   - 色は入場で選んだペンライト色 --stage-light を引き継ぐ
   ========================================================= */
:root { --pm-light: var(--stage-light, #7bdafa); --pm-pop: cubic-bezier(.34, 1.56, .64, 1); --pm-beat: .5s; }

/* ---------- ペンライト型スクロール進捗 ---------- */
.pm-progress { position: fixed; left: 0; top: 0; z-index: 9998; height: 5px; width: 100%; pointer-events: none; transform-origin: 0 50%; scale: var(--p, 0) 1; background: linear-gradient(90deg, #fff, var(--pm-light)); box-shadow: 0 0 12px var(--pm-light), 0 0 3px #fff; border-radius: 0 9px 9px 0; }
.pm-progress-head { position: fixed; top: -8px; z-index: 9999; left: calc(var(--p, 0) * 100% - 11px); width: 22px; height: 22px; pointer-events: none; color: var(--pm-light); filter: drop-shadow(0 0 6px var(--pm-light)); }
.pm-progress-head svg { width: 100%; height: 100%; display: block; }
.pm-on .pm-progress-head svg { animation: pm-twinkle 1.6s ease-in-out infinite; }
html:not(.pm-on) .pm-progress, html:not(.pm-on) .pm-progress-head { display: none; }

/* ---------- タップではじけるハート＆キラキラ ---------- */
.pm-burst { position: fixed; inset: 0; z-index: 10000; pointer-events: none; overflow: hidden; }
.pm-burst i { position: absolute; left: 0; top: 0; width: var(--s, 16px); height: var(--s, 16px); color: var(--c); }
.pm-burst svg, .pm-floaties svg { width: 100%; height: 100%; display: block; overflow: visible; }

/* ---------- スクロールで「ぽよん」と登場 ---------- */
.pm-on [data-pop]:not(.is-in) { opacity: 0; translate: 0 34px; scale: .9; }
.pm-on [data-pop="tilt"]:not(.is-in) { rotate: -9deg; translate: -14px 18px; }
.pm-on [data-pop="drop"]:not(.is-in) { translate: 0 -60px; rotate: 6deg; scale: .85; }
.pm-on [data-pop="left"]:not(.is-in) { translate: -46px 10px; rotate: -4deg; }
.pm-on [data-pop="right"]:not(.is-in) { translate: 46px 10px; rotate: 4deg; }
.pm-on [data-pop="zoom"]:not(.is-in) { scale: .4; translate: 0 10px; }
.pm-on [data-pop]:not(.pm-done) { transition: opacity .45s ease, translate .8s var(--pm-pop), scale .8s var(--pm-pop), rotate .8s var(--pm-pop); transition-delay: calc(var(--pd, 0) * 95ms); }

/* ---------- 01 ヒーロー：幕が開いたら主役が飛び出す ---------- */
.cover { position: relative; isolation: isolate; }
.pm-on.pm-wait-hero .pm-hero { opacity: 0; }
.pm-on .cover.pm-hero-go .cover-copy .label { animation: pm-stamp .7s var(--pm-pop) backwards; }
.pm-on .cover.pm-hero-go h1 { animation: pm-up .8s var(--pm-pop) .12s backwards; }
.pm-on .cover.pm-hero-go .intro,
.pm-on .cover.pm-hero-go .cover-copy .button,
.pm-on .cover.pm-hero-go .participation-note,
.pm-on .cover.pm-hero-go .cover-copy .text-link { animation: pm-up .7s var(--pm-pop) backwards; animation-delay: calc(.25s + var(--hd, 0) * .08s); }
.pm-on .cover.pm-hero-go .cover-art .aki { transform-origin: 50% 100%; animation: pm-jump-in .9s var(--pm-pop) .2s backwards, pm-sway 3s ease-in-out 1.2s infinite; }
.pm-on .cover.pm-hero-go .cover-art .mokeru { transform-origin: 50% 100%; animation: pm-jump-in .8s var(--pm-pop) .55s backwards, pm-hop 2s ease-in-out 1.6s infinite; }
.pm-on .cover.pm-hero-go .cover-art .stamp { animation: pm-stamp .7s var(--pm-pop) .75s backwards, pm-wobble 4s ease-in-out 1.6s infinite; }
.pm-on .cover.pm-hero-go .cover-art .art-word { animation: pm-zoom .6s var(--pm-pop) .9s backwards, pm-pulse 1s ease-in-out 1.6s infinite; }
.pm-on .cover.pm-hero-go .art-caption { animation: pm-up .7s var(--pm-pop) 1s backwards; }
.pm-on .cover.pm-hero-go .visual-index { animation: pm-stamp .6s var(--pm-pop) 1.1s backwards; }
/* パララックス（PCのマウス位置で、絵の部品が少しずつ違う量で動く） */
.cover-art .aki { translate: calc(var(--mx, 0) * 10px) calc(var(--my, 0) * 6px); transition: translate .5s ease-out; }
.cover-art .stamp { translate: calc(var(--mx, 0) * -18px) calc(var(--my, 0) * -12px); transition: translate .5s ease-out; }
.cover-art .art-word { translate: calc(var(--mx, 0) * 22px) calc(var(--my, 0) * 14px); transition: translate .5s ease-out; }
/* SELF OSHI の文字が、ビートに合わせて順番にジャンプ */
.pm-on .club-letters > span { animation: pm-letter 4s var(--pm-pop) infinite; animation-delay: calc(1.4s + var(--li, 0) * .1s); }
.pm-on .cover-bottom a { display: inline-block; animation: pm-nudge 1.6s ease-in-out infinite; }

/* 背景にふわふわ上がるハート・星・しゃぼん玉 */
.pm-floaties { position: absolute; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; }
.pm-floaties i { position: absolute; left: var(--x); bottom: -60px; width: var(--s); height: var(--s); color: var(--c); opacity: 0; }
.pm-floaties svg { width: 100%; height: 100%; display: block; }
.pm-on .pm-floaties i { animation: pm-rise var(--t, 12s) linear var(--d, 0s) infinite; }
html:not(.pm-on) .pm-floaties { display: none; }

/* ---------- 01 コンセプト：声援がチャットみたいに届く ---------- */
.pm-on .voice-example span.pm-done { animation: pm-float 3.2s ease-in-out infinite; animation-delay: calc(var(--pd, 0) * -.8s); }

/* ---------- みんな、推せる♡ ---------- */
.pm-on .reveal-title span + span.pm-done { animation: pm-heartbeat 1s ease-in-out infinite; }

/* ---------- 02 名鑑：ペンライトが灯って、うちわを振る ---------- */
.pm-on .oshi-member.pm-done .goods-light { animation: pm-glow 1s ease-in-out infinite; animation-delay: calc(var(--pd, 0) * -.25s); }
.pm-on .oshi-member.pm-done .goods-fan { transform-origin: 50% 90%; animation: pm-wave 1s ease-in-out infinite alternate; animation-delay: calc(var(--pd, 0) * -.33s); }
.pm-on .oshi-member.pm-done .member-avatar { animation: pm-pop-once .7s var(--pm-pop) both; }
@media (hover: hover) {
  .pm-on .oshi-member { transition: rotate .35s var(--pm-pop), translate .35s var(--pm-pop), box-shadow .35s; }
  .pm-on .oshi-member.pm-done:hover { rotate: -1.2deg; translate: 0 -6px; box-shadow: 6px 8px 0 var(--member-color, #13213b); }
  .pm-on .oshi-member.pm-done:hover .goods-fan { animation-duration: .35s; }
}

/* ---------- 03 参加：入場券がキラッ ---------- */
.admission-ticket { position: relative; overflow: hidden; }
.pm-shine { position: absolute; inset: -20% auto -20% -60%; width: 40%; pointer-events: none; background: linear-gradient(100deg, transparent, #ffffffcc 45%, #fff 50%, #ffffffcc 55%, transparent); rotate: 12deg; opacity: 0; }
.pm-on .admission-ticket.pm-done { animation: pm-bob 3s ease-in-out infinite; }
.pm-on .admission-ticket.pm-done .pm-shine { animation: pm-shine 3.6s ease-in-out .4s infinite; }
.pm-on .admission-ticket .ticket-star { display: inline-block; animation: pm-twinkle 1.6s ease-in-out infinite; }

/* ---------- 04 原点 ---------- */
.pm-on .origin-sticker { animation: pm-wobble 3.4s ease-in-out infinite; }

/* ---------- 05 FAQ：答えがすっと出る ---------- */
.pm-on .faq-list details[open] > p { animation: pm-up .45s var(--pm-pop) both; }

/* ---------- 診断カード ---------- */
@media (hover: hover) {
  .pm-on .quiz.pm-done:hover .quiz-image img { animation: pm-wiggle .5s ease-in-out; }
}

/* ---------- 会員証：ホログラムみたいに傾く ---------- */
.card-entry-visual { perspective: 900px; }
.card-entry-visual canvas { transition: transform .4s ease-out; transform: rotateX(var(--ry, 0deg)) rotateY(var(--rx, 0deg)); }
.pm-on .card-entry-visual.pm-done canvas { animation: pm-float 4s ease-in-out infinite; }

/* ---------- 声援ボタン ---------- */
.live-cheer { position: relative; isolation: isolate; }
.pm-on .cheer-button { position: relative; }
.pm-on .cheer-button::after { content: ""; position: absolute; inset: -4px; border-radius: inherit; border: 3px solid var(--pm-light); opacity: 0; pointer-events: none; animation: pm-ring 2s ease-out infinite; }
.pm-on .cheer-message.pm-cheered { animation: pm-stamp .6s var(--pm-pop) both; }

/* ---------- 締め：客席のペンライトの海 ---------- */
.pm-on .closing-brand i { display: inline-block; animation: pm-heartbeat 1s ease-in-out infinite; }

/* ---------- 画面外は止めて、軽く ---------- */
.pm-on .pm-sleep *, .pm-on .pm-sleep { animation-play-state: paused !important; }

/* ---------- keyframes ---------- */
@keyframes pm-up { from { opacity: 0; translate: 0 30px; scale: .94; } to { opacity: 1; translate: 0 0; scale: 1; } }
@keyframes pm-zoom { from { opacity: 0; scale: .2; } to { opacity: 1; scale: 1; } }
@keyframes pm-stamp { 0% { opacity: 0; scale: 2.2; rotate: -14deg; } 60% { opacity: 1; scale: .9; } 100% { opacity: 1; scale: 1; rotate: 0deg; } }
@keyframes pm-jump-in { 0% { opacity: 0; translate: 0 70px; scale: .7 .7; } 55% { opacity: 1; translate: 0 -18px; scale: .95 1.08; } 75% { translate: 0 0; scale: 1.06 .94; } 100% { opacity: 1; translate: 0 0; scale: 1; } }
@keyframes pm-sway { 0%, 100% { rotate: -2deg; } 50% { rotate: 2deg; } }
@keyframes pm-hop { 0%, 60%, 100% { translate: 0 0; scale: 1; } 70% { translate: 0 0; scale: 1.08 .9; } 82% { translate: 0 -22px; scale: .94 1.06; } 92% { translate: 0 0; scale: 1.06 .94; } }
@keyframes pm-wobble { 0%, 100% { rotate: -6deg; } 50% { rotate: 6deg; } }
@keyframes pm-pulse { 0%, 100% { scale: 1; } 15% { scale: 1.14; } 30% { scale: .97; } }
@keyframes pm-heartbeat { 0%, 100% { scale: 1; } 14% { scale: 1.18; } 28% { scale: 1; } 42% { scale: 1.1; } 60% { scale: 1; } }
@keyframes pm-letter { 0%, 70%, 100% { translate: 0 0; scale: 1; } 74% { translate: 0 0; scale: 1.06 .92; } 80% { translate: 0 -12%; scale: .95 1.06; } 88% { translate: 0 0; scale: 1.05 .95; } 93% { scale: 1; } }
@keyframes pm-nudge { 0%, 100% { translate: 0 0; } 50% { translate: 0 6px; } }
@keyframes pm-rise { 0% { opacity: 0; translate: 0 0; rotate: 0deg; } 10% { opacity: var(--o, .8); } 50% { translate: var(--dx, 20px) -55vh; rotate: var(--rr, 30deg); } 90% { opacity: var(--o, .8); } 100% { opacity: 0; translate: 0 -110vh; rotate: 0deg; } }
@keyframes pm-float { 0%, 100% { translate: 0 0; } 50% { translate: 0 -7px; } }
@keyframes pm-glow { 0%, 100% { filter: drop-shadow(0 0 2px var(--member-color, #7bdafa)) brightness(1); } 50% { filter: drop-shadow(0 0 12px var(--member-color, #7bdafa)) drop-shadow(0 0 4px #fff) brightness(1.12); } }
@keyframes pm-wave { from { rotate: -9deg; } to { rotate: 9deg; } }
@keyframes pm-pop-once { 0% { scale: .6; rotate: -12deg; } 70% { scale: 1.08; rotate: 3deg; } 100% { scale: 1; rotate: 0deg; } }
@keyframes pm-bob { 0%, 100% { translate: 0 0; rotate: 0deg; } 50% { translate: 0 -8px; rotate: -1.2deg; } }
@keyframes pm-shine { 0%, 55% { opacity: 0; left: -60%; } 60% { opacity: 1; } 85% { opacity: 1; left: 130%; } 100% { opacity: 0; left: 130%; } }
@keyframes pm-twinkle { 0%, 100% { scale: 1; rotate: 0deg; } 50% { scale: 1.35; rotate: 90deg; } }
@keyframes pm-wiggle { 0%, 100% { rotate: 0deg; } 25% { rotate: -3deg; } 75% { rotate: 3deg; } }
@keyframes pm-ring { 0% { opacity: .9; scale: 1; } 100% { opacity: 0; scale: 1.25 1.6; } }
@keyframes pm-swing { from { rotate: calc(var(--r) - 16deg); } to { rotate: calc(var(--r) + 16deg); } }

/* ---------- スマホは少し控えめに ---------- */
@media (max-width: 760px) {
  .pm-on [data-pop="left"]:not(.is-in), .pm-on [data-pop="right"]:not(.is-in) { translate: 0 24px; }
}

/* 動きを止めたい人には、ぜんぶ止まった完成形を見せる */
@media (prefers-reduced-motion: reduce) {
  .pm-progress, .pm-progress-head, .pm-burst, .pm-floaties, .pm-shine { display: none; }
  .card-entry-visual canvas { transition: none; transform: none; }
}
.motion-off .card-entry-visual canvas { transform: none; }

/* =========================================================
   客席（開幕とページの締めで共通・2026-10-09 改）
   頭のシルエット＋カラフルなペンライト＋うちわ診断のうちわ。
   ペンライトは1本ずつ違う速さ・タイミングで、ゆっくり左右に揺れる（揃えない）
   開幕：curtain-open で客席がせり上がり、reveal-you で全開
   締め：.sc-live を付けて最初から全開
   ========================================================= */
.stage-crowd { position: absolute; left: 0; right: 0; bottom: 0; height: min(40vh, 360px); z-index: 6; pointer-events: none; }
#oshiEntrance .stage-crowd { translate: 0 105%; transition: translate 1.1s cubic-bezier(.22, .8, .25, 1) .25s; }
#oshiEntrance.curtain-open .stage-crowd { translate: 0 0; }
.sc-beams { position: absolute; inset: 0; z-index: 5; pointer-events: none; opacity: 0; transition: opacity .4s; overflow: hidden; }
.sc-beams i { position: absolute; bottom: -10%; width: 34vw; height: 140vh; transform-origin: 50% 100%; rotate: var(--a); background: linear-gradient(to top, var(--c), transparent 85%); clip-path: polygon(44% 100%, 56% 100%, 100% 0, 0 0); opacity: .26; mix-blend-mode: screen; }
.sc-beams i:nth-child(1) { left: 2vw; --c: #ff8ebd; --a: 18deg; }
.sc-beams i:nth-child(2) { right: 2vw; --c: #7bdafa; --a: -18deg; }
.sc-beams i:nth-child(3) { left: 33vw; --c: #f8f36a; --a: 8deg; opacity: .18; }
.reveal-you .sc-beams { opacity: 1; }

/* ペンライト */
.sc-lights span { position: absolute; bottom: calc(var(--b) * 1px); left: var(--x); width: var(--w, 13px); height: var(--h); transform-origin: 50% 100%; rotate: var(--r); }
.sc-lights span::before { content: ""; position: absolute; inset: 0 0 24% 0; border-radius: 99px; background: linear-gradient(#fff, var(--c) 28%); box-shadow: 0 0 10px 1px var(--c); opacity: .5; transition: opacity .4s, box-shadow .4s; }
.sc-lights span::after { content: ""; position: absolute; left: 1px; right: 1px; bottom: 0; height: 26%; border-radius: 3px 3px 7px 7px; background: #0b1024; border: 1px solid #ffffff1c; }
:is(.reveal-you, .sc-live) .sc-lights span::before { opacity: 1; box-shadow: 0 0 14px 3px var(--c), 0 0 38px 10px color-mix(in srgb, var(--c) 45%, transparent); }

/* うちわ（うちわ診断のうちわ） */
.sc-fans span { position: absolute; bottom: calc(var(--b) * 1px); left: var(--x); width: min(var(--w), 20vh); translate: -50% 130%; transform-origin: 50% 95%; rotate: var(--r); opacity: 0; }
.sc-fans img { display: block; width: 100%; height: auto; filter: drop-shadow(0 0 14px #ffffff30); }
:is(.reveal-you, .sc-live) .sc-fans span { opacity: 1; translate: -50% 0; transition: opacity .2s, translate .55s cubic-bezier(.34, 1.56, .64, 1); transition-delay: calc(var(--i) * 70ms); }

/* 頭のシルエット（いちばん手前） */
.sc-heads span { position: absolute; bottom: calc(var(--b) * -1px); left: var(--x); width: var(--s); aspect-ratio: 1 / 1.08; translate: -50% 0; border-radius: 50% 50% 46% 46%; background: radial-gradient(circle at 50% 18%, #232b4f, #0a0e22 60%); box-shadow: 0 -2px 0 #ffffff12; }
.sc-heads span::after { content: ""; position: absolute; left: -18%; right: -18%; top: 78%; height: 120%; border-radius: 45% 45% 0 0; background: #0a0e22; }

/* 動き：1本ずつ速さ（--d）・始まり（--dl）・振れ幅（--sw）が違う */
.pm-on :is(.curtain-open, .sc-live) .sc-lights span { animation: sc-sway var(--d) ease-in-out var(--dl) infinite; }
.pm-on :is(.reveal-you, .sc-live) .sc-fans span { animation: sc-wave var(--d) ease-in-out var(--dl) infinite; }
.pm-on :is(.reveal-you, .sc-live) .sc-heads span { animation: sc-bob var(--d) ease-in-out var(--dl) infinite; }
.pm-on .reveal-you .sc-beams i { animation: sc-beam 3.2s ease-in-out infinite alternate; }
.pm-on .reveal-you .sc-beams i:nth-child(2) { animation-delay: -1.6s; }
@keyframes sc-sway { 0%, 100% { rotate: calc(var(--r) - var(--sw)); } 50% { rotate: calc(var(--r) + var(--sw)); } }
@keyframes sc-wave { 0%, 100% { rotate: calc(var(--r) - 8deg); } 50% { rotate: calc(var(--r) + 8deg); } }
@keyframes sc-bob { 0%, 100% { translate: -50% 0; } 50% { translate: -50% -5px; } }
@keyframes sc-beam { from { rotate: calc(var(--a) - 12deg); } to { rotate: calc(var(--a) + 12deg); } }

/* 締めの客席：明るい会場の手前に、客席のシルエット */
.finale { position: relative; isolation: isolate; overflow: hidden; padding-bottom: 300px !important; }
.finale .stage-crowd { z-index: -1; height: 300px; }
.finale .sc-heads span, .finale .sc-heads span::after { background: #13213b; box-shadow: none; }
.finale .sc-lights span::after { background: #13213b; border-color: #ffffff30; }

@media (prefers-reduced-motion: reduce) { #oshiEntrance .stage-crowd, .sc-fans span { transition: none !important; } .sc-beams { display: none; } }
.motion-off #oshiEntrance .stage-crowd, .motion-off .sc-fans span { transition: none !important; }
.motion-off .sc-beams { display: none; }
@media (max-width: 600px) { .stage-crowd { height: 34vh; } .finale .stage-crowd { height: 220px; } .finale { padding-bottom: 220px !important; } .sc-beams i { width: 60vw; } }

/* 開幕の「あなた！」は客席にかからないよう上寄せ */
#oshiEntrance .entrance-reveal { align-self: start; margin-top: clamp(56px, 9vh, 110px); }
#oshiEntrance .entrance-reveal p { margin-top: 8px; }

/* 効果音のON/OFF */
.pm-sound { position: fixed; right: 14px; bottom: 14px; z-index: 9990; display: inline-flex; align-items: center; gap: 6px; min-height: 40px; padding: 6px 14px; border: 2px solid #13213b; border-radius: 99px; background: #fffdf1; color: #13213b; font: 800 12px/1 inherit; letter-spacing: .04em; box-shadow: 2px 3px 0 #13213b; cursor: pointer; }
.pm-sound[aria-pressed="false"] { background: #e6eef5; color: #4a5878; }
.pm-sound svg { width: 16px; height: 16px; }
#oshiEntrance .pm-sound { position: absolute; right: auto; left: 24px; top: 20px; bottom: auto; z-index: 9; min-height: 44px; }
@media (max-width: 600px) { #oshiEntrance .pm-sound { left: 16px; } }
body > footer { padding-bottom: 72px !important; }
/* 高さの低い画面（ノートPCで小さめのウィンドウなど）では、文字と客席を少し小さくして重ならないように */
@media (max-height: 720px) {
  #oshiEntrance .entrance-stage { padding-top: 64px; }
  #oshiEntrance .entrance-reveal { margin-top: 0; padding-top: 0; }
  #oshiEntrance .entrance-reveal .entrance-ticket { margin-bottom: 8px; }
  #oshiEntrance .entrance-reveal h2 { margin-bottom: 4px; line-height: 1.25; }
  #oshiEntrance .entrance-reveal strong { font-size: clamp(54px, 15vh, 100px); }
  #oshiEntrance .stage-crowd { height: 34vh; }
}

/* =========================================================
   声援ボタン：メンバーが吹き出しで褒めてくれる（2026-10-09）
   PCはカードの左右に散らばって登場、スマホはボタンの下に並ぶ
   ========================================================= */
.live-cheer h2 { cursor: pointer; }
.cheer-crowd { pointer-events: none; }
.cc-item { display: flex; align-items: center; gap: 8px; opacity: 0; scale: .3; translate: 0 20px; }
.cc-item.is-on { opacity: 1; scale: 1; translate: 0 0; transition: opacity .25s, scale .55s cubic-bezier(.34, 1.56, .64, 1), translate .55s cubic-bezier(.34, 1.56, .64, 1); transition-delay: calc(var(--i) * 110ms); }
.cc-face { flex: none; width: 60px; height: 60px; border-radius: 50%; overflow: hidden; border: 3px solid #fffdf1; box-shadow: 0 0 0 2px var(--mc, #7bdafa), 0 0 18px var(--mc, #7bdafa); background: #fffdf1; }
.cc-face img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cc-face.is-zoom img { transform: scale(1.48); object-position: center 52%; }
.cc-bubble { position: relative; max-width: 150px; padding: 7px 12px; border: 2px solid #13213b; border-radius: 16px; background: #fffdf1; color: #13213b; font-weight: 900; font-size: 13px; line-height: 1.45; text-align: left; box-shadow: 2px 3px 0 #13213b; }
.cc-bubble small { display: block; font-size: 10px; font-weight: 700; color: #4a5878; }
.cc-bubble::before { content: ""; position: absolute; top: 50%; left: -7px; width: 10px; height: 10px; margin-top: -6px; background: #fffdf1; border-left: 2px solid #13213b; border-bottom: 2px solid #13213b; rotate: 45deg; }
.cc-item.is-right { flex-direction: row-reverse; }
.cc-item.is-right .cc-bubble::before { left: auto; right: -7px; rotate: -135deg; }
.pm-on .cc-item.is-on .cc-face { animation: cc-bob var(--d, 3s) ease-in-out var(--dl, 0s) infinite; }
@keyframes cc-bob { 0%, 100% { translate: 0 0; rotate: -4deg; } 50% { translate: 0 -5px; rotate: 4deg; } }
@media (min-width: 900px) {
  .cheer-crowd { position: absolute; inset: 0; z-index: 2; }
  .cc-item { position: absolute; left: var(--x); top: var(--y); }
  .cc-item.is-right { left: auto; right: var(--x); }
}
@media (max-width: 899px) {
  .cheer-crowd { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 10px; margin-top: 0; max-height: 0; overflow: hidden; transition: max-height .6s ease, margin-top .6s ease; }
  .cheer-crowd.is-open { max-height: 900px; margin-top: 22px; }
  .cc-item, .cc-item.is-right { flex-direction: row; }
  .cc-item.is-right .cc-bubble::before { left: -7px; right: auto; rotate: 45deg; }
  .cc-face { width: 44px; height: 44px; border-width: 2px; }
  .cc-bubble { font-size: 12px; padding: 6px 9px; max-width: none; }
}
@media (prefers-reduced-motion: reduce) { .cc-item, .cc-item.is-on, .cheer-crowd { transition: none; } }
.motion-off .cc-item, .motion-off .cc-item.is-on, .motion-off .cheer-crowd { transition: none; }

/* =========================================================
   2026-10-09 追加調整
   ========================================================= */
/* 入場券：光の筋は内側の枠だけで切り抜き、WELCOMEラベルははみ出したまま見せる */
.admission-ticket { overflow: visible; }
.pm-shine-wrap { position: absolute; inset: 0; border-radius: inherit; overflow: hidden; pointer-events: none; }

/* 開幕の銀テープ：向き・速さ・回転・太さをバラバラに、ひらひら散りながら落ちる */
#oshiEntrance .silver-tapes i { width: calc(44px * var(--w, 1)); animation: pm-tape-fall var(--time) cubic-bezier(.25, .2, .6, .9) var(--d) both; }
#oshiEntrance .silver-tapes svg { scale: var(--flip, 1) 1; }
@keyframes pm-tape-fall {
  0% { transform: translate3d(0, -80px, 0) rotate(var(--r)); opacity: 0; }
  8% { opacity: 1; }
  35% { transform: translate3d(calc(var(--dx) * .45), 35vh, 0) rotate(calc(var(--r) + var(--spin) * .35)); }
  65% { transform: translate3d(calc(var(--dx) * .2), 72vh, 0) rotate(calc(var(--r) + var(--spin) * .7)); }
  100% { transform: translate3d(var(--dx), 118vh, 0) rotate(calc(var(--r) + var(--spin))); opacity: .7; }
}
