/* Shared styles for the six timetable data-entry pages.
   Page titles are supplied by the existing common title stylesheet. */
.main-content:has(> .tkb-data-entry) {
    height: 100vh;
    height: 100dvh;
    min-width: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
.tkb-data-entry {
    --entry-primary: #087f73;
    --entry-primary-dark: #06665d;
    --entry-soft: #edf5f2;
    --entry-ink: #243b36;
    --entry-muted: #60736d;
    --entry-line: #cfdad5;
    --entry-danger: #b73540;
    --entry-paper: #fff;
    flex: 1 1 0;
    min-height: 0;
    min-width: 0;
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 8px;
    color: var(--entry-ink);
    font: 13px/1.45 'Be Vietnam Pro', 'Segoe UI', system-ui, sans-serif;
}
.tkb-data-entry *, .tkb-data-entry *::before, .tkb-data-entry *::after { box-sizing: border-box; }
.tkb-data-entry > :not(.gv-page, .lop-page, .mon-page, .diemtruong-page, .pc-page, .pcnvn-page, .pc-summary-page) { flex-shrink: 0; }
.tkb-data-entry :is(.gv-page, .lop-page, .mon-page, .diemtruong-page, .pc-page, .pcnvn-page, .pc-summary-page) {
    --lop-primary: var(--entry-primary);
    --lop-primary-light: var(--entry-soft);
    --lop-primary-border: var(--entry-line);
    --dt-primary: var(--entry-primary);
    --navy: var(--entry-primary);
    --navy-dark: var(--entry-primary-dark);
    --border: var(--entry-line);
    --pcnvn-primary: var(--entry-primary);
    --pcnvn-primary-soft: var(--entry-soft);
    --pcnvn-line: var(--entry-line);
    flex: 1 1 0;
    min-height: 0;
    min-width: 0;
    max-width: 100%;
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 0 !important;
    margin: 0;
    background: transparent;
    color: var(--entry-ink);
    font-family: inherit;
    font-size: inherit;
    overflow: auto;
}
/* Only the outer content row stretches; nested form rows retain their size. */
.tkb-data-entry :is(.gv-page, .lop-page, .diemtruong-page, .pc-page) > .row {
    --bs-gutter-x: 12px;
    --bs-gutter-y: 0;
    flex: 1 1 0;
    min-height: 0;
    flex-wrap: nowrap;
}
.tkb-data-entry :is(.gv-page, .lop-page, .diemtruong-page, .pc-page) > .row > div {
    min-height: 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
}
.tkb-data-entry :is(.card, .lop-card, .tkb-card, .diemtruong-card, .pcnv-card, .pc-quick-nav, .pcnvn-gv-sidebar, .pcnvn-report, .grade-card) {
    min-width: 0;
    min-height: 0;
    border: 1px solid var(--entry-line);
    border-radius: 5px;
    background: var(--entry-paper);
    box-shadow: none !important;
}
.tkb-data-entry :is(.gv-page, .lop-page, .diemtruong-page, .pc-page) > .row > div > :is(.card, .lop-card, .diemtruong-card, .pcnv-card, .pc-quick-nav, .card-body) {
    flex: 1 1 0;
    height: auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: auto;
}
.tkb-data-entry :is(.card-body, .lop-card-body, .diemtruong-card-body, .pcnv-card-body) { min-height: 0; padding: 10px; overflow: auto; }
.tkb-data-entry .gv-page .card-body.p-2 { display: flex; padding: 0 !important; }
.tkb-data-entry :is(.diemtruong-card-header, .pcnv-card-header, .lop-campus-title, .pcnvn-report-head, .pcnvn-gv-sidebar-head, .pc-quick-nav__title) {
    flex-shrink: 0;
    padding: 7px 10px;
    background: var(--entry-soft);
    color: var(--entry-ink);
    border-bottom: 1px solid var(--entry-line);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0;
    text-transform: none;
}
.tkb-data-entry :is(.form-label, .lop-field label, .input-note, .pc-label, .pcnvn-label) { margin-bottom: 3px; color: var(--entry-ink); font-size: 12px; font-weight: 600; }
.tkb-data-entry :is(.lop-field, form .mb-3) { margin-bottom: 8px !important; }
.tkb-data-entry :is(.form-control, .form-select, .lop-input, .pcnvn-select, .pcnvn-gv-search) {
    min-width: 0;
    min-height: 32px;
    height: 32px;
    padding: 5px 9px;
    border: 1px solid #bfcfc7;
    border-radius: 4px;
    color: var(--entry-ink);
    background-color: #fff;
    font: inherit;
    box-shadow: none;
}
.tkb-data-entry .form-select { padding-right: 28px; }
.tkb-data-entry :is(.form-control, .form-select, .lop-input, .pcnvn-select, .pcnvn-gv-search):focus { border-color: var(--entry-primary); outline: 2px solid #087f7325; outline-offset: 1px; }
.tkb-data-entry :is(input[readonly], input:disabled, select:disabled) { background-color: #f2f5f3; color: var(--entry-muted); }
.tkb-data-entry :is(.validation-message, .validation-errors) { color: var(--entry-danger); }
.tkb-data-entry .form-control.is-invalid { border-color: var(--entry-danger); }
.tkb-data-entry :is(.btn, .action-btn, .form-btn, .lop-btn, .pcnv-toolbar-btn, .btn-modal-save, .btn-modal-cancel) {
    min-width: 0;
    min-height: 32px;
    height: auto;
    padding: 5px 10px;
    border: 1px solid var(--entry-line);
    border-radius: 4px;
    font: 600 12px/1.45 'Be Vietnam Pro', 'Segoe UI', system-ui, sans-serif;
    box-shadow: none;
    white-space: normal;
}
.tkb-data-entry :is(.btn-add, .btn-save, .btn-primary, .btn-modal-save, .lop-modal-save, .btn-sync) { background: var(--entry-primary) !important; border-color: var(--entry-primary) !important; color: #fff !important; }
.tkb-data-entry :is(.btn-next, .btn-back, .btn-cancel, .btn-reset, .btn-sort, .btn-view, .btn-print, .btn-quick-view, .btn-secondary, .btn-outline-secondary, .btn-modal-cancel) { background: #fff !important; border-color: #bdcfc6 !important; color: var(--entry-primary-dark) !important; }
.tkb-data-entry :is(.btn-delete, .btn-delete-all, .btn-outline-danger, .action-delete, .lop-action.delete) { background: #fff3f3 !important; border: 1px solid #e6bfc3 !important; color: var(--entry-danger) !important; }
.tkb-data-entry :is(.btn-edit, .btn-outline-primary, .action-edit, .action-view, .lop-action.edit) { background: var(--entry-soft) !important; border: 1px solid #bdd5ca !important; color: var(--entry-primary-dark) !important; }
.tkb-data-entry :is(button, .btn):disabled { opacity: .5; cursor: not-allowed; }
.tkb-data-entry :is(button, a, summary):focus-visible { outline: 2px solid var(--entry-primary); outline-offset: 2px; }
.tkb-data-entry :is(.btn, .lop-btn, .pcnv-toolbar-btn):hover:not(:disabled) { filter: brightness(.96); transform: none; }
.tkb-data-entry :is(.action-bar, .lop-buttons, .pcnv-actions) { display: flex; flex-wrap: wrap; gap: 5px; }
.tkb-data-entry .lop-buttons { flex-direction: row; }
.tkb-data-entry .lop-buttons .lop-btn { flex: 1 1 80px; }
/* Spreadsheet grid: compact cells, visible vertical borders, pinned headings. */
.tkb-data-entry :is(.table-container, .table-responsive, .lop-campus-list, .right-panel, .pcnv-table-wrap, .pcnvn-table-wrap, .pc-summary-table-wrap) { min-height: 0; max-width: 100%; overflow: auto; scrollbar-width: thin; scrollbar-color: #aebfb6 #f3f6f4; }
.tkb-data-entry :is(.table-container, .table-responsive, .lop-campus-list) { flex: 1 1 0; }
.tkb-data-entry :is(.lop-table-wrap, .table-wrapper) { max-width: 100%; overflow: auto; border-radius: 0; }
.tkb-data-entry table { width: 100%; margin: 0; border-collapse: separate; border-spacing: 0; font-size: 12px; color: var(--entry-ink); --bs-table-bg: #fff; --bs-table-color: var(--entry-ink); --bs-table-hover-bg: #edf5f2; --bs-table-border-color: var(--entry-line); }
.tkb-data-entry table :is(th, td) { height: 29px; padding: 4px 7px !important; border: 0; border-right: 1px solid var(--entry-line); border-bottom: 1px solid var(--entry-line); vertical-align: middle; line-height: 1.4; }
.tkb-data-entry table thead th { position: sticky; top: 0; z-index: 2; background: #e8efeb !important; color: var(--entry-ink) !important; font-size: 12px; font-weight: 600; text-transform: none; letter-spacing: 0; box-shadow: 0 1px 0 var(--entry-line); }
.tkb-data-entry table tbody tr:nth-child(even) > td { background-color: #f7faf8; }
.tkb-data-entry table tbody tr:hover > td { background-color: #eaf4ee; }
.tkb-data-entry table :is(.btn, .lop-action, .action-edit, .action-delete, .action-view) { display: inline-flex; align-items: center; justify-content: center; min-width: 25px; min-height: 24px; height: 24px; padding: 2px 5px; border-radius: 3px; font-size: 11px; line-height: 1; }
.tkb-data-entry .gv-page .table { min-width: 580px; table-layout: auto; }
.tkb-data-entry .gv-page :is(th, td):nth-child(2) { text-align: left; min-width: 150px; }
.tkb-data-entry .gv-page .row-actions { display: flex; justify-content: center; flex-wrap: nowrap; gap: 4px; }
.tkb-data-entry :is(.note-box, .tip-box, .pcnv-notice, .pc-primary-selection, .edit-mode-banner, .alert-info) { margin-top: 8px !important; padding: 7px 9px; border: 1px solid var(--entry-line); border-radius: 4px; background: var(--entry-soft); color: var(--entry-ink); font-size: 12px; line-height: 1.5; }
.tkb-data-entry .gv-page :is(.note-box, .tip-box) { padding: 7px 9px; background: var(--entry-soft); color: var(--entry-ink); font-size: 12px; }
.tkb-data-entry .lop-campus-list { display: block; padding: 0; }
.tkb-data-entry .lop-campus-group { margin-bottom: 8px; }
.tkb-data-entry .lop-campus-count { padding: 2px 6px; font-size: 11px; }
.tkb-data-entry .mon-page .main-layout { display: grid; grid-template-columns: 190px minmax(0, 1fr); gap: 8px; flex: 1 1 0; min-height: 0; }
.tkb-data-entry .mon-page .form-card { padding: 10px; overflow: auto; }
.tkb-data-entry .mon-page .table-panel { padding: 8px; }
.tkb-data-entry .mon-page .grade-grid { display: grid; grid-template-columns: repeat(4, minmax(180px, 1fr)); gap: 6px; align-items: start; }
.tkb-data-entry .mon-page .grade-card .khoi-header { padding: 6px 8px; background: var(--entry-soft); }
.tkb-data-entry .mon-page .grade-title { font-size: 13px; color: var(--entry-ink); }
.tkb-data-entry .mon-page .badge { font-size: 10px; padding: 3px 5px; }
.tkb-data-entry .tong-tiet-box { margin-bottom: 10px; padding: 8px; font-size: 12px; background: var(--entry-soft); color: var(--entry-ink); border-radius: 4px; }
.tkb-data-entry .tong-tiet-box strong { color: var(--entry-primary-dark); font-size: 15px; }
.tkb-data-entry .pcnv-toolbar-panel { flex-shrink: 0; display: flex; flex-wrap: wrap; justify-content: flex-start; gap: 5px; padding: 6px; margin: 0; border: 1px solid var(--entry-line); border-radius: 5px; background: #fff; }
.tkb-data-entry .pcnv-toolbar-panel .pcnv-toolbar-btn { min-width: 0; margin: 0; }
.tkb-data-entry .summary-grid { flex-shrink: 0; gap: 8px; margin: 0; }
.tkb-data-entry .summary-card { min-height: 0; padding: 7px 10px; border: 1px solid var(--entry-line); border-radius: 5px; box-shadow: none; }
.tkb-data-entry .summary-icon-shell { width: 30px; height: 30px; }
.tkb-data-entry .summary-icon { font-size: 18px; }
.tkb-data-entry .summary-value { color: var(--entry-primary-dark); font-size: 20px; line-height: 1.2; }
.tkb-data-entry :is(.summary-kicker, .summary-title, .summary-action) { font-size: 11px; margin: 0; }
.tkb-data-entry .pc-entry-table .pcnv-card-body { display: flex; flex: 1 1 0; overflow: hidden; padding: 0; }
.tkb-data-entry .pcnv-table-wrap { flex: 1 1 0; max-height: none; }
.tkb-data-entry .pcnv-table { min-width: 620px; }
.tkb-data-entry .pc-quick-nav { height: 100%; }
.tkb-data-entry .pcnvn-toolbar { flex-shrink: 0; padding: 6px 8px; gap: 8px; margin: 0; border-radius: 5px; }
.tkb-data-entry .pcnvn-select-wrap { padding: 0; background: transparent; border: 0; }
.tkb-data-entry .pcnvn-main-layout { flex: 1 1 0; display: grid; grid-template-columns: 190px minmax(0, 1.6fr) minmax(280px, 1fr); grid-template-rows: minmax(0, 1fr); gap: 8px; min-height: 0; height: auto; align-items: stretch; }
.tkb-data-entry .pcnvn-gv-sidebar { grid-column: 1; grid-row: 1; display: flex; flex-direction: column; height: auto; max-height: none; overflow: hidden; }
.tkb-data-entry .pcnvn-gv-list { flex: 1 1 0; min-height: 0; max-height: none; overflow: auto; }
.tkb-data-entry .pcnvn-gv-option { min-height: 32px; padding: 6px 8px; font-size: 12px; }
.tkb-data-entry .pcnvn-matrix-panel { grid-column: 2; grid-row: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
.tkb-data-entry .pcnvn-desktop-view { flex: 1 1 0; min-height: 0; overflow: hidden; }
.tkb-data-entry .pcnvn-desktop-view > .pcnvn-table-wrap { height: 100%; max-height: none; }
.tkb-data-entry .pcnvn-report { grid-column: 3; grid-row: 1; display: flex; flex-direction: column; overflow: hidden; }
.tkb-data-entry .pcnvn-report > .pcnvn-table-wrap { flex: 1 1 0; max-height: none; }
.tkb-data-entry .pcnvn-report-title { color: var(--entry-ink); font-size: 12px; }
.tkb-data-entry .pcnvn-legend { flex-shrink: 0; padding: 5px 8px; margin: 0; gap: 8px; font-size: 11px; }
.tkb-data-entry .pcnvn-legend-item { font-size: 11px; }
.tkb-data-entry .pcnvn-matrix :is(.col-lop, .pcnvn-class-heading) { width: 44px; min-width: 44px; }
.tkb-data-entry .pcnvn-class-heading__name { font-size: 12px; }
.tkb-data-entry .pcnvn-class-heading__campus { font-size: 10px; }
.tkb-data-entry .pc-summary-card { flex: 1 1 0; min-height: 0; overflow: hidden; }
.tkb-data-entry .pc-summary-card .card-body { display: flex; flex-direction: column; }
.tkb-data-entry :is(.modal-content, .modal-box, .lop-modal) { max-height: calc(100dvh - 32px); overflow: auto; }
.tkb-data-entry .lop-modal-backdrop, .tkb-data-entry .modal { z-index: 1400; }
/* Small screens keep every control reachable, with independent content scrolling. */
@media (max-width: 1199.98px) {
    .tkb-data-entry .pcnvn-main-layout { grid-template-columns: 150px minmax(0, 1.4fr) minmax(230px, 1fr); }
}
@media (max-width: 991.98px) {
    .tkb-data-entry :is(.gv-page, .lop-page, .diemtruong-page, .pc-page) > .row { flex-direction: column; flex-wrap: nowrap; gap: 8px; }
    .tkb-data-entry :is(.gv-page, .lop-page, .diemtruong-page, .pc-page) > .row > div { width: 100%; flex-shrink: 0; }
    .tkb-data-entry :is(.gv-page, .lop-page, .diemtruong-page, .pc-page) > .row > div > :is(.card, .lop-card, .diemtruong-card, .pcnv-card, .pc-quick-nav, .card-body) { flex: none; max-height: 55dvh; }
    .tkb-data-entry :is(.table-container, .table-responsive, .lop-campus-list) { flex: auto; }
    .tkb-data-entry .pcnv-table-wrap { max-height: 50dvh; }
}
@media (max-width: 767.98px) {
    .tkb-data-entry .mon-page .main-layout { display: flex; flex-direction: column; overflow: auto; }
    .tkb-data-entry .mon-page .form-card { flex-shrink: 0; }
    .tkb-data-entry .mon-page .right-panel { flex-shrink: 0; max-height: 60dvh; }
    .tkb-data-entry .pcnvn-main-layout { display: flex; flex-direction: column; overflow: auto; }
    .tkb-data-entry .pcnvn-gv-sidebar { flex: 0 0 180px; }
    .tkb-data-entry .pcnvn-matrix-panel { flex: 0 0 auto; overflow: visible; }
    .tkb-data-entry .pcnvn-mobile-view { max-height: 55dvh; overflow: auto; }
    .tkb-data-entry .pcnvn-report { flex: 0 0 220px; }
    .tkb-data-entry .pcnvn-toolbar { flex-wrap: wrap; }
    .tkb-data-entry .pcnvn-select-wrap { min-width: 0; max-width: 100%; }
    .tkb-data-entry .lop-table { min-width: 450px; }
}
@media print {
    .main-content:has(> .tkb-data-entry), .tkb-data-entry { display: block; height: auto; overflow: visible; }
    .tkb-data-entry :is(.pc-page, .pc-summary-page, .pc-summary-card, .card-body, .pc-summary-table-wrap) { display: block; height: auto; max-height: none; overflow: visible; }
    .tkb-data-entry table thead th { position: static; }
}
/* Resolve the remaining page-local legacy rules without changing page markup. */
.tkb-data-entry .mon-page .form-card :is(.form-control, .form-select) { min-height: 32px; height: 32px; padding: 5px 9px; font-size: 13px; }
.tkb-data-entry .mon-page .form-card .form-select { padding-right: 28px; }
.tkb-data-entry .mon-page .grade-card .khoi-table { table-layout: fixed; font-size: 11px; }
.tkb-data-entry .mon-page .grade-card .khoi-table :is(th, td) { padding: 4px 3px !important; }
.tkb-data-entry .mon-page .grade-card .khoi-table th { font-size: 10px; }
.tkb-data-entry .mon-page .grade-card .grade-period-heading { width: 30px; }
.tkb-data-entry .mon-page .grade-card .grade-action-heading { width: 52px; }
.tkb-data-entry .mon-page .grade-card .actions { gap: 2px; }
.tkb-data-entry .mon-page .grade-card :is(.btn-edit, .btn-delete) { min-width: 22px; width: 22px; padding: 0; }
.tkb-data-entry :is(.gv-page, .lop-page, .mon-page, .diemtruong-page, .pc-page, .pcnvn-page) table :is(th, td) { border-right: 1px solid var(--entry-line); border-bottom: 1px solid var(--entry-line); }
.tkb-data-entry .pcnvn-matrix-panel, .tkb-data-entry .pcnvn-report { align-self: stretch; }
.tkb-data-entry .pcnvn-report .pcnvn-table-wrap { flex: 1 1 0; }
.tkb-data-entry .pcnvn-page > :not(.pcnvn-main-layout) { flex-shrink: 0; }
@media (max-width: 767.98px) {
    .tkb-data-entry .pcnvn-report .pcnvn-table-wrap { flex: 1 1 0; }
}

