.companion-panel{color:#21464d;background:linear-gradient(120deg,#fff7d9,#ebfaf5);border:1px solid #b9dfd8;border-radius:20px;padding:20px;box-shadow:0 12px 28px -24px #216a70;margin:14px 0}
.stage:not(.is-light-mode) .companion-panel{color:#e7f5f1;background:linear-gradient(135deg,rgba(38,70,70,.96),rgba(24,33,42,.97));border-color:rgba(108,197,184,.38);box-shadow:0 12px 32px rgba(0,0,0,.25)}
.stage:not(.is-light-mode) .companion-heading strong{color:#ffdf81}
.stage:not(.is-light-mode) .companion-next{color:#deeeeb}
.stage:not(.is-light-mode) .companion-pending{color:#a8d1ca}
.stage:not(.is-light-mode) .companion-progress{background:rgba(173,218,210,.23)}
.companion-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:15px;font-weight:800}.companion-heading strong{font-size:24px;color:#008a82;white-space:nowrap}.companion-next{margin:10px 0;font-weight:700;line-height:1.6}.companion-progress{height:10px;overflow:hidden;background:#dcebe5;border-radius:20px}.companion-progress i{display:block;height:100%;background:linear-gradient(90deg,#f4d76b,#4dd0bb);border-radius:inherit;transition:width .4s}.companion-pending{display:block;margin-top:8px;color:#587478}
.companion-equipment{display:flex;flex-wrap:wrap;gap:7px;margin:16px 0;font-size:13px}.companion-equipment>span{padding:6px 10px;background:#ffffffae;border:1px solid #e3d6aa;border-radius:20px}.companion-panel summary{cursor:pointer;font-weight:800;padding:10px 0}.companion-panel details>p{font-size:13px;line-height:1.8;color:#527074;margin:4px 0 12px}.companion-enemies{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:0;gap:10px;list-style:none}.companion-enemies li{display:grid;justify-items:center;text-align:center;padding:8px 4px;border:1px solid #d4e6dd;border-radius:16px;background:#ffffffb0;position:relative}.companion-enemies strong{font-size:14px}.companion-enemies small{font-size:12px;color:#5e777a;margin:5px 0}.companion-enemies .is-active{border:2px solid #31bca4;background:#e6fff3;box-shadow:0 0 0 4px #60d4b621}.companion-enemies .is-defeated{background:#fff8d8;border-color:#dcc466}.companion-enemies .is-locked .companion-enemy-art{filter:grayscale(.65);opacity:.6}
.companion-enemy-art{display:block;width:84px;height:112px;background-image:url('./assets/game/companion-v1/enemies.webp');background-size:400% 200%;background-position:var(--enemy-x) var(--enemy-y);background-repeat:no-repeat;flex-shrink:0}.companion-mini-battle{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:12px}.companion-mini-battle .companion-enemy-art{width:42px;height:56px}.companion-mini-battle strong{display:block;color:#008a82}.companion-panel.is-compact{padding:10px 12px;border-radius:12px;margin:12px 0 0}.is-compact .companion-heading{font-size:11px}.is-compact .companion-heading strong{font-size:16px}.is-compact .companion-next{font-size:12px;margin:6px 0}.is-compact .companion-pending{font-size:10px}.companion-hall{background:#fff4c7;border:1px solid #e0c16a;padding:14px;border-radius:14px}.companion-hall p{font-size:13px;line-height:1.7;margin:8px 0 0}
.companion-reward-battle{position:absolute;right:12px;bottom:12px;width:210px;padding:10px;border-radius:16px;background:#f4fffaed;border:1px solid #8bcdb9;color:#28545a;box-shadow:0 10px 30px #183c4320;pointer-events:none}.companion-reward-battle .companion-enemy-art{width:60px;height:80px;margin:0 auto;animation:companion-rival-hit .8s ease-out}.companion-reward-battle strong,.companion-reward-battle small{display:block;text-align:center;font-size:12px}.companion-reward-battle small{font-size:10px;margin-top:6px}.companion-energy-shot{position:absolute;left:15px;top:38px;color:#ebb935;font-size:26px;animation:companion-energy .6s ease-out both}
/* A compact, numbered keepsake, with an inset art frame and warm foil edges. */
dialog.companion-milestone {
  box-sizing:border-box;width:min(320px,calc(100vw - 32px));max-width:none;
  max-height:calc(100dvh - 28px);padding:17px;border:1px solid #d9bd79;
  border-radius:22px;overflow:auto;color:#29443c;
  background:radial-gradient(ellipse at 0 0,#fffefa 0,transparent 58%),repeating-linear-gradient(110deg,#b4a27005 0 1px,transparent 1px 4px),linear-gradient(150deg,#fbf4df,#eee7d6 68%,#e0e9df);
  box-shadow:inset 0 1px 0 #fffdf2, inset 0 0 0 5px #fff9e64d,0 2px 0 #8e805f,0 22px 70px #0007;
  text-align:center;
}
.companion-milestone::backdrop{background:#071611a8;backdrop-filter:blur(7px)}
.companion-collectible{margin:0;padding:0}
.companion-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.companion-card-brand{font-size:10px;letter-spacing:2px;font-weight:800;color:#72613f}
.companion-card-seal{display:grid;place-items:center;width:23px;height:23px;border:1px solid #c4a760;border-radius:50%;color:#aa7d32;font-size:15px;box-shadow:inset 0 0 0 2px #fff8de}
.companion-card-art{position:relative;isolation:isolate;display:grid;place-items:center;height:196px;border:1px solid #a78f5b;border-radius:13px;overflow:hidden;background:radial-gradient(ellipse at 50% 45%,#c5bc7459,transparent 62%),linear-gradient(145deg,#314f43,#152f29);box-shadow:inset 0 0 0 4px #cfb77316,inset 0 0 35px #071d2259}
.companion-card-art::before{content:"";position:absolute;width:154px;height:154px;border:1px solid #d4bd7052;border-radius:50%;box-shadow:0 0 0 14px #d4bd7009,0 0 0 15px #d4bd7020;z-index:-1}
.companion-card-art::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(125deg,transparent 30%,#fffbe50a 42%,#fffbe51a 43%,transparent 59%)}
.companion-card-art img{display:block;height:186px;max-width:85%;object-fit:contain;filter:drop-shadow(0 10px 8px #071b2670)}
.companion-card-series{position:absolute;top:10px;left:10px;font-size:9px;letter-spacing:1px;color:#e8d799;border:1px solid #d1bc715c;padding:3px 7px;border-radius:5px;background:#102b255e;z-index:1}
.companion-card-star{position:absolute;color:#e6d298;pointer-events:none}.companion-card-star-one{left:21px;bottom:35px;font-size:22px;opacity:.7}.companion-card-star-two{right:19px;top:49px;font-size:13px;opacity:.85}
.companion-card-caption{padding:13px 3px 12px}
.companion-card-kicker{font-size:10px;letter-spacing:1px;color:#8a7954}
.companion-milestone .companion-card-caption h2{font-size:24px;line-height:1.3;letter-spacing:2px;font-weight:850;color:#25463b;margin:5px 0 6px;text-shadow:0 1px #fffaf0}
.companion-card-caption p{font-size:12px;line-height:1.65;color:#526454;margin:0;text-wrap:pretty}
.companion-card-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid #b6a06c4d;padding:10px 0 12px}
.companion-card-number{font-family:ui-monospace,Consolas,monospace;font-size:9px;letter-spacing:1px;color:#8b754b}
.companion-card-points{font-size:10px;color:#647163}.companion-card-points b{color:#345344;font-size:12px}
.companion-milestone .companion-card-continue{display:flex;align-items:center;justify-content:center;gap:13px;width:100%;margin:0;padding:10px 12px;border:1px solid #38644f;border-radius:11px;font:inherit;font-size:13px;font-weight:750;line-height:1.4;color:#f6edcf;background:linear-gradient(180deg,#3e6956,#2d5143);box-shadow:inset 0 1px 0 #b8d5b833,0 2px 0 #1c3c31;cursor:pointer;transition:background .15s,transform .15s,box-shadow .15s}
.companion-card-continue span{font-size:17px;color:#d9ca91}
.companion-milestone .companion-card-continue:hover{background:linear-gradient(180deg,#4a7862,#365e4d)}
.companion-milestone .companion-card-continue:active{transform:translateY(1px);box-shadow:inset 0 1px 3px #102d313d,0 1px 0 #1c3c31}
.companion-card-continue:focus-visible{outline:2px solid #b89145;outline-offset:3px}
@media(max-height:540px){dialog.companion-milestone{padding:13px}.companion-card-art{height:150px}.companion-card-art img{height:144px}.companion-card-caption{padding:9px 3px}.companion-card-footer{padding:8px 0}}
@keyframes companion-rival-hit{0%,70%,100%{transform:translateX(0)}75%{transform:translateX(6px) rotate(4deg)}85%{transform:translateX(-5px) rotate(-3deg)}}@keyframes companion-energy{from{opacity:1;transform:translateX(0) scale(.5)}to{opacity:0;transform:translateX(90px) scale(1.5)}}
@media(max-width:600px){.companion-panel{padding:14px}.companion-heading{font-size:13px}.companion-heading strong{font-size:21px}.companion-enemies{grid-template-columns:repeat(2,minmax(0,1fr))}.companion-reward-battle{right:4px;bottom:0;width:146px;padding:7px}.companion-reward-battle .companion-enemy-art{width:42px;height:56px}.companion-reward-battle strong{font-size:10px}}
@media(prefers-reduced-motion:reduce){.companion-progress i{transition:none}.companion-reward-battle *{animation:none!important}}
#myCompanionProgress,#detailCompanionProgress{grid-column:1/-1;flex-basis:100%;width:100%;box-sizing:border-box}#detailGrowthPanel:has(#detailCompanionProgress){flex-wrap:wrap}#reportCompanionProgress{margin-bottom:0}.companion-reward-battle~.companion-reward-battle{display:none}
.companion-collection{border-top:1px solid #b9dfd8;padding-top:3px;margin-bottom:6px}
.companion-collection summary{color:#176f63}
.companion-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;padding:8px 0 15px}
.companion-collection-card{display:flex;min-height:136px;flex-direction:column;align-items:center;justify-content:center;gap:5px;text-align:center;padding:13px;border-radius:16px;background:linear-gradient(145deg,#fffaf0,#eaf8f3);border:1px solid #d8c894;box-shadow:0 7px 18px #21464d12}
.companion-card-icon{font-size:35px;line-height:1.15}.companion-collection-card strong{font-size:14px}.companion-collection-card small{font-size:11px;line-height:1.45;color:#557078}.companion-collection-empty{grid-column:1/-1;color:#557078;font-size:13px}

/* Shared live content over four reusable, text-free illustrated card skins. */
[data-card-theme]{--card-ink:#66346c;--card-title:#79501d;--card-paper:#fff5f5;--card-edge:#e5c387;--card-button:linear-gradient(120deg,#fff0db,#edddff,#dff3ff);--card-skin:url('./assets/game/card-skins-v1/dream.webp')}
[data-card-theme="adventure"]{--card-ink:#fff3c9;--card-title:#ffe2a1;--card-paper:#123e78;--card-edge:#edc16d;--card-button:linear-gradient(#287dc2,#164a8d);--card-skin:url('./assets/game/card-skins-v1/adventure.webp')}
[data-card-theme="elegant"]{--card-ink:#53634b;--card-title:#6d501e;--card-paper:#faf4e6;--card-edge:#c9ab73;--card-button:linear-gradient(#fff9e9,#e9dcc0);--card-skin:url('./assets/game/card-skins-v1/elegant.webp')}
[data-card-theme="heritage"]{--card-ink:#efd9aa;--card-title:#f3cb7d;--card-paper:#102336;--card-edge:#b68b4d;--card-button:linear-gradient(#23394d,#102235);--card-skin:url('./assets/game/card-skins-v1/heritage.webp')}
dialog.companion-milestone[data-card-theme]{width:min(340px,calc(100vw - 32px));padding:44px 8px 12px;border:0;border-radius:20px;background:transparent;box-shadow:none;overflow:auto;color:var(--card-ink)}
.companion-card-close{position:absolute;top:2px;right:8px;width:32px;height:32px;display:grid;place-items:center;padding:0;border:1px solid #ffffff70;border-radius:50%;background:#17212bba;color:#fff;font:24px/1 Arial,sans-serif;cursor:pointer}
.companion-card-close:hover{background:#354454}
.companion-card-obtained{margin:14px 0 2px;padding:0 3px;font-family:"Microsoft YaHei","PingFang SC",sans-serif;font-size:11px;font-weight:400;line-height:1.7;text-align:center;color:#e8e1d3;text-shadow:0 1px 4px #000}
.companion-card-close:focus-visible{outline:2px solid #efd49b;outline-offset:3px}
.companion-card-face{position:relative;aspect-ratio:2/3;border-radius:18px;background:var(--card-paper) var(--card-skin) center/100% 100% no-repeat;box-shadow:0 14px 35px #0006,inset 0 0 0 1px var(--card-edge);isolation:isolate;overflow:hidden}
.companion-card-face .companion-card-header{position:absolute;inset:6% 12% auto;justify-content:center;margin:0}
.companion-card-face .companion-card-brand{display:flex;align-items:center;justify-content:center;gap:4px;max-width:100%;white-space:nowrap;font-size:12px;letter-spacing:.2px;color:var(--card-title);text-shadow:0 1px 2px var(--card-paper)}
.companion-card-owner{min-width:0;max-width:105px;overflow:hidden;text-overflow:ellipsis}
[data-card-theme="adventure"] .companion-card-brand{background:#123e78;border:1px solid #edc16d;border-radius:12px;padding:3px 10px}
.companion-card-face .companion-card-seal,.companion-card-face .companion-card-kicker,.companion-card-face .companion-card-star{display:none}
.companion-card-face .companion-card-art{position:absolute;inset:15% 10% 29%;height:auto;border:0;border-radius:0;background:none;box-shadow:none;overflow:visible}
.companion-card-face .companion-card-art::before,.companion-card-face .companion-card-art::after{display:none}
.companion-card-face .companion-card-art img{position:absolute;inset:0;height:100%;width:100%;max-width:100%;min-height:0;object-fit:contain;filter:drop-shadow(0 9px 8px #35241438)}
.companion-card-face .companion-card-series{top:-5%;left:50%;transform:translateX(-50%);font-size:9px;white-space:nowrap;color:var(--card-ink);background:var(--card-paper);border-color:var(--card-edge);padding:2px 8px;border-radius:20px}
.companion-card-face .companion-card-caption{position:absolute;inset:auto 9% 13%;padding:0 4px;border-radius:0;background:none}
.companion-milestone .companion-card-face .companion-card-caption h2{margin:0 0 9px;font-family:"Microsoft YaHei","PingFang SC","Noto Sans SC",sans-serif;font-weight:700;font-size:27px;line-height:1.3;letter-spacing:1px;color:var(--card-title);text-shadow:none}
.companion-card-face .companion-card-caption p{font-family:"Microsoft YaHei","PingFang SC","Noto Sans SC",sans-serif;font-weight:400;font-size:13px;letter-spacing:.2px;color:var(--card-ink);line-height:1.75}
.companion-card-face .companion-card-footer{position:absolute;inset:auto 13% 4%;padding:0;border:0;gap:6px;justify-content:center}
.companion-card-face .companion-card-number,.companion-card-face .companion-card-points,.companion-card-face .companion-card-points b{color:var(--card-ink);font-size:10px}
.companion-milestone[data-card-theme] .companion-card-continue{width:88%;margin:14px auto 0;border-radius:22px;border:1px solid var(--card-edge);color:var(--card-title);background:var(--card-button);box-shadow:inset 0 1px 0 #ffffff60,0 3px 0 color-mix(in srgb,var(--card-edge) 65%,#30251a),0 7px 15px #0004}
.companion-milestone[data-card-theme] .companion-card-continue span{color:inherit}
.companion-milestone[data-card-theme] .companion-card-continue:hover{filter:brightness(1.08)}
.companion-milestone[data-card-theme] .companion-card-continue:active{transform:translateY(2px)}
.companion-theme-picker{display:flex;align-items:center;justify-content:center;gap:10px;font-size:12px;margin:14px 0 0}
.companion-milestone .companion-theme-picker{color:#fff1d3;text-shadow:0 1px 3px #000}
.companion-theme-picker select{font:inherit;color:#f6ebd5;background:#23313d;border:1px solid #a99569;border-radius:8px;padding:6px 8px;max-width:170px;cursor:pointer}
.companion-theme-picker select:focus-visible{outline:2px solid #f0ce83;outline-offset:3px}
[data-card-theme] .companion-collection-card{background:var(--card-paper) var(--card-skin) center/100% 100%;border-color:var(--card-edge);color:var(--card-title);min-height:210px;padding:24px 14px}
[data-card-theme] .companion-collection-card small{color:var(--card-ink);background:var(--card-paper);border-radius:5px;padding:3px}
[data-card-theme] .companion-collection-card{cursor:pointer}
[data-card-theme] .companion-collection-card:focus-visible{outline:3px solid #d5a74c;outline-offset:3px}
[data-card-theme] .companion-collection-card .companion-card-icon{height:126px;width:100%}
[data-card-theme] .companion-collection-card img{height:100%;width:100%;object-fit:contain}
[data-card-theme] .companion-collection-card strong{background:var(--card-paper);padding:2px 6px;border-radius:5px}
@media(max-height:650px){dialog.companion-milestone[data-card-theme]{width:min(290px,calc(100vw - 32px))}.companion-card-face .companion-card-caption h2{font-size:23px!important}}
/* Full illustrated heritage cards; account data stays live and outside the raster. */
.companion-card-face.is-illustrated-face{background:transparent;border-radius:0;box-shadow:none}
.companion-card-face.is-illustrated-face,[data-card-theme] .companion-collection-card.is-illustrated-card{-webkit-mask-image:var(--heritage-mask);mask-image:var(--heritage-mask);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}
.companion-full-art{display:block;width:100%;height:100%;object-fit:contain}
.companion-illustrated-owner{position:absolute;top:7.1%;left:25%;width:50%;height:5.2%;display:flex;align-items:center;justify-content:center;gap:3px;border-radius:8px;background:#081725;color:#f3cb7d;font:700 10px/1.2 "Microsoft YaHei",sans-serif;white-space:nowrap}
.companion-illustrated-owner span{max-width:45%;overflow:hidden;text-overflow:ellipsis}
.companion-illustrated-owner.is-inset-plaque{top:6.55%;left:26%;width:48%;height:3.8%;border-radius:6px;background:#081b20;line-height:1}
.companion-illustrated-number{position:absolute;left:32%;bottom:4.6%;width:36%;height:5%;display:flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:10px;background:#081725;color:#f3cb7d;font:9px/1 ui-monospace,Consolas,monospace;letter-spacing:.2px}
.companion-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}
[data-card-theme] .companion-collection-card.is-illustrated-card{position:relative;display:block;aspect-ratio:2/3;min-height:0;padding:0;border:0;border-radius:9px;overflow:hidden;background:#081725;box-shadow:0 5px 14px #0003}
[data-card-theme] .companion-collection-card.is-illustrated-card>img{display:block;width:100%;height:100%;object-fit:contain}
.is-illustrated-card .companion-illustrated-number{font-size:5px}
.companion-catalog-item{min-width:0}
.companion-catalog-item .companion-collection-card{width:100%;font:inherit;position:relative}
[data-card-theme] .companion-collection-card.is-locked{filter:grayscale(1);cursor:default;opacity:.65}
.companion-card-lock{position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);padding:5px 10px;border:1px solid #ffffff80;border-radius:12px;background:#101820d9;color:white;font-size:11px;white-space:nowrap}
.companion-catalog-status{margin:7px 0 12px;text-align:center;color:inherit;font-size:11px;line-height:1.6}
.companion-finale-heading{font-size:14px;margin:14px 0 4px}
.companion-finale-heading+.companion-card-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.companion-celebration-sparks { position:absolute; inset:0; pointer-events:none; z-index:10; overflow:visible; }
.companion-celebration-sparks span { position:absolute; left:50%; top:45%; color:#ffe39a; font-size:22px; text-shadow:0 0 10px #ffca60; opacity:0; animation:companionCardSpark 1.6s ease-out var(--delay) both; }
@keyframes companionCardSpark { 0% {opacity:0;transform:translate(0,0) scale(.2)} 20% {opacity:1} 100% {opacity:0;transform:translate(var(--dx),var(--dy)) scale(.5) rotate(100deg)} }
.companion-equipment>span{display:inline-flex;align-items:center;gap:7px}
.companion-equipment .companion-equipment-thumbnail{width:30px;height:30px;object-fit:contain;flex:none}

/* The reward has its own full-screen stage, so light and sparks can travel
   beyond the card without clipping the illustrated border or its controls. */
dialog.companion-milestone,
dialog.companion-milestone[data-card-theme]{
  position:fixed;inset:0;margin:0;width:100%;height:100dvh;
  max-width:none;max-height:none;box-sizing:border-box;
  padding:52px 20px 16px;border:0;border-radius:0;overflow-x:hidden;overflow-y:auto;
  background:transparent;box-shadow:none;color:var(--card-ink,#efd9aa);
  overscroll-behavior:contain;
}
dialog.companion-milestone[open]{display:grid;place-items:center}
html:has(body > dialog.companion-milestone[open]),
body:has(> dialog.companion-milestone[open]){overflow:hidden}
.companion-milestone::backdrop{background:#061510d9;backdrop-filter:blur(8px)}
.companion-milestone .companion-collectible{
  position:relative;z-index:2;flex:none;box-sizing:border-box;
  width:min(340px,calc(100vw - 40px),calc((100dvh - 240px) * .666667));
  min-width:180px;margin:auto;padding:0;isolation:isolate;
}
.companion-milestone .companion-card-face{
  transform-origin:50% 58%;backface-visibility:hidden;
  filter:drop-shadow(0 12px 28px #0007);
}
.companion-milestone .companion-card-close{
  top:-42px;right:0;width:36px;height:36px;z-index:5;
  border-color:#f5d78c9c;background:#102423e6;color:#fff7e0;
  box-shadow:0 0 0 4px #0c1d1870;font-size:26px;
}
.companion-milestone .companion-card-close:hover{background:#355448}
.companion-milestone .companion-card-obtained{
  margin:12px -10px 0;padding:0 4px;font-size:12px;line-height:1.75;
  color:#fff0ca;text-shadow:0 2px 5px #000,0 0 16px #071611;
}
.companion-milestone .companion-card-continue,
.companion-milestone[data-card-theme] .companion-card-continue{
  position:relative;z-index:4;min-height:46px;width:88%;margin:13px auto 0;
  padding:10px 20px;border:1px solid #ffe1a0;border-radius:24px;
  color:#382b0c;background:linear-gradient(160deg,#fff3bf,#f4cc69 55%,#dca33b);
  font-size:15px;font-weight:800;letter-spacing:1px;
  box-shadow:inset 0 1px 0 #fffbe8,0 3px 0 #8b5d1c,0 0 26px #ffd76a3b;
  touch-action:manipulation;transition:filter .15s,transform .15s,box-shadow .15s;
}
.companion-milestone .companion-card-continue:hover{
  background:linear-gradient(160deg,#fff8d7,#ffdb83 55%,#eab64e);
  box-shadow:inset 0 1px 0 #fffbe8,0 3px 0 #8b5d1c,0 0 34px #ffd76a61;
}
.companion-milestone .companion-card-continue:focus-visible{outline:3px solid #fff6cd;outline-offset:5px}
.companion-milestone .companion-card-continue:disabled{cursor:default;filter:none}
.companion-card-status{
  position:relative;z-index:4;min-height:23px;margin:9px -16px 0;
  font:700 13px/1.75 "Microsoft YaHei","PingFang SC",sans-serif;
  color:#fff1b7;text-shadow:0 2px 7px #000,0 0 15px #dba93b;
}
.companion-card-status:empty{visibility:hidden}
.companion-reveal-fx{
  position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;
  contain:paint;isolation:isolate;
}
.companion-reveal-fx::before{
  content:"";position:absolute;inset:0;opacity:0;
  background:radial-gradient(ellipse at 50% 43%,#ffdf9480 0,#d4a33824 36%,transparent 72%);
}
.companion-reveal-halo{
  position:absolute;left:50%;top:43%;width:min(130vw,980px);aspect-ratio:1;
  transform:translate(-50%,-50%);opacity:.32;
  background:radial-gradient(circle,#ffe4a026 8%,#efc25735 30%,#eac35011 48%,transparent 68%);
  border-radius:50%;
}
.companion-reveal-rays{
  position:absolute;left:50%;top:43%;width:150vmax;aspect-ratio:1;
  transform:translate(-50%,-50%) rotate(-18deg);opacity:0;
  background:repeating-conic-gradient(from 0deg,transparent 0deg 12deg,#ffdc7b24 13deg 17deg,transparent 18deg 30deg);
  -webkit-mask-image:radial-gradient(circle,transparent 0 8%,#000 18%,transparent 66%);
  mask-image:radial-gradient(circle,transparent 0 8%,#000 18%,transparent 66%);
}
.companion-reveal-ring{
  position:absolute;left:50%;top:43%;width:140px;aspect-ratio:1;
  border:2px solid #ffe7a6;border-radius:50%;opacity:0;
  transform:translate(-50%,-50%) scale(.2);
  box-shadow:0 0 24px #ffd164c4,inset 0 0 22px #f2c2638c;
}
.companion-reveal-particles{position:absolute;inset:0;pointer-events:none}
.companion-reveal-particles span{
  position:absolute;left:50%;top:43%;display:block;
  width:var(--size,6px);height:var(--size,6px);border-radius:2px;
  color:#fff4bf;background:currentColor;opacity:0;
  font-size:var(--size,6px);line-height:1;
  box-shadow:0 0 8px #ffe8a8,0 0 18px #f3bd48;
  transform:translate(-50%,-50%) scale(0) rotate(45deg);
}
.companion-milestone.is-revealing .companion-card-face{animation:companion-card-arrival 2.2s ease-in-out both}
.companion-milestone.is-revealing .companion-card-obtained{animation:companion-caption-arrival 1s ease-out 1.2s both}
.companion-milestone.is-revealing .companion-reveal-fx::before{animation:companion-stage-glow 3s ease-out both}
.companion-milestone.is-revealing .companion-reveal-halo{animation:companion-halo-arrival 3s ease-out both}
.companion-milestone.is-revealing .companion-reveal-rays{animation:companion-rays-arrival 3.2s ease-out both}
.companion-milestone.is-revealing .companion-reveal-ring{animation:companion-impact-ring 1.5s cubic-bezier(.12,.66,.28,1) 1.25s both}
.companion-milestone.is-revealing .companion-reveal-ring + .companion-reveal-ring{animation-delay:1.4s;animation-duration:1.5s;border-width:1px}
.companion-milestone.is-revealing .companion-reveal-particles span{animation:companion-particle-arrival 1.8s ease-out calc(1.25s + var(--delay,0ms)) both}
body.companion-impact > .product-shell,
body.companion-impact > #practiceShell,
body.companion-impact .preview-scene{animation:companion-page-impact .65s ease-out both}
.companion-milestone.is-collecting .companion-card-face{animation:companion-card-collected 1.1s cubic-bezier(.46,.02,.64,1) both}
.companion-milestone.is-collecting .companion-card-obtained{animation:companion-caption-collected .65s ease-out both}
.companion-milestone.is-collecting .companion-card-continue{opacity:.7;box-shadow:inset 0 1px 0 #fffbe8,0 2px 0 #8b5d1c}
.companion-milestone.is-collecting .companion-card-status{animation:companion-collected-message .45s ease-out both}
.companion-milestone.is-collecting .companion-reveal-rays{animation:companion-rays-collected 1.1s ease-in both}
.companion-milestone.is-collecting .companion-reveal-ring{animation:companion-ring-collected .9s ease-in both}
.companion-milestone.is-collecting .companion-reveal-ring + .companion-reveal-ring{animation-delay:.12s}
.companion-milestone.is-collecting .companion-reveal-particles span{animation:companion-particle-collected .85s ease-in var(--delay,0ms) both}
.companion-milestone.is-collecting .companion-reveal-fx::after{
  content:"";position:absolute;left:50%;top:0;width:120px;height:60%;
  transform:translateX(-50%);transform-origin:50% 0;
  background:linear-gradient(0deg,transparent,#ffeab26b 52%,#fff3c790);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 45% 55%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 45% 55%,transparent);
  animation:companion-collection-trail 1.1s ease-in both;
}
@keyframes companion-card-arrival{
  0%,10%{opacity:0;transform:perspective(1200px) translateY(48px) scale(.64) rotateY(-88deg);filter:drop-shadow(0 0 34px #ffdb88)}
  28%{opacity:.7;transform:perspective(1200px) translateY(26px) scale(.8) rotateY(-72deg)}
  56%{opacity:1;transform:perspective(1200px) translateY(-5px) scale(1.025) rotateY(-12deg);filter:drop-shadow(0 0 35px #ffd36980)}
  78%{opacity:1;transform:perspective(1200px) translateY(0) scale(1) rotateY(3deg)}
  100%{opacity:1;transform:perspective(1000px) translateY(0) scale(1) rotateY(0deg);filter:drop-shadow(0 12px 28px #0007)}
}
@keyframes companion-caption-arrival{0%,32%{opacity:0;transform:translateY(12px)}100%{opacity:1;transform:translateY(0)}}
@keyframes companion-stage-glow{0%{opacity:0}48%{opacity:.88}100%{opacity:0}}
@keyframes companion-halo-arrival{0%{opacity:0;transform:translate(-50%,-50%) scale(.35)}48%{opacity:1;transform:translate(-50%,-50%) scale(1.12)}100%{opacity:.32;transform:translate(-50%,-50%) scale(1)}}
@keyframes companion-rays-arrival{0%{opacity:0;transform:translate(-50%,-50%) rotate(-18deg) scale(.65)}44%{opacity:.9}100%{opacity:.16;transform:translate(-50%,-50%) rotate(12deg) scale(1)}}
@keyframes companion-impact-ring{0%{opacity:0;transform:translate(-50%,-50%) scale(.3)}12%{opacity:.85}100%{opacity:0;transform:translate(-50%,-50%) scale(7)}}
@keyframes companion-particle-arrival{0%{opacity:0;transform:translate(-50%,-50%) scale(.1) rotate(45deg)}14%{opacity:1}72%{opacity:.9}100%{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(.3) rotate(190deg)}}
@keyframes companion-page-impact{0%,100%{transform:translate(0,0)}14%{transform:translate(-6px,3px)}28%{transform:translate(5px,-3px)}42%{transform:translate(-4px,2px)}58%{transform:translate(3px,-1px)}76%{transform:translate(-1px,0)}}
@keyframes companion-card-collected{0%{opacity:1;transform:translateY(0) scale(1);filter:drop-shadow(0 12px 28px #0007)}22%{opacity:1;transform:translateY(-6px) scale(1.035);filter:drop-shadow(0 0 32px #ffe19a)}65%{opacity:1;transform:translateY(-17vh) scale(.55) rotate(3deg);filter:drop-shadow(0 0 35px #ffe19a)}85%{opacity:1}100%{opacity:0;transform:translateY(-42vh) scale(.08) rotate(7deg);filter:drop-shadow(0 0 18px #ffe19a)}}
@keyframes companion-caption-collected{to{opacity:0;transform:translateY(-8px)}}
@keyframes companion-collected-message{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
@keyframes companion-rays-collected{0%{opacity:.2;transform:translate(-50%,-50%) rotate(12deg)}35%{opacity:.65}100%{opacity:0;transform:translate(-50%,-50%) rotate(30deg) scale(.3)}}
@keyframes companion-ring-collected{0%{opacity:0;transform:translate(-50%,-50%) scale(5)}20%{opacity:.65}100%{opacity:0;transform:translate(-50%,-76vh) scale(.05)}}
@keyframes companion-particle-collected{0%{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(.7) rotate(45deg)}20%{opacity:1}100%{opacity:0;transform:translate(-50%,-48vh) scale(.1) rotate(200deg)}}
@keyframes companion-collection-trail{0%{opacity:0;transform:translateX(-50%) scaleX(.5)}30%{opacity:.7;transform:translateX(-50%) scaleX(1)}100%{opacity:0;transform:translateX(-50%) scaleX(.06)}}
@media(max-width:480px){
  dialog.companion-milestone,dialog.companion-milestone[data-card-theme]{padding-right:16px;padding-left:16px}
  .companion-milestone .companion-card-obtained{font-size:11px}
  .companion-card-status{font-size:12px}
}
@media(max-height:540px) and (min-width:640px){
  dialog.companion-milestone,dialog.companion-milestone[data-card-theme]{padding:20px 28px}
  .companion-milestone .companion-collectible{
    display:grid;grid-template-columns:minmax(0,1fr) minmax(190px,1fr);
    align-items:center;gap:10px 28px;width:min(650px,calc(100vw - 80px));min-width:0;
  }
  .companion-milestone .companion-card-face{grid-column:1;grid-row:1/5;width:min(100%,calc((100dvh - 48px) * .666667));justify-self:center}
  .companion-milestone .companion-card-close{top:0;right:-16px}
  .companion-milestone .companion-card-obtained{grid-column:2;margin:48px 0 0;align-self:end}
  .companion-milestone .companion-card-continue{grid-column:2;margin:6px auto 0}
  .companion-milestone .companion-card-status{grid-column:2;margin:0;align-self:start}
}
@media(prefers-reduced-motion:reduce){
  body.companion-impact > .product-shell,body.companion-impact > #practiceShell,body.companion-impact .preview-scene{animation:none}
  .companion-milestone .companion-reveal-fx::before,
  .companion-milestone .companion-reveal-fx::after,
  .companion-milestone .companion-reveal-rays,
  .companion-milestone .companion-reveal-ring,
  .companion-milestone .companion-reveal-particles{display:none}
  .companion-milestone.is-revealing .companion-reveal-halo{animation:none;opacity:.22}
  .companion-milestone.is-revealing .companion-card-face{animation:none;opacity:1}
  .companion-milestone.is-revealing .companion-card-obtained,
  .companion-milestone.is-collecting .companion-card-status{animation:companion-reduced-arrival .25s ease-out both}
  .companion-milestone.is-collecting .companion-card-face,
  .companion-milestone.is-collecting .companion-card-obtained{animation:companion-reduced-collected .45s ease-out both}
  .companion-milestone .companion-card-continue{transition:none}
}
@keyframes companion-reduced-arrival{from{opacity:0}to{opacity:1}}
@keyframes companion-reduced-collected{to{opacity:0}}

/* Four illustrated poses; play one strike per correct answer, never loop attacks. */
.companion-reward-battle.companion-mouse-duel{right:0;bottom:8px;width:280px;max-width:85vw;padding:0;background:transparent;border:0;box-shadow:none;color:#fff0b1}
.companion-duel-frames{display:block;width:100%;aspect-ratio:3/2;border-radius:16px;background-image:url('./assets/game/battle-mouse-v1/duel-sheet.png');background-size:200% 200%;background-position:0 0;background-repeat:no-repeat;animation:companion-mouse-strike 1.65s steps(1,end) both;filter:drop-shadow(0 5px 7px #0005)}
.companion-duel-replay{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:transparent;box-shadow:none;cursor:pointer;pointer-events:auto;border-radius:16px;z-index:2}
.companion-duel-replay:hover{background:transparent;box-shadow:none}
.companion-duel-replay:focus-visible{outline:2px solid #ffe28b;outline-offset:3px}
.companion-mouse-duel.is-idle .companion-duel-frames{animation:none;visibility:hidden}
.companion-mouse-duel.is-hit .companion-duel-frames{animation:companion-mouse-strike 1.65s steps(1,end) both}
.companion-mouse-duel.is-restoredIdle .companion-duel-frames{animation:none;background-image:url('./assets/game/battle-mouse-v1/counter-restore-sheet.png');background-position:100% 95.703125%}
.companion-mouse-duel.is-counter .companion-duel-frames{animation:companion-mouse-counter 1.2s steps(1,end) both}
.companion-mouse-duel.is-restored .companion-duel-frames{animation:companion-mouse-restored 3s steps(1,end) both}
.companion-duel-peek{position:absolute;right:6px;bottom:0;width:160px;height:85px;background:url('./assets/game/battle-mouse-v1/peek-pair-v1.png') center top/160px auto no-repeat;overflow:hidden;filter:drop-shadow(0 2px 4px #0003)}
.companion-duel-health{position:absolute;right:-38px;top:22%;display:flex;align-items:center;gap:3px;width:70px;min-height:14px;padding:2px 4px;box-sizing:border-box;border:0;border-radius:0;background:transparent;color:#ffe8a4;text-shadow:0 1px 2px #000,0 0 3px #0009;text-align:center;line-height:1;pointer-events:none}
.companion-mouse-duel.is-restored .companion-duel-health{animation:companion-duel-health-hide 3s steps(1,end) both}
.companion-mouse-duel.is-hit.has-damage .companion-duel-health{animation:companion-duel-health-impact .55s ease-out .69s both}
.companion-mouse-duel.is-restored.has-damage .companion-duel-health{animation:companion-duel-health-hide 3s steps(1,end) both,companion-duel-health-impact .55s ease-out .69s both}
.companion-duel-health-label{display:block;flex:0 0 18px;font-size:9px;line-height:1.1;white-space:nowrap}
.companion-duel-health-track{position:relative;display:block;flex:1;min-width:0;height:4px;overflow:hidden;border-radius:4px;background:#ffefd933}
.companion-duel-health-fill,.companion-duel-health-ghost{position:absolute;inset:0;display:block;width:100%;height:100%;border-radius:inherit;transform:scaleX(var(--health-after,1));transform-origin:left center}
.companion-duel-health-fill{background:linear-gradient(90deg,#ee8d56,#ffd878)}
.companion-duel-health-ghost{background:#fff9cb;box-shadow:0 0 8px #ffe38c;animation:companion-duel-health-hit .8s ease-out 1s both}
.companion-mouse-duel.has-damage .companion-duel-health-fill{animation:companion-duel-health-hit .18s ease-out .69s both}
.companion-duel-health-damage{position:absolute;right:0;bottom:calc(100% + 3px);padding:2px 4px;border-radius:5px;background:#211a16de;color:#ffe28b;font-size:12px;font-weight:800;line-height:1.2;white-space:nowrap;text-shadow:0 1px 3px #000;animation:companion-duel-damage-float 2.3s ease-out .69s both}
.companion-duel-feedback{position:absolute;right:calc(100% + 8px);bottom:20px;box-sizing:border-box;width:200px;max-width:calc(100vw - 40px);padding:9px 13px;border:1px solid #d5b45399;border-radius:12px;background:#171316ed;box-shadow:0 5px 18px #0004;color:#fff0b1;animation:companion-duel-feedback-in 3s ease-out .69s both}
.companion-duel-feedback::after{content:"";position:absolute;left:100%;bottom:14px;border:6px solid transparent;border-left-color:#d5b45399}
.companion-mouse-duel .companion-duel-feedback strong{margin:0;font-size:13px;line-height:1.45}
.companion-mouse-duel .companion-duel-feedback small{margin-top:3px;font-size:12px;line-height:1.4;color:#ffe088}
.companion-mouse-duel.is-counter .companion-duel-feedback{animation-delay:.1s}
.companion-mouse-duel.is-restored .companion-duel-feedback{animation-delay:2.1s}
.wukong-journey-panel:has(.companion-mouse-duel) .wukong-reward-title{display:none}
/* Use the practice panel's top border as the fighters' ground line.
   The feedback floats beside them, outside the feet's layout and header controls. */
.dialogue-panel .wukong-journey-panel:has(.companion-mouse-duel){top:auto;bottom:100%;height:186px}
.dialogue-panel .wukong-journey-panel .companion-mouse-duel{bottom:0}
.dialogue-panel .companion-duel-feedback{right:40px;bottom:auto;top:calc(100% + 8px);width:180px}
.dialogue-panel .companion-duel-feedback::after{display:none}
@keyframes companion-mouse-strike{0%{background-position:0 0}20%{background-position:100% 0}42%{background-position:0 100%}62%{background-position:100% 100%}100%{background-position:0 0}}
@keyframes companion-mouse-counter{0%{background-image:url('./assets/game/battle-mouse-v1/counter-restore-sheet.png');background-position:0 0}50%{background-image:url('./assets/game/battle-mouse-v1/counter-restore-sheet.png');background-position:100% 0}100%{background-image:url('./assets/game/battle-mouse-v1/duel-sheet.png');background-position:0 0}}
/* The lower restore row starts at source y=490, above the nominal 512px split. */
@keyframes companion-mouse-restored{0%{background-image:url('./assets/game/battle-mouse-v1/duel-sheet.png');background-position:0 0}11%{background-position:100% 0}23.1%{background-position:0 100%}34.1%{background-position:100% 100%}44%{background-image:url('./assets/game/battle-mouse-v1/counter-restore-sheet.png');background-position:0 95.703125%}70%,100%{background-image:url('./assets/game/battle-mouse-v1/counter-restore-sheet.png');background-position:100% 95.703125%}}
@keyframes companion-duel-health-hit{from{transform:scaleX(var(--health-before,1))}to{transform:scaleX(var(--health-after,1))}}
@keyframes companion-duel-health-hide{0%{visibility:visible;opacity:1}100%{visibility:hidden;opacity:0}}
@keyframes companion-duel-health-impact{0%,100%{transform:translateX(0);box-shadow:none}18%{transform:translateX(-2px);box-shadow:0 0 12px #ffcf68b3}36%{transform:translateX(2px);box-shadow:0 0 12px #ffcf68b3}54%{transform:translateX(-1px);box-shadow:0 0 8px #ffcf6870}72%{transform:translateX(1px);box-shadow:0 0 5px #ffcf6840}}
@keyframes companion-duel-damage-float{0%{opacity:0;visibility:hidden;transform:translateY(3px)}10%,70%{opacity:1;visibility:visible;transform:translateY(-5px)}100%{opacity:0;visibility:hidden;transform:translateY(-12px)}}
@keyframes companion-duel-feedback-in{0%{opacity:0;visibility:hidden;transform:translateY(5px)}8%,100%{opacity:1;visibility:visible;transform:translateY(0)}}
@keyframes companion-duel-feedback-reduced{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}
@media(max-width:600px){.companion-reward-battle.companion-mouse-duel{width:230px;bottom:6px}.companion-duel-feedback{right:0;bottom:calc(100% + 8px)}.companion-duel-feedback::after{left:auto;right:30px;bottom:auto;top:100%;border-left-color:transparent;border-top-color:#d5b45399}}
@media(max-width:600px){.dialogue-panel .companion-duel-feedback{right:4px;bottom:auto;top:calc(100% + 116px);width:180px;padding:6px 10px}.dialogue-panel .companion-duel-feedback strong{font-size:12px}.dialogue-panel .companion-duel-feedback small{font-size:11px}.dialogue-panel:has(.companion-duel-feedback) .speaker-row{min-height:170px;align-content:start;align-items:start}}
@media(prefers-reduced-motion:reduce){.companion-mouse-duel .companion-duel-frames{animation:none!important;background-position:0 0}.companion-mouse-duel .companion-duel-peek{animation:none!important;opacity:1;visibility:visible;transform:none}.companion-mouse-duel.is-restored .companion-duel-frames{background-image:url('./assets/game/battle-mouse-v1/counter-restore-sheet.png');background-position:100% 95.703125%}.companion-mouse-duel .companion-duel-health{animation:none!important;transform:none;box-shadow:none}.companion-mouse-duel .companion-duel-health-fill{animation:none!important}.companion-mouse-duel .companion-duel-health-ghost{display:none;animation:none!important}.companion-mouse-duel .companion-duel-health-damage{animation:companion-duel-feedback-reduced 3s steps(1,end) both!important;transform:none}.companion-mouse-duel .companion-duel-feedback{animation:companion-duel-feedback-reduced 3s steps(1,end) both!important;opacity:1;transform:none}}

/* Keep reward art compact even if its bitmap has a large intrinsic size. */
dialog.companion-milestone .companion-collectible {
  width: min(280px, 72vw, calc((100dvh - 230px) * .666667));
  min-width: 0;
  max-width: 100%;
  display: block;
  margin: auto;
}
dialog.companion-milestone .companion-card-face {
  width: 100%;
  min-width: 0;
  max-width: 100%;
  aspect-ratio: 2 / 3;
}
dialog.companion-milestone .companion-full-art {
  width: 100%;
  max-width: 100%;
  height: 100%;
  object-fit: contain;
}
@media(max-width:480px) {
  dialog.companion-milestone .companion-collectible {
    width: min(250px, 68vw, calc((100dvh - 225px) * .666667));
  }
}
@media(max-height:540px) and (min-width:640px) {
  dialog.companion-milestone .companion-collectible { width: min(190px, calc((100dvh - 160px) * .666667)); }
}

/* Isolated front-facing card preview. */
.companion-milestone.is-revealing .companion-card-face{animation:companion-front-arrival 4.2s cubic-bezier(.4,0,.2,1) both}
@keyframes companion-front-arrival{
0%{opacity:0;transform:translateY(22px) scale(.9);filter:blur(6px) drop-shadow(0 0 8px #ffd36920)}
45%{opacity:.55;transform:translateY(7px) scale(.97);filter:blur(2px) drop-shadow(0 0 24px #ffd36950)}
80%{opacity:1;transform:translateY(-2px) scale(1.006);filter:blur(.2px) drop-shadow(0 0 28px #ffd36960)}
100%{opacity:1;transform:translateY(0) scale(1);filter:blur(0) drop-shadow(0 12px 28px #0007)}
}
.companion-milestone.is-revealing .companion-reveal-ring{display:none}
.companion-milestone.is-revealing .companion-reveal-fx::before{animation:companion-front-glow 4.8s ease-in-out both}
@keyframes companion-front-glow{0%{opacity:0}55%{opacity:.35}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.companion-milestone.is-revealing .companion-card-face{animation:companion-reduced-arrival .25s ease-out both;transform:none}.companion-milestone.is-revealing .companion-reveal-fx::before{animation:none}}

.companion-milestone.is-revealing .companion-card-obtained{animation-delay:2.5s}
@media(prefers-reduced-motion:reduce){.companion-milestone.is-revealing .companion-card-obtained{animation-delay:0s}}

/* Calm collection exit: stay facing the viewer. */
.companion-milestone.is-collecting .companion-card-face{animation:companion-front-exit 1.8s cubic-bezier(.4,0,.2,1) both}
@keyframes companion-front-exit{
0%{opacity:1;transform:translateY(0) scale(1);filter:drop-shadow(0 12px 28px #0007)}
30%{opacity:1;transform:translateY(0) scale(.98);filter:drop-shadow(0 0 22px #ffe19a50)}
100%{opacity:0;transform:translateY(8px) scale(.88);filter:drop-shadow(0 0 8px #ffe19a00)}
}
.companion-milestone.is-collecting .companion-reveal-ring,
.companion-milestone.is-collecting .companion-reveal-particles,
.companion-milestone.is-collecting .companion-collection-trail{display:none}
.companion-milestone.is-collecting .companion-card-obtained{animation:companion-front-caption-exit 1.2s ease-in both}
@keyframes companion-front-caption-exit{to{opacity:0}}
@media(prefers-reduced-motion:reduce){
.companion-milestone.is-collecting .companion-card-face{animation:companion-reduced-collected .45s ease-out both;transform:none}
.companion-milestone.is-collecting .companion-card-obtained{animation:companion-front-caption-exit .25s ease-out both}
}

/* A single warm edge flash, confined to the card. */
.companion-milestone.is-collecting .companion-card-face{animation:companion-edge-flash-exit 1.25s ease-in-out both}
@keyframes companion-edge-flash-exit{
0%{opacity:1;transform:scale(1);filter:brightness(1) drop-shadow(0 0 0 #ffe4a000)}
24%{opacity:1;transform:scale(1.008);filter:brightness(1.08) drop-shadow(0 0 7px #fff3cb) drop-shadow(0 0 22px #ffd16caa)}
40%{opacity:1;transform:scale(1);filter:brightness(1.02) drop-shadow(0 0 15px #ffe6a3aa)}
100%{opacity:0;transform:scale(.94);filter:brightness(1) drop-shadow(0 0 3px #ffe4a000)}
}
@media(prefers-reduced-motion:reduce){.companion-milestone.is-collecting .companion-card-face{animation:companion-reduced-collected .45s ease-out both;filter:none;transform:none}}

.companion-milestone.is-awaiting-music .companion-card-face,.companion-milestone.is-awaiting-music .companion-card-obtained,.companion-milestone.is-awaiting-music .companion-reveal-fx{opacity:0;visibility:hidden}

.companion-milestone.is-static-view,.companion-milestone.is-static-view *{animation:none!important;transition:none!important}
.companion-milestone.is-static-view::backdrop{animation:none!important;transition:none!important}
.companion-mouse-duel.is-cheering .companion-duel-frames{animation:companion-friendly-cheer .65s ease-out}
@keyframes companion-friendly-cheer{0%,100%{transform:translateY(0)}45%{transform:translateY(-8px)}}
/* Keep battle feedback until the next sentence removes its battle node. */
@media(prefers-reduced-motion:reduce){.companion-mouse-duel .companion-duel-feedback{animation:none!important;opacity:1;visibility:visible;transform:none}}
