{"id":8715,"date":"2025-11-14T16:20:05","date_gmt":"2025-11-14T16:20:05","guid":{"rendered":"https:\/\/www.spotlightuniv.com\/international-student-status-by-university-in-republic-of-korea\/"},"modified":"2025-12-17T01:06:34","modified_gmt":"2025-12-17T01:06:34","slug":"international-student-status-by-university-in-republic-of-korea","status":"publish","type":"page","link":"https:\/\/www.spotlightuniv.com\/en\/international-student-status-by-university-in-republic-of-korea\/","title":{"rendered":"International Student Status by University In Republic of Korea"},"content":{"rendered":"\n<style>\r\n\/* \ub300\ud559\ubcc4 \uc720\ud559\uc0dd \ud604\ud669 \ubcf4\uace0\uc11c \u2013 \ud55c \uc904 \uc815\ub82c *\/\r\n#intl-stu-dashboard #univ-report-link-wrap {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  padding: 12px 16px;\r\n  border-radius: 12px;\r\n  background: #f7f9fb;\r\n}\r\n\r\n\/* \ub77c\ubca8+\uc785\ub825 \/ \ub77c\ubca8+\uc140\ub809\ud2b8 \ubb36\uc74c *\/\r\n#intl-stu-dashboard #univ-report-link-wrap .report-field {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  flex: 1 1 0;\r\n}\r\n\r\n\/* \ub77c\ubca8\uc740 \uc9e7\uac8c, \uc904\ubc14\uafc8 \uc5c6\uc774 *\/\r\n#intl-stu-dashboard #univ-report-link-wrap .report-field label {\r\n  font-size: 13px;\r\n  white-space: nowrap;\r\n}\r\n\r\n\/* \uc785\ub825\ucc3d \/ \uc140\ub809\ud2b8\ub294 \ub0a8\ub294 \uacf5\uac04 \uaf49 \ucc44\uc6b0\uae30 *\/\r\n#intl-stu-dashboard #univ-report-link-wrap input,\r\n#intl-stu-dashboard #univ-report-link-wrap select {\r\n  flex: 1 1 auto;\r\n  min-width: 0;\r\n  padding: 6px 10px;\r\n  border-radius: 8px;\r\n  border: 1px solid #cbd5f5;\r\n}\r\n\r\n\/* \ubcf4\uace0\uc11c \ubcf4\uae30 \ubc84\ud2bc *\/\r\n#intl-stu-dashboard #univ-report-link-wrap #reportUnivBtn {\r\n  height: 36px;\r\n  padding: 0 16px;\r\n  border: none;\r\n  border-radius: 8px;\r\n  background: #245fff;\r\n  color: #fff;\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n  flex: 0 0 auto;\r\n}\r\n\r\n\/* \ubaa8\ubc14\uc77c\uc5d0\uc11c\ub294 \uc138\ub85c\ub85c \uc790\uc5f0\uc2a4\ub7fd\uac8c \uc313\uc774\uac8c *\/\r\n@media (max-width: 800px) {\r\n  #intl-stu-dashboard #univ-report-link-wrap {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n  }\r\n  #intl-stu-dashboard #univ-report-link-wrap .report-field {\r\n    width: 100%;\r\n  }\r\n  #intl-stu-dashboard #univ-report-link-wrap #reportUnivBtn {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n\r\n\/* \ub300\ud559\ubcc4 \uc720\ud559\uc0dd \ud604\ud669 \ubcf4\uace0\uc11c \uc785\ub825\uc904 \uc815\ub82c *\/\r\n#intl-stu-dashboard #univ-report-link-wrap {\r\n  display: grid;\r\n  grid-template-columns: 2fr 2fr auto; \/* \uc785\ub825, \uc140\ub809\ud2b8, \ubc84\ud2bc *\/\r\n  gap: 12px;\r\n  align-items: end;\r\n  padding: 12px 16px;\r\n  border-radius: 12px;\r\n  background: #f7f9fb;\r\n}\r\n\r\n#intl-stu-dashboard #univ-report-link-wrap > div {\r\n  width: 100%;\r\n}\r\n\r\n#intl-stu-dashboard #univ-report-link-wrap input,\r\n#intl-stu-dashboard #univ-report-link-wrap select {\r\n  width: 100%;\r\n}\r\n\r\n\/* \ubaa8\ubc14\uc77c\uc5d0\uc11c\ub294 \uc790\ub3d9\uc73c\ub85c \ub450 \uc904\/\ud55c \uc904\ub85c \ub0b4\ub824\uac00\uac8c *\/\r\n@media (max-width: 800px) {\r\n  #intl-stu-dashboard #univ-report-link-wrap {\r\n    grid-template-columns: 1fr;  \/* \uc138\ub85c\ub85c \uc313\uae30 *\/\r\n  }\r\n}\r\n  \/* \uc0c1\ub2e8 \uc694\uc57d \uadf8\ub9ac\ub4dc \uae30\ubcf8: \ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c 3\uc5f4 \uad6c\uc870 *\/\r\n  #intl-stu-dashboard .summary-grid {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr 1fr;\r\n    grid-auto-rows: auto;\r\n    gap: 16px;\r\n    align-items: start;\r\n  }\r\n\r\n  \/* \uacf5\ud1b5 \uce74\ub4dc \uc2a4\ud0c0\uc77c *\/\r\n  #intl-stu-dashboard .summary-card {\r\n    background: #f7f9fb;\r\n    border-radius: 10px;\r\n    padding: 16px;\r\n    min-width: 0;\r\n  }\r\n\r\n  \/* 3\uac1c\ub144 \ucd94\uc774 \uce74\ub4dc: \uc704\uc5d0\uc11c \uc804\uccb4 \ud3ed \uc0ac\uc6a9 *\/\r\n  #intl-stu-dashboard .summary-card-wide {\r\n    grid-column: 1 \/ 4;\r\n  }\r\n\r\n  \/* \ub3c4\ub11b \uce74\ub4dc: \uac00\uc6b4\ub370 \uc815\ub82c + \ub3d9\uc77c \ud06c\uae30 *\/\r\n  #intl-stu-dashboard .donut-card {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: flex-start;\r\n  }\r\n\r\n  #intl-stu-dashboard .donut-card canvas {\r\n    width: 100% !important;\r\n    max-width: 240px;      \/* \uc5ec\uae30 \uc22b\uc790\ub85c \ud06c\uae30 \uc870\uc808 \uac00\ub2a5 *\/\r\n    height: auto !important;\r\n    display:block;\r\n  }\r\n\r\n  \/* \ud83d\udcf1 900px \uc774\ud558: \ud55c \uc904\uc5d0 \ud558\ub098\uc529 \uc138\ub85c\ub85c \uc313\uae30 *\/\r\n  @media (max-width: 900px) {\r\n    #intl-stu-dashboard {\r\n      padding: 16px;\r\n    }\r\n\r\n    #intl-stu-dashboard .summary-grid {\r\n      display: block;       \/* \uadf8\ub9ac\ub4dc \ubc84\ub9ac\uace0 \uc138\ub85c \uc2a4\ud0dd *\/\r\n    }\r\n\r\n    #intl-stu-dashboard .summary-card,\r\n    #intl-stu-dashboard .summary-card-wide {\r\n      grid-column: auto;\r\n      margin-bottom: 16px;\r\n    }\r\n  }\r\n\r\n  \/* \ud83d\udcf1 \ub354 \uc791\uc740 \ud654\uba74: \uae00\uc790\/\ud45c \uc870\uae08 \uc904\uc774\uae30 *\/\r\n  @media (max-width: 600px) {\r\n    #intl-stu-dashboard h2 {\r\n      font-size: 18px;\r\n    }\r\n    #intl-stu-dashboard h3 {\r\n      font-size: 15px;\r\n    }\r\n    #intl-stu-dashboard table {\r\n      font-size: 12px;\r\n    }\r\n  }\r\n\/* \uc0c1\uc138\uac80\uc0c9 \ud544\ud130 \uc804\uccb4 \ucee8\ud14c\uc774\ub108 *\/\r\n#intl-stu-dashboard .filter-row {\r\n  display: grid;\r\n  grid-template-columns: repeat(6, 1fr); \/* \uc785\ub825 \ud56d\ubaa9 6\uac1c \uade0\ub4f1 \ubd84\ubc30 *\/\r\n  gap: 12px;\r\n  margin-top: 16px;\r\n  width: 100%;\r\n  align-items: end;\r\n}\r\n\r\n\/* \uac01 \uc120\ud0dd\ubc15\uc2a4 *\/\r\n#intl-stu-dashboard .filter-row > div,\r\n#intl-stu-dashboard .filter-row select {\r\n  width: 100%;\r\n}\r\n\r\n\/* \ud655\uc778 \ubc84\ud2bc\ub3c4 \ub3d9\uc77c\ud55c \uc140\uc744 \ucc28\uc9c0\ud558\ub3c4\ub85d *\/\r\n#intl-stu-dashboard #confirmBtn {\r\n  width: 100%;\r\n  height: 40px;\r\n  border-radius: 8px;\r\n}\r\n\r\n\/* \ubaa8\ubc14\uc77c (\ub108\ube44 900px \uc774\ud558): \ub450 \uc5f4\ub85c *\/\r\n@media(max-width: 900px) {\r\n  #intl-stu-dashboard .filter-row {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n}\r\n\r\n\/* \ubaa8\ubc14\uc77c (600px \uc774\ud558): \ud55c \uc5f4\ub85c *\/\r\n@media(max-width: 600px) {\r\n  #intl-stu-dashboard .filter-row {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n\/* \uc0c1\uc138\uac80\uc0c9 \ud544\ud130 \ub77c\ubca8\uc744 \uac00\uc6b4\ub370 \uc815\ub82c *\/\r\n#intl-stu-dashboard .filter-row label {\r\n  display: block;\r\n  width: 100%;\r\n  text-align: center;\r\n}\r\n\r\n\/* \uc0c1\uc138\ud604\ud669 \ud45c \u2014 \ud14d\uc2a4\ud2b8 \uc815\ub82c \uaddc\uce59 *\/\r\n\r\n\/* 1) \uac00\uc6b4\ub370 \uc815\ub82c\ud574\uc57c \ud560 \uceec\ub7fc *\/\r\n#intl-stu-dashboard #dataTable td:nth-child(1),\r\n#intl-stu-dashboard #dataTable td:nth-child(2),\r\n#intl-stu-dashboard #dataTable td:nth-child(3),\r\n#intl-stu-dashboard #dataTable td:nth-child(4) {\r\n  text-align: center;\r\n}\r\n\r\n\/* 2) \uc22b\uc790 \ub370\uc774\ud130\ub294 \uc624\ub978\ucabd \uc815\ub82c *\/\r\n#intl-stu-dashboard #dataTable td:nth-child(5),\r\n#intl-stu-dashboard #dataTable td:nth-child(6),\r\n#intl-stu-dashboard #dataTable td:nth-child(7),\r\n#intl-stu-dashboard #dataTable td:nth-child(8),\r\n#intl-stu-dashboard #dataTable td:nth-child(9),\r\n#intl-stu-dashboard #dataTable td:nth-child(10) {\r\n  text-align: right;\r\n  padding-right: 10px;\r\n}\r\n\/* ---------- \uc0c1\uc138\ud604\ud669 \ud14c\uc774\ube14 \uc2a4\ud0c0\uc77c ---------- *\/\r\n\r\n\/* \uc9dd\uc218 row \uc74c\uc601 *\/\r\n#intl-stu-dashboard #dataTable tbody tr:nth-child(even) {\r\n  background-color: #fafafa;\r\n}\r\n\r\n\/* \ud640\uc218 row \uae30\ubcf8 *\/\r\n#intl-stu-dashboard #dataTable tbody tr:nth-child(odd) {\r\n  background-color: #ffffff;\r\n}\r\n\r\n\/* hover \uac15\uc870 *\/\r\n#intl-stu-dashboard #dataTable tbody tr:hover {\r\n  background-color: #eef5ff !important;\r\n  transition: background-color .15s ease;\r\n}\r\n\r\n\/* \ud569\uacc4 row \uac15\uc870 *\/\r\n#intl-stu-dashboard #dataTable .total-row {\r\n  background-color: #fff3cd;\r\n  font-weight: 600;\r\n}\r\n\r\n\/* ---------- \ud5e4\ub354 \uace0\uc815(sticky header) ---------- *\/\r\n\r\n\/* \ud14c\uc774\ube14\uc744 \uac10\uc2f8\ub294 div\uc5d0 \uc774\ubbf8 overflow:auto, max-height \uac00 \uc788\ub2e4\uace0 \uac00\uc815 *\/\r\n#intl-stu-dashboard #dataTable thead th {\r\n  position: sticky;\r\n  top: 0;\r\n  background-color: #eef3ff;\r\n  z-index: 2;\r\n}\r\n\r\n<\/style>\r\n<style>\r\n  #intl-stu-dashboard h2 {\r\n    margin-top: 0;\r\n    margin-bottom: 4px;\r\n  }\r\n  #intl-stu-dashboard p {\r\n    margin-top: 0;\r\n  }\r\n<\/style>\r\n\r\n<section id=\"intl-stu-dashboard\" style=\"\r\n  font-family: Pretendard, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  max-width:1200px;\r\n  margin:40px auto;\r\n  padding:28px 28px 32px;\r\n  background:#ffffff;\r\n  border-radius:24px;\r\n  box-shadow:0 18px 40px rgba(15,23,42,0.08);\r\n  border:1px solid #f1f5f9;\r\n\">\r\n\r\n  <!--h2 style=\"margin:0 0 4px;\">\ud83c\uddf0\ud83c\uddf7 \uad6d\ub0b4 \uace0\ub4f1\uad50\uc721 \uc678\uad6d\uc778 \uc720\ud559\uc0dd \uc778\ud130\ub799\ud2f0\ube0c \ub300\uc2dc\ubcf4\ub4dc<\/h2-->\r\n  <p style=\"color:#555;margin:0 0 16px;\">\ub300\ud559\uc815\ubcf4\uacf5\uc2dc\uc790\ub8cc \uc911 2023\ub144 ~ 2025\ub144 \uad6d\ub0b4 \ub300\ud559\ubcc4 \uc678\uad6d\uc778\ud604\ud669\uc744 \ud1a0\ub300\ub85c \uc791\uc131\ub428<\/p>\r\n  <p id=\"latestYearInfo\" style=\"color:#777;margin:0 0 20px;font-size:13px;\"><\/p>\r\n\r\n  <!-- ===== \uc804\uccb4 \ud604\ud669 ===== -->\r\n<div class=\"summary-grid\">\r\n  <!-- 3\uac1c\ub144 \uc120\ud615 \uadf8\ub798\ud504 \uce74\ub4dc -->\r\n  <div class=\"summary-card summary-card-wide\">\r\n    <h3 style=\"margin:0 0 8px;\">\ucd5c\uadfc 3\uac1c\ub144(2023~2025\ub144) \uc720\ud559\uc0dd \uc218 \ucd94\uc774<\/h3>\r\n    <canvas id=\"trendChart\" height=\"90\"><\/canvas>\r\n  <\/div>\r\n\r\n  <!-- \ud559\uc704 \ub3c4\ub11b -->\r\n  <div class=\"summary-card donut-card\">\r\n    <h3 style=\"margin:0 0 8px;\">2025\ub144 \ud559\uc704\uacfc\uc815\ubcc4 \uc720\ud559\uc0dd\uc218<\/h3>\r\n    <canvas id=\"degreePie\"><\/canvas>\r\n  <\/div>\r\n\r\n  <!-- \uc720\uc785\uad6d \ub3c4\ub11b -->\r\n  <div class=\"summary-card donut-card\">\r\n    <h3 style=\"margin:0 0 8px;\">2025\ub144 \uc720\ud559\uc0dd \ucd9c\uc2e0\uad6d TOP5<\/h3>\r\n    <canvas id=\"topCountryPie\"><\/canvas>\r\n  <\/div>\r\n\r\n  <!-- \uc9c0\uc5ed \ub3c4\ub11b -->\r\n  <div class=\"summary-card donut-card\">\r\n    <h3 style=\"margin:0 0 8px;\">2025\ub144 \uc9c0\uc5ed\ubcc4 \uc720\ud559\uc0dd \uc218<\/h3>\r\n    <canvas id=\"regionPie\"><\/canvas>\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n  <!-- ===== \ud544\ud130 \uc601\uc5ed ===== -->\r\n<details open=\"\" style=\"margin-top:24px;\">\r\n  <summary><strong>\ub300\ud559\ubcc4 \uad6d\uac00\ubcc4 \uc720\ud559\uc0dd \uc0c1\uc138 \uac80\uc0c9 <\/strong><\/summary>\r\n  <div class=\"filter-row\">\r\n    <div>\r\n      <label>\uc5f0\ub3c4<\/label><br\/>\r\n      <select id=\"yearSelect\" style=\"min-width:110px;\"><\/select>\r\n    <\/div>\r\n    <div>\r\n      <label>\uc9c0\uc5ed<\/label><br\/>\r\n      <select id=\"regionSelect\" style=\"min-width:120px;\">\r\n        <option value=\"\">(\uc804\uccb4)<\/option>\r\n      <\/select>\r\n    <\/div>\r\n    <div>\r\n      <label>\ub300\ud559<\/label><br\/>\r\n      <select id=\"univSelect\" style=\"min-width:200px;\">\r\n        <option value=\"\">(\uc804\uccb4)<\/option>\r\n      <\/select>\r\n    <\/div>\r\n    <div>\r\n      <label>\ucd9c\uc2e0\uad6d\uac00<\/label><br\/>\r\n      <select id=\"countrySelect\" style=\"min-width:140px;\">\r\n        <option value=\"\">(\uc804\uccb4)<\/option>\r\n      <\/select>\r\n    <\/div>\r\n    <div>\r\n      <label>\uc720\ud559\uacfc\uc815<\/label><br\/>\r\n      <select id=\"typeSelect\" style=\"min-width:140px;\">\r\n        <option value=\"\">(\uc804\uccb4)<\/option>\r\n        <option value=\"\uc5b4\ud559\uc5f0\uc218\uc0dd\">\uc5b4\ud559\uc5f0\uc218\uc0dd<\/option>\r\n        <option value=\"\ud559\ubd80\uc0dd\">\ud559\ubd80\uc0dd<\/option>\r\n        <option value=\"\uc11d\uc0ac\uacfc\uc815\">\uc11d\uc0ac\uacfc\uc815<\/option>\r\n        <option value=\"\ubc15\uc0ac\uacfc\uc815\">\ubc15\uc0ac\uacfc\uc815<\/option>\r\n        <option value=\"\uae30\ud0c0\uc5f0\uc218\">\uae30\ud0c0\uc5f0\uc218<\/option>\r\n      <\/select>\r\n    <\/div>\r\n    <div style=\"display:flex;align-items:flex-end;\">\r\n      <button id=\"confirmBtn\" style=\"height:36px;padding:0 16px;border:none;border-radius:8px;background:#245fff;color:#fff;cursor:pointer;\">\r\n        \ud655\uc778\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n  <div style=\"color:#777;margin-top:6px;font-size:12px;\">\r\n    \u203b \uc5f0\ub3c4 \uc678\uc5d0 <b>\uc9c0\uc5ed\u00b7\uad6d\uac00\u00b7\ub300\ud559\u00b7\uc720\ud615 \uc911 1 \uac00\uc9c0 \uc774\uc0c1<\/b>\uc744 \uc120\ud0dd\ud558\uba74 \uc870\ud68c\ub429\ub2c8\ub2e4. (\uc5f0\ub3c4\ub9cc \uc120\ud0dd \ud6c4 \uc870\ud68c\ub294 \uc81c\ud55c)<br\/> \u203b \uc9c0\uc5ed\uc744 \uc11c\uc6b8\ub85c \uc14b\ud305\ud560 \uacbd\uc6b0 \ub370\uc774\ud130\uc591\uc774 \ub9ce\uc544 2\uac1c \uc774\uc0c1\uc744 \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4.\r\n  <\/div>\r\n<\/details>\r\n\r\n  <!-- ===== \ub300\ud559\ubcc4 \uc720\ud559\uc0dd \ud604\ud669 \ubcf4\uace0\uc11c \ub9c1\ud06c ===== -->\r\n  <section style=\"margin-top:26px;\">\r\n    <strong>\u25bc \ub300\ud559\ubcc4 \uc720\ud559\uc0dd \ud604\ud669 \ubcf4\uace0\uc11c<\/strong>\r\n    <p style=\"margin:0 0 12px; font-size:13px; color:#555;\">\r\n      \ub300\ud559\uba85\uc744 2\uc790 \uc774\uc0c1 \uc785\ub825\ud574 \ud574\ub2f9 \ub300\ud559\uc744 \uc120\ud0dd\ud55c \ub4a4 <b>\ubcf4\uace0\uc11c \ubcf4\uae30<\/b> \ubc84\ud2bc\uc744 \ub204\ub974\uba74,\r\n      \ub300\ud559\ubcc4 \uc678\uad6d\uc778 \uc720\ud559\uc0dd \uc885\ud569 \ubcf4\uace0\uc11c \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\r\n    <\/p>\r\n\r\n<div id=\"univ-report-link-wrap\">\r\n  <div class=\"report-field\">\r\n    <label for=\"reportUnivSearch\">\ub300\ud559\uba85 \uc785\ub825<\/label>\r\n    <input id=\"reportUnivSearch\" type=\"text\" placeholder=\"\uc608: \uc11c\uc6b8 (2\uc790 \uc774\uc0c1 \uc785\ub825)\"\/>\r\n  <\/div>\r\n\r\n  <div class=\"report-field\">\r\n    <label for=\"reportUnivSelect\">\ub300\ud559 \uc120\ud0dd<\/label>\r\n    <select id=\"reportUnivSelect\">\r\n      <option value=\"\">\ub300\ud559\uc744 \uc120\ud0dd\ud558\uc138\uc694<\/option>\r\n      <!-- JS\uc5d0\uc11c \uc804\uccb4 \ub300\ud559 \ubaa9\ub85d\uc73c\ub85c \ucc44\uc6cc\uc9d0 -->\r\n    <\/select>\r\n  <\/div>\r\n\r\n  <button id=\"reportUnivBtn\">\ubcf4\uace0\uc11c \ubcf4\uae30<\/button>\r\n<\/div>\r\n\r\n    <p style=\"margin:6px 0 0; font-size:12px; color:#777;\">\r\n      \uc608) \u2018\ud638\uc11c\u2019\ub97c \uc785\ub825 \ud6c4 <b>\ud638\uc11c\ub300\ud559\uad50<\/b>\ub97c \uc120\ud0dd\ud558\uace0 <b>\ubcf4\uace0\uc11c \ubcf4\uae30<\/b>\ub97c \ub204\ub974\uba74  \r\n      <code>\/univ-report\/?univ=\ud638\uc11c\ub300\ud559\uad50<\/code> \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\r\n    <\/p>\r\n  <\/section>\r\n\r\n\r\n  <!-- ===== \uc0c1\uc138 \uacb0\uacfc (\ucd08\uae30 \uc228\uae40) ===== -->\r\n  <div id=\"resultsWrap\" style=\"display:none;margin-top:24px;\">\r\n    <h4 style=\"margin:0 0 10px;\">\ud83d\udcc8 \ud604\ud669\uc9c0\ud45c<\/h4>\r\n    <div id=\"viewModeWrap\" style=\"margin-bottom:10px;\">\r\n      <label style=\"margin-right:10px; font-size:14px;\">\r\n        <input type=\"radio\" name=\"viewMode\" value=\"country\" checked=\"checked\"\/>\r\n        \ucd9c\uc2e0\uad6d\uac00\ubcc4\r\n      <\/label>\r\n      <label style=\"margin-right:10px; font-size:14px;\">\r\n        <input type=\"radio\" name=\"viewMode\" value=\"univ\"\/>\r\n        \ub300\ud559\ubcc4\r\n      <\/label>\r\n    <\/div>\r\n\r\n    <div style=\"background:#f7f9fb;border-radius:10px;padding:16px;margin-bottom:18px;\">\r\n      <canvas id=\"detailChart\" height=\"110\"><\/canvas>\r\n    <\/div>\r\n\r\n    <h4 style=\"margin:0 0 10px;\">\ud83d\udccb \uc0c1\uc138\ud604\ud669<\/h4>\r\n    <div style=\"overflow:auto; max-height:600px; border:1px solid #eee;border-radius:10px;\">\r\n      <table id=\"dataTable\" style=\"width:100%;border-collapse:collapse;font-size:13px;\">\r\n        <thead style=\"background:#eef3ff;\">\r\n          <tr>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\uc5f0\ub3c4<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\uc9c0\uc5ed<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\ub300\ud559\uba85<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\ucd9c\uc2e0\uad6d\uac00<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\uc5b4\ud559\uc5f0\uc218\uc0dd<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\ud559\ubd80\uc0dd<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\uc11d\uc0ac\uacfc\uc815<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\ubc15\uc0ac\uacfc\uc815<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\uae30\ud0c0\uc5f0\uc218<\/th>\r\n            <th style=\"padding:8px;border-bottom:1px solid #ddd;\">\ud569\uacc4<\/th>\r\n          <\/tr>\r\n        <\/thead>\r\n        <tbody><\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- \ub77c\uc774\ube0c\ub7ec\ub9ac -->\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/papaparse@5.4.1\/papaparse.min.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chartjs-plugin-datalabels@2\"><\/script>\r\n<script>\r\nconst CSV_URL = \"https:\/\/www.spotlightuniv.com\/\/wp-content\/uploads\/foreign_students.csv\"; \/\/ \u2605 \uc2e4\uc81c CSV \uacbd\ub85c\ub85c \uc218\uc815\r\n\r\nlet RAW = [];\r\nlet charts = { trend:null, degree:null, country:null, region:null, detail:null };\r\nlet LAST_FILTERED = [];  \/\/ \ud83d\udd39\ub9c8\uc9c0\ub9c9 \uc0c1\uc138\uc870\ud68c \uacb0\uacfc \uc800\uc7a5\r\nlet ALL_UNIVS = [];     \/\/ \ud83d\udd39\ub300\ud559 \uc804\uccb4 \ubaa9\ub85d (\ubcf4\uace0\uc11c \ub9c1\ud06c\uc5d0\uc11c \uc0ac\uc6a9)\r\n\r\nconst numCols = [\"\uc5b4\ud559\uc5f0\uc218\uc0dd\",\"\ud559\ubd80\uc0dd\",\"\uc11d\uc0ac\uacfc\uc815\",\"\ubc15\uc0ac\uacfc\uc815\",\"\uae30\ud0c0\uc5f0\uc218\",\"\ud569\uacc4\"];\r\n\r\nChart.register(ChartDataLabels);\r\n\r\n\/\/ CSV \ub85c\ub529\r\nPapa.parse(CSV_URL, {\r\n  download: true,\r\n  header: true,\r\n  complete: (res)=>{\r\n    RAW = res.data.map(row=>{\r\n      numCols.forEach(k=>{\r\n        if (k in row) {\r\n          row[k] = Number(String(row[k]).replace(\/,\/g,\"\")) || 0;\r\n        }\r\n      });\r\n      return row;\r\n    });\r\n    initFilters();\r\n    renderSummary();\r\n    bindEvents();\r\n    initReportLinkBox();   \/\/ \ud83d\udd39\ub300\ud559\ubcc4 \ubcf4\uace0\uc11c \ub9c1\ud06c \ubc15\uc2a4 \ud65c\uc131\ud654\r\n  }\r\n});\r\n\r\n\/\/ \ud544\ud130 \ucd08\uae30\ud654\r\nfunction initFilters(){\r\n  const years = [...new Set(RAW.map(d=>d[\"\uc5f0\ub3c4\"]))].filter(Boolean).map(Number).sort((a,b)=>a-b);\r\n  const $y = document.getElementById(\"yearSelect\");\r\n  $y.innerHTML = years.map(y=>`<option value=\"${y}\">${y}`).join(\"\");\r\n  $y.value = years[years.length-1];\r\n\r\n  \/\/ \ucd5c\uc2e0\uc5f0\ub3c4 \uc815\ubcf4 \ud14d\uc2a4\ud2b8\r\n  const latestText = document.getElementById(\"latestYearInfo\");\r\n  if (latestText) {\r\n    latestText.textContent = `\u203b \ucd5c\uc2e0\uc5f0\ub3c4 \uae30\uc900: ${years[years.length-1]}\ub144 \ud1b5\uacc4`;\r\n  }\r\n\r\n  const regions = [...new Set(RAW.map(d=>d[\"\uc9c0\uc5ed\"]))].filter(Boolean).sort();\r\n  document.getElementById(\"regionSelect\").innerHTML =\r\n    `<option value=\"\">(\uc804\uccb4)` + regions.map(r=>`<option value=\"${r}\">${r}`).join(\"\");\r\n\r\n  const countries = [...new Set(RAW.map(d=>d[\"\ucd9c\uc2e0\uad6d\uac00\"]))].filter(Boolean).sort();\r\n  document.getElementById(\"countrySelect\").innerHTML =\r\n    `<option value=\"\">(\uc804\uccb4)` + countries.map(c=>`<option value=\"${c}\">${c}`).join(\"\");\r\n\r\n  const univs = [...new Set(RAW.map(d=>d[\"\ub300\ud559\uba85\"]))].filter(Boolean).sort();\r\n  ALL_UNIVS = univs;   \/\/ \ud83d\udd39\ubcf4\uace0\uc11c \ub9c1\ud06c\uc5d0\uc11c\ub3c4 \uc0ac\uc6a9\ud560 \uc804\uccb4 \ub300\ud559 \ubaa9\ub85d\r\n\r\n  \/\/ \uc0c1\uc138\uac80\uc0c9\uc6a9 \ub300\ud559 \ud544\ud130\r\n  document.getElementById(\"univSelect\").innerHTML =\r\n    `<option value=\"\">(\uc804\uccb4)` + univs.map(u=>`<option value=\"${u}\">${u}`).join(\"\");\r\n\r\n  \/\/ \ubcf4\uace0\uc11c \ub9c1\ud06c\uc6a9 \ub300\ud559 \uc120\ud0dd \uc140\ub809\ud2b8 \uae30\ubcf8 \ucc44\uc6b0\uae30\r\n  const reportSel = document.getElementById(\"reportUnivSelect\");\r\n  if (reportSel) {\r\n    reportSel.innerHTML =\r\n      `<option value=\"\">\ub300\ud559\uc744 \uc120\ud0dd\ud558\uc138\uc694` + univs.map(u=>`<option value=\"${u}\">${u}`).join(\"\");\r\n  }\r\n} \r\n\r\n\/\/ \uc774\ubca4\ud2b8 \ubc14\uc778\ub529\r\nfunction bindEvents(){\r\n  const confirmBtn = document.getElementById(\"confirmBtn\");\r\n\r\n  \/\/ \u2705 \ud655\uc778 \ubc84\ud2bc: \ud544\ud130 \uc801\uc6a9 + \ud45c + \ucc28\ud2b8 \uc804\uccb4 \uac31\uc2e0\r\n  confirmBtn.addEventListener(\"click\", ()=>{\r\n    const y = document.getElementById(\"yearSelect\").value;\r\n    const r = document.getElementById(\"regionSelect\").value;\r\n    const c = document.getElementById(\"countrySelect\").value;\r\n    const u = document.getElementById(\"univSelect\").value;\r\n    const t = document.getElementById(\"typeSelect\").value;\r\n\r\n    \/\/ \uc120\ud0dd\ub41c \ud544\ud130 \uc218 \uacc4\uc0b0 (\uc5f0\ub3c4\u00b7\uc9c0\uc5ed\u00b7\uad6d\uac00\u00b7\ub300\ud559\u00b7\uc720\ud615 \uc911 \uac12\uc774 \uc788\ub294 \uac83)\r\n    const selectedCount = [y, r, c, u, t].filter(v => v && String(v).trim() !== \"\").length;\r\n\r\n    if (selectedCount < 2) {\r\n      alert(\"\uc5f0\ub3c4 \uc678\uc5d0 \uc9c0\uc5ed\u00b7\uad6d\uac00\u00b7\ub300\ud559\u00b7\uc720\ud615 \uc911 \ucd5c\uc18c 1\uac1c \uc774\uc0c1\uc744 \ucd94\uac00\ub85c \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.\");\r\n      return;\r\n    }\r\n\r\n    renderDetail();\r\n    document.getElementById(\"resultsWrap\").style.display = \"block\";\r\n    document.getElementById(\"resultsWrap\").scrollIntoView({behavior:\"smooth\", block:\"start\"});\r\n  });\r\n\r\n  \/\/ \u2705 \ucd9c\uc2e0\uad6d\uac00\ubcc4 \/ \ub300\ud559\ubcc4 \ud1a0\uae00 \uc2dc \u2192 \ud655\uc778 \ubc84\ud2bc \uc5c6\uc774 \ubc14\ub85c \ucc28\ud2b8\ub9cc \uac31\uc2e0\r\n  document.querySelectorAll('input[name=\"viewMode\"]').forEach(el=>{\r\n    el.addEventListener(\"change\", ()=>{\r\n      if (!LAST_FILTERED || !LAST_FILTERED.length) return; \/\/ \uc544\uc9c1 \uc870\ud68c \uc804\uc774\uba74 \ubb34\uc2dc\r\n      updateDetailChart();\r\n    });\r\n  });\r\n\r\n  \/\/ \u2705 \uc720\ud559\uacfc\uc815(\uc804\uccb4\/\ud559\ubd80\/\uc11d\uc0ac\/\u2026) \ubcc0\uacbd \uc2dc\ub3c4 \ubc14\ub85c \ucc28\ud2b8\ub9cc \uac31\uc2e0\r\n  document.getElementById(\"typeSelect\").addEventListener(\"change\", ()=>{\r\n    if (!LAST_FILTERED || !LAST_FILTERED.length) return;\r\n    updateDetailChart();\r\n  });\r\n}\r\n\r\n\/\/ \ub300\ud559\ubcc4 \ubcf4\uace0\uc11c \ub9c1\ud06c \ubc15\uc2a4 \ucd08\uae30\ud654\r\nfunction initReportLinkBox(){\r\n  const searchInput = document.getElementById(\"reportUnivSearch\");\r\n  const sel         = document.getElementById(\"reportUnivSelect\");\r\n  const btn         = document.getElementById(\"reportUnivBtn\");\r\n  if (!searchInput || !sel || !btn) return;\r\n\r\n  \/\/ \uc140\ub809\ud2b8 \ucc44\uc6b0\uae30 \uc720\ud2f8\r\n  function fillSelect(list){\r\n    const prev = sel.value;\r\n    sel.innerHTML =\r\n      `<option value=\"\">\ub300\ud559\uc744 \uc120\ud0dd\ud558\uc138\uc694` +\r\n      list.map(u=>`<option value=\"${u}\">${u}`).join(\"\");\r\n    if (prev && list.includes(prev)) sel.value = prev;\r\n  }\r\n\r\n  \/\/ \ucd5c\ucd08 \uc804\uccb4 \ubaa9\ub85d\r\n  fillSelect(ALL_UNIVS);\r\n\r\n  \/\/ \ud83d\udd0e 2\uc790 \uc774\uc0c1 \uc785\ub825 \uc2dc \ud544\ud130\ub9c1\r\n  searchInput.addEventListener(\"input\", ()=>{\r\n    const q = searchInput.value.trim();\r\n    if (q.length < 2){\r\n      fillSelect(ALL_UNIVS);\r\n      return;\r\n    }\r\n    const filtered = ALL_UNIVS.filter(name => name.includes(q));\r\n    fillSelect(filtered);\r\n  });\r\n\r\n  \/\/ \u25b6 \ubcf4\uace0\uc11c \ubcf4\uae30 \ubc84\ud2bc: \uc120\ud0dd\ub41c \ub300\ud559\uc73c\ub85c univ-report \ud398\uc774\uc9c0 \uc774\ub3d9\r\nbtn.addEventListener(\"click\", ()=>{\r\n  const univName = sel.value;\r\n  if (!univName){\r\n    alert(\"\ubcf4\uace0\uc11c\ub97c \ubcfc \ub300\ud559\uc744 \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.\");\r\n    return;\r\n  }\r\n\r\n  \/\/ 1) \uc120\ud0dd\ud55c \ub300\ud559\uba85\uc744 \uc138\uc158 \uc2a4\ud1a0\ub9ac\uc9c0\uc5d0 \uc800\uc7a5\r\n  try {\r\n    sessionStorage.setItem(\"univInitial\", univName);\r\n  } catch(e) {\r\n    \/\/ \uc2a4\ud1a0\ub9ac\uc9c0 \uc0ac\uc6a9 \ubd88\uac00\ud55c \ud658\uacbd\uc774\uba74 \uadf8\ub0e5 \ubb34\uc2dc\r\n  }\r\n\r\n  \/\/ 2) \ucffc\ub9ac \uc5c6\uc774 \/univ-report\/ \ub9cc \uc5f4\uae30\r\n  const baseUrl = \"https:\/\/www.spotlightuniv.com\/univ-report\/\";\r\n  window.open(baseUrl, \"_blank\");   \/\/ \uc0c8 \ud0ed\r\n  \/\/ \uac19\uc740 \ud0ed\uc5d0\uc11c \uc5f4\uace0 \uc2f6\uc73c\uba74:\r\n  \/\/ window.location.href = baseUrl;\r\n});\r\n}\r\n\r\n\/\/ \uc804\uccb4 \uc694\uc57d \ub80c\ub354\r\nfunction renderSummary(){\r\n  \/\/ \uc5f0\ub3c4\ubcc4 \ud569\uacc4 + \uc720\ud615\ubcc4 \ud569\uacc4\r\n  const yearsAll = [...new Set(RAW.map(d=>d[\"\uc5f0\ub3c4\"]))].filter(Boolean).map(Number).sort((a,b)=>a-b);\r\n  const byYearTotal = groupSum(RAW, d=>String(d[\"\uc5f0\ub3c4\"]), \"\ud569\uacc4\");\r\n  const byYearLang  = groupSum(RAW, d=>String(d[\"\uc5f0\ub3c4\"]), \"\uc5b4\ud559\uc5f0\uc218\uc0dd\");\r\n  const byYearUnder = groupSum(RAW, d=>String(d[\"\uc5f0\ub3c4\"]), \"\ud559\ubd80\uc0dd\");\r\n  const byYearM     = groupSum(RAW, d=>String(d[\"\uc5f0\ub3c4\"]), \"\uc11d\uc0ac\uacfc\uc815\");\r\n  const byYearD     = groupSum(RAW, d=>String(d[\"\uc5f0\ub3c4\"]), \"\ubc15\uc0ac\uacfc\uc815\");\r\n\r\n  const last3 = yearsAll.slice(-3);\r\n  const labels3 = last3.map(String);\r\n\r\n  const datasets = [\r\n    { label:\"\ud569\uacc4\",      data:last3.map(y=>byYearTotal[String(y)]||0) },\r\n    { label:\"\ud559\ubd80\uc0dd\",    data:last3.map(y=>byYearUnder[String(y)]||0) },\r\n    { label:\"\uc11d\uc0ac\uacfc\uc815\",  data:last3.map(y=>byYearM[String(y)]||0) },\r\n    { label:\"\ubc15\uc0ac\uacfc\uc815\",  data:last3.map(y=>byYearD[String(y)]||0) },\r\n    { label:\"\uc5b4\ud559\uc5f0\uc218\uc0dd\",data:last3.map(y=>byYearLang[String(y)]||0) }\r\n  ];\r\n  drawTrendLine(\"trendChart\", labels3, datasets);\r\n\r\n  const latestYear = last3[last3.length-1] || yearsAll[yearsAll.length-1];\r\n  const latestRows = RAW.filter(d=>Number(d[\"\uc5f0\ub3c4\"]) === Number(latestYear));\r\n\r\n  \/\/ \ud559\uc704\/\uc720\ud615\ubcc4 \ub3c4\ub11b: \ud559\ubd80, \uc11d\uc0ac, \ubc15\uc0ac, \uc5b4\ud559, \uae30\ud0c0 5\uac1c\r\n  const under = sum(latestRows, d=>d[\"\ud559\ubd80\uc0dd\"]);\r\n  const master = sum(latestRows, d=>d[\"\uc11d\uc0ac\uacfc\uc815\"]);\r\n  const doctor = sum(latestRows, d=>d[\"\ubc15\uc0ac\uacfc\uc815\"]);\r\n  const lang   = sum(latestRows, d=>d[\"\uc5b4\ud559\uc5f0\uc218\uc0dd\"]);\r\n  const other  = sum(latestRows, d=>d[\"\uae30\ud0c0\uc5f0\uc218\"]);\r\n  drawDoughnut(\r\n    \"degreePie\",\r\n    [\"\ud559\ubd80\uc0dd\",\"\uc11d\uc0ac\uacfc\uc815\",\"\ubc15\uc0ac\uacfc\uc815\",\"\uc5b4\ud559\uc5f0\uc218\uc0dd\",\"\uae30\ud0c0\uc5f0\uc218\"],\r\n    [under, master, doctor, lang, other]\r\n  );\r\n\r\n  \/\/ \uc720\uc785\uad6d TOP5 + Others\r\n  const byCountry = groupSum(latestRows, d=>d[\"\ucd9c\uc2e0\uad6d\uac00\"] || \"\uae30\ud0c0\", \"\ud569\uacc4\");\r\n  const rankedC = Object.entries(byCountry).sort((a,b)=>b[1]-a[1]);\r\n  const top5 = rankedC.slice(0,5);\r\n  const rest = rankedC.slice(5).reduce((s,[,v])=>s+v, 0);\r\n  const countryLabels = [...top5.map(([k])=>k), \"Others\"];\r\n  const countryVals = [...top5.map(([,v])=>v), rest];\r\n  drawDoughnut(\"topCountryPie\", countryLabels, countryVals);\r\n\r\n  \/\/ \uc9c0\uc5ed\ubcc4 TOP5 + Others\r\n  const byRegion = groupSum(latestRows, d=>d[\"\uc9c0\uc5ed\"] || \"\uae30\ud0c0\", \"\ud569\uacc4\");\r\n  const rankedR = Object.entries(byRegion).sort((a,b)=>b[1]-a[1]);\r\n  const top5R = rankedR.slice(0,5);\r\n  const restR = rankedR.slice(5).reduce((s,[,v])=>s+v, 0);\r\n  const regionLabels = [...top5R.map(([k])=>k), \"Others\"];\r\n  const regionVals = [...top5R.map(([,v])=>v), restR];\r\n  drawDoughnut(\"regionPie\", regionLabels, regionVals);\r\n}\r\n\r\n\/\/ \uc0c1\uc138 \ub80c\ub354 (\ud655\uc778 \ubc84\ud2bc)\r\n\/\/ \uc0c1\uc138 \ub80c\ub354 (\ud655\uc778 \ubc84\ud2bc)\r\nfunction renderDetail(){\r\n  const y = document.getElementById(\"yearSelect\").value;\r\n  const r = document.getElementById(\"regionSelect\").value;\r\n  const c = document.getElementById(\"countrySelect\").value;\r\n  const u = document.getElementById(\"univSelect\").value;\r\n  const t = document.getElementById(\"typeSelect\").value;\r\n\r\n  \/\/ 1) \ud544\ud130 \uc801\uc6a9\r\n  let filtered = RAW.filter(d=>{\r\n    return (!y || String(d[\"\uc5f0\ub3c4\"])===String(y))\r\n        && (!r || d[\"\uc9c0\uc5ed\"]===r)\r\n        && (!c || d[\"\ucd9c\uc2e0\uad6d\uac00\"]===c)\r\n        && (!u || d[\"\ub300\ud559\uba85\"]===u);\r\n  });\r\n\r\n  \/\/ \ud83d\udd39\ub9c8\uc9c0\ub9c9 \uc870\ud68c \uacb0\uacfc \uc800\uc7a5 \u2192 \uc774\ud6c4 viewMode\/\uc720\ud615\ub9cc \ubc14\ub014 \ub54c \uc7ac\uc0ac\uc6a9\r\n  LAST_FILTERED = filtered;\r\n\r\n  \/\/ 2) \ud45c \ucc44\uc6b0\uae30\r\n  const tbody = document.querySelector(\"#dataTable tbody\");\r\n  tbody.innerHTML = \"\";\r\n  filtered.forEach(rw=>{\r\n    tbody.innerHTML += `\r\n      <tr>\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\uc5f0\ub3c4\"]||\"\"}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\uc9c0\uc5ed\"]||\"\"}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\ub300\ud559\uba85\"]||\"\"}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\ucd9c\uc2e0\uad6d\uac00\"]||\"\"}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\uc5b4\ud559\uc5f0\uc218\uc0dd\"]}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\ud559\ubd80\uc0dd\"]}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\uc11d\uc0ac\uacfc\uc815\"]}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\ubc15\uc0ac\uacfc\uc815\"]}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\uae30\ud0c0\uc5f0\uc218\"]}\r\n        <td style=\"padding:6px 8px;border-bottom:1px solid #eee;\">${rw[\"\ud569\uacc4\"]}\r\n      `;\r\n  });\r\n\r\n  \/\/ 3) \ucc28\ud2b8 \uac31\uc2e0 (\ud604\uc7ac \ud544\ud130 \uae30\uc900\uc73c\ub85c)\r\n  updateDetailChart();\r\n}\r\n\r\n\/\/ \uc0c1\uc138 \ucc28\ud2b8\ub9cc \uac31\uc2e0 (viewMode \/ \uc720\ud615 \ubc14\ub014 \ub54c \uc7ac\uc0ac\uc6a9)\r\nfunction updateDetailChart(){\r\n  if (!LAST_FILTERED || !LAST_FILTERED.length) return;\r\n\r\n  const t = document.getElementById(\"typeSelect\").value;\r\n  const viewMode = document.querySelector('input[name=\"viewMode\"]:checked').value;\r\n\r\n  \/\/ \uadf8\ub8f9 \uae30\uc900: \ucd9c\uc2e0\uad6d\uac00 \/ \ub300\ud559\uba85\r\n  let groupKey = \"\ucd9c\uc2e0\uad6d\uac00\";  \/\/ \uae30\ubcf8\r\n  if (viewMode === \"univ\") groupKey = \"\ub300\ud559\uba85\";\r\n\r\n  \/\/ \uac12 \uc120\ud0dd (\uc720\ud615 \uc120\ud0dd)\r\n  const valueKey = t || \"\ud569\uacc4\";\r\n\r\n  const byGroup = groupSum(LAST_FILTERED, d=>d[groupKey] || \"\uae30\ud0c0\", valueKey);\r\n  const ranked = Object.entries(byGroup).sort((a,b)=>b[1]-a[1]).slice(0,20);\r\n  const labels = ranked.map(([k])=>k);\r\n  const vals   = ranked.map(([,v])=>v);\r\n\r\n  drawBar(\"detailChart\", labels, vals, `${groupKey}\ubcc4 ${valueKey}`);\r\n}\r\n\r\n\r\n\r\n\/\/ \uc720\ud2f8\r\nfunction sum(rows, fn){ return rows.reduce((s,d)=>s + (fn(d)||0), 0); }\r\nfunction groupSum(rows, keyFn, col){\r\n  const m = {};\r\n  rows.forEach(d=>{\r\n    const k = keyFn(d);\r\n    const v = d[col] || 0;\r\n    m[k] = (m[k]||0) + v;\r\n  });\r\n  return m;\r\n}\r\n\r\n\/\/ \uacf5\ud1b5 datalabels \uc635\uc158\r\nconst baseDatalabels = {\r\n  anchor: 'end',\r\n  align: 'top',\r\n  clamp: true,\r\n  formatter: (v)=> v ? v.toLocaleString() : '',\r\n  font: { size: 9 }\r\n};\r\n\r\nfunction destroyChart(ch){ if (ch) ch.destroy(); }\r\n\r\n\/\/ 3\uac1c\ub144 \uc120\ud615\uadf8\ub798\ud504 (5\uac1c \ud56d\ubaa9)\r\nfunction drawTrendLine(id, labels, datasets){\r\n  const ctx = document.getElementById(id).getContext(\"2d\");\r\n  destroyChart(charts.trend);\r\n  charts.trend = new Chart(ctx,{\r\n    type:'line',\r\n    data:{\r\n      labels,\r\n      datasets: datasets.map(ds=>({\r\n        label: ds.label,\r\n        data: ds.data,\r\n        tension: 0.2\r\n      }))\r\n    },\r\n    options:{\r\n      responsive:true,\r\n      plugins:{\r\n        legend:{ position:'bottom' },\r\n        datalabels: baseDatalabels\r\n      },\r\n      scales:{ y:{ beginAtZero:true } }\r\n    }\r\n  });\r\n}\r\n\r\n\/\/ \uc0c1\uc138\/\ub9c9\ub300\ud615\r\nfunction drawBar(id, labels, values, label){\r\n  const ctx = document.getElementById(id).getContext(\"2d\");\r\n  if (id===\"detailChart\") destroyChart(charts.detail);\r\n  const conf = {\r\n    type: 'bar',\r\n    data: { labels, datasets:[{ label, data: values }] },\r\n    options:{\r\n      responsive:true,\r\n      plugins:{\r\n        datalabels: baseDatalabels,\r\n        legend:{ display: !!label, position:'bottom' }\r\n      },\r\n      scales:{ y:{ beginAtZero:true } }\r\n    }\r\n  };\r\n  if (id===\"detailChart\"){\r\n    charts.detail = new Chart(ctx, conf);\r\n  }\r\n}\r\n\r\n\/\/ \ub3c4\ub11b (3\uac1c \ud06c\uae30 \ud1b5\uc77c)\r\nfunction drawDoughnut(id, labels, values){\r\n  const ctx = document.getElementById(id).getContext(\"2d\");\r\n  if (id===\"degreePie\") destroyChart(charts.degree);\r\n  if (id===\"topCountryPie\") destroyChart(charts.country);\r\n  if (id===\"regionPie\") destroyChart(charts.region);\r\n\r\n  const conf = {\r\n    type:'doughnut',\r\n    data:{ labels, datasets:[{ data: values }] },\r\n    options:{\r\n      responsive:true,\r\n      maintainAspectRatio:true,\r\n      aspectRatio:1,\r\n      cutout:\"55%\",\r\n      plugins:{\r\n        datalabels: {\r\n          formatter:(v)=> v ? v.toLocaleString() : '',\r\n          color:'#000',\r\n          font:{ size:9 },\r\n          anchor:'center',\r\n          align:'center'\r\n        },\r\n        legend:{ position:'bottom' }\r\n      }\r\n    }\r\n  };\r\n  if (id===\"degreePie\") charts.degree = new Chart(ctx, conf);\r\n  if (id===\"topCountryPie\") charts.country = new Chart(ctx, conf);\r\n  if (id===\"regionPie\") charts.region = new Chart(ctx, conf);\r\n}\r\n<\/script>\r\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub300\ud559\uc815\ubcf4\uacf5\uc2dc\uc790\ub8cc \uc911 2023\ub144 ~ 2025\ub144 \uad6d\ub0b4 \ub300\ud559\ubcc4 \uc678\uad6d\uc778\ud604\ud669\uc744 \ud1a0\ub300\ub85c \uc791\uc131\ub428 \ucd5c\uadfc 3\uac1c\ub144(2023~2025\ub144) \uc720\ud559\uc0dd \uc218 \ucd94\uc774 2025\ub144 \ud559\uc704\uacfc\uc815\ubcc4 \uc720\ud559\uc0dd\uc218 2025\ub144 \uc720\ud559\uc0dd \ucd9c\uc2e0\uad6d TOP5 2025\ub144 \uc9c0\uc5ed\ubcc4 \uc720\ud559\uc0dd \uc218 \ub300\ud559\ubcc4 \uad6d\uac00\ubcc4 \uc720\ud559\uc0dd \uc0c1\uc138 \uac80\uc0c9 \uc5f0\ub3c4 \uc9c0\uc5ed (\uc804\uccb4) \ub300\ud559 (\uc804\uccb4) \ucd9c\uc2e0\uad6d\uac00 (\uc804\uccb4) \uc720\ud559\uacfc\uc815 (\uc804\uccb4)\uc5b4\ud559\uc5f0\uc218\uc0dd\ud559\ubd80\uc0dd\uc11d\uc0ac\uacfc\uc815\ubc15\uc0ac\uacfc\uc815\uae30\ud0c0\uc5f0\uc218 \ud655\uc778 \u203b \uc5f0\ub3c4 \uc678\uc5d0 \uc9c0\uc5ed\u00b7\uad6d\uac00\u00b7\ub300\ud559\u00b7\uc720\ud615 \uc911 1 \uac00\uc9c0 \uc774\uc0c1\uc744 \uc120\ud0dd\ud558\uba74 \uc870\ud68c\ub429\ub2c8\ub2e4. (\uc5f0\ub3c4\ub9cc \uc120\ud0dd \ud6c4 \uc870\ud68c\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8715","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/pages\/8715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/comments?post=8715"}],"version-history":[{"count":1,"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/pages\/8715\/revisions"}],"predecessor-version":[{"id":8716,"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/pages\/8715\/revisions\/8716"}],"wp:attachment":[{"href":"https:\/\/www.spotlightuniv.com\/en\/wp-json\/wp\/v2\/media?parent=8715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}