:root{--sp-primary: #00C896; --sp-primary-dark: #00A878; --sp-primary-strong: #007A5E; --sp-primary-strong-dark: #00614B; --sp-primary-soft: #E6FBF4; --sp-primary-light: #F0FBF7; --sp-success: #198754; --sp-warning: #F59E0B; --sp-danger: #EF4444; --sp-info: #17A2B8; --sp-cyan: #36b9cc; --sp-text: #212529; --sp-text-muted: #495057; --sp-border: #DEE2E6; --sp-bg: #FFFFFF; --sp-bg-light: #F8F9FA; --sp-light: #F8F9FA; --sp-green-50: #F0FBF7; --sp-radius: 4px; --sp-font-sans: "Noto Sans SC", "Source Sans 3", -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif; --sp-font-mono: "Roboto Mono", "Source Sans 3", monospace; --sp-space-1: 4px; --sp-space-2: 8px; --sp-space-3: 12px; --sp-space-4: 16px; --sp-space-5: 24px; --sp-fs-h1: 28px; --sp-fs-h2: 22px; --sp-fs-h3: 18px; --sp-fs-body: 14px; --sp-fs-caption: 12px;}
*{box-sizing: border-box;}
body{font-family: var(--sp-font-sans); color: var(--sp-text); background: var(--sp-bg-light); font-size: 14px;}
.card, .btn, .form-control, .custom-select, .modal-content, .input-group-text, .page-link, .nav-pills .nav-link, .badge, .dropdown-menu{border-radius: var(--sp-radius);}
.btn-primary{background-color: var(--sp-primary-strong); border-color: var(--sp-primary-strong); color: #fff;}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active{background-color: var(--sp-primary-strong-dark); border-color: var(--sp-primary-strong-dark); color: #fff;}
.btn-outline-primary{color: var(--sp-primary-strong); border-color: var(--sp-primary);}
.btn-outline-primary:hover, .btn-outline-primary:active{background-color: var(--sp-primary-strong); border-color: var(--sp-primary-strong); color: #fff;}
.btn-link{color: var(--sp-primary-dark);}
a{color: var(--sp-primary-dark);}
a:hover{color: var(--sp-primary);}
.text-primary{color: var(--sp-primary-dark) !important;}
.badge-primary{background-color: var(--sp-primary-strong);}
.pagination{gap: 4px;}
.pagination .page-item + .page-item .page-link{margin-left: 0;}
.pagination .page-link{border-radius: 8px; border-color: var(--sp-border); color: var(--sp-text-muted); min-width: 34px; text-align: center; font-weight: 500; background: #fff; transition: color .15s ease, background .15s ease, border-color .15s ease, box-shadow .15s ease;}
.pagination.pagination-sm .page-link{min-width: 32px; padding: 4px 8px; font-size: .82rem;}
.pagination .page-item:first-child .page-link, .pagination .page-item:last-child .page-link{border-radius: 8px;}
.pagination .page-link:hover{color: var(--sp-primary-dark); background: var(--sp-primary-soft); border-color: var(--sp-primary); z-index: 2;}
.page-item.active .page-link, .pagination .page-item.active .page-link, .pagination .page-item.active .page-link:hover{background: var(--sp-primary-strong); border-color: var(--sp-primary-strong); color: #fff; font-weight: 600; box-shadow: 0 2px 6px rgba(0, 122, 94, .30);}
.pagination .page-item.disabled .page-link{color: #cbd5e1; background: #fff; border-color: var(--sp-border);}
.nav-pills .nav-link.active{background-color: var(--sp-primary-strong); color: #fff !important;}
.form-control:focus, .custom-select:focus{border-color: var(--sp-primary); box-shadow: 0 0 0 .2rem rgba(0, 200, 150, .25);}
.table thead th, .table thead td{background: var(--sp-bg-light); color: var(--sp-text-muted); font-weight: 600; border-bottom: 1px solid var(--sp-border);}
.table thead th{white-space: nowrap;}

/* 2026-10-27 人资 5 页（.user-hr-page）表头收口：
   (1) 这些页把表头写成 <thead><tr><td>（非 th），命中不到上一条的底色/字重 ⇒ 表头无背景、
       无 nowrap，两字列头（机构/部门/性别）竖排成两行。上一条已把 td 并入视觉规则修好。
   (2) nowrap 单独限定在 .user-hr-page：全站另有 22 个模板、50 个表格也用 td 表头，
       全站生效会让它们集体变宽。这里只对人资 5 页开，其余页只吃视觉规则、宽度不变。
   (3) 表头 nowrap 后 min-content 变大，18~19 列的宽表在 1440 屏会把整页顶出横向滚动条
       （实测溢出 40~160px）。改为让表格在自己的内容区内横滚，顶栏/侧栏/页签都不动。
   ★ 这 5 页内没有 dropdown/tooltip/popover（已核），overflow 不会裁剪浮层。 */
.user-hr-page .table thead td{white-space: nowrap;}
.user-hr-page .tab-content{overflow-x: auto;}
.table td, .table th{vertical-align: middle;}
.table-hover tbody tr:hover{background: var(--sp-primary-soft);}
.mono{font-family: var(--sp-font-mono);}
.app-topbar{height: 58px; background: #fff; border-bottom: 1px solid var(--sp-border); box-shadow: 0 2px 12px rgba(15, 23, 42, .05); display: flex; align-items: center; padding: 0 22px; position: sticky; top: 0; z-index: 1030;}
.topbar-left{display: flex; align-items: center; gap: 10px; flex: 0 0 auto;}
.app-brand{display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 17px; color: var(--sp-text); flex: 0 0 auto;}
.app-brand .brand-name{color: var(--sp-primary-dark); letter-spacing: .5px;}
.app-brand .logo-mark{width: 32px; height: 32px; border-radius: 9px; background: linear-gradient(135deg, #00C896, #00A878); color: #fff; font-weight: 800; font-size: 17px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 10px rgba(0, 200, 150, .35);}
.sidebar-toggle{border: none; background: transparent; color: var(--sp-text-muted); font-size: 20px; cursor: pointer; padding: 4px 8px; border-radius: 8px; flex: 0 0 auto; transition: background .15s, color .15s;}
.sidebar-toggle:hover{background: var(--sp-primary-soft); color: var(--sp-primary-dark);}
.topbar-modules{flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px;}
.topbar-module{position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 64px; padding: 6px 14px; border-radius: 10px; text-decoration: none; color: var(--sp-text-muted); transition: background .15s, color .15s;}
.topbar-module i{font-size: 19px; margin-bottom: 3px;}
.topbar-module span{font-size: 11px; white-space: nowrap;}
.topbar-module:hover{background: var(--sp-primary-soft); color: var(--sp-primary-dark); text-decoration: none;}
.topbar-module.active{background: var(--sp-primary-soft); box-shadow: inset 0 -3px 0 var(--sp-primary); color: var(--sp-primary-dark);}
.topbar-module.active i, .topbar-module.active span{color: var(--sp-primary-dark); font-weight: 600;}
.app-topbar .topbar-search{max-width: 360px; flex: 1;}
.app-topbar .topbar-right{margin-left: auto; display: flex; align-items: center; gap: 14px; flex: 0 0 auto;}
.topbar-user{display: flex; align-items: center; gap: 9px; cursor: pointer; padding: 4px 12px 4px 4px; border-radius: 999px; transition: background .15s;}
.topbar-user:hover{background: var(--sp-primary-soft);}
.topbar-user .avatar{width: 34px; height: 34px; border-radius: 50%; background: linear-gradient(135deg, #00C896, #00A878); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 14px; box-shadow: 0 3px 8px rgba(0, 200, 150, .30);}
.topbar-user .user-meta{display: flex; flex-direction: column; line-height: 1.3;}
.topbar-user .user-name{font-size: 13px; font-weight: 600; color: var(--sp-text);}
.topbar-user .user-meta-row{display: flex; align-items: center; gap: 6px;}
.topbar-user .user-role{font-size: 11px; color: var(--sp-text-muted);}
.topbar-user .user-identity{display: inline-flex; align-items: center; justify-content: center; height: 18px; padding: 0 7px; border-radius: 4px; background: linear-gradient(135deg, #e8f8f3, #d0f5e8); color: #00a878; font-size: 10px; font-weight: 600; letter-spacing: .3px; white-space: nowrap; line-height: 1;}
.topbar-sep{width: 1px; height: 26px; background: var(--sp-border);}
.topbar-logout{display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--sp-text-muted); font-size: 11px; text-decoration: none; padding: 4px 10px; border-radius: 8px; transition: background .15s, color .15s;}
.topbar-logout i{font-size: 19px;}
.topbar-logout:hover{background: #fdecec; color: #e5484d; text-decoration: none;}
.app-shell{display: flex; min-height: calc(100vh - 58px);}
.app-sidebar{width: 200px; flex: 0 0 200px; background: #fff; border-right: 1px solid var(--sp-border); padding: 12px 0; overflow-y: auto; transition: width .2s ease, flex-basis .2s ease; position: sticky; top: 58px; align-self: flex-start; max-height: calc(100vh - 58px);}
.app-shell.sb-collapsed .app-sidebar{width: 0; flex-basis: 0; padding: 0; border-right: 0; overflow: hidden;}
@media (max-width: 768px){.app-sidebar{position: fixed; top: 0; left: 0; bottom: 0; width: 256px; flex-basis: 256px; height: 100%; z-index: 1050; transform: translateX(-100%); transition: transform .25s ease; box-shadow: 2px 0 16px rgba(0,0,0,.18);}
.app-shell.sb-collapsed .app-sidebar{width: 256px; flex-basis: 256px;}
.app-sidebar.visible{transform: translateX(0);}
body.sidebar-open::after{content: ''; position: fixed; inset: 0; background: rgba(15,23,42,.4); z-index: 1040; pointer-events: none;}
}
.side-group{margin-bottom: 2px;}
.side-group > .group-head{display: flex; align-items: center; gap: 8px; padding: 9px 18px; color: var(--sp-text); font-weight: 600; font-size: 13px; cursor: pointer; user-select: none; white-space: nowrap;}
.side-group > .group-head .bi{color: var(--sp-primary); font-size: 15px;}
.side-group > .group-head .chev{margin-left: auto; transition: transform .15s; color: var(--sp-text-muted); font-size: 12px;}
.side-group.collapsed > .group-head .chev{transform: rotate(-90deg);}
.side-group .group-items{display: flex; flex-direction: column;}
.side-group.collapsed .group-items{display: none;}
.side-item{display: flex; align-items: center; gap: 8px; padding: 7px 18px 7px 40px; color: var(--sp-text-muted); font-size: 13px; text-decoration: none; border-left: 3px solid transparent; white-space: nowrap;}
.side-item:hover{background: var(--sp-bg-light); color: var(--sp-text);}
.app-sidebar .menu-item a{white-space: nowrap;}
.side-item.active{background: var(--sp-primary-soft); color: var(--sp-primary-dark); font-weight: 600; border-left-color: var(--sp-primary);}
.sidebar-greeting{display: flex; align-items: center; gap: 8px; padding: 2px 18px 10px; color: var(--sp-text-muted); font-size: 13px;}
.sidebar-greeting .bi{color: var(--sp-primary); font-size: 16px;}
.sidebar-module-label{display:block;margin:0 12px 10px;padding:8px 10px;background:var(--sp-primary-soft);color:var(--sp-primary-strong);font-weight:700;font-size:13px;text-align:center;border-radius:8px;text-decoration:none;transition:background .2s,color .2s}.sidebar-module-label:hover{background:var(--sp-primary-strong);color:#fff;text-decoration:none}
.sidebar-menu{padding: 0;}
.menu-pane{margin: 0; padding: 0;}
.menu-pane[hidden]{display: none;}
.menu-empty{padding: 20px 16px; text-align: center; color: var(--sp-text-muted); font-size: 13px;}
.app-content{flex: 1; padding: 24px; min-width: 0;}
.app-content .container, .app-content .container-fluid{width: 100% !important; max-width: none !important; padding-left: 0 !important; padding-right: 0 !important; margin-left: 0 !important; margin-right: 0 !important;}
.app-content .row{margin-left: 0 !important; margin-right: 0 !important;}
.app-content .row > [class*="col-"]:first-child{padding-left: 0 !important;}
.app-content .row > [class*="col-"]:last-child{padding-right: 0 !important;}
.app-content .row > .col:first-child{padding-left: 0 !important;}
.app-content .row > .col:last-child{padding-right: 0 !important;}
.app-content > *:not(.rp-head):not(.mb-2):not(.card):not(.modal):not(.modal-dialog):not(.modal-content){max-width: none !important; margin-left: 0 !important; margin-right: 0 !important;}
.app-content > .tq-wrap, .app-content > .assess-edit-wrap, .app-content > .assess-cost-page, .app-content > .assess-page, .app-content > .plan-page, .app-content > .plan-edit-page, .app-content > .page-container, .app-content > .page-container-wide, .app-content > .page-container-normal, .app-content > .cost-page, .app-content > .retrieval-page, .app-content > .retrieval-edit-page, .app-content > .auditor-select-page, .app-content > .edit-super-page, .app-content > .contract-item-page, .app-content > .contract-item-form-page, .app-content > .edit-item-page, .app-content > .ver-page, .app-content > .maintenance-page, .app-content > .stat-home-wrap, .app-content > .show-page, .app-content > .edit-scope-page, .app-content > .approval-page, .app-content > .add-review-page, .app-content > .contract-page, .app-content > .coo-list-page, .app-content > .project-page, .app-content > .enterprise-wrap, .app-content > .log-wrap, .app-content > .report-container, .app-content > .alist-wrap, .app-content > .change-wrap, .app-content > .keep-decide-wrap, .app-content > .ep-doc-page, .app-content > .coo-page, .app-content > .ep-list-wrap, .app-content > .doc-list-wrap, .app-content > .site-list-wrap, .app-content > .maintenance-detail-page, .app-content > .ac-page, .app-content > .av-page, .app-content > .setting-page, .app-content > .rg-page{padding: 0 !important; margin: 0 !important;}
.app-content > .code-page, .app-content > .exp-page, .app-content > .contract-review-page, .app-content > .shfach-wrap, .app-content > .credit-wrap, .app-content > .export-hub, .app-content > .cron-container, .app-content > .up-data-panel, .app-content > .sys-conf-wrapper{max-width: none !important; padding: 0 !important; margin: 0 !important;}
.app-content > .rp-head{padding-left: 0 !important; padding-right: 0 !important;}
/* 二级导航条（base.html 的 {% block nav_2 %}，6 个 user 页面的 nav_user.html tab）：
   位置对齐 PHP 原系统 frameset 的 rightmain（tab 属于内容区顶部，不横跨侧边栏）。
   负 margin 抵消 .app-content 的 24px padding，白条从侧边栏右缘顶到内容区右缘。
   ★ 必须 !important：上一条 `.app-content > *:not(...)` 对子元素左右 margin 用了
     margin-left/right:0 !important —— !important 优先于任何特异性，不加就压不过。
   ★ 用 #content-area 提高特异性：同为 !important 时 (1,1,0) 才胜 (0,7,0)。 */
#content-area > .nav2-slot{margin: -24px -24px 0 !important; padding: 0 !important; max-width: none !important;}
#content-area > .nav2-slot:empty{display: none !important;}
.app-content .container, .app-content .container-fluid{margin-top: 0 !important; margin-bottom: 0 !important;}
.app-main{flex: 1; min-width: 0;}
.page-head{display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px;}
.page-head h1{font-size: 20px; font-weight: 700; margin: 0;}
.breadcrumb{background: transparent; padding: 0; margin: 0 0 12px; font-size: 13px;}
.breadcrumb-item a{color: var(--sp-text-muted); text-decoration: none;}
.filter-card{margin-bottom: 16px;}
.filter-card .form-group{margin-bottom: 0;}
.filter-card label{font-size: 12px; color: var(--sp-text-muted); margin-bottom: 4px;}
.badge-status{font-weight: 500; padding: .35em .6em; font-size: 12px;}
.badge-valid{background: #E7F6EE; color: var(--sp-success);}
.badge-paused{background: #FEF3E2; color: #B45309;}
.badge-revoked{background: #FDE8E8; color: var(--sp-danger);}
.badge-expired{background: #FDE8E8; color: var(--sp-danger);}
.badge-pending{background: var(--sp-primary-soft); color: var(--sp-primary-dark);}
.badge-other{background: var(--sp-bg-light); color: var(--sp-text-muted);}
.list-toolbar{display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; gap: 12px; flex-wrap: wrap;}
.list-toolbar .left-actions{display: flex; gap: 8px;}
.list-toolbar .right-actions{display: flex; gap: 8px;}
.content-card{background: #fff; border: 1px solid var(--sp-border); border-radius: var(--sp-radius);}
.content-card .card-body{padding: 0;}
.row-actions a{margin-right: 10px; font-size: 13px; text-decoration: none;}
.section-title{font-size: 13px; font-weight: 600; color: var(--sp-text-muted); margin: 24px 0 12px;}
.search-grid{display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 14px 18px; align-items: end; margin-bottom: 18px;}
@media (min-width: 992px){.search-grid{grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));}
.lp-field-group.range-group{grid-column: span 2;}
.lp-field-group.range-group .range input{min-width: 140px; font-size: .85rem; padding-top: 6px; padding-bottom: 6px;}
}
.search-grid.sg-4{grid-template-columns: repeat(4, minmax(0, 1fr));}
@media (max-width: 992px){.search-grid.sg-4{grid-template-columns: repeat(2, minmax(0, 1fr));}
.search-grid.sg-4 .lp-field-group.range-group{grid-column: span 2;}
}
@media (max-width: 576px){.search-grid.sg-4{grid-template-columns: 1fr;}
.search-grid.sg-4 .lp-field-group.range-group{grid-column: span 1;}
}
.search-grid.sg-6{grid-template-columns: repeat(6, minmax(0, 1fr));}
.search-grid.sg-6 .lp-field-group.range-group{grid-column: span 2;}
@media (max-width: 992px){.search-grid.sg-6{grid-template-columns: repeat(3, minmax(0, 1fr));}
.search-grid.sg-6 .lp-field-group.range-group{grid-column: span 2;}
}
@media (max-width: 576px){.search-grid.sg-6{grid-template-columns: 1fr;}
.search-grid.sg-6 .lp-field-group.range-group{grid-column: span 1;}
}
.search-grid.sg-7{grid-template-columns: repeat(7, minmax(0, 1fr));}
.search-grid.sg-7 .lp-field-group.range-group{grid-column: span 2;}
@media (max-width: 992px){.search-grid.sg-7{grid-template-columns: repeat(4, minmax(0, 1fr));}
.search-grid.sg-7 .lp-field-group.range-group{grid-column: span 2;}
}
@media (max-width: 576px){.search-grid.sg-7{grid-template-columns: 1fr;}
.search-grid.sg-7 .lp-field-group.range-group{grid-column: span 1;}
}
.search-grid.sg-8{grid-template-columns: repeat(8, minmax(0, 1fr));}
.search-grid.sg-8 .lp-field-group.range-group{grid-column: span 2;}
.search-grid.sg-8 .lp-field-group.range-group .range input{min-width: 0;}
@media (max-width: 992px){.search-grid.sg-8{grid-template-columns: repeat(4, minmax(0, 1fr));}
.search-grid.sg-8 .lp-field-group.range-group{grid-column: span 2;}
}
@media (max-width: 576px){.search-grid.sg-8{grid-template-columns: 1fr;}
.search-grid.sg-8 .lp-field-group.range-group{grid-column: span 1;}
}
.search-grid.sg-12{grid-template-columns: repeat(12, minmax(0, 1fr));}
.search-grid.sg-12 .lp-field-group.range-group{grid-column: span 2;}
@media (max-width: 992px){.search-grid.sg-12{grid-template-columns: repeat(6, minmax(0, 1fr));}
.search-grid.sg-12 .lp-field-group.range-group{grid-column: span 2;}
}
@media (max-width: 576px){.search-grid.sg-12{grid-template-columns: 1fr;}
.search-grid.sg-12 .lp-field-group.range-group{grid-column: span 1;}
}
.search-form-row{display: flex; align-items: flex-end; gap: 14px; flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px;}
.search-grid.sg-row{display: flex; flex: 1 1 auto; flex-wrap: nowrap; gap: 0 14px; align-items: flex-end; min-width: 0; overflow-x: auto; padding-bottom: 2px;}
.search-grid.sg-row .lp-field-group{flex: 1 1 0; min-width: 120px;}
.search-grid.sg-row .lp-field-group.range-group{flex: 1.4 1 230px;}
.search-actions-inline{flex: 0 0 auto; display: flex; gap: 8px; align-items: flex-end;}
@media (max-width: 768px){.search-form-row{flex-wrap: wrap;}
.search-grid.sg-row{flex-wrap: wrap;}
.search-grid.sg-row .lp-field-group{flex: 1 1 140px;}
}
.btn-search{display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 18px; font-size: .82rem; font-weight: 600; background: linear-gradient(135deg, var(--sp-primary-strong), var(--sp-primary-strong-dark)); color: #fff; border: none; border-radius: 7px; cursor: pointer; white-space: nowrap; transition: all .15s; box-shadow: 0 2px 6px rgba(0,200,150,.22);}
.btn-search:hover{background: var(--sp-primary-strong-dark); box-shadow: 0 3px 10px rgba(0,200,150,.32);}
.btn-outline{display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 16px; font-size: .82rem; font-weight: 500; background: #fff; color: #475569; border: 1px solid #cbd5e1; border-radius: 7px; cursor: pointer; white-space: nowrap; text-decoration: none; transition: all .15s;}
.btn-outline:hover{background: #f1f5f9; border-color: #94a3b8; color: #334155;}
.action-strip{display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px; padding-top: 14px; margin-top: 4px; border-top: 1px dashed var(--sp-border);}
.action-strip .hint{font-size: .8rem; color: var(--sp-text-muted);}
.action-strip .actions{display: flex; align-items: center; gap: 10px; flex-wrap: wrap;}
.rp-head{display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; padding: 12px 22px; background: #fff; border-bottom: 1px solid var(--sp-border);}
.app-content > .rp-head{margin: 0; padding: 12px 22px;}
.rp-head .breadcrumb{margin: 0; flex: 0 0 auto; min-width: 0; font-size: .82rem;} /* 与独立 .breadcrumb(L860) 统一字号：解决 B体系 16 页( finance/express/audit_task_edit_super ) 与 A体系 263 页面包屑视觉不一致 */
.rp-head h4{flex: 1 1 auto; text-align: center; margin: 0; font-weight: 600; font-size: 1.18rem; white-space: nowrap;}
.rp-head h4 .bi{color: var(--sp-primary);}
.rp-head .sub{flex: 0 0 auto; max-width: 320px; text-align: right; color: var(--sp-text-muted); font-size: .82rem; line-height: 1.45; margin: 0;}
.rp-head .rp-head-actions{flex: 0 0 auto; display: flex; gap: 8px; align-items: center; margin-left: 12px;}
.rp-breadcrumb{display: flex; align-items: center; gap: 6px; font-size: .78rem; color: var(--sp-text-muted); flex: 0 0 auto; min-width: 0;}
.rp-breadcrumb span{color: var(--sp-text-muted);}
.rp-breadcrumb i, .rp-breadcrumb > span + span{color: var(--sp-text); font-weight: 500;}
.rp-breadcrumb a{color: var(--sp-primary); text-decoration: none;}
.rp-breadcrumb a:hover{text-decoration: underline;}
.rp-subtitle{flex: 0 0 auto; max-width: 320px; text-align: right; color: var(--sp-text-muted); font-size: .82rem; line-height: 1.45; margin: 0;}
.rp-body{padding: 18px 22px 30px;}
.form-grid{display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px 20px;}
.form-grid .fg-item{min-width: 0;}
.form-grid .fg-item.wide{grid-column: span 2;}
.form-grid .fg-item.full{grid-column: 1 / -1;}
.form-grid label.col-form-label{display: block; font-size: .8rem; color: var(--sp-text-muted); font-weight: 500; margin-bottom: 5px;}
.form-grid .fg-checks{display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .9rem; min-height: 31px;}
.form-grid .fg-section{grid-column: 1 / -1; font-size: .76rem; font-weight: 600; letter-spacing: .05em; color: var(--sp-primary); padding: 12px 0 0; margin-top: 2px; border-top: 1px dashed var(--sp-border);}
.form-grid .fg-section:first-child{border-top: none; padding-top: 0; margin-top: 0;}
@media (max-width: 1200px){.form-grid{grid-template-columns: repeat(3, minmax(0, 1fr));}
.form-grid .fg-item.full{grid-column: 1 / -1;}
}
@media (max-width: 992px){.form-grid{grid-template-columns: repeat(2, minmax(0, 1fr));}
.form-grid .fg-item.wide, .form-grid .fg-item.full{grid-column: 1 / -1;}
}
@media (max-width: 576px){.form-grid{grid-template-columns: 1fr;}
.form-grid .fg-item.wide{grid-column: 1 / -1;}
}
.sub-type-bar{display: flex; gap: 6px; padding: 12px 22px 0; background: #fff; border-bottom: 1px solid var(--sp-border);}
.sub-type-bar .st-btn{border: 1px solid var(--sp-border); border-bottom: none; background: #F8F9FA; color: #495057; padding: 8px 18px; font-size: .85rem; cursor: pointer; border-radius: 8px 8px 0 0; transition: all .15s;}
.sub-type-bar .st-btn:hover{background: #F0FBF7; color: var(--sp-primary-dark);}
.sub-type-bar .st-btn.active{background: #fff; color: var(--sp-primary-dark); font-weight: 600; border-color: var(--sp-border); box-shadow: 0 -2px 0 var(--sp-primary) inset;}
.status-nav{display: flex; flex-wrap: wrap; align-items: center; border-bottom: 1px solid var(--sp-border); margin-bottom: 14px;}
.status-tab{padding: 9px 14px; font-size: .85rem; color: #495057; cursor: pointer; border: 1px solid transparent; border-bottom: none; user-select: none; display: inline-flex; align-items: center; gap: 6px;}
.status-tab:hover{background: #F8F9FA;}
.status-tab.active{color: var(--sp-primary-dark); font-weight: 600; background: #fff; border-color: var(--sp-border); border-bottom: 2px solid var(--sp-primary);}
.status-nav .sep{color: #ccc; padding: 0 6px;}
.badge-num{display: inline-block; min-width: 18px; padding: 0 6px; font-size: .72rem; line-height: 18px; text-align: center; background: var(--sp-primary-light); color: var(--sp-primary-dark); border-radius: 9px;}
.sub-parent-badge{display: inline-flex; align-items: center; padding: 2px 10px; font-size: .78rem; font-weight: 600; color: var(--sp-primary-dark); background: var(--sp-primary-light); border: 1px solid var(--sp-primary); border-radius: 12px;}
.pf-pane{display: none;}
.pf-pane.active{display: block;}
.es-tabs{display:flex; list-style:none; padding-left:0; border-bottom:2px solid var(--sp-border); background:#f4f8f6; margin-bottom:0; flex-wrap:wrap;}
.es-tabs .nav-item{margin:0;}
.es-tabs .nav-link{padding:9px 18px; font-size:13px; font-weight:600; color:var(--sp-text); border:none; border-right:1px solid #e1e8e4; border-radius:0; cursor:pointer; background:transparent;}
.es-tabs .nav-link:hover:not(.active){background:#e9f3ee;}
.es-tabs .nav-link.active{background:var(--sp-primary-strong); color:#fff;}
.es-tabs-bar{display:flex; align-items:stretch; justify-content:space-between; flex-wrap:wrap; gap:8px; background:#f4f8f6; border-bottom:2px solid var(--sp-border);}
.es-tabs-bar .es-tabs{flex:1 1 auto; background:transparent; border-bottom:none; margin-bottom:0;}
.es-tabs-extra{display:flex; align-items:center; gap:10px; padding:0 14px; flex-wrap:wrap;}
.ent-chip{display:inline-flex; align-items:center; gap:7px; padding:5px 12px; background:#fff; border:1px solid #d6e4de; border-radius:7px; text-decoration:none; color:#334155; font-size:12px; transition:all .15s; white-space:nowrap;}
.ent-chip:hover{border-color:var(--sp-primary); box-shadow:0 0 0 3px rgba(0,200,150,.12); color:#0e9b73;}
.ent-chip i.bi-building{color:var(--sp-primary);}
.ent-chip .ec-name{font-weight:600;}
.ent-chip .ec-code{color:var(--sp-primary-dark); font-weight:600; padding-left:7px; margin-left:2px; border-left:1px solid #e1e8e4;}
.tab-mode-tag{display:inline-flex; align-items:center; gap:5px; padding:5px 12px; background:var(--sp-primary-light); color:var(--sp-primary-dark); border-radius:20px; font-size:12px; font-weight:600; white-space:nowrap;}
.es-pane-wrap{border:1px solid var(--sp-border); border-top:none; padding:14px; background:#fff; min-height:120px;}
.einfo-table{width:100%; border-collapse:collapse; border:1px solid #cdd5d0;}
.einfo-table td{padding:6px 10px; border:1px solid #cdd5d0; vertical-align:middle;}
.einfo-table .tdright{width:120px; text-align:right; background:#f5f8f6; font-weight:500; color:#495057; white-space:nowrap;}
.einfo-table .tdleft{text-align:left; color:#333;}
.einfo-table .section-title{background:#e9f6f0; font-weight:700; color:#1f7a5c; font-size:14px;}
.grid-table{width:100%; border-collapse:collapse; border:1px solid var(--sp-border); margin-bottom:14px;}
.grid-table th, .grid-table td{padding:7px 10px; border:1px solid var(--sp-border); vertical-align:middle;}
.grid-table th{background:#f4f8f6; font-weight:600; color:var(--sp-text);}
.grid-table .section-title{background:#e9f6f0; font-weight:700; color:#1f7a5c; font-size:14px;}
.grid-table .tdright{width:130px; text-align:right; background:#f5f8f6; font-weight:500; color:#495057; white-space:nowrap;}
.grid-table .tdleft{text-align:left; color:#333;}
.photo-preview{width: 95px; height: 128px; border: 2px solid var(--sp-border); border-radius: 4px; overflow: hidden; background: var(--sp-light); display: flex; align-items: center; justify-content: center; color: #bbb; font-size: 13px;}
.photo-preview img{width: 100%; height: 100%; object-fit: cover;}
.req-star{color: #dc3545; margin-left: 2px;}
.review-card{background:#fff; border:1px solid var(--sp-border); border-radius:10px; box-shadow:0 1px 3px rgba(0,0,0,.05); margin-bottom:18px; overflow:hidden;}
.review-card-head{padding:10px 16px; background:#f8fafc; border-bottom:1px solid var(--sp-border); font-size:14px; font-weight:600; color:#334155; display:flex; align-items:center; gap:8px;}
.review-card-head .card-icon{font-size:16px;}
.review-card-head .card-tag{margin-left: auto; font-size: .72rem; font-weight: 500; color: var(--sp-primary-dark); background: var(--sp-primary-soft); padding: 3px 10px; border-radius: 20px; white-space: nowrap;}
.review-card-body{padding:16px;}
.review-tabs{margin-bottom:0;}
.card-spacer{height:18px;}
.cf-page{font-size:13px; max-width:980px; margin:0 auto;}
.cf-page input[type="text"], .cf-page input[type="date"], .cf-page select, .cf-page textarea{border:1px solid #cbd5e1; padding:7px 10px; font-size:13px; border-radius:4px; background:#fff; box-sizing:border-box; width:100%;}
.cf-page input[readonly]{background:#f3f4f6; color:#6b7280;}
.cf-page textarea{resize:vertical; min-height:48px;}
.form-table-main{width:100%; border-collapse:collapse;}
.form-table-main > tbody > tr > td{padding:9px 8px; vertical-align:middle;}
.form-table-main > tbody > tr > td:first-child, .form-table-main > tbody > tr > td:nth-child(3){width:92px; text-align:right; color:#475569; font-weight:500; font-size:13px; white-space:nowrap;}
.form-table-main > tbody > tr > td:nth-child(3){padding-left:20px;}
.date-input-wrap{position:relative; display:flex; align-items:center; gap:4px;}
.date-input-wrap input[type="date"]{padding-right:32px; cursor:pointer; flex:1;}
.date-input-wrap .date-icon{position:absolute; right:10px; top:50%; transform:translateY(-50%); color:var(--sp-primary); font-size:16px; pointer-events:none;}
.ctxm-table{border-collapse:collapse; width:100%;}
.ctxm-table > tbody > tr > td{padding:16px; border:1px solid var(--sp-border); background:#fff; border-radius:4px; position:relative;}
.txxm-table{border-collapse:collapse; width:100%;}
.txxm-table td{padding:8px; border:1px solid #f1f5f9; font-size:13px;}
.txxm-table td.td-label{width:80px; text-align:right; font-weight:600; color:#475569; background:#f8fafc; white-space:nowrap;}
.txxm-table td.last-copy-cell{width:48px; text-align:center; background:transparent;}
.txxm-table .last-copy{color:var(--sp-primary); text-decoration:none; font-size:12px; white-space:nowrap;}
.txxm-table .old-jg table{width:100%; border-collapse:collapse;}
.txxm-table .old-jg td{padding:6px 4px; font-size:12px; color:#64748b;}
.item-header{display:flex; justify-content:space-between; align-items:center; padding:0 0 10px; margin-bottom:10px; border-bottom:1px dashed var(--sp-border); font-size:13px; font-weight:600; color:#64748b;}
.del-item{cursor:pointer; color:#ef4444; font-size:13px; text-decoration:none;}
.del-item:hover{color:#dc2626;}
.cRed{color:#ef4444; font-weight:bold;}
.form-submit-area{margin-top:16px; padding:16px; background:#f8fafc; border-top:1px solid var(--sp-border); border-radius:0 0 6px 6px; text-align:center;}
.form-submit-area label{font-size:14px; color:#475569; cursor:pointer; margin-right:16px;}
.form-submit-area input[type="checkbox"]{margin-right:4px; transform:scale(1.15); cursor:pointer;}
.btn-submit{padding:8px 24px; background:var(--sp-primary-strong); color:#fff; border:none; border-radius:4px; cursor:pointer; font-size:13px; font-weight:600;}
.btn-submit:hover{background:var(--sp-primary-strong-dark);}
.btn-button{background:#e2e8f0; color:#334155; border:1px solid #cbd5e1; padding:6px 14px; border-radius:4px; cursor:pointer; font-size:13px;}
.btn-button:hover{background:#cbd5e1;}
.btn-edit{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;background:var(--sp-light);color:var(--sp-primary-dark);text-decoration:none;font-size:13px;transition:all .2s;}
.btn-edit:hover{background:var(--sp-primary-dark);color:#fff;transform:scale(1.15);}
.btn-del{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;background:#FDECEC;color:#E03131;text-decoration:none;font-size:13px;transition:all .2s;}
.btn-del:hover{background:#E03131;color:#fff;}
.row-warning td{color:#dc3545 !important;}
.row-warning .ep-name{font-weight:600;}
.note-icon{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:#fef3cd;color:#997404;cursor:help;font-size:12px;}
.warning-note{color:#dc3545;font-size:11.5px;padding:10px 12px !important;text-align:right !important;background:#fff5f5 !important;}
.warning-note .note-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#dc3545;margin-right:6px;vertical-align:middle;}
.radio-group, .checkbox-group{display: flex; flex-wrap: wrap; gap: 8px; padding: 4px 0;}
.checkbox-group label{display: inline-flex; align-items: center; gap: 6px; padding: 6px 16px; font-size: 13px; line-height: 1.2; cursor: pointer; border: 1px solid var(--sp-border); border-radius: 20px; background: #fff; color: #495057; transition: all .15s ease; user-select: none;}.radio-group label{display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; font-size: 13px; line-height: 1.5; cursor: pointer; color: #495057; user-select: none;}
.checkbox-group label:hover{border-color: var(--sp-primary); color: var(--sp-primary-dark); background: var(--sp-light);}.radio-group label:hover{color: var(--sp-primary-dark);}
.checkbox-group label:has(input:checked){background: var(--sp-primary-strong); border-color: var(--sp-primary); color: #fff; font-weight: 600; box-shadow: 0 2px 6px rgba(0,200,150,0.28);}.radio-group label:has(input:checked){color: var(--sp-primary-dark); font-weight: 500;}
.radio-group input, .checkbox-group input{width: 15px; height: 15px; accent-color: var(--sp-primary); margin: 0; cursor: pointer;}
.inner-tabs{display: flex; gap: 6px; border-bottom: 1px solid var(--sp-border); margin-bottom: 16px;}
.it-btn{border: 1px solid var(--sp-border); border-bottom: none; background: #F8F9FA; color: #495057; padding: 9px 18px; font-size: .86rem; cursor: pointer; border-radius: 9px 9px 0 0; transition: all .15s;}
.it-btn:hover{background: #F0FBF7; color: var(--sp-primary-dark);}
.it-btn.active{background: #fff; color: var(--sp-primary-dark); font-weight: 600; border-color: var(--sp-border); box-shadow: 0 -2px 0 var(--sp-primary) inset;}
.inner-panel{padding: 4px 0;}
.param-bar{background: #fff; border: 1px solid var(--sp-border); border-radius: 12px; padding: 16px 20px; display: flex; flex-wrap: wrap; align-items: flex-end; gap: 20px; box-shadow: 0 1px 3px rgba(0,0,0,.04);}
.param-fields{display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-end;}
.pf{display: flex; flex-direction: column; gap: 5px;}
.pf label{font-size: .76rem; color: var(--sp-text-muted); font-weight: 500;}
.pf .form-control{width: 190px;}
.param-actions{margin-left: auto; display: flex; gap: 10px; align-items: flex-end;}
.kpi-row{display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px; margin: 18px 0;}
.kpi-card{background: #fff; border: 1px solid var(--sp-border); border-radius: 12px; padding: 16px 18px; border-left: 4px solid var(--sp-primary);}
.kpi-card.mute{border-left-color: #9aa3ad;}
.kpi-card.warn{border-left-color: var(--sp-warning);}
.kpi-card.info{border-left-color: var(--sp-info);}
.kpi-card.danger{border-left-color: var(--sp-danger);}
.kpi-label{font-size: .78rem; color: var(--sp-text-muted); margin-bottom: 6px;}
.kpi-val{font-size: 1.7rem; font-weight: 700; color: var(--sp-primary-dark); font-family: 'Roboto Mono', monospace; line-height: 1.1;}
.kpi-foot{font-size: .76rem; margin-top: 6px;}
.cg-detail{white-space: normal; overflow-wrap: break-word; min-width: 280px; line-height: 1.5;}
.change-foot-note{color: #dc3545; font-size: .8rem; padding: 10px 16px 2px;}
.td-left{text-align: left !important;}
.rp-count{display: inline-flex; align-items: center; gap: 6px; font-size: .82rem; font-weight: 500; color: var(--sp-primary-dark); background: var(--sp-primary-soft); border: 1px solid #bdebd8; padding: 5px 13px; border-radius: 20px; white-space: nowrap;}
.rp-count .bi{color: var(--sp-primary); font-size: .95rem;}
.rp-count b{font-weight: 700; font-size: .95rem;}
.plist-tabs{display: flex; align-items: center; gap: 2px; background: #fff; border: 1px solid var(--sp-border); border-bottom: none; border-radius: 12px 12px 0 0; padding: 7px 8px 0; margin: 0;}
.plist-tabs .tab{position: relative; padding: 9px 18px; margin-bottom: -1px; font-size: .9rem; font-weight: 600; color: var(--sp-text-muted); text-decoration: none; white-space: nowrap; border: 1px solid transparent; border-bottom: none; border-radius: 9px 9px 0 0; transition: background .15s, color .15s;}
.plist-tabs .tab:hover{color: var(--sp-primary-dark); background: var(--sp-primary-soft);}
.plist-tabs .tab.active{color: var(--sp-primary-dark); background: var(--sp-primary-soft); border-color: var(--sp-border); border-bottom-color: #fff;}
.plist-tabs .tab .cnt{display: inline-block; min-width: 20px; margin-left: 7px; padding: 0 7px; line-height: 19px; text-align: center; font-size: .72rem; font-weight: 700; color: #fff; background: var(--sp-primary); border-radius: 11px;}
.plist-tabs .tab.active .cnt{background: var(--sp-primary-dark);}
.plist-panel .rp-card{margin-top: 0; border-top-left-radius: 0; border-top-right-radius: 0;}
.card-foot-pag{display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 20px; background: var(--sp-bg-light); border-top: 1px solid var(--sp-border); border-radius: 0 0 12px 12px;}
.card-foot-pag .page-summary{display: inline-flex; align-items: center; gap: 7px; font-size: .82rem; color: var(--sp-text-muted);}
.card-foot-pag .page-summary i{color: var(--sp-primary); font-size: .95rem;}
.card-foot-pag .page-summary strong{color: var(--sp-primary-dark); font-weight: 700;}
.card-foot-pag .pagination{margin-bottom: 0;}
.card-foot-pag .page-link{color: var(--sp-text-muted);}
.card-foot-pag .page-item.disabled .page-link{color: #cbd5e1;}
.card-foot-pag .page-item:not(.disabled):not(.active) .page-link:hover{background: var(--sp-primary-soft); color: var(--sp-primary-dark);}
.empty-state{display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; padding: 48px 0; color: var(--sp-text-muted);}
.empty-state .bi{font-size: 2.3rem; color: #cfd6dd;}
.empty-state div{font-size: .92rem;}
.cell-tag{display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: .76rem; font-weight: 500; line-height: 1.6; white-space: nowrap; background: #EAF4FF; color: #2F6FED;}
.cell-tag.green, .cell-tag-green{background: #e7f8ef; color: #0e9b73;}
.cell-tag.purple{background: #F1ECFD; color: #7C5CD0;}
.cell-tag.warning{background: #FFF4E0; color: #D98300;}
.cell-tag.danger{background: #FDEBEC; color: #D93636;}
.cell-tag.yellow{background: #fff7e0; color: #c2920a;}
.cell-tag.red, .cell-tag-red{background: #fdeaea; color: #e03131;}
.cell-tag.gray, .cell-tag-gray{background: #eef0f2; color: #74788d;}
.cell-tag.blue{background: #e7f1ff; color: #1c6dd0;}
.cell-tag.orange{background: #fff4e6; color: #e8590c;}
.rp-table{font-size: .82rem; margin-bottom: 0; white-space: nowrap;}
.rp-table thead th{background: #F8F9FC; border-top: none; font-weight: 600; color: #495057; vertical-align: middle; padding: 8px 6px;}
.rp-table td{vertical-align: middle; padding: 6px 8px;}
.rp-table tbody tr:hover{background: #F0FBF7;}
.rp-table .check-col{width: 36px; text-align: center;}
.rp-table .code-col{width: 96px;}
.rp-table .date-col{width: 100px;}
.rp-table .child-yes{color: #00875A; font-weight: 600;}
.data-table{font-size: .84rem; width: 100%; border-collapse: collapse;}
.data-table th{background: #F8F9FC; text-align: center; padding: 11px 10px; font-weight: 600; color: #495057; border-bottom: 2px solid var(--sp-border);}
.data-table td{padding: 10px; text-align: center; vertical-align: middle; border-bottom: 1px solid #eef0f2;}
.data-table td.lbl{text-align: left; font-weight: 600; color: #212529;}
.data-table tr:hover td{background: #F7FCFB;}
.data-table .row-total{background: var(--sp-primary-light); font-weight: 700;}
.data-table .row-total td{color: var(--sp-primary-dark);}
.num-cell{font-family: 'Roboto Mono', monospace;}
.ce-page{max-width: 950px; margin: 0 auto;}
.ce-row{display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; margin-bottom: 10px;}
.ce-row .ce-lbl, .ce-row .ce-lbl2{width: 72px; text-align: right; font-size: .82rem; font-weight: 500; color: #475569; flex-shrink: 0;}
.ce-row input[type="text"], .ce-row input[type="date"]{height: 34px; border: 1px solid #d1d5db; border-radius: 7px; padding: 0 10px; font-size: .82rem; color: #334155; transition: border-color .15s;}
.ce-row input:focus{border-color: var(--sp-primary); outline: none; box-shadow: 0 0 0 2px rgba(0,200,150,.18);}
.ce-row textarea{border: 1px solid #d1d5db; border-radius: 7px; padding: 8px 10px; font-size: .82rem; color: #334155; resize: vertical; transition: border-color .15s;}
.ce-row textarea:focus{border-color: var(--sp-primary); outline: none; box-shadow: 0 0 0 2px rgba(0,200,150,.18);}
.ce-row .ce-gap{width: 20px; flex-shrink: 0;}
.ce-empty{text-align: center; color: #94a3b8; padding: 24px 0; font-size: .85rem;}
.inv-upload-row{display: flex; align-items: center; gap: 14px;}
.inv-upload-row input[type="file"]{font-size: .82rem;}
.inv-upload-row .inv-label{font-size: .8rem; color: #94a3b8;}
.ce-batch-bar{padding: 10px 16px; border-top: 1px solid #f1f5f9;}
.charge-form-grid{display: grid; grid-template-columns: 1fr 1fr; gap: 14px 22px;}
.cf-item{display: flex; flex-direction: column; gap: 5px;}
.cf-item.full{grid-column: 1 / -1;}
.cf-item > label{font-size: .78rem; color: var(--sp-text-muted); font-weight: 500;}
.cf-item > label .req{color: #e03131;}
.cf-item input, .cf-item textarea{border: 1px solid var(--sp-border); border-radius: 7px; padding: 8px 11px; font-size: 13px; color: var(--sp-text); background: #fff; transition: border-color .15s, box-shadow .15s;}
.cf-item input:focus, .cf-item textarea:focus{outline: none; border-color: var(--sp-primary); box-shadow: 0 0 0 3px var(--sp-primary-soft);}
.cf-item .hint-inline{font-size: .72rem; color: var(--sp-text-muted);}
.cf-foot{display: flex; align-items: center; gap: 18px; margin-top: 16px; padding-top: 16px; border-top: 1px dashed var(--sp-border);}
.cf-foot .btn-save{margin-left: auto;}
@media (max-width: 640px){.charge-form-grid{grid-template-columns: 1fr;}
}
.kp-info{display: grid; grid-template-columns: 1fr 1fr; gap: 6px 28px; font-size: 13px;}
.kp-info .kp-row{display: flex; gap: 6px;}
.kp-info .kp-k{color: var(--sp-text-muted); min-width: 76px;}
.kp-info .kp-v{color: var(--sp-text);}
.kp-info .full{grid-column: 1 / -1;}
@media (max-width: 640px){.kp-info{grid-template-columns: 1fr;}
}
.inv-drop{position: relative; border: 1.5px dashed var(--sp-border); border-radius: 12px; padding: 26px 18px; text-align: center; background: var(--sp-bg-light); transition: all .15s; cursor: pointer;}
.inv-drop:hover, .inv-drop.dragover{border-color: var(--sp-primary); background: var(--sp-primary-soft);}
.inv-drop.dragover{border-style: solid; box-shadow: 0 0 0 3px rgba(0,200,150,.12);}
.inv-drop .inv-ico{font-size: 1.9rem; color: var(--sp-primary); margin-bottom: 6px;}
.inv-file{display: none;}
.inv-hint{font-size: .85rem; color: var(--sp-text-muted); margin-top: 4px;}
.inv-hint .inv-link{color: var(--sp-primary); font-weight: 600; text-decoration: none;}
.inv-hint .inv-link:hover{text-decoration: underline;}
.inv-name{display: inline-flex; align-items: center; gap: 8px; margin-top: 12px; padding: 7px 12px; background: #fff; border: 1px solid var(--sp-border); border-radius: 8px; font-size: .85rem; color: var(--sp-text); max-width: 100%;}
.inv-name[hidden]{display: none;}
.inv-name .bi-file-earmark-pdf{color: #e03131; flex: none;}
.inv-name .inv-name-txt{max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.inv-remove{border: none; background: #f1f3f5; color: #868e96; width: 20px; height: 20px; border-radius: 50%; font-size: .7rem; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; flex: none;}
.inv-remove:hover{background: #ffe3e3; color: #e03131;}
.inv-actions{margin-top: 14px;}
.doc-status{display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: .72rem;}
.doc-status.ok{background: #e6f7ee; color: #00A46C;}
.doc-status.no{background: #eef1f4; color: #8a939c;}
.nav-tabs{border-bottom-color: var(--sp-border);}
.nav-tabs .nav-link{color: var(--sp-text-muted); border: 1px solid transparent; border-bottom: none; border-radius: 8px 8px 0 0; margin-right: 2px; padding: 9px 16px; font-size: .88rem; transition: all .15s;}
.nav-tabs .nav-link:hover{border-color: transparent; color: var(--sp-primary-dark); background: var(--sp-bg-light);}
.nav-tabs .nav-link.active{color: var(--sp-primary-dark); background: #fff; font-weight: 600; border-color: var(--sp-border); border-bottom-color: #fff;}
.bar-chart{display: flex; flex-direction: column; gap: 14px; padding: 4px 0;}
.bar-row{display: grid; grid-template-columns: 90px 1fr 60px; align-items: center; gap: 12px;}
.bar-row .bl{font-size: .82rem; color: #495057; text-align: right;}
.bar-track{background: #eef0f2; border-radius: 6px; height: 22px; overflow: hidden;}
.bar-fill{height: 100%; background: linear-gradient(90deg, var(--sp-primary), var(--sp-primary-dark)); border-radius: 6px;}
.bar-row .bv{font-size: .82rem; font-weight: 600; color: var(--sp-primary-dark); font-family: 'Roboto Mono', monospace; text-align: left;}
.action-bar{display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 8px; padding: 12px 0; border-top: 1px solid var(--sp-border); margin-top: 6px;}
.loading-text{display: none; color: var(--sp-primary); font-size: .82rem;}
.loading-text::before{content: '\21BB'; display: inline-block; margin-right: 6px; animation: spin .8s linear infinite; font-weight: bold;}
@keyframes spin{from{transform: rotate(0);}
to{transform: rotate(360deg);}
}
.notes{font-size: .8rem; color: var(--sp-text-muted);}
.notes .danger{color: #dc3545;}
.alert-danger-soft{display: flex; align-items: center; gap: 8px; background: #FDECEA; color: #b02a1f; border: 1px solid #f5c2bd; border-radius: 10px; padding: 10px 14px; font-size: .85rem;}
.alert-success-soft{display: flex; align-items: center; gap: 8px; background: var(--sp-primary-light); color: var(--sp-primary-dark); border: 1px solid #bdebd8; border-radius: 10px; padding: 10px 14px; font-size: .85rem;}
.info-note{font-size: .8rem; color: var(--sp-text-muted); margin-top: 14px;}
.chart-card{background: #fff; border: 1px solid var(--sp-border); border-radius: 12px; padding: 16px 18px 8px; box-shadow: 0 1px 3px rgba(0,0,0,.04);}
.chart-legend{display: flex; flex-wrap: wrap; gap: 14px; padding: 2px 4px 10px;}
.chart-legend .lg-item{font-size: .8rem; color: #495057; display: inline-flex; align-items: center; gap: 6px;}
.chart-legend .lg-item i{width: 11px; height: 11px; border-radius: 3px; display: inline-block;}
.chart-svg-wrap{width: 100%;}
.chart-param{display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px; margin-bottom: 16px;}
.chart-param .field{display: flex; flex-direction: column; gap: 5px;}
.chart-param label{font-size: .76rem; color: var(--sp-text-muted); font-weight: 500;}
.chart-param select, .chart-param input{min-width: 150px;}
.chart-param .grow{flex: 1; min-width: 200px; align-self: center; font-size: .8rem; color: var(--sp-text-muted);}
.rpt-index-grid{display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px;}
.rpt-entry{display: block; text-decoration: none; background: #fff; border: 1px solid var(--sp-border); border-radius: 12px; padding: 18px; box-shadow: 0 1px 3px rgba(0,0,0,.04); transition: .15s; border-left: 4px solid var(--sp-primary);}
.rpt-entry:hover{box-shadow: 0 6px 18px rgba(0,200,150,.14); transform: translateY(-2px);}
.rpt-entry .ri-ico{width: 38px; height: 38px; border-radius: 10px; background: var(--sp-primary-light); color: var(--sp-primary-dark); display: inline-flex; align-items: center; justify-content: center; font-size: 19px; margin-bottom: 10px;}
.rpt-entry .ri-tt{font-weight: 600; font-size: .95rem; color: #212529;}
.rpt-entry .ri-ds{font-size: .78rem; color: var(--sp-text-muted); margin-top: 4px; line-height: 1.45;}
.rpt-cat-title{font-size: .82rem; font-weight: 600; color: var(--sp-primary-dark); margin: 22px 0 4px; display: flex; align-items: center; gap: 8px;}
.rpt-cat-title::before{content: ''; width: 4px; height: 16px; background: var(--sp-primary); border-radius: 3px; display: inline-block;}
.stat-tabnav{display: flex; border-bottom: 2px solid var(--sp-border); margin: 2px 0 20px;}
.stat-tab{padding: 11px 26px; font-weight: 600; font-size: .95rem; color: var(--sp-text-muted); border-bottom: 2px solid transparent; margin-bottom: -2px; cursor: default;}
.stat-tab.active{color: var(--sp-primary); border-bottom-color: var(--sp-primary);}
.doc-list2{list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 0 36px;}
.doc-list2 li{border-bottom: 1px dotted var(--sp-border);}
.doc-list2 a{display: flex; align-items: center; gap: 10px; padding: 13px 8px; color: var(--sp-text); text-decoration: none; font-size: .92rem; border-radius: 6px; transition: background .15s, color .15s;}
.doc-list2 a:hover{color: var(--sp-primary); background: var(--sp-green-50);}
.doc-list2 a i{color: var(--sp-primary); font-size: 1.02rem;}
.form-hint{font-size: .78rem; color: var(--sp-text-muted);}
.detail-table{font-size: .9rem;}
.detail-table th{width: 140px; background: var(--sp-green-50); font-weight: 600; color: var(--sp-text); vertical-align: middle;}
.detail-table td{color: var(--sp-text); word-break: break-all;}
.edit-table{font-size: .9rem;}
.edit-table .field{width: 130px; text-align: right; white-space: nowrap; color: var(--sp-text-muted); padding: 8px 14px 8px 0; vertical-align: top;}
.edit-table td:not(.field){padding: 8px 12px;}
.edit-table .form-control{width: 100%;}
.page-container{max-width: 960px; margin: 20px auto; padding: 0 14px;}
.detail-toolbar .btn{min-width: 92px;}
.search-grid.sg-5{grid-template-columns: repeat(5, minmax(0, 1fr));}
.cost-card.fee .review-card-head{background: linear-gradient(135deg,#e9fbf3,#def7ec); color:#0e9b73; border-bottom-color:#c5ecdb;}
.cost-card.charge .review-card-head{background: linear-gradient(135deg,#e9fbf3,#def7ec); color:#0e9b73; border-bottom-color:#c5ecdb;}
.cost-form-table{width:100%; border-collapse:collapse;}
.cost-form-table thead th{background:#f1f5f9; color:#475569; font-size:.78rem; font-weight:700; padding:.55rem .5rem; text-align:center; border-bottom:2px solid var(--sp-border);}
.cost-form-table tbody td{padding:.4rem .5rem; border-bottom:1px solid #f1f5f9; vertical-align:middle;}
.cost-form-table select, .cost-form-table input[type="text"], .cost-form-table input[type="date"], .cost-form-table textarea{width:100%; padding:.35rem .5rem; font-size:.8rem; border:1px solid #d1d5db; border-radius:6px; color:#334155; background:#fff;}
.cost-form-table select:focus, .cost-form-table input:focus, .cost-form-table textarea:focus{border-color: var(--sp-primary); box-shadow:0 0 0 2px rgba(0,200,150,.1); outline:none;}
.cost-form-table textarea{resize:vertical; min-height:32px;}
.del-link{display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:6px; color:#ef4444; cursor:pointer; text-decoration:none;}
.del-link:hover{background:#fef2f2; color:#dc2626;}
.btn-add-row{background:#fff; color:var(--sp-primary-dark); border:1px solid #c5ecdb; font-size:.83rem; padding:.4rem 1rem; border-radius:8px; font-weight:500; transition:all .15s;}
.btn-add-row:hover{background:var(--sp-primary-soft); border-color:#a7e8cf;}
.empty-msg{text-align:center; padding:1.6rem; color:#94a3b8; font-size:.85rem;}
.row-act{display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:6px; text-decoration:none; transition:.15s; font-size:.95rem;}
.row-act.edit{color:var(--sp-primary);}
.row-act.edit:hover{background:var(--sp-primary-light);}
.row-act.del{color:#D93636; margin-left:2px;}
.row-act.del:hover{background:#FDEBEC;}
.ent-wrap{width:100%; padding:0;}
.ent-tabs{display:flex; flex-wrap:wrap; gap:6px; list-style:none; padding:0; margin:0 0 16px;}
.ent-tabs .ent-tab-link{display:inline-flex; align-items:center; gap:6px; padding:10px 22px; border:1px solid var(--sp-border); border-radius:9px; background:#fff; color:var(--sp-text-muted); font-weight:600; font-size:.86rem; cursor:pointer; transition:all .18s; text-decoration:none;}
.ent-tabs .ent-tab-link:hover{color:var(--sp-primary-dark); border-color:var(--sp-primary); background:var(--sp-primary-light);}
.ent-tabs .ent-tab-link.active{color:#fff; background:linear-gradient(135deg,var(--sp-primary-strong),var(--sp-primary-strong-dark)); border-color:var(--sp-primary-dark); box-shadow:0 4px 12px rgba(0,200,150,.28);}
.ent-tab-content{background:#fff; border:1px solid var(--sp-border); border-radius:12px; padding:20px 22px 0; box-shadow:0 1px 3px rgba(15,23,42,.05);}
.ent-tab-pane{display:none; padding-bottom:6px;}
.ent-tab-pane.active{display:block;}
.ent-section{background:#fff; border:1px solid var(--sp-border); border-radius:10px; padding:14px 16px 8px; margin-bottom:16px; box-shadow:0 1px 2px rgba(15,23,42,.03);}
.ent-section.gray{background:#fafbfc;}
.ent-section-head{display:flex; justify-content:space-between; align-items:center; margin-bottom:10px;}
.ent-section-title{display:flex; align-items:center; gap:7px; font-size:.9rem; font-weight:700; color:var(--sp-text); margin:0 0 12px;}
.ent-section-title.mt{margin-top:2px;}
.ent-section-title::before{content:''; width:4px; height:16px; border-radius:3px; background:linear-gradient(180deg,var(--sp-primary),var(--sp-primary-dark));}
.ent-form-row{display:grid; grid-template-columns:1fr 1fr; gap:13px 18px;}
.ent-form-row.three{grid-template-columns:repeat(3,1fr);}
.ent-form-row.four{grid-template-columns:repeat(4,1fr);}
.ent-form-row.five{grid-template-columns:repeat(5,1fr);}
.ent-form-row.ident{grid-template-columns:1.7fr 1fr 1fr 1.3fr 1.3fr; align-items:end;}
.ent-form-row.name{grid-template-columns:2fr 1fr 1fr;}
.ent-field{margin-bottom:12px;}
.ent-field > label{display:block; font-size:.82rem; font-weight:600; color:var(--sp-text-muted); margin-bottom:4px;}
.ent-field .req{color:#EF4444; padding-left:2px;}
.ent-field select, .ent-field textarea, .ent-field input[type=text]{width:100%; font-size:.82rem; height:34px; padding:5px 10px; border:1px solid #d1d5db; border-radius:7px; color:var(--sp-text); background:#fff; transition:all .15s; box-sizing:border-box;}
.ent-field textarea{height:auto; min-height:62px; resize:vertical; line-height:1.5;}
.ent-field select:focus, .ent-field textarea:focus, .ent-field input:focus{border-color:var(--sp-primary); box-shadow:0 0 0 3px var(--sp-primary-light); outline:none;}
.ent-field-inline{display:flex; align-items:center; gap:8px;}
.ent-field-inline input{flex:1;}
.ent-link{font-size:.78rem; color:var(--sp-primary); cursor:pointer; text-decoration:none; margin-left:4px; white-space:nowrap; font-weight:500;}
.ent-link:hover{color:var(--sp-primary-dark); text-decoration:underline;}
.ent-checks{display:flex; gap:16px; align-items:center; font-size:.82rem; padding-top:4px;}
.ent-checks label{display:inline-flex; align-items:center; gap:4px; font-weight:400;}
.ent-hint{font-size:.72rem; color:#94a3b8; margin-top:3px; line-height:1.4;}
.ent-person-card{background:#fafbfc; border:1px solid var(--sp-border); border-radius:9px; padding:12px 14px 4px; margin:8px 0;}
.ent-person-card .ent-form-row{gap:12px 16px;}
.ent-addr-block{background:#fafbfc; border:1px solid var(--sp-border); border-radius:9px; padding:12px 14px 8px; margin-bottom:12px;}
.ent-addr-top{display:grid; grid-template-columns:1fr 170px; gap:14px 18px; align-items:end;}
.ent-addr-top .ent-field{margin-bottom:8px;}
.ent-fp-group{display:flex; gap:12px;}
.ent-fp-option{flex:1; display:flex; align-items:center; justify-content:center; gap:6px; padding:11px 0; border:2px solid var(--sp-border); border-radius:9px; cursor:pointer; background:#f8fafc; font-weight:600; font-size:.86rem; color:var(--sp-text-muted); user-select:none; transition:all .2s;}
.ent-fp-option:hover{border-color:var(--sp-primary); color:var(--sp-primary); background:var(--sp-primary-light);}
.ent-fp-option.active{border-color:var(--sp-primary); background:linear-gradient(135deg,var(--sp-primary-strong),var(--sp-primary-strong-dark)); color:#fff; box-shadow:0 3px 10px rgba(0,200,150,.25);}
.ent-fp-option input{position:absolute; opacity:0; width:0; height:0;}
.ent-btn-submit{font-size:.86rem; padding:8px 28px; border-radius:7px; border:none; font-weight:600; cursor:pointer; background:linear-gradient(135deg,var(--sp-primary-strong),var(--sp-primary-strong-dark)); color:#fff; letter-spacing:1px; transition:all .15s;}
.ent-btn-submit:hover{box-shadow:0 4px 12px rgba(0,200,150,.32); transform:translateY(-1px);}
.ent-btn-outline{font-size:.82rem; padding:6px 16px; border-radius:7px; cursor:pointer; background:#f8fafc; color:var(--sp-text-muted); border:1px solid #d1d5db; transition:all .15s; font-weight:500;}
.ent-btn-outline:hover{background:#f1f5f9; border-color:#94a3b8; color:var(--sp-text);}
.ent-btn-get{padding:5px 14px; font-size:.8rem; font-weight:600; color:#fff; background:linear-gradient(135deg,var(--sp-primary-strong),var(--sp-primary-strong-dark)); border:1px solid var(--sp-primary-dark); border-radius:7px; cursor:pointer; white-space:nowrap;}
.ent-btn-get:hover{box-shadow:0 3px 10px rgba(0,200,150,.3);}
.ent-actionbar{position:sticky; bottom:0; margin:16px -22px 0; padding:13px 22px; background:rgba(255,255,255,.94); backdrop-filter:blur(4px); border-top:1px solid var(--sp-border); border-radius:0 0 12px 12px; display:flex; gap:10px; justify-content:flex-end; box-shadow:0 -3px 10px rgba(15,23,42,.05); z-index:5;}
.ent-btn-reset{background:#fff; color:var(--sp-text-muted); border:1px solid #d1d5db; padding:8px 22px; border-radius:7px; font-size:.86rem; font-weight:500; cursor:pointer;}
.ent-btn-reset:hover{background:#f1f5f9; border-color:#94a3b8;}
.ent-readonly{font-size:.84rem; color:var(--sp-text-muted); padding:6px 0;}
.ent-tip{background:linear-gradient(135deg,var(--sp-primary-light),#eafaf4); border:1px solid var(--sp-primary); color:var(--sp-primary-dark); border-radius:9px; padding:11px 15px; font-size:.83rem; margin-bottom:14px; line-height:1.6;}
.ent-tip a{color:var(--sp-primary-dark); font-weight:700;}
.parent-ep-card{margin:0 0 18px; border:1px solid #d6f0e6; border-radius:12px; background:linear-gradient(180deg,#f3fbf8,#fff); overflow:hidden;}
.parent-ep-card .pec-hd{display:flex; align-items:center; justify-content:space-between; padding:10px 16px; background:linear-gradient(90deg,var(--sp-primary),var(--sp-primary-dark)); color:#fff; font-weight:700; font-size:.92rem;}
.parent-ep-card .pec-hd .bi{margin-right:6px;}
.parent-ep-card .pec-close{color:#fff; text-decoration:none; font-size:1.15rem; line-height:1; cursor:pointer; opacity:.9;}
.parent-ep-card .pec-close:hover{opacity:1;}
.parent-ep-card .pec-bd{padding:12px 16px;}
.parent-ep-card .pec-row{display:flex; gap:28px; flex-wrap:wrap; margin-bottom:9px;}
.parent-ep-card .pec-row:last-child{margin-bottom:0;}
.parent-ep-card .pec-row span{font-size:.9rem; color:#334155;}
.parent-ep-card .pec-row strong{color:#475569; font-weight:600; margin-right:4px;}
.parent-ep-card .pec-bd a{color:var(--sp-primary-dark); font-weight:700; text-decoration:none;}
.parent-ep-card .pec-bd a:hover{text-decoration:underline;}
.ico-sm.action-add{display:inline-flex; align-items:center; justify-content:center; width:24px; height:24px; border-radius:6px; color:var(--sp-primary); font-size:1rem; text-decoration:none; transition:background .15s,color .15s;}
.ico-sm.action-add:hover{background:var(--sp-primary-light);}
.count-badge{display:inline-flex; align-items:center; justify-content:center; min-width:22px; height:22px; padding:0 6px; border-radius:11px; background:var(--sp-primary-strong); color:#fff; font-size:.76rem; font-weight:600; text-decoration:none; line-height:1;}
.count-badge:hover{filter:brightness(.96);}
.count-badge.zero{background:#e2e8f0; color:#94a3b8; cursor:default;}
.site-modal{position:fixed; inset:0; display:none; align-items:center; justify-content:center; z-index:1080;}
.site-modal-mask{position:absolute; inset:0; background:rgba(15,23,42,.45);}
.site-modal-box{position:relative; width:min(680px,94vw); background:#fff; border-radius:14px; box-shadow:0 18px 50px rgba(15,23,42,.25); overflow:hidden;}
.site-modal-hd{display:flex; align-items:center; justify-content:space-between; padding:14px 18px; background:linear-gradient(90deg,var(--sp-primary),var(--sp-primary-dark)); color:#fff; font-weight:700;}
.site-modal-hd .bi{margin-right:6px;}
.site-modal-x{border:none; background:transparent; color:#fff; font-size:1.3rem; line-height:1; cursor:pointer;}
.site-modal-bd{padding:18px; max-height:72vh; overflow:auto;}
.site-form-table{width:100%; border-collapse:collapse;}
.site-form-table td{padding:7px 10px; border-bottom:1px solid #eef2f7; vertical-align:middle;}
.site-form-table .label-cell{width:96px; color:#475569; font-weight:600; font-size:.86rem; white-space:nowrap; background:#f8fafc;}
.site-form-table .label-cell .required{color:#e5484d; margin-left:2px;}
.site-form-table .value-cell{padding-left:12px;}
.site-form-table .sf-control{width:100%; padding:7px 10px; border:1px solid #d8e0ea; border-radius:7px; font-size:.9rem; box-sizing:border-box;}
.site-form-table .sf-control:focus{outline:none; border-color:var(--sp-primary); box-shadow:0 0 0 3px rgba(0,200,150,.15);}
#esEpName{color:var(--sp-primary-dark); font-weight:700; text-decoration:none;}
#esEpName:hover{text-decoration:underline;}
.site-modal-ft{display:flex; justify-content:flex-end; gap:10px; padding:12px 18px; border-top:1px solid #eef2f7; background:#f8fafc;}
.site-btn-cancel,.site-btn-ok{border:none; border-radius:8px; padding:8px 16px; font-weight:600; cursor:pointer; display:inline-flex; align-items:center; gap:5px;}
.site-btn-cancel{background:#e2e8f0; color:#475569;}
.site-btn-cancel:hover{background:#cbd5e1;}
.site-btn-ok{background:var(--sp-primary-strong); color:#fff;}
.site-btn-ok:hover{background:var(--sp-primary-strong-dark);}
.site-tip{margin:12px 0 0; padding:8px 12px; border-radius:8px; background:#e7f8f1; color:#0f9d6b; font-size:.85rem;}
.ed-topbar{display:flex; justify-content:space-between; align-items:center; margin-bottom:16px; flex-wrap:wrap; gap:10px;}
.ed-topbar h4{margin:0; font-size:1.15rem; font-weight:700; color:var(--sp-text);}
.ed-topbar .ed-short{font-size:.82rem; color:var(--sp-text-muted); margin-left:6px;}
.ed-btn-edit{display:inline-flex; align-items:center; gap:6px; padding:7px 18px; border-radius:7px; border:none; font-weight:600; font-size:.86rem; text-decoration:none; color:#fff; background:linear-gradient(135deg,var(--sp-primary-strong),var(--sp-primary-strong-dark)); cursor:pointer; transition:all .15s;}
.ed-btn-edit:hover{box-shadow:0 4px 12px rgba(0,200,150,.32); transform:translateY(-1px); color:#fff;}
.ed-card{background:#fff; border:1px solid var(--sp-border); border-radius:10px; margin-bottom:16px; box-shadow:0 1px 2px rgba(15,23,42,.03); overflow:hidden;}
.ed-card-hd{display:flex; align-items:center; gap:9px; padding:11px 15px; border-bottom:1px solid var(--sp-border); background:#fafbfc; font-weight:700; font-size:.9rem; color:var(--sp-text);}
.ed-card-hd .bar{width:4px; height:16px; border-radius:3px; background:linear-gradient(180deg,var(--sp-primary),var(--sp-primary-dark));}
.ed-card-actions{margin-left:auto; display:flex; gap:6px;}
.ed-ico-btn{display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px; border-radius:6px; border:1px solid #d1d5db; color:var(--sp-text-muted); text-decoration:none; font-size:.85rem; transition:all .15s;}
.ed-ico-btn:hover{border-color:var(--sp-primary); color:var(--sp-primary);}
.ed-ico-primary{border-color:var(--sp-primary); color:var(--sp-primary);}
.ed-card-bd{padding:13px 15px;}
.ed-card-bd.p-0{padding:0;}
.ed-kv{width:100%; border-collapse:collapse; font-size:.82rem;}
.ed-kv td{padding:6px 8px; border-bottom:1px solid #f1f5f9; vertical-align:top;}
.ed-kv tr:last-child td{border-bottom:none;}
.ed-kv td.k{color:var(--sp-text-muted); width:118px; white-space:nowrap;}
.ed-kv td.v{color:var(--sp-text);}
.ed-sub{display:flex; gap:18px;}
.ed-sub-col{flex:1; min-width:0;}
.ed-sub-title{font-size:.8rem; font-weight:700; color:var(--sp-text-muted); margin:0 0 6px;}
.ed-hr{border:none; border-top:1px solid #f1f5f9; margin:12px 0;}
.ed-site-table th{font-size:.78rem; background:#f8fafc;}
.ep-name-link{color:var(--sp-primary); font-weight:600; text-decoration:none;}
.ep-name-link:hover{text-decoration:underline;}
.ed-note{padding:10px 14px; border-bottom:1px solid #f1f5f9;}
.ed-note:last-child{border-bottom:none;}
.ed-note-head{display:flex; justify-content:space-between; align-items:center; margin-bottom:2px;}
.ed-cert-stat{display:flex; text-align:center; border:1px solid var(--sp-border); border-radius:8px; overflow:hidden; margin-bottom:10px;}
.ed-cert-stat > div{flex:1; padding:10px 0;}
.ed-cert-stat > div + div{border-left:1px solid var(--sp-border);}
.search-grid.sg-3{grid-template-columns: repeat(3, minmax(0, 1fr));}
@media (max-width: 1100px){.search-grid.sg-3{grid-template-columns: repeat(2, minmax(0, 1fr));}
}
@media (max-width: 680px){.search-grid.sg-3{grid-template-columns: 1fr;}
}
.total-badge{display:inline-block; padding:4px 12px; border-radius:20px; font-size:.78rem; font-weight:600; background:var(--sp-primary); color:#fff;}
.text-muted-cell{color:var(--sp-text-muted);}
.btn-register{display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; border-radius:8px; background:var(--sp-primary-strong); color:#fff; text-decoration:none; font-size:.95rem; transition:all .15s ease-in-out;}
.btn-register:hover{background:var(--sp-primary-strong-dark); color:#fff; text-decoration:none; box-shadow:0 4px 10px rgba(0,200,150,.3); transform:translateY(-1px);}
.btn-exact{border-radius:8px; padding:6px 16px; font-size:.85rem; font-weight:600; border:1px solid var(--sp-cyan, #36b9cc); color:var(--sp-cyan, #36b9cc); text-decoration:none;}
.btn-exact:hover{background:var(--sp-cyan, #36b9cc); color:#fff;}
.rev-detail{display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:16px; align-items:start;}
@media (max-width: 900px){.rev-detail{grid-template-columns:1fr;}
}
.rev-card{background:#fff; border:1px solid var(--sp-border); border-radius:12px; box-shadow:0 2px 10px rgba(0,200,150,.05); overflow:hidden;}
.rev-card-hd{background:linear-gradient(180deg,#fff, var(--sp-primary-soft)); border-bottom:1px solid #e6f5ee; padding:11px 16px; font-weight:600; font-size:.92rem; color:var(--sp-text); display:flex; align-items:center; gap:6px;}
.rev-card-hd .bi{color:var(--sp-primary);}
.rev-card-bd{padding:6px 16px 12px;}
.rev-tbl{width:100%; border-collapse:collapse; font-size:.86rem;}
.rev-tbl td{padding:8px 6px; border-bottom:1px solid #f2f5f8; vertical-align:top;}
.rev-tbl tr:last-child td{border-bottom:none;}
.rev-tbl .rl{color:var(--sp-text-muted); width:96px; white-space:nowrap; font-weight:500;}
.rev-tbl .v{color:var(--sp-text);}
.ed-cert-stat b{display:block; font-size:1.25rem;}
.ed-cert-stat small{color:var(--sp-text-muted);}
.ed-cert-exp{font-size:.8rem;}
.review-tabs-card{background:#fff; border:1px solid var(--sp-border); border-radius:12px; box-shadow:0 2px 10px rgba(0,200,150,.05); overflow:hidden;}
.review-tabs{display:flex; flex-wrap:wrap; list-style:none; margin:0; padding:0; border-bottom:2px solid var(--sp-border); background:var(--sp-primary-soft, #f0fbf7);}
.review-tabs .nav-item{margin:0;}
.review-tabs .nav-link{display:inline-flex; align-items:center; gap:6px; padding:11px 22px; font-size:.9rem; font-weight:600; color:var(--sp-text-muted); text-decoration:none; border:none; border-right:1px solid var(--sp-border); cursor:pointer; transition:all .15s ease-in-out;}
.review-tabs .nav-link:hover:not(.active){background:#e6f7f1; color:var(--sp-primary-dark);}
.review-tabs .nav-link.active{background:var(--sp-primary-strong); color:#fff; border-right-color:transparent;}
.review-tabs .cnt{display:inline-flex; align-items:center; justify-content:center; min-width:20px; height:20px; padding:0 7px; border-radius:20px; font-size:.72rem; font-weight:700; background:var(--sp-primary-dark); color:#fff;}
.review-tabs .nav-link.active .cnt{background:rgba(255,255,255,.25); color:#fff;}
.review-tab-content{background:#fff;}
.review-tab-content .tab-pane{display:none; padding:0;}
.review-tab-content .tab-pane.active{display:block;}
.tag-applied{display:inline-block; padding:3px 10px; border-radius:20px; font-size:.74rem; font-weight:600; background:#e6f7f1; color:var(--sp-primary-dark);}
.upload-card, .result-card{background:#fff; border:1px solid var(--sp-border, #e5e7eb); border-radius:12px; padding:1.15rem 1.25rem; margin-top:1rem; box-shadow:0 1px 3px rgba(0,0,0,.04);}
.card-header-sec{display:flex; align-items:center; justify-content:space-between; margin-bottom:.85rem; padding-bottom:.6rem; border-bottom:1px solid #f1f5f9;}
.card-header-sec h6{margin:0; font-weight:700; font-size:.94rem; color:var(--sp-text, #1e293b); display:flex; align-items:center; gap:.5rem;}
.card-header-sec h6 i{width:28px; height:28px; border-radius:7px; display:inline-flex; align-items:center; justify-content:center; font-size:.85rem;}
.bg-green-light{background:var(--sp-primary-soft); color:var(--sp-primary-dark);}
.bg-orange-light{background:#fff7ed; color:#ea580c;}
.upload-form-table{width:100%; border-collapse:collapse;}
.upload-form-table th{background:#f1f5f9; color:#475569; font-size:.78rem; font-weight:700; padding:.5rem .6rem; text-align:center; border-bottom:2px solid #e2e8f0;}
.upload-form-table td{padding:.45rem .5rem; vertical-align:middle; border-bottom:1px solid #f1f5f9;}
.upload-form-table select, .upload-form-table input[type="text"]{width:100%; font-size:.82rem; height:34px; border:1px solid #d1d5db; border-radius:8px; padding:.25rem .6rem;}
.upload-form-table select:focus, .upload-form-table input[type="text"]:focus{border-color:var(--sp-primary); box-shadow:0 0 0 3px rgba(0,200,150,.12); outline:none;}
.custom-file-wrap{display:flex; align-items:center; gap:8px; width:100%;}
.custom-file-btn{display:inline-flex; align-items:center; gap:6px; padding:7px 16px; font-size:.84rem; font-weight:600; background:var(--sp-primary-strong); border:none; border-radius:8px; color:#fff; cursor:pointer; white-space:nowrap; transition:all .2s; box-shadow:0 2px 6px rgba(0,200,150,.25);}
.custom-file-btn:hover{background:var(--sp-primary-strong-dark); box-shadow:0 4px 12px rgba(0,200,150,.35); transform:translateY(-1px); color:#fff;}
.custom-file-btn input[type="file"]{position:absolute; width:0; height:0; opacity:0; pointer-events:none;}
.custom-file-name{flex:1; font-size:.8rem; color:#64748b; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0;}
.custom-file-name.has-file{color:var(--sp-primary-dark); font-weight:500;}
.upload-tips{margin-top:.7rem; padding:.5rem .75rem; background:#fffbeb; border:1px solid #fde68a; border-radius:8px; font-size:.8rem; color:#92400e; line-height:1.6;}
.btn-area{display:flex; justify-content:center; gap:.75rem; padding-top:1rem;}
.doc-tab-bar{background:var(--sp-primary); color:#fff; border-radius:.35rem .35rem 0 0; padding:.55rem 1rem; margin-top:.25rem; font-weight:600; font-size:.95rem; display:flex; align-items:center; gap:.5rem;}
.doc-tab-bar .cnt-total{background:rgba(255,255,255,.25); padding:2px 11px; border-radius:12px; margin-left:.35rem; font-weight:500; font-size:.82rem;}
.doc-table thead th{background:#f5f5f5; color:#333; text-align:center; white-space:nowrap;}
.doc-table tbody td{text-align:center; vertical-align:middle;}
.doc-table tbody td.doc-name{text-align:left;}
.doc-table tbody tr:nth-child(even){background:#fafafa;}
.doc-table tbody tr:hover{background:#f0fbf7;}
.doc-table .cell-link{color:#1e293b; font-weight:600; text-decoration:none;}
.doc-table .cell-link:hover{color:var(--sp-primary); text-decoration:underline;}
.dl-link{color:var(--sp-primary); font-size:1.05rem; text-decoration:none;}
.dl-link:hover{color:var(--sp-primary-dark,#00A87C);}
.note-link{color:#6c757d; text-decoration:none; font-size:.95rem;}
.note-link:hover{color:#495057;}
.del-link{color:#e23c3c; font-size:1.05rem; text-decoration:none;}
.del-link:hover{color:#a71d2a;}
.badge-count{display:inline-block; background:var(--sp-primary); color:#fff; border-radius:20px; padding:2px 11px; font-weight:600; font-size:.76rem; margin-left:7px; box-shadow:0 2px 6px rgba(0,200,150,.3);}
.expire-date{color:#e23c3c; font-weight:600;}
.cell-link{color:var(--sp-text, #1e293b); text-decoration:none; font-weight:600;}
.cell-link:hover{color:var(--sp-primary); text-decoration:none;}
.btn-download{display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:8px; background:#e6f7f1; color:var(--sp-primary); transition:all .2s;}
.btn-download:hover{background:var(--sp-primary-strong); color:#fff; text-decoration:none;}
.btn-download.no-file{background:#f1f5f9; color:#cbd5e1; cursor:default;}
.btn-reset{display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 16px; font-size: .82rem; font-weight: 500; background: #fff; color: #6b7280; border: 1px solid #d1d5db; border-radius: 8px; cursor: pointer; white-space: nowrap; transition: all .15s;}
.btn-reset:hover{background: #f1f5f9; color: #475569; border-color: #94a3b8;}
.btn-export-csv{display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 16px; font-size: .82rem; font-weight: 600; background: linear-gradient(135deg, #059669, #047857); color: #fff; border: none; border-radius: 8px; cursor: pointer; white-space: nowrap; transition: all .15s; box-shadow: 0 2px 8px rgba(5,150,105,.2);}
.btn-export-csv:hover{background: linear-gradient(135deg, #047857, #065f46); box-shadow: 0 4px 14px rgba(5,150,105,.35); transform: translateY(-1px); color: #fff;}
.btn-add{background:#fff; color:#475569; border:1px solid #d1d5db; font-size:.83rem; padding:.45rem 1.4rem; border-radius:8px; font-weight:500; display:inline-flex; align-items:center; gap:5px; cursor:pointer; transition:all .2s;}
.btn-add:hover{background:#f8fafc; border-color:#94a3b8; color:#334155;}
.btn-upload{background:var(--sp-primary-strong); color:#fff; border:none; font-size:.83rem; padding:.45rem 1.4rem; border-radius:8px; font-weight:500; display:inline-flex; align-items:center; gap:5px; cursor:pointer; transition:all .2s; box-shadow:0 2px 8px rgba(0,200,150,.2);}
.btn-upload:hover{background:var(--sp-primary-strong-dark); box-shadow:0 4px 14px rgba(0,200,150,.35); transform:translateY(-1px); color:#fff;}
.grid-table.doc-grid{margin-bottom:0;}
.grid-table.doc-grid th, .grid-table.doc-grid td{text-align:center;}
.grid-table.doc-grid td:nth-child(2){text-align:left;}
.grid-table.doc-grid tbody tr:hover td{background:#f0fbf7;}
.ico-link{display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:6px; transition:all .2s; color:#64748b; text-decoration:none;}
.ico-link:hover{text-decoration:none; color:#fff; background:var(--sp-primary-dark, #00A878);}
.ico-link-download{background:#eff6ff;}
.ico-link-download:hover{background:var(--sp-primary-dark, #00A878); color:#fff;}
.ico-link-delete{background:#fef2f2;}
.ico-link-delete:hover{background:#dc2626; color:#fff;}
.ico-link-edit{display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:6px; transition:all .2s; color:var(--sp-primary); background:var(--sp-primary-soft); text-decoration:none; font-size:.95rem;}
.ico-link-edit:hover{background:var(--sp-primary-dark, #00A878); color:#fff; text-decoration:none;}
.ico-link-view{display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:6px; transition:all .2s; color:var(--sp-primary-dark); background:var(--sp-primary-soft); text-decoration:none; font-size:.9rem;}
.ico-link-view:hover{background:var(--sp-primary-dark, #00A878); color:#fff; text-decoration:none;}
.ico-link:hover svg{stroke-width:2.6;}
.note-hint{display:inline-block; cursor:default; color:#f59e0b; font-size:14px;}
.empty-state .bi{font-size:2.3rem; color:#cfd6dd;}
.select-all-link{color:var(--sp-primary-dark, #00A87C); font-size:.82rem; font-weight:500; cursor:pointer; text-decoration:none;}
.select-all-link:hover{text-decoration:underline;}
.btn-batdown{background:var(--sp-primary-dark, #00A87C); color:#fff; border:none; font-size:.83rem; padding:.45rem 1.2rem; border-radius:8px; font-weight:500; display:inline-flex; align-items:center; gap:5px; cursor:pointer; transition:all .2s; box-shadow:0 2px 8px rgba(0,200,150,.2);}
.btn-batdown:hover{background:#007a5c; box-shadow:0 4px 14px rgba(0,200,150,.35); transform:translateY(-1px); color:#fff;}
.pagination-bar{display:flex; align-items:center; justify-content:space-between; padding:.75rem 1.25rem; border-top:1px solid #f1f5f9; flex-wrap:wrap; gap:.5rem;}
.pagination-bar .page-info{font-size:.82rem; color:#64748b;}
.pagination-bar .page-info strong{color:#334155;}
.pagination-custom{display:flex; align-items:center; gap:4px; list-style:none; margin:0; padding:0;}
.pagination-custom li a, .pagination-custom li span, .pagination-custom > a, .pagination-custom > span{display:inline-flex; align-items:center; justify-content:center; min-width:32px; height:32px; padding:0 8px; border-radius:8px; font-size:.82rem; font-weight:500; text-decoration:none; transition:all .15s;}
.pagination-custom li a, .pagination-custom > a{color:var(--sp-text-muted); border:1px solid #e2e8f0; background:#fff;}
.pagination-custom li a:hover, .pagination-custom > a:hover{background:var(--sp-primary-soft); border-color:var(--sp-primary); color:var(--sp-primary-dark);}
.pagination-custom li span.current, .pagination-custom > span.current{background:var(--sp-primary-strong); color:#fff; border:1px solid var(--sp-primary); font-weight:600; box-shadow:0 2px 6px rgba(0,200,150,.30);}
.pagination-custom span.ellipsis{border:none; background:none; color:#94a3b8; min-width:24px;}
.side-topsingles{padding: 8px 14px 4px; display:flex; flex-direction:column; gap:2px; border-bottom:1px dashed #e6edea; margin-bottom:4px;}
.side-topsingles .side-item{padding:8px 12px;}
.legend-bar{display:flex; flex-wrap:wrap; gap:14px; padding:8px 14px; background:#f6faf8; border:1px solid var(--sp-border); border-radius:8px; font-size:.78rem; color:#52606d; margin-bottom:12px;}
.legend-bar span{display:inline-flex; align-items:center;}
.legend-bar em{width:12px; height:12px; border-radius:3px; margin-right:5px; display:inline-block; font-style:normal;}
.cal-scroll{overflow-x:auto; border:1px solid var(--sp-border); border-radius:10px; background:#fff;}
.grid-table2{width:100%; border-collapse:collapse; table-layout:fixed; font-size:.78rem; min-width:1100px;}
.grid-table2 thead th, .grid-table2 thead td{background:#eef3f1; border:1px solid #d3dbd7; padding:6px 2px; text-align:center; font-weight:600; color:#3c4a45;}
.grid-table2 thead td.corner{background:#e3ece9; width:84px;}
.grid-table2 thead th.corner{background:#e3ece9; width:84px;}
.grid-table2 tbody td{border:1px solid #c3ccC8; padding:0; text-align:center; vertical-align:middle; height:30px;}
.grid-table2 tbody td.corner{background:#f3f7f5; font-weight:600; color:#334;}
.grid-table2 tbody td.td2{font-size:.66rem; line-height:15px;}
.grid-table2 tbody td.day-zm{background:#f1f1f1;}
.grid-table2 tbody tr:hover td{background:#f7fbfa;}
.grid-table2 .name-cell{background:#f3f7f5; font-weight:600; color:#334; font-size:.8rem;}
.tb-task{display:block; height:15px; line-height:15px; text-decoration:none; color:#1b1b1b; font-size:.62rem; overflow:hidden; white-space:nowrap;}
.tb-task.am{width:50%; float:left;}
.tb-task.pm{width:50%; float:right;}
.tb-task.all{width:100%;}
.tb-task.bcTS{background:#3366ff; color:#fff;}
.tb-task.bcQJ{background:#ff3b30; color:#fff;}
.tb-task.bcFXC{background:#82d900;}
.tb-task.shy{background:#ffb6c1;}
.tb-task.sxshy{background:#a0522d; color:#fff;}
.tb-task.jszj{background:#2e8b57; color:#fff;}
.tb-task.bcISO{background:#ffe600;}
.legend-bar em.lg-TS{background:#3366ff;}
.legend-bar em.lg-QJ{background:#ff3b30;}
.legend-bar em.lg-FXC{background:#82d900;}
.legend-bar em.lg-SHY{background:#ffb6c1;}
.legend-bar em.lg-SXSHY{background:#a0522d;}
.legend-bar em.lg-JSZJ{background:#2e8b57;}
.legend-bar em.lg-ISO{background:#ffe600;}
.progress-tab{background:#f3f7f5; border:1px solid var(--sp-border); border-bottom:none; border-radius:10px 10px 0 0; padding:.55rem 1.2rem; font-weight:600; font-size:.88rem; color:var(--sp-primary-dark,#00A87C);}
.progress-grid{width:100%; border-collapse:collapse; border:1px solid var(--sp-border); font-size:.74rem; min-width:2400px;}
.progress-grid thead th{background:#eef3f1; border:1px solid #d3dbd7; padding:6px 6px; text-align:center; font-weight:600; color:#3c4a45; white-space:nowrap; position:sticky; top:0;}
.progress-grid tbody td{border:1px solid #e2e8e5; padding:5px 6px; text-align:center; color:#445; white-space:nowrap;}
.progress-grid tbody td.col-red{color:#e23b2e !important; font-weight:600;}
.progress-grid tbody tr:hover td{background:#f0fbf7;}
.site-list-card, .site-form-card{background:transparent;}
.site-tabs{border-bottom:2px solid var(--sp-primary); background:#f8f9fc; border-radius:8px 8px 0 0; padding:4px 6px 0; display:flex; margin-bottom:0; list-style:none;}
.site-tabs .nav-item{margin-bottom:0;}
.site-tabs .nav-link{border:none; color:#555; padding:8px 18px; font-size:14px; font-weight:500; background:transparent;}
.site-tabs .nav-link.active{color:var(--sp-primary); background:#fff; border-bottom:2px solid var(--sp-primary); font-weight:600;}
.site-table{font-size:13px;}
.site-table thead th{background:#f0f4f8; color:#333; font-weight:600; white-space:nowrap;}
.site-table tbody tr:hover{background:#f8fafc;}
.scope-icon{color:var(--sp-primary); cursor:pointer;}
.sp-modal{position: fixed; inset: 0; z-index: 1080; display: flex; align-items: flex-start; justify-content: center; padding: 6vh 16px 16px;}
.sp-modal[hidden]{display: none;}
.sp-modal-backdrop{position: absolute; inset: 0; background: rgba(15, 30, 25, .45); backdrop-filter: blur(1px); animation: spFade .16s ease;}
@keyframes spFade{from{opacity: 0;}
to{opacity: 1;}
}
@keyframes spSlide{from{opacity: 0; transform: translateY(-14px);}
to{opacity: 1; transform: translateY(0);}
}
.sp-modal.is-confirm{align-items: center; padding: 16px;}
.sp-modal.is-confirm .sp-modal-backdrop{animation: none; backdrop-filter: none; background: rgba(15,30,25,.5);}
.sp-modal.is-confirm .sp-confirm-dialog{animation: none;}
.sp-confirm-dialog{position: relative; width: 100%; max-width: 400px; background: #fff; border-radius: 14px; box-shadow: 0 18px 50px rgba(0,0,0,.28); overflow: hidden; animation: spSlide .2s ease;}
.sp-confirm-body{display: flex; gap: 14px; align-items: flex-start; padding: 22px 22px 18px;}
.sp-confirm-ico{flex: 0 0 auto; width: 44px; height: 44px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 22px; background: #fff4e5; color: #f59e0b;}
.sp-confirm-text{flex: 1; font-size: 14px; line-height: 1.6; color: var(--sp-text); padding-top: 3px;}
.sp-confirm-text b{color: var(--sp-primary-dark); font-weight: 600;}
.sp-confirm-actions{display: flex; justify-content: flex-end; gap: 10px; padding: 0 22px 20px;}
.sp-confirm-actions .btn{min-width: 76px;}
.sp-toast{position: fixed; left: 50%; bottom: 34px; transform: translateX(-50%) translateY(20px); z-index: 1200; display: flex; align-items: center; gap: 9px; background: #fff; color: var(--sp-text); border: 1px solid var(--sp-border); border-left: 4px solid var(--sp-primary); padding: 11px 18px 11px 15px; border-radius: 10px; box-shadow: 0 12px 30px rgba(0,0,0,.16); font-size: 13.5px; opacity: 0; pointer-events: none; transition: opacity .2s ease, transform .2s ease;}
.sp-toast.show{opacity: 1; transform: translateX(-50%) translateY(0);}
.sp-toast i{color: var(--sp-primary); font-size: 17px;}
.contract-page .table-contract{font-size: .85rem; margin-bottom: 0;}
.contract-page .table-contract thead th{background: #f5f6fa; color: #444; font-weight: 600; border-bottom: 2px solid #dee2e6; text-align: center; white-space: nowrap; font-size: .8rem;}
.contract-page .table-contract tbody td{text-align: center; vertical-align: middle; padding: .45rem .4rem;}
.contract-page .table-contract tbody tr:hover{background: #f8faff;}
.contract-page .note-cell{max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.xlist-page{max-width: 980px; margin: 0 auto;}
.xlist-back{display: inline-flex; align-items: center; gap: 5px; padding: 6px 16px; border-radius: 7px; font-size: .82rem; color: #475569; background: #fff; border: 1px solid #e2e8f0; text-decoration: none; margin-bottom: 14px; transition: all .15s;}
.xlist-back:hover{background: #f1f5f9; border-color: #cbd5e1; color: #334155;}
.xlist-page .nav-tabs{border-bottom: 2px solid #e2e8f0; margin-bottom: 0;}
.xlist-page .nav-tabs .nav-link{padding: 9px 20px; font-size: .85rem; color: #64748b; border: 1px solid transparent; border-bottom: none; border-radius: 8px 8px 0 0; margin-right: 2px; transition: all .15s;}
.xlist-page .nav-tabs .nav-link:hover{color: #334155; background: #f8fafc; border-color: #e2e8f0;}
.xlist-page .nav-tabs .nav-link.active{color: var(--sp-primary-dark); background: #fff; border-color: var(--sp-border); border-bottom-color: #fff; font-weight: 600;}
.xlist-tab-content{background: #fff; border: 1px solid #e2e8f0; border-top: none; border-radius: 0 0 10px 10px; padding: 16px; min-height: 80px;}
.xlist-tab-content .tab-pane{display: none;}
.xlist-tab-content .tab-pane.active{display: block;}
/* ===== 按钮语义类标准（全站收口，新增页面请直接用语义类，勿再手写 btn btn-* 组合）=====
   查询=btn-search  清空=btn-reset  新增=btn-add（行内加行用 btn-add-row）
   保存/提交=btn-submit  次要/取消=btn-button  删除=lp-action.del（别名 btn-del/del-link/row-act.del/c-del）
   编辑=btn-edit  上传=btn-upload  导出=btn-export-csv / btn-download
   检索区统一走 {% lp_search_card %}（自动渲染 btn-search / btn-reset，见 lp_components.py）
   ============================================================================ */
/* Bootstrap 4.6 无 .btn-xs：历史模板 btn btn-xs btn-* 尺寸会失效（按钮偏大）。
   统一收敛到 sm 档，不再引入第三档尺寸；局部页面若有更具体的 .btn-xs 定义（如 edit_super）仍优先生效。 */
.btn.btn-xs{padding: .25rem .5rem; font-size: .875rem; line-height: 1.5; border-radius: .2rem;}
.btn-xs-danger{padding: 3px 10px; font-size: .72rem; border-radius: 5px; background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; cursor: pointer; transition: all .12s;}
.btn-xs-danger:hover{background: #fee2e2;}
.note-row{display: flex; gap: 10px; margin-top: 12px;}
.note-row textarea{flex: 1; height: 50px; border: 1px solid #d1d5db; border-radius: 7px; padding: 8px 10px; font-size: .82rem; resize: vertical;}
.note-row textarea:focus{border-color: var(--sp-primary); outline: none; box-shadow: 0 0 0 2px rgba(0,200,150,.12);}
.save-row{text-align: center; padding: 14px 0 4px; display: flex; align-items: center; justify-content: center; gap: 22px;}
.save-row .radio-inline{display: flex; gap: 14px;}
.save-row .radio-inline label{font-size: .85rem; cursor: pointer; display: flex; align-items: center; gap: 4px;}
.empty-msg{text-align: center; color: #94a3b8; padding: 20px; font-size: .85rem;}
.grid-table, .grid-table2, .form-table{border-color: var(--sp-border) !important;}
.grid-table th, .grid-table2 th, .form-table th{background: var(--sp-primary) !important; color: #fff !important; border-color: var(--sp-primary-dark) !important; font-weight: 600 !important;}
button.btn-submit, a.btn-submit, input.btn-submit, button.btn-button, a.btn-button, input.btn-button{background: var(--sp-primary-strong) !important; background-image: none !important; border: 1px solid var(--sp-primary-dark) !important; color: #fff !important;}
button.btn-submit:hover, a.btn-submit:hover, input.btn-submit:hover, button.btn-button:hover, a.btn-button:hover, input.btn-button:hover{background: var(--sp-primary-strong-dark) !important; color: #fff !important;}
.ui-tabs-nav{border-bottom: 2px solid var(--sp-border) !important; background: transparent !important;}
.ui-tabs-nav li.ui-tabs-active a, .ui-tabs-nav li.ui-state-active a{color: var(--sp-primary-dark) !important; background: #fff !important; border-color: var(--sp-border) !important; border-bottom-color: #fff !important; font-weight: 600 !important;}
.pages .current, .pagination .page-item.active .page-link, .pagination .active .page-link{background: var(--sp-primary-strong) !important; border-color: var(--sp-primary) !important; color: #fff !important;}
.search-form{background: #fff; border: 1px solid var(--sp-border); border-radius: 10px; padding: 14px 16px; margin-bottom: 1rem;}
.search-form > table{width: 100%; border-collapse: separate; border-spacing: 0;}
.search-form td.left{color: var(--sp-text-muted, #495057); white-space: nowrap; padding: 6px 10px 6px 0; font-size: .85rem; text-align: right; width: 1%; vertical-align: middle;}
.search-form td.right{padding: 4px 12px 4px 4px; vertical-align: middle;}
.search-form td.right .form-control, .search-form td.right select, .search-form td.right input{max-width: 240px;}
.search-form .button-panel{margin: 0; padding-top: 10px;}
.search-form .button-panel .btn{margin-right: 4px;}
@media (max-width: 768px){.search-form > table, .search-form > table tbody, .search-form > table tr, .search-form > table td{display: block; width: 100% !important;}
.search-form td.left{text-align: left; padding: 8px 0 2px; width: auto;}
.search-form td.right{padding: 0 0 8px;}
.search-form td.right .form-control, .search-form td.right select, .search-form td.right input{max-width: 100%; width: 100%;}
.search-form td[colspan]{text-align: center;}
}
.card{border-color: var(--sp-border); border-radius: var(--sp-radius);}
.card-header{background: #fff !important; border-bottom: 1px solid var(--sp-border) !important; padding: 14px 18px 14px 20px !important; font-weight: 600; color: var(--sp-text); position: relative;}
.card-header::before{content: ""; position: absolute; left: 0; top: 12px; bottom: 12px; width: 3px; border-radius: 2px; background: var(--sp-primary);}
.card-header:first-child{border-radius: calc(var(--sp-radius) - 1px) calc(var(--sp-radius) - 1px) 0 0;}
.breadcrumb{background: transparent; padding: 0; margin: 0 0 12px; font-size: .82rem; border-radius: 0;}
.breadcrumb-item + .breadcrumb-item::before{color: var(--sp-border);}
.breadcrumb-item a{color: var(--sp-text-muted); text-decoration: none;}
.breadcrumb-item a:hover{color: var(--sp-primary);}
.breadcrumb-item.active{color: var(--sp-text); font-weight: 500;}
.badge-primary{background-color: var(--sp-primary-strong) !important; color: #fff !important;}
.badge-success{background-color: var(--sp-primary-strong) !important; color: #fff !important;}
.badge-info{background-color: var(--sp-primary-dark) !important; color: #fff !important;}
.badge-warning{background-color: #F59E0B !important; color: #fff !important;}
.badge-danger{background-color: var(--sp-danger) !important; color: #fff !important;}
.badge-secondary, .badge-default{background-color: #94a3b8 !important; color: #fff !important;}
.page-header{display: flex; align-items: center; gap: 10px; margin: 0 0 16px; padding: 0 0 12px; border-bottom: 1px solid var(--sp-border);}
.page-header h1, .page-header h2, .page-header h3, .page-header h4, .page-header h5{margin: 0; font-size: 1.15rem; font-weight: 600; color: var(--sp-text);}
.page-header .bi, .page-header i{color: var(--sp-primary);}
.page-header-bar{display: flex; align-items: center; gap: 12px; padding: 14px 18px; margin-bottom: 16px; background: #fff; border: 1px solid var(--sp-border); border-radius: 10px;}
.page-header-bar h5{margin: 0; font-size: 1.05rem; font-weight: 600; color: var(--sp-text);}
.page-header-bar .header-icon, .page-header-bar .bi, .page-header-bar i{color: var(--sp-primary); font-size: 1.2rem;}
.form-control:focus, .custom-select:focus, select:focus, textarea:focus{border-color: var(--sp-primary) !important; box-shadow: 0 0 0 .2rem rgba(0, 200, 150, .15) !important;}
.app-content a:not(.btn):not(.nav-link){color: var(--sp-primary-dark);}
.app-content a:not(.btn):not(.nav-link):hover{color: var(--sp-primary);}
.nav-tabs .nav-link.active, .nav-link.active{color: var(--sp-primary-strong) !important; border-bottom: 2px solid var(--sp-primary) !important;}
.text-primary{color: var(--sp-primary-dark) !important;}
.dropdown-item.active, .dropdown-item:active{background-color: var(--sp-primary-strong) !important; color: #fff !important;}
.progress-bar{background-color: var(--sp-primary) !important;}
span.blue{color: var(--sp-primary-dark) !important;}
.home-list li a{color: var(--sp-primary-dark) !important;}
.pagination .current{background-color: var(--sp-primary-strong) !important; border-color: var(--sp-primary) !important; color: #fff !important;}
.app-sidebar .menu-item a:hover{background: var(--sp-primary-soft) !important; color: var(--sp-primary-dark) !important;}
.app-sidebar .menu-item a:hover .menu-item-icon{color: var(--sp-primary) !important;}
.app-sidebar .menu-item a.active{background: var(--sp-primary-soft) !important; color: var(--sp-primary-dark) !important; font-weight: 500;}
.app-sidebar .menu-item a.active .menu-item-icon{color: var(--sp-primary) !important;}
.app-sidebar .menu-group-title:hover{background: var(--sp-primary-soft) !important; color: var(--sp-primary-dark) !important;}
.app-sidebar .menu-group-title:hover .menu-group-icon{color: var(--sp-primary-dark) !important;}
.table-hover tbody tr:hover, .table-hover tbody tr:hover > td{background-color: var(--sp-primary-soft) !important;}
.form-check-input:checked{background-color: var(--sp-primary) !important; border-color: var(--sp-primary) !important;}
input[type="checkbox"]:checked, input[type="radio"]:checked{accent-color: var(--sp-primary) !important;}
.btn-outline-primary{color: var(--sp-primary-strong) !important; border-color: var(--sp-primary) !important;}
.btn-outline-primary:hover, .btn-outline-primary:focus, .btn-outline-primary:active{background-color: var(--sp-primary-strong) !important; border-color: var(--sp-primary) !important; color: #fff !important;}
.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus{background-color: var(--sp-primary-strong) !important; border-color: var(--sp-primary) !important; color: #fff !important;}
::selection{background: var(--sp-primary-soft) !important; color: var(--sp-primary-dark) !important;}
.datepicker table tr td.active, .datepicker table tr td.active:hover, .datepicker table tr td.active.disabled, .datepicker table tr td.active.disabled:hover, .datepicker table tr td.range-start, .datepicker table tr td.range-end{background-color: var(--sp-primary-strong) !important; background-image: none !important; border-color: var(--sp-primary) !important; color: #fff !important;}
.datepicker table tr td.today, .datepicker table tr td.today:hover{background-color: var(--sp-primary-soft) !important; background-image: none !important; border-color: var(--sp-primary) !important; color: var(--sp-primary-dark) !important;}
.table thead th, .lp-table thead th, .rp-table thead th, .grid-table thead th, .grid-table2 thead th, .data-table thead th, .einfo-table thead th{background-color: var(--sp-primary-soft) !important; color: var(--sp-text-strong) !important; border-bottom: 1px solid var(--sp-primary) !important;}
.status-nav{display: flex !important; align-items: center !important; flex-wrap: wrap !important; gap: 4px !important; padding: 0 !important; margin: 0 0 16px 0 !important; border-bottom: 1px solid var(--sp-border, #e2e8f0) !important; list-style: none !important; background: transparent !important;}
.status-nav.ui-tabs-nav, .status-nav.ui-widget-header, .status-nav.nav-tabs{border: none !important; background: transparent !important; font-weight: inherit !important; border-radius: 0 !important;}
.status-nav > li, .status-nav > a{position: relative !important; display: inline-flex !important; align-items: center !important; padding: 8px 16px !important; margin: 0 !important; font-size: .875rem !important; font-weight: 500 !important; color: var(--sp-text-muted, #64748b) !important; text-decoration: none !important; border: none !important; border-radius: 6px 6px 0 0 !important; cursor: pointer !important; background: transparent !important; transition: all .2s ease !important; list-style: none !important;}
.status-nav > li > a{display: inline-flex !important; align-items: center !important; padding: 0 !important; color: inherit !important; text-decoration: none !important;}
.status-nav .nav-link{padding: 8px 16px !important; margin: 0 !important; border: none !important; border-radius: 6px 6px 0 0 !important; color: var(--sp-text-muted, #64748b) !important; background: transparent !important; font-size: .875rem !important; font-weight: 500 !important; transition: all .2s ease !important;}
.status-nav .ui-state-default{background: transparent !important; border: none !important;}
.status-nav > li:hover, .status-nav > a:hover, .status-nav .nav-link:hover, .status-nav .ui-state-hover{background: var(--sp-primary-soft, #E6FBF4) !important; color: var(--sp-primary-dark, #00A87C) !important; border: none !important;}
.status-nav > li.active, .status-nav > li.ui-tabs-selected, .status-nav > li.ui-state-active, .status-nav > a.active, .status-nav > a.tab-item.active, .status-nav .nav-link.active, .status-nav .tab-item.active{background: var(--sp-primary-strong) !important; color: #fff !important; border: none !important; border-radius: 6px 6px 0 0 !important; font-weight: 600 !important;}
.status-nav > li.active > a, .status-nav > li.ui-tabs-selected > a, .status-nav > li.ui-state-active > a, .status-nav .nav-link.active, .status-nav .tab-item.active, .status-nav > a.active{color: #fff !important;}
.status-nav > li.active:hover, .status-nav > a.active:hover, .status-nav .nav-link.active:hover, .status-nav .tab-item.active:hover{background: var(--sp-primary-strong) !important; color: #fff !important;}
.status-nav .ui-tabs-selected, .status-nav .ui-state-active{border: none !important;}
.status-nav .cnt-total, .status-nav .tab-badge, .status-nav .status-count{display: inline-block !important; min-width: 18px !important; padding: 1px 7px !important; margin-left: 6px !important; font-size: .75rem !important; font-weight: 600 !important; text-align: center !important; border-radius: 10px !important; background: rgba(0, 0, 0, .08) !important; color: inherit !important;}
.status-nav > li.active .cnt-total, .status-nav > li.active .tab-badge, .status-nav > li.ui-state-active .cnt-total, .status-nav .nav-link.active .cnt-total, .status-nav .tab-item.active .cnt-total, .status-nav > a.active .cnt-total, .status-nav > a.active .tab-badge{background: rgba(255, 255, 255, .25) !important; color: #fff !important;}
.bg-primary.bg-opacity-10{background-color: rgba(0, 123, 255, .10) !important;}
.bg-success.bg-opacity-10{background-color: rgba(40, 167, 69, .10) !important;}
.bg-info.bg-opacity-10{background-color: rgba(23, 162, 184, .10) !important;}
.bg-warning.bg-opacity-10{background-color: rgba(255, 193, 7, .12) !important;}
.bg-danger.bg-opacity-10{background-color: rgba(220, 53, 69, .10) !important;}
.bg-dark.bg-opacity-10{background-color: rgba(33, 37, 41, .10) !important;}
.bg-secondary.bg-opacity-10{background-color: rgba(108, 117, 125, .10) !important; }

/* ============================================================
   统一分页样式 · 历史/自定义结构兜底（2026-07-25）
   对齐 .pagination 共享片段规范：选中=纯品牌绿实底+白字+轻投影；
   默认=白底+细边+灰字；禁用=弱化灰；省略号=无边框灰。
   按钮 32×32、圆角 8px、间距 4px。
   ============================================================ */
.pagination-wrapper, .pagination-wrap, .page-links, .reg-pagination,
.pagination-container, .pages-wrap, .pages,
.pagination:not(.pagination-sm){
  display: flex; align-items: center; flex-wrap: wrap; gap: 4px;
  margin: 0; padding: .75rem 0;
}
/* 分页 ul（含 pagination-sm）在弹性容器内清掉 Bootstrap 默认 margin-bottom:1rem；否则 ul 仅底部留白、统计行相对页码整体下移 */
.pagination-wrapper > .pagination,
.lp-pagination-wrap > .pagination,
.reg-pagination > .pagination,
.pagination-bar > .pagination,
.pagination-container > .pagination,
.page-links > .pagination,
.pagination-wrap > .pagination,
.pages > .pagination,
.pages-wrap > .pagination,
.paginate-area > .pagination{
  margin-bottom: 0;
}
.pagination-wrapper, .pagination-wrap, .page-links, .reg-pagination,
.pagination-container, .pages, .pagination-bar, .paginate-area{ justify-content: flex-start; }
.pagination:not(.pagination-sm){ justify-content: flex-start; }
.pages-wrap{ justify-content: flex-start; }
/* 裸 d-flex justify-content-between 分页容器也聚拢靠左（与 .pagination-wrapper 一致，避免撑开两端） */
.d-flex.justify-content-between:has(> .page-stats){ justify-content: flex-start !important; }
/* 统计恒居数字右侧、二者聚拢靠左（不撑开两端），与模板书写顺序无关（修复"统计在左/数字在右"反过来） */
.d-flex.justify-content-between > .page-stats,
.lp-pagination-wrap > .page-stats,
.pagination-wrapper > .page-stats, .pagination-wrap > .page-stats,
.pagination-container > .page-stats, .reg-pagination > .page-stats,
.page-links > .page-stats, .pages > .page-stats,
.pages-wrap > .page-stats, .pagination-bar > .page-stats, .paginate-area > .page-stats{
  order: 2 !important;
  margin-left: 0 !important;
}
/* 嵌套分页（外层 .pagination-wrapper/.lp-pagination-wrap 内再包一层 d-flex）占满整行，统计仍右对齐 */
.pagination-wrapper > .d-flex,
.lp-pagination-wrap > .d-flex{ width: 100%; }

/* 按钮基础（链接 + 选中/禁用/省略号状态 span/b） */
.pagination-wrapper a, .pagination-wrap a,
.page-links li a, .page-links li span,
.pagination-container a,
.reg-pagination a,
.pages a, .pages ul li a,
.pagination:not(.pagination-sm) a,
.pagination:not(.pagination-sm) span.current,
.pagination:not(.pagination-sm) span.active,
.pagination-wrapper span.current, .pagination-wrapper span.active,
.pagination-wrapper span.disabled, .pagination-wrapper span.ellipsis, .pagination-wrapper span.dot,
.pagination-wrap span.current, .pagination-wrap span.disabled,
.pagination-container span.current, .pagination-container span.active,
.pagination-container span.disabled, .pagination-container span.ellipsis, .pagination-container span.dot,
.page-links li.active span, .page-links li.disabled span, .page-links li.ellipsis span,
.pages ul li b, .pages ul li.disabled, .pages ul li.ellipsis{
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 32px; height: 32px; padding: 0 8px; margin: 0;
  border: 1px solid var(--sp-border); border-radius: 8px;
  font-size: .82rem; font-weight: 500; line-height: 1; text-decoration: none;
  color: var(--sp-text-muted); background: #fff; cursor: pointer;
  transition: color .15s ease, background .15s ease, border-color .15s ease, box-shadow .15s ease;
}
/* hover */
.pagination-wrapper a:hover, .pagination-wrap a:hover,
.page-links li a:hover,
.pagination-container a:hover,
.reg-pagination a:hover,
.pages a:hover, .pages ul li a:hover,
.pagination:not(.pagination-sm) a:hover{
  color: var(--sp-primary-dark); background: var(--sp-primary-soft);
  border-color: var(--sp-primary); z-index: 2;
}
/* 选中 */
.pagination-wrapper span.current, .pagination-wrapper span.active,
.pagination-wrap span.current,
.page-links li.active span,
.pagination-container span.active,
.pages ul li b,
.pagination:not(.pagination-sm) span.current,
.pagination:not(.pagination-sm) span.active{
  background: var(--sp-primary-strong); border-color: var(--sp-primary);
  color: #fff !important; font-weight: 600;
  box-shadow: 0 2px 6px rgba(0, 200, 150, .30); cursor: default;
}
/* 禁用 */
.pagination-wrapper span.disabled, .pagination-wrap span.disabled,
.page-links li.disabled span,
.pagination-container span.disabled,
.pages ul li.disabled,
.pagination:not(.pagination-sm) span.disabled{
  color: #cbd5e1; background: #fff; border-color: var(--sp-border); cursor: default;
}
/* 省略号 */
.pagination-wrapper span.ellipsis, .pagination-wrapper span.dot,
.pagination-wrap span.ellipsis,
.page-links li.ellipsis span,
.pagination-container span.ellipsis, .pagination-container span.dot,
.pages ul li.ellipsis,
.pagination:not(.pagination-sm) span.ellipsis{
  border: none; background: none; color: #94a3b8; min-width: 24px; cursor: default;
}
/* 统计信息 */
.pagination-wrapper .page-stats, .pagination-wrap .page-info,
.pagination-container .page-stats,
.pages .fl,
.pages-wrap .pages-info,
.pagination:not(.pagination-sm) .page-stats,
.pagination:not(.pagination-sm) .step-links{
  font-size: .82rem; color: var(--sp-text-muted);
  border: none !important; background: none !important; min-width: auto; height: auto; padding: 0 4px;
}
.pagination-wrapper .page-stats b, .pagination-wrap .page-info strong,
.pagination-container .page-stats b,
.pages .fl b,
.pages-wrap .pages-info strong,
.pagination:not(.pagination-sm) .page-stats b,
.pagination:not(.pagination-sm) .step-links b{
  color: var(--sp-primary-dark); font-weight: 700; margin: 0 2px;
}
/* 非限定兜底：保证不在 .pagination 容器内的 .page-stats（如 hrm/qualification_alist）也吃到统一灰+品牌绿高亮 */
.page-stats { font-size: .82rem; color: var(--sp-text-muted); border: none !important; background: none !important; min-width: auto; height: auto; padding: 0 4px; }
.page-stats b, .page-stats strong { color: var(--sp-primary-dark); font-weight: 700; margin: 0 2px; }
/* .pagination 容器内末尾统计自动靠右（裸构建器页 / contract / audit_task 等同构页统一数字左、统计右） */
.pagination:not(.pagination-sm) .page-stats:last-child { margin-left: auto; }
/* .pages / .pages-wrap 内部结构 */
.pages ul{ list-style: none; margin: 0; padding: 0; display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.pages ul li{ display: inline-flex; }

/* 统一分页样式·补充(.pagination-bar 直接子元素 / .pagination-info) */
.pagination-bar a,
.pagination-bar span.current,
.pagination-bar span.active,
.pagination-bar span.disabled,
.pagination-bar span.ellipsis{
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 32px; height: 32px; padding: 0 8px; margin: 0;
  border: 1px solid var(--sp-border); border-radius: 8px;
  font-size: .82rem; font-weight: 500; line-height: 1; text-decoration: none;
  color: var(--sp-text-muted); background: #fff; cursor: pointer;
  transition: color .15s ease, background .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.pagination-bar a:hover{ color: var(--sp-primary-dark); background: var(--sp-primary-soft); border-color: var(--sp-primary); z-index: 2; }
.pagination-bar span.current,
.pagination-bar span.active{
  background: var(--sp-primary-strong); border-color: var(--sp-primary);
  color: #fff !important; font-weight: 600; box-shadow: 0 2px 6px rgba(0, 200, 150, .30); cursor: default;
}
.pagination-bar span.disabled{ color: #cbd5e1; background: #fff; border-color: var(--sp-border); cursor: default; }
.pagination-bar span.ellipsis{ border: none; background: none; color: #94a3b8; min-width: 24px; cursor: default; }
.pagination-bar .info,
.pagination-info{ font-size: .82rem; color: var(--sp-text-muted); border: none !important; background: none !important; min-width: auto; height: auto; padding: 0 4px; }
.pagination-bar .info strong,
.pagination-info strong{ color: var(--sp-primary-dark); font-weight: 700; margin: 0 2px; }
/* 补定义：表头文字强色（原 893 规则引用，此前未定义导致文字色回退） */
:root{--sp-text-strong: #0E5C45;}

/* 知产认证机构列橙字提示（全局类：sale/coach/ay/laborfee 等所有引用 .ip-certification 的页面统一生效）。
   仅保留橙字，不画单元格底色，使整行颜色纯净统一（不再出现『知产行里仅认证机构格是另一种黄』的花斑感）。 */
.ip-certification { color: #FF9900; }
