STA (Stability) & BAT (Aim/Battle)
{{ detail_item('Last 30 Rating (่ฟ30ๅบ)', features['sta_last_30_rating'], 'sta_last_30_rating') }}
{{ detail_item('Win Rating (่ๅฑ)', features['sta_win_rating'], 'sta_win_rating') }}
{{ detail_item('Loss Rating (่ดฅๅฑ)', features['sta_loss_rating'], 'sta_loss_rating') }}
{{ detail_item('Volatility (ๆณขๅจ)', features['sta_rating_volatility'], 'sta_rating_volatility') }}
{{ detail_item('Time Corr (่ๅ)', features['sta_time_rating_corr'], 'sta_time_rating_corr') }}
{{ detail_item('High Elo KD Diff (้ซๅๆๅ)', features['bat_kd_diff_high_elo'], 'bat_kd_diff_high_elo') }}
{{ detail_item('Duel Win% (ๅฏนๆช่็)', features['bat_avg_duel_win_rate'], 'bat_avg_duel_win_rate', '{:.1%}') }}
HPS (Clutch/Pressure) & PTL (Pistol)
{{ detail_item('Avg 1v1 (ๅบๅ1v1)', features['hps_clutch_win_rate_1v1'], 'hps_clutch_win_rate_1v1', '{:.2f}') }}
{{ detail_item('Avg 1v3+ (ๅบๅ1v3+)', features['hps_clutch_win_rate_1v3_plus'], 'hps_clutch_win_rate_1v3_plus', '{:.2f}') }}
{{ detail_item('Match Pt Win% (่ต็น่็)', features['hps_match_point_win_rate'], 'hps_match_point_win_rate', '{:.1%}') }}
{{ detail_item('Pressure Entry (้้ฃ้ฆๆ)', features['hps_pressure_entry_rate'], 'hps_pressure_entry_rate', '{:.1%}') }}
{{ detail_item('Comeback KD (็ฟป็KD)', features['hps_comeback_kd_diff'], 'hps_comeback_kd_diff') }}
{{ detail_item('Loss Streak KD (่ฟ่ดฅKD)', features['hps_losing_streak_kd_diff'], 'hps_losing_streak_kd_diff') }}
{{ detail_item('Pistol Kills (ๆๆชๅปๆ)', features['ptl_pistol_kills'], 'ptl_pistol_kills') }}
{{ detail_item('Pistol Win% (ๆๆช่็)', features['ptl_pistol_win_rate'], 'ptl_pistol_win_rate', '{:.1%}') }}
{{ detail_item('Pistol KD (ๆๆชKD)', features['ptl_pistol_kd'], 'ptl_pistol_kd') }}
{{ detail_item('Pistol Util Eff (ๆๆช้ๅ
ท)', features['ptl_pistol_util_efficiency'], 'ptl_pistol_util_efficiency', '{:.1%}') }}
UTIL (Utility Usage)
{{ detail_item('Usage Rate (้ๅ
ท้ข็)', features['util_usage_rate'], 'util_usage_rate') }}
{{ detail_item('Nade Dmg (้ท็ซไผค)', features['util_avg_nade_dmg'], 'util_avg_nade_dmg', '{:.1f}') }}
{{ detail_item('Flash Time (่ด็ฒๆถ้ด)', features['util_avg_flash_time'], 'util_avg_flash_time', '{:.2f}s') }}
{{ detail_item('Flash Enemy (่ด็ฒไบบๆฐ)', features['util_avg_flash_enemy'], 'util_avg_flash_enemy') }}
SPECIAL (Clutch & Multi)
{% set matches = l2_stats.get('matches', 0) or 1 %}
{% set rounds = l2_stats.get('total_rounds', 0) or 1 %}
{% set c1 = l2_stats.get('c1', 0) or 0 %}
{% set a1 = l2_stats.get('att1', 0) or 0 %}
{{ detail_item('1v1 Win% (1v1่็)', c1 / a1 if a1 > 0 else 0, 'clutch_rate_1v1', '{:.1%}', count_label=c1 ~ '/' ~ a1) }}
{% set c2 = l2_stats.get('c2', 0) or 0 %}
{% set a2 = l2_stats.get('att2', 0) or 0 %}
{{ detail_item('1v2 Win% (1v2่็)', c2 / a2 if a2 > 0 else 0, 'clutch_rate_1v2', '{:.1%}', count_label=c2 ~ '/' ~ a2) }}
{% set c3 = l2_stats.get('c3', 0) or 0 %}
{% set a3 = l2_stats.get('att3', 0) or 0 %}
{{ detail_item('1v3 Win% (1v3่็)', c3 / a3 if a3 > 0 else 0, 'clutch_rate_1v3', '{:.1%}', count_label=c3 ~ '/' ~ a3) }}
{% set c4 = l2_stats.get('c4', 0) or 0 %}
{% set a4 = l2_stats.get('att4', 0) or 0 %}
{{ detail_item('1v4 Win% (1v4่็)', c4 / a4 if a4 > 0 else 0, 'clutch_rate_1v4', '{:.1%}', count_label=c4 ~ '/' ~ a4) }}
{% set c5 = l2_stats.get('c5', 0) or 0 %}
{% set a5 = l2_stats.get('att5', 0) or 0 %}
{{ detail_item('1v5 Win% (1v5่็)', c5 / a5 if a5 > 0 else 0, 'clutch_rate_1v5', '{:.1%}', count_label=c5 ~ '/' ~ a5) }}
{% set mk_count = (l2_stats.get('k2', 0) or 0) + (l2_stats.get('k3', 0) or 0) + (l2_stats.get('k4', 0) or 0) + (l2_stats.get('k5', 0) or 0) %}
{% set ma_count = (l2_stats.get('a2', 0) or 0) + (l2_stats.get('a3', 0) or 0) + (l2_stats.get('a4', 0) or 0) + (l2_stats.get('a5', 0) or 0) %}
{{ detail_item('Multi-K Rate (ๅคๆ็)', mk_count / rounds, 'total_multikill_rate', '{:.1%}', count_label=mk_count) }}
{{ detail_item('Multi-A Rate (ๅคๅฉ็)', ma_count / rounds, 'total_multiassist_rate', '{:.1%}', count_label=ma_count) }}
SIDE (T/CT Preference)
{% macro vs_item_val(label, t_val, ct_val, format_str='{:.2f}') %}
{% set diff = ct_val - t_val %}
{# Dynamic Sizing #}
{% set t_size = 'text-2xl' if t_val > ct_val else 'text-sm text-gray-500 dark:text-gray-400' %}
{% set ct_size = 'text-2xl' if ct_val > t_val else 'text-sm text-gray-500 dark:text-gray-400' %}
{% if t_val == ct_val %}
{% set t_size = 'text-lg' %}
{% set ct_size = 'text-lg' %}
{% endif %}
{{ label }}
{% if diff|abs > 0.001 %}
{% if diff > 0 %}CT +{{ format_str.format(diff) }}
{% else %}T +{{ format_str.format(diff|abs) }}{% endif %}
{% endif %}
T-Side
{{ format_str.format(t_val) }}
CT-Side
{{ format_str.format(ct_val) }}
{% set total = t_val + ct_val %}
{% if total > 0 %}
{% set t_pct = (t_val / total) * 100 %}
{% else %}
{% endif %}
{% endmacro %}
{% macro vs_item(label, t_key, ct_key, format_str='{:.2f}') %}
{{ vs_item_val(label, features[t_key] or 0, features[ct_key] or 0, format_str) }}
{% endmacro %}
{{ vs_item('Rating (Rating/KD)', 'side_rating_t', 'side_rating_ct') }}
{{ vs_item('KD Ratio', 'side_kd_t', 'side_kd_ct') }}
{{ vs_item('Win Rate (่็)', 'side_win_rate_t', 'side_win_rate_ct', '{:.1%}') }}
{{ vs_item('First Kill Rate (้ฆๆ็)', 'side_first_kill_rate_t', 'side_first_kill_rate_ct', '{:.1%}') }}
{{ vs_item('First Death Rate (้ฆๆญป็)', 'side_first_death_rate_t', 'side_first_death_rate_ct', '{:.1%}') }}
{{ vs_item('KAST (่ดก็ฎ็)', 'side_kast_t', 'side_kast_ct', '{:.1%}') }}
{{ vs_item('RWS (Round Win Share)', 'side_rws_t', 'side_rws_ct') }}
{{ vs_item('Headshot Rate (็ๅคด็)', 'side_headshot_rate_t', 'side_headshot_rate_ct', '{:.1%}') }}
{# New Comparisons #}
{% set t_rounds = side_stats.get('T', {}).get('rounds', 0) or 1 %}
{% set ct_rounds = side_stats.get('CT', {}).get('rounds', 0) or 1 %}
{% set t_clutch = (side_stats.get('T', {}).get('total_clutch', 0) or 0) / t_rounds %}
{% set ct_clutch = (side_stats.get('CT', {}).get('total_clutch', 0) or 0) / ct_rounds %}
{{ vs_item_val('Clutch Win Rate (ๆฎๅฑ็)', t_clutch, ct_clutch, '{:.1%}') }}
{% set t_mk = (side_stats.get('T', {}).get('total_multikill', 0) or 0) / t_rounds %}
{% set ct_mk = (side_stats.get('CT', {}).get('total_multikill', 0) or 0) / ct_rounds %}
{{ vs_item_val('Multi-Kill Rate (ๅคๆ็)', t_mk, ct_mk, '{:.1%}') }}
{% set t_ma = (side_stats.get('T', {}).get('total_multiassist', 0) or 0) / t_rounds %}
{% set ct_ma = (side_stats.get('CT', {}).get('total_multiassist', 0) or 0) / ct_rounds %}
{{ vs_item_val('Multi-Assist Rate (ๅคๅฉๆป)', t_ma, ct_ma, '{:.1%}') }}
๐ฅ ็ปๆไธๅๅฑ่กจ็ฐ (Party & Stratification)
Party Size Performance (็ปๆ่กจ็ฐ)
{{ detail_item('Solo Win% (ๅๆ่็)', features['party_1_win_rate'], 'party_1_win_rate', '{:.1%}') }}
{{ detail_item('Solo Rating (ๅๆๅ)', features['party_1_rating'], 'party_1_rating') }}
{{ detail_item('Solo ADR (ๅๆไผค)', features['party_1_adr'], 'party_1_adr', '{:.1f}') }}
{{ detail_item('Duo Win% (ๅๆ่็)', features['party_2_win_rate'], 'party_2_win_rate', '{:.1%}') }}
{{ detail_item('Duo Rating (ๅๆๅ)', features['party_2_rating'], 'party_2_rating') }}
{{ detail_item('Duo ADR (ๅๆไผค)', features['party_2_adr'], 'party_2_adr', '{:.1f}') }}
{{ detail_item('Trio Win% (ไธๆ่็)', features['party_3_win_rate'], 'party_3_win_rate', '{:.1%}') }}
{{ detail_item('Trio Rating (ไธๆๅ)', features['party_3_rating'], 'party_3_rating') }}
{{ detail_item('Trio ADR (ไธๆไผค)', features['party_3_adr'], 'party_3_adr', '{:.1f}') }}
{{ detail_item('Quad Win% (ๅๆ่็)', features['party_4_win_rate'], 'party_4_win_rate', '{:.1%}') }}
{{ detail_item('Quad Rating (ๅๆๅ)', features['party_4_rating'], 'party_4_rating') }}
{{ detail_item('Quad ADR (ๅๆไผค)', features['party_4_adr'], 'party_4_adr', '{:.1f}') }}
{{ detail_item('Full Win% (ไบๆ่็)', features['party_5_win_rate'], 'party_5_win_rate', '{:.1%}') }}
{{ detail_item('Full Rating (ไบๆๅ)', features['party_5_rating'], 'party_5_rating') }}
{{ detail_item('Full ADR (ไบๆไผค)', features['party_5_adr'], 'party_5_adr', '{:.1f}') }}
Performance Tiers (่กจ็ฐๅๅฑ)
{{ detail_item('Carry Rate (>1.5)', features['rating_dist_carry_rate'], 'rating_dist_carry_rate', '{:.1%}') }}
{{ detail_item('Normal Rate (1.0-1.5)', features['rating_dist_normal_rate'], 'rating_dist_normal_rate', '{:.1%}') }}
{{ detail_item('Sacrifice Rate (0.6-1.0)', features['rating_dist_sacrifice_rate'], 'rating_dist_sacrifice_rate', '{:.1%}') }}
{{ detail_item('Sleeping Rate (<0.6)', features['rating_dist_sleeping_rate'], 'rating_dist_sleeping_rate', '{:.1%}') }}
Performance vs ELO (ไธๅๅๆฎต่กจ็ฐ)
{{ detail_item('<1200 Rating', features['elo_lt1200_rating'], 'elo_lt1200_rating') }}
{{ detail_item('1200-1400 Rating', features['elo_1200_1400_rating'], 'elo_1200_1400_rating') }}
{{ detail_item('1400-1600 Rating', features['elo_1400_1600_rating'], 'elo_1400_1600_rating') }}
{{ detail_item('1600-1800 Rating', features['elo_1600_1800_rating'], 'elo_1600_1800_rating') }}
{{ detail_item('1800-2000 Rating', features['elo_1800_2000_rating'], 'elo_1800_2000_rating') }}
{{ detail_item('>2000 Rating', features['elo_gt2000_rating'], 'elo_gt2000_rating') }}