:root{--brand:#0f766e;--brand-dark:#115e59;--bg:#f4f7f6;--ink:#17202a;--muted:#667085;--line:#e5e7eb}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--osen-body-font-family,var(--osen-font-sans-serif,"Inter",sans-serif))}
.brand-logo-img{max-width:150px;width:auto;height:34px;object-fit:contain}.brand-logo-sm{width:28px;height:28px;object-fit:contain}.brand-logo-text{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.auth-brand img{max-width:180px;width:auto;object-fit:contain}.sidenav-menu .logo .logo-sm{display:none!important}.sidenav-menu .logo .logo-lg{display:inline-flex!important}html[data-sidenav-size=condensed] .sidenav-menu .logo,html[data-sidenav-size=sm-hover] .sidenav-menu .logo{justify-content:center}html[data-sidenav-size=condensed] .brand-logo-text,html[data-sidenav-size=sm-hover] .brand-logo-text{display:none!important}html[data-sidenav-size=condensed] .sidenav-menu .logo .logo-lg,html[data-sidenav-size=sm-hover] .sidenav-menu .logo .logo-lg{display:none!important}html[data-sidenav-size=condensed] .sidenav-menu .logo .logo-sm,html[data-sidenav-size=sm-hover] .sidenav-menu .logo .logo-sm{display:inline-flex!important;align-items:center;justify-content:center}html[data-sidenav-size=sm-hover-active] .sidenav-menu .logo .logo-sm,html[data-sidenav-size=default] .sidenav-menu .logo .logo-sm,html[data-sidenav-size=full] .sidenav-menu .logo .logo-sm{display:none!important}html[data-sidenav-size=sm-hover-active] .sidenav-menu .logo .logo-lg,html[data-sidenav-size=default] .sidenav-menu .logo .logo-lg,html[data-sidenav-size=full] .sidenav-menu .logo .logo-lg{display:inline-flex!important}
a{text-decoration:none}.app-shell{display:flex;min-height:100vh}.sidebar{width:264px;background:#0b2926;color:#fff;position:sticky;top:0;height:100vh;padding:18px;flex-shrink:0}.sidebar-brand{display:flex;gap:10px;align-items:center;color:#fff;font-size:1.25rem;font-weight:800;margin-bottom:20px}.sidebar-brand i{font-size:1.7rem}.sidebar-nav{display:grid;gap:4px}.sidebar-nav a{color:#d9fffa;padding:10px 12px;border-radius:8px;display:flex;gap:10px;align-items:center}.sidebar-nav a:hover{background:rgba(255,255,255,.12);color:#fff}.app-main{flex:1;min-width:0}.topbar{height:70px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 22px;position:sticky;top:0;z-index:10}.footer{padding:18px 24px;color:var(--muted);font-size:.9rem}.panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:20px;box-shadow:0 8px 24px rgba(15,23,42,.04)}.panel h2{font-size:1.1rem;margin:0 0 16px;font-weight:750}.panel.narrow{max-width:720px}.stat-card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:18px;display:grid;gap:8px;min-height:136px}.stat-card i{font-size:1.6rem}.stat-card span{color:var(--muted);font-size:.9rem}.stat-card strong{font-size:2rem;line-height:1}.today-status .badge{font-size:1rem}.camera-preview{width:100%;aspect-ratio:4/3;border-radius:8px;background:#0b2926;object-fit:cover}.install-btn{position:fixed;right:18px;bottom:18px;z-index:30}.auth-page{min-height:100vh;background:linear-gradient(135deg,#ecfdf5,#f8fafc)}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.auth-panel{width:min(440px,100%);background:#fff;border:1px solid var(--line);border-radius:8px;padding:32px;box-shadow:0 20px 60px rgba(15,23,42,.10)}.auth-panel h1{font-size:1.7rem;font-weight:800}.brand-mark{width:58px;height:58px;background:var(--brand);color:#fff;display:grid;place-items:center;border-radius:8px;font-size:1.8rem;margin-bottom:16px}.offline-page{min-height:100vh;display:grid;place-items:center;background:#f4f7f6;padding:24px}.offline-page main{max-width:460px;background:#fff;border-radius:8px;padding:28px;text-align:center;border:1px solid var(--line)}.offline-page button{border:0;background:var(--brand);color:#fff;border-radius:8px;padding:10px 16px}
@media (max-width:991px){.app-shell{display:block}.sidebar{position:fixed;z-index:50;left:-280px;transition:.2s}.sidebar.show{left:0}.topbar{padding:0 14px}.container-fluid{padding-left:14px!important;padding-right:14px!important}.stat-card{min-height:120px;padding:14px}.stat-card strong{font-size:1.55rem}.panel{padding:16px}.table{font-size:.9rem}}
/* Integrasi template Osen untuk view lama SIM-PEG. */
.page-content .panel {
    background: var(--ct-card-bg, #fff);
    border: 1px solid var(--ct-border-color, #e9ebec);
    border-radius: .75rem;
    padding: 1.25rem;
    margin-bottom: 1rem;
    box-shadow: var(--ct-box-shadow-sm, 0 .125rem .25rem rgba(0,0,0,.075));
}
.page-content .panel h2 {
    font-size: 1rem;
    font-weight: 700;
    margin-bottom: 1rem;
}
.page-content .stat-card {
    background: var(--ct-card-bg, #fff);
    border: 1px solid var(--ct-border-color, #e9ebec);
    border-radius: .75rem;
    padding: 1.15rem;
    min-height: 128px;
    box-shadow: var(--ct-box-shadow-sm, 0 .125rem .25rem rgba(0,0,0,.075));
}
.page-content .stat-card i {
    font-size: 1.75rem;
    color: var(--ct-primary, #465dff);
}
.page-content .stat-card span {
    display: block;
    color: var(--ct-secondary-color, #6c757d);
    font-size: .875rem;
}
.page-content .stat-card strong {
    display: block;
    font-size: 1.9rem;
    line-height: 1.1;
}
.camera-preview {
    width: 100%;
    aspect-ratio: 4 / 3;
    border-radius: .75rem;
    background: #111827;
    object-fit: cover;
}
.topbar-badge {
    margin-top: .35rem;
    margin-left: -.35rem;
}
.auth-bg {
    background:
        radial-gradient(circle at 20% 20%, rgba(15, 118, 110, .14), transparent 28%),
        linear-gradient(135deg, #eef7f5, #f8fafc);
}
@media (max-width: 575.98px) {
    .page-title-head {
        align-items: flex-start !important;
        flex-direction: column;
    }
    .page-content .panel,
    .page-content .stat-card {
        padding: 1rem;
    }
}

/* Penyesuaian final agar halaman aplikasi mengikuti tipografi dan komponen template. */
body {
    font-family: var(--simpeg-font) !important;
    background: var(--ct-body-bg) !important;
    color: var(--ct-body-color) !important;
}
.page-content .panel {
    background: var(--ct-card-bg, #fff);
    border: 0;
    border-radius: var(--ct-border-radius-lg, .375rem);
    padding: 1.25rem;
    margin-bottom: 1rem;
    box-shadow: var(--ct-box-shadow-sm);
}
.action-icon {
    width: 31px;
    height: 31px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}
.action-icon i {
    font-size: 1rem;
}
.gridjs-search-table {
    --simpeg-grid-border: var(--ct-border-color, #e9ebec);
    --simpeg-grid-soft: rgba(108, 117, 125, .08);
    --simpeg-grid-head: var(--ct-light, #f6f7fb);
    width: 100%;
}
.gridjs-search-table .gridjs-head {
    display: flex;
    justify-content: flex-end;
    margin-bottom: 1rem;
}
.gridjs-search-table .gridjs-search {
    width: min(360px, 100%);
    position: relative;
}
.gridjs-search-table .gridjs-search::before {
    content: "\ea61";
    font-family: "tabler-icons";
    position: absolute;
    left: .9rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ct-secondary-color, #6c757d);
    font-size: 1rem;
    pointer-events: none;
    z-index: 1;
}
.gridjs-search-table .gridjs-search-input,
.gridjs-search-table .gridjs-input {
    width: 100%;
    min-height: 38px;
    padding: .45rem .9rem .45rem 2.35rem !important;
    border: 1px solid var(--simpeg-grid-border) !important;
    border-radius: var(--ct-border-radius, .375rem) !important;
    background: var(--ct-card-bg, #fff) !important;
    color: var(--ct-body-color, #313a46) !important;
    font-family: var(--simpeg-font) !important;
    box-shadow: none !important;
}
.gridjs-search-table .gridjs-search-input:focus,
.gridjs-search-table .gridjs-input:focus {
    border-color: var(--ct-primary, #465dff) !important;
    box-shadow: 0 0 0 .15rem rgba(70, 93, 255, .12) !important;
}
.gridjs-search-table .gridjs-wrapper {
    overflow-x: auto;
    border: 1px solid var(--simpeg-grid-border) !important;
    border-radius: var(--ct-border-radius-lg, .5rem) var(--ct-border-radius-lg, .5rem) 0 0 !important;
    box-shadow: none !important;
}
.gridjs-search-table .gridjs-table {
    width: 100%;
    min-width: max-content;
    border-collapse: separate !important;
    border-spacing: 0;
    font-family: var(--simpeg-font) !important;
    color: var(--ct-body-color, #313a46) !important;
}
.gridjs-search-table .gridjs-th {
    background: var(--simpeg-grid-head) !important;
    border-color: var(--simpeg-grid-border) !important;
    color: var(--ct-secondary-color, #6c757d) !important;
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: 0;
    line-height: 1.2;
    padding: .85rem .9rem !important;
    text-transform: uppercase;
    white-space: nowrap;
}
.gridjs-search-table .gridjs-td {
    border-color: var(--simpeg-grid-border) !important;
    font-size: .875rem;
    line-height: 1.45;
    padding: .85rem .9rem !important;
    vertical-align: middle;
}
.gridjs-search-table .gridjs-tr:hover .gridjs-td {
    background: var(--simpeg-grid-soft) !important;
}
.gridjs-search-table .gridjs-td:first-child,
.gridjs-search-table .gridjs-th:first-child {
    padding-left: 1rem !important;
}
.gridjs-search-table .gridjs-td:last-child,
.gridjs-search-table .gridjs-th:last-child {
    padding-right: 1rem !important;
}
.gridjs-search-table .gridjs-footer {
    display: block;
    padding: .85rem 1rem !important;
    border: 1px solid var(--simpeg-grid-border) !important;
    border-top: 0 !important;
    border-radius: 0 0 var(--ct-border-radius-lg, .5rem) var(--ct-border-radius-lg, .5rem) !important;
    background: var(--ct-card-bg, #fff) !important;
    box-shadow: none !important;
}
.gridjs-search-table .gridjs-summary {
    color: var(--ct-secondary-color, #6c757d) !important;
    font-size: .8125rem;
    text-align: left;
    white-space: nowrap;
}
.gridjs-search-table .gridjs-pagination {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: .75rem;
    width: 100%;
    color: var(--ct-body-color, #313a46) !important;
}
.gridjs-search-table .gridjs-pagination .gridjs-pages {
    display: inline-flex;
    gap: .25rem;
    justify-self: end;
}
.gridjs-search-table .gridjs-pagination .gridjs-pages button {
    min-width: 34px;
    height: 34px;
    border: 1px solid var(--simpeg-grid-border) !important;
    border-radius: var(--ct-border-radius, .375rem) !important;
    background: var(--ct-card-bg, #fff) !important;
    color: var(--ct-body-color, #313a46) !important;
    box-shadow: none !important;
}
.gridjs-search-table .gridjs-pagination .gridjs-pages button:hover {
    background: var(--ct-light, #f6f7fb) !important;
}
.gridjs-search-table .gridjs-pagination .gridjs-pages button.gridjs-currentPage {
    background: var(--ct-primary, #465dff) !important;
    border-color: var(--ct-primary, #465dff) !important;
    color: #fff !important;
    font-weight: 700;
}
.gridjs-search-table .gridjs-notfound,
.gridjs-search-table .gridjs-loading {
    padding: 2.25rem 1rem !important;
    color: var(--ct-secondary-color, #6c757d) !important;
    text-align: center;
}
.gridjs-search-table .badge {
    white-space: nowrap;
}
.gridjs-search-table .btn {
    white-space: nowrap;
}
.gridjs-search-table .action-icon {
    margin: 0 .075rem;
}
.simpeg-rich-editor {
    border-radius: var(--ct-border-radius, .375rem);
}
.simpeg-rich-editor .ql-toolbar.ql-snow {
    border-color: var(--ct-border-color, #e9ebec);
    border-radius: var(--ct-border-radius, .375rem) var(--ct-border-radius, .375rem) 0 0;
    background: var(--ct-light, #f6f7fb);
}
.simpeg-rich-editor .ql-container.ql-snow {
    min-height: 150px;
    border-color: var(--ct-border-color, #e9ebec);
    border-radius: 0 0 var(--ct-border-radius, .375rem) var(--ct-border-radius, .375rem);
    color: var(--ct-body-color, #313a46);
    font-family: var(--simpeg-font);
}
.simpeg-rich-editor .ql-editor {
    min-height: 150px;
    font-size: .925rem;
    line-height: 1.55;
}
.simpeg-rich-editor .ql-editor.ql-blank::before {
    color: var(--ct-secondary-color, #6c757d);
    font-style: normal;
}
.password-toggle {
    text-decoration: none !important;
    z-index: 3;
}
.password-toggle:focus {
    box-shadow: none !important;
}
.searchable-select {
    position: relative;
    width: 100%;
}
.searchable-select-native {
    height: 1px !important;
    left: 0;
    opacity: 0;
    pointer-events: none;
    position: absolute !important;
    top: 0;
    width: 1px !important;
}
.searchable-select-toggle {
    align-items: center;
    background: var(--ct-input-bg, #fff);
    border: 1px solid var(--ct-border-color, #ced4da);
    border-radius: var(--ct-border-radius, .375rem);
    color: var(--ct-body-color, #313a46);
    display: flex;
    font-family: var(--simpeg-font) !important;
    font-size: 14px;
    gap: .5rem;
    justify-content: space-between;
    min-height: 38px;
    padding: .45rem .75rem;
    text-align: left;
    width: 100%;
}
.searchable-select-toggle:focus {
    border-color: var(--ct-primary, #465dff);
    box-shadow: 0 0 0 .15rem rgba(70, 93, 255, .12);
    outline: 0;
}
.searchable-select-value {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.searchable-select-icon {
    color: var(--ct-secondary-color, #6c757d);
    flex: 0 0 auto;
    font-size: 1rem;
}
.searchable-select-dropdown {
    background: var(--ct-card-bg, #fff);
    border: 1px solid var(--ct-border-color, #e9ebec);
    border-radius: var(--ct-border-radius, .375rem);
    box-shadow: 0 .75rem 1.75rem rgba(15, 23, 42, .14);
    left: 0;
    margin-top: .25rem;
    padding: .5rem;
    position: absolute;
    right: 0;
    top: 100%;
    z-index: 1085;
}
.searchable-select-search {
    background: var(--ct-input-bg, #fff);
    border: 1px solid var(--ct-border-color, #ced4da);
    border-radius: var(--ct-border-radius, .375rem);
    color: var(--ct-body-color, #313a46);
    font-family: var(--simpeg-font) !important;
    font-size: 14px;
    margin-bottom: .45rem;
    min-height: 36px;
    padding: .4rem .65rem;
    width: 100%;
}
.searchable-select-search:focus {
    border-color: var(--ct-primary, #465dff);
    box-shadow: 0 0 0 .15rem rgba(70, 93, 255, .12);
    outline: 0;
}
.searchable-select-list {
    max-height: 240px;
    overflow-y: auto;
}
.searchable-select-option,
.searchable-select-empty {
    border-radius: var(--ct-border-radius-sm, .25rem);
    display: block;
    font-family: var(--simpeg-font) !important;
    font-size: 14px;
    line-height: 1.45;
    padding: .5rem .65rem;
    width: 100%;
}
.searchable-select-option {
    background: transparent;
    border: 0;
    color: var(--ct-body-color, #313a46);
    cursor: pointer;
    text-align: left;
}
.searchable-select-option:hover,
.searchable-select-option:focus {
    background: rgba(70, 93, 255, .08);
    color: var(--ct-primary, #465dff);
    outline: 0;
}
.searchable-select-option.is-selected {
    background: var(--ct-primary, #465dff);
    color: #fff;
}
.searchable-select-option:disabled {
    color: var(--ct-secondary-color, #6c757d);
    cursor: not-allowed;
    opacity: .6;
}
.searchable-select-empty {
    color: var(--ct-secondary-color, #6c757d);
}
.modal .searchable-select-dropdown {
    z-index: 1095;
}
@media (max-width: 575.98px) {
    .gridjs-search-table .gridjs-head,
    .gridjs-search-table .gridjs-footer {
        align-items: stretch;
    }
    .gridjs-search-table .gridjs-pagination {
        grid-template-columns: 1fr;
    }
    .gridjs-search-table .gridjs-search {
        width: 100%;
    }
    .gridjs-search-table .gridjs-pagination {
        overflow-x: auto;
        padding-bottom: .15rem;
    }
    .gridjs-search-table .gridjs-pagination .gridjs-pages {
        justify-self: start;
    }
}

/* Standar tipografi sistem kepegawaian. */
:root {
    --simpeg-font: var(--osen-body-font-family, var(--osen-font-sans-serif, "Inter", sans-serif));
}
html,
body,
button,
input,
select,
textarea,
.form-control,
.form-select,
.dropdown-menu,
.modal,
.card,
.table,
.gridjs-container,
.ql-editor {
    font-family: var(--simpeg-font) !important;
}
body,
p,
.page-content,
.card-body,
.panel,
.text-muted,
.breadcrumb,
.dropdown-item {
    font-family: var(--simpeg-font) !important;
    font-size: 14px;
    font-weight: 400;
    line-height: 1.6;
}
h1,
.h1 {
    font-family: var(--simpeg-font) !important;
    font-size: 20px;
    font-weight: 600;
    line-height: 1.35;
}
h2,
.h2,
.panel h2 {
    font-family: var(--simpeg-font) !important;
    font-size: 16px;
    font-weight: 600;
    line-height: 1.4;
}
h3,
.h3,
.header-title,
.card-title,
.page-title-head h4 {
    font-family: var(--simpeg-font) !important;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.45;
}
.form-label,
label,
.table thead th,
.gridjs-th,
.app-grid-th {
    font-family: var(--simpeg-font) !important;
    font-size: 13px !important;
    font-weight: 500 !important;
    line-height: 1.45;
}
.btn,
.badge,
.gridjs-pagination button,
.swal2-actions .btn {
    font-family: var(--simpeg-font) !important;
    font-size: 13px !important;
    font-weight: 500 !important;
    line-height: 1.45;
}
.table,
.gridjs-table,
.gridjs-td,
.app-grid-td {
    font-family: var(--simpeg-font) !important;
    font-size: 14px !important;
    font-weight: 400;
    line-height: 1.6;
}

/* Modal besar harus tetap bisa dijangkau pada layar pendek. */
.modal .modal-dialog {
    max-height: calc(100vh - 1.75rem * 2) !important;
}
.modal .modal-content {
    display: flex !important;
    flex-direction: column !important;
    max-height: calc(100vh - 1.75rem * 2) !important;
    overflow: hidden !important;
}
.modal .modal-header,
.modal .modal-footer {
    flex-shrink: 0 !important;
}
.modal .modal-body {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    max-height: calc(100vh - 12rem) !important;
    overflow-y: auto !important;
    overscroll-behavior: contain !important;
    -webkit-overflow-scrolling: touch;
}
.modal-dialog-centered {
    min-height: calc(100vh - 1.75rem * 2) !important;
}
@media (max-width: 575.98px) {
    .modal .modal-dialog,
    .modal .modal-content {
        max-height: calc(100vh - 1rem) !important;
    }
    .modal .modal-body {
        max-height: calc(100vh - 9rem) !important;
    }
    .modal-dialog-centered {
        min-height: calc(100vh - 1rem) !important;
    }
}

/* E-SDM nested sidebar menu follows the template submenu rhythm. */
.sidenav-menu .esdm-sub-menu {
    list-style: none;
    margin: 0;
    padding-left: 0;
}

.sidenav-menu .esdm-sub-menu > li > a {
    align-items: center;
    color: rgba(255, 255, 255, .58);
    display: flex;
    font-size: 14px;
    min-height: 33px;
    padding: 8px 20px 8px 51px;
    position: relative;
    transition: color .15s ease, background-color .15s ease;
}

.sidenav-menu .esdm-sub-menu > li > a::before {
    background: currentColor;
    border-radius: 50%;
    content: "";
    height: 4px;
    left: 29px;
    opacity: .55;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 4px;
}

.sidenav-menu .esdm-sub-menu > li > a:hover,
.sidenav-menu .esdm-sub-menu > li > a.active {
    color: #fff;
}

.sidenav-menu .esdm-sub-menu > .side-nav-title-sm {
    color: rgba(255, 255, 255, .38);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0;
    line-height: 1.2;
    padding: 10px 20px 4px 51px;
    text-transform: uppercase;
}
