.recap{--recap-cols:minmax(0,1.6fr) minmax(0,1fr);display:flex;flex-direction:column;gap:14px;padding:.5rem clamp(1rem,4vw,2rem) 1.5rem;width:100%;box-sizing:border-box;max-width:1200px;margin:0 auto}.recap--strengths{--recap-cols:minmax(0,1.5fr) minmax(0,1fr) minmax(0,1fr)}.recap-muted{color:var(--muted);font-size:.85rem;line-height:1.5;margin:0}.recap-stats{display:flex;gap:8px;margin:0}.recap-stats>div{padding:6px 12px;border:1px solid var(--secondary-border);border-radius:10px;background:var(--bg-elevated);text-align:center}.recap-stats dt{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.recap-stats dd{margin:2px 0 0;font-weight:700;color:var(--text);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.recap-controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px}.recap-chips{display:flex;flex-wrap:wrap;gap:6px}.recap-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--secondary-border);border-radius:999px;background:transparent;color:var(--text);font:inherit;font-size:.78rem;text-transform:capitalize;cursor:pointer}.recap-chip:hover{border-color:var(--secondary)}.recap-chip--on{border-color:var(--title);background:rgba(252,183,0,.12);color:var(--title)}.recap-chip__n{color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.recap-chip--on .recap-chip__n{color:inherit}.recap-switch{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:.82rem;cursor:pointer}.recap-switch input{accent-color:var(--title)}.recap-summarise{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border:1px solid var(--secondary-border);border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:.82rem;cursor:pointer}.recap-summarise--game{margin-top:8px;padding:2px 10px;font-size:.76rem}.recap-summarise--on,.recap-summarise:hover{color:var(--title);border-color:var(--title)}.recap-colheads,.recap-game__cols{display:grid;grid-template-columns:var(--recap-cols);grid-gap:0 18px;gap:0 18px}.recap-colheads{position:-webkit-sticky;position:sticky;top:0;z-index:1;padding:8px 16px;border-bottom:1px solid var(--line);background:var(--bg);color:var(--muted);font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.09em}.recap-games{display:flex;flex-direction:column;gap:12px}.recap-game{border:1px solid var(--secondary-border);border-radius:var(--radius);background:var(--bg-elevated);overflow:hidden}.recap-game__head{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--secondary-border)}.recap-game__icon{width:38px;height:38px;flex:none;border-radius:8px;object-fit:cover}.recap-game__icon--text{display:grid;place-items:center;background:var(--secondary-bg);color:var(--muted);font-size:.8rem}.recap-game__id{min-width:0;flex:1 1}.recap-game__line{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px}.recap-game__champ{font-weight:700;color:var(--text)}.recap-game__kda{color:var(--text);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:.88rem}.recap-game__meta{margin-top:2px;color:var(--muted);font-size:.78rem}.recap-result{padding:1px 8px;border-radius:999px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.recap-result--win{background:rgba(111,125,255,.16);color:var(--secondary-hover)}.recap-result--loss{background:rgba(255,70,85,.14);color:var(--cta)}.recap-game__score{display:flex;align-items:baseline;gap:6px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.recap-game__grade{color:var(--title);font-weight:800;font-size:1.05rem}.recap-game__num{color:var(--muted);font-size:.82rem}.recap-game__open{flex:none;padding:5px 10px;border:1px solid var(--secondary-border);border-radius:8px;background:transparent;color:var(--muted);font:inherit;font-size:.78rem;cursor:pointer}.recap-game__open:hover{border-color:var(--title);color:var(--title)}.recap-game__cols{padding:12px 16px 14px}.recap-game--pending .recap-game__head{border-bottom:0}.recap-game__review{color:var(--title);border-color:var(--title)}.recap-game__reviewing{color:var(--title)}.recap-game__reviewing,.recap-game__status{display:inline-flex;align-items:center;gap:8px;flex:none;font-size:.8rem}.recap-game__status{color:var(--muted)}.recap-game__loading{margin:0;padding:12px 16px}@media (max-width:640px){.recap-game__reviewing{flex:1 1 100%}}.recap-col{min-width:0}.recap-col+.recap-col{border-left:1px solid rgba(139,149,171,.14);padding-left:18px}.recap-col__label{display:none;margin:0 0 6px;color:var(--muted);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.09em}.recap-col--next .recap-point{border-left:2px solid var(--title);padding-left:10px}.recap-col--strengths .recap-point__body{color:var(--muted)}.recap-points{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.recap-point{font-size:.86rem;line-height:1.55;color:var(--text)}.recap-point__title{margin:0 0 2px;font-weight:700}.recap-point__body--heading p{margin:0}.recap-point__body p,.recap-point__body ul{margin:0 0 4px}.recap-point__body ul{padding-left:1.1rem}.recap-point__body strong{color:var(--title)}.recap-col--strengths .recap-point__body strong{color:var(--text)}.recap-cat{display:inline-block;margin-bottom:3px;color:var(--muted);font-size:.66rem;font-weight:600;text-transform:uppercase;letter-spacing:.09em}.recap-point__meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-bottom:3px}.recap-point__meta .recap-cat{margin-bottom:0}.recap-sev{padding:0 6px;border:1px solid;border-radius:999px;font-size:.66rem;font-weight:600;line-height:1.5;letter-spacing:.04em;cursor:help}.recap-sev--high{color:#ff8a8a;border-color:rgba(255,92,92,.45);background:rgba(255,92,92,.12)}.recap-sev--medium{color:#f8c16b;border-color:rgba(245,166,35,.4);background:rgba(245,166,35,.1)}.recap-sev--low{color:#cbd5e1;border-color:rgba(148,163,184,.35);background:rgba(148,163,184,.08)}.recap-times{color:var(--muted);font-size:.72rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.recap-col--mistakes .recap-point--high{border-left:2px solid #ff5c5c;padding-left:10px}.recap-col--mistakes .recap-point--low .recap-point__body{color:var(--muted)}.recap-stats__high dd{color:#ff8a8a}.recap-switches{display:flex;flex-wrap:wrap;gap:8px 16px}.recap-none{padding:12px 0}.recap-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 16px;text-align:center;color:var(--text)}.recap-empty p{margin:0}.recap-spinner{color:var(--title);font-size:1.4rem}@media (max-width:820px){.recap-colheads{display:none}.recap-game__cols{grid-template-columns:minmax(0,1fr);gap:14px}.recap-col+.recap-col{border-left:0;padding-left:0;padding-top:12px;border-top:1px solid rgba(139,149,171,.14)}.recap-col__label{display:block}.recap-game__head{flex-wrap:wrap}.recap-game__id{flex-basis:calc(100% - 50px)}.recap-game__score{margin-left:50px}.recap-game__open{margin-left:auto}}.recap-card--pending .game-card{height:100%}.recap-card__foot{display:flex;align-items:center;gap:8px;margin-top:auto;font-size:.85rem}.recap-more{align-self:center;padding:8px 18px;border:1px solid var(--secondary-border);border-radius:999px;background:var(--bg-elevated);color:var(--title);font:inherit;font-size:.85rem;cursor:pointer}.recap-more:hover{border-color:var(--title)}