/* ============================================================
   สไตล์ของ component ใน resources/views/frontend/theme_mrta/modules/components
   ยกมาจาก mrta-booking (public/front/css/main.css) ให้หน้าตาตรงกันทุกระบบ
   หน้าไหนอยากปรับขนาด/สี ให้ override ในไฟล์ css ของหน้านั้น ไม่แก้ที่นี่
   ============================================================ */

/* สีชุดเดียวกับ mrta-booking (front/color/main.css) - ธีมนี้ยังไม่มีตัวแปรระดับ 900/700/500 */
:root {
    --bs-primary-900: #213069;
    --bs-primary-700: #273A82;
    --bs-primary-500: #002777;
    --bs-secondary-900: #D82028;
    --bs-secondary-700: #a54449;
    --bs-gray-900: #6f757c; /* เดิม #7B8189 เข้มขึ้นให้ผ่าน 4.5:1 */
    --bs-gray-500: #D7DBE0;
    --bs-gray-300: #E9EEF3;
}

/* ==========================================================================
   Breadcrumb component (<x-breadcrumb />)
   ========================================================================== */
.fe-breadcrumb {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.6rem;
    font-size: 0.85rem;
    color: #55608a;
    margin-bottom: 0.5rem;
}
.fe-breadcrumb a {
    color: #55608a;
    text-decoration: none;
}
.fe-breadcrumb a:hover {
    color: var(--bs-primary);
}
.fe-breadcrumb i {
    font-size: 0.6rem;
    color: #9aa3b8;
}
.fe-breadcrumb span {
    color: var(--bs-primary);
    font-weight: 600;
}
/* crumb ที่ js เปลี่ยนให้กดกลับได้ */
.fe-breadcrumb span.is-link {
    color: #55608a;
    font-weight: 400;
    cursor: pointer;
}
.fe-breadcrumb span.is-link:hover {
    color: var(--bs-primary);
}

/* ==========================================================================
   Hero component (<x-hero />)
   ========================================================================== */
.fe-hero {
    display: flex;
    align-items: center;
    gap: 1.5rem;
    min-height: 240px;
    padding: 1rem 0 3rem;
}
.fe-hero-text {
    flex: 1 1 50%;
    min-width: 0;
}
.fe-hero-text h1 {
    color: var(--bs-primary);
    font-weight: 800;
    font-size: clamp(1.8rem, 3vw, 2.8rem);
    margin: 0 0 1rem;
}
.fe-hero-text p {
    color: #3a4668;
    font-size: clamp(0.92rem, 1.1vw, 1.1rem);
    line-height: 1.8;
    margin: 0;
}

/* ---------- variant: split (ข้อความซ้าย รูปขวาจางเข้าพื้นหลัง) ---------- */
.fe-hero-img {
    flex: 1 1 50%;
    align-self: stretch;
    min-height: 220px;
    background: var(--fe-hero-image) center / cover no-repeat;
    border-radius: 24px;
    -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 30%);
    mask-image: linear-gradient(90deg, transparent 0%, #000 30%);
}

/* ---------- variant: banner (รูปเต็มพื้นหลัง) ---------- */
.fe-hero-banner {
    position: relative;
    min-height: 260px;
    padding: 2.5rem;
    border-radius: 24px;
    overflow: hidden;
    background: #eef3fc;
}
/* รูปพื้นหลังเป็น span ตกแต่ง (.fe-hero-bg) ไม่ใช่ background ของ section
   ตัวหนังสือจึงไม่วางบนรูปพื้นหลัง (WCAG AAA - ตัวตรวจวัดคอนทราสต์บนรูปไม่ได้) */
.fe-hero-bg {
    position: absolute;
    inset: 0;
    background: var(--fe-hero-image) right center / cover no-repeat;
}
/* ไล่สีทับรูปให้ข้อความฝั่งซ้ายอ่านง่าย */
.fe-hero-banner::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(90deg, #eef3fc 0%, rgba(238, 243, 252, 0.92) 35%, rgba(238, 243, 252, 0) 70%);
}
.fe-hero-banner .fe-hero-text {
    position: relative;
    z-index: 2;
    flex: 1 1 55%;
}

@media (max-width: 991.98px) {
    .fe-hero-split {
        flex-direction: column;
        align-items: flex-start;
        min-height: 0;
        padding-bottom: 2.5rem;
    }
    .fe-hero-img {
        width: 100%;
        min-height: 200px;
        -webkit-mask-image: none;
        mask-image: none;
    }
}
@media (max-width: 767.98px) {
    .fe-hero-banner {
        min-height: 200px;
        padding: 1.5rem 1.25rem;
        border-radius: 18px;
    }
    .fe-hero-banner::before {
        background: linear-gradient(180deg, rgba(238, 243, 252, 0.95) 0%, rgba(238, 243, 252, 0.8) 100%);
    }
}

/* ══════════════════════════════════════
       BUTTONS - component button / see-more
       .btn-app = ฐาน, ต่อด้วย variant เดียว (fill / outline / capsule / muted / danger / success)
   ══════════════════════════════════════ */
.btn-app {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    border-radius: 6px;
    padding: 10px 22px;
    font-size: 15px;
    font-weight: 500;
    line-height: 1.2;
    text-decoration: none;
    cursor: pointer;
    outline: none;
    transition: all .15s ease-in-out;
}

/* ── variant: ทึบกรมท่า ── */
.btn-app-fill {
    background: var(--bs-primary-900);
    border: 1.5px solid var(--bs-primary-900);
    color: #fff;
}
.btn-app-fill:hover,
.btn-app-fill:focus {
    background: var(--bs-primary-700);
    border-color: var(--bs-primary-700);
    color: #fff;
}

/* ── variant: ขอบกรมท่าพื้นขาว ── */
.btn-app-outline {
    background: #fff;
    border: 1.5px solid var(--bs-primary-900);
    color: var(--bs-primary-900);
}
.btn-app-outline:hover,
.btn-app-outline:focus {
    background: var(--bs-primary-900);
    color: #fff;
}

/* ── variant: เทาจาง (ปุ่มรองที่ไม่ใช่การกระทำหลัก) ── */
.btn-app-muted {
    background: var(--bs-gray-300);
    border: 1.5px solid transparent;
    color: var(--bs-gray-900);
}
.btn-app-muted:hover,
.btn-app-muted:focus {
    background: var(--bs-gray-500);
    color: var(--bs-primary-900);
}

/* ── variant: แดง (การกระทำที่ย้อนกลับไม่ได้) ── */
.btn-app-danger {
    background: var(--bs-secondary-900);
    border: 1.5px solid var(--bs-secondary-900);
    color: #fff;
}
.btn-app-danger:hover,
.btn-app-danger:focus {
    background: var(--bs-secondary-700);
    border-color: var(--bs-secondary-700);
    color: #fff;
}

/* ── variant: เขียวจาง (สถานะที่ทำไปแล้ว เช่น ลงทะเบียนเรียนแล้ว) - เพิ่มในระบบ e-Learning ── */
.btn-app-success {
    background: #d9f1e8;
    border: 1.5px solid transparent;
    color: #094d32; /* เดิม #0b7242 - WCAG AAA 7:1 บนพื้นเขียวอ่อน (ทั้งปกติและตอนชี้) */
}
.btn-app-success:hover,
.btn-app-success:focus {
    background: #c8ebdc;
    color: #094d32;
}

/* ── variant: แคปซูลกรมท่า (ดูทั้งหมด / ดูเพิ่มเติม) ── */
.btn-app-capsule {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    background: var(--bs-primary-900);
    color: #fff;
    font-size: 15px;
    font-weight: 600;
    border: 0;
    border-radius: 50rem;
    padding: 10px 28px;
    text-decoration: none;
    cursor: pointer;
    transition: background .15s;
}
.btn-app-capsule:hover {
    background: var(--bs-primary-700);
    color: #fff;
}

/* ══════════════════════════════════════
       BREADCRUMB - แถบกรมท่าติดใต้ header (includes/breadcrumbs) ใช้ทุกหน้า
       ใส่ค่าครบทุกตัว เพราะหน้าแรกกับหน้าอื่นโหลด css ไม่เหมือนกัน
       (เช่น p { Roboto / เทา / line-height 1.85 } ใน main-styles.css มีแค่หน้าแรก)
       ค่าทั้งหมดยกมาจากหน้าตาของหน้าแรกตามแบบ
   ══════════════════════════════════════ */
.bg-breadcrumbs {
    display: flex;
    align-items: center;
    height: 37.5px;
    background: #002777;
    color: #fff;
    font-family: 'IBM Plex Sans Thai', 'Prompt', sans-serif;
    font-size: 16.5px;
    line-height: 1;
}
/* แนวเดียวกับเนื้อหาหน้าแรก / footer (กว้างสุด 1332 เว้นข้าง 15) */
.bg-breadcrumbs .bc-inner {
    width: 100%;
    max-width: 1332px;
    margin: 0 auto;
    padding: 0 15px;
}
.bg-breadcrumbs .bc-link {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
}
.bg-breadcrumbs .bc-item {
    display: inline-flex;
    align-items: center;
    color: #8093bb;
    font-weight: 300;
}
.bg-breadcrumbs .bc-item:hover { color: #fff; }
.bg-breadcrumbs .bc-pin { width: 15px; height: auto; margin-right: 8px; }
.bg-breadcrumbs p {
    margin: 0;
    color: #76777a;
    font-family: inherit;
    font-size: 16px;
    font-weight: 400;
    line-height: 1.85;
}
.bg-breadcrumbs .bc-sep { padding: 0 4px 0 6px; color: #fff; font-size: 11px; }
.bg-breadcrumbs .bc-current { color: #fff; }
@media (max-width: 767.98px) {
    .bg-breadcrumbs .bc-inner { padding: 0 16px; }
}
@media (max-width: 575.98px) {
    .bg-breadcrumbs p { font-size: 13px; }
}

/* ══════════════════════════════════════
       DROPDOWN มาตรฐาน - หน้าตาเดียวกับ portal (main.css ของ portal)
       .nav-dd-menu  ดรอปดาวน์โปรไฟล์บน header
       .app-dd-menu  ดรอปดาวน์ตัวกรอง (component select-dropdown)
       ต้องเขียนคู่กับ .dropdown-menu เพราะ specificity เท่ากันแล้วของ bootstrap จะชนะ
   ══════════════════════════════════════ */
.dropdown-menu.nav-dd-menu,
.dropdown-menu.app-dd-menu {
    border: none;
    border-radius: 12px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, .12);
    margin-top: 4px;
    padding: 8px;
    min-width: 165px;
}
.nav-dd-menu .dropdown-item,
.app-dd-menu .dropdown-item {
    border-radius: 8px;
    font-size: 16px;
    font-weight: 400;
    padding: 8px 12px;
    color: #333;
}
/* ตัวเลือกที่เลือกอยู่ - พื้นเทา ตัวหนังสือกรมท่า */
.app-dd-menu .dropdown-item.on {
    background: var(--bs-gray-300);
    color: var(--bs-primary-900);
    font-weight: 600;
}
.nav-dd-menu .dropdown-item:hover,
.nav-dd-menu .dropdown-item:focus,
.app-dd-menu .dropdown-item:hover,
.app-dd-menu .dropdown-item:focus {
    background: var(--bs-gray-300);
    color: var(--bs-secondary-900);
}
/* height/background: bootstrap 5.1 ของระบบนี้มี hr:not([size]){height:1px} + พื้นสีตัวอักษร
   ทำให้ได้เส้นเทาเข้มซ้อนอีกเส้น (portal ใช้ 5.3 ไม่มีปัญหานี้) */
.nav-dd-menu .dropdown-divider {
    height: 0;
    margin: 6px 4px;
    background-color: transparent;
    border-top-color: var(--bs-gray-300);
    opacity: 1;
}

.app-dd {
    position: relative;
    display: inline-block;
    min-width: 170px;
}
/* เต็มความกว้างคอลัมน์ */
.app-dd-block {
    display: block;
    min-width: 0;
}
.app-dd-toggle {
    display: block;
    width: 100%;
    height: 40px;
    background: #fff;
    border: 1px solid #E1E8F3;
    border-radius: 6px;
    color: var(--bs-primary-900);
    font-size: 15px;
    text-align: left;
    padding: 0 34px 0 16px;
    cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23213069' stroke-width='2'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 12px center;
    background-size: 14px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* ลูกศรของกรอบเป็น background-image - ให้ตัวหนังสือมีพื้นสีของตัวเอง ตัวตรวจ WCAG จะได้วัดคอนทราสต์ได้ (แบบ portal) */
.app-dd-toggle .app-dd-label,
.app-dd-toggle .app-dd-prefix {
    background-color: inherit;
}
.app-dd-toggle:focus,
.app-dd-toggle[aria-expanded="true"] {
    outline: none;
    border-color: var(--bs-primary-500);
}
/* variant: พื้นฟ้าจาง ไม่มีเส้นขอบ */
.app-dd-soft .app-dd-toggle {
    background-color: #DEE8F6;
    border-color: transparent;
}
.app-dd-soft .app-dd-toggle:focus,
.app-dd-soft .app-dd-toggle[aria-expanded="true"] {
    border-color: var(--bs-primary-500);
}
/* variant: มีป้ายชื่อในกรอบ "หมวดหมู่ | ทั้งหมด" (prop label ของ component - หน้าหลักสูตรทั้งหมด)
   ชุดเดียวกับ main.css ของ mrta-news - ทั้งกรอบเป็นปุ่มเดียว กดตรงป้ายก็เปิด แผงตัวเลือกกว้างเท่ากรอบ */
.app-dd-labeled .app-dd-toggle {
    display: flex;
    align-items: center;
    padding-left: 0;
    border-color: #B9C3D8;
}
.app-dd-prefix {
    flex: none;
    padding: 0 1em;
    border-right: 1px solid #C6CEDE;
    color: #454f69; /* เดิม #5B6A8F - WCAG AAA 7:1 */
    line-height: 1.7;
}
.app-dd-labeled .app-dd-label {
    flex: 1;
    min-width: 0;
    padding-left: .75em;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
    font-weight: 600;
}
.app-dd-labeled .dropdown-menu.app-dd-menu {
    width: 100%;
}
@media (max-width: 767.98px) {
    .app-dd {
        min-width: 140px;
    }
    .app-dd-toggle {
        height: 36px;
        font-size: 14px;
    }
}

/* ══════════════════════════════════════
       หน้ารายการ - ชิ้นส่วนชุดเดียวกับหน้าข่าวสารทั้งหมดของ mrta-news (/news)
       .sub-banner    แบนเนอร์หัวหน้า (component sub-banner) - news: .nw-subhero
       .list-toolbar  ดรอปดาวน์ + ปุ่มสลับมุมมอง (component list-toolbar) - news: .nw-toolbar
       .pagination-custom  เลขหน้า PREV 01 02 … NEXT (component pagination_custom) - news: main.css
       ขนาดเป็น px คงที่ สเกลเดียวกับ news / belib ไม่ขยายตาม vw
   ══════════════════════════════════════ */
/* ภาพท้องฟ้า banner-sub.png (1920×250) หัวเรื่องขาวกลางภาพ มีขีดแดงนำหน้า */
.sub-banner {
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    min-height: 180px;
    padding: 24px 16px;
    background: #1747c9;
    text-align: center;
}
/* รูปท้องฟ้าอยู่ใน pseudo-element - หัวเรื่องไม่วางบนรูปพื้นหลัง (WCAG AAA) กลางภาพเป็นน้ำเงินเข้ม ขาว 7.5:1 ขึ้นไป */
.sub-banner::after {
    content: "";
    position: absolute;
    inset: 0;
    background: var(--sub-banner-image) center / cover no-repeat;
}
.sub-banner-title {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    gap: 12px;
    margin: 0;
    color: #fff;
    font-family: 'Prompt', sans-serif;
    font-weight: 500;
    font-size: 36px;
    line-height: 1.3;
    text-shadow: 0 2px 14px rgba(0, 25, 90, .3);
}
.sub-banner-title::before {
    content: "";
    flex: none;
    width: 8px;
    height: .82em;
    background: var(--bs-secondary-900);
}

.list-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px 16px;
    margin-bottom: 30px;
}
.list-toolbar-filters {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 16px;
}
.list-toolbar .app-dd {
    width: 320px;
    min-width: 0;
}
.list-toolbar .app-dd-toggle {
    height: 40px;
    font-size: 15px;
}
/* ปุ่มสลับมุมมอง - ยกมาจาก belib (products.css .btn-show-view) ขนาดเดียวกับ news
   เป็นลิงก์ ?view= ไม่ต้องมี JS */
.list-toolbar-views {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0;
    padding: 0;
    list-style: none;
}
.btn-show-view {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 40px;
    height: 40px;
    border-radius: 6px;
    background-color: #EDF1F8;
    color: #B4BDCE;
    font-size: 1.1rem;
    text-decoration: none;
    transition: background-color .15s, color .15s;
}
.btn-show-view:hover { color: var(--bs-primary-900); }
.btn-show-view.active { background-color: var(--bs-secondary-900); color: #fff; }
.btn-show-view:focus-visible { outline: 3px solid rgba(85, 112, 208, .55); outline-offset: 2px; }

.pagination-custom {
    margin-top: 40px;
}
.pagination-custom-list {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
    list-style: none;
    padding: 0;
    margin: 0;
}
/* เลขหน้าเป็นเทา หน้าที่เลือกอยู่เป็นแดง PREV/NEXT ตัวเล็ก */
.pagination-custom-btn {
    background: none;
    border: none;
    outline: none;
    padding: 0.25rem 0.6rem;
    font-size: 1.35rem;
    font-weight: 500;
    color: #8b93a7;
    cursor: pointer;
    transition: color .15s;
    letter-spacing: 0.02em;
}
.pagination-custom-btn:hover:not(:disabled) {
    color: var(--bs-secondary-900) !important;
}
.pagination-custom-btn.active {
    color: var(--bs-secondary-900) !important;
    font-weight: 700;
    cursor: default;
}
.pagination-custom-btn.prev,
.pagination-custom-btn.next {
    font-size: 0.95rem;
    font-weight: 600;
    color: #8b93a7;
    letter-spacing: 0.08em;
    padding: 0.25rem 0.75rem;
}
.pagination-custom-btn.prev:hover:not(:disabled),
.pagination-custom-btn.next:hover:not(:disabled) {
    color: var(--bs-primary-900);
}
.pagination-custom-btn:disabled {
    color: #C6CEDE;
    cursor: default;
}
/* จุดไข่ปลากดได้ - คลิกแล้วสลับเป็นช่องกรอกเลขหน้า */
.pagination-custom-ellipsis {
    font-size: 1.35rem;
    color: var(--bs-primary-900);
    padding: 0 0.4rem;
    line-height: 1;
}
.pagination-custom-jump {
    width: 4.25rem;
    padding: 0.1rem 0.4rem;
    font-size: 1.1rem;
    font-weight: 500;
    text-align: center;
    color: var(--bs-primary-900);
    background: #fff;
    border: 1px solid #E1E8F3;
    border-radius: 6px;
    outline: none;
}
.pagination-custom-jump:focus {
    border-color: var(--bs-primary-500);
}

@media (max-width: 767.98px) {
    .sub-banner { min-height: 130px; }
    .sub-banner-title { font-size: 28px; }
    /* ดรอปดาวน์เต็มแถว ปุ่มสลับมุมมองลงไปชิดขวาแถวถัดไป */
    .list-toolbar-filters,
    .list-toolbar .app-dd { width: 100%; }
    .list-toolbar-views { margin-left: auto; }
}

/* ══════════════════════════════════════
       TABS - component tabs + tab
       แท็บที่เลือกอยู่ = คลาส .on (JS ของแต่ละหน้า add/remove คลาสนี้)
   ══════════════════════════════════════ */
.app-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 0 28px;
    border-bottom: 1px solid #DEE5F0;
    margin-bottom: 20px;
}
/* กระจายแท็บเต็มความกว้างแทนการชิดซ้าย */
.app-tabs-spread {
    justify-content: space-between;
    gap: 0 16px;
}
.app-tab {
    background: none;
    border: 0;
    padding: 0 2px 12px;
    font-size: 17px;
    font-weight: 600;
    color: #454f69; /* เดิม #A9B2C6 - WCAG AAA 7:1 */
    cursor: pointer;
    position: relative;
    transition: color .15s;
}
.app-tab:hover {
    color: var(--bs-primary-700);
}
.app-tab.on {
    color: var(--bs-primary-900);
    font-weight: 700;
}
/* ขีดใต้แท็บที่เลือก ทับเส้นคั่นของ .app-tabs พอดี */
.app-tab.on::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 2px;
    background: var(--bs-primary-900);
}
/* จอเล็ก: เลื่อนแนวนอนบรรทัดเดียว ไม่ตัดขึ้นบรรทัดใหม่ */
@media (max-width: 991.98px) {
    .app-tabs {
        flex-wrap: nowrap;
        overflow-x: auto;
        overflow-y: hidden;
        scrollbar-width: none;
    }
    .app-tabs::-webkit-scrollbar {
        display: none;
    }
    .app-tab {
        flex: 0 0 auto;
        white-space: nowrap;
    }
}
@media (max-width: 767.98px) {
    .app-tab {
        padding-top: 10px;
    }
}
@media (max-width: 575.98px) {
    .app-tabs {
        gap: 0 18px;
    }
    .app-tab {
        font-size: 15px;
        padding-bottom: 10px;
    }
}

/* ดาวให้คะแนนที่ได้ (displayRatingStars / สคริปต์รีวิว) - เดิมเป็น style="color:#ffb509" */
.star-on { color: #ffb509; }

/* ══════════════════════════════════════
       EMPTY STATE (component empty-state)
   ══════════════════════════════════════ */
.empty-state {
    text-align: center;
    padding: 48px 16px;
    color: var(--bs-primary-900);
    user-select: none;
}
/* Font Awesome ล็อกความกว้างไอคอนไว้ 1.25em ต้อง margin auto เองให้อยู่กึ่งกลาง */
.empty-state i {
    display: block;
    font-size: 44px;
    margin: 0 auto 16px;
    color: var(--bs-primary-900);
}
.empty-state p {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
}
.empty-state-boxed {
    background: #fff;
    border: 1px dashed #D7DEEC;
    border-radius: 10px;
    color: #454f69; /* เดิม #8B93A7 - WCAG AAA 7:1 */
    padding: 40px 16px;
}
.empty-state-boxed p {
    font-weight: 400;
}
.empty-state-action {
    margin-top: 1rem;
}

/* ══════════════════════════════════════
       รีวิว / คอมเมนต์ / ดาวให้คะแนน (component comment-list, comment-form, rating-input, comment-login-prompt)
       ยกมาจาก mrta-belib (public/front/css/main.css - ชุดเดียวกับหน้ารายละเอียดทรัพยากร)
       แก้หน้าตาที่นี่ให้แก้ที่ belib ด้วย สองระบบจะได้เหมือนกัน
   ══════════════════════════════════════ */
.rv-card {
    display: flex;
    gap: 20px;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 3px 16px rgba(33, 48, 105, .08);
    padding: 22px 26px;
    margin-bottom: 18px;
}
.rv-avatar {
    flex: 0 0 62px;
    width: 62px;
    height: 62px;
    border-radius: 50%;
    object-fit: cover;
}
/* อวาตาร์เป็น <span> (comment-list / comment-form): รูปผู้ใช้ทับรูปปริยาย */
span.rv-avatar,
span.cm-avatar {
    display: block;
    background: var(--rv-avatar) center / cover no-repeat, var(--rv-avatar-fallback) center / cover no-repeat, #e4ebf5;
}
.rv-body {
    flex: 1;
    min-width: 0;
}
.rv-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
}
.rv-name {
    font-size: 17px;
    font-weight: 700;
    color: var(--bs-primary-900);
}
.rv-meta {
    display: flex;
    align-items: center;
    gap: 12px;
}
.rv-time {
    font-size: 14px;
    color: #454f69; /* เดิม #63759c - WCAG AAA 7:1 */
}
.rv-text {
    font-size: 15px;
    line-height: 1.75;
    color: var(--bs-primary-900);
    margin: 10px 0 0;
    display: -webkit-box;
    -webkit-line-clamp: 5;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.rv-tools {
    display: flex;
    gap: 10px;
    margin-top: 12px;
}
.rv-tool {
    background: transparent;
    border: 1px solid var(--bs-primary-900);
    color: var(--bs-primary-900);
    border-radius: 50rem;
    font-size: 13px;
    padding: 3px 14px;
    cursor: pointer;
    transition: all .15s;
}
.rv-tool:hover {
    background: var(--bs-primary-900);
    color: #fff;
}
.rv-tool-danger {
    border-color: var(--bs-secondary-900);
    color: var(--bs-secondary-900);
}
.rv-tool-danger:hover {
    background: var(--bs-secondary-900);
}
/* ดาวในการ์ดรีวิว - displayRatingStars() ใส่ ms-2 มาให้ ซึ่งห่างเกินไปในแถวหัวการ์ด (belib: products.css) */
.pd-stars .fa-star,
.pd-stars .fa-star-half-alt {
    margin-left: 2px !important;
    font-size: 15px;
}
.star-off {
    color: #D2D9E6;
}

.cm-row {
    display: flex;
    align-items: flex-start;
    gap: 18px;
}
.cm-avatar {
    flex: 0 0 74px;
    width: 74px;
    height: 74px;
    border-radius: 50%;
    object-fit: cover;
}
/* กล่องข้อความมีหางชี้ไปทางอวาตาร์แบบบอลลูนสนทนา */
.cm-box {
    position: relative;
    flex: 1;
    min-width: 0;
}
.cm-box::before {
    content: "";
    position: absolute;
    left: -9px;
    top: 26px;
    width: 0;
    height: 0;
    border-top: 9px solid transparent;
    border-bottom: 9px solid transparent;
    border-right: 9px solid #EDEFF2;
}
.cm-input {
    width: 100%;
    background: #F7F7F7;
    border: 0;
    border-radius: 8px;
    padding: 16px 18px;
    font-size: 15px;
    color: var(--bs-primary-900);
    resize: vertical;
    outline: none;
}
.cm-input::placeholder {
    color: #63759c;
}
.cm-input:focus {
    box-shadow: 0 0 0 2px rgba(33, 48, 105, .15);
}
.cm-input:disabled {
    opacity: .6;
}
.cm-actions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 18px;
    margin-top: 18px;
}
/* กล่องชวนเข้าสู่ระบบ - ขึ้นแทนช่องเขียนคอมเมนต์เมื่อยังไม่ได้ล็อกอิน */
.cm-login {
    display: flex;
    align-items: center;
    gap: 18px;
    margin-top: 18px;
    padding: 20px 24px;
    background: #EDEFF2;
    border-radius: 8px;
}
.cm-login-icon {
    flex: 0 0 auto;
    width: 48px;
    height: 48px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: #fff;
    color: var(--bs-primary-500);
    font-size: 1.35rem;
}
.cm-login-text {
    flex: 1 1 auto;
    min-width: 0;
}
.cm-login-title {
    font-size: 1rem;
    font-weight: 600;
    color: var(--bs-primary-900);
}
.cm-login-hint {
    margin-top: 2px;
    font-size: .88rem;
    line-height: 1.5;
    color: #454f69; /* เดิม #606b85 - WCAG AAA 7:1 */
}
.cm-login-btn {
    flex: 0 0 auto;
}
.cm-rate {
    display: flex;
    align-items: center;
    gap: 8px;
}
.cm-rate-label {
    font-size: 15px;
    color: var(--bs-primary-900);
    margin: 0;
}
.rate-star {
    display: flex;
}
.rate-star a,
.rate-star button {
    padding: 0 3px;
    border: 0;
    background: none;
    color: inherit;
    cursor: pointer;
    font-size: 18px;
    line-height: 1;
}

/* ══════════════════════════════════════
       หน้ารายละเอียดรายวิชา (modules/course/*) - ส่วนที่แก้ใหม่
       อยู่ในไฟล์นี้แทน curriculum.css เพราะไฟล์นี้โหลดพร้อมเลขเวอร์ชัน (แก้แล้วเบราว์เซอร์ไม่ค้างของเก่า)
   ══════════════════════════════════════ */
/* หัวข้อที่แท็บด้านบนเลื่อนมาหา (tabindex=-1) - เอาโฟกัสมาเพื่อ screen reader ไม่ต้องมีกรอบ/พื้นหลัง */
.cd-anchor:focus {
    outline: none;
    background: transparent;
    box-shadow: none;
}
.cd-anchor {
    scroll-margin-top: 110px;
}
.empty-state.cd-empty {
    padding: 32px 16px;
}
.empty-state.cd-empty i {
    font-size: 34px;
    color: #B7C3DC;
    margin-bottom: 12px;
}

/* ความคืบหน้าการเรียน (แถบข้างรายการบทเรียน) */
.cd-progress {
    margin-bottom: 18px;
    padding: 16px 18px;
    background: #fff;
    border: 1px solid #E3E9F3;
    border-radius: 12px;
    box-shadow: 0 3px 14px rgba(33, 48, 105, .06);
}
.cd-progress-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}
.cd-progress-label {
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-primary-900);
}
.cd-progress-pct {
    font-size: 22px;
    font-weight: 700;
    line-height: 1;
    color: var(--bs-primary-900);
}
.cd-progress-track {
    height: 8px;
    border-radius: 50rem;
    background: #E8EDF5;
    overflow: hidden;
}
.cd-progress-fill {
    height: 100%;
    min-width: 0;
    border-radius: 50rem;
    background: var(--bs-primary-900);
    transition: width .4s ease;
}
.cd-progress.is-done .cd-progress-fill { background: #10AE64; }
.cd-progress.is-done .cd-progress-pct  { color: #10AE64; }
.cd-progress-note {
    margin: 10px 0 0;
    font-size: 13px;
    color: #606b85;
}
.cd-progress-dot {
    margin: 0 4px;
}

/* ประกาศจากผู้สอน */
.cd-announce {
    display: flex;
    gap: 12px;
    padding: 18px 20px;
    background: #fff;
    border: 1px solid #E3E9F3;
    border-left: 4px solid var(--bs-secondary-900);
    border-radius: 10px;
}
.cd-announce-pin {
    flex: none;
    width: 22px;
    height: 22px;
    margin-top: 2px;
}
.cd-announce-body {
    min-width: 0;
    line-height: 1.75;
    overflow-wrap: anywhere;
}
.cd-announce-body > :last-child {
    margin-bottom: 0;
}

/* รีวิว */
.cd-review-summary {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 22px;
}
.cd-review-score {
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
    color: var(--bs-primary-900);
}
.cd-review-count {
    color: #454f69; /* เดิม #606b85 - WCAG AAA 7:1 */
    font-size: 14px;
}
.cd-review-write {
    margin-top: 36px;
}
.cd-review-write-title {
    font-size: 20px;
    font-weight: 700;
    color: var(--bs-primary-900);
    margin: 0 0 16px;
}
.cd-review-note {
    margin: 0 0 14px;
    padding: 10px 14px;
    border-radius: 8px;
    background: #EAF6EF;
    color: #1E7A4C;
    font-size: 14px;
}
.cd-review-status {
    margin: 12px 0 0;
    text-align: right;
    font-size: 14px;
    color: #1E7A4C;
}
.cd-review-status.is-error {
    color: var(--bs-secondary-900);
}
.cd-modal {
    border: 0;
    border-radius: 14px;
    padding: 12px 8px 8px;
}
.cd-modal-title {
    font-weight: 700;
    color: var(--bs-primary-900);
    margin: 8px 0 6px;
}
.cd-modal-text {
    color: #606b85;
    font-size: 14px;
    margin: 0 0 18px;
}
.cd-modal .rate-star a {
    font-size: 26px;
}

@media (max-width: 767.98px) {
    .rv-card {
        gap: 14px;
        padding: 16px 18px;
    }
    .rv-avatar {
        flex-basis: 46px;
        width: 46px;
        height: 46px;
    }
    .cm-avatar {
        flex-basis: 52px;
        width: 52px;
        height: 52px;
    }
}
@media (max-width: 575.98px) {
    .cm-login {
        flex-direction: column;
        align-items: flex-start;
        gap: 14px;
        padding: 18px;
    }
    .cm-login-btn {
        width: 100%;
        justify-content: center;
    }
    .cm-actions {
        flex-wrap: wrap;
        justify-content: space-between;
        gap: 12px;
    }
}
