{"id":9821,"date":"2026-05-06T08:33:48","date_gmt":"2026-05-06T01:33:48","guid":{"rendered":"https:\/\/tqc.gov.vn\/?page_id=9821"},"modified":"2026-05-06T10:50:50","modified_gmt":"2026-05-06T03:50:50","slug":"dau-hop-quy","status":"publish","type":"page","link":"https:\/\/tqc.gov.vn\/dau-hop-quy\/","title":{"rendered":"D\u1ea5u h\u1ee3p quy"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9821\" class=\"elementor elementor-9821\" data-elementor-settings=\"[]\">\n\t\t\t\t\t\t<div class=\"elementor-inner\">\n\t\t\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-70d7dc2a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"70d7dc2a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31a61371\" data-id=\"31a61371\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-663d9f4 elementor-widget elementor-widget-text-editor\" data-id=\"663d9f4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e8d414 elementor-widget elementor-widget-html\" data-id=\"9e8d414\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<!doctype html>\n<html lang=\"vi\">\n\n<head>\n    <meta charset=\"UTF-8\" \/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n    <title>Tra c\u1ee9u D\u1ea5u H\u1ee3p quy \u2013 TQC<\/title>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin \/>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Be+Vietnam+Pro:wght@400;500;600;700;800;900&display=swap\" rel=\"stylesheet\" \/>\n\n    <style>\n        \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       TQC SEARCH APP \u2014 All classes prefixed .tqc-search-app\n       \u0110\u1ed3ng b\u1ed9 ng\u00f4n ng\u1eef thi\u1ebft k\u1ebf v\u1edbi TQC Expert Directory\n    \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n        \n        .tqc-search-app {\n            --blue-50: #fff7ed;\n            --blue-100: #ffedd5;\n            --blue-200: #fed7aa;\n            --blue-300: #fdba74;\n            --blue-400: #fb923c;\n            --blue-500: #f97316;\n            --blue-600: #ea580c;\n            --blue-700: #c2410c;\n            --blue-800: #9a3412;\n            --blue-900: #7c2d12;\n            --orange-50: #fff7ed;\n            --orange-100: #ffedd5;\n            --orange-200: #fed7aa;\n            --orange-300: #fdba74;\n            --orange-500: #f97316;\n            --orange-600: #ea580c;\n            --orange-700: #c2410c;\n            --orange-800: #9a3412;\n            --gray-50: #f8fafc;\n            --gray-100: #f1f5f9;\n            --gray-200: #e2e8f0;\n            --gray-300: #cbd5e1;\n            --gray-400: #94a3b8;\n            --gray-500: #64748b;\n            --gray-600: #475569;\n            --gray-700: #334155;\n            --gray-800: #1e293b;\n            --gray-900: #0f172a;\n            --shadow-sm: 0 1px 2px 0 rgb(0 0 0\/0.05);\n            --shadow-md: 0 4px 6px -1px rgb(0 0 0\/0.1), 0 2px 4px -2px rgb(0 0 0\/0.1);\n            --shadow-lg: 0 10px 15px -3px rgb(0 0 0\/0.1), 0 4px 6px -4px rgb(0 0 0\/0.1);\n            --shadow-xl: 0 20px 25px -5px rgb(0 0 0\/0.1), 0 8px 10px -6px rgb(0 0 0\/0.1);\n            --tf: 150ms cubic-bezier(0.4, 0, 0.2, 1);\n            --tb: 200ms cubic-bezier(0.4, 0, 0.2, 1);\n            font-family: \"Be Vietnam Pro\", \"Segoe UI\", sans-serif;\n            background: var(--gray-50);\n            color: var(--gray-900);\n            line-height: 1.5;\n            -webkit-font-smoothing: antialiased;\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 1.25rem;\n        }\n        \n        .tqc-search-app *,\n        .tqc-search-app *::before,\n        .tqc-search-app *::after {\n            box-sizing: border-box;\n        }\n        \/* \u2500\u2500\u2500 Page Header \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__header {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: space-between;\n            align-items: flex-end;\n            gap: 1rem;\n            margin-bottom: 1.5rem;\n            padding-bottom: 1rem;\n            border-bottom: 2px solid var(--gray-200);\n        }\n        \n        .tqc-search-app__title-block h2 {\n            font-size: 1.8rem;\n            font-weight: 800;\n            color: #2563eb;\n            margin: 0 0 0.25rem;\n            letter-spacing: -0.5px;\n            display: flex;\n            align-items: center;\n            gap: 12px;\n        }\n        \n        .tqc-search-app__title-block h2::before {\n            content: \"\";\n            display: inline-block;\n            width: 6px;\n            height: 1em;\n            background: var(--blue-500);\n            border-radius: 4px;\n            flex-shrink: 0;\n            align-self: stretch;\n        }\n        \n        .tqc-search-app__title-block p {\n            font-size: 0.9rem;\n            color: var(--gray-500);\n            font-weight: 500;\n            margin: 0 0 0 1.125rem;\n        }\n        \n        .tqc-search-app__badge {\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            background: #fff;\n            padding: 0.5rem 1rem;\n            border-radius: 12px;\n            border: 1px solid var(--gray-200);\n            box-shadow: var(--shadow-sm);\n        }\n        \n        .tqc-search-app__badge-prefix {\n            font-size: 0.8rem;\n            font-weight: 600;\n            color: var(--gray-600);\n        }\n        \n        .tqc-search-app__badge-val {\n            font-size: 1.5rem;\n            font-weight: 900;\n            color: var(--orange-600);\n        }\n        \n        .tqc-search-app__badge-lbl {\n            font-size: 0.8rem;\n            font-weight: 600;\n            color: var(--gray-600);\n        }\n        \/* \u2500\u2500\u2500 Search Section \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__search-section {\n            margin-top: 24px;\n            margin-bottom: 32px;\n        }\n        \n        .tqc-search-app__form {\n            display: flex;\n            flex-wrap: nowrap;\n            align-items: flex-start;\n            gap: 16px;\n        }\n        \n        .tqc-search-app__search-wrap {\n            position: relative;\n            flex: 1 1 0;\n            min-width: 0;\n            display: flex;\n            flex-direction: column;\n        }\n        \n        .tqc-search-app__search-icon {\n            position: absolute;\n            left: 16px;\n            top: 14px;\n            color: var(--gray-400);\n            pointer-events: none;\n            transition: color var(--tb);\n        }\n        \n        .tqc-search-app__input {\n            width: 100%;\n            height: 48px;\n            padding: 0 48px 0 48px;\n            font-size: 1rem;\n            font-weight: 500;\n            font-family: inherit;\n            color: var(--gray-900);\n            background: #fff;\n            border: 1.5px solid var(--orange-200);\n            border-radius: 8px;\n            outline: none;\n            transition: all var(--tb);\n        }\n        \n        .tqc-search-app__input::placeholder {\n            color: var(--gray-400);\n        }\n        \n        .tqc-search-app__input:focus {\n            background: #fff;\n            border-color: var(--orange-500);\n            box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.15);\n        }\n        \n        .tqc-search-app__clear {\n            position: absolute;\n            right: 14px;\n            top: 11px;\n            width: 26px;\n            height: 26px;\n            border-radius: 50%;\n            background: var(--gray-200);\n            border: none;\n            cursor: pointer;\n            display: none;\n            align-items: center;\n            justify-content: center;\n            font-size: 0.9rem;\n            color: var(--gray-600);\n            transition: all var(--tf);\n        }\n        \n        .tqc-search-app__clear:hover {\n            background: var(--gray-300);\n        }\n        \n        .tqc-search-app__clear.show {\n            display: flex;\n        }\n        \n        .tqc-search-app__btn {\n            height: 48px;\n            padding: 0 24px;\n            font-family: inherit;\n            font-size: 0.95rem;\n            font-weight: 700;\n            color: var(--orange-700);\n            background: var(--orange-50);\n            border: 1.5px solid var(--orange-200);\n            border-radius: 8px;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            white-space: nowrap;\n            box-shadow: var(--shadow-sm);\n            transition: all var(--tb);\n            flex-shrink: 0;\n        }\n        \n        .tqc-search-app__btn:hover {\n            background: var(--orange-100);\n            border-color: var(--orange-300);\n            transform: translateY(-2px);\n            box-shadow: var(--shadow-md);\n        }\n        \n        .tqc-search-app__btn:active {\n            transform: translateY(0);\n            background: var(--orange-100);\n            box-shadow: inset 0 2px 4px rgba(194, 65, 12, 0.1);\n        }\n        \n        .tqc-search-app__btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n            transform: none !important;\n        }\n        \n        .tqc-search-app__spinner {\n            display: none;\n            width: 16px;\n            height: 16px;\n            border: 2.5px solid rgba(194, 65, 12, 0.2);\n            border-top-color: var(--orange-700);\n            border-radius: 50%;\n            animation: tqcSpin 0.7s linear infinite;\n            flex-shrink: 0;\n        }\n        \n        .tqc-search-app__spinner.show {\n            display: block;\n        }\n        \n        @keyframes tqcSpin {\n            to {\n                transform: rotate(360deg);\n            }\n        }\n        \/* \u2500\u2500\u2500 Status \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__status {\n            font-size: 14px;\n            font-weight: 500;\n            color: #4b5563;\n            margin-top: 8px;\n            margin-bottom: 0;\n            min-height: 1.2em;\n        }\n        \n        .tqc-search-app__status strong {\n            font-weight: 700;\n            color: var(--orange-600);\n        }\n        \n        .tqc-search-app__status--error {\n            color: #dc2626;\n        }\n        \/* \u2500\u2500\u2500 Alert Box \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__alert {\n            background: #fff7ed;\n            border: 1.5px solid #fb923c;\n            border-radius: 8px;\n            padding: 12px 16px;\n            margin-bottom: 1rem;\n            display: flex;\n            align-items: flex-start;\n            gap: 10px;\n            font-size: 0.875rem;\n            font-weight: 500;\n            color: #9a3412;\n            line-height: 1.6;\n            box-shadow: 0 2px 4px rgba(249, 115, 22, 0.1);\n        }\n        \n        .tqc-search-app__alert-icon {\n            flex-shrink: 0;\n            font-size: 1.2rem;\n            line-height: 1;\n        }\n        \n        .tqc-search-app__alert strong {\n            font-weight: 700;\n            color: #c2410c;\n        }\n        \/* \u2500\u2500\u2500 Results grid \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__results {\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n        \/* \u2500\u2500\u2500 Card \u2500\u2500\u2500 *\/\n        \/* \u2500\u2500 Card container \u2500\u2500 *\/\n        \n        .tqc-search-app__card {\n            background: #ffffff;\n            border-radius: 12px;\n            border: 1px solid #e5e7eb;\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.04);\n            display: flex;\n            flex-direction: column;\n            animation: tqcUp 0.3s ease both;\n            overflow: hidden;\n            width: 100%;\n            \/* chi\u1ebfm \u0111\u00fang chi\u1ec1u r\u1ed9ng c\u1ed9t grid *\/\n            transition: box-shadow 200ms ease, transform 200ms ease;\n        }\n        \n        .tqc-search-app__card:hover {\n            box-shadow: 0 10px 20px -4px rgba(0, 0, 0, 0.09), 0 4px 8px -4px rgba(0, 0, 0, 0.06);\n            transform: translateY(-2px);\n        }\n        \n        @keyframes tqcUp {\n            from {\n                opacity: 0;\n                transform: translateY(12px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n        \/* \u2500\u2500 Card header: accent bar + t\u00ean c\u00f4ng ty \u2500\u2500 *\/\n        \n        .tqc-search-app__card-head {\n            padding: 0.875rem 1.25rem 0.875rem 1rem;\n            display: flex;\n            align-items: center;\n            gap: 0;\n            border-bottom: 1px solid #f0f2f5;\n            background: #fff;\n            \/* Accent bar b\u00ean tr\u00e1i *\/\n            border-left: 4px solid #f97316;\n        }\n        \/* \u1ea8n icon badge \u2013 kh\u00f4ng d\u00f9ng n\u1eefa *\/\n        \n        .tqc-search-app__card-icon {\n            display: none;\n        }\n        \n        .tqc-search-app__card-name {\n            font-size: 1rem;\n            font-weight: 700;\n            color: #2563eb;\n            line-height: 1.4;\n            padding-left: 0.875rem;\n        }\n        \/* \u2500\u2500 Card body \u2500\u2500 *\/\n        \n        .tqc-search-app__card-body {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n        }\n        \/* \u2500\u2500 Info rows \u2500\u2500 *\/\n        \n        .tqc-search-app__info {\n            display: flex;\n            flex-direction: column;\n        }\n        \n        .tqc-search-app__info-row {\n            display: grid;\n            \/* C\u1ed9t 1: icon | C\u1ed9t 2: label c\u1ed1 \u0111\u1ecbnh | C\u1ed9t 3: value co gi\u00e3n *\/\n            grid-template-columns: 36px 120px 1fr;\n            align-items: center;\n            gap: 0 0.625rem;\n            padding: 0.7rem 1.125rem;\n            border-bottom: 1px solid #f0f2f5;\n            min-height: 44px;\n        }\n        \n        .tqc-search-app__info-row:last-child {\n            border-bottom: none;\n        }\n        \/* Icon \u2013 l\u1edbn h\u01a1n, \u0111\u1eb9p h\u01a1n *\/\n        \n        .tqc-search-app__info-icon {\n            width: 34px;\n            height: 34px;\n            border-radius: 9px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            flex-shrink: 0;\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n        }\n        \n        .tqc-search-app__info-icon svg {\n            width: 16px;\n            height: 16px;\n            color: inherit;\n        }\n        \n        .tqc-search-app__info-icon--gray {\n            background: #eff6ff;\n            color: #2563eb;\n            box-shadow: inset 0 0 0 1px #bfdbfe;\n        }\n        \n        .tqc-search-app__info-icon--green {\n            background: #f0fdf4;\n            color: #16a34a;\n            box-shadow: inset 0 0 0 1px #bbf7d0;\n        }\n        \n        .tqc-search-app__info-icon--amber {\n            background: #fff7ed;\n            color: #ea580c;\n            box-shadow: inset 0 0 0 1px #fed7aa;\n        }\n        \n        .tqc-search-app__info-icon--indigo {\n            background: #f5f3ff;\n            color: #7c3aed;\n            box-shadow: inset 0 0 0 1px #ddd6fe;\n        }\n        \n        .tqc-search-app__info-icon--blue {\n            background: #eff6ff;\n            color: #3b82f6;\n            box-shadow: inset 0 0 0 1px #bfdbfe;\n        }\n        \/* Info-content: grid 2 c\u1ed9t label | value \u0111\u1ec3 lu\u00f4n c\u00f9ng h\u00e0ng *\/\n        \n        .tqc-search-app__info-content {\n            display: contents;\n            \/* tr\u1ea3i ph\u1eb3ng v\u00e0o grid cha *\/\n        }\n        \n        .tqc-search-app__info-label {\n            font-size: 0.775rem;\n            font-weight: 600;\n            color: #6b7280;\n            white-space: nowrap;\n            line-height: 1.5;\n            align-self: start;\n            padding-top: 1px;\n        }\n        \n        .tqc-search-app__info-label::after {\n            content: \":\";\n        }\n        \n        .tqc-search-app__info-val {\n            font-size: 0.875rem;\n            font-weight: 400;\n            color: #111827;\n            line-height: 1.5;\n            align-self: start;\n        }\n        \/* Badge m\u00e3 qu\u1ea3n l\u00fd *\/\n        \n        .tqc-search-app__tag {\n            display: inline-flex;\n            align-items: center;\n            padding: 2px 10px;\n            font-size: 0.78rem;\n            font-weight: 600;\n            background: #fff7ed;\n            color: #c2410c;\n            border: 1px solid #fed7aa;\n            border-radius: 9999px;\n            letter-spacing: 0.02em;\n            margin-top: 2px;\n        }\n        \/* \u2500\u2500\u2500 Desktop: card n\u1eb1m ngang \u2500\u2500\u2500 *\/\n        \n        @media (min-width: 700px) {\n            \/* Card: flex-row *\/\n            .tqc-search-app__card {\n                flex-direction: row;\n                align-items: stretch;\n            }\n            \/* C\u1ed9t tr\u00e1i: th\u00f4ng tin c\u00f4ng ty \u2013 chi\u1ebfm ~58% *\/\n            .tqc-search-app__card-col-info {\n                flex: 1 1 0;\n                min-width: 0;\n                display: flex;\n                flex-direction: column;\n                border-right: 1px solid #f3f4f6;\n            }\n            \/* C\u1ed9t ph\u1ea3i: tem + n\u00fat t\u1ea3i *\/\n            .tqc-search-app__card-col-stamp {\n                flex: 0 0 300px;\n                display: flex;\n                flex-direction: column;\n                padding: 0;\n                \/* b\u1ecf padding \u0111\u1ec3 stamp-title ngang h\u00e0ng card-head *\/\n                gap: 0;\n            }\n            \/* stamp-wrap trong c\u1ed9t ph\u1ea3i: kh\u00f4ng border-top *\/\n            .tqc-search-app__card-col-stamp .tqc-search-app__stamp-wrap {\n                border-top: none;\n                display: flex;\n                flex-direction: column;\n                flex: 1;\n            }\n            \/* stamp-content chi\u1ebfm ph\u1ea7n c\u00f2n l\u1ea1i, c\u0103n gi\u1eefa d\u1ecdc *\/\n            .tqc-search-app__card-col-stamp .tqc-search-app__stamp-content {\n                padding: 1rem 1.25rem;\n                flex: 1;\n                display: flex;\n                flex-direction: column;\n                justify-content: center;\n                gap: 0.875rem;\n            }\n            \/* Stamp full-width trong c\u1ed9t ph\u1ea3i *\/\n            .tqc-search-app__stamp {\n                max-width: 100%;\n                height: 190px;\n            }\n            \/* N\u00fat t\u1ea3i chi\u1ebfm full width c\u1ed9t ph\u1ea3i *\/\n            .tqc-search-app__dl-btn {\n                max-width: 100%;\n            }\n        }\n        \/* Mobile\/tablet: card d\u1ecdc *\/\n        \n        @media (max-width: 699px) {\n            .tqc-search-app__card-col-info {\n                display: contents;\n            }\n            .tqc-search-app__card-col-stamp {\n                display: contents;\n            }\n            .tqc-search-app__stamp-content {\n                padding: 1rem 1.125rem 1.25rem;\n                gap: 0.875rem;\n                display: flex;\n                flex-direction: column;\n            }\n        }\n        \/* \u2500\u2500\u2500 Tem h\u1ee3p quy \u2013 theo chu\u1ea9n conformity-mark.html \u2500\u2500\u2500 *\/\n        \/* stamp-wrap: tr\u00ean mobile c\u00f3 padding ngang \u0111\u1ec3 kh\u00f4ng s\u00e1t l\u1ec1 *\/\n        \n        .tqc-search-app__stamp-wrap {\n            border-top: 1px solid #f0f2f5;\n            padding-top: 0;\n        }\n        \/* Ti\u00eau \u0111\u1ec1 \"TEM H\u1ee2P QUY\" \u2013 vi\u1ebft hoa, m\u00e0u gi\u1ed1ng header, kh\u00f4ng accent bar *\/\n        \n        .tqc-search-app__stamp-title {\n            font-size: 0.95rem;\n            font-weight: 700;\n            color: #2563eb;\n            text-transform: uppercase;\n            letter-spacing: 0.02em;\n            line-height: 1.4;\n            padding: 0.875rem 1.25rem;\n            border-bottom: 1px solid #f0f2f5;\n            background: #fff;\n            display: block;\n            margin-bottom: 0;\n        }\n        \n        .tqc-search-app__stamp-title::after {\n            display: none;\n        }\n        \/* N\u1ed9i dung stamp c\u00f3 padding ngang \u0111\u1ec3 kh\u00f4ng s\u00e1t l\u1ec1 tr\u00ean mobile *\/\n        \n        .tqc-search-app__stamp-content {\n            padding: 1rem 1.125rem;\n        }\n        \/* Khung tem \u2013 .conformity-mark-container *\/\n        \n        .tqc-search-app__stamp {\n            display: flex;\n            border: 2px solid #000;\n            background-color: #fff;\n            width: 100%;\n            max-width: 280px;\n            height: 220px;\n            margin: 0 auto;\n            overflow: hidden;\n        }\n        \/* Tr\u00e1i 28% \u2013 .conformity-mark-left *\/\n        \n        .tqc-search-app__stamp-left {\n            width: 28%;\n            flex-shrink: 0;\n            border-right: 2px solid #000;\n            background-color: #ffffff;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            padding: 15px 8px;\n        }\n        \/* Wrapper 2 c\u1ed9t text d\u1ecdc \u2013 .conformity-mark-info-wrapper *\/\n        \n        .tqc-search-app__stamp-info {\n            display: flex;\n            gap: 8px;\n            height: 100%;\n            align-items: center;\n            justify-content: center;\n        }\n        \/* M\u1ed7i c\u1ed9t text \u2013 .conformity-mark-text-vertical *\/\n        \n        .tqc-search-app__stamp-vtext {\n            writing-mode: vertical-rl;\n            transform: rotate(180deg);\n            text-align: center;\n            white-space: nowrap;\n            font-size: 14px;\n            font-weight: bold;\n            font-family: \"Times New Roman\", Times, serif;\n            color: #000;\n            line-height: 1.3;\n        }\n        \/* Ph\u1ea3i 72% \u2013 .conformity-mark-right *\/\n        \n        .tqc-search-app__stamp-right {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            padding: 8px;\n            background-color: #fff;\n        }\n        \/* Logo wrapper \u2013 .conformity-mark-logo-wrapper *\/\n        \n        .tqc-search-app__stamp-logo-wrap {\n            flex: 1;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            width: 100%;\n            max-height: 100%;\n        }\n        \/* Logo img \u2013 .conformity-mark-logo *\/\n        \n        .tqc-search-app__stamp-logo-wrap img {\n            width: 100%;\n            height: auto;\n            max-height: 100%;\n            object-fit: contain;\n            display: block;\n        }\n        \/* Placeholder khi thi\u1ebfu logo *\/\n        \n        .tqc-search-app__stamp-ph {\n            display: none;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 6px;\n            width: 100%;\n            height: 100%;\n            border: 2px dashed var(--gray-300);\n            border-radius: 6px;\n        }\n        \n        .tqc-search-app__stamp-ph span {\n            font-size: 0.75rem;\n            color: var(--gray-400);\n            font-weight: 600;\n        }\n        \/* \u2500\u2500\u2500 N\u00fat download tem \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__dl-btn {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 6px;\n            margin-top: 0.75rem;\n            width: 100%;\n            max-width: 280px;\n            margin-left: auto;\n            margin-right: auto;\n            padding: 0.5rem 0;\n            font-family: \"Be Vietnam Pro\", \"Segoe UI\", sans-serif;\n            font-size: 0.82rem;\n            font-weight: 700;\n            color: var(--orange-700);\n            background: var(--orange-50);\n            border: 1.5px solid var(--orange-200);\n            border-radius: 8px;\n            cursor: pointer;\n            transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1);\n        }\n        \n        .tqc-search-app__dl-btn:hover {\n            background: var(--orange-100);\n            border-color: var(--orange-300);\n            transform: translateY(-1px);\n            box-shadow: 0 4px 8px rgba(234, 88, 12, 0.15);\n        }\n        \n        .tqc-search-app__dl-btn:active {\n            transform: translateY(0);\n        }\n        \n        .tqc-search-app__dl-btn.loading {\n            opacity: 0.7;\n            cursor: wait;\n            pointer-events: none;\n        }\n        \/* \u2500\u2500\u2500 Empty state \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__empty {\n            grid-column: 1 \/ -1;\n            text-align: center;\n            padding: 48px 24px;\n            background: #fff;\n            border-radius: 12px;\n            box-shadow: none;\n            border: 2px dashed #e2e8f0;\n        }\n        \n        .tqc-search-app__empty-icon {\n            width: 72px;\n            height: 72px;\n            background: var(--orange-50);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 0 auto 1.25rem;\n        }\n        \n        .tqc-search-app__empty-icon svg {\n            color: var(--orange-500);\n        }\n        \n        .tqc-search-app__empty h4 {\n            font-size: 18px;\n            font-weight: 700;\n            color: #1e293b;\n            margin: 0 0 0.75rem;\n        }\n        \n        .tqc-search-app__empty p {\n            font-size: 0.9375rem;\n            color: var(--gray-600);\n            line-height: 1.7;\n            margin: 0 0 8px;\n        }\n        \n        .tqc-search-app__empty-keyword {\n            color: #dc2626;\n            font-weight: 700;\n        }\n        \n        .tqc-search-app__empty-tip {\n            font-size: 14px;\n            color: #64748b;\n            margin-top: 8px;\n            margin-bottom: 1.5rem;\n        }\n        \n        .tqc-search-app__empty-cta {\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            gap: 6px;\n            padding: 10px 20px;\n            font-family: inherit;\n            font-size: 0.875rem;\n            font-weight: 600;\n            color: var(--orange-600);\n            background: #fff;\n            border: 1.5px solid var(--orange-500);\n            border-radius: 8px;\n            cursor: pointer;\n            transition: all var(--tb);\n        }\n        \n        .tqc-search-app__empty-cta:hover {\n            background: var(--orange-50);\n            border-color: var(--orange-600);\n            transform: translateY(-1px);\n        }\n        \n        .tqc-search-app__empty-cta:active {\n            transform: translateY(0);\n        }\n        \/* \u2500\u2500\u2500 Pagination \u2500\u2500\u2500 *\/\n        \n        .tqc-search-app__pagination {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n            margin-top: 2rem;\n            padding-top: 1.5rem;\n            border-top: 1px solid var(--gray-200);\n            flex-wrap: wrap;\n        }\n        \n        .tqc-search-app__page-btn {\n            min-width: 38px;\n            height: 38px;\n            padding: 0 12px;\n            font-family: inherit;\n            font-size: 0.875rem;\n            font-weight: 600;\n            color: var(--gray-700);\n            background: var(--gray-100);\n            border: 1px solid var(--gray-200);\n            border-radius: 6px;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: all var(--tf);\n            user-select: none;\n            -webkit-user-select: none;\n        }\n        \n        .tqc-search-app__page-btn:hover:not(:disabled):not(.active) {\n            background: var(--gray-200);\n            border-color: var(--gray-300);\n        }\n        \n        .tqc-search-app__page-btn.active {\n            background: var(--orange-500);\n            color: #fff;\n            border-color: var(--orange-500);\n            cursor: default;\n        }\n        \n        .tqc-search-app__page-btn:disabled {\n            opacity: 0.4;\n            cursor: not-allowed;\n        }\n        \n        .tqc-search-app__page-btn--arrow {\n            padding: 0 10px;\n        }\n        \/* \u2500\u2500\u2500 Responsive \u2500\u2500\u2500 *\/\n        \n        @media (max-width: 768px) {\n            .tqc-search-app__search-wrap {\n                max-width: 100%;\n            }\n            .tqc-search-app__form {\n                flex-wrap: wrap;\n                flex-direction: column;\n                align-items: stretch;\n            }\n            .tqc-search-app__btn {\n                width: 100%;\n                justify-content: center;\n            }\n        }\n        \n        @media (max-width: 520px) {\n            .tqc-search-app {\n                padding: 0.75rem;\n            }\n            .tqc-search-app__results {\n                grid-template-columns: 1fr;\n            }\n            .tqc-search-app__title-block h2 {\n                font-size: 1.3rem;\n            }\n            .tqc-search-app__stamp {\n                max-width: 240px;\n                height: 180px;\n            }\n            .tqc-search-app__stamp-vtext {\n                font-size: 11px;\n            }\n        }\n    <\/style>\n<\/head>\n\n<body>\n    <div class=\"tqc-search-app\" id=\"tqcApp\">\n        <!-- \u2500\u2500 Header \u2500\u2500 -->\n        <div class=\"tqc-search-app__header\">\n            <div class=\"tqc-search-app__title-block\">\n                <h2>TRA C\u1ee8U D\u1ea4U H\u1ee2P QUY<\/h2>\n                <p>\n                    Nh\u1eadp t\u00ean c\u00f4ng ty, m\u00e3 s\u1ed1 thu\u1ebf ho\u1eb7c m\u00e3 qu\u1ea3n l\u00fd \u0111\u1ec3 tra c\u1ee9u th\u00f4ng tin v\u1ec1 d\u1ea5u h\u1ee3p quy\n                <\/p>\n            <\/div>\n            <div class=\"tqc-search-app__badge\" id=\"tqcBadge\">\n                <span class=\"tqc-search-app__badge-prefix\">\u0110\u00e3 c\u1ea5p d\u1ea5u h\u1ee3p quy<\/span>\n                <span class=\"tqc-search-app__badge-val\" id=\"tqcTotal\">0<\/span>\n                <span class=\"tqc-search-app__badge-lbl\">doanh nghi\u1ec7p<\/span>\n            <\/div>\n        <\/div>\n\n        <!-- \u2500\u2500 Search Section \u2500\u2500 -->\n        <div class=\"tqc-search-app__search-section\">\n            <div class=\"tqc-search-app__form\">\n                <div class=\"tqc-search-app__search-wrap\">\n                    <input id=\"tqcInput\" class=\"tqc-search-app__input\" type=\"text\" placeholder=\"Nh\u1eadp T\u00ean c\u00f4ng ty, MST ho\u1eb7c M\u00e3 qu\u1ea3n l\u00fd\u2026\" autocomplete=\"off\" \/>\n                    <svg class=\"tqc-search-app__search-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <circle cx=\"11\" cy=\"11\" r=\"8\" \/>\n              <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" \/>\n            <\/svg>\n                    <button class=\"tqc-search-app__clear\" id=\"tqcClear\" title=\"Xo\u00e1\">\n              \u2715\n            <\/button>\n                    <!-- Status message ngay d\u01b0\u1edbi input -->\n                    <div class=\"tqc-search-app__status\" id=\"tqcStatus\"><\/div>\n                <\/div>\n\n                <button class=\"tqc-search-app__btn\" id=\"tqcBtn\" onclick=\"tqcSearch()\">\n            <span class=\"tqc-search-app__spinner\" id=\"tqcSpinner\"><\/span>\n            <svg\n              id=\"tqcBtnIcon\"\n              width=\"16\"\n              height=\"16\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2.5\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            >\n              <circle cx=\"11\" cy=\"11\" r=\"8\" \/>\n              <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" \/>\n            <\/svg>\n            Tra c\u1ee9u\n          <\/button>\n            <\/div>\n        <\/div>\n\n        <!-- \u2500\u2500 Results \u2500\u2500 -->\n        <div class=\"tqc-search-app__results\" id=\"tqcResults\"><\/div>\n    <\/div>\n\n    <script src="/asd/js/jquery.min.js"></script>
<script>\n        \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n        \/\/  TQC Search App \u2013 Vanilla JS\n        \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n        const CSV_URL =\n            \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/\" +\n            \"2PACX-1vR5JKsLgNGkjSkJSpouv-5JeCvWIIjUvz7U0ATZT1iZP5Q7Lopn672g7p9WT9qoas2_e_RuP4uv8VbX\" +\n            \"\/pub?gid=51572009&single=true&output=csv\";\n\n        let tqcData = null;\n        let tqcFoundResults = [];\n        let tqcCurrentPage = 1;\n        const ITEMS_PER_PAGE = 10;\n        const MAX_RESULTS = 50;\n\n        \/* \u2500\u2500 Parse CSV RFC-4180 \u2500\u2500 *\/\n        function parseCSV(raw) {\n            raw = raw.replace(\/^\\uFEFF\/, \"\").replace(\/\\r\\n?\/g, \"\\n\");\n            const rows = [];\n            let row = [],\n                field = \"\",\n                inQ = false;\n            for (let i = 0; i < raw.length; i++) {\n                const c = raw[i];\n                if (inQ) {\n                    if (c === '\"' && raw[i + 1] === '\"') {\n                        field += '\"';\n                        i++;\n                    } else if (c === '\"') inQ = false;\n                    else field += c;\n                } else {\n                    if (c === '\"') inQ = true;\n                    else if (c === \",\") {\n                        row.push(field);\n                        field = \"\";\n                    } else if (c === \"\\n\") {\n                        row.push(field);\n                        field = \"\";\n                        rows.push(row);\n                        row = [];\n                    } else field += c;\n                }\n            }\n            if (field || row.length) {\n                row.push(field);\n                rows.push(row);\n            }\n            return rows;\n        }\n\n        function findCol(headers, names) {\n            \/\/ V\u00f2ng 1: kh\u1edbp ch\u00ednh x\u00e1c sau khi normalize\n            for (const n of names) {\n                const i = headers.findIndex(\n                    (h) => h.toLowerCase().trim() === n.toLowerCase().trim(),\n                );\n                if (i !== -1) return i;\n            }\n            \/\/ V\u00f2ng 2: fallback \u2013 b\u1ecf kho\u1ea3ng tr\u1eafng r\u1ed3i so kh\u1edbp m\u1ed9t ph\u1ea7n\n            \/\/ X\u1eed l\u00fd tr\u01b0\u1eddng h\u1ee3p Google Sheets vi\u1ebft hoa\/th\u01b0\u1eddng kh\u00e1c nhau\n            for (const n of names) {\n                const nNorm = n.toLowerCase().replace(\/\\s+\/g, \"\");\n                const i = headers.findIndex((h) => {\n                    const hNorm = h.toLowerCase().replace(\/\\s+\/g, \"\");\n                    return (\n                        hNorm === nNorm || hNorm.includes(nNorm) || nNorm.includes(hNorm)\n                    );\n                });\n                if (i !== -1) return i;\n            }\n            return -1;\n        }\n\n        \/\/ Debug: log t\u00ean c\u1ed9t th\u1ef1c t\u1ebf t\u1eeb CSV (b\u1ecf comment khi c\u1ea7n debug)\n        \/\/ function debugHeaders(h) { console.log('[TQC] CSV headers:', h); }\n\n        async function loadData() {\n            if (tqcData) return tqcData;\n            const res = await fetch(CSV_URL);\n            if (!res.ok) throw new Error(`HTTP ${res.status}`);\n            const rows = parseCSV(await res.text());\n            if (rows.length < 2) throw new Error(\"D\u1eef li\u1ec7u tr\u1ed1ng.\");\n            const h = rows[0].map((x) => x.trim());\n            console.log(\"[TQC] CSV headers th\u1ef1c t\u1ebf:\", h); \/\/ debug \u2013 xem trong DevTools > Console\n            const idx = {\n                ten: findCol(h, [\"t\u00ean c\u00f4ng ty\", \"ten cong ty\", \"t\u00ean cty\"]),\n                mst: findCol(h, [\n                    \"m\u00e3 s\u1ed1 thu\u1ebf\",\n                    \"m\u00e3 s\u1ed1 thu\u1ebf\",\n                    \"ma so thue\",\n                    \"mst\",\n                    \"tax code\",\n                    \"taxcode\",\n                    \"m\u00e3 s\u1ed1 thu\u00ea\",\n                ]),\n                dc: findCol(h, [\"\u0111\u1ecba ch\u1ec9\", \"dia chi\"]),\n                maql: findCol(h, [\"m\u00e3 qu\u1ea3n l\u00fd\", \"ma quan ly\"]),\n                name: findCol(h, [\"name\"]),\n            };\n            const g = (cells, i) => (i >= 0 ? (cells[i] || \"\").trim() : \"\");\n            tqcData = rows\n                .slice(1)\n                .map((cells) => {\n                    if (cells.every((c) => !c.trim())) return null;\n                    return {\n                        ten: g(cells, idx.ten),\n                        mst: g(cells, idx.mst),\n                        dc: g(cells, idx.dc),\n                        maql: g(cells, idx.maql),\n                        name: g(cells, idx.name),\n                    };\n                })\n                .filter(Boolean);\n            return tqcData;\n        }\n\n        \/* \u2500\u2500 Helpers \u2500\u2500 *\/\n        const $ = (id) => document.getElementById(id);\n        const esc = (s) =>\n            (s || \"\").replace(\n                \/[&<>\"']\/g,\n                (c) =>\n                ({\n                    \"&\": \"&amp;\",\n                    \"<\": \"&lt;\",\n                    \">\": \"&gt;\",\n                    '\"': \"&quot;\",\n                    \"'\": \"&#39;\",\n                })[c],\n            );\n\n        function setLoading(on) {\n            $(\"tqcBtn\").disabled = on;\n            $(\"tqcSpinner\").classList.toggle(\"show\", on);\n            $(\"tqcBtnIcon\").style.display = on ? \"none\" : \"\";\n        }\n\n        function setStatus(html, err = false) {\n            const el = $(\"tqcStatus\");\n            el.innerHTML = html;\n            el.className =\n                \"tqc-search-app__status\" +\n                (err ? \" tqc-search-app__status--error\" : \"\");\n        }\n\n        \/* \u2500\u2500 Render card \u2500\u2500 *\/\n        function renderCard(d) {\n            return `\n    <div class=\"tqc-search-app__card\">\n\n      <!-- \u2550\u2550 C\u1ed9t tr\u00e1i: th\u00f4ng tin c\u00f4ng ty \u2550\u2550 -->\n      <div class=\"tqc-search-app__card-col-info\">\n\n        <!-- Header: ch\u1ec9 t\u00ean c\u00f4ng ty -->\n        <div class=\"tqc-search-app__card-head\">\n          <div class=\"tqc-search-app__card-icon\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n                 stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"\/>\n              <path d=\"M16 7V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"tqc-search-app__card-name\">${esc(d.ten || \"\u2014\")}<\/div>\n        <\/div>\n\n        <!-- Info rows -->\n        <div class=\"tqc-search-app__card-body\">\n          <div class=\"tqc-search-app__info\">\n\n            <div class=\"tqc-search-app__info-row\">\n              <div class=\"tqc-search-app__info-icon tqc-search-app__info-icon--gray\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"\/><line x1=\"7\" y1=\"9\" x2=\"17\" y2=\"9\"\/><line x1=\"7\" y1=\"13\" x2=\"13\" y2=\"13\"\/><\/svg><\/div>\n              <div class=\"tqc-search-app__info-content\">\n                <span class=\"tqc-search-app__info-label\">M\u00e3 s\u1ed1 thu\u1ebf<\/span>\n                <span class=\"tqc-search-app__info-val\">${esc(d.mst || \"\u2014\")}<\/span>\n              <\/div>\n            <\/div>\n\n            <div class=\"tqc-search-app__info-row\">\n              <div class=\"tqc-search-app__info-icon tqc-search-app__info-icon--green\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 10c0 7-9 13-9 13S3 17 3 10a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg><\/div>\n              <div class=\"tqc-search-app__info-content\">\n                <span class=\"tqc-search-app__info-label\">\u0110\u1ecba ch\u1ec9<\/span>\n                <span class=\"tqc-search-app__info-val\">${esc(d.dc || \"\u2014\")}<\/span>\n              <\/div>\n            <\/div>\n\n            <div class=\"tqc-search-app__info-row\">\n              <div class=\"tqc-search-app__info-icon tqc-search-app__info-icon--amber\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"\/><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"\/><\/svg><\/div>\n              <div class=\"tqc-search-app__info-content\">\n                <span class=\"tqc-search-app__info-label\">T\u00ean nh\u1eadn di\u1ec7n<\/span>\n                <span class=\"tqc-search-app__info-val\">\n                  <span class=\"tqc-search-app__tag\">${esc(d.name || \"\u2014\")}<\/span>\n                <\/span>\n              <\/div>\n            <\/div>\n\n            <div class=\"tqc-search-app__info-row\">\n              <div class=\"tqc-search-app__info-icon tqc-search-app__info-icon--indigo\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><\/div>\n              <div class=\"tqc-search-app__info-content\">\n                <span class=\"tqc-search-app__info-label\">M\u00e3 qu\u1ea3n l\u00fd<\/span>\n                <span class=\"tqc-search-app__info-val\">\n                  <span class=\"tqc-search-app__tag\">${esc(d.maql || \"\u2014\")}<\/span>\n                <\/span>\n              <\/div>\n            <\/div>\n\n          <\/div>\n        <\/div>\n\n      <\/div><!-- \/.card-col-info -->\n\n      <!-- \u2550\u2550 C\u1ed9t ph\u1ea3i: tem h\u1ee3p quy + n\u00fat t\u1ea3i \u2550\u2550 -->\n      <div class=\"tqc-search-app__card-col-stamp\">\n\n        <div class=\"tqc-search-app__stamp-wrap\">\n          <div class=\"tqc-search-app__stamp-title\">Tem h\u1ee3p quy<\/div>\n          <div class=\"tqc-search-app__stamp-content\">\n          <div class=\"tqc-search-app__stamp\">\n            <div class=\"tqc-search-app__stamp-left\">\n              <div class=\"tqc-search-app__stamp-info\">\n                <div class=\"tqc-search-app__stamp-vtext\">${esc(d.name || \"\u2014\")}<\/div>\n                <div class=\"tqc-search-app__stamp-vtext\">${esc(d.maql || \"\u2014\")}<\/div>\n              <\/div>\n            <\/div>\n            <div class=\"tqc-search-app__stamp-right\">\n              <div class=\"tqc-search-app__stamp-logo-wrap\">\n                <img decoding=\"async\" src=\"https:\/\/tqc.gov.vn\/wp-content\/uploads\/2019\/03\/logo-cr.png\" alt=\"D\u1ea5u CR\"\n                     onerror=\"this.style.display='none';this.nextElementSibling.style.display='flex'\" \/>\n                <div class=\"tqc-search-app__stamp-ph\">\n                  <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n                       stroke=\"#cbd5e1\" stroke-width=\"1.5\">\n                    <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/>\n                    <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"\/>\n                    <path d=\"m21 15-5-5L5 21\"\/>\n                  <\/svg>\n                  <span>logo-cr.png<\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div><!-- \/.stamp -->\n          <!-- N\u00fat download n\u1eb1m trong stamp-content -->\n          <button class=\"tqc-search-app__dl-btn\"\n                  onclick=\"tqcDownloadStamp(this, '${esc(d.name || \"\")}', '${esc(d.maql || \"\")}')\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n                 stroke=\"currentColor\" stroke-width=\"2.5\"\n                 stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/>\n              <polyline points=\"7 10 12 15 17 10\"\/>\n              <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"\/>\n            <\/svg>\n            T\u1ea3i v\u1ec1 tem h\u1ee3p quy\n          <\/button>\n          <\/div><!-- \/.stamp-content -->\n\n        <\/div>\n\n      <\/div><!-- \/.card-col-stamp -->\n\n    <\/div>`;\n        }\n\n        \/* \u2500\u2500 Download tem h\u1ee3p quy \u2013 v\u1ebd b\u1eb1ng Canvas 2D API (kh\u00f4ng d\u00f9ng html2canvas) \u2500\u2500 *\/\n        async function tqcDownloadStamp(btn, nameText, codeText) {\n            btn.classList.add(\"loading\");\n            btn.textContent = \"\u0110ang t\u1ea1o \u1ea3nh\u2026\";\n\n            const SCALE = 4; \/\/ \u0111\u1ed9 ph\u00e2n gi\u1ea3i 4\u00d7 cho \u1ea3nh s\u1eafc n\u00e9t khi in\n            const W = 280 * SCALE;\n            const H = 220 * SCALE;\n            const BORDER = 2 * SCALE;\n            const LEFT_W = Math.round(W * 0.28);\n            const PAD_X = 8 * SCALE;\n            const PAD_Y = 15 * SCALE;\n            const GAP = 8 * SCALE;\n            const FONT_SZ = 14 * SCALE;\n\n            const canvas = document.createElement(\"canvas\");\n            canvas.width = W;\n            canvas.height = H;\n            const ctx = canvas.getContext(\"2d\");\n\n            \/\/ \u2500\u2500 N\u1ec1n tr\u1eafng to\u00e0n b\u1ed9 \u2500\u2500\n            ctx.fillStyle = \"#ffffff\";\n            ctx.fillRect(0, 0, W, H);\n\n            \/\/ \u2500\u2500 Ph\u1ea7n tr\u00e1i: n\u1ec1n x\u00e1m nh\u1ea1t \u2500\u2500\n            ctx.fillStyle = \"#ffffff\";\n            ctx.fillRect(0, 0, LEFT_W, H);\n\n            \/\/ \u2500\u2500 Vi\u1ec1n ngo\u00e0i & \u0111\u01b0\u1eddng chia \u2500\u2500\n            ctx.strokeStyle = \"#000000\";\n            ctx.lineWidth = BORDER;\n            ctx.strokeRect(BORDER \/ 2, BORDER \/ 2, W - BORDER, H - BORDER);\n            \/\/ \u0110\u01b0\u1eddng d\u1ecdc ph\u00e2n c\u00e1ch tr\u00e1i\/ph\u1ea3i\n            ctx.beginPath();\n            ctx.moveTo(LEFT_W, 0);\n            ctx.lineTo(LEFT_W, H);\n            ctx.stroke();\n\n            \/\/ \u2500\u2500 Helper: v\u1ebd text xoay d\u1ecdc (\u0111\u1ecdc t\u1eeb d\u01b0\u1edbi l\u00ean) \u2500\u2500\n            function drawVertical(text, centerX, centerY, maxH) {\n                ctx.save();\n                ctx.translate(centerX, centerY);\n                ctx.rotate(-Math.PI \/ 2); \/\/ xoay -90\u00b0 \u2192 text \u0111\u1ecdc t\u1eeb d\u01b0\u1edbi l\u00ean (= writing-mode + rotate180)\n                ctx.font = `bold ${FONT_SZ}px \"Times New Roman\", serif`;\n                ctx.fillStyle = \"#000000\";\n                ctx.textAlign = \"center\";\n                ctx.textBaseline = \"middle\";\n                \/\/ C\u1eaft ng\u1eafn n\u1ebfu text qu\u00e1 d\u00e0i\n                let t = text;\n                while (ctx.measureText(t).width > maxH && t.length > 3) {\n                    t = t.slice(0, -1);\n                }\n                if (t !== text) t = t.slice(0, -1) + \"\u2026\";\n                ctx.fillText(t, 0, 0);\n                ctx.restore();\n            }\n\n            \/\/ T\u00ednh v\u1ecb tr\u00ed 2 c\u1ed9t text trong ph\u1ea7n tr\u00e1i\n            const innerW = LEFT_W - PAD_X * 2; \/\/ chi\u1ec1u r\u1ed9ng v\u00f9ng text\n            const colW = (innerW - GAP) \/ 2; \/\/ chi\u1ec1u r\u1ed9ng m\u1ed7i c\u1ed9t\n            const col1X = PAD_X + colW \/ 2; \/\/ t\u00e2m c\u1ed9t 1 (NAME)\n            const col2X = PAD_X + colW + GAP + colW \/ 2; \/\/ t\u00e2m c\u1ed9t 2 (CODE)\n            const centerY = H \/ 2;\n            const maxTextH = H - PAD_Y * 2; \/\/ chi\u1ec1u cao t\u1ed1i \u0111a c\u1ee7a text (v\u00ec b\u1ecb xoay)\n\n            drawVertical(nameText || \"\u2014\", col1X, centerY, maxTextH);\n            drawVertical(codeText || \"\u2014\", col2X, centerY, maxTextH);\n\n            \/\/ \u2500\u2500 Ph\u1ea7n ph\u1ea3i: v\u1ebd logo \u2500\u2500\n            const rightX = LEFT_W + BORDER;\n            const rightW = W - rightX;\n            const logoP = 8 * SCALE; \/\/ padding logo\n\n            function finalize() {\n                const link = document.createElement(\"a\");\n                const safeName = (nameText || \"tem-hop-quy\")\n                    .replace(\/[^\\w\\s\\u00C0-\\u024F\\u1E00-\\u1EFF]\/g, \"\")\n                    .trim()\n                    .replace(\/\\s+\/g, \"_\")\n                    .substring(0, 60);\n                link.download = `tem-hop-quy_${safeName}.png`;\n                link.href = canvas.toDataURL(\"image\/png\");\n                link.click();\n                btn.classList.remove(\"loading\");\n                btn.innerHTML =\n                    '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><polyline points=\"7 10 12 15 17 10\"\/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"\/><\/svg> T\u1ea3i v\u1ec1 tem h\u1ee3p quy';\n            }\n\n            const logoImg = new Image();\n            logoImg.crossOrigin = \"anonymous\";\n            logoImg.onload = function() {\n                \/\/ Scale logo \u0111\u1ec3 v\u1eeba khung, gi\u1eef t\u1ef7 l\u1ec7\n                const maxW = rightW - logoP * 2;\n                const maxH = H - logoP * 2;\n                const ratio = Math.min(\n                    maxW \/ logoImg.naturalWidth,\n                    maxH \/ logoImg.naturalHeight,\n                );\n                const dw = logoImg.naturalWidth * ratio;\n                const dh = logoImg.naturalHeight * ratio;\n                const dx = rightX + (rightW - dw) \/ 2;\n                const dy = (H - dh) \/ 2;\n                ctx.drawImage(logoImg, dx, dy, dw, dh);\n                finalize();\n            };\n            logoImg.onerror = function() {\n                \/\/ Kh\u00f4ng c\u00f3 logo: v\u1ebd placeholder text\n                ctx.fillStyle = \"#94a3b8\";\n                ctx.font = `bold ${FONT_SZ * 0.7}px sans-serif`;\n                ctx.textAlign = \"center\";\n                ctx.textBaseline = \"middle\";\n                ctx.fillText(\"logo-cr.png\", rightX + rightW \/ 2, H \/ 2);\n                finalize();\n            };\n            logoImg.src =\n                \"https:\/\/tqc.gov.vn\/wp-content\/uploads\/2019\/03\/logo-cr.png\";\n        }\n\n        \/* \u2500\u2500 Scroll to results \u2500\u2500 *\/\n        function scrollToResults() {\n            const resultsEl = $(\"tqcResults\");\n            if (resultsEl) {\n                resultsEl.scrollIntoView({\n                    behavior: \"smooth\",\n                    block: \"start\",\n                });\n            }\n        }\n\n        \/* \u2500\u2500 Render pagination \u2500\u2500 *\/\n        function renderPagination() {\n            const totalPages = Math.ceil(tqcFoundResults.length \/ ITEMS_PER_PAGE);\n            if (totalPages <= 1) return \"\";\n\n            let html = '<div class=\"tqc-search-app__pagination\">';\n\n            \/\/ Previous button\n            html += `<button class=\"tqc-search-app__page-btn tqc-search-app__page-btn--arrow\" \n                   onclick=\"tqcGoToPage(${tqcCurrentPage - 1})\" \n                   ${tqcCurrentPage === 1 ? \"disabled\" : \"\"}>\n                   \u2190 Tr\u01b0\u1edbc\n                 <\/button>`;\n\n            \/\/ Page numbers\n            const maxButtons = 5;\n            let startPage = Math.max(\n                1,\n                tqcCurrentPage - Math.floor(maxButtons \/ 2),\n            );\n            let endPage = Math.min(totalPages, startPage + maxButtons - 1);\n\n            if (endPage - startPage + 1 < maxButtons) {\n                startPage = Math.max(1, endPage - maxButtons + 1);\n            }\n\n            if (startPage > 1) {\n                html += `<button class=\"tqc-search-app__page-btn\" onclick=\"tqcGoToPage(1)\">1<\/button>`;\n                if (startPage > 2) {\n                    html += `<span style=\"padding: 0 4px; color: var(--gray-400);\">...<\/span>`;\n                }\n            }\n\n            for (let i = startPage; i <= endPage; i++) {\n                html += `<button class=\"tqc-search-app__page-btn ${i === tqcCurrentPage ? \"active\" : \"\"}\" \n                     onclick=\"tqcGoToPage(${i})\">${i}<\/button>`;\n            }\n\n            if (endPage < totalPages) {\n                if (endPage < totalPages - 1) {\n                    html += `<span style=\"padding: 0 4px; color: var(--gray-400);\">...<\/span>`;\n                }\n                html += `<button class=\"tqc-search-app__page-btn\" onclick=\"tqcGoToPage(${totalPages})\">${totalPages}<\/button>`;\n            }\n\n            \/\/ Next button\n            html += `<button class=\"tqc-search-app__page-btn tqc-search-app__page-btn--arrow\" \n                   onclick=\"tqcGoToPage(${tqcCurrentPage + 1})\" \n                   ${tqcCurrentPage === totalPages ? \"disabled\" : \"\"}>\n                   Ti\u1ebfp \u2192\n                 <\/button>`;\n\n            html += \"<\/div>\";\n            return html;\n        }\n\n        \/* \u2500\u2500 Render page \u2500\u2500 *\/\n        function renderPage(pageNumber) {\n            const wrap = $(\"tqcResults\");\n            if (!tqcFoundResults.length) return;\n\n            tqcCurrentPage = pageNumber;\n            const startIdx = (pageNumber - 1) * ITEMS_PER_PAGE;\n            const endIdx = startIdx + ITEMS_PER_PAGE;\n            const pageItems = tqcFoundResults.slice(startIdx, endIdx);\n\n            \/\/ Preserve alert box if exists\n            const existingAlert = wrap.querySelector(\".tqc-search-app__alert\");\n            const alertHtml = existingAlert ? existingAlert.outerHTML : \"\";\n\n            wrap.innerHTML =\n                alertHtml + pageItems.map(renderCard).join(\"\") + renderPagination();\n            scrollToResults();\n        }\n\n        \/* \u2500\u2500 Go to page (called from pagination buttons) \u2500\u2500 *\/\n        function tqcGoToPage(pageNumber) {\n            const totalPages = Math.ceil(tqcFoundResults.length \/ ITEMS_PER_PAGE);\n            if (pageNumber < 1 || pageNumber > totalPages) return;\n            renderPage(pageNumber);\n        }\n\n        \/* \u2500\u2500 Main search \u2500\u2500 *\/\n        async function tqcSearch() {\n            const q = $(\"tqcInput\").value.trim();\n            const wrap = $(\"tqcResults\");\n\n            if (!q) {\n                setStatus(\n                    \"Vui l\u00f2ng nh\u1eadp t\u00ean c\u00f4ng ty, m\u00e3 s\u1ed1 thu\u1ebf ho\u1eb7c m\u00e3 qu\u1ea3n l\u00fd.\",\n                    true,\n                );\n                return;\n            }\n\n            \/\/ Check minimum length (3 characters)\n            if (q.length < 3) {\n                setStatus(\"Vui l\u00f2ng nh\u1eadp \u00edt nh\u1ea5t 3 k\u00fd t\u1ef1 \u0111\u1ec3 tra c\u1ee9u.\", true);\n                return;\n            }\n\n            setLoading(true);\n            setStatus(\"\u0110ang t\u1ea3i d\u1eef li\u1ec7u\u2026\");\n            wrap.innerHTML = \"\";\n            tqcFoundResults = [];\n            tqcCurrentPage = 1;\n\n            try {\n                const data = await loadData();\n                $(\"tqcTotal\").textContent = data.length;\n\n                const qLower = q.toLowerCase();\n                const found = data.filter(\n                    (d) =>\n                    (d.ten && d.ten.toLowerCase().includes(qLower)) ||\n                    (d.mst && d.mst.toLowerCase().includes(qLower)) ||\n                    (d.maql && d.maql.toLowerCase().includes(qLower)),\n                );\n\n                if (!found.length) {\n                    setStatus(\"\");\n                    wrap.innerHTML = `\n          <div class=\"tqc-search-app__empty\">\n            <div class=\"tqc-search-app__empty-icon\">\n              <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\"\n                   stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/>\n                <polyline points=\"14 2 14 8 20 8\"\/>\n                <circle cx=\"10\" cy=\"16\" r=\"2\"\/>\n                <path d=\"M11.5 17.5 L13 19\"\/>\n              <\/svg>\n            <\/div>\n            <h4>Kh\u00f4ng t\u00ecm th\u1ea5y d\u1eef li\u1ec7u h\u1ee3p quy<\/h4>\n            <p>H\u1ec7 th\u1ed1ng kh\u00f4ng c\u00f3 k\u1ebft qu\u1ea3 n\u00e0o kh\u1edbp v\u1edbi t\u1eeb kh\u00f3a \n               <span class=\"tqc-search-app__empty-keyword\">\"${esc(q)}\"<\/span>.<\/p>\n            <p class=\"tqc-search-app__empty-tip\">M\u1eb9o: H\u00e3y th\u1eed t\u00ecm ki\u1ebfm b\u1eb1ng M\u00e3 s\u1ed1 thu\u1ebf (MST) ho\u1eb7c M\u00e3 qu\u1ea3n l\u00fd \u0111\u1ec3 c\u00f3 k\u1ebft qu\u1ea3 ch\u00ednh x\u00e1c nh\u1ea5t.<\/p>\n            <button class=\"tqc-search-app__empty-cta\" onclick=\"tqcResetSearch()\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n                   stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <polyline points=\"1 4 1 10 7 10\"\/>\n                <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"\/>\n              <\/svg>\n              X\u00f3a t\u00ecm ki\u1ebfm & Th\u1eed l\u1ea1i\n            <\/button>\n          <\/div>`;\n                    return;\n                }\n\n                \/\/ Handle max results limit\n                const originalCount = found.length;\n                let alertHtml = \"\";\n\n                if (originalCount > MAX_RESULTS) {\n                    tqcFoundResults = found.slice(0, MAX_RESULTS);\n                    alertHtml = `\n            <div class=\"tqc-search-app__alert\">\n              <span class=\"tqc-search-app__alert-icon\">\u26a0\ufe0f<\/span>\n              <div>\n                <strong>T\u1eeb kh\u00f3a qu\u00e1 chung chung<\/strong> (T\u00ecm th\u1ea5y h\u01a1n <strong>${originalCount}<\/strong> k\u1ebft qu\u1ea3).\n                H\u1ec7 th\u1ed1ng ch\u1ec9 hi\u1ec3n th\u1ecb <strong>${MAX_RESULTS}<\/strong> k\u1ebft qu\u1ea3 g\u1ea7n nh\u1ea5t.\n                Vui l\u00f2ng nh\u1eadp <strong>T\u00ean ri\u00eang<\/strong> ho\u1eb7c <strong>M\u00e3 s\u1ed1 thu\u1ebf<\/strong> \u0111\u1ec3 tra c\u1ee9u ch\u00ednh x\u00e1c.\n              <\/div>\n            <\/div>`;\n                    setStatus(\n                        `Hi\u1ec3n th\u1ecb <strong>${MAX_RESULTS}<\/strong>\/<strong>${originalCount}<\/strong> k\u1ebft qu\u1ea3.`,\n                    );\n                } else {\n                    tqcFoundResults = found;\n                    setStatus(\n                        `T\u00ecm th\u1ea5y <strong>${found.length}<\/strong> k\u1ebft qu\u1ea3 ph\u00f9 h\u1ee3p.`,\n                    );\n                }\n\n                \/\/ Render alert box (if any) + first page\n                wrap.innerHTML = alertHtml;\n                renderPage(1);\n            } catch (err) {\n                console.error(\"[TQC]\", err);\n                setStatus(\n                    \"Kh\u00f4ng th\u1ec3 t\u1ea3i d\u1eef li\u1ec7u. Vui l\u00f2ng ki\u1ec3m tra k\u1ebft n\u1ed1i ho\u1eb7c th\u1eed l\u1ea1i sau.\",\n                    true,\n                );\n            } finally {\n                setLoading(false);\n            }\n        }\n\n        \/* \u2500\u2500 Reset search (from empty state CTA) \u2500\u2500 *\/\n        function tqcResetSearch() {\n            $(\"tqcInput\").value = \"\";\n            $(\"tqcClear\").classList.remove(\"show\");\n            setStatus(\"\");\n            $(\"tqcResults\").innerHTML = \"\";\n            $(\"tqcInput\").focus();\n        }\n\n        \/* \u2500\u2500 Events \u2500\u2500 *\/\n        $(\"tqcInput\").addEventListener(\"input\", function() {\n            $(\"tqcClear\").classList.toggle(\"show\", this.value.length > 0);\n        });\n\n        $(\"tqcClear\").addEventListener(\"click\", () => {\n            $(\"tqcInput\").value = \"\";\n            $(\"tqcClear\").classList.remove(\"show\");\n            setStatus(\"\");\n            $(\"tqcResults\").innerHTML = \"\";\n            $(\"tqcInput\").focus();\n        });\n\n        $(\"tqcInput\").addEventListener(\"keydown\", (e) => {\n            if (e.key === \"Enter\") tqcSearch();\n        });\n\n        \/* \u2500\u2500 Load initial data count \u2500\u2500 *\/\n        async function loadInitialCount() {\n            try {\n                const data = await loadData();\n                $(\"tqcTotal\").textContent = data.length;\n            } catch (err) {\n                console.error(\"[TQC] Failed to load initial count:\", err);\n                $(\"tqcTotal\").textContent = \"0\";\n            }\n        }\n\n        \/* \u2500\u2500 iFrame resize (WordPress embed) \u2500\u2500 *\/\n        function sendHeight() {\n            window.parent.postMessage({\n                    type: \"iframeResize\",\n                    height: document.documentElement.scrollHeight + 50,\n                },\n                \"*\",\n            );\n        }\n        window.addEventListener(\"load\", () => {\n            sendHeight();\n            loadInitialCount();\n        });\n        window.addEventListener(\"click\", sendHeight);\n    <\/script>\n<\/body>\n\n<\/html>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-23c6ddaf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"23c6ddaf\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4589e988\" data-id=\"4589e988\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-64c06053 elementor-widget-divider--view-line_text elementor-widget-divider--element-align-left elementor-widget elementor-widget-divider\" data-id=\"64c06053\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<span class=\"elementor-divider__text elementor-divider__element\">\n\t\t\t\tLi\u00ean k\u1ebft c\u00e1c \u0111\u01a1n v\u1ecb\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4deb2f29 elementor-skin-carousel elementor-pagination-type-bullets elementor-pagination-position-outside elementor-widget elementor-widget-media-carousel\" data-id=\"4deb2f29\" data-element_type=\"widget\" data-settings=\"{&quot;slides_per_view&quot;:&quot;4&quot;,&quot;space_between&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;slides_per_view_mobile&quot;:&quot;1&quot;,&quot;skin&quot;:&quot;carousel&quot;,&quot;effect&quot;:&quot;slide&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;speed&quot;:500,&quot;autoplay&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;loop&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;space_between_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;space_between_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]}}\" data-widget_type=\"media-carousel.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-swiper\">\n\t\t\t<div class=\"elementor-main-swiper swiper-container\">\n\t\t\t\t<div class=\"swiper-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/mst.gov.vn\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2025\/08\/logo-headerx3.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"http:\/\/vnta.gov.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/Logo_VNTA.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"http:\/\/www.rfd.gov.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/Logo_CucTanSo.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/vnnic.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/vnniv-logo.jpg)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"http:\/\/www.boa.gov.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/logo_boa_done.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/vnpt.com.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/Logo_VNPT.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.vietnamobile.com.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/Logo_VNM.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.mobifone.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/Logo_MobiFone.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/viettel.com.vn\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" style=\"background-image: url(https:\/\/tqc.gov.vn\/wp-content\/uploads\/2021\/10\/Logo_Viettel.png)\">\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Tra c\u1ee9u D\u1ea5u H\u1ee3p quy \u2013 TQC TRA C\u1ee8U D\u1ea4U H\u1ee2P QUY Nh\u1eadp t\u00ean c\u00f4ng ty, m\u00e3 s\u1ed1 thu\u1ebf ho\u1eb7c m\u00e3 qu\u1ea3n l\u00fd \u0111\u1ec3 tra c\u1ee9u th\u00f4ng tin v\u1ec1 d\u1ea5u h\u1ee3p quy \u0110\u00e3 c\u1ea5p d\u1ea5u&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-9821","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/pages\/9821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/comments?post=9821"}],"version-history":[{"count":15,"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/pages\/9821\/revisions"}],"predecessor-version":[{"id":9838,"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/pages\/9821\/revisions\/9838"}],"wp:attachment":[{"href":"https:\/\/tqc.gov.vn\/wp-json\/wp\/v2\/media?parent=9821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}