/* キャラ紹介ページの動き（design-direction.md §0）。禁止: 暗転・幕・ワイプ・文字ごとの出現・過大バウンス・共通fade-up・レイアウト値の動き。
   1ブロック1道具。.char-sheet と影の親（.char-stage／スマホの.char-figure）には変形・filter・opacity・will-changeを掛けない。 */
:root {
  --cm-k: 1;
  --cm-ease-out: cubic-bezier(.2,.6,.2,1);
  --cm-ease-land: cubic-bezier(.2,.8,.2,1);
  --cm-ease-press: cubic-bezier(.2,1.15,.35,1);
}
@media (max-width: 900px) { :root { --cm-k: .85; } }
.char-quote::before { transform-origin: 0 50%; }

@media (prefers-reduced-motion: no-preference) {
  /* 初期の非表示は必ず js-entrance 配下。既存の不透明度指定より強い詳細度を確保する。 */
  html.js-entrance .char-sheet:not(.is-figure-in) .char-stage .char-bgfig,
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure img.char-bgfig { opacity: 0; }
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-cutout > img:not(.char-bgfig) {
    filter: blur(10px) drop-shadow(0 18px 22px rgba(0,0,0,0)) drop-shadow(0 2px 3px rgba(0,0,0,0));
    transform: translateY(6px) scale(1.03);
  }
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-photo > img:not(.char-bgfig),
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-thumb > img:not(.char-bgfig) {
    filter: blur(6px);
    transform: rotate(-1.2deg) translateY(-12px) scale(1.03);
    box-shadow: 0 22px 40px rgba(0,0,0,0);
  }
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-thumb > img:not(.char-bgfig) { transform: translateY(-12px) scale(1.03); }
  html.js-entrance .char-sheet:not(.is-entered) .char-hero,
  html.js-entrance .char-sheet:not(.is-entered) .char-quote,
  html.js-entrance .char-sheet:not(.is-entered) .char-quote .src { opacity: 0; }
  html.js-entrance .char-sheet:not(.is-entered) .char-quote::before { transform: scaleX(0); }

  html.js-entrance .char-profile .vc-h:not(.is-in) { opacity: 0; }
  html.js-entrance .char-profile .vc-h:not(.is-in) .vc-h-k { opacity: 0; transform: scale(.4); }

  html.js-entrance .vivre-panel:not(.is-in),
  html.js-entrance .char-credit:not(.is-in),
  html.js-entrance .char-history:not(.is-in) .vc-tab-yellow,
  html.js-entrance .char-related:not(.is-in) .vc-tab-yellow { opacity: 0; }
  html.js-entrance .vc-bounties:not(.is-in) .vc-bounty,
  html.js-entrance .vc-rail:not(.is-in) li b,
  html.js-entrance .vc-rail:not(.is-in) li span,
  html.js-entrance .mv-group-name:not(.is-in) b,
  html.js-entrance .mv-group-name:not(.is-in) .mv-count,
  html.js-entrance .mv-sub:not(.is-in) b,
  html.js-entrance .mv-with:not(.is-in) .mv-partner,
  html.js-entrance .rel-group:not(.is-in) .rel-group-label,
  html.js-entrance .rel-group:not(.is-in) .rel-subgroup-label,
  html.js-entrance .rel-group:not(.is-in) .op-char-card,
  html.js-entrance .rel-group:not(.is-in) .rel-plain > li { opacity: 0; }
  html.js-entrance .char-about .vivre-body > *:not(.is-in) { opacity: 0; transform: translateY(4px); }
  html.js-entrance .char-profile .vivre-body .vc-rows > li:not(.is-in),
  html.js-entrance .char-profile .vivre-body .vc-packs li:not(.is-in),
  html.js-entrance .char-profile .vivre-body .vc-packs .vc-index-row:not(.is-in),
  html.js-entrance .char-profile .vivre-body .vc-note > *:not(.is-in),
  html.js-entrance .char-profile .vivre-body .vc-source:not(.is-in),
  html.js-entrance .char-moves .vivre-body ul > li:not(.is-in) { opacity: 0; transform: translateX(-6px); }
  html.js-entrance .char-tl-item:not(.is-in)::after { transform: scaleY(0); }
  html.js-entrance .char-tl-item:not(.is-in) > .char-tl-when > .vc-time,
  html.js-entrance .char-tl-item:not(.is-in) > .char-tl-when > small { opacity: 0; transform: translateX(-4px); }
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-node::before { opacity: 0; transform: scale(.4); }
  html.js-entrance .char-tl-item:not(.is-in) > .char-tl-what { opacity: 0; transform: translateY(4px); }
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-sub > li,
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-supp,
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-figs img,
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-figs figcaption,
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-figcap,
  html.js-entrance .char-tl-sep:not(.is-in) .char-tl-figs img,
  html.js-entrance .char-tl-sep:not(.is-in) .char-tl-figs figcaption,
  html.js-entrance .char-tl-sep:not(.is-in) .char-tl-figcap { opacity: 0; }
  html.js-entrance .char-tl-item:not(.is-in) .char-tl-sub > li::before { transform: translateX(-6px); }
  html.js-entrance .char-tl-sep:not(.is-in) h3 { opacity: 0; }
  html.js-entrance .char-tl-sep:not(.is-in)::before,
  html.js-entrance .char-tl-sep:not(.is-in)::after { transform: scaleX(0); }
  html.js-entrance .char-history .char-note:not(.is-in) { opacity: 0; transform: translateY(4px); }
  html.js-entrance .vc-rail:not(.is-in) > li::before { opacity: 0; }
  html.js-entrance .mv-group-name:not(.is-in) { transform: scaleX(0); }
  html.js-entrance .vc-rail:not(.is-in) > li::after { transform-origin: 50% 0; transform: scaleY(0); }
  html.js-entrance .mv-sub:not(.is-in)::before { opacity: 0; }
  html.js-entrance .mv-sub:not(.is-in)::after { clip-path: inset(0 100% 0 0); }
  html.js-entrance .rel-group:not(.is-in) .rel-subgroup-label::before { transform: scaleY(0); }

  /* 上段: 影の凝縮後に、その影自身だけが息をする。 */
  .char-sheet.is-figure-in .char-stage .char-bgfig,
  .char-sheet.is-figure-in .char-figure img.char-bgfig {
    animation: cm-ghost-settle calc(1100ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards,
               cm-ghost-breath calc(9000ms * var(--cm-k)) ease-in-out calc(1100ms * var(--cm-k)) infinite;
  }
  .char-sheet.is-figure-in .char-figure.is-cutout > img:not(.char-bgfig) {
    animation: cm-fig-cutout calc(720ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards;
  }
  .char-sheet.is-figure-in .char-figure.is-photo > img:not(.char-bgfig) { animation: cm-fig-photo calc(700ms * var(--cm-k)) var(--cm-ease-land) calc(0ms * var(--cm-k)) backwards; }
  .char-sheet.is-figure-in .char-figure.is-thumb > img:not(.char-bgfig) { animation: cm-fig-thumb calc(700ms * var(--cm-k)) var(--cm-ease-land) calc(0ms * var(--cm-k)) backwards; }
  .char-sheet.is-entered .char-hero { animation: cm-hero-in calc(1000ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards; }
  .char-sheet.is-entered .char-quote::before { animation: cm-quote-rule calc(1100ms * var(--cm-k)) var(--cm-ease-out) calc(350ms * var(--cm-k)) backwards; }
  .char-sheet.is-entered .char-quote { animation: cm-quote-in calc(900ms * var(--cm-k)) var(--cm-ease-out) calc(450ms * var(--cm-k)) backwards; }
  .char-sheet.is-entered .char-quote .src { animation: cm-fade calc(600ms * var(--cm-k)) var(--cm-ease-out) calc(1000ms * var(--cm-k)) backwards; }

  /* Panel: 卓に置く→タブ→インク。 */
  .vivre-panel.is-in { --d: calc(var(--i, 0) * 140ms * var(--cm-k)); animation: cm-panel calc(560ms * var(--cm-k)) var(--cm-ease-land) var(--d) backwards; }
  .vivre-panel.is-in .vc-tab { animation: cm-tab calc(320ms * var(--cm-k)) var(--cm-ease-press) calc(var(--d) + 180ms * var(--cm-k)) backwards; }
  .char-extra.is-in .vivre-body { animation: cm-fade calc(480ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d) + 260ms * var(--cm-k)) backwards; }
  .char-about .vivre-body > *.is-in { animation: cm-about-item calc(360ms * var(--cm-k)) var(--cm-ease-out) var(--d, 0ms) backwards; }
  .char-profile .vivre-body .vc-rows > li.is-in,
  .char-profile .vivre-body .vc-packs li.is-in,
  .char-profile .vivre-body .vc-packs .vc-index-row.is-in,
  .char-profile .vivre-body .vc-note > *.is-in,
  .char-profile .vivre-body .vc-source.is-in,
  .char-moves .vivre-body ul > li.is-in { animation: cm-profile-row calc(300ms * var(--cm-k)) var(--cm-ease-out) var(--d, 0ms) backwards; }
  .char-profile .vivre-body .vc-h.is-in { animation: cm-fade calc(300ms * var(--cm-k)) var(--cm-ease-out) var(--d, 0ms) backwards; }
  .char-profile .vivre-body .vc-h.is-in .vc-h-k { animation: cm-h-seal calc(220ms * var(--cm-k)) var(--cm-ease-press) calc(var(--d, 0ms) + 60ms * var(--cm-k)) backwards; }
  .vc-bounties.is-in .vc-bounty { animation: cm-bounty calc(360ms * var(--cm-k)) var(--cm-ease-press) calc(var(--i, 0) * 120ms * var(--cm-k)) backwards; }

  /* 変遷: 線・鋲・文字を同じインデックスで打つ。 */
  .vc-rail.is-in > li::after { transform-origin: 50% 0; animation: cm-rail-line calc(260ms * var(--cm-k)) var(--cm-ease-out) calc(var(--i, 0) * 160ms * var(--cm-k)) backwards; }
  .vc-rail.is-in > li::before { animation: cm-rail-node calc(200ms * var(--cm-k)) var(--cm-ease-press) calc(var(--i, 0) * 160ms * var(--cm-k)) backwards; }
  .vc-rail.is-in > li b, .vc-rail.is-in > li span { animation: cm-rail-text calc(320ms * var(--cm-k)) var(--cm-ease-out) calc(var(--i, 0) * 160ms * var(--cm-k) + 60ms * var(--cm-k)) backwards; }

  /* 技 */
  .mv-group-name.is-in { transform-origin: 0 50%; animation: cm-scale-x calc(520ms * var(--cm-k)) var(--cm-ease-land) calc(0ms * var(--cm-k)) backwards; }
  .mv-group-name.is-in b { animation: cm-fade calc(300ms * var(--cm-k)) var(--cm-ease-out) calc(260ms * var(--cm-k)) backwards; }
  .mv-group-name.is-in .mv-count { animation: cm-fade calc(300ms * var(--cm-k)) var(--cm-ease-out) calc(480ms * var(--cm-k)) backwards; }
  .mv-sub.is-in::before { animation: cm-fade calc(200ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards; }
  .mv-sub.is-in::after { animation: cm-sub-line calc(480ms * var(--cm-k)) var(--cm-ease-out) calc(120ms * var(--cm-k)) backwards; }
  .mv-sub.is-in b { animation: cm-fade calc(260ms * var(--cm-k)) var(--cm-ease-out) calc(200ms * var(--cm-k)) backwards; }
  .mv-with.is-in .mv-partner { animation: cm-partner calc(260ms * var(--cm-k)) var(--cm-ease-press) calc(var(--i, 0) * 60ms * var(--cm-k)) backwards; }

  /* 履歴: §2.3 の線・鋲・札・本文の語彙を各行へ適用。 */
  .char-history.is-in > .vc-tab-yellow { animation: cm-header calc(380ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in::after { transform-origin: 50% 0; animation: cm-tl-line var(--tl-dur, 400ms) var(--cm-ease-out) var(--d, 0ms) backwards; }
  .char-tl-item.is-in .char-tl-node::before { animation: cm-rail-node calc(200ms * var(--cm-k)) var(--cm-ease-press) var(--d, 0ms) backwards; }
  .char-tl-item.is-in > .char-tl-when > .vc-time,
  .char-tl-item.is-in > .char-tl-when > small { animation: cm-rail-text calc(320ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 60ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in > .char-tl-what { animation: cm-history-what calc(360ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 60ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-sub > li { animation: cm-fade calc(260ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-sub > li::before { animation: cm-tl-arrow calc(260ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-what .char-tl-figs img,
  .char-tl-sep.is-in .char-tl-figs img { animation: cm-history-photo calc(640ms * var(--cm-k)) var(--cm-ease-land) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-what .char-tl-figs.is-in-supp img { animation-name: cm-history-photo-supp; }
  .char-tl-item.is-in .char-tl-figs figcaption,
  .char-tl-item.is-in .char-tl-figcap,
  .char-tl-sep.is-in .char-tl-figs figcaption,
  .char-tl-sep.is-in .char-tl-figcap { animation: cm-fade calc(300ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k) + 320ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-supp { animation: cm-tl-supp calc(420ms * var(--cm-k)) var(--cm-ease-land) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-supp b { animation: cm-tl-supp-title calc(280ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k) + 200ms * var(--cm-k)) backwards; }
  .char-tl-item.is-in .char-tl-supp p { animation: cm-fade calc(300ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 220ms * var(--cm-k) + var(--j, 0) * 90ms * var(--cm-k) + 160ms * var(--cm-k)) backwards; }
  .char-tl-sep.is-in h3 { animation: cm-fade calc(320ms * var(--cm-k)) var(--cm-ease-out) var(--d, 0ms) backwards; }
  .char-tl-sep.is-in::before { transform-origin: 100% 50%; animation: cm-scale-x calc(420ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 120ms * var(--cm-k)) backwards; }
  .char-tl-sep.is-in::after { transform-origin: 0 50%; animation: cm-scale-x calc(420ms * var(--cm-k)) var(--cm-ease-out) calc(var(--d, 0ms) + 120ms * var(--cm-k)) backwards; }
  .char-history .char-note.is-in { animation: cm-history-note calc(360ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards; }

  /* 関連: 板→札→標→カード。カード hover はプラグイン既定のまま。 */
  .rel-group.is-in { animation: cm-group calc(520ms * var(--cm-k)) var(--cm-ease-land) calc(0ms * var(--cm-k)) backwards; }
  .rel-group.is-in .rel-group-label { animation: cm-group-label calc(340ms * var(--cm-k)) var(--cm-ease-press) calc(220ms * var(--cm-k)) backwards; }
  .rel-group.is-in .rel-subgroup-label::before { transform-origin: 50% 0; animation: cm-scale-y calc(260ms * var(--cm-k)) var(--cm-ease-out) calc(300ms * var(--cm-k)) backwards; }
  .rel-group.is-in .rel-subgroup-label { animation: cm-fade calc(300ms * var(--cm-k)) var(--cm-ease-out) calc(360ms * var(--cm-k)) backwards; }
  .rel-group.is-in .op-char-card { animation: cm-card calc(240ms * var(--cm-k)) var(--cm-ease-out) calc(260ms * var(--cm-k) + var(--i, 0) * 30ms * var(--cm-k)) backwards; }
  .rel-group.is-in .rel-plain > li { animation: cm-fade calc(200ms * var(--cm-k)) var(--cm-ease-out) calc(260ms * var(--cm-k) + var(--i, 0) * 40ms * var(--cm-k)) backwards; }
  .char-related.is-in > .vc-tab-yellow { animation: cm-header calc(380ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards; }
  .char-credit.is-in { animation: cm-fade calc(400ms * var(--cm-k)) var(--cm-ease-out) calc(0ms * var(--cm-k)) backwards; }
}

@media (max-width: 900px) and (prefers-reduced-motion: no-preference) {
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-cutout > img:not(.char-bgfig) { filter: blur(6px) drop-shadow(0 18px 22px rgba(0,0,0,0)) drop-shadow(0 2px 3px rgba(0,0,0,0)); transform: translateY(6px) scale(1.03); }
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-photo > img:not(.char-bgfig) { filter: blur(4px); }
  html.js-entrance .char-sheet:not(.is-figure-in) .char-figure.is-thumb > img:not(.char-bgfig) { filter: blur(4px); }
  .char-sheet.is-figure-in .char-figure.is-cutout > img:not(.char-bgfig) { animation-name: cm-fig-cutout-sp; }
  .char-sheet.is-figure-in .char-figure.is-photo > img:not(.char-bgfig) { animation-name: cm-fig-photo-sp; }
  .char-sheet.is-figure-in .char-figure.is-thumb > img:not(.char-bgfig) { animation-name: cm-fig-thumb-sp; }
  .char-sheet.is-entered .char-hero { animation-name: cm-hero-in-sp; }
  .char-sheet.is-entered .char-quote { animation-name: cm-quote-in-sp; }
  .char-sheet.is-entered .char-quote::before { transform-origin: 50% 50%; }
}

@keyframes cm-ghost-settle { from { opacity: calc(var(--ghost-o) * 1.35); transform: translate(-50%,-50%) scale(1.03); } to { opacity: var(--ghost-o); transform: translate(-50%,-50%) scale(1); } }
@keyframes cm-ghost-breath { 0%,100% { opacity: var(--ghost-o); transform: translate(-50%,-50%) scale(1); } 50% { opacity: calc(var(--ghost-o) * .88); transform: translate(-50%,-50%) scale(1); } }
@keyframes cm-fig-cutout { from { filter: blur(10px) drop-shadow(0 18px 22px rgba(0,0,0,0)) drop-shadow(0 2px 3px rgba(0,0,0,0)); transform: translateY(6px) scale(1.03); } to { filter: blur(0) drop-shadow(0 18px 22px rgba(0,0,0,.45)) drop-shadow(0 2px 3px rgba(0,0,0,.4)); transform: none; } }
@keyframes cm-fig-cutout-sp { from { filter: blur(6px) drop-shadow(0 18px 22px rgba(0,0,0,0)) drop-shadow(0 2px 3px rgba(0,0,0,0)); transform: translateY(6px) scale(1.03); } to { filter: blur(0) drop-shadow(0 18px 22px rgba(0,0,0,.45)) drop-shadow(0 2px 3px rgba(0,0,0,.4)); transform: none; } }
@keyframes cm-fig-photo { from { filter: blur(6px); transform: rotate(-1.2deg) translateY(-12px) scale(1.03); box-shadow: 0 22px 40px rgba(0,0,0,0); } to { filter: none; transform: rotate(-1.2deg); box-shadow: 0 12px 26px rgba(0,0,0,.5); } }
@keyframes cm-fig-photo-sp { from { filter: blur(4px); transform: rotate(-1.2deg) translateY(-12px) scale(1.03); box-shadow: 0 22px 40px rgba(0,0,0,0); } to { filter: none; transform: rotate(-1.2deg); box-shadow: 0 12px 26px rgba(0,0,0,.5); } }
@keyframes cm-fig-thumb { from { filter: blur(6px); transform: translateY(-12px) scale(1.03); box-shadow: 0 22px 40px rgba(0,0,0,0); } to { filter: none; transform: none; box-shadow: 0 12px 26px rgba(0,0,0,.5); } }
@keyframes cm-fig-thumb-sp { from { filter: blur(4px); transform: translateY(-12px) scale(1.03); box-shadow: 0 22px 40px rgba(0,0,0,0); } to { filter: none; transform: none; box-shadow: 0 12px 26px rgba(0,0,0,.5); } }
@keyframes cm-hero-in { from { opacity: 0; filter: blur(10px); transform: translateY(12px); } to { opacity: 1; filter: none; transform: none; } }
@keyframes cm-hero-in-sp { from { opacity: 0; filter: blur(6px); transform: translateY(12px); } to { opacity: 1; filter: none; transform: none; } }
@keyframes cm-quote-rule { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes cm-quote-in { from { opacity: 0; filter: blur(6px); } to { opacity: 1; filter: none; } }
@keyframes cm-quote-in-sp { from { opacity: 0; filter: blur(3px); } to { opacity: 1; filter: none; } }
@keyframes cm-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes cm-panel { from { opacity: 0; transform: translateY(-6px) scale(1.012); box-shadow: inset 0 0 0 1.5px #1a1409, 0 18px 34px rgba(0,0,0,.5); } to { opacity: 1; transform: none; box-shadow: inset 0 0 0 1.5px #1a1409, 0 10px 22px rgba(0,0,0,.4); } }
@keyframes cm-tab { from { opacity: 0; transform: scale(1.06); } to { opacity: 1; transform: none; } }
@keyframes cm-bounty { from { opacity: 0; transform: scale(1.12) rotate(-1.5deg); } to { opacity: 1; transform: none; } }
@keyframes cm-rail-line { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes cm-rail-node { from { opacity: 0; transform: scale(.4); } to { opacity: 1; transform: none; } }
@keyframes cm-h-seal { from { opacity: 0; transform: scale(.4); } to { opacity: 1; transform: none; } }
@keyframes cm-rail-text { from { opacity: 0; transform: translateX(-4px); } to { opacity: 1; transform: none; } }
@keyframes cm-scale-x { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes cm-sub-line { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes cm-partner { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: none; } }
@keyframes cm-header { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
@keyframes cm-about-item { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@keyframes cm-profile-row { from { opacity: 0; transform: translateX(-6px); } to { opacity: 1; transform: none; } }
@keyframes cm-history-what { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@keyframes cm-history-note { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@keyframes cm-tl-line { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes cm-tl-arrow { from { transform: translateX(-6px); } to { transform: none; } }
@keyframes cm-tl-supp { from { opacity: 0; box-shadow: inset 0 0 0 rgba(0,0,0,0), inset 0 0 0 1px rgba(0,0,0,0); } to { opacity: 1; box-shadow: inset 0 2px 6px rgba(0,0,0,.45), inset 0 0 0 1px rgba(0,0,0,.35); } }
@keyframes cm-tl-supp-title { from { opacity: 0; transform: scale(1.06); } to { opacity: 1; transform: none; } }
@keyframes cm-history-photo { from { opacity: 0; transform: translateY(-10px) rotate(-2deg) scale(1.03); box-shadow: 0 14px 26px rgba(0,0,0,.6); } to { opacity: 1; transform: none; box-shadow: 0 5px 14px rgba(0,0,0,.5); } }
@keyframes cm-history-photo-supp { from { opacity: 0; transform: translateY(-10px) rotate(-2deg) scale(1.03); box-shadow: 0 14px 26px rgba(0,0,0,.6); } to { opacity: 1; transform: none; box-shadow: 0 4px 10px rgba(0,0,0,.45); } }
@keyframes cm-group { from { opacity: 0; transform: translateY(6px); box-shadow: inset 0 0 0 rgba(0,0,0,0), inset 0 0 0 1px rgba(0,0,0,0); } to { opacity: 1; transform: none; box-shadow: inset 0 2px 7px rgba(0,0,0,.5), inset 0 0 0 1px rgba(0,0,0,.35); } }
@keyframes cm-group-label { from { opacity: 0; transform: rotate(-2.5deg) scale(1.05) translateY(-3px); } to { opacity: 1; transform: none; } }
@keyframes cm-scale-y { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes cm-card { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
