/* Retention UI (progress-ui): lobby rank panel, cards, badges, reward summary, shop. Palette follows the lobby glass panel.
   Every root carries .cf-progress-ui and button rules are scoped under it, so they beat the lobby's `.online-panel button`
   whatever the stylesheet order (the base CSS is injected after this link). No <footer> elements: `.online-panel footer`
   is display:none on phones. */
.cf-progress-panel{position:relative;margin:12px 0 14px;padding:14px 16px;border:1px solid #cbb78166;border-radius:12px;background:linear-gradient(135deg,#1a2630f2,#141c21f0);box-shadow:inset 0 1px 0 #ffffff12,0 10px 30px #0006;color:#e8eeea;font-size:13px;text-align:left}
.cf-progress-panel *{box-sizing:border-box}
.cf-progress-head{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:14px;align-items:center}
.cf-progress-rank{min-width:0;display:flex;flex-direction:column;gap:5px}
.cf-progress-rank-line{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0}
.cf-progress-rank-line strong{font-size:19px;letter-spacing:1px;color:#f1e1b5}
.cf-progress-rank-line>span{color:#a8b8ae;font-size:12px}
.cf-progress-gold{display:inline-flex;align-items:center;gap:0;color:#f5d072;font-family:ui-monospace,Menlo,monospace;font-size:15px;font-weight:600;white-space:nowrap}
.cf-progress-rank-line .cf-progress-gold{margin-left:auto}
.cf-coin{display:inline-block;flex:0 0 auto;width:.95em;height:.95em;margin-right:.32em;border-radius:50%;background:radial-gradient(circle at 34% 32%,#fff6cf 0,#f2cf62 38%,#b8861d 78%,#7d5a10 100%);box-shadow:inset 0 0 0 1px #8a641099,0 0 4px #f5d07255;vertical-align:-.12em}
.cf-progress-xp{position:relative;height:7px;border-radius:4px;background:#ffffff14;overflow:hidden}
.cf-progress-xp i{position:absolute;inset:0 auto 0 0;border-radius:4px;background:linear-gradient(90deg,#b8923a,#f5d072);box-shadow:0 0 10px #f5d07266;transition:width .4s ease}
.cf-progress-xp-text,.cf-progress-stats{color:#a8b8ae;font-size:11.5px;line-height:1.4}
.cf-progress-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.cf-progress-ui button.cf-progress-btn{position:relative;min-height:36px;padding:7px 14px;border:1px solid #7b724e;border-radius:6px;background:#153548;color:#f3e8cf;font:600 13px/1.3 inherit;font-family:inherit;cursor:pointer;white-space:nowrap}
.cf-progress-ui button.cf-progress-btn small{color:#9ad1a0;font-size:11px}
.cf-progress-ui button.cf-progress-btn:hover:not(:disabled){background:#1c4860}
.cf-progress-ui button.cf-progress-btn.is-active{background:#3b3727;border-color:#d2b66a;color:#fff4ce;box-shadow:inset 0 0 0 1px #a48d52}
.cf-progress-ui button.cf-progress-btn.is-primary{background:#cbb781;border-color:#cbb781;color:#17221f}
.cf-progress-ui button.cf-progress-btn.is-primary:hover:not(:disabled){background:#dcc994}
.cf-progress-ui button.cf-progress-btn.is-danger{background:#e3734f;border-color:#ef7253;color:#1b0f0b}
.cf-progress-ui button.cf-progress-btn:disabled{opacity:.5;cursor:not-allowed}
.cf-progress-ui button.cf-progress-btn:focus-visible{outline:2px solid #ffb394;outline-offset:2px}
.cf-progress-dot{position:absolute;top:-4px;right:-4px;width:9px;height:9px;border-radius:50%;background:#ef7253;box-shadow:0 0 0 2px #141c21}
.cf-progress-error,.cf-progress-notice{display:flex;align-items:center;gap:10px;margin:10px 0 0;padding:8px 10px;border-radius:6px;line-height:1.45}
.cf-progress-error{background:#4a1f1f;border:1px solid #ef725366;color:#ffb394}
.cf-progress-notice{background:#173322;border:1px solid #9ad1a066;color:#c6efcb}
.cf-progress-fine{display:block;margin:8px 0 0;color:#8d9c93;font-size:11.5px;line-height:1.5}
.cf-progress-card{margin-top:12px;padding:12px 14px;border:1px solid #ffffff1c;border-radius:10px;background:#0f171cd9}
.cf-progress-card>header{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.cf-progress-card>header h3{margin:0;font-size:15px;color:#f1e1b5;letter-spacing:1px}
.cf-progress-card>header span{color:#a8b8ae;font-size:12px}
.cf-progress-ui button.cf-progress-x{display:inline-grid;place-items:center;flex:0 0 auto;width:28px;height:28px;margin-left:auto;padding:0;border:0;border-radius:50%;background:#ffffff14;color:#e8eeea;font:400 17px/1 sans-serif;cursor:pointer}
.cf-progress-ui button.cf-progress-x:hover{background:#ffffff26}
.cf-progress-ui .cf-progress-error button.cf-progress-x,.cf-progress-ui .cf-progress-notice button.cf-progress-x{width:24px;height:24px;background:transparent;color:inherit}
.cf-progress-card p{margin:4px 0 8px;color:#c9d3cd;line-height:1.55}
.cf-progress-card b{color:#f5d072}
.cf-progress-card .cf-progress-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px}
.cf-progress-card .cf-progress-foot>span{flex:1 1 200px;color:#c9d3cd}
.cf-progress-welcome{border-color:#cbb78199;background:linear-gradient(135deg,#2b2a1cd9,#0f171cd9)}
.cf-progress-welcome-gifts{display:flex;flex-wrap:wrap;gap:8px 18px;margin:6px 0 4px;color:#e8eeea;font-size:14px}
.cf-progress-welcome-gifts span{display:inline-flex;align-items:center;gap:4px}
.cf-progress-welcome-gifts b{font-size:17px}
.cf-progress-calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin:8px 0 0;padding:0;list-style:none}
.cf-progress-calendar li{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;padding:8px 2px;border:1px solid #ffffff1a;border-radius:8px;background:#ffffff08;text-align:center}
.cf-progress-calendar li small{color:#a8b8ae;font-size:10.5px;white-space:nowrap}
.cf-progress-calendar li strong{color:#f5d072;font-family:ui-monospace,Menlo,monospace;font-size:15px}
.cf-progress-calendar li span{color:#8d9c93;font-size:10px;line-height:1.2}
.cf-progress-calendar li.is-done{background:#cbb7811f;border-color:#cbb78166}
.cf-progress-calendar li.is-done strong::after{content:" ✓";color:#9ad1a0;font-size:11px}
.cf-progress-calendar li.is-today{border-color:#f5d072;box-shadow:0 0 0 1px #f5d07266,0 0 14px #f5d07233}
.cf-progress-code{display:flex;gap:6px;margin:6px 0 10px}
.cf-progress-code b{flex:0 0 36px;height:42px;display:grid;place-items:center;border:1px solid #cbb78166;border-radius:6px;background:#1a2630;color:#f5d072;font:700 20px/1 ui-monospace,Menlo,monospace;letter-spacing:1px}
.cf-progress-copy{display:flex;gap:8px;flex-wrap:wrap}
.cf-progress-copy input{flex:1 1 220px;min-width:0;height:36px;padding:0 10px;border:1px solid #ffffff22;border-radius:6px;background:#0b1217;color:#e8eeea;font:13px/1 ui-monospace,Menlo,monospace}
.cf-progress-copy-status{display:block;min-height:16px;margin-top:6px;color:#9ad1a0}
.cf-progress-invite form{display:flex;gap:8px;flex-wrap:wrap}
.cf-progress-invite input{flex:1 1 160px;min-width:0;height:38px;padding:0 12px;border:1px solid #cbb78166;border-radius:6px;background:#0b1217;color:#f5d072;font:700 18px/1 ui-monospace,Menlo,monospace;letter-spacing:4px;text-transform:uppercase}
.cf-progress-invite.is-bound{border-color:#9ad1a066}
.cf-progress-hint{display:block;margin-top:6px;color:#ffb394}
/* badges */
.cf-rank-badge{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;flex:0 0 auto;filter:drop-shadow(0 1px 2px #0008)}
.cf-rank-badge svg{display:block;width:100%;height:100%}
.cf-rank-badge-small{margin-right:6px}
.scoreboard-name .cf-rank-badge-small{margin-right:5px;vertical-align:-3px}
.online-player .cf-rank-badge-small{vertical-align:-3px}
/* reward summary */
.cf-progress-reward{margin-top:12px;padding:12px 14px;border:1px solid #cbb78166;border-radius:10px;background:linear-gradient(135deg,#1e2a1ed9,#0f171cd9);color:#e8eeea;text-align:left}
.cf-progress-reward>header{display:flex;align-items:center;gap:10px}
.cf-progress-reward>header strong{font-size:15px;color:#f1e1b5;letter-spacing:1px}
.cf-progress-reward>header span{color:#a8b8ae;font-size:12px}
.cf-progress-reward-totals{display:flex;gap:18px;flex-wrap:wrap;margin:10px 0 6px}
.cf-progress-reward-totals div{display:flex;flex-direction:column;gap:2px}
.cf-progress-reward-totals span{color:#a8b8ae;font-size:11.5px}
.cf-progress-reward-totals b{display:inline-flex;align-items:center;font-family:ui-monospace,Menlo,monospace;font-size:22px;font-weight:600;color:#f5d072}
.cf-progress-reward-breakdown{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:4px 14px;margin:4px 0 8px;padding:0;list-style:none;font-size:12px}
.cf-progress-reward-breakdown li{display:flex;justify-content:space-between;gap:8px;border-bottom:1px dashed #ffffff14;padding:3px 0}
.cf-progress-reward-breakdown span{color:#a8b8ae}
.cf-progress-reward-breakdown b{color:#e8eeea;font-weight:500;text-align:right}
.cf-progress-rankup{display:flex;align-items:center;gap:12px;margin:8px 0 10px;padding:10px 12px;border-radius:8px;background:linear-gradient(90deg,#cbb78138,transparent);border:1px solid #cbb78166;animation:cf-rankup-in .6s ease-out}
.cf-progress-rankup div{display:flex;flex-direction:column;gap:2px}
.cf-progress-rankup small{color:#f5d072;font-size:11px;letter-spacing:2px}
.cf-progress-rankup strong{font-size:16px;color:#f1e1b5}
.cf-progress-rankup span{color:#f5d072;font-size:12px}
@keyframes cf-rankup-in{from{transform:scale(.96);opacity:0}to{transform:none;opacity:1}}
.result-panel .cf-progress-reward-hud{width:min(460px,100%);margin:0 auto 16px;padding:10px 14px}
.result-panel .cf-progress-reward-hud .cf-progress-reward-totals b{font-size:20px}
.result-panel .cf-progress-reward-hud .cf-progress-reward-breakdown{grid-template-columns:repeat(2,minmax(0,1fr))}
.cf-progress-reward-capped{display:block;margin:2px 0 6px;color:#ffb394;font-size:11.5px}
.cf-progress-ui button.cf-progress-link{flex:0 0 auto;min-height:0;padding:2px 6px;border:0;border-radius:4px;background:transparent;color:#9ad1a0;font:600 12px/1.4 inherit;font-family:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.cf-progress-ui button.cf-progress-link:hover{background:#ffffff12}
.cf-progress-reward-more{display:none}
.cf-progress-ui button.cf-progress-reward-more{display:none}
/* one-line reward (room view, TAB scoreboard) */
.cf-progress-reward-line{margin-top:8px;padding:6px 10px}
.cf-progress-reward-row{display:flex;align-items:center;gap:6px 12px;flex-wrap:wrap;min-width:0}
.cf-progress-reward-row>strong{font-size:13px;color:#f1e1b5;letter-spacing:1px}
.cf-progress-reward-row>span{color:#a8b8ae;font-size:12px}
.cf-progress-reward-row>b{display:inline-flex;align-items:center;color:#f5d072;font-family:ui-monospace,Menlo,monospace;font-size:14px;font-weight:600;white-space:nowrap}
.cf-progress-reward-row .cf-progress-rankup-inline{display:inline-flex;align-items:center;gap:5px;color:#f5d072;font-size:12.5px;font-weight:600}
.cf-progress-reward-row .cf-progress-rankup-inline .cf-rank-badge{margin:0}
.cf-progress-reward-row .cf-progress-x{width:24px;height:24px;font-size:15px}
.cf-progress-reward-line .cf-progress-reward-breakdown{margin:6px 0 2px}
.match-scoreboard .cf-progress-reward-scoreboard{margin:0 0 10px;padding:6px 12px;pointer-events:none;background:linear-gradient(90deg,#2a2a1ccc,#0f171ccc)}
/* shop */
.cf-progress-shop{padding:4px 0 12px}
.cf-progress-shop.is-empty p{padding:24px;text-align:center;color:#a8b8ae}
.cf-progress-shop>header{display:flex;align-items:flex-start;gap:12px;margin:8px 0 12px}
.cf-progress-shop>header h4{margin:0 0 4px;font-size:15px;color:#f1e1b5;letter-spacing:1px}
.cf-progress-shop>header p{margin:0;color:#a8b8ae;font-size:12px;line-height:1.5}
.cf-progress-shop>header .cf-progress-gold{margin-left:auto;font-size:17px}
.cf-progress-shop .cf-progress-error,.cf-progress-shop .cf-progress-notice{margin-bottom:10px}
.cf-progress-shop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.cf-progress-shop.is-compact .cf-progress-shop-grid{max-height:min(460px,60vh);overflow:auto;padding-right:4px}
.cf-shop-item{display:flex;flex-direction:column;gap:3px;min-width:0;padding:10px 12px 12px;border:1px solid #ffffff1c;border-radius:10px;background:#0f171cd9;color:#e8eeea}
.cf-shop-art{display:grid;place-items:center;height:64px}
.cf-shop-art img{max-width:100%;max-height:100%;object-fit:contain;filter:drop-shadow(0 4px 8px #0008)}
.cf-shop-item small{color:#a8b8ae;font-size:11px}
.cf-shop-item strong{font-size:14px;color:#e8eeea;line-height:1.3;overflow-wrap:anywhere}
.cf-shop-item .cf-progress-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:8px}
.cf-progress-ui .cf-shop-item .cf-progress-foot button.cf-progress-btn{min-height:32px;padding:5px 12px;font-size:12.5px}
.cf-shop-price{display:inline-flex;align-items:center;flex-wrap:wrap;color:#f5d072;font-family:ui-monospace,Menlo,monospace;font-weight:600}
.cf-shop-price em{color:#9ad1a0;font:500 11px/1.3 inherit;font-style:normal}
.cf-shop-owned{color:#9ad1a0;font-size:12px}
.cf-shop-item.is-owned{border-color:#9ad1a044;background:#13201ad9}
.cf-shop-item.is-armed{border-color:#ef7253aa}
.cf-shop-weapon{border-color:#cbb78155}
/* warehouse tabs (equipment UI wrapper) */
.cf-progress-warehouse-tabs{display:flex;gap:6px;margin:0 0 12px;padding:4px;border:1px solid #334d56;border-radius:9px;background:#0d2029}
nav.cf-progress-warehouse-tabs button{flex:1;padding:6px 10px;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;border:1px solid transparent;border-radius:6px;background:transparent;color:#c6d6d9;font-weight:700;font-family:inherit;cursor:pointer}
nav.cf-progress-warehouse-tabs button[aria-pressed=true]{border-color:#d2b66a;background:#3b3727;color:#fff4ce}
.cf-progress-warehouse-tabs .cf-progress-gold{font-size:13px}
.cf-lobby-columns.cf-room-tab-overview>.cf-progress-warehouse-tabs{display:none}
.cf-progress-shop-workspace{padding:0 2px}
.cf-progress-shop-workspace .cf-progress-shop{padding-top:0}
/* room view: one line (badge, rank, gold, buttons) under the room toolbar, so 开始游戏 / 进入战场 never move */
.cf-progress-panel.is-room{margin:8px 0;padding:8px 12px 10px}
.cf-progress-roomline{position:relative;display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;padding-bottom:4px}
.cf-progress-roomline .cf-progress-rank-line{flex:1 1 auto;gap:8px}
.cf-progress-roomline .cf-progress-rank-line strong{font-size:16px}
.cf-progress-roomline .cf-progress-rank-line .cf-progress-gold{margin-left:4px}
.cf-progress-roomline .cf-progress-actions{flex:0 0 auto;gap:6px}
.cf-progress-ui .cf-progress-roomline .cf-progress-actions button.cf-progress-btn{min-height:30px;padding:4px 10px;font-size:12px}
.cf-progress-roomline-xp{position:absolute;left:0;bottom:-2px;height:2px;border-radius:1px;background:linear-gradient(90deg,#b8923a,#f5d072);box-shadow:0 0 6px #f5d07255}
/* phones (390px) */
@media(max-width:640px){
  .cf-progress-panel{padding:12px;margin:10px 0}
  .cf-progress-head{grid-template-columns:44px minmax(0,1fr);gap:10px}
  .cf-progress-head .cf-rank-badge-large{width:44px!important;height:44px!important}
  .cf-progress-actions{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
  .cf-progress-actions .cf-progress-btn{padding:8px 4px;font-size:12.5px}
  .cf-progress-rank-line strong{font-size:17px}
  .cf-progress-card{padding:10px 11px}
  .cf-progress-calendar{gap:3px}
  .cf-progress-calendar li{padding:6px 0;border-radius:6px}
  .cf-progress-calendar li small{font-size:9.5px}
  .cf-progress-calendar li strong{font-size:12.5px}
  .cf-progress-calendar li span{font-size:8.5px}
  .cf-progress-code b{flex:1 1 0;height:38px;font-size:18px}
  .cf-progress-copy .cf-progress-btn,.cf-progress-invite form .cf-progress-btn{flex:1 1 100%}
  .cf-progress-shop>header{flex-wrap:wrap}
  .cf-progress-shop-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .cf-shop-item{padding:8px 9px 10px}
  .cf-shop-art{height:46px}
  .cf-shop-item strong{font-size:13px}
  .cf-shop-item .cf-progress-foot{flex-wrap:wrap}
  .cf-progress-ui .cf-shop-item .cf-progress-foot button.cf-progress-btn{flex:1 1 100%}
  .cf-progress-reward-totals{gap:12px}
  .cf-progress-reward-totals b{font-size:19px}
  .result-panel .cf-progress-reward-hud .cf-progress-reward-breakdown{grid-template-columns:1fr}
  .cf-progress-roomline .cf-progress-actions{flex:1 1 100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
}
/* phones and short landscape screens: the result / pause overlay scrolls, and the reward summary keeps only the
   totals and the rank-up line (明细 opens the breakdown and the XP bar) so 返回房间 / 继续行动 stay reachable */
@media(max-width:640px),(max-height:500px){
  .overlay>.result-panel{max-height:calc(100dvh - 12px);overflow-y:auto;overscroll-behavior:contain}
  .result-panel .cf-progress-reward-hud{margin-bottom:10px;padding:8px 10px}
  .cf-progress-ui.cf-progress-reward-hud button.cf-progress-reward-more{display:inline-block;margin-left:auto}
  .cf-progress-reward-hud .cf-progress-reward-more+.cf-progress-x{margin-left:0}
  .cf-progress-reward-hud:not(.is-open) .cf-progress-reward-breakdown,.cf-progress-reward-hud:not(.is-open) .cf-progress-reward-xp{display:none}
  .result-panel .cf-progress-reward-hud .cf-progress-reward-totals{margin:6px 0 2px}
  .result-panel .cf-progress-reward-hud .cf-progress-reward-totals b{font-size:17px}
  .cf-progress-reward-hud .cf-progress-rankup{margin:6px 0 2px;padding:6px 8px;gap:8px}
  .cf-progress-reward-hud .cf-progress-rankup .cf-rank-badge{width:30px!important;height:30px!important}
  .cf-progress-reward-hud .cf-progress-rankup strong{font-size:14px}
}
@media(max-height:500px){
  .cf-progress-panel.is-room{margin:4px 0;padding:6px 10px 8px}
}
