{"id":12567,"date":"2026-01-29T14:53:14","date_gmt":"2026-01-29T06:53:14","guid":{"rendered":"https:\/\/control.mcu.edu.tw\/tuition-and-fees-information_test\/"},"modified":"2026-02-02T21:52:00","modified_gmt":"2026-02-02T13:52:00","slug":"tuitionen","status":"publish","type":"page","link":"https:\/\/control.mcu.edu.tw\/en\/tuitionen\/","title":{"rendered":"Tuition And Fees Information"},"content":{"rendered":"<div id=\"cs-content\" class=\"cs-content\"><div class=\"x-section has-particle e12567-1 m9p3-0 m9p3-1 m9p3-3 m9p3-4\"><div class=\"x-row e12567-2 m9p3-5\"><div class=\"x-row-inner\"><div class=\"x-col e12567-3 m9p3-6\"><span class=\"x-image e12567-4 m9p3-7\"><img src=\"https:\/\/control.mcu.edu.tw\/wp-content\/uploads\/sites\/11\/2023\/12\/\u5b78\u96dc\u8cbbEN-2.gif\" width=\"640\" height=\"250\" alt=\"Image\" loading=\"lazy\"><\/span><\/div><\/div><\/div><span class=\"x-particle is-primary\" data-x-particle=\"scale-y inside-b_c\" aria-hidden=\"true\"><span style=\"\"><\/span><\/span><span class=\"x-particle is-secondary\" data-x-particle=\"scale-y inside-b_c\" aria-hidden=\"true\"><span style=\"\"><\/span><\/span><\/div><div class=\"x-section e12567-5 m9p3-0 m9p3-2\"><div class=\"x-row e12567-6 m9p3-5\"><div class=\"x-row-inner\"><div class=\"x-col e12567-7 m9p3-6\"><!-- HFCM by 99 Robots - Snippet # 7: \u5b78\u96dc\u8cbb\u8cc7\u8a0a\u5206\u6790\uff08\u82f1\u6587\uff09 -->\n<div id=\"financeBrowser\">\r\n  <div class=\"fb-loading\" id=\"fbLoading\" aria-live=\"polite\">Loading...<\/div>\r\n  <div class=\"fb-shell\">\r\n    <div class=\"fb-grid\">\r\n      <!-- LEFT -->\r\n      <div class=\"fb-left\">\r\n        <div class=\"fb-toprow\">\r\n          <div id=\"fbActiveType\" class=\"fb-active\"><\/div>\r\n        <\/div>\r\n        <div class=\"fb-list\" id=\"fbList\"><\/div>\r\n        <div class=\"fb-pager\" id=\"fbPager\"><\/div>\r\n        <div class=\"fb-foot\" id=\"fbCount\"><\/div>\r\n      <\/div>\r\n\r\n      <!-- RIGHT -->\r\n      <div class=\"fb-right\">\r\n        <div class=\"fb-panel\">\r\n          <div class=\"fb-section\">\r\n            <div class=\"fb-hd\">\r\n              <div class=\"t\">Info Type<\/div>\r\n              <div class=\"s\"><\/div>\r\n            <\/div>\r\n            <div class=\"type-row\" id=\"fbTypeRow\"><\/div>\r\n          <\/div>\r\n\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"fb-lightbox\" id=\"fbLightbox\" aria-hidden=\"true\">\r\n      <div class=\"fb-lightbox-inner\" role=\"dialog\" aria-modal=\"true\">\r\n        <button class=\"fb-lightbox-close\" type=\"button\" aria-label=\"Close\">\u2715<\/button>\r\n        <img class=\"fb-lightbox-img\" alt=\"\">\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n\r\n  :root{\r\n    --bg: #ffffff;\r\n    --panel: #ffffff;\r\n    --muted: rgba(0,0,0,.58);\r\n    --text: rgba(0,0,0,.88);\r\n    --line: rgba(0,0,0,.10);\r\n    --line2: rgba(0,0,0,.07);\r\n    --accent: #4868BB;\r\n    --accentSoft: rgba(72,104,187,.10);\r\n    --accent2: #663C10;\r\n    --accent2Soft: rgba(102,60,16,.10);\r\n    --accent3: #E48223;\r\n    --accent3Soft: rgba(228,130,35,.12);\r\n    --radius: 16px;\r\n  }\r\n\r\n  #financeBrowser{\r\n    margin:0 auto;padding:20px 14px;\r\n    color:var(--text);\r\n    font-size:16px;\r\n    position:relative;\r\n  }\r\n\r\n  .fb-shell{\r\n    overflow:hidden;\r\n  }\r\n  .fb-loading{\r\n    position:absolute;\r\n    inset:0;\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    background:rgba(255,255,255,.75);\r\n    color:var(--text);\r\n    font-weight:800;\r\n    letter-spacing:.02em;\r\n    z-index:20;\r\n  }\r\n  .fb-loading.is-hidden{ display:none; }\r\n\r\n  .fb-grid{\r\n    display:grid;\r\n    grid-template-columns: 3fr 2fr;\r\n    gap:16px;\r\n    padding:16px;\r\n    background:var(--bg);\r\n  }\r\n  @media (max-width: 980px){\r\n    .fb-grid{grid-template-columns:1fr}\r\n    .fb-left{order:2}\r\n    .fb-right{order:1}\r\n    .fb-toprow{flex-direction:column; align-items:stretch;}\r\n    .fb-sort{min-width:0;}\r\n    .fb-sort .fb-select{font-size:15px; min-height:46px;}\r\n  }\r\n\r\n  \/* ===== Left list ===== *\/\r\n  .fb-list{display:grid;gap:10px}\r\n  .fb-toprow{\r\n    display:flex;\r\n    align-items:flex-end;\r\n    justify-content:space-between;\r\n    gap:12px;\r\n    margin-bottom:12px;\r\n  }\r\n  .fb-toprow .fb-active{margin-bottom:0; flex:1;}\r\n  .fb-sort{\r\n    min-width:160px;\r\n  }\r\n  .fb-sort .fb-select{\r\n    min-height:44px;\r\n    line-height:1.2;\r\n    font-size:14px;\r\n    padding-top:10px;\r\n    padding-bottom:10px;\r\n  }\r\n\r\n.fb-item{\r\n    border:1px solid var(--line2);\r\n    border-radius:var(--radius);\r\n    padding:14px;\r\n    display:flex;\r\n    flex-wrap:wrap;\r\n    gap:14px;\r\n    align-items:flex-start;\r\n    background:#fff;\r\n    transition:background .12s ease, border-color .12s ease;\r\n    position:relative;\r\n  }\r\n.fb-item > .fb-ico,\r\n.fb-item > .fb-main{\r\n    flex:0 1 auto;\r\n  }\r\n.fb-item:hover{\r\n    background:rgba(0,0,0,.015);\r\n    border-color:var(--line);\r\n  }\r\n  .fb-dash{\r\n    position:absolute;\r\n    inset:0;\r\n    width:100%;\r\n    height:100%;\r\n    pointer-events:none;\r\n    opacity:0;\r\n    overflow:visible;\r\n  }\r\n  .fb-dash-rect{\r\n    width:calc(100% - 2px);\r\n    height:calc(100% - 2px);\r\n    rx:var(--radius);\r\n    ry:var(--radius);\r\n    fill:none;\r\n    stroke-width:2;\r\n    stroke-dasharray:6 6;\r\n    stroke-linecap:round;\r\n    stroke-linejoin:round;\r\n    vector-effect:non-scaling-stroke;\r\n  }\r\n  .fb-item:hover .fb-dash{\r\n    opacity:1;\r\n  }\r\n  .fb-item:hover .fb-dash-rect{\r\n    animation:fb-dash-move 1.6s linear infinite;\r\n  }\r\n  .fb-item .fb-dash-rect{ stroke:var(--t-main, #4868BB); }\r\n\r\n  .fb-ico{\r\n    width:54px;height:54px;\r\n    border-radius:14px;\r\n    display:flex;align-items:center;justify-content:center;\r\n    font-weight:900;\r\n    font-size:16px;\r\n    color:#fff;\r\n    background:var(--t-main, #1f2937);\r\n    flex:0 0 auto;\r\n  }\r\n  .fb-ico img{\r\n    width:42px;\r\n    height:42px;\r\n    object-fit:contain;\r\n    display:block;\r\n  }\r\n\r\n  .fb-main{\r\n    flex:1;\r\n    min-width:0;\r\n    min-height:54px;\r\n    display:flex;\r\n    flex-direction:column;\r\n    justify-content:center;\r\n  }\r\n  .fb-title2{\r\n    margin:0 0 6px;\r\n    font-style:normal;\r\n    font-weight:400;\r\n    font-size:20px;\r\n    line-height:1.4;\r\n    letter-spacing:0;\r\n    text-transform:none;\r\n    word-break:break-word;\r\n    white-space:normal;\r\n    position:relative;\r\n  }\r\n  .fb-title2{ color:rgba(0, 0, 0, 1); }\r\n  .fb-title2::after{\r\n    content:\"\";\r\n    display:block;\r\n    width:56px;\r\n    height:2px;\r\n    margin-top:6px;\r\n    background:linear-gradient(90deg, rgba(0,0,0,.25), rgba(0,0,0,0));\r\n  }\r\n  .fb-meta{display:block}\r\n\r\n  .fb-tags{\r\n    display:flex;\r\n    gap:6px;\r\n    flex-wrap:wrap;\r\n    position:relative;\r\n    padding-top:8px;\r\n  }\r\n  .fb-tags::before{\r\n    content:\"\";\r\n    position:absolute;\r\n    left:0;\r\n    right:0;\r\n    top:0;\r\n    height:1px;\r\n    background:linear-gradient(90deg, rgba(0,0,0,.2), rgba(0,0,0,0));\r\n  }\r\n  .fb-tag{\r\n    font-size:12px;\r\n    font-weight:500;\r\n    border-radius:999px;\r\n    padding:4px 8px;\r\n    border:1px solid var(--t-tag-border, var(--line2));\r\n    background:var(--t-tag-bg, #fff);\r\n    color:var(--t-tag-text, rgba(0,0,0,.55));\r\n  }\r\n\r\n  .fb-actions{\r\n    margin-left:auto;\r\n    display:flex;\r\n    align-items:flex-start;\r\n  }\r\n  .fb-toggle{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    gap:10px;\r\n    border-radius:10px;\r\n    border:1px solid #d2d6e2;\r\n    padding:8px 12px;\r\n    background:linear-gradient(180deg, #ffffff 0%, #f3f5f9 100%);\r\n    color:var(--text);\r\n    font-size:14px;\r\n    font-weight:700;\r\n    line-height:1.2;\r\n    cursor:pointer;\r\n    width:auto;\r\n    align-self:flex-end;\r\n    box-sizing:border-box;\r\n    transition:background .12s ease, border-color .12s ease, transform .12s ease, box-shadow .12s ease;\r\n  }\r\n  .fb-toggle-close{\r\n    display:none;\r\n    margin-top:10px;\r\n    align-self:flex-end;\r\n  }\r\n  .fb-item.is-open .fb-toggle-open{\r\n    display:none;\r\n  }\r\n  .fb-item.is-open .fb-toggle-close{\r\n    display:inline-flex;\r\n  }\r\n  .fb-toggle:hover{\r\n    background:linear-gradient(180deg, #ffffff 0%, #eef1f6 100%);\r\n    border-color:#c7cddc;\r\n    transform:translateY(-1px);\r\n    box-shadow:0 10px 20px rgba(0,0,0,.1);\r\n  }\r\n  .fb-toggle:active{\r\n    transform:translateY(1px);\r\n    box-shadow:0 4px 10px rgba(0,0,0,.08);\r\n  }\r\n  .fb-arrow{\r\n    display:inline-block;\r\n    transition:transform .15s ease;\r\n  }\r\n  .fb-item.is-open .fb-arrow{\r\n    transform:rotate(180deg);\r\n  }\r\n  .fb-toggle-close .fb-arrow{\r\n    transform:rotate(180deg);\r\n  }\r\n  .fb-expand{\r\n    flex:1 1 100%;\r\n    width:100%;\r\n    margin-top:0;\r\n    padding-top:0;\r\n    border-top:0;\r\n    font-size:14px;\r\n    color:var(--text);\r\n    max-height:0;\r\n    opacity:0;\r\n    overflow:hidden;\r\n    display:flex;\r\n    flex-direction:column;\r\n    transition:max-height .25s ease, opacity .2s ease, margin-top .25s ease, padding-top .25s ease, border-top-width .25s ease;\r\n  }\r\n  .fb-item.is-open .fb-expand{\r\n    margin-top:10px;\r\n    padding-top:10px;\r\n    border-top:1px dashed var(--line2);\r\n    opacity:1;\r\n  }\r\n  .fb-expand .label{\r\n    font-weight:800;\r\n    margin-right:6px;\r\n  }\r\n  .fb-expand-text{\r\n    font-size:18px;\r\n    font-weight:500;\r\n    line-height:1.55;\r\n    white-space:pre-line;\r\n  }\r\n  .fb-expand-media{\r\n    display:grid;\r\n    grid-template-columns:repeat(2, minmax(0, 1fr));\r\n    gap:10px;\r\n    margin-bottom:10px;\r\n  }\r\n  .fb-expand-media figure{\r\n    margin:0;\r\n  }\r\n  .fb-expand-media img{\r\n    width:100%;\r\n    height:auto;\r\n    display:block;\r\n    border-radius:12px;\r\n    cursor:zoom-in;\r\n    transition:transform .12s ease, box-shadow .12s ease;\r\n  }\r\n  .fb-expand-media img:hover{\r\n    transform:scale(1.01);\r\n    box-shadow:0 12px 24px rgba(0,0,0,.12);\r\n  }\r\n  .fb-expand-media figure{\r\n    position:relative;\r\n  }\r\n  .fb-expand-media figure::after{\r\n    content:\"\ud83d\udd0d\";\r\n    position:absolute;\r\n    right:8px;\r\n    bottom:8px;\r\n    width:26px;\r\n    height:26px;\r\n    border-radius:999px;\r\n    background:rgba(0,0,0,.55);\r\n    color:#fff;\r\n    font-size:14px;\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    opacity:0;\r\n    transition:opacity .12s ease;\r\n    pointer-events:none;\r\n  }\r\n  .fb-expand-media figure:hover::after{\r\n    opacity:1;\r\n  }\r\n  .fb-expand-actions{\r\n    margin-top:10px;\r\n    display:flex;\r\n    justify-content:flex-end;\r\n    align-items:flex-end;\r\n    justify-content:flex-end;\r\n    gap:8px;\r\n  }\r\n  .fb-expand-actions .fb-link,\r\n  .fb-expand-actions .fb-expand-link,\r\n  .fb-expand-actions .fb-toggle{\r\n    min-height:40px;\r\n    height:40px;\r\n    min-width:120px;\r\n    width:120px;\r\n    padding:8px 12px;\r\n    border-radius:10px;\r\n    font-size:14px;\r\n    font-weight:700;\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    box-sizing:border-box;\r\n  }\r\n  .fb-expand-link{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    border-radius:10px;\r\n    border:1px solid #d2d6e2;\r\n    padding:8px 12px;\r\n    background:linear-gradient(180deg, #ffffff 0%, #f3f5f9 100%);\r\n    color:var(--text);\r\n    font-size:14px;\r\n    font-weight:700;\r\n    line-height:1.2;\r\n    text-decoration:none;\r\n    white-space:nowrap;\r\n  }\r\n  .fb-expand-link:hover{\r\n    background:linear-gradient(180deg, #ffffff 0%, #eef1f6 100%);\r\n    border-color:#c7cddc;\r\n  }\r\n  .fb-expand-caption{\r\n    margin-top:6px;\r\n    font-size:13px;\r\n    color:var(--muted);\r\n  }\r\n  .fb-lightbox{\r\n    position:fixed;\r\n    inset:0;\r\n    background:rgba(0,0,0,.72);\r\n    display:none;\r\n    align-items:center;\r\n    justify-content:center;\r\n    z-index:1000000;\r\n    padding:20px;\r\n  }\r\n  .fb-lightbox.is-open{\r\n    display:flex;\r\n  }\r\n  .fb-lightbox-inner{\r\n    position:relative;\r\n    max-width:90vw;\r\n    max-height:90vh;\r\n  }\r\n  .fb-lightbox-img{\r\n    display:block;\r\n    max-width:90vw;\r\n    max-height:90vh;\r\n    min-width:60vw;\r\n    min-height:60vh;\r\n    width:auto;\r\n    height:auto;\r\n    object-fit:contain;\r\n    border-radius:12px;\r\n    box-shadow:0 20px 60px rgba(0,0,0,.35);\r\n  }\r\n  .fb-lightbox-close{\r\n    position:absolute;\r\n    top:-14px;\r\n    right:-14px;\r\n    width:32px;\r\n    height:32px;\r\n    border-radius:999px;\r\n    border:1px solid rgba(255,255,255,.4);\r\n    background:rgba(0,0,0,.55);\r\n    color:#fff;\r\n    font-size:16px;\r\n    font-weight:700;\r\n    cursor:pointer;\r\n  }\r\n  .fb-lightbox-close:hover{\r\n    background:rgba(0,0,0,.75);\r\n  }\r\n  .fb-date{\r\n    font-size:12px;\r\n    color:var(--muted);\r\n    font-weight:700;\r\n    white-space:nowrap;\r\n    align-self:flex-end;\r\n  }\r\n  @media (max-width: 680px){\r\n    .fb-item{\r\n      display:grid;\r\n      grid-template-columns:auto 1fr;\r\n      grid-template-areas:\r\n        \"icon main\"\r\n        \"actions actions\"\r\n        \"expand expand\";\r\n      align-items:start;\r\n    }\r\n    .fb-ico{ grid-area:icon; }\r\n    .fb-main{ grid-area:main; }\r\n    .fb-actions{ grid-area:actions; margin-left:0; }\r\n    .fb-expand{ grid-area:expand; }\r\n    .fb-actions,\r\n    .fb-expand{\r\n      width:100%;\r\n    }\r\n    .fb-toggle{\r\n      width:100%;\r\n      justify-content:center;\r\n      gap:8px;\r\n    }\r\n    .fb-toggle-close{\r\n      align-self:stretch;\r\n    }\r\n    .fb-expand-actions{\r\n      flex-direction:column;\r\n      align-items:stretch;\r\n    }\r\n    .fb-expand-actions .fb-link,\r\n    .fb-expand-actions .fb-expand-link,\r\n    .fb-expand-actions .fb-toggle{\r\n      width:100%;\r\n      min-width:0;\r\n    }\r\n    .fb-expand-link{\r\n      width:100%;\r\n    }\r\n    .fb-expand-media{\r\n      grid-template-columns:1fr;\r\n    }\r\n  }\r\n  .fb-link{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    border-radius:12px;\r\n    border:1px solid #d2d6e2;\r\n    padding:10px 14px;\r\n    text-decoration:none;\r\n    color:var(--text);\r\n    background:linear-gradient(180deg, #ffffff 0%, #f3f5f9 100%);\r\n    font-size:15px;\r\n    font-weight:800;\r\n    box-shadow:0 6px 14px rgba(0,0,0,.08);\r\n    transition:background .12s ease, border-color .12s ease, transform .12s ease, box-shadow .12s ease;\r\n    width:100%;\r\n    box-sizing:border-box;\r\n  }\r\n  .fb-link .fb-hand{\r\n    width:16px;\r\n    height:16px;\r\n    margin-right:6px;\r\n    display:inline-block;\r\n    vertical-align:-2px;\r\n    object-fit:contain;\r\n    animation:fb-hand-wiggle 1.2s ease-in-out infinite;\r\n  }\r\n  .fb-link:hover{\r\n    background:linear-gradient(180deg, #ffffff 0%, #eef1f6 100%);\r\n    border-color:#c7cddc;\r\n    transform:translateY(-1px);\r\n    box-shadow:0 10px 20px rgba(0,0,0,.1);\r\n  }\r\n  .fb-link:active{\r\n    transform:translateY(1px);\r\n    box-shadow:0 4px 10px rgba(0,0,0,.08);\r\n  }\r\n  .fb-link .dot{display:none;}\r\n  @keyframes fb-hand-wiggle{\r\n    0%, 100%{ transform:translateX(0); }\r\n    50%{ transform:translateX(4px); }\r\n  }\r\n\r\n  .fb-btn{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    border-radius:12px;\r\n    border:1px solid var(--line2);\r\n    padding:10px 12px;\r\n    background:#fff;\r\n    color:var(--text);\r\n    font-size:15px;\r\n    font-weight:800;\r\n    cursor:pointer;\r\n    transition:background .12s ease, border-color .12s ease;\r\n    width:100%;\r\n    box-sizing:border-box;\r\n  }\r\n  .fb-btn:hover{ background:rgba(0,0,0,.02); border-color:var(--line); }\r\n\r\n  .fb-empty{\r\n    padding:16px;\r\n    border:1px dashed var(--line);\r\n    border-radius:var(--radius);\r\n    font-size:14px;\r\n    color:var(--muted);\r\n    background:rgba(0,0,0,.01);\r\n  }\r\n\r\n  .fb-foot{\r\n    margin-top:12px;\r\n    font-size:14px;\r\n    color:var(--muted);\r\n    font-weight:700;\r\n    align-self:flex-end;\r\n    text-align:right;\r\n  }\r\n  .fb-pager{\r\n    display:flex;\r\n    gap:6px;\r\n    flex-wrap:wrap;\r\n    justify-content:flex-end;\r\n    margin-top:12px;\r\n  }\r\n  .fb-page-btn{\r\n    border:1px solid var(--line2);\r\n    background:#fff;\r\n    color:var(--text);\r\n    border-radius:10px;\r\n    padding:6px 10px;\r\n    min-width:36px;\r\n    text-align:center;\r\n    font-size:13px;\r\n    font-weight:800;\r\n    cursor:pointer;\r\n    transition:background .12s ease, border-color .12s ease;\r\n  }\r\n  .fb-page-btn:hover{\r\n    background:rgba(0,0,0,.03);\r\n    border-color:var(--line);\r\n  }\r\n  .fb-page-btn[aria-current=\"page\"]{\r\n    background:var(--type-soft, var(--accentSoft));\r\n    border-color:var(--type-border, rgba(72,104,187,.35));\r\n    color:var(--type-main, var(--accent));\r\n  }\r\n  .fb-page-btn:disabled{\r\n    cursor:not-allowed;\r\n    opacity:.45;\r\n  }\r\n  .fb-left{\r\n    display:flex;\r\n    flex-direction:column;\r\n  }\r\n\r\n  \/* ===== Active type bar ===== *\/\r\n  .fb-active{\r\n    display:flex;align-items:center;gap:10px;\r\n    padding:10px 12px;\r\n    margin-bottom:12px;\r\n    font-weight:850;\r\n    font-size:14px;\r\n    background:#fff;\r\n  }\r\n  .fb-active .chip{\r\n    display:inline-flex;align-items:center;gap:2px;\r\n    border-radius:999px;\r\n    padding:7px 12px;\r\n    font-size:16px;\r\n    font-weight:900;\r\n    border:1px solid var(--t-soft-border, var(--line2));\r\n    background:var(--t-chip-bg, #fff);\r\n    color:var(--t-main, var(--text));\r\n  }\r\n  .fb-active .dot{\r\n    width:10px;height:10px;border-radius:999px;\r\n    background:var(--t-main, var(--accent));\r\n    box-shadow:0 0 0 4px var(--t-soft, rgba(72,104,187,.10));\r\n    margin-right:6px;\r\n    animation: fb-dot-pulse 1.6s ease-in-out infinite;\r\n  }\r\n  @keyframes fb-dot-pulse{\r\n    0%, 100%{ opacity:1; transform:scale(1); }\r\n    50%{ opacity:.35; transform:scale(.85); }\r\n  }\r\n  .fb-active .chip .wave{\r\n    display:inline-block;\r\n    animation: fb-wave 1.8s ease-in-out infinite;\r\n  }\r\n  @keyframes fb-wave{\r\n    0%, 100%{ transform: translateY(0); }\r\n    50%{ transform: translateY(-4px); }\r\n  }\r\n\r\n  .fb-panel{\r\n    border:0;\r\n    border-radius:18px;\r\n    padding:14px;\r\n    background:var(--panel);\r\n    position:sticky;\r\n    top:14px;\r\n  }\r\n  @media (max-width: 980px){ .fb-panel{position:static} }\r\n\r\n  .fb-section{margin-bottom:20px}\r\n  .fb-hd{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px}\r\n  .fb-hd .t{\r\n    font-weight:900;\r\n    font-size:16px;\r\n    letter-spacing:0.06em;\r\n  }\r\n  .fb-hd .s{font-size:12px;color:var(--muted)}\r\n\r\n  .fb-select{\r\n    width:100%;\r\n    border:1px solid var(--line2);\r\n    border-radius:14px;\r\n    padding:12px 40px 12px 12px;\r\n    background:#fff;\r\n    font-size:16px;\r\n    outline:none;\r\n    min-height:46px;\r\n    box-sizing:border-box;\r\n    -webkit-appearance:none;\r\n    -moz-appearance:none;\r\n    appearance:none;\r\n    background-image:\r\n      linear-gradient(45deg, transparent 50%, rgba(0,0,0,.45) 50%),\r\n      linear-gradient(135deg, rgba(0,0,0,.45) 50%, transparent 50%);\r\n    background-position:\r\n      calc(100% - 18px) 52%,\r\n      calc(100% - 12px) 52%;\r\n    background-size:6px 6px, 6px 6px;\r\n    background-repeat:no-repeat;\r\n  }\r\n  .fb-select:focus{\r\n    border-color:rgba(17,24,39,.25);\r\n    box-shadow:none;\r\n  }\r\n\r\n\r\n  .type-row{\r\n    display:grid;\r\n    grid-template-columns:repeat(2, minmax(0, 1fr));\r\n    gap:16px;\r\n  }\r\n  @media (max-width: 980px){\r\n    .type-row{grid-template-columns:1fr}\r\n  }\r\n\r\n  .type-card{\r\n    position:relative;\r\n    border:1px solid #d8dbe6;\r\n    border-radius:18px;\r\n    padding:12px 10px;\r\n    background:#f7f7fb;\r\n    cursor:pointer;\r\n    margin-bottom:8px;\r\n    display:flex;\r\n    flex-direction:column;\r\n    align-items:center;\r\n    text-align:center;\r\n    gap:10px;\r\n    min-height:96px;\r\n    transform-style:preserve-3d;\r\n    transition:transform .18s cubic-bezier(0.2, 0.7, 0.2, 1), background .18s cubic-bezier(0.2, 0.7, 0.2, 1), border-color .12s ease;\r\n  }\r\n  .type-card::before{\r\n    content:\"\";\r\n    position:absolute;\r\n    inset:0;\r\n    border-radius:inherit;\r\n    background:#e6e8f1;\r\n    box-shadow:0 0 0 2px #cfd4e2, 0 8px 0 0 #cfd4e2;\r\n    transform:translate3d(0, 8px, -1px);\r\n    transition:transform .18s cubic-bezier(0.2, 0.7, 0.2, 1), box-shadow .18s cubic-bezier(0.2, 0.7, 0.2, 1);\r\n    z-index:0;\r\n  }\r\n  .type-card > *{ position:relative; z-index:1; }\r\n  .type-card:hover{\r\n    background:#f0f1f8;\r\n    border-color:#cfd4e2;\r\n    transform:translate(0, 2px);\r\n  }\r\n  .type-card:hover::before{\r\n    box-shadow:0 0 0 2px #c7cddc, 0 6px 0 0 #c7cddc;\r\n    transform:translate3d(0, 6px, -1px);\r\n  }\r\n  .type-card[aria-pressed=\"true\"]{\r\n    border-color:#c3c9d8;\r\n    background:#e9ebf4;\r\n    transform:translate(0, 7px);\r\n  }\r\n  .type-card[aria-pressed=\"true\"]::before{\r\n    box-shadow:0 0 0 2px #c3c9d8, 0 0 0 0 #c3c9d8;\r\n    transform:translate3d(0, 0, -1px);\r\n  }\r\n  .type-card:active{\r\n    transform:translate(0, 7px);\r\n  }\r\n  .type-card:active::before{\r\n    box-shadow:0 0 0 2px #c3c9d8, 0 0 0 0 #c3c9d8;\r\n    transform:translate3d(0, 0, -1px);\r\n  }\r\n  .type-card.has-theme{\r\n    background:var(--t-main, #4868BB);\r\n    border-color:var(--t-border, #35508F);\r\n    color:#ffffff;\r\n  }\r\n  .type-card.has-theme::before{\r\n    background:var(--t-before-bg, #35508F);\r\n    box-shadow:0 0 0 2px var(--t-shadow, #2E467E), 0 8px 0 0 var(--t-shadow, #2E467E);\r\n  }\r\n  .type-card.has-theme:hover{ background:var(--t-hover-main, #5A79C3); }\r\n  .type-badge{\r\n    width:116px;height:116px;\r\n    border-radius:0;\r\n    display:flex;align-items:center;justify-content:center;\r\n    color:var(--t-main, var(--accent));\r\n    font-weight:900;\r\n    font-size:14px;\r\n    background:transparent;\r\n  }\r\n  .type-badge img{\r\n    width:104px;\r\n    height:104px;\r\n    object-fit:contain;\r\n    display:block;\r\n  }\r\n  .type-name{\r\n    font-weight:850;\r\n    font-size:20px;\r\n    line-height:1.25;\r\n    word-break:break-word;\r\n  }\r\n\r\n  \/* ===== Item cards grid ===== *\/\r\n  .item-grid{\r\n    display:grid;\r\n    grid-template-columns:repeat(2, minmax(0,1fr));\r\n    gap:16px;\r\n  }\r\n  .item-card{\r\n    position:relative;\r\n    border:1px solid #d8dbe6;\r\n    border-radius:14px;\r\n    padding:12px 10px;\r\n    background:#f7f7fb;\r\n    cursor:pointer;\r\n    margin-bottom:8px;\r\n    min-height:110px;\r\n    display:flex;\r\n    flex-direction:column;\r\n    align-items:center;\r\n    justify-content:center;\r\n    gap:8px;\r\n    text-align:center;\r\n    transform-style:preserve-3d;\r\n    transition:transform .18s cubic-bezier(0.2, 0.7, 0.2, 1), background .18s cubic-bezier(0.2, 0.7, 0.2, 1), border-color .12s ease;\r\n  }\r\n  .item-card::before{\r\n    content:\"\";\r\n    position:absolute;\r\n    inset:0;\r\n    border-radius:inherit;\r\n    background:#e6e8f1;\r\n    box-shadow:0 0 0 2px #cfd4e2, 0 8px 0 0 #cfd4e2;\r\n    transform:translate3d(0, 8px, -1px);\r\n    transition:transform .18s cubic-bezier(0.2, 0.7, 0.2, 1), box-shadow .18s cubic-bezier(0.2, 0.7, 0.2, 1);\r\n    z-index:0;\r\n  }\r\n  .item-card > *{ position:relative; z-index:1; }\r\n  .item-card:hover{\r\n    background:#f0f1f8;\r\n    border-color:#cfd4e2;\r\n    transform:translate(0, 2px);\r\n  }\r\n  .item-card:hover::before{\r\n    box-shadow:0 0 0 2px #c7cddc, 0 6px 0 0 #c7cddc;\r\n    transform:translate3d(0, 6px, -1px);\r\n  }\r\n  .item-card[aria-pressed=\"true\"]{\r\n    border-color:#c3c9d8;\r\n    background:#e9ebf4;\r\n    transform:translate(0, 7px);\r\n  }\r\n  .item-card[aria-pressed=\"true\"]::before{\r\n    box-shadow:0 0 0 2px #c3c9d8, 0 0 0 0 #c3c9d8;\r\n    transform:translate3d(0, 0, -1px);\r\n  }\r\n  .item-card:active{\r\n    transform:translate(0, 7px);\r\n  }\r\n  .item-card.has-theme{\r\n    background:linear-gradient(160deg, var(--t-grad-start, #8FA6E8) 0%, var(--t-grad-end, #4B6CC4) 100%);\r\n    border-color:var(--t-border, #3E5EA9);\r\n    color:#ffffff;\r\n  }\r\n  .item-card.has-theme::before{\r\n    background:linear-gradient(160deg, var(--t-grad-end-copy, #4A66B8) 0%, var(--t-shadow, #2E458C) 100%);\r\n    box-shadow:0 0 0 2px var(--t-shadow, #27407F), 0 10px 0 0 var(--t-shadow, #27407F);\r\n  }\r\n  .item-card.has-theme:hover{\r\n    background:linear-gradient(160deg, var(--t-hover-start, #9FB6F2) 0%, var(--t-hover-end, #5A7AD0) 100%);\r\n  }\r\n  .item-card:active::before{\r\n    box-shadow:0 0 0 2px #c3c9d8, 0 0 0 0 #c3c9d8;\r\n    transform:translate3d(0, 0, -1px);\r\n  }\r\n  .item-card.all{\r\n    grid-column:1 \/ -1;\r\n    min-height:auto;\r\n    padding:12px;\r\n    flex-direction:row;\r\n    justify-content:center;\r\n    gap:8px;\r\n  }\r\n  @keyframes fb-dash-move{\r\n    to{ stroke-dashoffset:-24; }\r\n  }\r\n  .item-thumb{\r\n    width:76px;\r\n    height:76px;\r\n    border-radius:14px;\r\n    display:block;\r\n    object-fit:contain;\r\n    box-shadow:none;\r\n    padding:4px;\r\n  }\r\n  .item-card .txt{\r\n    font-weight:800;\r\n    font-size:17px;\r\n    line-height:1.25;\r\n    word-break:break-word;\r\n  }\r\n\r\n  .btnrow{display:flex;gap:10px;margin-top:10px}\r\n  .btn{\r\n    flex:1;\r\n    border:1px solid #d2d6e2;\r\n    background:linear-gradient(180deg, #ffffff 0%, #f3f5f9 100%);\r\n    border-radius:14px;\r\n    padding:12px 12px;\r\n    cursor:pointer;\r\n    font-weight:850;\r\n    font-size:15px;\r\n    box-shadow:0 6px 14px rgba(0,0,0,.08);\r\n    transition:background .12s ease, border-color .12s ease, transform .12s ease, box-shadow .12s ease;\r\n  }\r\n  .btn.primary{\r\n    background:var(--accent);\r\n    color:#fff;\r\n    border-color:var(--accent);\r\n  }\r\n  .btn.ghost{\r\n    background:linear-gradient(180deg, #ffffff 0%, #f3f5f9 100%);\r\n    color:#2f3440;\r\n    border-color:#d2d6e2;\r\n  }\r\n  .btn:hover{\r\n    background:linear-gradient(180deg, #ffffff 0%, #eef1f6 100%);\r\n    border-color:#c7cddc;\r\n    transform:translateY(-1px);\r\n    box-shadow:0 10px 20px rgba(0,0,0,.1);\r\n  }\r\n  .btn:active{\r\n    transform:translateY(1px);\r\n    box-shadow:0 4px 10px rgba(0,0,0,.08);\r\n  }\r\n  .btn.primary:hover{background:#0b1220;border-color:#0b1220}\r\n\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n  const root = document.getElementById(\"financeBrowser\");\r\n  if(!root) return;\r\n\r\n\/\/   const REST_BASE = \"https:\/\/mcu-api.jioujhong.com\/wp-json\/mcu-api\/v2\";\r\n\tconst REST_BASE = \"https:\/\/control.mcu.edu.tw\/wp-json\/wp\/v2\";\r\n  const REST_ENDPOINTS = {\r\n    posts: \"tuition-fees-info\",\r\n    cate: \"tuition-fee-cate\",\r\n  };\r\n  const DEFAULT_TYPE_COLORS = {\r\n    __default: {\r\n      main: \"#4868BB\",\r\n      gradStart: \"#8FA6E8\",\r\n      gradEnd: \"#4B6CC4\",\r\n      gradEndCopy: \"#4A66B8\",\r\n    },\r\n  };\r\n\r\n  let TYPE_LABEL = {};\r\n  let TYPES = [];\r\n  let TYPE_COLORS = {};\r\n  let TYPE_ICONS = {};\r\n  const PAGE_SIZE = 7;\r\n  const ASSET_BASE = \"\/wp-content\/uploads\/sites\/11\/2026\/01\/\";\r\n  const TYPE_ICON = {};\r\n  let DATA = [];\r\n\r\n  const state = { type:null, sort:\"date_desc\", page:1 };\r\n\r\n  const elList = root.querySelector(\"#fbList\");\r\n  const elCount = root.querySelector(\"#fbCount\");\r\n  const elTypeRow = root.querySelector(\"#fbTypeRow\");\r\n  const elActiveType = root.querySelector(\"#fbActiveType\");\r\n  const elPager = root.querySelector(\"#fbPager\");\r\n  const elLoading = root.querySelector(\"#fbLoading\");\r\n  const elLightbox = root.querySelector(\"#fbLightbox\");\r\n  const elLightboxImg = elLightbox ? elLightbox.querySelector(\".fb-lightbox-img\") : null;\r\n  const elLightboxClose = elLightbox ? elLightbox.querySelector(\".fb-lightbox-close\") : null;\r\n  if(elLightbox && elLightbox.parentElement !== document.body){\r\n    document.body.appendChild(elLightbox);\r\n  }\r\n\r\n  function escapeHtml(str){\r\n    return String(str).replaceAll(\"&\",\"&amp;\").replaceAll(\"<\",\"&lt;\").replaceAll(\">\",\"&gt;\")\r\n      .replaceAll('\"',\"&quot;\").replaceAll(\"'\",\"&#039;\");\r\n  }\r\n  function textToHtml(text){\r\n    return escapeHtml(text).replace(\/\\n\/g, \"<br>\");\r\n  }\r\n  function extractTextWithBreaks(node){\r\n    let out = \"\";\r\n    const blockTags = new Set([\"P\",\"DIV\",\"LI\",\"UL\",\"OL\",\"FIGURE\",\"SECTION\",\"ARTICLE\"]);\r\n    node.childNodes.forEach((child)=>{\r\n      if(child.nodeType === Node.TEXT_NODE){\r\n        out += child.textContent || \"\";\r\n        return;\r\n      }\r\n      if(child.nodeType !== Node.ELEMENT_NODE){\r\n        return;\r\n      }\r\n      const tag = child.tagName;\r\n      if(tag === \"BR\"){\r\n        out += \"\\n\";\r\n        return;\r\n      }\r\n      const inner = extractTextWithBreaks(child);\r\n      if(inner.trim()){\r\n        out += inner;\r\n      }\r\n      if(blockTags.has(tag)){\r\n        out += \"\\n\";\r\n      }\r\n    });\r\n    return out.replace(\/\\n{3,}\/g, \"\\n\\n\").trim();\r\n  }\r\n  function parsePicText(html){\r\n    const result = { images: [], text: \"\" };\r\n    const raw = String(html || \"\").trim();\r\n    if(!raw) return result;\r\n    const doc = new DOMParser().parseFromString(raw, \"text\/html\");\r\n    const imgs = Array.from(doc.querySelectorAll(\"img\"));\r\n    imgs.forEach((img)=>{\r\n      const src = img.getAttribute(\"src\") || \"\";\r\n      if(!src) return;\r\n      let caption = \"\";\r\n      const figure = img.closest(\"figure\");\r\n      if(figure){\r\n        const figcap = figure.querySelector(\"figcaption\");\r\n        if(figcap) caption = figcap.textContent || \"\";\r\n      }\r\n      const alt = img.getAttribute(\"alt\") || \"\";\r\n      result.images.push({ src, alt, caption: (caption || alt || \"\").trim() });\r\n    });\r\n    \/\/ Remove images\/figures so remaining text doesn't duplicate\r\n    doc.querySelectorAll(\"figure\").forEach((fig)=> fig.remove());\r\n    doc.querySelectorAll(\"img\").forEach((img)=> img.remove());\r\n    result.text = extractTextWithBreaks(doc.body);\r\n    return result;\r\n  }\r\n  function safeClassName(value){\r\n    return String(value).toLowerCase().replace(\/[^a-z0-9]+\/g, \"-\").replace(\/(^-|-$)\/g, \"\");\r\n  }\r\n  function titleFromSlug(value){\r\n    return String(value || \"\")\r\n      .replace(\/[-_]+\/g, \" \")\r\n      .trim()\r\n      .replace(\/\\s+\/g, \" \")\r\n      .replace(\/\\b[a-z]\/g, (ch)=> ch.toUpperCase());\r\n  }\r\n  function formatAcademicYear(name){\r\n    const m = String(name).match(\/\\d+\/);\r\n    if(!m) return name;\r\n    const roc = Number(m[0]);\r\n    if(!roc) return name;\r\n    const start = roc + 1911;\r\n    return `${start}-${start + 1}`;\r\n  }\r\n  function translateTitle(title, termMap){\r\n    let result = title;\r\n    result = result.replace(\/(\\d+)\\s*(\u5b78\u5e74\u5ea6|\u5e74\u5ea6)\/g, (match, roc)=>{\r\n      const formatted = formatAcademicYear(roc);\r\n      return formatted === roc ? match : formatted;\r\n    });\r\n    const keys = Array.from(termMap ? termMap.keys() : []).sort((a,b)=> b.length - a.length);\r\n    keys.forEach((key)=>{\r\n      result = result.split(key).join(termMap.get(key));\r\n    });\r\n    return result;\r\n  }\r\n  function iconClass(t){ return `type-${safeClassName(t)}`; }\r\n  function iconText(label){\r\n    return String(label || \"\").slice(0, 1);\r\n  }\r\n  function zValue(value){\r\n    const n = Number(value);\r\n    return Number.isFinite(n) ? n : 9999;\r\n  }\r\n  function getZIndex(acf){\r\n    if(!acf) return 9999;\r\n    if(Object.prototype.hasOwnProperty.call(acf, \"z-index\")) return zValue(acf[\"z-index\"]);\r\n    return zValue(acf.z_index);\r\n  }\r\n  function hexToRgb(hex){\r\n    const cleaned = String(hex || \"\").replace(\"#\", \"\");\r\n    if(cleaned.length !== 6) return null;\r\n    const num = Number.parseInt(cleaned, 16);\r\n    if(Number.isNaN(num)) return null;\r\n    return { r: (num >> 16) & 255, g: (num >> 8) & 255, b: num & 255 };\r\n  }\r\n  function rgba(hex, alpha){\r\n    const rgb = hexToRgb(hex);\r\n    if(!rgb) return \"\";\r\n    return `rgba(${rgb.r},${rgb.g},${rgb.b},${alpha})`;\r\n  }\r\n  function adjustHex(hex, amount){\r\n    const rgb = hexToRgb(hex);\r\n    if(!rgb) return hex;\r\n    const clamp = (v)=> Math.max(0, Math.min(255, v));\r\n    const toHex = (v)=> clamp(v).toString(16).padStart(2, \"0\");\r\n    return `#${toHex(rgb.r + amount)}${toHex(rgb.g + amount)}${toHex(rgb.b + amount)}`;\r\n  }\r\n  function buildTypeColors(typeKey, acf = {}){\r\n    const fallback = DEFAULT_TYPE_COLORS[typeKey] || DEFAULT_TYPE_COLORS.__default || {};\r\n    const main = acf.color_main || fallback.main || \"#4868BB\";\r\n    const gradStart = acf.color_grad_start || (acf.color_main ? main : fallback.gradStart) || main;\r\n    const gradEnd = acf.color_grad_end || (acf.color_main ? main : fallback.gradEnd) || main;\r\n    const gradEndCopy = acf.color_grad_end_copy || (acf.color_main ? gradEnd : fallback.gradEndCopy) || gradEnd;\r\n    const border = adjustHex(main, -24);\r\n    const shadow = adjustHex(gradEndCopy, -20);\r\n    return {\r\n      main,\r\n      gradStart,\r\n      gradEnd,\r\n      gradEndCopy,\r\n      border,\r\n      beforeBg: gradEndCopy,\r\n      shadow,\r\n      hoverMain: adjustHex(main, 18),\r\n      hoverStart: adjustHex(gradStart, 12),\r\n      hoverEnd: adjustHex(gradEnd, 12),\r\n      soft: rgba(main, 0.12),\r\n      softBorder: rgba(main, 0.28),\r\n      chipBg: rgba(main, 0.04),\r\n      tagText: rgba(main, 0.7),\r\n      tagBorder: rgba(main, 0.25),\r\n      tagBg: rgba(main, 0.04),\r\n    };\r\n  }\r\n  function typeVars(typeKey){\r\n    const c = TYPE_COLORS[typeKey] || buildTypeColors(typeKey, {});\r\n    return [\r\n      `--t-main:${c.main}`,\r\n      `--t-border:${c.border}`,\r\n      `--t-before-bg:${c.beforeBg}`,\r\n      `--t-shadow:${c.shadow}`,\r\n      `--t-grad-start:${c.gradStart}`,\r\n      `--t-grad-end:${c.gradEnd}`,\r\n      `--t-grad-end-copy:${c.gradEndCopy}`,\r\n      `--t-hover-main:${c.hoverMain}`,\r\n      `--t-hover-start:${c.hoverStart}`,\r\n      `--t-hover-end:${c.hoverEnd}`,\r\n      `--t-soft:${c.soft}`,\r\n      `--t-soft-border:${c.softBorder}`,\r\n      `--t-chip-bg:${c.chipBg}`,\r\n      `--t-tag-text:${c.tagText}`,\r\n      `--t-tag-border:${c.tagBorder}`,\r\n      `--t-tag-bg:${c.tagBg}`,\r\n    ].join(\"; \");\r\n  }\r\n  function applyTypeTheme(typeKey){\r\n    const c = TYPE_COLORS[typeKey];\r\n    if(!c) return;\r\n    root.style.setProperty(\"--type-main\", c.main);\r\n    root.style.setProperty(\"--type-soft\", c.soft);\r\n    root.style.setProperty(\"--type-border\", c.tagBorder);\r\n  }\r\n  function openLightbox(src, alt){\r\n    if(!elLightbox || !elLightboxImg) return;\r\n    elLightboxImg.src = src;\r\n    elLightboxImg.alt = alt || \"\";\r\n    elLightbox.classList.add(\"is-open\");\r\n    elLightbox.setAttribute(\"aria-hidden\", \"false\");\r\n    document.body.style.overflow = \"hidden\";\r\n  }\r\n  function closeLightbox(){\r\n    if(!elLightbox || !elLightboxImg) return;\r\n    elLightbox.classList.remove(\"is-open\");\r\n    elLightbox.setAttribute(\"aria-hidden\", \"true\");\r\n    elLightboxImg.src = \"\";\r\n    elLightboxImg.alt = \"\";\r\n    document.body.style.overflow = \"\";\r\n  }\r\n\r\n  function paginate(rows){\r\n    const totalPages = Math.max(1, Math.ceil(rows.length \/ PAGE_SIZE));\r\n    if(state.page > totalPages) state.page = totalPages;\r\n    const start = (state.page - 1) * PAGE_SIZE;\r\n    return { pageRows: rows.slice(start, start + PAGE_SIZE), totalPages };\r\n  }\r\n\r\n  function renderPager(totalPages){\r\n    if(totalPages <= 1){\r\n      elPager.innerHTML = \"\";\r\n      return;\r\n    }\r\n    const prevDisabled = state.page <= 1 ? \"disabled\" : \"\";\r\n    const nextDisabled = state.page >= totalPages ? \"disabled\" : \"\";\r\n    const pages = Array.from({length: totalPages}, (_, i)=> {\r\n      const p = i + 1;\r\n      const current = p === state.page ? 'aria-current=\"page\"' : \"\";\r\n      return `<button class=\"fb-page-btn\" type=\"button\" data-page=\"${p}\" ${current}>${p}<\/button>`;\r\n    }).join(\"\");\r\n    elPager.innerHTML = `\r\n      <button class=\"fb-page-btn\" type=\"button\" data-page=\"${state.page - 1}\" ${prevDisabled}>Prev<\/button>\r\n      ${pages}\r\n      <button class=\"fb-page-btn\" type=\"button\" data-page=\"${state.page + 1}\" ${nextDisabled}>Next<\/button>\r\n    `;\r\n  }\r\n\r\n  async function fetchAll(endpoint, params = {}){\r\n    const perPage = 100;\r\n    let page = 1;\r\n    let results = [];\r\n\r\n    while(true){\r\n      const url = new URL(`${REST_BASE}\/${endpoint}`);\r\n      url.searchParams.set(\"per_page\", String(perPage));\r\n      url.searchParams.set(\"page\", String(page));\r\n      Object.entries(params).forEach(([key, value])=>{\r\n        url.searchParams.set(key, String(value));\r\n      });\r\n\r\n      const res = await fetch(url.toString());\r\n      if(!res.ok){\r\n        throw new Error(`Fetch failed: ${endpoint} page ${page}`);\r\n      }\r\n      const batch = await res.json();\r\n      results = results.concat(batch);\r\n\r\n      const totalPages = Number(res.headers.get(\"X-WP-TotalPages\") || \"0\");\r\n      if(totalPages && page >= totalPages) break;\r\n      if(batch.length < perPage) break;\r\n      page += 1;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  function buildFromJson(posts, cates){\r\n    const cateById = new Map(cates.map(c=>[c.id, c]));\r\n    const topLevel = cates.filter(c=>!c.parent)\r\n      .slice()\r\n      .sort((a,b)=> getZIndex(a.acf) - getZIndex(b.acf));\r\n    const typeByTopId = new Map();\r\n    topLevel.forEach(c=>{\r\n      typeByTopId.set(c.id, c.slug);\r\n    });\r\n\r\n    const typeLabel = {};\r\n    const types = [];\r\n    const typeColors = {};\r\n    const typeIcons = {};\r\n    const termMap = new Map();\r\n    topLevel.forEach(top=>{\r\n      const key = top.slug;\r\n      const label = titleFromSlug(top.slug);\r\n      typeLabel[key] = label;\r\n      types.push({ key, label });\r\n      typeColors[key] = buildTypeColors(key, top.acf || {});\r\n      const iconUrl = top.acf && top.acf.icon ? String(top.acf.icon) : \"\";\r\n      typeIcons[key] = iconUrl;\r\n      if(top.name) termMap.set(top.name, label);\r\n      if(top.slug) termMap.set(top.slug, label);\r\n    });\r\n    cates.forEach(c=>{\r\n      const label = titleFromSlug(c.slug);\r\n      if(c.name) termMap.set(c.name, label);\r\n      if(c.slug) termMap.set(c.slug, label);\r\n    });\r\n\r\n    const data = posts.map(p=>{\r\n      const cateIds = Array.isArray(p[\"tuition-fee-cate\"]) ? p[\"tuition-fee-cate\"] : [];\r\n      const cate = cateIds.map(id=>cateById.get(id)).find(Boolean);\r\n      const top = cate ? (cate.parent ? cateById.get(cate.parent) : cate) : null;\r\n      const typeKey = top ? typeByTopId.get(top.id) : null;\r\n      const iconUrl = cate && cate.acf && cate.acf.icon ? String(cate.acf.icon) : \"\";\r\n\r\n      const rawTitle = p.title && p.title.rendered ? p.title.rendered : \"\";\r\n      const titleEn = p.acf && p.acf.title_en ? p.acf.title_en : \"\";\r\n      const urlEn = p.acf && p.acf.url_link_en ? p.acf.url_link_en : \"\";\r\n      const urlCh = p.acf && p.acf.url_link ? p.acf.url_link : \"\";\r\n      return {\r\n        type: typeKey,\r\n        cateLabel: cate ? cate.name : \"\",\r\n        iconUrl,\r\n        title: titleEn || (rawTitle ? translateTitle(rawTitle, termMap) : \"\"),\r\n        url: urlEn,\r\n        urlCh,\r\n        urlLabel: urlEn ? \"View\" : (urlCh ? \"View (CH)\" : \"\"),\r\n        date: p.date ? String(p.date).slice(0, 10) : \"\",\r\n        depiction: p.acf && p.acf.depiction_en ? p.acf.depiction_en : \"\",\r\n        picText: p.acf && p.acf[\"pic-text-descriptions_en\"] ? p.acf[\"pic-text-descriptions_en\"] : \"\",\r\n      };\r\n    }).filter(d=>d.type);\r\n\r\n    return { typeLabel, types, data, typeColors, typeIcons };\r\n  }\r\n\r\n  function renderTypeRow(){\r\n    elTypeRow.innerHTML = TYPES.map(t=>{\r\n      const pressed = state.type===t.key ? \"true\" : \"false\";\r\n      const icon = TYPE_ICONS[t.key] || TYPE_ICON[t.key];\r\n      const iconHtml = icon\r\n        ? `<img src=\"${icon}\" alt=\"\">`\r\n        : iconText(t.label);\r\n      return `\r\n        <button class=\"type-card has-theme ${iconClass(t.key)}\" type=\"button\" data-type=\"${t.key}\" aria-pressed=\"${pressed}\" style=\"${typeVars(t.key)}\">\r\n          <div class=\"type-badge ${iconClass(t.key)}\">${iconHtml}<\/div>\r\n          <div class=\"type-name\">${escapeHtml(t.label)}<\/div>\r\n        <\/button>\r\n      `;\r\n    }).join(\"\");\r\n  }\r\n\r\n  function filtered(){\r\n    return DATA\r\n      .filter(d=>d.type===state.type)\r\n      .slice()\r\n      .sort((a, b)=> (a.date || \"\").localeCompare(b.date || \"\"));\r\n  }\r\n\r\n  function renderList(){\r\n    const rows = filtered();\r\n    const { pageRows, totalPages } = paginate(rows);\r\n    elCount.textContent = `Total ${rows.length} items (${TYPE_LABEL[state.type]}) \u00b7 Page ${state.page} \/ ${totalPages}`;\r\n\r\n    if(!rows.length){\r\n      elList.innerHTML = `<div class=\"fb-empty\">No matching results (try resetting or changing filters).<\/div>`;\r\n      elPager.innerHTML = \"\";\r\n      return;\r\n    }\r\n\r\n    elList.innerHTML = pageRows.map(d=>{\r\n      const tags = [\r\n        `<span class=\"fb-tag ${iconClass(d.type)}\">Info Type: ${escapeHtml(TYPE_LABEL[d.type])}<\/span>`\r\n      ].join(\"\");\r\n\r\n      const pic = parsePicText(d.picText);\r\n      const hasExtra = !!(String(d.depiction).trim() || pic.images.length || pic.text);\r\n\r\n      const itemIcon = d.iconUrl || TYPE_ICONS[d.type] || TYPE_ICON[d.type];\r\n      const itemIconHtml = itemIcon\r\n        ? `<img src=\"${itemIcon}\" alt=\"\">`\r\n        : iconText(TYPE_LABEL[d.type]);\r\n      return `\r\n        <div class=\"fb-item\" data-type=\"${d.type}\" style=\"${typeVars(d.type)}\">\r\n          <div class=\"fb-ico ${iconClass(d.type)}\">${itemIconHtml}<\/div>\r\n\r\n          <div class=\"fb-main\">\r\n            <p class=\"fb-title2\"><strong>${escapeHtml(d.title)}<\/strong><\/p>\r\n            <div class=\"fb-meta\">\r\n              <div class=\"fb-tags\">${tags}<\/div>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          ${hasExtra ? `\r\n          <div class=\"fb-actions\">\r\n            <button class=\"fb-toggle fb-toggle-open\" type=\"button\" aria-expanded=\"false\"><span>Expand<\/span><span class=\"fb-arrow\">\u25be<\/span><\/button>\r\n          <\/div>\r\n          <div class=\"fb-expand\">\r\n            ${d.depiction ? `<div class=\"fb-expand-text\">${textToHtml(d.depiction)}<\/div>` : \"\"}\r\n            ${pic.images.length ? `\r\n            <div class=\"fb-expand-media\">\r\n              ${pic.images.map((img)=>`\r\n                <figure>\r\n                  <img src=\"${escapeHtml(img.src)}\" alt=\"${escapeHtml(img.alt)}\">\r\n                  ${img.caption ? `<figcaption class=\"fb-expand-caption\">${escapeHtml(img.caption)}<\/figcaption>` : \"\"}\r\n                <\/figure>\r\n              `).join(\"\")}\r\n            <\/div>\r\n            ` : \"\"}\r\n            ${pic.text ? `<div class=\"fb-expand-text\">${textToHtml(pic.text)}<\/div>` : \"\"}\r\n            <div class=\"fb-expand-actions\">\r\n              ${(d.url || d.urlCh) ? `<a class=\"fb-link\" href=\"${escapeHtml(d.url || d.urlCh)}\" target=\"_blank\" rel=\"noopener\"><img class=\"fb-hand\" src=\"${ASSET_BASE}finger.png\" alt=\"\">${escapeHtml(d.urlLabel)}<\/a>` : \"\"}\r\n              <button class=\"fb-toggle fb-toggle-close\" type=\"button\" aria-expanded=\"false\"><span>Collapse<\/span><span class=\"fb-arrow\">\u25be<\/span><\/button>\r\n            <\/div>\r\n          <\/div>\r\n          ` : ((d.url || d.urlCh)\r\n            ? `<div class=\"fb-actions\"><a class=\"fb-link\" href=\"${escapeHtml(d.url || d.urlCh)}\" target=\"_blank\" rel=\"noopener\"><img class=\"fb-hand\" src=\"${ASSET_BASE}finger.png\" alt=\"\">${escapeHtml(d.urlLabel)}<\/a><\/div>`\r\n            : `<div class=\"fb-actions\"><span style=\"font-size:13px;color:var(--muted);font-weight:700;\">\u2014<\/span><\/div>`\r\n          )}\r\n          <svg class=\"fb-dash\" aria-hidden=\"true\">\r\n            <rect class=\"fb-dash-rect\" x=\"1\" y=\"1\"><\/rect>\r\n          <\/svg>\r\n        <\/div>\r\n      `;\r\n    }).join(\"\");\r\n    renderPager(totalPages);\r\n  }\r\n\r\n  function renderActiveType(){\r\n    applyTypeTheme(state.type);\r\n    const label = TYPE_LABEL[state.type] || \"\";\r\n    const wave = String(label).split(\"\").map((ch, i)=>`\r\n      <span class=\"wave\" style=\"animation-delay:${i * 0.05}s\">${escapeHtml(ch)}<\/span>\r\n    `).join(\"\");\r\n    elActiveType.innerHTML = `\r\n      <span style=\"opacity:.75;font-weight:900;\">Viewing<\/span>\r\n      <span class=\"chip ${iconClass(state.type)}\" style=\"${typeVars(state.type)}\"><span class=\"dot\"><\/span>${wave}<\/span>\r\n    `;\r\n  }\r\n\r\n  \/\/ events (filters)\r\n  elTypeRow.addEventListener(\"click\", (e)=>{\r\n    const b = e.target.closest(\"button[data-type]\");\r\n    if(!b) return;\r\n    state.type = b.dataset.type;\r\n    state.page=1;\r\n    renderTypeRow();\r\n    renderList();\r\n    renderActiveType();\r\n  });\r\n\r\n  elPager.addEventListener(\"click\", (e)=>{\r\n    const b = e.target.closest(\"button[data-page]\");\r\n    if(!b || b.disabled) return;\r\n    state.page = Number(b.dataset.page);\r\n    renderList();\r\n  });\r\n  elList.addEventListener(\"click\", (e)=>{\r\n    const img = e.target.closest(\".fb-expand-media img\");\r\n    if(img){\r\n      openLightbox(img.getAttribute(\"src\") || \"\", img.getAttribute(\"alt\") || \"\");\r\n      return;\r\n    }\r\n    const btn = e.target.closest(\".fb-toggle\");\r\n    if(!btn) return;\r\n    const item = btn.closest(\".fb-item\");\r\n    const panel = item ? item.querySelector(\".fb-expand\") : null;\r\n    if(!item || !panel) return;\r\n    const isOpen = item.classList.toggle(\"is-open\");\r\n    item.querySelectorAll(\".fb-toggle\").forEach((toggleBtn)=>{\r\n      toggleBtn.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\r\n    });\r\n    if(isOpen){\r\n      panel.style.maxHeight = \"0px\";\r\n      requestAnimationFrame(()=>{\r\n        panel.style.maxHeight = panel.scrollHeight + \"px\";\r\n      });\r\n      const onOpenDone = (ev)=>{\r\n        if(ev.propertyName !== \"max-height\") return;\r\n        panel.style.maxHeight = \"none\";\r\n        panel.removeEventListener(\"transitionend\", onOpenDone);\r\n      };\r\n      panel.addEventListener(\"transitionend\", onOpenDone);\r\n      return;\r\n    }\r\n    if(panel.style.maxHeight === \"none\"){\r\n      panel.style.maxHeight = panel.scrollHeight + \"px\";\r\n    }\r\n    requestAnimationFrame(()=>{\r\n      panel.style.maxHeight = \"0px\";\r\n    });\r\n  });\r\n  if(elLightbox){\r\n    elLightbox.addEventListener(\"click\", (e)=>{\r\n      if(e.target === elLightbox) closeLightbox();\r\n    });\r\n  }\r\n  if(elLightboxClose){\r\n    elLightboxClose.addEventListener(\"click\", closeLightbox);\r\n  }\r\n  document.addEventListener(\"keydown\", (e)=>{\r\n    if(e.key === \"Escape\") closeLightbox();\r\n  });\r\n\r\n  \/\/ init\r\n  (async ()=>{\r\n    try{\r\n      if(elLoading) elLoading.classList.remove(\"is-hidden\");\r\n      const [posts, cates] = await Promise.all([\r\n        fetchAll(REST_ENDPOINTS.posts),\r\n        fetchAll(REST_ENDPOINTS.cate),\r\n      ]);\r\n      const built = buildFromJson(posts, cates);\r\n      TYPE_LABEL = built.typeLabel;\r\n      TYPES = built.types;\r\n      DATA = built.data;\r\n      TYPE_COLORS = built.typeColors;\r\n      TYPE_ICONS = built.typeIcons;\r\n\r\n      state.type = TYPES[0] ? TYPES[0].key : null;\r\n      state.page = 1;\r\n\r\n      renderTypeRow();\r\n      renderList();\r\n      renderActiveType();\r\n      if(elLoading) elLoading.classList.add(\"is-hidden\");\r\n    }catch(err){\r\n      console.error(err);\r\n      elList.innerHTML = `<div class=\"fb-empty\">Failed to load data. Please try again later.<\/div>`;\r\n      elCount.textContent = \"\";\r\n      elPager.innerHTML = \"\";\r\n      if(elLoading) elLoading.classList.add(\"is-hidden\");\r\n    }\r\n  })();\r\n})();\r\n<\/script>\r\n\n<!-- \/end HFCM by 99 Robots -->\n<\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Loading&#8230; Info Type \u2715<\/p>\n","protected":false},"author":11,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-blank-4.php","meta":{"_themeisle_gutenberg_block_has_review":false,"_vp_format_video_url":"","_vp_image_focal_point":[]},"acf":[],"_links":{"self":[{"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/pages\/12567"}],"collection":[{"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/comments?post=12567"}],"version-history":[{"count":6,"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/pages\/12567\/revisions"}],"predecessor-version":[{"id":12597,"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/pages\/12567\/revisions\/12597"}],"wp:attachment":[{"href":"https:\/\/control.mcu.edu.tw\/en\/wp-json\/wp\/v2\/media?parent=12567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}