<?php
session_start();
include 'db.php';

$public_celebration_mode = (isset($_GET['celebrate']) && $_GET['celebrate'] == '1');

// ✅ تقييد صفحة الكروت على الأدمن فقط، مع السماح بصفحة الاحتفال العامة عبر الباركود
if (!$public_celebration_mode && !isset($_SESSION['admin_id'])) {
    header("Location: admin_login.php");
    exit();
}

mysqli_set_charset($conn, "utf8mb4");

// دالة لتأمين المخرجات
function esc($s) {
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

// دالة لطباعة الدرجة بشكل مرتب أو -
function fmt_grade($v) {
    if ($v === null) return '-';
    if ($v === '' || $v == 0) return '-';
    $num = number_format((float)$v, 2, '.', '');
    $num = rtrim(rtrim($num, '0'), '.');
    return $num;
}

// دالة لطباعة الدرجة برقم عشري ثابت (مرتبـتان عشريتان)
function fmt_grade_fixed($v) {
    if ($v === null) return '-';
    if ($v === '' || $v == 0) return '-';
    return number_format((float)$v, 2, '.', '');
}

// ✅ دالة لطباعة درجة الامتحان الأخير مع إظهار الصفر إذا كان مخزوناً فعلياً
function fmt_grade_keep_zero($v) {
    if ($v === null || $v === '') return '-';
    $num = number_format((float)$v, 2, '.', '');
    $num = rtrim(rtrim($num, '0'), '.');
    return ($num === '-0') ? '0' : $num;
}

// ✅ رابط الملف الحالي بشكل كامل لاستخدامه داخل الباركود
function current_script_url(){
    $is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || (isset($_SERVER['SERVER_PORT']) && (int)$_SERVER['SERVER_PORT'] === 443);
    $scheme   = $is_https ? 'https' : 'http';
    $host     = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost';
    $script   = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
    return $scheme.'://'.$host.$script;
}

// ✅ توكن بسيط لحماية رابط الاحتفال
function make_exempt_token($student_id){
    return substr(sha1('sigma_exempt_success_2026|'.(int)$student_id.'|ali'), 0, 24);
}

// ✅ رابط صفحة الاحتفال للطالب المعفى
function build_exempt_celebration_url($student_id){
    return current_script_url().'?celebrate=1&student_id='.(int)$student_id.'&token='.make_exempt_token($student_id);
}

// ✅ رابط صورة QR جاهزة
function build_qr_image_url($target_url){
    return 'https://api.qrserver.com/v1/create-qr-code/?size=1000x1000&margin=30&data='.rawurlencode($target_url);
}

// ✅ دالة لإرجاع كلاس اللون حسب الدرجة
function grade_class($v) {
    if ($v === null || $v === '' || $v == 0) return '';
    $g = floatval($v);
    if ($g < 50) {
        return 'grade-red';
    } elseif ($g < 60) {
        return 'grade-yellow';
    } elseif ($g < 80) {
        return 'grade-blue';
    } else {
        return 'grade-green';
    }
}

// ✅ دالة لأخذ أعلى 3 درجات
function top3_avg_admin($arr) {
    $clean = array();
    foreach ($arr as $v) {
        $clean[] = floatval($v);
    }
    rsort($clean);
    $top3 = array_slice($clean, 0, 3);
    $sum = array_sum($top3);
    $count = count($top3) > 0 ? count($top3) : 1;
    return round($sum / $count, 2);
}

// ✅ دالة تقريب نصف فأعلى
function round_half_up_int($v) {
    $v = (float)$v;
    $i = floor($v);
    return ($v - $i >= 0.5) ? $i + 1 : $i;
}

// ✅ (إضافة) إذا كانت هناك درجتان فقط (قيم > 0) احسب متوسطهما على 2
function avg_if_two_only($arr) {
    $real = array();
    foreach ($arr as $v) {
        $v = (float)$v;
        if ($v > 0) $real[] = $v;
    }
    if (count($real) == 2) {
        return round(array_sum($real) / 2, 2);
    }
    return null;
}

// ✅ (إضافة) إذا كانت هناك درجة واحدة فقط (قيم > 0) احسبها ÷ 2
function avg_if_one_only($arr) {
    $real = array();
    foreach ($arr as $v) {
        $v = (float)$v;
        if ($v > 0) $real[] = $v;
    }
    if (count($real) == 1) {
        return round($real[0] / 2, 2);
    }
    return null;
}


// ✅ دالة توحيد اسم المرحلة (للمقارنات)
function norm_stage($s){
    $s = trim($s);
    $s = str_replace(array('أ','إ','آ','ٱ'), 'ا', $s);
    $s = str_replace(array('ى'), 'ي', $s);
    $s = str_replace(array('ـ'), '', $s);
    $s = str_replace(array('َ','ً','ُ','ٌ','ِ','ٍ','ْ','ّ'), '', $s);
    $s = str_replace(array('ال',' '), array('',''), $s);
    return $s;
}


// ✅ الصف الثالث والسادس غير مشمولين بالإعفاء العام ولا بالقرب من الإعفاء
function is_exemption_stage_allowed($stage){
    $raw = trim((string)$stage);
    if ($raw === '') return true;

    // نطبّع الاسم هنا بشكل مستقل عن norm_stage لأن حذف "ال" العام يحوّل
    // "الثالث" إلى "ثث" ويمنع اكتشاف الصف الثالث بشكل صحيح.
    $raw = str_replace(array('أ','إ','آ','ٱ'), 'ا', $raw);
    $raw = str_replace(array('ى'), 'ي', $raw);
    $raw = str_replace(array('ـ'), '', $raw);
    $raw = str_replace(array('َ','ً','ُ','ٌ','ِ','ٍ','ْ','ّ'), '', $raw);
    $raw = str_replace(array(' '), array(''), $raw);

    if (strpos($raw, 'الثالث') !== false || strpos($raw, 'ثالث') !== false) return false;
    if (strpos($raw, 'السادس') !== false || strpos($raw, 'سادس') !== false) return false;
    if (strpos($raw, '3') !== false || strpos($raw, '٣') !== false) return false;
    if (strpos($raw, '6') !== false || strpos($raw, '٦') !== false) return false;

    return true;
}


// ✅ فلتر الطلبة غير المعفوين: كل من ليس (اعفاء عام) مع استبعاد الثالث المتوسط والسادس العلمي
function is_non_exempt_filter_match($summary){
    if (!isset($summary['exemption_allowed']) || !$summary['exemption_allowed']) {
        return false;
    }
    return !isset($summary['is_exempt']) || !$summary['is_exempt'];
}

// ✅ دالة توحيد اسم المادة (للمقارنات)
function norm_subject($s){
    $s = trim($s);
    $s = str_replace(array('أ','إ','آ','ٱ'), 'ا', $s);
    $s = str_replace(array('ى'), 'ي', $s);
    $s = str_replace(array('ة'), 'ه', $s);
    $s = str_replace(array('ـ'), '', $s);
    $s = str_replace(array('َ','ً','ُ','ٌ','ِ','ٍ','ْ','ّ'), '', $s);
    $s = str_replace(array('ال',' '), array('',''), $s);
    $s = strtolower($s);
    return $s;
}

// ✅ تفعيل منطق الفصل الأول الخاص (فقط للمواد/الصفوف المحددة)
function use_special_sem1_rule($stage, $subject){

    $ns  = norm_stage($stage);
    $sub = norm_subject($subject);

    // ✅ الصفوف: أول متوسط، ثاني متوسط، رابع علمي، خامس علمي، (إضافة: سادس علمي)
    $allowedStages = array('اولمتوسط','ثانيمتوسط','رابععلمي','خامسعلمي','سادسعلمي');

    // ✅ المواد المشتركة (للسادس العلمي أيضاً): الإسلامية + العربية + الإنكليزية + الفرنسية
    $allowedSubjectsCommon = array(
        'تربيهاسلاميه',
        'لغهانكليزيه',
        'لغهعربيه','لغعربيه',
        'لغهفرنسيه','لغفرنسيه'
    );

    // ✅ باقي الصفوف المحددة (أول/ثاني/رابع/خامس): نفس المواد + الكردي (كما كان)
    $allowedSubjectsWithKurdish = array_merge($allowedSubjectsCommon, array(
        'لغهكرديه','لغكرديه'
    ));

    if (!in_array($ns, $allowedStages)) return false;

    // ✅ السادس العلمي: نفس المنطق لكن للمواد الأربعة فقط (بدون الكردي)
    if ($ns === 'سادسعلمي') {
        return in_array($sub, $allowedSubjectsCommon);
    }

    // ✅ باقي الصفوف المحددة: تشمل الكردي
    return in_array($sub, $allowedSubjectsWithKurdish);
}

// ✅ تفعيل منطق الفصل الثاني الخاص:
// - أول متوسط + ثاني متوسط + رابع علمي + خامس علمي = أعلى درجة بين ش1ف2 و ش2ف2 فقط
// - سادس علمي (عربي/إنكليزي/فرنسي/إسلامية) = أعلى درجة بين ش1ف2 و ش2ف2 فقط
function use_special_sem2_month4_month5_only($stage, $subject){
    $ns  = norm_stage($stage);
    $sub = norm_subject($subject);

    $allowedStages = array('اولمتوسط','ثانيمتوسط','رابععلمي','خامسعلمي');
    $sixthSpecialSubjects = array(
        'تربيهاسلاميه',
        'لغهانكليزيه',
        'لغهعربيه','لغعربيه',
        'لغهفرنسيه','لغفرنسيه'
    );

    if (in_array($ns, $allowedStages)) return true;

    if ($ns === 'سادسعلمي') {
        return in_array($sub, $sixthSpecialSubjects);
    }

    return false;
}

// ✅ سادس علمي لباقي المواد: أعلى درجة بين ش1ف2 و ش2ف2 و اليومي ف2 مع إهمال ش3ف2
function use_special_sem2_sixth_month4_month5_daily2($stage, $subject){
    $ns  = norm_stage($stage);
    $sub = norm_subject($subject);

    if ($ns !== 'سادسعلمي') return false;

    $sixthSpecialSubjects = array(
        'تربيهاسلاميه',
        'لغهانكليزيه',
        'لغهعربيه','لغعربيه',
        'لغهفرنسيه','لغفرنسيه'
    );

    return !in_array($sub, $sixthSpecialSubjects);
}

// ✅ إرجاع أعلى درجة موجبة من القيم المعطاة، وإذا لم توجد درجات يرجع 0
function max_positive_grade($arr){
    $max = 0;
    foreach ($arr as $v) {
        $v = (float)$v;
        if ($v > $max) $max = $v;
    }
    return $max;
}

// ✅ حساب فصل1 الخاص: إذا كان اليومي1 = 0 أو فارغ => نحذف أقل درجة من (ش1/ش2/ش3) ثم نجمع الباقي ÷ 2
//    ترجع: [avg2, min_key] حيث min_key واحد من: month1/month2/month3
function sem1_best2_months($m1, $m2, $m3){
    $vals = array(
        'month1' => (float)$m1,
        'month2' => (float)$m2,
        'month3' => (float)$m3
    );
    $min_key = null;
    $min_val = null;
    foreach ($vals as $k => $v) {
        if ($min_val === null || $v < $min_val) {
            $min_val = $v;
            $min_key = $k;
        }
    }
    $sum2 = ((float)$m1 + (float)$m2 + (float)$m3) - (float)$min_val;
    $avg2 = round($sum2 / 2, 2);
    return array($avg2, $min_key);
}


// ✅ ترتيب المواد كما تظهر في الكارت حسب المرحلة
function get_card_subject_order($stage = ''){
    $ns = norm_stage($stage);

    if ($ns === 'اولمتوسط' || $ns === 'ثانيمتوسط') {
        return array(
            'التربية الاسلامية',
            'اللغة العربية',
            'اللغة الانكليزية',
            'الرياضيات',
            'الاحياء',
            'الكيمياء',
            'الفيزياء',
            'الاجتماعيات',
            'الحاسوب',
            'الاخلاقية',
            'اللغة الفرنسية',
            'التربية الفنية',
            'التربية الرياضية'
        );
    }

    if ($ns === 'ثالثمتوسط') {
        return array(
            'التربية الاسلامية',
            'اللغة العربية',
            'اللغة الانكليزية',
            'الرياضيات',
            'الاحياء',
            'الكيمياء',
            'الفيزياء',
            'الاجتماعيات',
            'اللغة الفرنسية',
            'التربية الفنية',
            'التربية الرياضية'
        );
    }

    if ($ns === 'رابععلمي') {
        return array(
            'التربية الاسلامية',
            'اللغة العربية',
            'اللغة الانكليزية',
            'الرياضيات',
            'الاحياء',
            'الكيمياء',
            'الفيزياء',
            'الحاسوب',
            'اللغة الكردية',
            'اللغة الفرنسية',
            'جرائم حزب البعث',
            'التربية الفنية',
            'التربية الرياضية'
        );
    }

    if ($ns === 'خامسعلمي') {
        return array(
            'التربية الاسلامية',
            'اللغة العربية',
            'اللغة الانكليزية',
            'الرياضيات',
            'الاحياء',
            'الكيمياء',
            'الفيزياء',
            'الحاسوب',
            'اللغة الكردية',
            'اللغة الفرنسية',
            'التربية الفنية',
            'التربية الرياضية'
        );
    }

    if ($ns === 'سادسعلمي') {
        return array(
            'التربية الاسلامية',
            'اللغة العربية',
            'اللغة الانكليزية',
            'الرياضيات',
            'الاحياء',
            'الكيمياء',
            'الفيزياء',
            'اللغة الفرنسية',
            'التربية الفنية',
            'التربية الرياضية'
        );
    }

    return array(
        'التربية الاسلامية',
        'اللغة العربية',
        'اللغة الانكليزية',
        'الرياضيات',
        'الاحياء',
        'الكيمياء',
        'الفيزياء',
        'الاجتماعيات',
        'الحاسوب',
        'اللغة الفرنسية',
        'اللغة الكردية'
    );
}

// ✅ البحث عن اسم المادة داخل الماب مع مراعاة التطبيع حتى لا تنفصل الدرجة عن مادتها
function find_subject_key_in_map($grades_map, $wanted_subject, $used_keys = array()){
    if (isset($grades_map[$wanted_subject]) && !isset($used_keys[$wanted_subject])) {
        return $wanted_subject;
    }

    $wanted_norm = norm_subject($wanted_subject);
    foreach ($grades_map as $existing_subject => $row) {
        if (isset($used_keys[$existing_subject])) continue;
        if (norm_subject($existing_subject) === $wanted_norm) {
            return $existing_subject;
        }
    }

    return null;
}

// ✅ جلب درجات الطالب وترتيب المواد بنفس ترتيب الكارت حسب المرحلة
function get_student_ordered_grades($conn, $stu_id, $stage = ''){
    $grades_map = array();
    $g_sql = "SELECT * FROM grades               WHERE student_id = ".(int)$stu_id."              ORDER BY subject, saved_at DESC, id DESC";
    $g_q = mysqli_query($conn, $g_sql);
    if ($g_q) {
        while ($g = mysqli_fetch_assoc($g_q)) {
            $subj = isset($g['subject']) && $g['subject'] != '' ? $g['subject'] : 'غير محدد';
            if (!isset($grades_map[$subj])) {
                $grades_map[$subj] = $g;
            }
        }
    }

    if (count($grades_map) == 0) {
        return array();
    }

    $ordered_grades = array();
    $used_keys = array();
    $desired_order = get_card_subject_order($stage);

    foreach ($desired_order as $subjName) {
        $matched_key = find_subject_key_in_map($grades_map, $subjName, $used_keys);
        if ($matched_key !== null) {
            $ordered_grades[$matched_key] = $grades_map[$matched_key];
            $used_keys[$matched_key] = true;
        }
    }
    foreach ($grades_map as $subj => $g) {
        if (!isset($used_keys[$subj])) {
            $ordered_grades[$subj] = $g;
        }
    }

    return $ordered_grades;
}

// ✅ تجهيز بيانات التصدير إلى Excel بناءً على المعدل السنوي فقط
function build_student_annual_summary($conn, $stu){
    $ordered_grades = get_student_ordered_grades($conn, isset($stu['id']) ? (int)$stu['id'] : 0, isset($stu['stage']) ? $stu['stage'] : '');
    $annual_subjects = array();
    $annual_total = 0;
    $annual_count = 0;
    $annual_has_below75 = false;

    foreach ($ordered_grades as $subj => $g) {
        $m1  = isset($g['month1'])  ? (float)$g['month1']  : 0;
        $m2  = isset($g['month2'])  ? (float)$g['month2']  : 0;
        $m3  = isset($g['month3'])  ? (float)$g['month3']  : 0;
        $d1  = isset($g['daily1'])  ? (float)$g['daily1']  : 0;
        $mid = isset($g['midterm']) ? (float)$g['midterm'] : 0;
        $m4  = isset($g['month4'])  ? (float)$g['month4']  : 0;
        $m5  = isset($g['month5'])  ? (float)$g['month5']  : 0;
        $m6  = isset($g['month6'])  ? (float)$g['month6']  : 0;
        $d2  = isset($g['daily2'])  ? (float)$g['daily2']  : 0;

        $use_special_sem1 = use_special_sem1_rule($stu['stage'], $subj);
        if ($use_special_sem1 && $d1 <= 0) {
            $tmp = sem1_best2_months($m1, $m2, $m3);
            $sem1_calc = $tmp[0];
        } else {
            if ($d1 > 0) {
                $sem1_calc = top3_avg_admin(array($m1, $m2, $m3, $d1));
            } else {
                $sem1_calc = round(($m1 + $m2 + $m3) / 3, 2);
            }
        }

        $twoOnly1 = avg_if_two_only(array($m1, $m2, $m3, $d1));
        if ($twoOnly1 !== null) {
            $sem1_calc = $twoOnly1;
        }
        $sem1_calc = round_half_up_int($sem1_calc);

        if (use_special_sem2_month4_month5_only($stu['stage'], $subj)) {
            $sem2_calc = max_positive_grade(array($m4, $m5));
        } elseif (use_special_sem2_sixth_month4_month5_daily2($stu['stage'], $subj)) {
            $sem2_calc = max_positive_grade(array($m4, $m5, $d2));
        } else {
            $oneOnly2 = avg_if_one_only(array($m4, $m5, $m6, $d2));
            if ($oneOnly2 !== null) {
                $sem2_calc = $oneOnly2;
            } else {
                $twoOnly2 = avg_if_two_only(array($m4, $m5, $m6, $d2));
                if ($twoOnly2 !== null) {
                    $sem2_calc = $twoOnly2;
                } else {
                    $vals3 = array();
                    if ($m4 > 0) $vals3['month4'] = $m4;
                    if ($m5 > 0) $vals3['month5'] = $m5;
                    if ($m6 > 0) $vals3['month6'] = $m6;
                    if ($d2 > 0) $vals3['daily2'] = $d2;

                    if (count($vals3) == 3 && $d2 > 0) {
                        $min_val2 = null;
                        foreach ($vals3 as $v) {
                            if ($min_val2 === null || $v < $min_val2) {
                                $min_val2 = $v;
                            }
                        }
                        $sum3 = array_sum($vals3);
                        $sem2_calc = round(($sum3 - (float)$min_val2) / 2, 2);
                    } else {
                        if ($d2 > 0) {
                            $sem2_calc = top3_avg_admin(array($m4, $m5, $m6, $d2));
                        } else {
                            $sem2_calc = round(($m4 + $m5 + $m6) / 3, 2);
                        }
                    }
                }
            }
        }
        $sem2_calc = round_half_up_int($sem2_calc);

        $annual_calc = round_half_up_int(($sem1_calc + $sem2_calc + $mid) / 3);
        $annual_subjects[$subj] = $annual_calc;

        if ($annual_calc > 0) {
            $annual_total += $annual_calc;
            $annual_count++;
            if ($annual_calc < 75) {
                $annual_has_below75 = true;
            }
        }
    }

    $annual_overall = ($annual_count > 0) ? round($annual_total / $annual_count, 2) : 0;
    $avg_raw = ($annual_count > 0) ? ($annual_total / $annual_count) : 0;
    $exemption_allowed = is_exemption_stage_allowed(isset($stu['stage']) ? $stu['stage'] : '');
    $is_exempt = ($exemption_allowed && $annual_count > 0 && $avg_raw >= 85 && !$annual_has_below75);
    $is_near   = ($exemption_allowed && $annual_count > 0 && $avg_raw >= 85 &&  $annual_has_below75);

    return array(
        'ordered_grades'      => $ordered_grades,
        'annual_subjects'     => $annual_subjects,
        'annual_total'        => $annual_total,
        'annual_count'        => $annual_count,
        'annual_overall'      => $annual_overall,
        'annual_has_below75'  => $annual_has_below75,
        'exemption_allowed'   => $exemption_allowed,
        'is_exempt'           => $is_exempt,
        'is_near'             => $is_near
    );
}


// ✅ تجهيز بيانات التصدير إلى Excel بناءً على امتحان آخر السنة والنتيجة النهائية
function build_student_final_exports_summary($conn, $stu){
    $summary = build_student_annual_summary($conn, $stu);

    $final_exam_subjects   = array();
    $final_result_subjects = array();
    $final_exam_total      = 0;
    $final_exam_count      = 0;
    $final_result_total    = 0;
    $final_result_count    = 0;

    $is_exempt = isset($summary['is_exempt']) ? $summary['is_exempt'] : false;

    foreach ($summary['ordered_grades'] as $subj => $g) {
        $annual_calc = isset($summary['annual_subjects'][$subj]) ? $summary['annual_subjects'][$subj] : 0;

        $final_exam_raw = isset($g['final_exam']) ? $g['final_exam'] : '';
        $final_exam_display = '';
        $final_result_display = '';

        // ✅ امتحان أخير السنة يظهر للطلبة غير المعفيين فقط، مثل الكارت تماماً
        if (!$is_exempt) {
            if ($final_exam_raw !== null && $final_exam_raw !== '') {
                $final_exam_display = $final_exam_raw;
                $final_exam_total += (float)$final_exam_raw;
                $final_exam_count++;

                // ✅ نفس منطق الكارت: النتيجة النهائية = تقريب نصف فأعلى لمتوسط (امتحان آخر السنة + المعدل السنوي)
                $final_result_display = round_half_up_int(((float)$final_exam_raw + (float)$annual_calc) / 2);
            }
        } else {
            // ✅ طلبة الإعفاء يبقون كما هم: النتيجة النهائية = المعدل السنوي
            $final_result_display = $annual_calc;
        }

        $final_exam_subjects[$subj] = $final_exam_display;
        $final_result_subjects[$subj] = $final_result_display;

        if ($final_result_display !== '' && $final_result_display !== null) {
            $final_result_total += (float)$final_result_display;
            $final_result_count++;
        }
    }

    $summary['final_exam_subjects']   = $final_exam_subjects;
    $summary['final_result_subjects'] = $final_result_subjects;
    $summary['final_exam_total']      = $final_exam_total;
    $summary['final_exam_count']      = $final_exam_count;
    $summary['final_exam_overall']    = ($final_exam_count > 0) ? round($final_exam_total / $final_exam_count, 2) : 0;
    $summary['final_result_total']    = $final_result_total;
    $summary['final_result_count']    = $final_result_count;
    $summary['final_result_overall']  = ($final_result_count > 0) ? round($final_result_total / $final_result_count, 2) : 0;

    return $summary;
}

// ✅ دالة موحدة لتصدير Excel بنفس فكرة زر التصدير الأصلي مع تمييز طلبة الإعفاء باللون
function export_subject_metric_excel($conn, $students_q, $filter_stage, $filter_exemption, $metric){
    $export_rows = array();
    $subject_seen = array();
    $extra_subjects = array();
    $base_subjects = get_card_subject_order($filter_stage);

    $subjects_key = ($metric === 'final_exam') ? 'final_exam_subjects' : 'final_result_subjects';
    $total_key    = ($metric === 'final_exam') ? 'final_exam_total' : 'final_result_total';
    $overall_key  = ($metric === 'final_exam') ? 'final_exam_overall' : 'final_result_overall';

    $file_prefix  = ($metric === 'final_exam') ? 'student_final_exam' : 'student_final_results';

    if ($students_q) {
        while ($stu = mysqli_fetch_assoc($students_q)) {
            $summary = build_student_final_exports_summary($conn, $stu);

            $show_row = true;
            if ($filter_exemption === 'exempt') {
                $show_row = $summary['is_exempt'];
            } elseif ($filter_exemption === 'near') {
                $show_row = $summary['is_near'];
            } elseif ($filter_exemption === 'non_exempt') {
                $show_row = is_non_exempt_filter_match($summary);
            }

            if (!$show_row) continue;

            foreach ($summary[$subjects_key] as $subj => $val) {
                $subject_seen[$subj] = true;
                if (!in_array($subj, $base_subjects, true) && !in_array($subj, $extra_subjects, true)) {
                    $extra_subjects[] = $subj;
                }
            }

            $export_rows[] = array(
                'name'      => isset($stu['name']) ? $stu['name'] : '',
                'stage'     => isset($stu['stage']) ? $stu['stage'] : '',
                'class'     => isset($stu['class']) ? $stu['class'] : '',
                'subjects'  => $summary[$subjects_key],
                'total'     => $summary[$total_key],
                'overall'   => $summary[$overall_key],
                'is_exempt' => $summary['is_exempt']
            );
        }
    }

    $ordered_subjects = array();
    foreach ($base_subjects as $subj) {
        if (isset($subject_seen[$subj])) {
            $ordered_subjects[] = $subj;
        }
    }
    foreach ($extra_subjects as $subj) {
        if (isset($subject_seen[$subj])) {
            $ordered_subjects[] = $subj;
        }
    }

    header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
    header('Content-Disposition: attachment; filename='.$file_prefix.'_'.date('Y-m-d_H-i-s').'.xls');
    header('Pragma: no-cache');
    header('Expires: 0');

    echo "ï»¿";
    echo '<!DOCTYPE html><html lang="ar" dir="rtl"><head><meta charset="UTF-8">';
    echo '<style>';
    echo 'body{font-family:Tahoma,Arial,sans-serif;direction:rtl;}';
    echo 'table{border-collapse:collapse;width:100%;}';
    echo 'th,td{border:1px solid #000;padding:6px 8px;text-align:center;white-space:nowrap;font-weight:700;}';
    echo 'th{background:#dbe5f1;}';
    echo '.exempt-row td{background:#d9ead3 !important;}';
    echo '</style>';
    echo '</head><body>';
    echo '<table>';
    echo '<tr>';
    echo '<th>اسم الطالب</th>';
    echo '<th>المرحلة</th>';
    echo '<th>الشعبة</th>';
    foreach ($ordered_subjects as $subj) {
        echo '<th>'.esc($subj).'</th>';
    }
    echo '<th>المجموع</th>';
    echo '<th>المعدل العام</th>';
    echo '</tr>';

    if (count($export_rows) == 0) {
        echo '<tr><td colspan="'.(count($ordered_subjects) + 5).'">لا توجد بيانات للتصدير حسب الفلاتر الحالية.</td></tr>';
    } else {
        foreach ($export_rows as $row) {
            $row_class = $row['is_exempt'] ? ' class="exempt-row"' : '';
            echo '<tr'.$row_class.'>';
            echo '<td>'.esc($row['name']).'</td>';
            echo '<td>'.esc($row['stage']).'</td>';
            echo '<td>'.esc($row['class']).'</td>';

            foreach ($ordered_subjects as $subj) {
                $val = isset($row['subjects'][$subj]) ? $row['subjects'][$subj] : '';
                if ($metric === 'final_exam') {
                    echo '<td>'.($val === '' ? '' : esc(fmt_grade_keep_zero($val))).'</td>';
                } else {
                    echo '<td>'.($val === '' ? '' : esc(fmt_grade_keep_zero($val))).'</td>';
                }
            }

            echo '<td>'.($row['total'] > 0 ? esc(fmt_grade_keep_zero($row['total'])) : '').'</td>';
            echo '<td>'.($row['overall'] > 0 ? esc(fmt_grade($row['overall'])) : '').'</td>';
            echo '</tr>';
        }
    }

    echo '</table>';
    echo '</body></html>';
    exit;
}



/* =========================
   1) جلب الفلاتر من GET
   ========================= */
$filter_stage = isset($_GET['stage']) ? trim($_GET['stage']) : '';
$filter_class = isset($_GET['class']) ? trim($_GET['class']) : '';
$search_name  = isset($_GET['q']) ? trim($_GET['q']) : '';


$filter_exemption = isset($_GET['exemption']) ? trim($_GET['exemption']) : '';
/* =========================
   2) جلب قائمة المراحل
   ========================= */
$stages = array();
$stg_q = mysqli_query($conn, "SELECT DISTINCT stage FROM students ORDER BY stage");
if ($stg_q) {
    while ($row = mysqli_fetch_assoc($stg_q)) {
        $stages[] = $row['stage'];
    }
}

/* =========================
   3) جلب الطلبة حسب الفلاتر
   ========================= */
$where = " WHERE 1 ";
if ($filter_stage != '') {
    $stage_esc = mysqli_real_escape_string($conn, $filter_stage);
    $where .= " AND s.stage = '".$stage_esc."'";
}
if ($filter_class != '') {
    $class_esc = mysqli_real_escape_string($conn, $filter_class);
    $where .= " AND s.class = '".$class_esc."'";
}
if ($search_name != '') {
    $q_esc = mysqli_real_escape_string($conn, $search_name);
    $where .= " AND s.name LIKE '%".$q_esc."%'";
}

$sql_students = "SELECT s.* 
                 FROM students s 
                 $where
                 ORDER BY s.stage, s.class, s.name";

$students_q = mysqli_query($conn, $sql_students);

// ✅ تصدير الدرجات إلى Excel (المعدل السنوي لكل مادة + المجموع + المعدل العام)
if (isset($_GET['export_excel']) && $_GET['export_excel'] == '1') {
    $export_rows = array();
    $subject_seen = array();
    $extra_subjects = array();
    $base_subjects = get_card_subject_order($filter_stage);

    if ($students_q) {
        while ($stu = mysqli_fetch_assoc($students_q)) {
            $summary = build_student_annual_summary($conn, $stu);

            $show_row = true;
            if ($filter_exemption === 'exempt') {
                $show_row = $summary['is_exempt'];
            } elseif ($filter_exemption === 'near') {
                $show_row = $summary['is_near'];
            } elseif ($filter_exemption === 'non_exempt') {
                $show_row = is_non_exempt_filter_match($summary);
            }

            if (!$show_row) continue;

            foreach ($summary['annual_subjects'] as $subj => $val) {
                $subject_seen[$subj] = true;
                if (!in_array($subj, $base_subjects, true) && !in_array($subj, $extra_subjects, true)) {
                    $extra_subjects[] = $subj;
                }
            }

            $export_rows[] = array(
                'name'            => isset($stu['name']) ? $stu['name'] : '',
                'stage'           => isset($stu['stage']) ? $stu['stage'] : '',
                'class'           => isset($stu['class']) ? $stu['class'] : '',
                'annual_subjects' => $summary['annual_subjects'],
                'annual_total'    => $summary['annual_total'],
                'annual_overall'  => $summary['annual_overall'],
                'is_exempt'       => $summary['is_exempt']
            );
        }
    }

    $ordered_subjects = array();
    foreach ($base_subjects as $subj) {
        if (isset($subject_seen[$subj])) {
            $ordered_subjects[] = $subj;
        }
    }
    foreach ($extra_subjects as $subj) {
        if (isset($subject_seen[$subj])) {
            $ordered_subjects[] = $subj;
        }
    }

    header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
    header('Content-Disposition: attachment; filename=student_annual_averages_'.date('Y-m-d_H-i-s').'.xls');
    header('Pragma: no-cache');
    header('Expires: 0');

    echo "ï»¿";
    echo '<!DOCTYPE html><html lang="ar" dir="rtl"><head><meta charset="UTF-8">';
    echo '<style>';
    echo 'body{font-family:Tahoma,Arial,sans-serif;direction:rtl;}';
    echo 'table{border-collapse:collapse;width:100%;}';
    echo 'th,td{border:1px solid #000;padding:6px 8px;text-align:center;white-space:nowrap;font-weight:700;}';
    echo 'th{background:#dbe5f1;}';
    echo '.exempt-row td{background:#d9ead3 !important;}';
    echo '</style>';
    echo '</head><body>';
    echo '<table>';
    echo '<tr>';
    echo '<th>اسم الطالب</th>';
    echo '<th>المرحلة</th>';
    echo '<th>الشعبة</th>';
    foreach ($ordered_subjects as $subj) {
        echo '<th>'.esc($subj).'</th>';
    }
    echo '<th>المجموع</th>';
    echo '<th>المعدل العام</th>';
    echo '</tr>';

    if (count($export_rows) == 0) {
        echo '<tr><td colspan="'.(count($ordered_subjects) + 5).'">لا توجد بيانات للتصدير حسب الفلاتر الحالية.</td></tr>';
    } else {
        foreach ($export_rows as $row) {
            $row_class = $row['is_exempt'] ? ' class="exempt-row"' : '';
            echo '<tr'.$row_class.'>';
            echo '<td>'.esc($row['name']).'</td>';
            echo '<td>'.esc($row['stage']).'</td>';
            echo '<td>'.esc($row['class']).'</td>';

            foreach ($ordered_subjects as $subj) {
                $val = isset($row['annual_subjects'][$subj]) ? $row['annual_subjects'][$subj] : '';
                echo '<td>'.($val === '' ? '' : esc(fmt_grade($val))).'</td>';
            }

            echo '<td>'.($row['annual_total'] > 0 ? esc(fmt_grade($row['annual_total'])) : '').'</td>';
            echo '<td>'.($row['annual_overall'] > 0 ? esc(fmt_grade($row['annual_overall'])) : '').'</td>';
            echo '</tr>';
        }
    }

    echo '</table>';
    echo '</body></html>';
    exit;
}


// ✅ تصدير درجات امتحان أخير السنة إلى Excel بنفس فكرة زر التصدير الأصلي
if (isset($_GET['export_final_exam']) && $_GET['export_final_exam'] == '1') {
    export_subject_metric_excel($conn, $students_q, $filter_stage, $filter_exemption, 'final_exam');
}

// ✅ تصدير النتيجة النهائية إلى Excel بنفس فكرة زر التصدير الأصلي
if (isset($_GET['export_final_result']) && $_GET['export_final_result'] == '1') {
    export_subject_metric_excel($conn, $students_q, $filter_stage, $filter_exemption, 'final_result');
}


// ✅ صفحة الاحتفال العامة الخاصة بطلاب الإعفاء العام عند مسح الباركود
if ($public_celebration_mode) {
    $student_id = isset($_GET['student_id']) ? (int)$_GET['student_id'] : 0;
    $token      = isset($_GET['token']) ? trim($_GET['token']) : '';

    if ($student_id <= 0 || $token === '' || $token !== make_exempt_token($student_id)) {
        http_response_code(403);
        echo '<!DOCTYPE html><html lang="ar" dir="rtl"><head><meta charset="UTF-8"><title>رابط غير صالح</title></head><body style="font-family:Tajawal,Arial,sans-serif;background:#0f172a;color:#fff;display:flex;align-items:center;justify-content:center;min-height:100vh;"><div style="text-align:center;"><h1>الرابط غير صالح</h1><p>تعذر فتح صفحة الاحتفال.</p></div></body></html>';
        exit;
    }

    $stu_q = mysqli_query($conn, "SELECT * FROM students WHERE id = ".(int)$student_id." LIMIT 1");
    $stu   = ($stu_q && mysqli_num_rows($stu_q) > 0) ? mysqli_fetch_assoc($stu_q) : null;

    if (!$stu) {
        http_response_code(404);
        echo '<!DOCTYPE html><html lang="ar" dir="rtl"><head><meta charset="UTF-8"><title>غير موجود</title></head><body style="font-family:Tajawal,Arial,sans-serif;background:#0f172a;color:#fff;display:flex;align-items:center;justify-content:center;min-height:100vh;"><div style="text-align:center;"><h1>الطالب غير موجود</h1></div></body></html>';
        exit;
    }

    $summary = build_student_annual_summary($conn, $stu);
    if (!isset($summary['is_exempt']) || !$summary['is_exempt']) {
        http_response_code(403);
        echo '<!DOCTYPE html><html lang="ar" dir="rtl"><head><meta charset="UTF-8"><title>غير متاح</title></head><body style="font-family:Tajawal,Arial,sans-serif;background:#0f172a;color:#fff;display:flex;align-items:center;justify-content:center;min-height:100vh;"><div style="text-align:center;"><h1>هذه الصفحة مخصصة لطلاب الإعفاء العام فقط</h1></div></body></html>';
        exit;
    }

    $student_name = isset($stu['name']) ? $stu['name'] : 'الطالب';
    $student_stage = isset($stu['stage']) ? $stu['stage'] : '';
    $student_class = isset($stu['class']) ? $stu['class'] : '';
    $student_avg = isset($summary['annual_overall']) ? fmt_grade($summary['annual_overall']) : '';
    ?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>احتفال الإعفاء العام | <?php echo esc($student_name); ?></title>
<link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;700;800&display=swap" rel="stylesheet">
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{
    font-family:'Tajawal',Arial,sans-serif;
    min-height:100vh;
    overflow:hidden;
    color:#fff;
    background:radial-gradient(circle at top,#1e3a8a 0%,#0f172a 45%,#020617 100%);
}
.celebration-wrap{
    position:relative;
    min-height:100vh;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:24px;
}
.glow{
    position:absolute;
    inset:auto;
    width:420px;
    height:420px;
    border-radius:50%;
    filter:blur(70px);
    opacity:.35;
}
.glow.one{top:-80px;right:-60px;background:#22d3ee}
.glow.two{bottom:-100px;left:-80px;background:#f59e0b}
.card{
    position:relative;
    z-index:3;
    width:min(920px,96vw);
    background:rgba(255,255,255,.08);
    border:1px solid rgba(255,255,255,.18);
    backdrop-filter:blur(14px);
    border-radius:28px;
    padding:34px 26px;
    text-align:center;
    box-shadow:0 20px 60px rgba(0,0,0,.35);
}
.badge{
    display:inline-block;
    background:linear-gradient(135deg,#22c55e,#16a34a);
    color:#fff;
    padding:10px 18px;
    border-radius:999px;
    font-weight:800;
    margin-bottom:18px;
    font-size:18px;
}
h1{
    font-size:clamp(30px,5vw,60px);
    margin-bottom:14px;
    color:#fef08a;
    text-shadow:0 4px 18px rgba(0,0,0,.35);
}
.name{
    font-size:clamp(24px,4vw,42px);
    font-weight:800;
    margin-bottom:10px;
}
.sub{
    font-size:clamp(18px,2.7vw,26px);
    color:#dbeafe;
    margin-bottom:22px;
}
.meta{
    display:flex;
    flex-wrap:wrap;
    justify-content:center;
    gap:12px;
    margin-bottom:22px;
}
.meta span{
    background:rgba(255,255,255,.1);
    border:1px solid rgba(255,255,255,.16);
    border-radius:999px;
    padding:10px 16px;
    font-weight:700;
}
.note{
    font-size:clamp(18px,2.5vw,28px);
    line-height:1.9;
    color:#f8fafc;
}
.actions{
    margin-top:24px;
    display:flex;
    gap:12px;
    justify-content:center;
    flex-wrap:wrap;
}
.btn{
    border:none;
    border-radius:999px;
    padding:12px 22px;
    font-size:17px;
    font-weight:800;
    cursor:pointer;
}
.btn-primary{background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff}
.btn-secondary{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.18)}
.firework,.confetti{
    position:absolute;
    pointer-events:none;
}
.firework{
    width:8px;
    height:8px;
    border-radius:50%;
    box-shadow:
      0 -70px 0 2px #facc15,
      50px -50px 0 2px #38bdf8,
      70px 0 0 2px #4ade80,
      50px 50px 0 2px #f472b6,
      0 70px 0 2px #fb7185,
      -50px 50px 0 2px #c084fc,
      -70px 0 0 2px #f97316,
      -50px -50px 0 2px #2dd4bf;
    animation:boom 2.8s ease-in-out infinite;
    opacity:.8;
}
.firework.f1{top:18%;left:14%;animation-delay:.2s}
.firework.f2{top:22%;right:16%;animation-delay:1.1s}
.firework.f3{bottom:22%;left:20%;animation-delay:.8s}
.firework.f4{bottom:18%;right:20%;animation-delay:1.7s}
@keyframes boom{
    0%{transform:scale(.1);opacity:0}
    25%{transform:scale(1);opacity:1}
    100%{transform:scale(1.25);opacity:0}
}
.confetti{
    top:-20px;
    width:12px;
    height:22px;
    opacity:.9;
    animation:fall linear infinite;
}
@keyframes fall{
    from{transform:translateY(-10vh) rotate(0deg)}
    to{transform:translateY(110vh) rotate(720deg)}
}
.audio-tip{margin-top:14px;color:#bfdbfe;font-size:14px}
</style>
</head>
<body>
<div class="celebration-wrap">
    <div class="glow one"></div>
    <div class="glow two"></div>
    <div class="firework f1"></div>
    <div class="firework f2"></div>
    <div class="firework f3"></div>
    <div class="firework f4"></div>

    <div class="card">
        <div class="badge">إعفاء عام</div>
        <h1>🎉 مبارك الإعفاء 🎉</h1>
        <div class="name"><?php echo esc($student_name); ?></div>
        <div class="sub">ألف مبارك تفوقك وتميزك وحصولك على الإعفاء العام</div>
        <div class="meta">
            <span>المرحلة: <?php echo esc($student_stage); ?></span>
            <span>الشعبة: <?php echo esc($student_class); ?></span>
            <span>المعدل العام: <?php echo esc($student_avg); ?></span>
        </div>
        <div class="note">
            تتقدم إدارة <strong>ثانوية الأوائل الأهلية للبنين</strong><br>
            بأجمل التهاني والتبريكات لك، مع أطيب الأمنيات بمزيد من النجاح والتألق 🌟
        </div>
        <div class="actions">
            <button class="btn btn-primary" onclick="playCelebrationAudio()">🔊 تشغيل موسيقى النجاح</button>
            <button class="btn btn-secondary" onclick="window.location.reload()">🎆 إعادة الاحتفال</button>
        </div>
        <div class="audio-tip">إذا لم تعمل الأغنية تلقائيًا، اضغط زر تشغيل الموسيقى.</div>
    </div>

    <audio id="successSong" autoplay loop preload="auto">
        <source src="success-song.mp3" type="audio/mpeg">
    </audio>
</div>
<script>
(function createConfetti(){
    var colors = ['#facc15','#38bdf8','#4ade80','#f472b6','#fb7185','#c084fc','#f97316','#2dd4bf'];
    for (var i = 0; i < 40; i++) {
        var c = document.createElement('div');
        c.className = 'confetti';
        c.style.left = Math.random() * 100 + 'vw';
        c.style.background = colors[i % colors.length];
        c.style.animationDuration = (4 + Math.random() * 5) + 's';
        c.style.animationDelay = (Math.random() * 4) + 's';
        c.style.transform = 'rotate(' + (Math.random()*360) + 'deg)';
        document.body.appendChild(c);
    }
})();

var audioCtx = null;
var fallbackStarted = false;
function playTone(freq, start, dur){
    if (!audioCtx) return;
    var osc = audioCtx.createOscillator();
    var gain = audioCtx.createGain();
    osc.type = 'triangle';
    osc.frequency.value = freq;
    gain.gain.setValueAtTime(0.0001, start);
    gain.gain.exponentialRampToValueAtTime(0.18, start + 0.02);
    gain.gain.exponentialRampToValueAtTime(0.0001, start + dur);
    osc.connect(gain);
    gain.connect(audioCtx.destination);
    osc.start(start);
    osc.stop(start + dur + 0.02);
}
function startFallbackMelody(){
    if (fallbackStarted) return;
    fallbackStarted = true;
    try {
        audioCtx = new (window.AudioContext || window.webkitAudioContext)();
        var now = audioCtx.currentTime + 0.1;
        var notes = [523.25,659.25,783.99,1046.5,783.99,659.25,698.46,880,1174.66];
        for (var i=0;i<notes.length;i++) {
            playTone(notes[i], now + (i*0.22), 0.18);
        }
    } catch(e) {}
}
function playCelebrationAudio(){
    var audio = document.getElementById('successSong');
    if (!audio) { startFallbackMelody(); return; }
    var p = audio.play();
    if (p && typeof p.then === 'function') {
        p.catch(function(){ startFallbackMelody(); });
    }
}
window.addEventListener('load', function(){
    setTimeout(function(){ playCelebrationAudio(); }, 300);
});
</script>
</body>
</html>
<?php
    exit;
}
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<title>كروت تقرير الطلبة | ثانوية الأوائل الأهلية للبنين</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;600;700&display=swap" rel="stylesheet">
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{
    font-family:'AL-BATTAR','Calibri','Tajawal',sans-serif;
    background:radial-gradient(circle at 0% 0%,#1b2540,#050814 70%);
    color:#fff;
    min-height:100vh;
    padding:20px;
}
h1{
    font-size:26px;
    margin-bottom:5px;
}
.subtitle{
    color:#a7b3d9;
    margin-bottom:20px;
}
.container{
    max-width:1200px;
    margin:0 auto;
}

/* ✅ هيدر الصفحة + زر الرجوع */
header{
    display:flex;
    justify-content:space-between;
    align-items:center;
    margin-bottom:15px;
}
header h1{
    font-size:22px;
    margin-bottom:0;
}
header a{
    text-decoration:none;
    padding:7px 16px;
    border-radius:999px;
    background:linear-gradient(120deg,#00e6ff,#007bff);
    color:#fff;
    font-weight:600;
}

/* شريط الفلاتر */
.filters{
    background:rgba(15,23,42,0.9);
    border-radius:16px;
    padding:15px 20px;
    margin-bottom:20px;
    box-shadow:0 10px 30px rgba(0,0,0,0.35);
    display:flex;
    flex-wrap:wrap;
    gap:10px 15px;
    align-items:flex-end;
}
.filters .field{
    display:flex;
    flex-direction:column;
    font-size:13px;
}
.filters label{
    margin-bottom:3px;
    color:#cbd5f5;
}
.filters select,
.filters input{
    border-radius:10px;
    border:1px solid #323b5a;
    background:#020617;
    color:#e5e7eb;
    padding:6px 10px;
    min-width:130px;
}
.filters button{
    border:none;
    border-radius:999px;
    padding:7px 18px;
    background:linear-gradient(135deg,#3b82f6,#22c55e);
    color:#fff;
    font-weight:600;
    cursor:pointer;
    box-shadow:0 8px 20px rgba(34,197,94,0.4);
    transition:transform 0.1s ease,box-shadow 0.1s ease;
}
.filters button:hover{
    transform:translateY(-1px);
    box-shadow:0 10px 24px rgba(34,197,94,0.6);
}

/* كارت الطالب (عرض الشاشة) */
.student-card{
    background:rgba(15,23,42,0.95);
    border-radius:20px;
    padding:15px 18px 18px;
    margin-bottom:20px;
    box-shadow:0 12px 35px rgba(0,0,0,0.5);
    border:1px solid rgba(148,163,184,0.3);
    position:relative;
    overflow:hidden;
    page-break-inside:avoid;
}
.student-card::before{
    content:"";
    position:absolute;
    inset:-50%;
    background:radial-gradient(circle at 0 0,rgba(56,189,248,0.12),transparent 50%),
               radial-gradient(circle at 100% 100%,rgba(52,211,153,0.12),transparent 55%);
    opacity:0.7;
    pointer-events:none;
}
.student-card-inner{
    position:relative;
    z-index:2;
}

/* هيدر الكارت مع الشعار */
.card-header{
    position:relative;
    display:flex;
    justify-content:center;
    align-items:flex-start;
    min-height:110px;
    margin-bottom:10px;
}
.card-logo{
    position:absolute;
    top:0;
    right:0;
    width:110px;
    text-align:right;
    display:flex;
    justify-content:flex-end;
}
.card-logo img.school-logo{
    max-height:110px;
    max-width:100%;
    display:block;
}
.card-qr{
    position:absolute;
    top:10px;
    left:8px;
    width:136px;
    display:flex;
    justify-content:flex-start;
    align-items:flex-start;
}
.card-qr .qr-wrap{
    display:flex;
    flex-direction:column;
    align-items:center;
    gap:6px;
    min-width:100px;
    background:linear-gradient(180deg,#ffffff 0%,#f8fafc 100%);
    border:1px solid rgba(15,23,42,0.10);
    border-radius:18px;
    padding:8px 8px 8px;
    box-shadow:0 12px 26px rgba(15,23,42,0.18);
}
.card-qr img.qr-code{
    width:92px;
    height:92px;
    background:#fff;
    padding:5px;
    border-radius:14px;
    box-shadow:inset 0 0 0 1px rgba(15,23,42,0.06);
    display:block;
    image-rendering:-webkit-optimize-contrast;
    image-rendering:crisp-edges;
}
.card-qr .qr-text{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-height:24px;
    min-width:92px;
    font-size:12px;
    font-weight:700;
    color:#0f172a;
    text-align:center;
    background:linear-gradient(135deg,#e0f2fe,#dcfce7);
    border:1px solid rgba(15,23,42,0.08);
    border-radius:999px;
    padding:4px 10px;
    line-height:1.1;
    white-space:nowrap;
}
.card-header-center{
    width:100%;
    padding:0 136px;
    text-align:center;
    line-height:1.45;
}
.school-top{
    font-weight:700;
    font-size:15px;
    color:#ffffff;
}
.school-ministry{
    font-weight:700;
    font-size:16px;
    color:#0f172a;
    margin-top:1px;
}
.school-name{
    font-weight:700;
    font-size:20px;
    font-family:'AL-BATTAR','Tajawal',sans-serif;
    letter-spacing:0.5px;
    color:#0f172a;
    margin-top:1px;
}
.card-title{
    font-size:15px;
    color:#c79a07;
    font-weight:700;
    margin-top:4px;
}
.card-header-meta{
    display:none;
}

/* بيانات الطالب الأساسية */
.card-meta{
    display:flex;
    flex-wrap:wrap;
    justify-content:center;
    align-items:center;
    gap:10px 26px;
    font-size:15px;
    margin-bottom:14px;
    text-align:center;
}
.meta-line{
    text-align:center;
}
.meta-line span{
    color:#334155;
    display:block;
    margin-bottom:2px;
}
.meta-line strong{
    color:#0f172a;
    font-weight:700;
    display:block;
}
.meta-name strong{
    font-size:20px;
}
.meta-stage strong,
.meta-class strong{
    font-size:18px;
}

/* جدول الدرجات */
.grades-box{
    margin-bottom:12px;
}
.grades-table{
    width:100%;
    border-collapse:collapse;
    font-size:12.8px;
    background:rgba(255,255,255,0.96);
}
.grades-table th,
.grades-table td{
    border:1px solid rgba(55,65,81,0.25);
    padding:6px 7px;
    text-align:center;
}
.grades-table th{
    background:#00827d;
    font-weight:700;
    color:#ffffff;
}
.grades-table th:first-child{
    text-align:center;
    font-weight:700;
    font-size:14px;
    color:#ffffff;
}
.grades-table td.subject-col{
    text-align:center;
    font-weight:700;
    font-size:14px;
    color:#0f172a;
}
.grades-table .col-sem1,
.grades-table .col-mid,
.grades-table .col-sem2,
.grades-table .col-avg,
.grades-table .col-final-exam,
.grades-table .col-final{
    box-shadow:inset 0 0 0 2px rgba(30,64,175,0.95);
}
.grades-table tr.sum-row td,
.grades-table tr.avg-row td{
    background:rgba(224,242,254,0.95) !important;
    font-weight:700;
}
.grades-table tr.sum-row td.col-avg,
.grades-table tr.avg-row td.col-avg,
.grades-table tr.sum-row td.col-final-exam,
.grades-table tr.avg-row td.col-final-exam,
.grades-table tr.sum-row td.col-final,
.grades-table tr.avg-row td.col-final{
    box-shadow:inset 0 0 0 2px rgba(30,64,175,0.95);
}

/* تمييز صفوف المواد */
.grades-table tbody tr:nth-child(odd){
    background:rgba(15,23,42,0.95);
}
.grades-table tbody tr:nth-child(even){
    background:rgba(17,24,39,0.95);
}

/* تلوين الدرجات */
td.grade-cell{
    font-weight:700;
    font-size:13.7px;
}
.grade-red{
    background:#c0392b !important;
    color:#fff !important;
}
.grade-yellow{
    background:#f1c40f !important;
    color:#000 !important;
}
.grade-blue{
    background:#2980b9 !important;
    color:#fff !important;
}
.grade-green{
    background:#27ae60 !important;
    color:#fff !important;
}

/* شطب الدرجة الأقل */
.strike-lowest{
    position:relative;
    font-weight:700;
}
.strike-lowest::after{
    content:"";
    position:absolute;
    left:3px;
    right:3px;
    top:50%;
    transform:translateY(-50%);
    border-top:1px solid #000;
    pointer-events:none;
}

/* أقسام التقييم والسلوك (شاشة فقط) */
.sections-row{
    display:flex;
    flex-wrap:wrap;
    gap:12px;
    margin-top:12px;
    page-break-inside:avoid;
    break-inside:avoid;
}
.section-box{
    flex:1 1 250px;
    background:rgba(255,255,255,0.90);
    border-radius:12px;
    padding:10px 12px;
    border:1px solid rgba(15,23,42,0.14);
    text-align:right;
    page-break-inside:avoid;
    break-inside:avoid;
}
.section-box h4{
    font-size:15px;
    margin-bottom:8px;
    color:#0f172a;
    text-align:right;
    padding-right:4px;
    font-weight:700;
}
.section-box.result-box h4{
    display:flex;
    align-items:center;
    justify-content:flex-start;
    gap:10px;
    flex-wrap:wrap;
}
.section-box.result-box .result-label{
    display:inline-block;
    border-bottom:2px solid #0f172a;
    padding-bottom:2px;
    line-height:1.1;
}
.section-box.result-box .exempt-badge{
    display:inline-block;
    font-size:18px;
    font-weight:700;
    line-height:1.2;
    color:#0f172a;
}
.section-box.result-box .blank-space{
    min-height:34px;
}
.section-box .small{
    font-size:12px;
    color:#334155;
    margin-bottom:4px;
    text-align:right;
    font-weight:700;
}
.section-box ul{
    list-style:none;
    font-size:12px;
    max-height:160px;
    overflow:auto;
    text-align:right;
}
.section-box li{
    border-bottom:1px dashed rgba(75,85,99,0.35);
    padding:5px 0;
    color:#0f172a;
    text-align:right;
}
.section-box li:last-child{
    border-bottom:none;
}
.section-box.empty-box{
    min-height:110px;
}
.section-box.empty-box .blank-space{
    min-height:68px;
}
.tag{
    display:inline-block;
    border-radius:999px;
    padding:1px 7px;
    font-size:10px;
    margin-left:4px;
}
.tag.beh-good{background:rgba(16,185,129,0.15);color:#6ee7b7;border:1px solid rgba(16,185,129,0.5);}
.tag.beh-weak{background:rgba(248,113,113,0.15);color:#fecaca;border:1px solid rgba(248,113,113,0.5);}
.tag.level-high{background:rgba(59,130,246,0.15);color:#bfdbfe;border:1px solid rgba(59,130,246,0.5);}

/* منطقة التواقيع */
.signatures-row{
    display:flex;
    justify-content:center;
    align-items:flex-end;
    gap:10px;
    margin-top:40px;
}
.sig-col{
    flex:0 1 auto;
    font-size:13px;
}
.sig-director{
    text-align:center;
    min-width:240px;
    padding-top:4px;
}
.sig-label{
    margin-bottom:1px;
    font-weight:700;
    color:#0f172a;
    font-size:13px;
    display:block;
}
.sig-line{
    min-height:16px;
    border-top:none;
}
.director-name{
    font-weight:700;
    font-size:16px;
    letter-spacing:0.2px;
    padding-top:0;
    color:#0f172a;
    display:block;
    white-space:nowrap;
    line-height:1.15;
}

/* أزرار الطباعة */
.card-footer{
    margin-top:10px;
    text-align:left;
}
.card-footer button{
    border:none;
    border-radius:999px;
    padding:5px 14px;
    font-size:12px;
    background:linear-gradient(135deg,#38bdf8,#6366f1);
    color:#fff;
    cursor:pointer;
    box-shadow:0 6px 15px rgba(59,130,246,0.5);
}
.card-footer button:hover{
    transform:translateY(-1px);
}

/* حالة لا توجد بيانات */
.empty{
    margin-top:30px;
    text-align:center;
    color:#9ca3af;
}

/* ✅ خلفية الكارت بالصورة المضافة */
.student-card{
    background-color:#f3f4f6;
    background-image:url('card-bg.png'), url('كارت برمجة.png');
    background-repeat:no-repeat, no-repeat;
    background-position:center center, center center;
    background-size:100% 100%, 100% 100%;
    color:#0f172a;
    border:1px solid rgba(15,23,42,0.18);
    border-radius:18px;
    box-shadow:0 12px 35px rgba(0,0,0,0.25);
}
.student-card::before{
    content:none;
}
.school-top,
.school-ministry,
.school-name{
    color:#0f172a;
}
.card-title{
    color:#c79a07;
}
.card-header-meta{
    display:none;
}
.meta-line span{
    color:#334155;
}
.meta-line strong{
    color:#0f172a;
}
.grades-table tbody tr:nth-child(odd){
    background:rgba(255,255,255,0.96);
}
.grades-table tbody tr:nth-child(even){
    background:rgba(241,245,249,0.96);
}

/* طباعة */
.no-print{ }

@page{
    size:A4 landscape;
    margin:6mm;
}

@media print{
    html,
    body{
        width:297mm;
        height:210mm;
    }
    body{
        font-family:'AL-BATTAR','Calibri','Tajawal',sans-serif;
        background:
          radial-gradient(circle at 10% 0%, #f9fafb 0%, #eef2ff 35%, #e0f2fe 65%, #f9fafb 100%);
        color:#000;
        padding:0;
        margin:0;
        -webkit-print-color-adjust:exact;
        print-color-adjust:exact;
    }
    .container{
        max-width:none !important;
        margin:0 !important;
        width:100% !important;
    }
    .no-print{
        display:none !important;
    }

    .student-card{
        background-color:#f3f4f6 !important;
        background-image:url('card-bg.png'), url('كارت برمجة.png') !important;
        background-repeat:no-repeat, no-repeat !important;
        background-position:center center, center center !important;
        background-size:100% 100%, 100% 100% !important;
        color:#000 !important;
        box-shadow:none !important;
        border:none !important;
        border-radius:0 !important;
        margin:0 !important;
        width:100% !important;
        height:196mm !important;
        min-height:196mm !important;
        padding:8px 10px 18mm 10px !important;
        page-break-after:always;
        page-break-inside:avoid;
        break-inside:avoid-page;
        position:relative;
        overflow:visible !important;
        box-sizing:border-box;
    }
    .student-card:last-child{
        page-break-after:auto !important;
    }
    .student-card::before{
        content:none !important;
    }
    .student-card::after{
        content:none !important;
    }
    .student-card-inner{
        min-height:100% !important;
        height:100% !important;
        display:flex !important;
        flex-direction:column !important;
        position:relative !important;
        padding-bottom:16mm !important;
        box-sizing:border-box !important;
    }

    /* ✅ إظهار شعار الأوائل على اليمين في الطباعة */
    .card-header{
        position:relative;
        display:flex;
        justify-content:center;
        align-items:flex-start;
        min-height:76px;
        margin-bottom:3px;
        flex:0 0 auto;
    }
    .card-logo{
        position:absolute;
        top:0;
        right:0;
        width:72px;
        text-align:right;
        display:flex;
        justify-content:flex-end;
    }
    .card-logo img.school-logo{
        max-height:72px;
        max-width:100%;
    }
    .card-qr{
        position:absolute;
        top:-8px;
        left:8px;
        width:110px;
        display:flex;
        justify-content:flex-start;
        align-items:flex-start;
    }
    .card-qr .qr-wrap{
        display:flex;
        flex-direction:column;
        align-items:center;
        gap:4px;
        min-width:96px;
        background:#fff;
        border:1px solid rgba(15,23,42,0.08);
        border-radius:10px;
        padding:4px 4px 4px;
        box-shadow:none;
    }
    .card-qr img.qr-code{
        width:84px;
        height:84px;
        background:#fff;
        padding:4px;
        border-radius:6px;
        display:block;
        image-rendering:-webkit-optimize-contrast;
        image-rendering:crisp-edges;
    }
    .card-qr .qr-text{
        display:inline-flex;
        align-items:center;
        justify-content:center;
        min-height:18px;
        min-width:86px;
        font-size:9px;
        font-weight:700;
        color:#0f172a;
        text-align:center;
        background:#eef6ff;
        border:1px solid rgba(15,23,42,0.08);
        border-radius:999px;
        padding:2px 8px;
        line-height:1.05;
        white-space:nowrap;
    }
    .card-header-center{
        width:100%;
        padding:0 110px;
        text-align:center;
        line-height:1.10;
    }

    .grades-box{
        margin-bottom:2px !important;
        flex:0 0 auto;
    }
    .grades-table{
        font-size:14px !important;
    }
    .grades-table th,
    .grades-table td{
        border-color:#000;
        padding:2px 3px !important;
    }

    .grade-cell{
        font-size:14px !important;
        font-weight:700 !important;
        background:transparent !important;
        background-color:transparent !important;
        color:#000 !important;
    }

    .grade-red,
    .grade-yellow,
    .grade-blue,
    .grade-green{
        background:transparent !important;
        background-color:transparent !important;
        color:#000 !important;
    }

    .strike-lowest::after{
        border-top:1px solid #000;
    }

    /* ✅ ثانوية الأوائل الأهلية للبنين في الوسط وباللون الأسود */
    .school-top{
        font-size:12px !important;
        text-align:center;
        color:#000;
        font-weight:700;
    }
    .school-ministry{
        font-size:12px !important;
        text-align:center;
        color:#000;
        font-weight:700;
        margin-top:2px;
    }
    .school-name{
        font-family:'AL-BATTAR','Tajawal',sans-serif;
        font-size:12px !important;
        letter-spacing:0.2px;
        text-align:center;
        color:#000;
        font-weight:700;
        margin-top:2px;
    }
    .card-title{
        font-size:12px !important;
        color:#b8860b;
        font-weight:700;
        text-align:center;
        margin-top:3px;
    }

    /* ✅ اسم الطالب + المرحلة + الشعبة: Bold + أسود */
    .meta-line span,
    .meta-line strong{
        color:#000 !important;
        font-weight:700;
    }
    .meta-name strong{
        font-size:12px !important;
    }
    .meta-stage strong,
    .meta-class strong{
        font-size:12px !important;
    }

    .card-header-meta{
        display:none !important;
    }

    .card-meta{
        justify-content:center;
        text-align:center;
        gap:4px 14px;
        margin-bottom:4px;
        font-size:12px !important;
        flex:0 0 auto;
    }
    .meta-line{
        text-align:center;
    }
    .meta-line span{
        display:block;
        margin-bottom:1px;
    }

    .grades-table th:first-child{
        color:#ffffff !important;
        text-align:center !important;
        font-size:14px !important;
        font-weight:700;
    }
    .grades-table td.subject-col{
        color:#0f172a !important;
        text-align:center !important;
        font-size:14px !important;
        font-weight:700;
    }
    .grades-table .col-sem1,
    .grades-table .col-mid,
    .grades-table .col-sem2,
    .grades-table .col-avg,
    .grades-table .col-final-exam,
    .grades-table .col-final{
        box-shadow:inset 0 0 0 2px rgba(30,64,175,0.95);
    }
    .grades-table tr.sum-row td,
    .grades-table tr.avg-row td{
        background:rgba(224,242,254,0.95) !important;
        font-weight:700;
    }

    .sections-row{
        display:flex !important;
        flex-wrap:nowrap !important;
        gap:6px;
        margin-top:2px !important;
        margin-bottom:10mm !important;
        page-break-inside:avoid;
        break-inside:avoid;
        flex:0 0 auto;
    }
    .section-box{
        flex:1 1 0;
        background:rgba(255,255,255,0.90) !important;
        border-radius:10px !important;
        padding:2px 6px !important;
        border:1px solid rgba(15,23,42,0.14) !important;
        text-align:right;
        min-height:28px;
        box-sizing:border-box;
        page-break-inside:avoid;
        break-inside:avoid;
        box-shadow:none !important;
    }
    .section-box.empty-box{
        min-height:28px;
    }
    .section-box.empty-box .blank-space{
        min-height:2px;
    }
    .section-box h4{
        text-align:right;
        padding-right:2px;
        font-size:13px !important;
        margin-bottom:1px;
        color:#0f172a !important;
        font-weight:700;
    }
    .section-box.result-box h4{
        display:flex !important;
        align-items:center;
        justify-content:flex-start;
        gap:8px;
        flex-wrap:wrap;
    }
    .section-box.result-box .result-label{
        display:inline-block;
        border-bottom:2px solid #0f172a;
        padding-bottom:1px;
        line-height:1.0;
    }
    .section-box.result-box .exempt-badge{
        display:inline-block;
        font-size:13px !important;
        font-weight:700;
        line-height:1.1;
        color:#0f172a !important;
    }
    .section-box.result-box .blank-space{
        min-height:2px;
    }
    .section-box ul,
    .section-box li,
    .section-box .small{
        text-align:right;
    }

    .signatures-row{
        display:flex;
        justify-content:center;
        align-items:flex-end;
        gap:6px;
        position:absolute !important;
        left:0;
        right:0;
        bottom:1mm;
        margin-top:0 !important;
        padding-top:0 !important;
        padding-bottom:0 !important;
        font-size:11.5px;
        page-break-inside:avoid;
        break-inside:avoid;
        flex:0 0 auto;
    }
    .sig-col{
        flex:0 1 auto;
    }
    .sig-label,
    .director-name{
        color:#000 !important;
    }
    .sig-director{
        text-align:center;
        min-width:220px;
        padding-top:0;
    }
    .sig-label{
        margin-bottom:1px;
        font-size:12px !important;
        font-weight:700;
        display:block;
    }
    .sig-line{
        min-height:4px;
    }
    .director-name{
        font-size:12px !important;
        font-weight:700;
        display:block !important;
        visibility:visible !important;
        white-space:nowrap;
        line-height:1.05;
    }

    /* ✅ كل عناصر الكارت بحجم 16 بولد عند الطباعة فقط */
    .student-card,
    .student-card *,
    .student-card th,
    .student-card td,
    .student-card span,
    .student-card strong,
    .student-card h4,
    .student-card li,
    .student-card .grade-cell,
    .student-card .director-name,
    .student-card .sig-label,
    .student-card .exempt-badge{
        font-size:16px !important;
        font-weight:700 !important;
        line-height:1.05 !important;
    }

}
</style>
</head>
<body>

<!-- ✅ هيدر الصفحة مع زر الرجوع -->
<header class="no-print">
    <h1>كروت تقرير الطلبة</h1>
    <a href="admin_dashboard.php">↩ العودة للوحة التحكم</a>
</header>

<div class="container">
    <div class="subtitle">عرض درجات الطالب (ش1–ش3ف2، الفصول، نصف السنة، النتيجة السنوية) في كارت واحد.</div>

    <!-- ✅ شريط الفلاتر + زر طباعة جميع الكروت -->
    <form method="get" class="filters no-print">
        <div class="field">
            <label for="stage">المرحلة</label>
            <select name="stage" id="stage">
                <option value="">جميع المراحل</option>
                <?php
                foreach ($stages as $st) {
                    $sel = ($st == $filter_stage) ? 'selected' : '';
                    echo '<option value="'.esc($st).'" '.$sel.'>'.esc($st).'</option>';
                }
                ?>
            </select>
        </div>

        <div class="field">
            <label for="class">الشعبة</label>
            <select name="class" id="class">
                <option value="">جميع الشعب</option>
                <?php
                $classes = array('A','B','C','D','E','F');
                foreach ($classes as $c) {
                    $sel = ($c == $filter_class) ? 'selected' : '';
                    echo '<option value="'.esc($c).'" '.$sel.'>'.$c.'</option>';
                }
                ?>
            </select>
        </div>

        <div class="field">
            <label for="q">بحث باسم الطالب</label>
            <input type="text" name="q" id="q" placeholder="اكتب جزء من الاسم" value="<?php echo esc($search_name); ?>">
        </div>

        <div class="field">
            <label for="period">الفترة المطلوبة</label>
            <select id="period" onchange="updateColumns();">
                <option value="all">كل الدرجات</option>
                <option value="all_terms">جميع الافصل</option>
                <option value="f1">الفصل الأول (ش1+ش2+ش3+ف1)</option>
                <option value="mid">نصف السنة</option>
                <option value="f2">الفصل الثاني (ش1ف2+ش2ف2+ش3ف2+ف2)</option>
                <option value="annual">النتيجة السنوية</option>
            </select>
        </div>

        <div class="field">
            <label for="exemption">فلترة الإعفاء</label>
            <select name="exemption" id="exemption">
                <option value="" <?php echo ($filter_exemption == '') ? 'selected' : ''; ?>>كل الطلبة</option>
                <option value="exempt" <?php echo ($filter_exemption == 'exempt') ? 'selected' : ''; ?>>الطلبة الإعفاء</option>
                <option value="near" <?php echo ($filter_exemption == 'near') ? 'selected' : ''; ?>>الطلبة القريبين من الإعفاء</option>
                <option value="non_exempt" <?php echo ($filter_exemption == 'non_exempt') ? 'selected' : ''; ?>>الطلبة غير المعفوين</option>
            </select>
        </div>


        <div class="field">
            <label>&nbsp;</label>
            <button type="submit">تطبيق الفلاتر</button>
        </div>

        <div class="field">
            <label>&nbsp;</label>
            <button type="submit" name="export_excel" value="1">📊 تصدير Excel</button>
        </div>

        <div class="field">
            <label>&nbsp;</label>
            <button type="submit" name="export_final_exam" value="1">📊 تصدير امتحان أخير السنة</button>
        </div>

        <div class="field">
            <label>&nbsp;</label>
            <button type="submit" name="export_final_result" value="1">📊 تصدير النتيجة النهائية</button>
        </div>

        <!-- ✅ زر طباعة جميع الكروت كـ PDF (من المتصفح) -->
        <div class="field">
            <label>&nbsp;</label>
            <button type="button" onclick="printAllCards()">🖨️ طباعة جميع الكروت (PDF)</button>
        </div>
    </form>

    <?php
    if (!$students_q || mysqli_num_rows($students_q) == 0) {
        echo '<div class="empty">لا توجد طلبة مطابقة للفلاتر الحالية.</div>';
    } else {

        $shown_cards = 0;

        while ($stu = mysqli_fetch_assoc($students_q)) {

            $student_summary           = build_student_annual_summary($conn, $stu);
            $student_is_exempt         = isset($student_summary['is_exempt']) ? $student_summary['is_exempt'] : false;
            $student_is_near           = isset($student_summary['is_near']) ? $student_summary['is_near'] : false;
            $student_exemption_allowed = isset($student_summary['exemption_allowed']) ? $student_summary['exemption_allowed'] : true;

            ob_start();

            $stu_id = (int)$stu['id'];

            // 4) جلب درجات الطالب
            $ordered_grades = get_student_ordered_grades($conn, $stu_id, isset($stu['stage']) ? $stu['stage'] : '');

            // ✅ تم إلغاء جلب التقييمات والملاحظات من الكارت حسب الطلب
            ?>

            <div class="student-card" id="card-<?php echo $stu_id; ?>">
                <div class="student-card-inner">
                    <div class="card-header">
                        <?php if ($student_is_exempt) {
                            $qr_target_url = build_exempt_celebration_url($stu_id);
                            $qr_image_url  = build_qr_image_url($qr_target_url);
                        ?>
                        <div class="card-qr">
                            <div class="qr-wrap">
                                <img src="<?php echo esc($qr_image_url); ?>" alt="باركود الإعفاء" class="qr-code">
                                <span class="qr-text">امسح الباركود</span>
                            </div>
                        </div>
                        <?php } ?>
                        <div class="card-logo">
                            <img src="bookk.png" alt="شعار المدرسة" class="school-logo">
                        </div>
                        <div class="card-header-center">
                            <div class="school-top">جمهورية العراق</div>
                            <div class="school-ministry">وزارة التربية</div>
                            <div class="school-name">ثانوية الأوائل الأهلية للبنين</div>
                            <div class="card-title">كارت الطالب للعام الدراسي 2025-2026</div>
                        </div>
                    </div>

                    <div class="card-meta">
                        <div class="meta-line meta-name"><span>اسم الطالب:</span> <strong><?php echo esc($stu['name']); ?></strong></div>
                        <div class="meta-line meta-stage"><span>المرحلة:</span> <strong><?php echo esc($stu['stage']); ?></strong></div>
                        <div class="meta-line meta-class"><span>الشعبة:</span> <strong><?php echo esc($stu['class']); ?></strong></div>
                    </div>

                    <!-- جدول الدرجات -->
                    <div class="grades-box">
                        <table class="grades-table">
                            <thead>
                            <tr>
                                <th>المادة</th>
                                <th class="col-m1">ش1</th>
                                <th class="col-m2">ش2</th>
                                <th class="col-m3">ش3</th>
                                <th class="col-d1">يومي 1</th>
                                <th class="col-sem1">فصل أول</th>
                                <th class="col-mid">نصف السنة</th>
                                <th class="col-m4">ش1ف2</th>
                                <th class="col-m5">ش2ف2</th>
                                <th class="col-m6">ش3ف2</th>
                                <th class="col-d2">يومي ف2</th>
                                <th class="col-sem2">فصل ثاني</th>
                                <th class="col-avg">المعدل السنوي</th>
                                <?php if (!$student_is_exempt) { ?>
                                <th class="col-final-exam">امتحان أخير السنة</th>
                                <?php } ?>
                                <th class="col-final">النتيجة النهائية</th>
                            </tr>
                            </thead>
                            <tbody>
                            <?php
                                $annual_total = 0;
                                $annual_count = 0;
                                $annual_has_below75 = false;

                                // ✅ نص مربع النتيجة أسفل الكارت
                                // طلبة الإعفاء يبقون كما هم، أما غير المعفيين فيُحسب النص حسب عمود النتيجة النهائية
                                $student_result_box_text = $student_is_exempt ? 'ناجح (اعفاء عام)' : '';
                                $final_fail_subjects = array();
                                $final_result_count = 0;

                            if (count($ordered_grades) == 0) {
                                echo '<tr><td colspan="'.($student_is_exempt ? 14 : 15).'">لا توجد درجات مسجلة لهذا الطالب حتى الآن.</td></tr>';
                            } else {
                                foreach ($ordered_grades as $subj => $g) {

                                    $m1  = isset($g['month1'])  ? (float)$g['month1']  : 0;
                                    $m2  = isset($g['month2'])  ? (float)$g['month2']  : 0;
                                    $m3  = isset($g['month3'])  ? (float)$g['month3']  : 0;
                                    $d1  = isset($g['daily1'])  ? (float)$g['daily1']  : 0;
                                    $mid = isset($g['midterm']) ? (float)$g['midterm'] : 0;
                                    $m4  = isset($g['month4'])  ? (float)$g['month4']  : 0;
                                    $m5  = isset($g['month5'])  ? (float)$g['month5']  : 0;
                                    $m6  = isset($g['month6'])  ? (float)$g['month6']  : 0;
                                    $d2  = isset($g['daily2'])  ? (float)$g['daily2']  : 0;

                                    // ✅ منطق خاص لبعض المواد/الصفوف عند غياب اليومي1
                                    $use_special_sem1 = use_special_sem1_rule($stu['stage'], $subj);

                                    if ($use_special_sem1 && $d1 <= 0) {
                                        // ✅ إذا كان اليومي1 = 0 أو فارغ => نحذف أقل شهر من (ش1/ش2/ش3) ثم (الباقي ÷ 2)
                                        $tmp = sem1_best2_months($m1, $m2, $m3);
                                        $sem1_calc = $tmp[0];
                                        $min_key1  = $tmp[1]; // للشطب
                                    } else {
                                        if ($d1 > 0) {
                                            $firstVals = array(
                                                'month1' => $m1,
                                                'month2' => $m2,
                                                'month3' => $m3,
                                                'daily1' => $d1
                                            );
                                            $min_key1 = null;
                                            $min_val1 = null;
                                            foreach ($firstVals as $k => $v) {
                                                if ($min_val1 === null || $v < $min_val1) {
                                                    $min_val1 = $v;
                                                    $min_key1 = $k;
                                                }
                                            }
                                            $sem1_calc = top3_avg_admin(array($m1, $m2, $m3, $d1));
                                        } else {
                                            $min_key1 = null;
                                            $sem1_calc = round(($m1 + $m2 + $m3) / 3, 2);
                                        }
                                    }

                                    // ✅ (إضافة) إذا كان للطالب درجتان فقط في الفصل الأول (أي شهرين أو شهر+يومي1) => نجمع ونقسم على 2
                                    $twoOnly1 = avg_if_two_only(array($m1, $m2, $m3, $d1));
                                    if ($twoOnly1 !== null) {
                                        $sem1_calc = $twoOnly1;
                                        // لا شطب عند اعتماد درجتين فقط
                                        $min_key1 = null;
                                    }
                                    $sem1_calc = round_half_up_int($sem1_calc);

                                    // ✅ منطق ف2 الجديد المطلوب
                                    if (use_special_sem2_month4_month5_only($stu['stage'], $subj)) {
                                        $sem2_calc = max_positive_grade(array($m4, $m5));
                                        $min_key2 = null;
                                    } elseif (use_special_sem2_sixth_month4_month5_daily2($stu['stage'], $subj)) {
                                        $sem2_calc = max_positive_grade(array($m4, $m5, $d2));
                                        $min_key2 = null;
                                    } else {
                                        // ✅ (إضافة) إذا كان للطالب درجة واحدة فقط في الفصل الثاني (أي شهر واحد أو يومي ف2 فقط) => الدرجة ÷ 2
                                        $oneOnly2 = avg_if_one_only(array($m4, $m5, $m6, $d2));
                                        if ($oneOnly2 !== null) {
                                            $sem2_calc = $oneOnly2;
                                            // لا شطب عند اعتماد درجة واحدة فقط
                                            $min_key2 = null;
                                        } else {

                                            // ✅ (إضافة) إذا كان للطالب درجتان فقط في الفصل الثاني (أي شهرين أو شهر+يومي2) => نجمع ونقسم على 2
                                            $twoOnly2 = avg_if_two_only(array($m4, $m5, $m6, $d2));
                                            if ($twoOnly2 !== null) {
                                                $sem2_calc = $twoOnly2;
                                                // لا شطب عند اعتماد درجتين فقط
                                                $min_key2 = null;
                                            } else {

                                                // ✅ (تعديل) إذا 3 درجات ومعها اليومي ف2 => حذف الأقل ثم القسمة على 2
                                                $vals3 = array();
                                                if ($m4 > 0) $vals3['month4'] = $m4;
                                                if ($m5 > 0) $vals3['month5'] = $m5;
                                                if ($m6 > 0) $vals3['month6'] = $m6;
                                                if ($d2 > 0) $vals3['daily2'] = $d2;

                                                if (count($vals3) == 3 && $d2 > 0) {
                                                    $min_key2 = null;
                                                    $min_val2 = null;
                                                    foreach ($vals3 as $k => $v) {
                                                        if ($min_val2 === null || $v < $min_val2) {
                                                            $min_val2 = $v;
                                                            $min_key2 = $k;
                                                        }
                                                    }
                                                    $sum3 = array_sum($vals3);
                                                    $sem2_calc = round(($sum3 - (float)$min_val2) / 2, 2);
                                                } else {
                                                    if ($d2 > 0) {
                                                        $secondVals = array(
                                                            'month4' => $m4,
                                                            'month5' => $m5,
                                                            'month6' => $m6,
                                                            'daily2' => $d2
                                                        );
                                                        $min_key2 = null;
                                                        $min_val2 = null;
                                                        foreach ($secondVals as $k => $v) {
                                                            if ($min_val2 === null || $v < $min_val2) {
                                                                $min_val2 = $v;
                                                                $min_key2 = $k;
                                                            }
                                                        }
                                                        $sem2_calc = top3_avg_admin(array($m4, $m5, $m6, $d2));
                                                    } else {
                                                        $min_key2 = null;
                                                        $sem2_calc = round(($m4 + $m5 + $m6) / 3, 2);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    $sem2_calc = round_half_up_int($sem2_calc);

                                    $annual_calc = round_half_up_int(($sem1_calc + $sem2_calc + $mid) / 3);
                                    if ($annual_calc > 0) {
                                        $annual_total += $annual_calc;
                                        $annual_count++;
                                        if ($annual_calc < 75) {
                                            $annual_has_below75 = true;
                                        }
                                    }

                                    $cls_m1   = grade_class($g['month1']);
                                    $cls_m2   = grade_class($g['month2']);
                                    $cls_m3   = grade_class($g['month3']);
                                    $cls_d1   = grade_class($g['daily1']);
                                    $cls_sem1 = grade_class($sem1_calc);
                                    $cls_mid  = grade_class($g['midterm']);
                                    $cls_m4   = grade_class($g['month4']);
                                    $cls_m5   = grade_class($g['month5']);
                                    $cls_m6   = grade_class($g['month6']);
                                    $cls_d2   = grade_class($g['daily2']);
                                    $cls_sem2 = grade_class($sem2_calc);
                                    $cls_avg  = grade_class($annual_calc);

                                    // ✅ امتحان أخير السنة يظهر ويُحسب فقط للطلبة غير المعفيين
                                    $final_exam_raw = (isset($g['final_exam']) ? $g['final_exam'] : '');
                                    $final_exam_val = ($final_exam_raw === null || $final_exam_raw === '') ? 0 : (float)$final_exam_raw;
                                    $final_result_display = '';
                                    if ($student_is_exempt) {
                                        // طلبة الإعفاء يبقون كما كانوا تماماً
                                        $final_result_display = $annual_calc;
                                    } else {
                                        if ($final_exam_raw !== null && $final_exam_raw !== '') {
                                            $final_result_display = round_half_up_int(($final_exam_val + $annual_calc) / 2);
                                        }
                                    }

                                    // ✅ للطلبة غير المعفيين: نحصي المواد التي نتيجتها النهائية أقل من 50
                                    // حتى نكتب في مربع النتيجة: ناجح / راسب / مكمل من مادة أو مادتين
                                    if (!$student_is_exempt && $final_result_display !== '' && $final_result_display !== null) {
                                        $final_result_count++;
                                        if ((float)$final_result_display < 50) {
                                            $final_fail_subjects[] = $subj;
                                        }
                                    }

                                    $cls_final_exam = (!$student_is_exempt ? grade_class($final_exam_raw) : '');
                                    $cls_fin  = $student_is_exempt ? $cls_avg : grade_class($final_result_display);

                                    echo '<tr>';
                                    echo '<td class="subject-col">'.esc($subj).'</td>';
                                    echo '<td class="col-m1 grade-cell '.$cls_m1.(($min_key1 === "month1") ? ' strike-lowest' : '').'">'.fmt_grade($g['month1']).'</td>';
                                    echo '<td class="col-m2 grade-cell '.$cls_m2.(($min_key1 === "month2") ? ' strike-lowest' : '').'">'.fmt_grade($g['month2']).'</td>';
                                    echo '<td class="col-m3 grade-cell '.$cls_m3.(($min_key1 === "month3") ? ' strike-lowest' : '').'">'.fmt_grade($g['month3']).'</td>';
                                    echo '<td class="col-d1 grade-cell '.$cls_d1.(($min_key1 === "daily1") ? ' strike-lowest' : '').'">'.fmt_grade($g['daily1']).'</td>';
                                    echo '<td class="col-sem1 grade-cell '.$cls_sem1.'">'.fmt_grade($sem1_calc).'</td>';
                                    echo '<td class="col-mid grade-cell '.$cls_mid.'">'.fmt_grade($g['midterm']).'</td>';
                                    echo '<td class="col-m4 grade-cell '.$cls_m4.(($min_key2 === "month4") ? ' strike-lowest' : '').'">'.fmt_grade($g['month4']).'</td>';
                                    echo '<td class="col-m5 grade-cell '.$cls_m5.(($min_key2 === "month5") ? ' strike-lowest' : '').'">'.fmt_grade($g['month5']).'</td>';
                                    echo '<td class="col-m6 grade-cell '.$cls_m6.(($min_key2 === "month6") ? ' strike-lowest' : '').'">'.fmt_grade($g['month6']).'</td>';
                                    echo '<td class="col-d2 grade-cell '.$cls_d2.(($min_key2 === "daily2") ? ' strike-lowest' : '').'">'.fmt_grade($g['daily2']).'</td>';
                                    echo '<td class="col-sem2 grade-cell '.$cls_sem2.'">'.fmt_grade($sem2_calc).'</td>';
                                    echo '<td class="col-avg grade-cell '.$cls_avg.'">'.fmt_grade($annual_calc).'</td>';
                                    if (!$student_is_exempt) {
                                        echo '<td class="col-final-exam grade-cell '.$cls_final_exam.'">'.fmt_grade_keep_zero($final_exam_raw).'</td>';
                                    }
                                    echo '<td class="col-final grade-cell '.$cls_fin.'">'.($student_is_exempt ? fmt_grade($final_result_display) : fmt_grade_keep_zero($final_result_display)).'</td>';
                                    echo '</tr>';
                                }

                                // ✅ تحديد نص مربع النتيجة للطلبة غير المعفيين حسب عمود النتيجة النهائية
                                if (!$student_is_exempt && $final_result_count > 0) {
                                    $fail_count = count($final_fail_subjects);

                                    if ($fail_count == 0) {
                                        $student_result_box_text = 'ناجح';
                                    } elseif ($fail_count >= 3) {
                                        $student_result_box_text = 'راسب';
                                    } elseif ($fail_count == 1) {
                                        $student_result_box_text = 'مكمل من ' . $final_fail_subjects[0];
                                    } elseif ($fail_count == 2) {
                                        $student_result_box_text = 'مكمل من ' . $final_fail_subjects[0] . ' و ' . $final_fail_subjects[1];
                                    }
                                }

                                $annual_overall = ($annual_count > 0) ? round($annual_total / $annual_count, 2) : 0;
                                $avg_raw = ($annual_count > 0) ? ($annual_total / $annual_count) : 0;
                                $exemption_allowed = is_exemption_stage_allowed($stu['stage']);
                                $is_exempt = ($exemption_allowed && $annual_count > 0 && $avg_raw >= 85 && !$annual_has_below75);
                                $is_near   = ($exemption_allowed && $annual_count > 0 && $avg_raw >= 85 &&  $annual_has_below75);

                                echo '<tr class="sum-row">';
                                echo '<td class="subject-col"><strong>المجموع</strong></td>';
                                echo '<td class="col-m1"></td>';
                                echo '<td class="col-m2"></td>';
                                echo '<td class="col-m3"></td>';
                                echo '<td class="col-d1"></td>';
                                echo '<td class="col-sem1"></td>';
                                echo '<td class="col-mid"></td>';
                                echo '<td class="col-m4"></td>';
                                echo '<td class="col-m5"></td>';
                                echo '<td class="col-m6"></td>';
                                echo '<td class="col-d2"></td>';
                                echo '<td class="col-sem2"></td>';
                                if ($student_is_exempt) {
                                    echo '<td class="col-avg"></td>';
                                    echo '<td class="col-final grade-cell">'.fmt_grade($annual_total).'</td>';
                                } else {
                                    echo '<td class="col-avg grade-cell">'.fmt_grade($annual_total).'</td>';
                                    echo '<td class="col-final-exam"></td>';
                                    echo '<td class="col-final"></td>';
                                }
                                echo '</tr>';

                                echo '<tr class="avg-row">';
                                echo '<td class="subject-col"><strong>المعدل العام</strong></td>';
                                echo '<td class="col-m1"></td>';
                                echo '<td class="col-m2"></td>';
                                echo '<td class="col-m3"></td>';
                                echo '<td class="col-d1"></td>';
                                echo '<td class="col-sem1"></td>';
                                echo '<td class="col-mid"></td>';
                                echo '<td class="col-m4"></td>';
                                echo '<td class="col-m5"></td>';
                                echo '<td class="col-m6"></td>';
                                echo '<td class="col-d2"></td>';
                                echo '<td class="col-sem2"></td>';
                                if ($student_is_exempt) {
                                    echo '<td class="col-avg"></td>';
                                    echo '<td class="col-final grade-cell">'.fmt_grade($annual_overall).'</td>';
                                } else {
                                    echo '<td class="col-avg grade-cell">'.fmt_grade($annual_overall).'</td>';
                                    echo '<td class="col-final-exam"></td>';
                                    echo '<td class="col-final"></td>';
                                }
                                echo '</tr>';
                            }
                            ?>
                            </tbody>
                        </table>
                    </div>

                    <div class="sections-row">
                        <div class="section-box empty-box result-box">
                            <h4><span class="result-label">النتيجة</span><?php if ($student_result_box_text !== '') { ?><span class="exempt-badge"><?php echo esc($student_result_box_text); ?></span><?php } ?></h4>
                            <div class="blank-space">&nbsp;</div>
                        </div>
                        <div class="section-box empty-box">
                            <h4>الملاحظات</h4>
                            <div class="blank-space">&nbsp;</div>
                        </div>
                    </div>

                    <!-- التوقيع -->
                    <div class="signatures-row">
                        <div class="sig-col sig-director">
                            <div class="sig-label">توقيع المدير</div>
                            <div class="sig-line"></div>
                            <div class="director-name">أ. يوسف هيثم ابراهيم</div>
                        </div>
                    </div>

                    <div class="card-footer no-print">
                        <button type="button" onclick="printStudentCard(<?php echo $stu_id; ?>)">🖨️ طباعة هذا الكارت</button>
                    </div>
                </div>
            </div>

            <?php
                $__card_html = ob_get_clean();

                $show_card = true;
                if ($filter_exemption === 'exempt') {
                    $show_card = $student_is_exempt;
                } elseif ($filter_exemption === 'near') {
                    $show_card = $student_is_near;
                } elseif ($filter_exemption === 'non_exempt') {
                    $show_card = ($student_exemption_allowed && !$student_is_exempt);
                }

                if ($show_card) {
                    echo $__card_html;
                    $shown_cards++;
                }
        } // end while students

        if ($shown_cards == 0) {
            echo '<div class="empty">لا توجد طلبة مطابقة للفلاتر الحالية.</div>';
        }
    }
    ?>
</div>

<script>
// ✅ إخفاء/إظهار الأعمدة حسب الفترة
function updateColumns(){
    var period = document.getElementById('period').value;
    var allClasses = [
        'col-m1','col-m2','col-m3',
        'col-sem1','col-mid',
        'col-m4','col-m5','col-m6',
        'col-sem2',
        'col-avg','col-final-exam','col-final',
        'col-d1','col-d2'
    ];

    for (var i=0;i<allClasses.length;i++){
        var cls = allClasses[i];
        var cells = document.getElementsByClassName(cls);
        for (var j=0;j<cells.length;j++){
            cells[j].style.display = '';
        }
    }

    function hide(list){
        for (var i=0;i<list.length;i++){
            var cls = list[i];
            var cells = document.getElementsByClassName(cls);
            for (var j=0;j<cells.length;j++){
                cells[j].style.display = 'none';
            }
        }
    }

    if (period === 'all_terms'){
        hide(['col-m1','col-m2','col-m3','col-d1','col-m4','col-m5','col-m6','col-d2']);
    } else if (period === 'f1'){
        hide(['col-mid','col-m4','col-m5','col-m6','col-sem2','col-avg','col-final-exam','col-final','col-d2']);
    } else if (period === 'mid'){
        hide(['col-m1','col-m2','col-m3','col-sem1','col-m4','col-m5','col-m6','col-sem2','col-avg','col-final-exam','col-final','col-d1','col-d2']);
    } else if (period === 'f2'){
        hide(['col-m1','col-m2','col-m3','col-sem1','col-mid','col-avg','col-final-exam','col-final','col-d1']);
    } else if (period === 'annual'){
        hide(['col-m1','col-m2','col-m3','col-sem1','col-mid','col-m4','col-m5','col-m6','col-sem2','col-d1','col-d2']);
    }
}

window.addEventListener('load', updateColumns);

// ✅ طباعة جميع الكروت الظاهرة كـ PDF (من المتصفح)
function printAllCards(){
    window.print();
}

// ✅ طباعة كارت طالب واحد فقط بنفس تنسيقات طباعة جميع الكروت
function printStudentCard(id){
    var card = document.getElementById('card-' + id);
    if (!card) return;

    var win = window.open('', '_blank', 'width=900,height=1200');
    win.document.write('<html dir="rtl" lang="ar"><head><title>كارت الطالب</title>');
    win.document.write('<meta charset="UTF-8">');
    win.document.write('<style>');
    win.document.write('@page{size:A4 landscape;margin:6mm;}');
    win.document.write('html,body{width:297mm;height:210mm;}body{font-family:AL-BATTAR, Calibri, Tajawal, sans-serif;direction:rtl;margin:0;padding:0;background:#ffffff;color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact;}');
    win.document.write('.container{max-width:none !important;margin:0 !important;width:100% !important;}.student-card{background-color:#f3f4f6 !important;background-image:url("card-bg.png"),url("كارت برمجة.png") !important;background-repeat:no-repeat,no-repeat !important;background-position:center center,center center !important;background-size:100% 100%,100% 100% !important;color:#000 !important;box-shadow:none !important;border:none !important;border-radius:0 !important;margin:0 !important;width:100% !important;height:196mm !important;min-height:196mm !important;padding:8px 10px 18mm 10px !important;page-break-after:always;page-break-inside:avoid;break-inside:avoid-page;position:relative;overflow:visible !important;box-sizing:border-box;}.student-card:last-child{page-break-after:auto !important;}.student-card-inner{min-height:100% !important;height:100% !important;display:flex !important;flex-direction:column !important;position:relative !important;padding-bottom:16mm !important;box-sizing:border-box !important;}');
    win.document.write('.student-card::before,.student-card::after{content:none !important;}');
    win.document.write('.card-header{position:relative;display:flex;justify-content:center;align-items:flex-start;min-height:76px;margin-bottom:3px;flex:0 0 auto;}');
    win.document.write('.card-logo{position:absolute;top:0;right:0;width:72px;text-align:right;display:flex;justify-content:flex-end;}');
    win.document.write('.card-logo img.school-logo{max-height:72px;max-width:100%;display:block;}');
    win.document.write('.card-qr{position:absolute;top:-8px;left:8px;width:110px;display:flex;justify-content:flex-start;align-items:flex-start;}');
    win.document.write('.card-qr .qr-wrap{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:96px;background:#fff;border:1px solid rgba(15,23,42,0.08);border-radius:10px;padding:4px 4px 4px;box-shadow:none;}');
    win.document.write('.card-qr img.qr-code{width:84px;height:84px;background:#fff;padding:4px;border-radius:6px;display:block;image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges;}');
    win.document.write('.card-qr .qr-text{display:inline-flex;align-items:center;justify-content:center;min-height:18px;min-width:86px;font-size:9px;font-weight:700;color:#0f172a;text-align:center;background:#eef6ff;border:1px solid rgba(15,23,42,0.08);border-radius:999px;padding:2px 8px;line-height:1.05;white-space:nowrap;}');
    win.document.write('.card-header-center{width:100%;padding:0 110px;text-align:center;line-height:1.10;}');
    win.document.write('.school-top{font-size:12px !important;text-align:center;color:#000;font-weight:700;}');
    win.document.write('.school-ministry{font-size:12px !important;text-align:center;color:#000;font-weight:700;margin-top:2px;}');
    win.document.write('.school-name{font-family:AL-BATTAR, Tajawal, sans-serif;font-size:12px !important;letter-spacing:0.2px;text-align:center;color:#000;font-weight:700;margin-top:2px;}');
    win.document.write('.card-title{font-size:12px !important;text-align:center;color:#b8860b;font-weight:700;margin-top:3px;}');
    win.document.write('.card-header-meta{display:none !important;}');

    win.document.write('.card-meta{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 14px;font-size:12px !important;margin-bottom:4px;text-align:center;flex:0 0 auto;}');
    win.document.write('.meta-line{text-align:center;}');
    win.document.write('.meta-line span,.meta-line strong{display:block;color:#000 !important;font-weight:700;}');
    win.document.write('.meta-line span{margin-bottom:1px;}');
    win.document.write('.meta-name strong{font-size:12px !important;}');
    win.document.write('.meta-stage strong,.meta-class strong{font-size:12px !important;}');

    win.document.write('.grades-box{margin-bottom:2px !important;flex:0 0 auto;}');
    win.document.write('.grades-table{width:100%;border-collapse:collapse;font-size:14px !important;background:rgba(255,255,255,0.96);}');
    win.document.write('.grades-table th,.grades-table td{border:1px solid #000;padding:2px 3px !important;text-align:center;}');
    win.document.write('.grades-table th{background:#00827d;font-weight:700;color:#fff;}');
    win.document.write('.grades-table tbody tr:nth-child(odd){background:rgba(255,255,255,0.96);}');
    win.document.write('.grades-table tbody tr:nth-child(even){background:rgba(241,245,249,0.96);}');
    win.document.write('.grades-table th:first-child{text-align:center;color:#ffffff !important;font-weight:700;font-size:14px !important;}');
    win.document.write('.grades-table td.subject-col{text-align:center;color:#0f172a !important;font-weight:700;font-size:14px !important;}');
    win.document.write('.grades-table .col-sem1,.grades-table .col-mid,.grades-table .col-sem2,.grades-table .col-avg,.grades-table .col-final-exam,.grades-table .col-final{box-shadow:inset 0 0 0 2px rgba(30,64,175,0.95);}');
    win.document.write('.grades-table tr.sum-row td,.grades-table tr.avg-row td{background:rgba(224,242,254,0.95) !important;font-weight:700;}');

    win.document.write('.grade-cell{font-weight:700;font-size:14px !important;background:transparent !important;background-color:transparent !important;color:#000 !important;}');
    win.document.write('.grade-red,.grade-yellow,.grade-blue,.grade-green{background:transparent !important;background-color:transparent !important;color:#000 !important;}');

    win.document.write('.strike-lowest{position:relative;font-weight:700;}');
    win.document.write('.strike-lowest::after{content:"";position:absolute;left:3px;right:3px;top:50%;transform:translateY(-50%);border-top:1px solid #000;pointer-events:none;}');

    win.document.write('.sections-row{display:flex !important;flex-wrap:nowrap !important;gap:6px;margin-top:2px !important;margin-bottom:10mm !important;page-break-inside:avoid;break-inside:avoid;flex:0 0 auto;}');
    win.document.write('.section-box{flex:1 1 0;background:rgba(255,255,255,0.90) !important;border-radius:10px !important;padding:2px 6px !important;border:1px solid rgba(15,23,42,0.14) !important;text-align:right;min-height:28px;box-sizing:border-box;page-break-inside:avoid;break-inside:avoid;box-shadow:none !important;}');
    win.document.write('.section-box.empty-box{min-height:28px;}');
    win.document.write('.section-box.empty-box .blank-space{min-height:2px;}');
    win.document.write('.section-box h4{text-align:right;padding-right:2px;font-size:13px !important;margin-bottom:1px;color:#0f172a !important;font-weight:700;}');
    win.document.write('.section-box.result-box h4{display:flex !important;align-items:center;justify-content:flex-start;gap:8px;flex-wrap:wrap;}');
    win.document.write('.section-box.result-box .result-label{display:inline-block;border-bottom:2px solid #0f172a;padding-bottom:1px;line-height:1.0;}');
    win.document.write('.section-box.result-box .exempt-badge{display:inline-block;font-size:13px !important;font-weight:700;line-height:1.1;color:#0f172a !important;}');
    win.document.write('.section-box.result-box .blank-space{min-height:2px;}');

    win.document.write('.signatures-row{display:flex;justify-content:center;align-items:flex-end;gap:6px;position:absolute !important;left:0;right:0;bottom:1mm;margin-top:0 !important;padding-top:0 !important;padding-bottom:0 !important;font-size:11.5px;page-break-inside:avoid;break-inside:avoid;flex:0 0 auto;}');
    win.document.write('.sig-col{flex:0 1 auto;}');
    win.document.write('.sig-director{text-align:center;min-width:220px;padding-top:0;}');
    win.document.write('.sig-label{margin-bottom:1px;font-weight:700;font-size:12px !important;color:#000 !important;display:block;}');
    win.document.write('.sig-line{min-height:4px;border-top:none;}');
    win.document.write('.director-name{font-weight:700;font-size:12px !important;letter-spacing:0.2px;padding-top:0;color:#000 !important;display:block !important;visibility:visible !important;white-space:nowrap;line-height:1.05;}');

    win.document.write('.student-card,.student-card *,.student-card th,.student-card td,.student-card span,.student-card strong,.student-card h4,.student-card li,.student-card .grade-cell,.student-card .director-name,.student-card .sig-label,.student-card .exempt-badge{font-size:16px !important;font-weight:700 !important;line-height:1.05 !important;}');

    win.document.write('.card-footer,.no-print{display:none !important;}');
    
    win.document.write('</style>');
    win.document.write('</head><body>');
    win.document.write(card.outerHTML);
    win.document.write('</body></html>');
    win.document.close();
    setTimeout(function(){
        win.focus();
        win.print();
    }, 300);
}
</script>
</body>
</html>
