@charset "UTF-8";
/* css/custom-hover.css */
.custom-hover .hover-show {
    opacity: 0;
    -webkit-transition: all ease-in-out .2s;
    -o-transition: all ease-in-out .2s;
    transition: all ease-in-out .2s;
}

.custom-hover:hover .hover-show {
    opacity: 1;
    -webkit-transition: all ease-in-out .2s;
    -o-transition: all ease-in-out .2s;
    transition: all ease-in-out .2s;
}
.custom-hover .hover-hide {
    opacity: 1;
    -webkit-transition: all ease-in-out .2s;
    -o-transition: all ease-in-out .2s;
    transition: all ease-in-out .2s;
}

.custom-hover:hover .hover-hide {
    opacity: 0;
    -webkit-transition: all ease-in-out .2s;
    -o-transition: all ease-in-out .2s;
    transition: all ease-in-out .2s;
}

/* css/app.css */
* {
    scroll-behavior: smooth;
}

body {
    /* Chi dung font du dau tieng Viet; khong de "Helvetica Neue" (nhieu may Windows cai ban thieu dau) */
    font-family: 'Be Vietnam Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
    line-height: 1.6;
    font-size: 1rem;
}

button:focus{
    outline: none!important;
    box-shadow: none!important;
}
ul li {
    list-style: none;
}

a {
    color: unset;
}

a img {
    border: none
}

img{
    object-fit: cover;
}

a:hover {
    text-decoration: none
}

button:focus {
    outline: none;
}

.btn-round {
    border-radius: 30px;
}

.full-rounded {
    border-radius: 1000px;
}

.w-100 {
    width: 100%;
}

.logo {
    width: 20px !important;
    height: 20px !important;
    object-fit: cover;
}

.h-100 {
    height: 100%;
}

.logo-sm {
    width: 30px !important;
    height: 30px !important;
    object-fit: cover;
}
.logo-md {
    width: 50px !important;
    height: 50px !important;
    object-fit: cover;

}

.logo-lg {
    width: 70px !important;
    height: 70px !important;
    object-fit: cover;
}

.logo-xl {
    width: 100px;
    height: 100px;
    object-fit: cover;
}

.bg-light-gray {
    background: #F7F7F7 !important;
}

.bg-gray-hover:hover {
    background: #f8f9fa !important;
}

.text-black {
    color: black !important;
}

.profile-avatar {
    background-position: center;
    background-size: cover;
    width: 100px;
    height: 100px;
    margin: 0 auto;
}

.text-lightgray {
    color: #555555;
}

.text-lightgray:hover {
    color: black !important;
}
.bg-lightgray-hover:hover{
    background-color: #e8e8e8 !important;
    color: black !important;
}

.text-decoration-underline-hover:hover{
    text-decoration: underline;
}
.text-limit {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 80%;
    display: block;
}

.text-md {
    font-size: 16px !important;
}

.text-sm {
    font-size: 14px;
}

.text-ssm {
    font-size: 12px;
}

.text-lg {
    font-size: 18px;
}

.text-xl {
    font-size: 25px !important;
}

.text-gray {
    color: #767676 !important;
}

.ls-md{
    font-size: 13.3px !important;
    letter-spacing: normal;
}

.bg-gray {
    background: rgb(238, 238, 238) !important;
}

.bg-gray-50 {
    background-color: #f7f7f7;
}

.btn-gradient {
    background: #f12711;
    background: linear-gradient(to right, #f5af19, #F15A24) !important;
    border: none;
    color: #fff !important;   /* chu trang tren nut gradient (quyet dinh cua chu) */
}
.shadow-3 {
    box-shadow: 0px 0px 25px 10px rgba(0 0 0 / 3%);
    transition: all 0.1s ease-in-out;
}

.shadow-6 {
    box-shadow: 0px 0px 25px 10px rgba(0 0 0 / 6%);
    transition: all 0.1s ease-in-out;
}
.transition-0 {
    transition: unset !important;
}
.shadow-6-hover:hover {
    box-shadow: 0px 0px 25px 10px rgba(0 0 0 / 6%) !important;
    transition: all 0.1s ease-in-out;
}
.shadow-hover:hover{
    box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;
    transition: all 0.1s ease-in-out;
}
.shadow-12 {
    box-shadow: 0px 0px 25px 10px rgba(0 0 0 / 12%);
    transition: all 0.1s ease-in-out;
}
.shadow-12-hover:hover {
    box-shadow: 0px 0px 25px 10px rgba(0 0 0 / 12%) !important;
    transition: all 0.1s ease-in-out;
}

.shadow-20 {
    box-shadow: 0px 0px 25px 10px rgba(0 0 0 / 50%);
    transition: all 0.1s ease-in-out;
}

.shadow-thin {
    box-shadow: 0px 0px 16px -4px rgb(0 0 0 / 36%);
    transition: all 0.1s ease-in-out;
}

.error {
    color: red;
    padding-top: 0.25rem;
    display: block;
}

/*home page*/
.course-category {
    background-color: black;
    color: white;
    padding: 15px 20px;
    border-radius: 100px;
}
.course-image {
    cursor: pointer;
    padding-bottom: 70%;
    border-radius: 10px;
    position: relative;
    transition: all .3s;
    box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.05);
}
.cursor-pointer {
    cursor: pointer;
}
.course-add-image {
    width: 100%;
    margin-top: -70%;
    transition: all .2s ease-in-out;
    position: relative;
}
.course-add-image:hover {
    transform: scale(1.05);
}
a img {
    border: none;
}
.course-infor {
    margin-bottom: 20%;
}
.course-name {
    font-size: 20px;
    font-weight: 600;
}
.course-duration {
    color: #585858;
}
.text-green{
    color: #30c320 !important;
}
.course-price {
    background-color: #30c320;
    color: white;
    padding: 10px;
    border-radius: 5px;
}
.navbar-light .navbar-toggler {
    border: none;
}
.nav-item {
    padding: 8px;
    /* white-space: nowrap; */
}
.nav-item:hover {
    color: black;
    background: #f7f7f7;
    border-radius: 30px;
}
.navbar-nav .dropdown-menu {
    border-radius: 15px;
    border: none;
    padding: 10px;
    float: none;
    box-shadow: 0px 0px 16px -4px rgba(0, 0, 0, 0.36);
}

/* Dropdown trong navbar dung cung co chu voi muc cap 1 (.navbar-nav > .nav-link) */
.navbar-nav .dropdown-menu,
.navbar-nav .dropdown-menu .dropdown-item,
.navbar-nav .dropdown-menu .dropdown-item.nav-link {
    font-size: 0.875rem;
}

/* Icon trong dropdown-item lay dung co chu cua item (1em), anh theo 14px */
.navbar-nav .dropdown-menu .dropdown-item i,
.navbar-nav .dropdown-menu .dropdown-item svg {
    font-size: 1em;
}
/* Menu + item: padding gon lai cho can voi co chu 14px
   (truoc day menu 10px + item 15px -> chu cach vien 25px) */
.navbar-nav .dropdown-menu {
    padding: 8px;
}
.navbar-nav .dropdown-menu .dropdown-item,
.navbar-nav .dropdown-menu .dropdown-item.nav-link.text-black {
    padding: 7px 10px;
    border-radius: 8px;
}

/* Divider: nhat hon nhieu va thut vao cho khop le voi item.
   Bootstrap ve <hr> bang background-color: currentColor + opacity .25
   (va border: 0), nen phai ghi de background + opacity, khong phai border-color. */
.navbar-nav .dropdown-menu .dropdown-divider {
    margin: 6px 10px;
    height: 1px;
    border: 0;
    background-color: rgba(0, 0, 0, 0.06);
    opacity: 1;
}

/* Vuong mien day ra cuoi dong (item da la flex) */
.navbar-nav .dropdown-menu .dropdown-item .fa-crown {
    margin-left: auto;
    padding-left: 12px;
    font-size: 0.8em;
    color: #B54708;
}
.dropdown-menu {
    font-size: 1rem;
}
.dropdown-item.nav-link.text-black {
    border-radius: 10px;
    padding: 10px 15px;
}

.dropdown-item.nav-link.text-black:active {
    background-color: lightgray;
}

.dropdown-item.active, .dropdown-item:active{
    background-color: #d5d5d5;
}
.text-black {
    color: black !important;
}
.zoom {
    cursor: pointer;
    box-shadow: 0px 0px 7px 0px rgba(0, 0, 0, 0.02);
    transition: transform .2s !important;
}
.zoom:hover {
    transform: scale(1.025);
    transition: transform .2s !important;
}
.zoom.btn:active {
    transform: scale(0.95);
    transition: transform .2s !important;
}

.blog-top-container {
    background-color: #f8f8f8 !important;
}
@media only screen and (max-width: 666px) {
    .blog-top-container {
        background-color: white;
    }

    .dropdown-menu {
        max-height: 300px;
        overflow: auto;
    }
    .filter-item{
        width: 35px !important;
        height: 35px !important;
    }
}

@media (min-width: 768px) {
    #modalLogin .modal-dialog {
        width: 400px !important;
    }

}
.border-gradient {
    border: solid 3px transparent;
    background-image: linear-gradient(white, white), linear-gradient(to right, #f5af19, #F15A24);
    background-origin: border-box;
    background-clip: content-box, border-box;
}
.img-fluid {
    height: 100%;
    width: 100%;
}
.editor-view *:not(i) {
    font-family: 'Be Vietnam Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif !important;
    line-height: 1.6;
}
.bg-black {
    background: black !important;
    color: white;
}
.editor-view img {
    position: relative;
    max-width: 100%;
    width: 100%;
    height: auto;
}
.editor-view p {
    word-wrap: break-word;
}

.editor-view a {
    color: #0a73e4;
}
.blog-img {
    background-repeat: no-repeat;
    background-position: center center;
    background-size: cover;
    border-radius: 5px;
    padding-bottom: 70%;
}
.featured {
    color: #ffc200;
    margin-bottom: 2px;
}
.progress {
    height: 5px;
    max-width: 200px
}
.flex-1 {
    flex: 1;
}
.card-upload-img {
    cursor: pointer;
    min-height: 200px;
    border: 1px dashed lightgray;
    background: #f8f9fa
}
.border-dashed {
    border: 1px dashed lightgray;
    min-height: 200px;
    border: 1px dashed #C7C7C7;
    background: #F5F5F5;
}
.editor-tool {
    min-height: 200px;
    padding-bottom: 20px;
}
.text-shadow {
    text-shadow: 0 0 2px #000;
}
.search-product input {
    max-width: 100%;
    min-width: 100px;
    font-size: 0.875rem;
    outline: none;
    padding-right: 30px;
    outline: none;
    border: none;
}
.search-product input::placeholder {
    color: #ced2db;
}
.outline-0, outline-0:focus {
    outline: none !important;
    box-shadow: none !important;
}
#print-dropdown-groups {
    max-height: 500px;
    overflow: auto;
}
.input-upload-image {
    opacity: 0;
    height: 0;
    width: 0;
}
.pointer-events-none {
    pointer-events: none;
}
.pointer-events-none * {
    pointer-events: all;
}

.pointer-events-none-all, .pointer-events-none-all * {
    pointer-events: none;
}
.card-name {
    margin-top: -5px;
    font-size: 1.25rem;
    font-weight: bold;
}
.shadow-thin-hover:hover{
    box-shadow: 0px 0px 10px 2px rgb(0 0 0 / 12%) !important;
}
.swal2-html-container {
    margin-top: 0 !important;
    overflow: inherit !important;
}
.min-h-screen {
    min-height: 100vh;
}
.scroll-vertical-up-1 {
    transition: transform 0.6s cubic-bezier(0, 0, 0, 1) 0s;
}
.scroll-vertical-up-2 {
    transition: transform 0.6s cubic-bezier(0, 0, 0, 1) 0s;
}

.scroll-vertical-up-3 {
    transition: transform 0.6s cubic-bezier(0, 0, 0, 1) 0s;
}

.scroll-vertical-up-4 {
    transition: transform 0.6s cubic-bezier(0, 0, 0, 1) 0s;
}

.scroll-vertical-up-5 {
    transition: transform 0.6s cubic-bezier(0, 0, 0, 1) 0s;
}
.form-gradient .active {
    background: #f12711;
    background: linear-gradient(to right, #f5af19, #F15A24);
    border: none;
    color: #fff;   /* chu trang tren gradient (quyet dinh cua chu) */
    /*box-shadow: 0 .5rem 1rem rgba(0,0,0,.15) !important;*/
}
.swal2-title{
    margin-bottom: 0 !important;
}
.btn-gradient-active.active{
    font-weight: 600;
    background: linear-gradient(to right, #f5af19, #F15A24) !important;
    color: #fff !important;   /* chu trang tren nut gradient (quyet dinh cua chu) */
}

.form-gradient {
    display: block;
}
.lds-ellipsis, .lds-ellipsis-custom {
    display: inline-block;
    position: relative;
    width: 80px;
    height: 80px;
}
.lds-ellipsis div:nth-child(1), .lds-ellipsis-custom div:nth-child(1) {
    left: 8px;
    animation: lds-ellipsis1 0.6s infinite;
}
.lds-ellipsis div:nth-child(2), .lds-ellipsis-custom div:nth-child(2) {
    left: 8px;
    animation: lds-ellipsis2 0.6s infinite;
}

.lds-ellipsis div:nth-child(3), .lds-ellipsis-custom div:nth-child(3) {
    left: 32px;
    animation: lds-ellipsis2 0.6s infinite;
}

.lds-ellipsis div:nth-child(4), .lds-ellipsis-custom div:nth-child(4) {
    left: 56px;
    animation: lds-ellipsis3 0.6s infinite;
}
.lds-ellipsis div, .lds-ellipsis-custom div {
    position: absolute;
    top: 33px;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: rgb(138, 138, 138);
    animation-timing-function: cubic-bezier(0, 1, 1, 0);
}

@keyframes lds-ellipsis1 {
    0% {
        transform: scale(0);
    }
    100% {
        transform: scale(1);
    }
}

@keyframes lds-ellipsis3 {
    0% {
        transform: scale(1);
    }
    100% {
        transform: scale(0);
    }
}

@keyframes lds-ellipsis2 {
    0% {
        transform: translate(0, 0);
    }
    100% {
        transform: translate(24px, 0);
    }
}
.tab-view.active {
    background-color: black;
    color: white;
}

.navbar-nav > .nav-item > .nav-link,
.navbar-nav > li > .nav-link {
    font-size: 0.875rem;
}

.nav-link:hover {
    color: unset !important;
}

.nav-link.active {
    background: #F7F7F7 !important;
    color: black !important;
    font-weight: bold;
}

/* switch */
.form-check-input,
.form-check-input:focus,
.form-check-input:checked {
    outline: 0;
    box-shadow: none;
}

.form-check-input:checked {
    background-color: #f46919;
    border-color: #f46919;
}
.fade:not(.show) {
    display: none;
}
.btn-tab-gradient.active {
    background: #f12711;
    background: linear-gradient(to right, #f5af19, #F15A24);
    border: none;
    color: #fff;   /* chu trang tren gradient (quyet dinh cua chu) */
}
.iframe-wrap {
    padding: 100% 0 0 0;
    position: relative;
}
.iframe-wrap iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%
}
.line-height-sm {
    line-height: 1.2;
}
.form-login input {
    height: 50px;
}
.list-disc {
    list-style-type: disc !important;
    margin: 0;
    padding-left: 20px;
}

.list-disc li {
    margin: 0;
    list-style: disc !important;
}
.card-img {
    background-position: center;
    background-size: cover;
    padding-bottom: 60%;
    width: 100%;
    border-radius: 5px;
}

.rounded-30 {
    border-radius: 30px;
}
.rounded-40 {
    border-radius: 40px;
}
.rounded-20 {
    border-radius: 20px !important;
}

.rounded-10 {
    border-radius: 10px !important;
}
.bg-img-center {
    background-position: center;
    background-size: cover;
    background-repeat: no-repeat;
    width: 100%;
    border-radius: 5px;
}
.f-roboto {
    font-family: 'Roboto';
}
.bg-colorme {
    background: linear-gradient(90.28deg, #FF2E00 0.24%, #FF963F 99.8%);
    color: white;
}
.form-group {
    margin-bottom: 10px;
}
.limit-1-line {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 1;
    line-clamp: 1;
    -webkit-box-orient: vertical;
}

.limit-2-line {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
}

.limit-3-line {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    line-clamp: 3;
    -webkit-box-orient: vertical;
}

.limit-4-line {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    line-clamp: 4;
    -webkit-box-orient: vertical;
}
.hover:hover .hover-show {
    display: inline-block;
}

.hover .hover-show {
    display: none;
}
.hover:hover .hover-hide {
    display: none;
}
.stroke-gray {
    border: solid 0.1px #efefef;
}

.fr-wrapper {
    min-height: 100px;
}

.btn-outline-light {
    border-color: #e4e4e4 !important;
}

.btn-gradient-reverse {
    background: #f12711;
    background: linear-gradient(90deg, #ff2e00 0.24%, #ff963f 99.8%) !important;
    border: none;
    color: #fff !important;   /* chu trang tren nut gradient (quyet dinh cua chu) */
}

.star.active {
    color: #FF8A00 !important;
}

.fr-qi-helper a.fr-btn.fr-floating-btn {
    padding: 0 10px 0 10px;
}

.select2-container--bootstrap-5 .select2-selection {
    padding: .75rem .75rem !important;
}

.opacity-5 {
    opacity: 0.5 !important;
}

.fuzzy {
    opacity: 0.5;
}

.fuzzy:hover {
    opacity: 1;
}

.border-light-gray,.border-light-gray:hover {
    border: 1px solid rgba(0, 0, 0, 0.07);
}

/*===================================*/
.twinkle {
    background: #cbcbcb;
    border-radius: 5px;
}
.twinkle * {
    pointer-events: none;
}
@-webkit-keyframes twinkly {
    from {
        opacity: 0.8;
    }
    to {
        opacity: 0.4;
    }
}

@-moz-keyframes twinkly {
    from {
        opacity: 0.8;
    }
    to {
        opacity: 0.4;
    }
}

@-ms-keyframes twinkly {
    from {
        opacity: 0.8;
    }
    to {
        opacity: 0.4;
    }
}

@keyframes twinkly {
    from {
        opacity: 0.8;
    }
    to {
        opacity: 0.4;
    }
}

.twinkle {
    -webkit-animation: twinkly 1s alternate infinite;
    -moz-animation: twinkly 1s alternate infinite;
    -ms-animation: twinkly 1s alternate infinite;
    animation: twinkly 1s alternate infinite;
}

.centered-axis-x {
    position: absolute;
    left: 50%;
    -ms-transform: translate(-50%, 0);
    -webkit-transform: translate(-50%, 0);
    transform: translate(-50%, 0);
}

.backdrop-filter {
    backdrop-filter: blur(16px);
}

.bg-linear-gradient-gray{
    background: linear-gradient(180deg, rgba(0, 0, 0, 0.03) 0%, rgba(247, 247, 247, 0) 100%);
}
.iframe-fluid{
    width: 100%;
    min-height: 500px;
}
.bg-pill{
    background-color: #343A40;
}
.pagination .page-item .page-link{
    color: #464646 !important;
}
.pagination .page-item.active .page-link{
    background-color: black !important;
    color: white !important;
}
.pagination .page-item.disabled{
    opacity: 0.4;
}

@media only screen and (max-width: 666px) {
    .pagination .page-item .page-link{
        font-size: 12px;
    }
}

/*select2*/
.select2{
    width: 100% !important;
}
.select2-selection{
    display: flex !important;
    align-items: center;
    min-height: 42px !important;
    border-radius: 10px;
    border: 1px solid #dee2e6!important;
    outline: none;
    box-shadow: none!important;
}
.select2-container--default .select2-selection--single .select2-selection__arrow b,.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
    border-width: 7px 6px 0 6px;
    border-color: #000000 transparent transparent transparent;
}

.select2-container--default .select2-selection--single .select2-selection__arrow {
    top: unset;
    right: 9px;
}
.select2-selection__rendered{
    display: flex!important;
    align-items: center;
}
.select2-dropdown--below,.select2-dropdown--above{
    border: none;
    border-radius: 15px !important;
    padding: 10px;
    box-shadow: 0px 0px 16px -4px rgb(0 0 0 / 36%);
}
.select2-results__option{
    margin-bottom: 3px;
    padding: 10px 15px;
    border-radius: 10px !important;
}
.select2-results__option--highlighted{
    background-color: #F7F7F7 !important;
    color: black!important;
}
.select2-results__option[aria-selected=true]{
    background-color: #E9ECEF !important;
    color: black !important;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
    background-color: #F7F7F7;
}
.fr-wrapper{
    min-height: 160px;
}
.bg-error{
    background-color: rgb(197, 0, 0) !important;
}

.fs-7 {
    font-size: 0.75rem;
}

#dropdown-select-language .dropdown-item.active,
#dropdown-select-language .dropdown-item:active,
#dropdown-select-language .dropdown-item:focus{
    color: #000000 !important;
    background-color: #eeeeee !important;
}

.custom-disabled div.disabled{
    cursor: none;
    pointer-events: none;
    opacity: 0.8;
}

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    /* display: none; <- Crashes Chrome on hover */
    -webkit-appearance: none;
    margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}

input[type=number] {
    -moz-appearance:textfield; /* Firefox */
}

ul.disc--green li::before {
    content: "\2022";
    color: #44CB49;
    font-weight: bold;
    display: inline-block;
    font-size: 20px;
    line-height: 1.1;
}
ul.disc--green li *{
    padding-left: 10px;
}

.carousel-indicators [data-bs-target] {
    width: 7px;
    height: 7px;
    border-radius: 50rem;
    border-top: 0;
    border-bottom: 0;
    transition: opacity 0.6s ease;
    background-color: #ababab;
}

.text-gray-200 {
    --text-opacity: 1;
    color: #edf2f7;
    color: rgba(237, 242, 247, var(--text-opacity))
}

.text-gray-300 {
    --text-opacity: 1;
    color: #e2e8f0;
    color: rgba(226, 232, 240, var(--text-opacity))
}

.text-gray-400 {
    --text-opacity: 1;
    color: #cbd5e0;
    color: rgba(203, 213, 224, var(--text-opacity))
}

.text-gray-500 {
    --text-opacity: 1;
    color: #a0aec0;
    color: rgba(160, 174, 192, var(--text-opacity))
}

.text-gray-600 {
    --text-opacity: 1;
    color: #718096;
    color: rgba(113, 128, 150, var(--text-opacity))
}

.text-gray-700 {
    --text-opacity: 1;
    color: #4a5568;
    color: rgba(74, 85, 104, var(--text-opacity))
}

.text-gray-900 {
    --text-opacity: 1;
    color: #1a202c;
    color: rgba(26, 32, 44, var(--text-opacity))
}
.form-control:focus{
    box-shadow: 0 0 0 0.25rem rgb(190 189 189 / 25%);
}

textarea{
    resize: none;
}
.select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option.select2-results__option--selected, .select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option[aria-selected=true]:not(.select2-results__option--highlighted){
    background-color: lightgray !important;
    color: black !important;
}

.bg-contain{
    background-repeat: no-repeat !important;
    background-size: contain !important;
}
.select2-search__field{
    overflow: hidden;
}
.first-letter-capitalize:first-letter{
    text-transform: capitalize;
}
.select2-selection__rendered{
    width: 100% !important;
}
.select2-selection{
    flex-wrap: wrap!important;
}
.popover-arrow{
    opacity: 0.6;
}
.popover{
    box-shadow: 0 .125rem .25rem rgba(0,0,0,.075)!important;
    border: none;
}
.bg-size-100{
    background-size: 100% 100%;
}
#modalRegisterClass .modal-content{
    margin-bottom: 100px;
}
.transform-all,.transform-all *{
    transition: all 0.3s ease-in-out;
}

.grain {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    pointer-event: none;
    z-index: 5;
    transform: translateZ(0);
}
.grain:before {
    content: "";
    top: -10rem;
    left: -10rem;
    width: calc(100% + 20rem);
    height: calc(100% + 20rem);
    z-index: 9999;
    position: fixed;
    background-image: url(https://upload.wikimedia.org/wikipedia/commons/5/5c/Image_gaussian_noise_example.png);
    opacity: 0.15;
    pointer-events: none;
    -webkit-animation: noise 1s steps(2) infinite;
    animation: noise 1s steps(2) infinite;
}
@-webkit-keyframes noise {
    to {
        transform: translate3d(-7rem, 0, 0);
    }
}
.bg-cover{
    background-size: cover;
    background-repeat: no-repeat;
}

.max-w-unset{
    max-width: unset !important;
}

.bg-green{
    background-color: rgba(80, 207, 78, 1)!important;
}
/* Hide scrollbar for Chrome, Safari and Opera */
.overflow-but-hide-scroll-bar::-webkit-scrollbar {
    display: none;
}

/* Hide scrollbar for IE, Edge and Firefox */
.overflow-but-hide-scroll-bar{
    -ms-overflow-style: none;  /* IE and Edge */
    scrollbar-width: none;  /* Firefox */
}

/* Mobile: o nhap >= 16px de iPhone (Safari) khong tu phong to trang khi bam vao */
@media (max-width: 767.98px) {
    input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]):not([type=button]):not([type=submit]),
    select,
    textarea {
        font-size: 16px !important;
    }
}

/* ---------- Dark theme overrides ----------
   app.css loads on every page, including the forced-light landing pages and two standalone pages without cm-tokens
   (creative-quiz, web-tv), so the light rules above keep their exact literal values. Dark values live here only.
   :where() keeps each selector's specificity identical to the light rule it overrides (this block comes later, so it wins).
   Dark mode is opt-in only (data-theme="dark" set by the layout head script); there is no prefers-color-scheme twin. */
:where(:root[data-theme="dark"]) .bg-light-gray,
:where(:root[data-theme="dark"]) .bg-gray-50,
:where(:root[data-theme="dark"]) .bg-gray { background: var(--cm-surface-2) !important; }
:where(:root[data-theme="dark"]) .bg-gray-50 { background-color: var(--cm-surface-2); }
:where(:root[data-theme="dark"]) .bg-gray-hover:hover { background: var(--cm-surface-2) !important; }
:where(:root[data-theme="dark"]) .text-black,
:where(:root[data-theme="dark"]) .text-lightgray:hover { color: var(--cm-text) !important; }
:where(:root[data-theme="dark"]) .text-lightgray { color: var(--cm-text-2); }
:where(:root[data-theme="dark"]) .bg-lightgray-hover:hover { background-color: var(--cm-surface-3) !important; color: var(--cm-text) !important; }
:where(:root[data-theme="dark"]) .text-gray { color: var(--cm-muted) !important; }
:where(:root[data-theme="dark"]) .course-duration { color: var(--cm-muted) !important; }
:where(:root[data-theme="dark"]) .nav-item:hover { color: var(--cm-text); background: var(--cm-surface-2); }
:where(:root[data-theme="dark"]) .navbar-nav .dropdown-menu .dropdown-divider { background-color: var(--cm-line); }
:where(:root[data-theme="dark"]) .dropdown-item.nav-link.text-black:active,
:where(:root[data-theme="dark"]) .dropdown-item.active,
:where(:root[data-theme="dark"]) .dropdown-item:active { background-color: var(--cm-surface-3); }
:where(:root[data-theme="dark"]) .blog-top-container { background-color: var(--cm-bg-subtle) !important; }
:where(:root[data-theme="dark"]) .border-gradient { background-image: linear-gradient(var(--cm-surface), var(--cm-surface)), linear-gradient(to right, #f5af19, #F15A24); }
:where(:root[data-theme="dark"]) .editor-view a { color: var(--cm-info); }  /* keeps the blue link hue, AA on dark */
:where(:root[data-theme="dark"]) .card-upload-img { border-color: var(--cm-line-2); background: var(--cm-bg-subtle); }
:where(:root[data-theme="dark"]) .border-dashed { border-color: var(--cm-line-2); background: var(--cm-surface-2); }
:where(:root[data-theme="dark"]) .search-product input::placeholder { color: var(--cm-faint); }
:where(:root[data-theme="dark"]) .tab-view.active { background-color: var(--cm-inverse) !important; color: var(--cm-on-inverse) !important; }
:where(:root[data-theme="dark"]) .nav-link.active { background: var(--cm-surface-2) !important; color: var(--cm-text) !important; }
:where(:root[data-theme="dark"]) .btn-outline-light { border-color: var(--cm-line-2) !important; }
:where(:root[data-theme="dark"]) .border-light-gray,
:where(:root[data-theme="dark"]) .border-light-gray:hover { border-color: var(--cm-line); }
:where(:root[data-theme="dark"]) .twinkle { background: var(--cm-skeleton); }
:where(:root[data-theme="dark"]) .pagination .page-item .page-link { color: var(--cm-text-2) !important; }
:where(:root[data-theme="dark"]) .pagination .page-item.active .page-link { background-color: var(--cm-inverse) !important; color: var(--cm-on-inverse) !important; }
:root[data-theme="dark"] .select2-selection { border-color: var(--cm-line-2) !important; background-color: var(--cm-surface); color: var(--cm-text); }
:root[data-theme="dark"] .select2-selection__rendered { color: var(--cm-text) !important; }
:root[data-theme="dark"] .select2-container--default .select2-selection--single .select2-selection__arrow b,
:root[data-theme="dark"] .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: var(--cm-text) transparent transparent transparent; }
:root[data-theme="dark"] .select2-dropdown { background-color: var(--cm-elevated); color: var(--cm-text); }
:root[data-theme="dark"] .select2-search__field { background-color: var(--cm-surface); color: var(--cm-text); }
:root[data-theme="dark"] .select2-results__option--highlighted { background-color: var(--cm-surface-2) !important; color: var(--cm-text) !important; }
:root[data-theme="dark"] .select2-results__option[aria-selected=true] { background-color: var(--cm-surface-3) !important; color: var(--cm-text) !important; }
:root[data-theme="dark"] .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: var(--cm-surface-2); border-color: var(--cm-line); color: var(--cm-text); }
:where(:root[data-theme="dark"]) #dropdown-select-language .dropdown-item.active,
:where(:root[data-theme="dark"]) #dropdown-select-language .dropdown-item:active,
:where(:root[data-theme="dark"]) #dropdown-select-language .dropdown-item:focus { color: var(--cm-text) !important; background-color: var(--cm-surface-3) !important; }
:root[data-theme="dark"] .select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option.select2-results__option--selected,
:root[data-theme="dark"] .select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option[aria-selected=true]:not(.select2-results__option--highlighted) { background-color: var(--cm-surface-3) !important; color: var(--cm-text) !important; }
/* The select2 rules above and .btn-light below override vendor CSS with higher specificity, so they use the plain :root[data-theme] prefix. */
/* Bootstrap's plain .btn text is #212529: on transparent / white / light buttons it must follow the theme */
:root[data-theme="dark"] .btn:is(.bg-transparent, .bg-white, .bg-light),
:root[data-theme="dark"] .btn:is(.bg-transparent, .bg-white, .bg-light):hover { color: var(--cm-text); }
/* Bootstrap's .btn-light (#f8f9fa / black), used as a soft panel in many views */
:root[data-theme="dark"] .btn-light { color: var(--cm-text); background-color: var(--cm-surface-2); border-color: var(--cm-surface-2); }
:root[data-theme="dark"] .btn-light:hover,
:root[data-theme="dark"] .btn-light:focus,
:root[data-theme="dark"] .btn-light:active,
:root[data-theme="dark"] .btn-light.active { color: var(--cm-text); background-color: var(--cm-surface-3); border-color: var(--cm-surface-3); }

/* The (hashtag) dang vien: popup du an, trang du an, blog, o nhap the. Tao boi generateTag() (app.js). */
.cm-tagpill { display: inline-flex; align-items: center; gap: 4px; height: 28px; margin: 0 6px 6px 0; padding: 0 10px; border-radius: 999px;
    background: var(--cm-surface-2, #F2F4F7); color: var(--cm-text, #101828); font-size: 14px; line-height: 1; }
a.cm-tagpill { color: var(--cm-text-2, #475467); text-decoration: none; transition: background-color .15s, color .15s; }
a.cm-tagpill:hover { background: var(--cm-surface-3, #E4E7EC); color: var(--cm-text, #101828); text-decoration: none; }
.cm-tagpill__x { width: 18px; height: 18px; margin-right: -4px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--cm-muted, #667085); font-size: 15px; line-height: 1; cursor: pointer; }
.cm-tagpill__x:hover { background: var(--cm-surface-3, #E4E7EC); color: var(--cm-text, #101828); }

/* Ngat dong dep (toan site, ca landing): tieu de + doan ngan can deu cac dong, khong de dong cuoi qua ngan.
   Bai viet dai (noi dung blog) dung "pretty" de tranh chu mo coi ma khong can deu. */
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .lead, .cm-head__sub, figcaption, p, li { text-wrap: balance; }
article p, article li, .cm-prose-body p, .cm-prose-body li, .blog-content p, .post-content p { text-wrap: pretty; }

/* css/colors.css */
.gray-400 {
    color: #bdbdbd !important;
}

.bg-gray-300 {
    background-color: #e0e0e0
}

.bg-gray-100 {
    background-color: #f5f5f5
}

.bg-gray-200 {
    background-color: #efefef
}

/* Dark theme: light values above stay literal (also used on forced-light landing pages); same specificity via :where(). */
:where(:root[data-theme="dark"]) .gray-400 { color: var(--cm-muted) !important; }
:where(:root[data-theme="dark"]) .bg-gray-100,
:where(:root[data-theme="dark"]) .bg-gray-200 { background-color: var(--cm-surface-2); }
:where(:root[data-theme="dark"]) .bg-gray-300 { background-color: var(--cm-surface-3); }

/* css/cm-tokens.css */
/* cm-tokens: the ONE design-token foundation of colorme.vn (colour, type, radius, spacing, shadow).
   Docs: docs/redesign/TOKENS.md (all values, light + dark) and docs/redesign/TYPOGRAPHY.md (the type scale).
   Loaded on every page by components/colorme/layout. Tokens live on :root, so they never change a page by themselves.
   Rule: new CSS never hard-codes a colour, a font size or a font family; it uses these variables.

   Theme: light by default. Dark is opt-in only (owner rule: no OS-following). A visitor's pick:
   (localStorage 'cm-theme' -> <html data-theme="light|dark">, set before paint by the layout; window.cmTheme.set()).
   Landing pages render <html data-theme="light" data-theme-lock>, so they always stay light.
   .cm-theme-light forces the light values on a subtree (document previews, exported "paper"). */

:root,
.cm-theme-light {
    color-scheme: light;

    /* Surfaces */
    --cm-bg: #FFFFFF;            /* page */
    --cm-bg-subtle: #F9FAFB;     /* tinted page areas (tool pages, table stripes) */
    --cm-surface: #FFFFFF;       /* cards, panels, inputs */
    --cm-surface-2: #F2F4F7;     /* fills: pills, hovers, segmented controls, image placeholders */
    --cm-surface-3: #E4E7EC;     /* stronger fill: pressed, tracks */
    --cm-elevated: #FFFFFF;      /* menus, popovers, modals, toasts */
    --cm-inverse: #101828;       /* solid dark button / tooltip background */
    --cm-inverse-hover: #1D2939;
    --cm-on-inverse: #FFFFFF;    /* text on --cm-inverse */

    /* Text */
    --cm-text: #101828;          /* primary: headings, body */
    --cm-text-2: #475467;        /* secondary: lead paragraphs, labels */
    --cm-muted: #667085;         /* meta, captions, help text (AA on white and --cm-surface-2) */
    --cm-faint: #98A2B3;         /* placeholders, disabled, decorative only (not AA: never for real text) */

    /* Lines */
    --cm-line: #EAECF0;          /* hairlines, card borders, dividers */
    --cm-line-2: #D0D5DD;        /* input borders, stronger dividers */

    /* Brand + links */
    --cm-accent: #F15A24;        /* brand orange: icons, focus accents, fills; NOT for text (3.4:1 on white) -> --cm-accent-text */
    --cm-accent-text: #C2410C;   /* brand orange as TEXT on light surfaces (5.2:1 on white) */
    --cm-on-accent: #FFFFFF;
    --cm-link: #C4320A;          /* text links inside prose (5.5:1) */
    --cm-grad: linear-gradient(to right, #F5AF19, #F15A24); /* the single primary CTA background only, never text */
    --cm-on-grad: #fff;          /* text on --cm-grad: owner decision 2026-10-02 = white text + icons on every gradient button */

    /* Status (text colour + soft background) */
    --cm-success: #067647;  --cm-success-bg: #ECFDF3;
    --cm-warning: #B54708;  --cm-warning-bg: #FFFAEB;
    --cm-danger: #B42318;   --cm-danger-bg: #FEF3F2;
    --cm-info: #175CD3;     --cm-info-bg: #EFF8FF;

    /* Focus, overlay, shadow, skeleton */
    --cm-focus-color: #101828;
    --cm-focus: 0 0 0 3px rgba(16, 24, 40, .12);   /* box-shadow ring (same shape as cm-ui) */
    --cm-overlay: rgba(16, 24, 40, .6);
    --cm-shadow-1: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .08);
    --cm-shadow-2: 0 16px 40px -12px rgba(16, 24, 40, .22), 0 0 0 1px rgba(16, 24, 40, .04);
    --cm-shadow-card: 0 1px 2px rgba(16, 24, 40, .04), 0 4px 14px -4px rgba(16, 24, 40, .08);         /* cards at rest: soft elevation */
    --cm-shadow-card-hover: 0 2px 4px rgba(16, 24, 40, .05), 0 14px 32px -10px rgba(16, 24, 40, .18); /* card / image hover lift */
    --cm-skeleton: #F2F4F7;

    /* Footer: a dark band in BOTH themes (light text on it never changes). In dark mode it lifts to a surface
       with a hairline on top, so it still separates from the page background. */
    --cm-footer-bg: #101828;
    --cm-footer-edge: transparent;          /* top hairline (inset shadow, no layout shift) */
    --cm-footer-text: #F2F4F7;              /* headings, hotlines */
    --cm-footer-muted: #98A2B3;             /* links (7.0:1 on #101828) */
    --cm-footer-dim: #8B95A7;               /* legal text, small labels (5.9:1 on the footer bg; was #667085 = 3.6:1) */
    --cm-footer-strong: #FFFFFF;            /* link hover, wordmark */
    --cm-footer-legal: #D0D5DD;             /* company name */
    --cm-footer-sep: #475467;               /* dot separators */
    --cm-footer-line: rgba(255, 255, 255, .08);
    --cm-footer-line-2: rgba(255, 255, 255, .14);
    --cm-footer-hover: rgba(255, 255, 255, .06);
    --cm-footer-accent: #FDB022;            /* focus ring + AI badge on the dark band */
}

.cm-theme-light { color: var(--cm-text); background-color: var(--cm-bg); }

:root {
    /* Type (see TYPOGRAPHY.md). Mobile values first, desktop from 768px. */
    --cm-font: 'Be Vietnam Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
    --cm-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    --cm-fs-display: 26px;       /* 32 desktop: one hero/page title per page */
    --cm-fs-h1: 22px;            /* 26 desktop */
    --cm-fs-h2: 18px;            /* 20 desktop */
    --cm-fs-h3: 16px;            /* 17 desktop */
    --cm-fs-h4: 15px;
    --cm-fs-body: 15px;
    --cm-fs-body-sm: 13px;
    --cm-fs-caption: 12px;       /* the smallest size on the site */
    --cm-fw-regular: 400;        /* body */
    --cm-fw-medium: 500;         /* UI: buttons, labels, tabs */
    --cm-fw-semibold: 600;       /* emphasis, buttons */
    --cm-fw-heading: 700;        /* headings: hierarchy from weight + contrast, not size */
    --cm-lh-heading: 1.2;
    --cm-lh-body: 1.55;
    --cm-lh-ui: 1.4;
    --cm-ls-tight: -0.02em;      /* sizes >= 24px only */
    /* Aliases kept identical to cm-ui's names, so both systems resolve to one scale */
    --cm-fs-title: var(--cm-fs-display);
    --cm-fs-small: var(--cm-fs-body-sm);

    /* Radius */
    --cm-radius-sm: 8px;
    --cm-radius: 10px;           /* = cm-ui --cm-r: inputs, buttons */
    --cm-radius-lg: 16px;        /* = cm-ui --cm-r-img: cards, images, panels */
    --cm-radius-xl: 24px;
    --cm-radius-pill: 999px;

    /* Spacing: 8px grid */
    --cm-space-1: 4px;
    --cm-space-2: 8px;
    --cm-space-3: 12px;
    --cm-space-4: 16px;
    --cm-space-5: 24px;
    --cm-space-6: 32px;
    --cm-space-7: 48px;
    --cm-space-8: 64px;
}
@media (min-width: 768px) {
    :root {
        --cm-fs-display: 32px;
        --cm-fs-h1: 26px;
        --cm-fs-h2: 20px;
        --cm-fs-h3: 17px;
    }
}

/* ---------- Dark theme: neutral greys, not blue-black ---------- */
:root[data-theme="dark"] {
    color-scheme: dark;
    --cm-bg: #0B0D12;
    --cm-bg-subtle: #0E1117;
    --cm-surface: #12151C;
    --cm-surface-2: #181C25;
    --cm-surface-3: #212633;
    --cm-elevated: #1A1E28;
    --cm-inverse: #F2F4F7;
    --cm-inverse-hover: #FFFFFF;
    --cm-on-inverse: #0B0D12;
    --cm-text: #F2F4F7;          /* 17.6:1 on bg */
    --cm-text-2: #C3C9D4;        /* 11:1 on surface */
    --cm-muted: #98A2B3;         /* 7.1:1 on surface, 6.6:1 on surface-2 */
    --cm-faint: #6B7385;
    --cm-line: #232836;
    --cm-line-2: #303747;
    --cm-accent: #F15A24;        /* 5.4:1 on surface */
    --cm-accent-text: #FF8A5C;
    --cm-on-accent: #FFFFFF;
    --cm-link: #FF8A5C;          /* 7.9:1 on surface */
    --cm-success: #47CD89;  --cm-success-bg: #0C2A1C;
    --cm-warning: #FDB022;  --cm-warning-bg: #2B2109;
    --cm-danger: #F97066;   --cm-danger-bg: #2A1515;
    --cm-info: #84CAFF;     --cm-info-bg: #0B2140;
    --cm-focus-color: #F2F4F7;
    --cm-focus: 0 0 0 3px rgba(242, 244, 247, .22);
    --cm-overlay: rgba(0, 0, 0, .7);
    --cm-shadow-1: 0 1px 2px rgba(0, 0, 0, .4);
    --cm-shadow-2: 0 16px 40px -12px rgba(0, 0, 0, .7), 0 0 0 1px rgba(255, 255, 255, .06);
    --cm-shadow-card: 0 1px 2px rgba(0, 0, 0, .3), 0 4px 14px -4px rgba(0, 0, 0, .35);
    --cm-shadow-card-hover: 0 2px 4px rgba(0, 0, 0, .35), 0 14px 32px -10px rgba(0, 0, 0, .6);
    --cm-skeleton: #1F2430;
    --cm-footer-bg: #12151C;
    --cm-footer-edge: #232836;
}
/* No OS-following (owner rule: light by default, dark only when the user picks it): the head script in
   components/colorme/layout sets data-theme="dark" only for a stored 'dark' choice. Every dark rule is written once,
   under :root[data-theme="dark"] (docs/redesign/TOKENS.md). */

/* css/cm-motion.css */
/* Chuyen dong chung toan site (moi trang, ca landing). Docs: docs/redesign/MOTION.md
   - Token: --cm-ease (ra nhanh, dung mem), --cm-dur-1/2/3
   - Mac dinh mem cho moi phan tu bam duoc (:where = do uu tien 0, rule rieng cua trang van thang)
   - Dropdown Bootstrap / modal: hien ra mem; chuyen trang: cross-fade (View Transitions, Chrome/Edge/Safari 18+)
   - "Glide": o nen truot theo muc dang re chuot trong menu (public/js/cm-motion.js)
   Tat het khi nguoi dung chon giam chuyen dong (prefers-reduced-motion). */
:root {
    --cm-ease: cubic-bezier(.2, .8, .2, 1);
    --cm-ease-io: cubic-bezier(.65, 0, .35, 1);
    --cm-dur-1: 120ms;
    --cm-dur-2: 200ms;
    --cm-dur-3: 320ms;
}

@media (prefers-reduced-motion: no-preference) {
    /* Doi mau / nen / vien / bong mem cho moi thu bam duoc (khong dong vao transform: JS keo tha, slider tu dat) */
    :where(a, button, summary, label, [role="button"], [role="tab"], [role="menuitem"], [role="option"], .btn, .dropdown-item, .nav-link, .page-link,
        input, textarea, select, .form-control, .form-select, .form-check-input, .badge, .cm-chip, .cm-tag) {
        transition-property: color, background-color, border-color, outline-color, box-shadow, opacity, text-decoration-color, fill, stroke;
        transition-duration: var(--cm-dur-2);
        transition-timing-function: var(--cm-ease);
    }

    /* Dropdown Bootstrap: hien ra tu tren xuong (translate/scale rieng, Popper van dat transform vi tri) */
    .dropdown-menu.show { animation: cmMenuIn var(--cm-dur-2) var(--cm-ease) both; }
    .dropdown-menu.show[data-popper-placement^="top"] { --cm-menu-from: 4px; }
    @keyframes cmMenuIn { from { opacity: 0; translate: 0 var(--cm-menu-from, -4px); scale: .98; } }

    /* Modal: noi len nhe thay vi truot 50px */
    .modal.fade .modal-dialog { transform: translateY(14px) scale(.985); transition: transform var(--cm-dur-3) var(--cm-ease); }
    .modal.show .modal-dialog { transform: none; }
    .modal-backdrop.fade { transition: opacity var(--cm-dur-3) var(--cm-ease); }

    /* Tooltip / popover / collapse */
    .tooltip.fade, .popover.fade { transition: opacity var(--cm-dur-1) var(--cm-ease); }
    .collapsing { transition-duration: var(--cm-dur-3); transition-timing-function: var(--cm-ease); }

    /* Chuyen trang: cross-fade nhanh, thanh dieu huong dung yen */
    @view-transition { navigation: auto; }
    ::view-transition-old(root) { animation: cmVtOut 160ms var(--cm-ease) both; }
    ::view-transition-new(root) { animation: cmVtIn 240ms var(--cm-ease) both; }
    @keyframes cmVtOut { to { opacity: 0; } }
    @keyframes cmVtIn { from { opacity: 0; translate: 0 6px; } }
    #cmh { view-transition-name: cmh; }
    ::view-transition-group(cmh) { animation-duration: 0s; }

    /* Glide: o nen dung chung cho menu (JS dat vi tri). Nam duoi chu (z-index -1 trong khung isolate) */
    .cm-glide-host { isolation: isolate; }
    .cm-glide {
        position: absolute; left: 0; top: 0; z-index: -1; pointer-events: none;
        background: var(--cm-glide-bg, var(--cmh-soft, var(--cm-surface-2)));
        opacity: 0; border-radius: 8px;
        transition: transform 180ms var(--cm-ease), width 180ms var(--cm-ease), height 180ms var(--cm-ease), opacity 140ms ease;
    }
    .cm-glide.is-on { opacity: 1; }
    .cm-glide.is-jump { transition: opacity 140ms ease; }
    /* Muc trong khung co glide: nen hover do glide ve (giu doi mau chu) */
    .cm-glide-host [data-glide-item]:hover, .cm-glide-host [data-glide-item]:focus-visible { background-color: transparent !important; }
}

/* Doi sang/toi (cm-motion.js): chi cross-fade, khong truot */
html.cm-theme-vt::view-transition-old(root), html.cm-theme-vt::view-transition-new(root) { animation-duration: 260ms; animation-timing-function: var(--cm-ease); translate: none; }
html.cm-theme-vt::view-transition-new(root) { animation-name: cmVtFade; }
html.cm-theme-vt::view-transition-group(cmh) { animation-duration: 260ms; }
@keyframes cmVtFade { from { opacity: 0; } }

/* css/cm-modal.css */
/* He modal chung (phase 4): dat class "cm-modal" len .modal (Bootstrap 5). Khong doi JS / id cua tung modal.
   Cau truc:
     .modal.cm-modal > .modal-dialog(.cm-modal--lg|--xl) > .modal-content
       .cm-mh (tieu de + mo ta + nut dong)  .cm-mb (noi dung, cuon)  .cm-mf (hanh dong, dinh duoi)
   Truong: .cm-field > label + input/select + .cm-help ; .cm-fgrid (2 cot tren desktop) ; .cm-seg (lua chon dang chip, dung cho .btn-group.form-gradient)
   Vung tai anh: .cm-drop (boc #open-... co .card-upload-img ben trong; anh xem truoc do JS chen vao cung hien gon). Token mau: cm-tokens.css (sang/toi). */
.cm-modal { --mr: 24px; --mpad: 24px; }
.cm-modal .modal-dialog { max-width: 560px; margin: 24px auto; }
.cm-modal .modal-dialog.cm-modal--lg { max-width: 760px; }
.cm-modal .modal-dialog.cm-modal--xl { max-width: 1040px; }
.cm-modal .modal-content { border: 0; border-radius: var(--mr); background: var(--cm-surface); color: var(--cm-text); box-shadow: 0 40px 100px -30px rgba(10, 14, 30, .45); overflow: hidden; max-height: calc(100dvh - 48px); display: flex; flex-direction: column; }
.cm-modal .modal-dialog-scrollable .modal-content, .cm-modal .modal-content { max-height: calc(100dvh - 48px); }

/* Dau */
.cm-mh { display: flex; align-items: flex-start; gap: 14px; padding: 20px var(--mpad) 16px; border-bottom: 1px solid var(--cm-line); flex-shrink: 0; }
.cm-mh__ic { display: grid; place-items: center; flex: 0 0 40px; width: 40px; height: 40px; border-radius: 12px; background: var(--cm-surface-2); color: var(--cm-text); }
.cm-mh__ic .icon { width: 20px; height: 20px; }
.cm-mh__t { flex: 1; min-width: 0; }
.cm-mh__t h2, .cm-mh__t h5 { margin: 0; font-size: 18px; font-weight: 700; line-height: 1.3; letter-spacing: -.01em; color: var(--cm-text); }
.cm-mh__t p { margin: 3px 0 0; font-size: 13.5px; line-height: 1.5; color: var(--cm-muted); }
.cm-mx { display: grid; place-items: center; flex: 0 0 36px; width: 36px; height: 36px; margin: -2px -6px 0 0; border: 0; border-radius: 50%; background: transparent; color: var(--cm-muted); cursor: pointer; transition: background-color .15s, color .15s; }
.cm-mx:hover { background: var(--cm-surface-2); color: var(--cm-text); }
.cm-mx .icon { width: 20px; height: 20px; }

/* Than */
.cm-mb { padding: 20px var(--mpad) 8px; overflow-y: auto; overscroll-behavior: contain; flex: 1 1 auto; }
.cm-mb > * + * { margin-top: 16px; }

/* Chan: luon thay nut hanh dong */
.cm-mf { display: flex; align-items: center; justify-content: flex-end; gap: 10px; padding: 14px var(--mpad); border-top: 1px solid var(--cm-line); background: var(--cm-surface); flex-shrink: 0; }
.cm-mf__note { margin-right: auto; font-size: 12.5px; color: var(--cm-muted); }
.cm-mbtn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 42px; padding: 0 18px; border-radius: 12px; border: 1px solid var(--cm-line-2); background: var(--cm-surface); color: var(--cm-text) !important;
           font: 600 14.5px/1 inherit; font-family: inherit; cursor: pointer; transition: background-color .15s, border-color .15s, opacity .15s; white-space: nowrap; }
.cm-mbtn:hover { background: var(--cm-surface-2); }
.cm-mbtn .icon { width: 17px; height: 17px; }
.cm-mbtn--primary { border-color: transparent; background: var(--cm-text); color: var(--cm-bg) !important; }
.cm-mbtn--primary:hover { background: var(--cm-text); opacity: .88; }
.cm-mbtn[disabled] { opacity: .55; cursor: progress; }

/* Truong nhap */
.cm-field { display: flex; flex-direction: column; gap: 6px; margin: 0; }
.cm-field > label, .cm-field > .cm-label { margin: 0; font-size: 13.5px; font-weight: 600; color: var(--cm-text); }
.cm-field > label .cm-req { color: var(--cm-danger, #D92D20); }
.cm-modal .form-control, .cm-modal .form-select { min-height: 44px; padding: 10px 14px; border-radius: 12px; border: 1px solid var(--cm-line-2); background-color: var(--cm-surface); color: var(--cm-text); font-size: 15px; box-shadow: none; }
.cm-modal textarea.form-control { min-height: 96px; }
.cm-modal .form-control:focus, .cm-modal .form-select:focus { border-color: var(--cm-text); box-shadow: 0 0 0 3px color-mix(in srgb, var(--cm-text) 12%, transparent); }
.cm-modal .form-control::placeholder { color: var(--cm-faint, #98A2B3); }
.cm-help, .cm-modal .form-text { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--cm-muted) !important; }
.cm-modal label.error, .cm-modal .error:not(input):not(select) { margin: 2px 0 0; font-size: 12.5px; font-weight: 500; color: var(--cm-danger, #D92D20); }
.cm-fgrid { display: grid; gap: 16px; }
@media (min-width: 768px) { .cm-fgrid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Lua chon dang chip (giu .btn-group.form-gradient .btn + .active cua app.js) */
.cm-seg.btn-group { display: flex; width: 100%; flex-wrap: nowrap; gap: 6px; padding: 4px; border-radius: 14px; background: var(--cm-surface-2); box-shadow: none; }
.cm-seg.btn-group > .btn { flex: 1 1 0; justify-content: center; display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 8px; white-space: nowrap; margin: 0 !important; border: 0 !important; border-radius: 10px !important; background: transparent !important;
                           color: var(--cm-muted) !important; font-size: 14px; font-weight: 600; box-shadow: none !important; background-image: none !important; }
.cm-seg.btn-group > .btn .icon { width: 16px; height: 16px; }
.cm-seg.btn-group > .btn:hover { color: var(--cm-text) !important; }
.cm-seg.btn-group > .btn.active { background: var(--cm-surface) !important; color: var(--cm-text) !important; box-shadow: 0 1px 2px rgba(16, 24, 40, .08), 0 1px 3px rgba(16, 24, 40, .1) !important; }

/* Vung tai anh / video */
.cm-drop { position: relative; }
.cm-drop .card-upload-img { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 220px !important; height: auto; margin: 0; padding: 24px; border-radius: 16px !important;
                            border: 1.5px dashed var(--cm-line-2) !important; background: var(--cm-surface-2) !important; color: var(--cm-muted); text-align: center; cursor: pointer; transition: border-color .15s, background-color .15s; }
.cm-drop .card-upload-img:hover { border-color: var(--cm-text) !important; color: var(--cm-text); }
.cm-drop .card-upload-img::before { content: ""; width: 44px; height: 44px; border-radius: 12px; background: var(--cm-surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpath d='m17 8-5-5-5 5'/%3E%3Cpath d='M12 3v12'/%3E%3C/svg%3E") center / 22px no-repeat; box-shadow: 0 1px 2px rgba(16, 24, 40, .08); }
.cm-drop .card-upload-img span { font-size: 14.5px; font-weight: 600; color: var(--cm-text); }
.cm-drop .card-upload-img::after { content: attr(data-hint); font-size: 12.5px; color: var(--cm-muted); }
.cm-drop > div > img, .cm-drop img.rounded-10 { display: block; width: 100%; max-height: 360px; object-fit: contain; border-radius: 16px !important; background: var(--cm-surface-2); cursor: pointer; }
.cm-drop progress { width: 100%; }

/* The tom tat (vd "Nop bai cho chu de ...") */
.cm-mcard { display: flex; align-items: center; gap: 12px; padding: 10px; border-radius: 14px; background: var(--cm-surface-2); }
.cm-mcard img { flex: 0 0 96px; width: 96px; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 10px; }
.cm-mcard small { display: block; font-size: 12px; font-weight: 600; color: var(--cm-muted); text-transform: uppercase; letter-spacing: .04em; }
.cm-mcard b, .cm-mcard .topic-title { display: block; font-size: 15px; font-weight: 700; color: var(--cm-text); }

/* Tab nho trong modal (Anh / Video) */
.cm-mtabs { display: flex; width: 100%; gap: 4px; padding: 4px; margin: 0 0 12px; border-radius: 12px; background: var(--cm-surface-2); list-style: none; }
.cm-mtabs > li { flex: 1 1 0; min-width: 0; }
.cm-mtabs a { display: flex; justify-content: center; align-items: center; gap: 6px; height: 34px; padding: 0 14px; border-radius: 9px; color: var(--cm-muted); font-size: 13.5px; font-weight: 600; text-decoration: none; }
.cm-mtabs a .icon { width: 16px; height: 16px; }
.cm-mtabs a.active { background: var(--cm-surface); color: var(--cm-text); box-shadow: 0 1px 2px rgba(16, 24, 40, .08), 0 1px 3px rgba(16, 24, 40, .1); }

/* Khoi anh + form trong modal: xep mot cot */
.cm-msplit { display: grid; gap: 20px; }
/* Mot cot (chu so huu, 02/10): anh tren, form duoi */

/* Di dong: modal bam day man hinh tu duoi len */
@media (max-width: 575.98px) {
    .cm-modal .modal-dialog { margin: 0; max-width: none; min-height: 100%; display: flex; align-items: flex-end; }
    .cm-modal .modal-content { border-radius: 22px 22px 0 0; max-height: 94dvh; width: 100%; }
    .cm-modal { --mpad: 18px; }
    .cm-mf .cm-mbtn { flex: 1; }
}

.cm-modal label.error:empty, #for-content-product:empty { display: none; }
.cm-modal .modal-content .form-select { min-width: 0; text-overflow: ellipsis; }

/* ===== Hop thoai nho (xac nhan / thong bao / nhap 1 truong) + toast: public/js/cm-dialog.js (thay SweetAlert2) ===== */
.cm-dlg { width: min(440px, calc(100vw - 32px)); max-height: calc(100dvh - 32px); padding: 0; border: 0; border-radius: 24px; background: var(--cm-surface); color: var(--cm-text);
          box-shadow: 0 40px 100px -30px rgba(10, 14, 30, .5); overflow: auto; font-family: inherit; animation: cmDlgIn .26s cubic-bezier(.2, .8, .2, 1); }
.cm-dlg::backdrop { background: rgba(10, 14, 30, .45); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); animation: cmFade .2s ease; }
.cm-dlg.is-out { animation: cmDlgOut .16s ease forwards; }
@keyframes cmDlgIn { from { opacity: 0; transform: translateY(12px) scale(.97); } }
@keyframes cmDlgOut { to { opacity: 0; transform: translateY(8px) scale(.98); } }
@keyframes cmFade { from { opacity: 0; } }
.cm-dlg__f { position: relative; display: flex; flex-direction: column; gap: 10px; margin: 0; padding: 28px 24px 22px; }
.cm-dlg__x { position: absolute; top: 12px; right: 12px; margin: 0; }
.cm-dlg__x svg { width: 20px; height: 20px; }
.cm-dlg__ic { display: grid; place-items: center; width: 52px; height: 52px; margin-bottom: 6px; border-radius: 16px; background: var(--ic-bg, var(--cm-surface-2)); color: var(--ic, var(--cm-text)); }
.cm-dlg__ic svg { width: 26px; height: 26px; }
.cm-dlg.is-success { --ic: #12B76A; --ic-bg: color-mix(in srgb, #12B76A 14%, transparent); }
.cm-dlg.is-error { --ic: #F04438; --ic-bg: color-mix(in srgb, #F04438 13%, transparent); }
.cm-dlg.is-warning { --ic: #F79009; --ic-bg: color-mix(in srgb, #F79009 15%, transparent); }
.cm-dlg.is-info { --ic: #2E90FA; --ic-bg: color-mix(in srgb, #2E90FA 13%, transparent); }
.cm-dlg.is-question { --ic: #7A5AF8; --ic-bg: color-mix(in srgb, #7A5AF8 13%, transparent); }
.cm-dlg__t { margin: 0; padding-right: 28px; font-size: 19px; font-weight: 700; line-height: 1.3; letter-spacing: -.015em; color: var(--cm-text); text-wrap: balance; }
.cm-dlg__b { font-size: 14.5px; line-height: 1.55; color: var(--cm-text-2, var(--cm-muted)); }
.cm-dlg__b:empty { display: none; }
.cm-dlg__b img { max-width: 100%; height: auto; }
.cm-dlg__in { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
.cm-dlg .form-control, .cm-dlg .form-select { min-height: 46px; padding: 10px 14px; border-radius: 12px; border: 1px solid var(--cm-line-2); background: var(--cm-surface); color: var(--cm-text); font-size: 15px; width: 100%; }
.cm-dlg .form-control:focus, .cm-dlg .form-select:focus { outline: none; border-color: var(--cm-text); box-shadow: 0 0 0 3px color-mix(in srgb, var(--cm-text) 12%, transparent); }
.cm-dlg textarea.form-control { min-height: 110px; }
.cm-dlg__err { margin: 0; font-size: 12.5px; color: var(--cm-danger, #D92D20); }
.cm-dlg__foot { font-size: 13px; color: var(--cm-muted); }
.cm-dlg__a { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }
.cm-dlg__a .cm-mbtn { min-width: 96px; }
.cm-dlg.is-loading .swal2-confirm { opacity: .6; cursor: progress; }
.cm-mbtn--danger { background: #D92D20 !important; color: #fff !important; }
@media (max-width: 575.98px) { .cm-dlg__a .cm-mbtn { flex: 1; } }

.cm-toasts { position: fixed; top: 72px; right: 16px; z-index: 2000; display: flex; flex-direction: column; gap: 8px; pointer-events: none; }
.cm-toast { display: flex; align-items: flex-start; gap: 10px; width: min(360px, calc(100vw - 32px)); padding: 12px 14px; border-radius: 16px; background: var(--cm-surface); color: var(--cm-text);
            box-shadow: 0 20px 44px -18px rgba(10, 14, 30, .45), 0 0 0 1px var(--cm-line); pointer-events: auto; cursor: pointer; opacity: 0; transform: translateY(-8px); transition: opacity .2s ease, transform .25s cubic-bezier(.2, .8, .2, 1); }
.cm-toast.is-in { opacity: 1; transform: none; }
.cm-toast__ic { display: grid; place-items: center; flex: 0 0 28px; width: 28px; height: 28px; border-radius: 9px; background: var(--ic-bg); color: var(--ic); }
.cm-toast__ic svg { width: 16px; height: 16px; }
.cm-toast.is-success { --ic: #12B76A; --ic-bg: color-mix(in srgb, #12B76A 14%, transparent); }
.cm-toast.is-error { --ic: #F04438; --ic-bg: color-mix(in srgb, #F04438 13%, transparent); }
.cm-toast.is-warning { --ic: #F79009; --ic-bg: color-mix(in srgb, #F79009 15%, transparent); }
.cm-toast.is-info, .cm-toast.is-question { --ic: #2E90FA; --ic-bg: color-mix(in srgb, #2E90FA 13%, transparent); }
.cm-toast__t { min-width: 0; padding-top: 3px; font-size: 14px; line-height: 1.4; }
.cm-toast__t b { display: block; font-weight: 600; }
.cm-toast__t .swal2-html-container { margin-top: 2px; font-size: 13px; color: var(--cm-muted); }
@media (prefers-reduced-motion: reduce) { .cm-dlg, .cm-dlg::backdrop, .cm-dlg.is-out { animation: none; } .cm-toast { transition: none; } }

/* select2 (chon nhieu) trong modal: cung kieu o nhap + the dang chip */
.cm-modal .select2-container--bootstrap-5 .select2-selection, .cm-modal .select2-container .select2-selection--multiple { min-height: 46px; padding: 5px 8px; border-radius: 12px; border: 1px solid var(--cm-line-2); background: var(--cm-surface); box-shadow: none; }
.cm-modal .select2-container--focus .select2-selection, .cm-modal .select2-container--open .select2-selection { border-color: var(--cm-text) !important; box-shadow: 0 0 0 3px color-mix(in srgb, var(--cm-text) 12%, transparent) !important; }
.cm-modal .select2-selection__rendered { display: flex !important; flex-wrap: wrap; gap: 6px; margin: 0 !important; padding: 0 !important; }
.cm-modal .select2-selection__choice { display: inline-flex !important; align-items: center; gap: 4px; height: 30px; margin: 0 !important; padding: 0 6px 0 12px !important; border: 0 !important; border-radius: 999px !important; background: var(--cm-surface-2) !important; color: var(--cm-text) !important; font-size: 13.5px; font-weight: 600; }
.cm-modal .select2-selection__choice__remove { order: 2; position: static !important; width: 20px; height: 20px; margin: 0 !important; padding: 0 !important; border: 0 !important; border-radius: 50%; background-color: transparent !important; color: var(--cm-muted) !important; font-size: 15px; line-height: 20px; }
.cm-modal .select2-selection__choice__remove:hover { background-color: var(--cm-line) !important; color: var(--cm-text) !important; }
.cm-modal .select2-search--inline .select2-search__field { height: 30px !important; margin: 0 0 0 4px !important; font-size: 14.5px; }
