.roster { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; margin-bottom: 36px; } .card { display: grid; grid-template-rows: auto 1fr; gap: 12px; } .card[data-selected="false"] { opacity: 0.72; } .player { height: 24px; font-size: var(--fs-1); line-height: 2; color: var(--ui-select); animation: bob 1s steps(2, jump-none) infinite; } @keyframes bob { 50% { transform: translateY(6px); } } .portrait { display: grid; place-items: center; width: 96px; height: 96px; margin-bottom: 24px; color: var(--ink-gold); background: var(--ink-ink); box-shadow: inset 0 -12px 0 var(--ink-shadow); } .class { margin: 0 0 12px; } .pitch { margin: 0 0 24px; font-size: var(--fs-2); line-height: 1.5; } .stats { display: grid; gap: 6px; margin: 0 0 24px; } .stat { display: flex; justify-content: space-between; gap: 12px; padding-bottom: 6px; font-size: var(--fs-1); line-height: 2; border-bottom: 3px dotted currentColor; } .stat dt { text-transform: uppercase; letter-spacing: 0.08em; } .stat dd { margin: 0; } .special { margin: 0 0 24px; font-size: var(--fs-1); line-height: 2; } .special span { text-transform: uppercase; } .npc { max-width: 768px; } @media (max-width: 860px) { .roster { grid-template-columns: 1fr; gap: 24px; } .card[data-selected="true"] { transform: none; } } @media (max-width: 720px) { .pitch { font-size: var(--fs-1); line-height: 2; } .portrait { width: 72px; height: 72px; } } @media (prefers-reduced-motion: reduce) { .card { transition: none; } .player { animation: none; } }