diff --git a/src-tauri/crates/olm_core/src/champions.rs b/src-tauri/crates/olm_core/src/champions.rs
index 3bb2819b..6d0c5781 100644
--- a/src-tauri/crates/olm_core/src/champions.rs
+++ b/src-tauri/crates/olm_core/src/champions.rs
@@ -1604,6 +1604,8 @@ pub struct ChampionListEntry {
pub name: String,
pub tags: Vec,
pub image: String,
+ /// Patch meta tier (S/A/B/C/D). Defaults to "B" when absent.
+ pub meta_tier: Option,
}
/// Load the champion catalog from `assets/draft/champion-list.json`.
@@ -1636,6 +1638,11 @@ pub fn load_champion_catalog_from_path(path: &Path) -> Vec Vec Result Result, String> {
synergies_json: row.get(5)?,
image_tile_url: row.get(6)?,
image_splash_url: row.get(7)?,
+ meta_tier: crate::domain::champion::MetaTier::B,
})
})
.map_err(|e| format!("Failed to query champions: {}", e))?;
@@ -203,6 +205,7 @@ pub fn get_champion_by_id(conn: &Connection, id: i64) -> Result
{tip.champion ? (
-
+
{tip.champion.name}
+
+ {/* Meta tier badge */}
+ {tip.champion.meta_tier && (
+
+ {tip.champion.meta_tier}
+
+ )}
+
+ {/* Flex pick: show secondary roles if champion has multiple */}
+ {(() => {
+ const roleHints = tip.champion!.roleHints ?? [];
+ const secondaryRoles = roleHints.filter(
+ (r) => tip.sourceRole && r !== tip.sourceRole && ROLE_ORDER.includes(r as Role),
+ );
+ if (secondaryRoles.length > 0) {
+ return secondaryRoles.map((role) => (
+
+
+ {role}
+
+ ));
+ }
+ return null;
+ })()}
) : null}