@charset "UTF-8";
/* ============================================================
 * 单一组件库 design-system.css（已移除 Bootstrap CSS）
 * 生成日期: 2026-10-10 | 结构: 变量层 / Reset / 布局 / 组件库 / 工具类 / 页面特例
 * 类名与旧版完全兼容; bootstrap.bundle.min.js 保留用于交互。
 * ============================================================ */
:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}
[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}
*,::after,::before{box-sizing:border-box}
@media  (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth

}}
@media  (min-width:576px){.container,.container-sm{max-width:540px}}
@media  (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}
@media  (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}
@media  (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}
@media  (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}
:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px

}
@media  (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}
@media  (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}
@media  (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}
@media  (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}
@media  (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}
[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}
@media  (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}
[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}
@media  (prefers-reduced-motion:reduce){.fade{transition:none}}
@media  (prefers-reduced-motion:reduce){.collapsing{transition:none}}
@media  (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}
@media  (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}
@media  (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}
@media  (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}
@media  (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}
@media  (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}
@media  (prefers-reduced-motion:reduce){.nav-link{transition:none}}
@media  (min-width:576px){.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}}
@media  (min-width:768px){.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}}
@media  (min-width:992px){.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}}
@media  (min-width:1200px){.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}}
@media  (min-width:1400px){.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}}
.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}
[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}
@media  (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-header,.card-group>.card:not(:last-child)>.card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-footer,.card-group>.card:not(:last-child)>.card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-header,.card-group>.card:not(:first-child)>.card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-footer,.card-group>.card:not(:first-child)>.card-img-bottom{border-bottom-left-radius:0}}
@media  (prefers-reduced-motion:reduce){.accordion-button{transition:none}}
@media  (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}
[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")}
@media  (prefers-reduced-motion:reduce){.progress-bar{transition:none}}
@media  (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}
@media  (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}
@media  (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}
@media  (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}
@media  (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}
@media  (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}
:root,[data-bs-theme=light]{--bs-btn-close-filter: }
[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}
@media  (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}
@media  (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}
@media  (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}
@media  (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}
@media  (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}
@media  (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}
@media  (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}
@media  (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}
@media  (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}
:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff;--bs-carousel-control-icon-filter: }
[data-bs-theme=dark]{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}
@media  (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}
@media  (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}
@media  (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}
@media  (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}
@media  (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}
@media  (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}
@media  (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}
@media  print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap.min.css.map */

/* ===== Unified project styles: Bootstrap support above, public components below. ===== */

/* Bootstrap compatibility: values reference the design tokens below. */
:root,[data-bs-theme="light"]{
 --bs-primary:var(--ds-brand-500);--bs-primary-rgb:var(--ds-brand-rgb);--bs-blue:var(--ds-brand-500);
 --bs-success:var(--ds-success);--bs-success-rgb:24,184,115;
 --bs-warning:var(--ds-warning);--bs-warning-rgb:245,165,36;
 --bs-danger:var(--ds-danger);--bs-danger-rgb:239,68,68;
 --bs-info:var(--ds-info);--bs-info-rgb:var(--ds-brand-rgb);
 --bs-primary-text-emphasis:var(--ds-brand-700);--bs-primary-bg-subtle:var(--ds-brand-50);--bs-primary-border-subtle:var(--ds-brand-100);
 --bs-success-text-emphasis:var(--ds-success-text);--bs-success-bg-subtle:var(--ds-success-soft);--bs-success-border-subtle:var(--ds-success);
 --bs-warning-text-emphasis:var(--ds-warning-text);--bs-warning-bg-subtle:var(--ds-warning-soft);--bs-warning-border-subtle:var(--ds-warning);
 --bs-danger-text-emphasis:var(--ds-danger-text);--bs-danger-bg-subtle:var(--ds-danger-soft);--bs-danger-border-subtle:var(--ds-danger);
 --bs-info-text-emphasis:var(--ds-info-text);--bs-info-bg-subtle:var(--ds-info-soft);--bs-info-border-subtle:var(--ds-brand-100);
 --bs-link-color:var(--ds-brand-500);--bs-link-color-rgb:var(--ds-brand-rgb);--bs-link-hover-color:var(--ds-brand-600);--bs-link-hover-color-rgb:38,96,199;
 --bs-form-valid-color:var(--ds-success-text);--bs-form-valid-border-color:var(--ds-success);
 --bs-form-invalid-color:var(--ds-danger-text);--bs-form-invalid-border-color:var(--ds-danger);
}
/* Design System — Unified Stylesheet
   ============================================================
   目录：
   1.  Design Tokens
   2.  Reset / Base
   3.  Typography
   4.  Application Shell
   5.  Components — Buttons（含按钮文字统一）
   6.  Components — Inputs
   7.  Components — Surfaces（卡片基础）
   8.  Components — Toolbar / Filters
   9.  Components — Tables（mini-table 统一样式）
   10. Components — Pagination
   11. Components — Status / Tags / Badges
   12. Components — Alerts / Empty
   13. Components — Breadcrumb / Tabs
   14. Utilities
   15. Responsive
   16. Sidebar Collapse Menu
   17. Fallbacks
   18. Page-Specific（APP下载 / 采购管理）
   19. Content Area（首页同款）
   20. Page Card（通用列表页卡片）
   21. Chart Color System
   22. Keyfob / Fuelcard Tile
   23. AI Alert List
   24. Table Status Tags
   25. Shared Asset Forms（资产表单通用排版）
   ============================================================ */

/* ============================================================
   1. Design Tokens
   ============================================================ */
:root{
  /* Brand */
  --ds-brand-50:#eef4ff;
  --ds-brand-100:#e7f0ff;
  --ds-brand-500:#3374ea;
  --ds-brand-600:#2660c7;
  --ds-brand-700:#2660c7;
  --ds-primary-500:var(--ds-brand-500);
  --ds-primary-600:var(--ds-brand-600);
  --ds-primary-700:var(--ds-brand-700);

  /* Background */
  --ds-bg-page:#f5f7fb;
  --ds-bg-surface:#ffffff;
  --ds-bg-subtle:#f7f8fc;
  --ds-bg-hover:#f2f5fa;
  --ds-bg-inverse:#10213f;

  /* Text */
  --ds-text-primary:#161a23;
  --ds-text-secondary:#5f6673;
  --ds-text-tertiary:#8b93a1;
  --ds-text-disabled:#b8c0cc;
  --ds-text-inverse:#ffffff;

  /* Border */
  --ds-border:#e2e7ef;
  --ds-border-strong:#d5dce7;

  /* Feedback */
  --ds-success:#18b873;
  --ds-success-soft:#ecfdf5;
  --ds-success-text:#087a4b;
  --ds-warning:#f5a524;
  --ds-warning-soft:#fff7e6;
  --ds-warning-text:#9a5b00;
  --ds-danger:#ef4444;
  --ds-danger-soft:#fef2f2;
  --ds-danger-text:#c93636;
  --ds-info:var(--ds-brand-500);
  --ds-info-soft:#eef4ff;
  --ds-info-text:var(--ds-brand-600);

  /* Typography */
  --ds-font-sans:"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  --ds-font-size-micro:10px;
  --ds-font-size-tiny:11px;
  --ds-font-size-body:14px;
  --ds-line-body:22px;
  --ds-font-size-small:12px;
  --ds-line-small:20px;
  --ds-font-size-meta:13px;
  --ds-font-size-section:15px;
  --ds-font-size-h1:28px;
  --ds-line-h1:40px;
  --ds-font-size-h2:20px;
  --ds-line-h2:28px;
  --ds-font-size-h3:16px;
  --ds-line-h3:24px;
  --ds-weight-regular:500;
  --ds-weight-medium:500;
  --ds-weight-semibold:600;

  /* Spacing */
  --ds-space-1:4px;
  --ds-space-2:8px;
  --ds-space-3:12px;
  --ds-space-4:16px;
  --ds-space-5:20px;
  --ds-space-6:24px;
  --ds-space-8:32px;

  /* Radius */
  --ds-radius-sm:4px;
  --ds-radius-md:6px;
  --ds-radius-lg:8px;
  --ds-radius-xl:12px;
  --ds-radius-pill:999px;

  /* Shadow */
  --ds-shadow-xs:none;
  --ds-shadow-sm:none;
  --ds-shadow-md:0 8px 24px rgba(15,23,42,.08);
  --ds-shadow-lg:0 16px 40px rgba(15,23,42,.12);

  /* Control */
  --ds-control-sm:28px;
  --ds-control-md:32px;
  --ds-control-lg:36px;
  --ds-control-padding-x:16px;

  /* Shell */
  --ds-header-height:50px;
  --ds-brand-height:50px;
  --ds-sidebar-width:210px;
  --ds-nav-height:40px;

  /* Shared control and table tokens */
  --ds-brand-rgb:51,116,234;
  --ds-control-size:var(--ds-control-md);
  --ds-control-radius:6px;
  --ds-focus-ring:0 0 0 3px rgba(var(--ds-brand-rgb),.12);
  --ds-table-head-bg:#f1f5f9;
  --ds-table-stripe-bg:#fafbfd;

  --chart-primary:        var(--ds-brand-500);
  --chart-primary-deep:   var(--ds-brand-600);
  --chart-primary-soft:   #cfe0fb;
  --chart-c1: var(--ds-brand-500);
  --chart-c2: #45b1ee;
  --chart-c3: #46bfbc;
  --chart-c4: #5089d9;
  --chart-c5: #7c9cf0;
  --chart-c6: #94b8f2;
  --chart-c7: #a8c8f4;
  --kpi-budget:   #3977f8;
  --kpi-sales:    #45b1ee;
  --kpi-deal:     #46bfbc;
  --kpi-traffic:  #5089d9;
  --chart-up:     #18b873;
  --chart-down:   #e5533d;
  --chart-warn:   #f59e0b;
  --chart-info:   #3b82f6;
  --chart-axis:   #94a3b8;
  --chart-grid:   #edf1f6;
  --chart-label:  #64748b;
  --chart-bg:     #ffffff;
  --chart-tooltip-bg: #1e293b;

  --ds-page-tabs-height:40px;
}

/* ============================================================
   2. Reset / Base
   ============================================================ */
*,*::before,*::after{box-sizing:border-box}

html,body{
  width:100%;height:100vh;height:100dvh;
  margin:0;overflow:hidden;
  font-family:var(--ds-font-sans);
  font-size:var(--ds-font-size-body);
  font-weight:var(--ds-weight-regular);
  line-height:var(--ds-line-body);
  color:var(--ds-text-primary);
  background:var(--ds-bg-page);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}

button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none}
a{color:var(--ds-brand-500);text-decoration:none}
a:hover{color:var(--ds-brand-600)}
h1,h2,h3,h4,h5,h6,p,ul,ol,dl,dd{margin:0}
h1,h2,h3,h4,h5,h6{font-weight:var(--ds-weight-semibold)}
b,strong{font-weight:var(--ds-weight-semibold)}
.fw-normal,.fw-medium{font-weight:var(--ds-weight-regular) !important}
.fw-bold,.fw-semibold{font-weight:var(--ds-weight-semibold) !important}
ul,ol{padding:0;list-style:none}
img,svg{display:block;max-width:100%}

::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--ds-border-strong);border-radius:var(--ds-radius-pill)}
::-webkit-scrollbar-thumb:hover{background:#b8c0cc}

:focus-visible{outline:2px solid var(--ds-brand-500);outline-offset:2px}
button:disabled,[aria-disabled="true"]{cursor:not-allowed;opacity:.45}

.sr-only,.skip-link{
  position:absolute!important;width:1px;height:1px;
  padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0;
}
.skip-link:focus{
  position:fixed!important;top:8px;left:8px;z-index:100;
  width:auto;height:auto;margin:0;padding:8px 12px;
  clip:auto;white-space:normal;
  background:var(--ds-bg-surface);color:var(--ds-brand-500);
}

[data-app-icon]{
  display:inline-flex;align-items:center;justify-content:center;
  width:1em;height:1em;flex:0 0 auto;line-height:1;
}
[data-app-icon] svg{width:100%;height:100%;display:block}
.td-icon,.ico{
  display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;flex:0 0 auto;line-height:0;
}
.td-icon svg,.ico svg{
  width:100%;height:100%;display:block;
  fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round;
}

/* ============================================================
   3. Typography
   ============================================================ */
h1,.page-title{
  font-size:var(--ds-font-size-h1);
  line-height:var(--ds-line-h1);
  font-weight:var(--ds-weight-semibold);
  color:var(--ds-text-primary);
  margin:0 0 var(--ds-space-6);
}
h2{font-size:var(--ds-font-size-h2);line-height:var(--ds-line-h2);font-weight:var(--ds-weight-semibold)}
h3{font-size:var(--ds-font-size-h3);line-height:var(--ds-line-h3);font-weight:var(--ds-weight-semibold)}
small,.hint,.muted{font-size:var(--ds-font-size-small);line-height:var(--ds-line-small);color:var(--ds-text-tertiary)}

/* ============================================================
   4. Application Shell
   ============================================================ */
.app{width:100%;height:100vh;height:100dvh;min-width:0;display:flex;overflow:hidden}

.sidebar{
  width:var(--ds-sidebar-width);min-width:var(--ds-sidebar-width);
  height:100vh;height:100dvh;
  flex:0 0 var(--ds-sidebar-width);
  display:flex;flex-direction:column;overflow:hidden;
  background:linear-gradient(180deg,#10213f 0%,#0c1c37 100%);
  color:#bdc9dc;
}
.sidebar>.brand{
  width:100%;height:var(--ds-brand-height);min-height:var(--ds-brand-height);
  flex:0 0 var(--ds-brand-height);
  padding:0 15px;display:flex;align-items:center;gap:10px;
  border-bottom:1px solid rgba(255,255,255,.08);overflow:hidden;
}
.brand-mark{
  width:28px;height:28px;flex:0 0 28px;
  display:grid;place-items:center;border-radius:6px;
  background:var(--ds-brand-500);
  box-shadow:0 4px 10px rgba(21,91,221,.28);
  color:#fff;font-size:var(--ds-font-size-body);font-weight:600;
}
.brand b{color:#fff;font-size:var(--ds-font-size-meta);font-weight:600;line-height:20px;white-space:nowrap}
.brand small{color:#94a3b8;font-size:var(--ds-font-size-micro);line-height:16px;white-space:nowrap}

.sidebar>.nav{
  min-height:0;
  flex:1 1 auto;
  padding:8px 8px 20px;
  overflow-x:hidden;
  overflow-y:auto;
  overflow-anchor:none;
  overscroll-behavior-y:contain;
  scrollbar-gutter:stable;
  scrollbar-width:thin;
  scrollbar-color:#354967 transparent;

  display:block;
}
.nav-title{
  height:32px;padding:8px 8px 6px;
  color:#8391aa;font-size:var(--ds-font-size-small);line-height:18px;
  font-weight:500;letter-spacing:.01em;
}
.sidebar .nav-item{
  width:100%;height:var(--ds-nav-height);min-height:var(--ds-nav-height);
  padding:0 8px;display:grid;
  grid-template-columns:16px minmax(0,1fr) 16px;
  align-items:center;column-gap:8px;border-radius:7px;
  color:#bdc9dc;background:transparent;
  font-size:var(--ds-font-size-body);line-height:20px;font-weight:500;
  cursor:pointer;
  transition:background-color .12s ease,color .12s ease;

  margin-bottom:4px;
}
.sidebar .nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
.sidebar .nav-item.active{background:var(--ds-brand-500);color:#fff;box-shadow:0 6px 16px rgba(11,82,204,.24)}
.sidebar .nav-item>span:nth-child(2),
.nav-sub-item>span{min-width:0;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar .nav-item>b:last-child,.sidebar .nav-item>span:last-child:not(:nth-child(2)){justify-self:end;text-align:center;color:#8e97af}

.subnav{padding:2px 0 4px}
.subnav div{
  padding:9px 10px 9px 44px;color:#aebbd1;
  font-size:12.5px;border-radius:4px;cursor:pointer;
  transition:background-color .12s ease,color .12s ease;
}
.subnav div:hover{color:#fff;background:rgba(255,255,255,.05)}
.subnav .selected{color:#fff;background:#1e3060;border-left:3px solid var(--ds-brand-500);padding-left:41px}

.main{
  height:100vh;height:100dvh;
  min-width:0;max-width:100%;
  flex:1 1 auto;
  display:flex;flex-direction:column;
  overflow:hidden;
  background:var(--ds-bg-page);
}

.topbar{
  width:100%;height:var(--ds-header-height);min-height:var(--ds-header-height);
  flex:0 0 var(--ds-header-height);
  padding:0 20px 0 8px;
  display:flex;align-items:center;justify-content:space-between;
  gap:8px;
  position:relative;z-index:20;
  border-bottom:1px solid var(--ds-border);
  background:rgba(255,255,255,.97);
  box-shadow:0 1px 0 rgba(16,24,40,.02);
  backdrop-filter:blur(10px);
}
.topbar .crumb,.topbar .breadcrumbs{display:flex;align-items:center;gap:8px;min-width:0;color:#888;font-size:var(--ds-font-size-body)}
.topbar .crumb b,.topbar .breadcrumbs b{color:#333;font-weight:500}
.topbar .top-actions,.topbar .header-actions,.topbar .top-right{margin-left:auto;display:flex;align-items:center;gap:12px;white-space:nowrap}
.platform-title{color:var(--ds-text-primary);font-size:var(--ds-font-size-section);font-weight:600;letter-spacing:.01em}

.global-search{position:relative;width:354px;max-width:100%;height:36px;display:flex;align-items:center}
.global-search [data-app-icon="search"]{position:absolute;left:15px;width:18px;height:18px;color:#56657c;pointer-events:none}
.global-search input{
  width:100%;padding-left:46px;
}


.update-time{height:32px;display:flex;align-items:center;gap:6px;color:#667085;font-size:var(--ds-font-size-small);white-space:nowrap}
.update-time [data-app-icon]{width:14px;height:14px;color:#667085}

.icon-control,.user-control{
  height: 32px;padding:0;display:inline-flex;align-items:center;
  border:0;border-radius:7px;background:transparent;
  color:#25324a;cursor:pointer;
  transition:background-color .13s ease,transform .13s ease;
}
.icon-control:hover,.user-control:hover{background:var(--ds-bg-hover)}
.icon-control:active,.user-control:active{transform:scale(.96)}
.icon-control{position:relative;width:40px;justify-content:center}
.icon-control [data-app-icon]{width:20px;height:20px;color:#4d5b71}
.notification-control b{
  position:absolute;right:4px;top:0;
  min-width:17px;height:17px;padding:0 4px;
  border:2px solid #fff;border-radius:9px;
  background:#ec3f42;color:#fff;
  font-size:var(--ds-font-size-micro);line-height:13px;font-weight:600;
}
.user-control{gap:8px;padding:0 5px;font-size:var(--ds-font-size-meta);font-weight:500}
.user-control>.ds-icon{font-size:var(--ds-font-size-body);color:#2d3c55;transition:transform .18s ease}
.user-control[aria-expanded="true"]>.ds-icon{transform:rotate(180deg)}
.user-avatar{
  width:25px;height:25px;display:inline-grid;place-items:center;
  border-radius:50%;background:var(--ds-brand-500);color:#fff;
}

.workspace{
  width:100%;
  min-width:0;
  max-width:none;
  flex:1 1 auto;
  margin:0;
  padding:16px;
  overflow-x:hidden;
  overflow-y:auto;
  background:var(--ds-bg-page);
}

.sidebar-scrim{display:none}
.sidebar-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 32px;width:32px;height:32px;padding:0;border:0;border-radius:var(--ds-control-radius);background:transparent;color:var(--ds-text-primary);cursor:pointer}
.sidebar-toggle:hover{background:var(--ds-bg-hover)}
.sidebar-toggle:focus-visible{outline:2px solid var(--ds-brand-500);outline-offset:2px}
.sidebar-toggle>.ds-icon{font-size:20px}
.sidebar-toggle[aria-expanded="false"]>.ds-icon{transform:scaleX(-1)}

/* ============================================================
   5. Components — Buttons
   ============================================================ */
/* One button foundation; legacy names are compatible aliases. */
/* Phosphor Icons 2.1.2 — MIT; license: ../phosphor/LICENSE.
   Shared icon component; add glyph mappings here when a new icon is used. */
@font-face{font-family:Phosphor;src:url("../phosphor/fonts/Phosphor.woff2") format("woff2");font-style:normal;font-weight:400;font-display:block}
@font-face{font-family:Phosphor-Fill;src:url("../phosphor/fonts/Phosphor-Fill.woff2") format("woff2");font-style:normal;font-weight:400;font-display:block}
.ds-icon{--ds-icon-font:Phosphor;display:inline-block;flex-shrink:0;font-family:var(--ds-icon-font);font-style:normal;font-weight:400;font-variant:normal;font-size:1em;line-height:1;letter-spacing:0;text-transform:none;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.ds-icon::before{content:var(--ds-icon-glyph)}
.ds-icon[hidden]{display:none}
:where(.sidebar) .ds-icon,.ds-icon--fill{--ds-icon-font:Phosphor-Fill}
.ph-arrow-counter-clockwise{--ds-icon-glyph:"\e038"}
.ph-bell{--ds-icon-glyph:"\e0ce"}
.ph-book-open{--ds-icon-glyph:"\e0e6"}
.ph-car{--ds-icon-glyph:"\e112"}
.ph-caret-down{--ds-icon-glyph:"\e136"}
.ph-chart-bar{--ds-icon-glyph:"\e150"}
.ph-clipboard-text{--ds-icon-glyph:"\e198"}
.ph-clock-counter-clockwise{--ds-icon-glyph:"\e1a0"}
.ph-cpu{--ds-icon-glyph:"\e610"}
.ph-database{--ds-icon-glyph:"\e1de"}
.ph-download-simple{--ds-icon-glyph:"\e20c"}
.ph-eye{--ds-icon-glyph:"\e220"}
.ph-eye-closed{--ds-icon-glyph:"\e222"}
.ph-file-csv{--ds-icon-glyph:"\eb1c"}
.ph-file-xls{--ds-icon-glyph:"\eb22"}
.ph-flask{--ds-icon-glyph:"\e79e"}
.ph-floppy-disk{--ds-icon-glyph:"\e248"}
.ph-gauge{--ds-icon-glyph:"\e628"}
.ph-hard-drives{--ds-icon-glyph:"\e2a0"}
.ph-house{--ds-icon-glyph:"\e2c2"}
.ph-info{--ds-icon-glyph:"\e2ce"}
.ph-text-outdent{--ds-icon-glyph:"\ea1c"}
.ph-list{--ds-icon-glyph:"\e2f0"}
.ph-list-bullets{--ds-icon-glyph:"\e2f2"}
.ph-magnifying-glass{--ds-icon-glyph:"\e30c"}
.ph-monitor{--ds-icon-glyph:"\e32e"}
.ph-plus{--ds-icon-glyph:"\e3d4"}
.ph-robot{--ds-icon-glyph:"\e762"}
.ph-shield-check{--ds-icon-glyph:"\e40c"}
.ph-shopping-cart{--ds-icon-glyph:"\e41e"}
.ph-sign-out{--ds-icon-glyph:"\e42a"}
.ph-stack{--ds-icon-glyph:"\e466"}
.ph-test-tube{--ds-icon-glyph:"\e7a0"}
.ph-toolbox{--ds-icon-glyph:"\eca0"}
.ph-upload-simple{--ds-icon-glyph:"\e4c0"}
.ph-user{--ds-icon-glyph:"\e4c2"}
.ph-user-circle{--ds-icon-glyph:"\e4c4"}
.ph-user-gear{--ds-icon-glyph:"\e4cc"}
.ph-users{--ds-icon-glyph:"\e4d6"}
.ph-video-camera{--ds-icon-glyph:"\e4da"}
.ph-warning{--ds-icon-glyph:"\e4e0"}
.ph-wrench{--ds-icon-glyph:"\e5d4"}

.ph-car-profile{--ds-icon-glyph:"\e8cc"}
.ph-credit-card{--ds-icon-glyph:"\e1d2"}
.ph-folder-open{--ds-icon-glyph:"\e256"}
.ph-gas-pump{--ds-icon-glyph:"\e768"}
.ph-globe{--ds-icon-glyph:"\e288"}
.ph-key{--ds-icon-glyph:"\e2d6"}
.ph-play-circle{--ds-icon-glyph:"\e3d2"}
.ph-squares-four{--ds-icon-glyph:"\e464"}
.ph-truck{--ds-icon-glyph:"\e4b4"}

/* 公共页面标签栏：默认、悬停、当前状态；交互由公共 JS 管理。 */
.page-tabs{height:var(--ds-page-tabs-height);min-height:var(--ds-page-tabs-height);flex:0 0 var(--ds-page-tabs-height);display:flex;align-items:stretch;min-width:0;background:var(--ds-bg-surface);border-bottom:1px solid var(--ds-border);position:relative;z-index:11}
.page-tabs__list{display:flex;align-items:stretch;gap:0;flex:1 1 auto;min-width:0;padding:3px 4px 0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
.page-tabs__list::-webkit-scrollbar{display:none}
.page-tab{position:relative;display:flex;align-items:center;flex:0 0 auto;max-width:240px;min-width:0;background:var(--ds-bg-surface);border-radius:var(--ds-control-radius) var(--ds-control-radius) 0 0;color:var(--ds-text-primary)}
.page-tab:not(:last-child):not([aria-current="page"]):not(:has(+ .page-tab[aria-current="page"]))::after{content:"";position:absolute;right:0;top:50%;width:1px;height:16px;transform:translateY(-50%);background:var(--ds-border);pointer-events:none}
.page-tab:not([aria-current="page"]):hover{background:var(--ds-bg-hover)}
.page-tab[aria-current="page"]{background:var(--ds-brand-100);color:var(--ds-brand-500)}
.page-tab__link{display:flex;align-items:center;gap:8px;min-width:0;padding:0 8px 0 12px;height:100%;color:inherit;text-decoration:none;font-size:var(--ds-font-size-body);line-height:var(--ds-line-body);white-space:nowrap}
.page-tab__link:hover{color:inherit}
.page-tab__link>span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.page-tab__link>.ds-icon{font-size:var(--ds-font-size-h3);flex:0 0 16px}
.page-tab__close,.page-tabs__control{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;border:0;background:transparent;color:var(--ds-text-secondary);cursor:pointer}
.page-tab__close{color:inherit;width:24px;height:24px;margin-right:6px;border-radius:var(--ds-control-radius);font-size:var(--ds-font-size-small)}
.page-tabs__control{width:34px;border-inline-end:1px solid var(--ds-border);font-size:var(--ds-font-size-h3)}
.page-tabs__control:last-child{border-inline-end:0;border-inline-start:1px solid var(--ds-border)}
.page-tab__close:hover,.page-tabs__control:hover{background:var(--ds-bg-hover);color:var(--ds-brand-500)}
.page-tab__link:focus-visible,.page-tab__close:focus-visible,.page-tabs__control:focus-visible{outline:2px solid var(--ds-brand-500);outline-offset:-2px}

.ph-x{--ds-icon-glyph:"\e4f6"}

.ph-caret-double-left{--ds-icon-glyph:"\e128"}

.ph-caret-double-right{--ds-icon-glyph:"\e12a"}

.ph-arrow-clockwise{--ds-icon-glyph:"\e036"}


.page-tabs__menu{position:absolute;top:100%;right:34px;z-index:12;min-width:200px;max-width:min(320px,calc(100vw - 16px));max-height:60vh;padding:6px;overflow-y:auto;background:var(--ds-bg-surface);border:1px solid var(--ds-border);border-radius:var(--ds-control-radius)}
.page-tabs__menu-item{display:flex;align-items:center;gap:8px;width:100%;min-height:32px;padding:6px 10px;border:0;border-radius:var(--ds-control-radius);background:transparent;color:var(--ds-text-primary);font:inherit;font-size:var(--ds-font-size-body);line-height:var(--ds-line-body);text-align:left;text-decoration:none;cursor:pointer}
.page-tabs__menu-item:hover,.page-tabs__menu-item:focus-visible{background:var(--ds-bg-hover);color:var(--ds-brand-500);outline:0}
.page-tabs__menu-item[aria-current="page"]{color:var(--ds-brand-500);background:var(--ds-brand-50)}
.page-tabs__menu-item>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.page-tabs__divider{margin:6px 0;border:0;border-top:1px solid var(--ds-border);opacity:1}
.main.is-page-fullscreen{position:fixed;inset:0;z-index:100;width:100%;max-width:none}
.main.is-page-fullscreen>.topbar{display:none}

.ph-address-book{--ds-icon-glyph:"\e6f8"}
.ph-android-logo{--ds-icon-glyph:"\e008"}
.ph-apple-logo{--ds-icon-glyph:"\e516"}
.ph-arrow-left{--ds-icon-glyph:"\e058"}
.ph-arrow-right{--ds-icon-glyph:"\e06c"}
.ph-arrow-u-up-left{--ds-icon-glyph:"\e08a"}
.ph-arrows-left-right{--ds-icon-glyph:"\e0a0"}
.ph-broadcast{--ds-icon-glyph:"\e0f2"}
.ph-calendar-check{--ds-icon-glyph:"\e712"}
.ph-caret-left{--ds-icon-glyph:"\e138"}
.ph-caret-right{--ds-icon-glyph:"\e13a"}
.ph-chart-line{--ds-icon-glyph:"\e154"}
.ph-chart-pie{--ds-icon-glyph:"\e158"}
.ph-chats{--ds-icon-glyph:"\e17c"}
.ph-check{--ds-icon-glyph:"\e182"}
.ph-check-circle{--ds-icon-glyph:"\e184"}
.ph-checks{--ds-icon-glyph:"\e53a"}
.ph-circle-notch{--ds-icon-glyph:"\eb44"}
.ph-clock{--ds-icon-glyph:"\e19a"}
.ph-coins{--ds-icon-glyph:"\e78e"}
.ph-corners-in{--ds-icon-glyph:"\e1ce"}
.ph-file-code{--ds-icon-glyph:"\e914"}
.ph-file-text{--ds-icon-glyph:"\e23a"}
.ph-file-zip{--ds-icon-glyph:"\e958"}
.ph-hand{--ds-icon-glyph:"\e298"}
.ph-handshake{--ds-icon-glyph:"\e582"}
.ph-heartbeat{--ds-icon-glyph:"\e2ac"}
.ph-link{--ds-icon-glyph:"\e2e2"}
.ph-link-simple{--ds-icon-glyph:"\e2e6"}
.ph-list-checks{--ds-icon-glyph:"\eadc"}
.ph-magic-wand{--ds-icon-glyph:"\e6b6"}
.ph-map-pin{--ds-icon-glyph:"\e316"}
.ph-package{--ds-icon-glyph:"\e390"}
.ph-paper-plane{--ds-icon-glyph:"\e394"}
.ph-paper-plane-tilt{--ds-icon-glyph:"\e398"}
.ph-pen{--ds-icon-glyph:"\e3aa"}
.ph-pencil-simple{--ds-icon-glyph:"\e3b4"}
.ph-play{--ds-icon-glyph:"\e3d0"}
.ph-plus-circle{--ds-icon-glyph:"\e3d6"}
.ph-power{--ds-icon-glyph:"\e3da"}
.ph-prohibit{--ds-icon-glyph:"\e3de"}
.ph-sign-in{--ds-icon-glyph:"\e428"}
.ph-star{--ds-icon-glyph:"\e46a"}
.ph-trash{--ds-icon-glyph:"\e4a6"}
.ph-video-camera-slash{--ds-icon-glyph:"\e4dc"}
.ph-warning-circle{--ds-icon-glyph:"\e4e2"}
.ph-corners-out{--ds-icon-glyph:"\e1d0"}

:is(.btn,.button,.auth-button,.quick-action-btn){
  --ds-control-size:var(--ds-control-md);
  --button-bg:var(--ds-bg-surface);--button-border:var(--ds-brand-500);--button-text:var(--ds-brand-500);
  --button-hover-bg:var(--ds-brand-50);--button-hover-border:var(--ds-brand-600);--button-hover-text:var(--ds-brand-600);
  --button-active-bg:var(--ds-brand-100);--button-active-border:var(--ds-brand-700);--button-active-text:var(--ds-brand-700);
  --bs-btn-bg:var(--button-bg);--bs-btn-color:var(--button-text);--bs-btn-border-color:var(--button-border);
  --bs-btn-hover-bg:var(--button-hover-bg);--bs-btn-hover-color:var(--button-hover-text);--bs-btn-hover-border-color:var(--button-hover-border);
  --bs-btn-active-bg:var(--button-active-bg);--bs-btn-active-color:var(--button-active-text);--bs-btn-active-border-color:var(--button-active-border);
  --bs-btn-focus-shadow-rgb:var(--ds-brand-rgb);--bs-btn-focus-box-shadow:var(--ds-focus-ring);--bs-btn-active-shadow:none;
  appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:0 0 auto;
  height:var(--ds-control-size);min-height:var(--ds-control-size);padding:0 12px;
  border:1px solid var(--button-border);border-radius:var(--ds-control-radius);
  background:var(--button-bg);color:var(--button-text);font:500 14px/1 var(--ds-font-sans);
  text-align:center;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;
  transition:border-color .15s,background-color .15s,color .15s;
}
:is(.btn,.button,.auth-button,.quick-action-btn)>:is(i,svg){width:14px;min-width:14px;height:14px;flex:0 0 14px;font-size:var(--ds-font-size-body);line-height:1;text-align:center;margin:0!important}
:is(.btn,.button,.auth-button,.quick-action-btn):hover{border-color:var(--button-hover-border);background:var(--button-hover-bg);color:var(--button-hover-text);text-decoration:none}
:is(.btn,.button,.auth-button,.quick-action-btn):active{border-color:var(--button-active-border);background:var(--button-active-bg);color:var(--button-active-text)}
:is(.btn.outline,.button.outline,.btn-outline-primary){--button-bg:transparent}
:is(.btn.primary,.button.primary,.btn-primary,.btn-info,.btn-query,.auth-primary){
  --button-bg:var(--ds-brand-500);--button-text:var(--ds-text-inverse);
  --button-hover-bg:var(--ds-brand-600);--button-hover-text:var(--ds-text-inverse);
  --button-active-bg:var(--ds-brand-700);--button-active-text:var(--ds-text-inverse);
}
:is(.btn.neutral,.button.neutral,.btn-secondary,.btn-outline-secondary,.btn-light,.btn-dark,.btn-outline-light,.btn-outline-dark,.auth-secondary,.quick-action-btn.tone-neutral,.quick-action-btn.tone-dark){
  --button-border:var(--ds-border-strong);--button-text:var(--ds-text-secondary);
  --button-hover-border:var(--ds-border-strong);--button-hover-bg:var(--ds-bg-hover);--button-hover-text:var(--ds-text-primary);
  --button-active-border:var(--ds-border-strong);--button-active-bg:var(--ds-bg-subtle);--button-active-text:var(--ds-text-primary);
}
:is(.btn.green,.button.green,.btn-outline-success,.quick-action-btn.tone-success){
  --button-border:var(--ds-success);--button-text:var(--ds-success-text);
  --button-hover-border:var(--ds-success-text);--button-hover-bg:var(--ds-success-soft);--button-hover-text:var(--ds-success-text);
  --button-active-border:var(--ds-success-text);--button-active-bg:var(--ds-success-soft);--button-active-text:var(--ds-success-text);
}
:is(.btn.success,.button.success,.btn-success){
  --button-border:var(--ds-success);--button-bg:var(--ds-success);--button-text:var(--ds-text-inverse);
  --button-hover-border:var(--ds-success-text);--button-hover-bg:var(--ds-success-text);--button-hover-text:var(--ds-text-inverse);
  --button-active-border:var(--ds-success-text);--button-active-bg:var(--ds-success-text);--button-active-text:var(--ds-text-inverse);
}
:is(.btn.danger,.button.danger,.btn.red,.button.red,.btn-outline-danger){
  --button-border:var(--ds-danger);--button-text:var(--ds-danger);
  --button-hover-border:var(--ds-danger-text);--button-hover-bg:var(--ds-danger-soft);--button-hover-text:var(--ds-danger-text);
  --button-active-border:var(--ds-danger-text);--button-active-bg:var(--ds-danger-soft);--button-active-text:var(--ds-danger-text);
}
:is(.btn-danger,.btn.danger-solid,.button.danger-solid){--button-border:var(--ds-danger);--button-bg:var(--ds-danger);--button-text:var(--ds-text-inverse);--button-hover-border:var(--ds-danger-text);--button-hover-bg:var(--ds-danger-text);--button-hover-text:var(--ds-text-inverse);--button-active-border:var(--ds-danger-text);--button-active-bg:var(--ds-danger-text);--button-active-text:var(--ds-text-inverse)}
:is(.btn.warning,.button.warning,.btn-outline-warning,.quick-action-btn.tone-warning){--button-border:var(--ds-warning);--button-text:var(--ds-warning-text);--button-hover-border:var(--ds-warning);--button-hover-bg:var(--ds-warning-soft);--button-hover-text:var(--ds-warning-text);--button-active-border:var(--ds-warning);--button-active-bg:var(--ds-warning-soft);--button-active-text:var(--ds-warning-text)}
/* Info uses the same brand blue, rather than a second turquoise theme. */
:is(.btn.info,.button.info,.btn-outline-info,.quick-action-btn.tone-primary,.quick-action-btn.tone-info){--button-bg:var(--ds-brand-50);--button-border:var(--ds-brand-100);--button-hover-bg:var(--ds-brand-100)}
:is(.btn-warning,.btn.warning-solid,.button.warning-solid){--button-border:#b45309;--button-bg:#b45309;--button-text:#fff;--button-hover-border:var(--ds-warning-text);--button-hover-bg:var(--ds-warning-text);--button-hover-text:#fff;--button-active-border:#78350f;--button-active-bg:#78350f;--button-active-text:#fff}
:is(.btn-link,.btn.link,.button.link){--button-bg:transparent;--button-border:transparent;--button-hover-border:transparent;--button-active-border:transparent}
.btn-check:checked+.btn,.btn.active,.btn.show{border-color:var(--button-active-border);background:var(--button-active-bg);color:var(--button-active-text)}
:is(.btn,.button,.auth-button,.quick-action-btn):focus-visible,.btn-check:focus-visible+.btn{outline:2px solid var(--ds-brand-500);outline-offset:2px;box-shadow:var(--ds-focus-ring)}
.btn-check:disabled+.btn{border-color:var(--ds-border);background:var(--ds-bg-subtle);color:var(--ds-text-disabled);opacity:.45;cursor:not-allowed;pointer-events:none}
:is(.btn.small,.button.small,.btn-sm,.quick-action-btn,.btn-group-sm>.btn){--ds-control-size:32px;padding:0 10px;gap:5px}
:is(.btn.large,.button.large,.btn-lg,.btn-group-lg>.btn){--ds-control-size:32px;padding:0 16px}
:is(.btn,.button,.auth-button,.quick-action-btn):is(:disabled,[aria-disabled="true"],.disabled):is(*,:hover,:active){border-color:var(--ds-border);background:var(--ds-bg-subtle);color:var(--ds-text-disabled);box-shadow:none;cursor:not-allowed;opacity:.45}
/* 图标按钮与加载态；仅改变外观，禁用仍由原业务逻辑控制。 */
.btn.btn-icon{--ds-control-size:32px;width:32px;min-width:32px;padding:0;gap:0}
.ds-icon-spin{animation:ds-icon-spin 1s linear infinite}
@keyframes ds-icon-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.ds-icon-spin{animation:none}}
a:is(.btn,.button,.table-action)[aria-disabled="true"],a:is(.btn,.button,.table-action).disabled{pointer-events:none}
/* 大屏展板按钮，仅作用于对应页面。 */
.live-dashboard #topbar .btn-sm{
            background:var(--bg-card);color:var(--text-primary);
            border:1px solid var(--border);border-radius:6px;
            padding:0 16px;font-size:var(--ds-font-size-body);cursor:pointer;transition:all .15s
        }
.live-dashboard #topbar .btn-sm:hover{border-color:var(--accent);background:var(--bg-card-hover)}
.live-dashboard #topbar .btn-sm.active-layout{background:var(--accent);border-color:var(--accent);color:#fff}
.live-dashboard .cam-cell .cam-context{
            position:absolute;top:4px;right:4px;
            background:rgba(0,0,0,.6);color:#fff;border:none;
            padding:2px 6px;border-radius:3px;font-size:var(--ds-font-size-micro);
            cursor:pointer;opacity:0;transition:opacity .2s
        }
.live-dashboard .cam-cell:hover .cam-context{opacity:1}
.btn.lightbox-nav-button{width:44px;height:44px;min-height:44px;padding:0;opacity:.8}
.btns,.hero-actions,.toolbar-actions,.top-actions,.actions{display:flex;align-items:center;gap:var(--ds-space-2)}
.btns,.hero-actions,.toolbar-actions,.top-actions{flex-wrap:wrap}


/* ============================================================
   6. Components — Inputs
   ============================================================ */
.form-control,.form-select{display:block;width:100%}
:is(.form-control-sm,.form-select-sm,.input-group-sm,.form-control-lg,.form-select-lg,.input-group-lg){--ds-control-size:var(--ds-control-md)}
.input-group{position:relative;display:flex;flex-wrap:nowrap;align-items:stretch;width:100%;min-width:0}
.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}
.input-group>.toggle-password{width:36px;min-width:36px;padding:0}
.input-group>.btn{height:var(--ds-control-size);min-height:var(--ds-control-size)}
.input-group-text{height:var(--ds-control-size);padding:0 12px;font-size:var(--ds-font-size-body);border-color:var(--ds-border-strong);border-radius:var(--ds-control-radius);background:var(--ds-bg-subtle);color:var(--ds-text-secondary)}
input.form-control-plaintext{border:0;background:transparent;box-shadow:none}
/* A shared input foundation for fields, form-control and search wrappers. */
:is(input:not([type="checkbox"],[type="radio"],[type="hidden"],[type="file"],[type="range"],[type="color"],[type="submit"],[type="button"],[type="reset"],[type="image"]),:where(input[type="file"]),select,textarea,.field,.select,.search,.top-search){
  height:var(--ds-control-size);min-height:var(--ds-control-size);padding:0 12px;
  border:1px solid var(--ds-border-strong);border-radius:var(--ds-control-radius);
  background-color:var(--ds-bg-surface);color:var(--ds-text-primary);font:inherit;font-size:var(--ds-font-size-body);outline:0;
  transition:border-color .15s,box-shadow .15s;
}
:is(input,textarea)::placeholder{color:var(--ds-text-tertiary);opacity:1}
:is(input:not([type="checkbox"],[type="radio"],[type="hidden"],[type="file"],[type="range"],[type="color"],[type="submit"],[type="button"],[type="reset"],[type="image"]),:where(input[type="file"]),select,textarea,.field,.select,.search,.top-search):hover{border-color:var(--ds-brand-500)}
:is(input:not([type="checkbox"],[type="radio"],[type="hidden"],[type="file"],[type="range"],[type="color"],[type="submit"],[type="button"],[type="reset"],[type="image"]),:where(input[type="file"]),select,textarea,.field,.select):focus,
:is(.search,.top-search):focus-within{border-color:var(--ds-brand-500);box-shadow:var(--ds-focus-ring)}
:is(input,select,textarea,.field):disabled{background-color:var(--ds-bg-subtle);color:var(--ds-text-disabled);border-color:var(--ds-border);box-shadow:none;cursor:not-allowed}
input:read-only:not([type="checkbox"],[type="radio"],[type="hidden"]),textarea:read-only{background-color:var(--ds-bg-subtle)}
:is(textarea,textarea.form-control){height:auto;min-height:96px;padding:8px 12px;line-height:1.5;resize:vertical}
:is(select:not([multiple]):not([size]),select[size="1"]:not([multiple]),.select){padding-right:36px;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%235F6673' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;background-size:16px 16px}
select[multiple],select[size]:not([size="1"]){height:auto;min-height:96px;padding:8px 12px;background-image:none}
select:not([multiple]):has(>option[value=""]:checked),select option[value=""]{color:var(--ds-text-tertiary)}
select option{color:var(--ds-text-primary)}
:is(.search,.top-search){display:flex;align-items:center;overflow:hidden}
:is(.search,.top-search)>input{flex:1 1 auto;width:100%;min-width:0;height:100%;min-height:0;padding:0 12px 0 7px;border:0;border-radius:0;background:transparent;box-shadow:none}
:is(.search,.top-search)>input:first-child{padding-left:12px}
:is(.search,.top-search)>input:is(:hover,:focus){border:0;box-shadow:none;outline:0}
/* 输入状态、文件选择器及布局宽度：统一维护于输入组件章节。 */
:is(input,select,textarea).is-invalid:is(*,:hover,:focus),:is(input,select,textarea)[aria-invalid="true"]:is(*,:hover,:focus){border-color:var(--ds-danger)}
.was-validated :is(input,select,textarea):invalid:is(*,:hover,:focus){border-color:var(--ds-danger)}
:is(input,select,textarea).is-invalid:focus,:is(input,select,textarea)[aria-invalid="true"]:focus{box-shadow:0 0 0 3px var(--ds-danger-soft)}
:is(input,select,textarea).is-valid:is(*,:hover,:focus){border-color:var(--ds-success)}
:is(input,select,textarea).is-valid:focus{box-shadow:0 0 0 3px var(--ds-success-soft)}
input[readonly]:not([type="checkbox"]):not([type="radio"]):hover,textarea[readonly]:hover{border-color:var(--ds-border-strong)}
:is(input,select,textarea):disabled:is(*,:hover,:focus){background-color:var(--ds-bg-subtle);color:var(--ds-text-disabled);border-color:var(--ds-border);box-shadow:none;cursor:not-allowed}
input[type="file"]{padding:0 12px 0 0;line-height:34px}
input[type="file"]::file-selector-button{height:34px;padding:0 12px;margin-right:12px;border:0;border-right:1px solid var(--ds-border-strong);font:inherit;color:var(--ds-text-primary);background:var(--ds-bg-subtle);cursor:pointer}
input[type="file"]:disabled::file-selector-button{color:var(--ds-text-disabled);cursor:not-allowed}
.control-width-140{width:140px;max-width:100%}.control-width-180{width:180px;max-width:100%}
.control-max-140{max-width:140px}.control-max-150{max-width:150px}.control-max-220{max-width:220px}.control-max-240{max-width:240px}
.config-editor{tab-size:4}
.live-dashboard #topbar select{height:36px;min-height:36px;background-color:var(--bg-card);color:var(--text-primary);border-color:var(--border);font-size:var(--ds-font-size-body)}
.live-dashboard #topbar select:hover{border-color:var(--accent);background-color:var(--bg-card-hover)}
.form-group{margin-bottom:var(--ds-space-4)}
:is(.form-group label,.ds-form .ds-form-field>.form-label,.auth-page.auth-labelled .auth-field label){display:block;margin-bottom:var(--ds-space-2);color:var(--ds-text-primary);font-size:var(--ds-font-size-body);font-weight:500}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px}.form-group.full{grid-column:1/-1}
.required,.text-danger{color:var(--ds-danger-text)}.text-muted{color:var(--ds-text-secondary)}
input[type="checkbox"],input[type="radio"]{width:16px;height:16px;margin:0;padding:0;vertical-align:middle;cursor:pointer;appearance:none;-webkit-appearance:none;border:1px solid var(--ds-border-strong);background:var(--ds-bg-surface);transition:border-color .15s,background-color .15s}
input[type="checkbox"]{border-radius:var(--ds-radius-sm)}
input[type="checkbox"]:checked{border-color:var(--ds-brand-500);background:var(--ds-brand-500) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M2.5 6.2 5 8.6l4.5-5' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center no-repeat}
input[type="checkbox"]:indeterminate{border-color:var(--ds-brand-500);background:var(--ds-brand-500) linear-gradient(#fff,#fff) center/8px 2px no-repeat}
input[type="radio"]{border-radius:50%}input[type="radio"]:checked{border-color:var(--ds-brand-500);box-shadow:inset 0 0 0 4px var(--ds-brand-500)}
input:is([type="checkbox"],[type="radio"]):disabled{opacity:.45;cursor:not-allowed}


/* ============================================================
   7. Components — Surfaces
   ============================================================ */
.ds-surface,.card,.panel,.filter-card,.record-card,.warning-list,.loan-panel,
.approval,.identity-card,.profile-card,.quick-panel,.work-panel,
.common-panel,.metric-group,.dashboard-card,
.kpi-strip,.health-card,.trend-card,.recent-card,.warning-card,.quick-card{
  border:1px solid var(--ds-border);border-radius:var(--ds-radius-lg);
  background:var(--ds-bg-surface);box-shadow:var(--ds-shadow-xs);
}

.card-head,.panel-head{
  height:48px;padding:0 20px;
  display:flex;align-items:center;justify-content:space-between;
  border-bottom:1px solid var(--ds-border);
  color:var(--ds-text-primary);font-size:var(--ds-font-size-h3);font-weight:600;
}
.card-title,.section-title,.info-title{font-size:var(--ds-font-size-h3);font-weight:600;color:var(--ds-text-primary)}

/* ============================================================
   8. Components — Toolbar / Filters
   ============================================================ */
.toolbar,
.filter-card,
.warning-toolbar,
.loan-toolbar,
.query-toolbar {
    width: 100%;
    max-width: 100%;
    margin-bottom: var(--ds-space-4);
    padding: 16px 20px;
    display: flex;
    align-items: center;
    gap: var(--ds-space-3);
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-radius-lg);
    background: var(--ds-bg-surface);
    box-shadow: var(--ds-shadow-xs);
}
.query-toolbar { padding: 12px 16px; }
.toolbar > *,
.query-toolbar > * { min-width: 0; }

.filters {
    min-width: 0;
    flex: 1 1 auto;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
    gap: var(--ds-space-2);
}
.query-toolbar > .filters {
    width: 100%;
    flex-wrap: nowrap;
}
.query-toolbar .search {
    min-width: 240px;
    flex: 1 1 360px;
}

.filter-date { width: 150px; min-width: 150px; flex: 0 0 150px; }
.filter-select,
.filter-select.wide,
.filter-select.compact { width: auto; min-width: 0; max-width: 100%; flex: 0 0 auto; }
.query-toolbar .btn { min-width: 72px; flex: 0 0 auto; }

.workspace :is(.page-card__toolbar, .toolbar, .query-toolbar,
    .filter-card, .warning-toolbar, .loan-toolbar) .filters {
    min-width: 0;
    flex-direction: row;
    flex-wrap: nowrap;
    overflow-x: auto;
}
.workspace :is(.page-card__toolbar, .toolbar, .query-toolbar,
    .filter-card, .warning-toolbar, .loan-toolbar) .search {
    width: auto;
    min-width: 96px;
    flex: 1 1 240px;
}
.workspace :is(.page-card__toolbar, .toolbar, .query-toolbar,
    .filter-card, .warning-toolbar, .loan-toolbar) :is(.btns, .btnrow, .toolbar-actions, .toolbar-end) {
    width: auto;
    flex: 0 0 auto;
    flex-direction: row;
    flex-wrap: nowrap;
}
.workspace :is(.page-card__toolbar, .toolbar, .query-toolbar,
    .filter-card, .warning-toolbar, .loan-toolbar) :is(.btn, .button) {
    width: auto;
    flex: 0 0 auto;
    white-space: nowrap;
}

.toolbar-end {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: var(--ds-space-2);
    flex: 0 0 auto;
}
@media (max-width: 1200px) { .toolbar-end { margin-left: 0; } }
@media (max-width: 760px) {
    .toolbar-end { width: 100%; }
    .toolbar-end .btn { width: 100%; }
}

.toolbar > .btns,
.query-toolbar > .btns { flex: 0 0 auto; }

@media (max-width: 1200px) {
    .query-toolbar > .filters {
        flex-wrap: wrap;
        justify-content: flex-start;
    }
    .query-toolbar .search {
        width: 100%;
        min-width: 100%;
        flex-basis: 100%;
    }
}
@media (max-width: 760px) {
    .toolbar,
    .filter-card,
    .warning-toolbar,
    .loan-toolbar,
    .query-toolbar {
        padding: 12px;
        align-items: stretch;
        flex-direction: column;
    }
    .toolbar > .filters,
    .query-toolbar > .filters {
        width: 100%;
        align-items: stretch;
        justify-content: flex-start;
        flex-direction: column;
        flex-wrap: nowrap;
    }
    .query-toolbar .search,
    .query-toolbar .filter-date,
    .query-toolbar .filter-select {
        width: 100%;
        min-width: 0;
        flex: 0 0 auto;
    }
    .query-toolbar .btn { width: 100%; }
}

/* ============================================================
   9. Components — Tables（mini-table 统一样式）
   ============================================================ */
.table-responsive{
  width:100%;max-width:100%;overflow:auto;
  -webkit-overflow-scrolling:touch;
}
/* 表格容器独立使用时 = 白色卡片（与筛选区/工具栏风格统一） */
/* 排除卡片的所有后代，避免 page-card__body 等中间容器误触发独立卡片样式。
   :where 降低优先级，使公共组件自己的容器规则正常生效。 */
.workspace :where(.table-responsive):not(:where(.page-card *, .card *, .panel *, .ds-surface *)){
  border:1px solid var(--ds-border);
  border-radius:var(--ds-radius-lg);
  background:var(--ds-bg-surface);
  box-shadow:var(--ds-shadow-xs);
  margin-bottom:var(--ds-space-4);
}
/* 已在卡片内部的表格容器：去掉重复边框，保持纯滚动 */
.page-card .table-responsive,
.card .table-responsive,
.panel .table-responsive,
.ds-surface .table-responsive{
  border:none;
  border-radius:0;
  box-shadow:none;
  margin-bottom:0;
}

/* 独立表格卡片：表头顶部圆角与容器对齐，分页器留白 */
.workspace > .table-responsive > .mini-table:first-child{
  border-top-left-radius:var(--ds-radius-lg);
  border-top-right-radius:var(--ds-radius-lg);
  overflow:hidden;
}
.workspace > .table-responsive > .pagination:last-child{
  padding:12px 20px 16px;
  border-top:1px solid var(--ds-border);
  margin:0;
}

/* ---------- 9.1 mini-table 基础 ---------- */
.mini-table{
  --ds-table-column-min:110px;
  --ds-table-column-width:110px;
  --ds-table-action-width:144px;
  margin-bottom:0;
  width:100%;
  min-width:100%;
  border-collapse:separate;
  border-spacing:0;
  background:#fff;
  color:var(--ds-text-primary);
  font-family:var(--ds-font-sans);
  font-size:var(--ds-font-size-body);
  font-weight:500;
  line-height:22px;
  table-layout:fixed;
}
.mini-table thead th{
  height:48px;
  padding:10px 16px;
  background:var(--ds-table-head-bg);
  color:var(--ds-text-primary);
  font-size:var(--ds-font-size-body);
  font-weight:600;
  text-align:left;
  vertical-align:middle;
  white-space:nowrap;
  border-bottom:1px solid var(--ds-border);

  box-shadow:none;
}

/* ---------- 9.1.1 列表列布局（统一测量等宽、单行不省略） ---------- */
.mini-table > :is(thead, tbody, tfoot) > tr > :is(th, td){
  width:auto;
  white-space:nowrap;
  overflow-wrap:normal;
  word-break:normal;
  overflow:visible;
  text-overflow:clip;
}
.mini-table > :is(thead, tbody, tfoot) > tr > .table-fixed-action{
  position:sticky;
  right:0;
  z-index:2;
  width:var(--ds-table-action-width);
  padding-left:20px;
  padding-right:28px;
  text-align:center;
  border-left:0;
  box-shadow:none;
  transform:translateX(var(--ds-table-action-offset,0px));
}
.mini-table > thead > tr > .table-fixed-action{z-index:3}
.mini-table > tbody > tr > td.table-fixed-action{font-size:0}
.mini-table tbody td{
  height:auto;
  padding:10px 16px;
  background:#fff;
  color:var(--ds-text-primary);
  font-size:var(--ds-font-size-body);
  font-weight:500;
  text-align:left;
  vertical-align:middle;
  border-bottom:1px solid var(--ds-border);
  transition:background-color .12s ease;

  box-shadow:none;
}
.mini-table tbody tr:nth-child(even) td{background:var(--ds-table-stripe-bg)}
.mini-table tbody tr:hover td{background:var(--ds-bg-hover)}
.mini-table tbody tr.is-selected td,
.mini-table tbody tr[aria-selected="true"] td{background:var(--ds-brand-50)}
.mini-table tbody tr:last-child td{border-bottom:0}

.mini-table .table-center,.mini-table .table-center>th,.mini-table .table-center>td{text-align:center}
.mini-table .table-number,.mini-table .table-number>th,.mini-table .table-number>td{text-align:right;font-variant-numeric:tabular-nums}
.mini-table .table-check{width:48px;min-width:48px;padding:0;text-align:center}
.mini-table .table-check input[type="checkbox"]{margin:0 auto}
.mini-table .table-code{color:var(--ds-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--ds-font-size-body);line-height:22px;font-style:normal}

.mini-table .table-cell{display:flex;align-items:center;gap:10px}
.mini-table .table-cell-icon{
  width:32px;height:32px;flex:0 0 32px;
  display:inline-grid;place-items:center;
  border-radius:var(--ds-radius-sm);
  background:var(--ds-brand-50);color:var(--ds-brand-500);
}
.mini-table .table-cell b{color:var(--ds-text-primary);font-size:var(--ds-font-size-meta);font-weight:500;line-height:20px}
.mini-table .table-cell small{display:block;color:var(--ds-text-tertiary);font-size:var(--ds-font-size-small);line-height:18px}

/* 单元格内非标签/控件正文统一色 */
.mini-table :is(th, td) :not(:where(
    .t-tag, .t-tag *, .table-tag, .table-tag *,
    .status, .status *, .badge, .badge *, .tag, .tag *,
    .binding, .binding *, .op-tag, .op-tag *,
    .target-tag, .target-tag *, .level-tag, .level-tag *,
    .customer-state, .customer-state *, .project-status, .project-status *,
    .type-pill, .type-pill *, .phase, .phase *, .overdue, .overdue *, .pill, .pill *,
    .badge-stage, .badge-stage *,
    .btn, .btn *, .button, .button *,
    .table-action, .table-action *, .table-actions, .table-actions *,
    button, button *, [role="button"], [role="button"] *,
    input, input *, select, select *, textarea, textarea *)){
  color:var(--ds-text-primary);
}

/* ---------- 9.2 行状态色 ---------- */
.mini-table tbody tr.row-warning > td { background: var(--ds-warning-soft); }
.mini-table tbody tr.row-danger  > td { background: var(--ds-danger-soft); }
.mini-table tbody tr.row-primary > td { background: var(--ds-brand-50); }
.mini-table tbody tr.row-warning:hover > td { background: #ffefd0; }
.mini-table tbody tr.row-danger:hover  > td { background: #fde3e3; }
.mini-table tbody tr.row-primary:hover > td { background: var(--ds-brand-100); }

/* ---------- 9.3 操作列 ---------- */
/* 文字操作取消普通 .btn.small 的左右内边距；统一使用紧凑间隔。 */
td .table-action,
td .btn.table-action{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  vertical-align:middle;
  height:28px;
  min-height:28px;
  padding:4px 0;
  border:0;
  border-radius:4px;
  background:transparent;
  box-shadow:none;
  font-size:var(--ds-font-size-body);
  font-weight:500;
  line-height:20px;
  color:var(--ds-brand-500);
  text-decoration:none;
  cursor:pointer;
  transition:background-color .14s,color .14s;
}
td .table-action:hover{
  border:0;
  background:var(--ds-brand-50);
  color:var(--ds-brand-600);
}
td .table-action:active{
  border:0;
  background:var(--ds-brand-100);
  color:var(--ds-brand-700);
}
td .table-action:is(.danger,.danger-solid,.red,.btn-outline-danger,.btn-danger){
  color:var(--ds-danger);
}
td .table-action:is(.danger,.danger-solid,.red,.btn-outline-danger,.btn-danger):hover{
  background:var(--ds-danger-soft);
  color:var(--ds-danger-text);
}
td .table-action:is(:disabled,.disabled,[aria-disabled="true"]){
  color:var(--ds-text-disabled);
  cursor:not-allowed;
}
td .table-action:is(:disabled,.disabled,[aria-disabled="true"]):hover{
  background:transparent;
}

td .table-action:is(.success,.green,.btn-success,.btn-outline-success){color:var(--ds-success-text)}
td .table-action:is(.success,.green,.btn-success,.btn-outline-success):hover{background:var(--ds-success-soft)}
td .table-action:is(.warning,.warning-solid,.btn-warning,.btn-outline-warning){color:var(--ds-warning-text)}
td .table-action:is(.warning,.warning-solid,.btn-warning,.btn-outline-warning):hover{background:var(--ds-warning-soft)}
td .table-action:is(:disabled,.disabled,[aria-disabled="true"]):is(*,:hover,:active){color:var(--ds-text-disabled);background:transparent;cursor:not-allowed}

/* 操作项使用确定的 16px 间距；单元格会消除模板换行产生的匿名空白，
   分隔线固定在相邻操作项的几何中点。 */
td .table-action + .table-action,
td .table-action + .table-action-form,
td .table-action-form + .table-action,
td .table-action-form + .table-action-form{
  position:relative;
  margin-left:16px;
}
td .table-action + .table-action::before,
td .table-action + .table-action-form::before,
td .table-action-form + .table-action::before,
td .table-action-form + .table-action-form::before{
  content:"";
  position:absolute;
  left:-8px;
  top:50%;
  transform:translate(-50%,-50%);
  width:1px;
  height:14px;
  background:var(--ds-border);
}
td .table-action-form{display:inline-flex;align-items:center;vertical-align:middle;font-size:0}
td .table-actions,
td .actions,
td :is(.table-actions, .actions){justify-content:center;align-items:center}
td :is(.table-actions, .actions){flex-wrap:nowrap;gap:0;white-space:nowrap}
td :is(.table-actions, .actions) > *{flex-shrink:0}

/* ---------- 9.4 空数据单元格 ---------- */
.mini-table tbody td[colspan]{
  height:220px;
  padding:0;
  background:#fff;
  border-bottom:0;
  color:var(--ds-text-tertiary);
  font-size:var(--ds-font-size-body);
  text-align:center;
  vertical-align:middle;
}
.mini-table tbody tr:hover td[colspan],
.mini-table tbody tr:nth-child(even) td[colspan],
.mini-table tbody tr:nth-child(even):hover td[colspan]{
  background:#fff;
}
.mini-table tbody td[colspan] > i{
  display:inline-block;
  font-size:32px;
  opacity:.35;
  margin-right:10px;
  line-height:1;
  vertical-align:middle;
}
.mini-table tbody td[colspan] a{
  color:var(--ds-brand-500);
  font-weight:500;
  text-decoration:none;
}
.mini-table tbody td[colspan] a:hover{
  color:var(--ds-brand-600);
  text-decoration:underline;
}

/* 仅在表格横向溢出时提示固定操作列；无溢出时不显示分隔投影。 */
.mini-table.has-action-overlap > :is(thead, tbody, tfoot) > tr > .table-fixed-action::before{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:-10px;
  width:10px;
  pointer-events:none;
  background:linear-gradient(to right, transparent, rgba(15,23,42,.08));
}

/* ============================================================
   10. Components — Pagination
   ============================================================ */
.pagination {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-4);
  min-height: 56px;
  padding: 10px 16px;
  color: var(--ds-text-secondary);
  font-size:var(--ds-font-size-body);
  background: var(--ds-bg-surface);

 --ds-pagination-size:32px;--bs-pagination-color:var(--ds-brand-500);--bs-pagination-hover-color:var(--ds-brand-600);--bs-pagination-font-size:14px;
 --bs-pagination-bg:var(--ds-bg-surface);--bs-pagination-border-color:var(--ds-border);--bs-pagination-border-radius:var(--ds-control-radius);
 --bs-pagination-hover-bg:var(--ds-bg-hover);--bs-pagination-hover-border-color:var(--ds-border-strong);
 --bs-pagination-focus-color:var(--ds-brand-600);--bs-pagination-focus-bg:var(--ds-bg-hover);--bs-pagination-focus-box-shadow:var(--ds-focus-ring);
 --bs-pagination-active-color:var(--ds-text-inverse);--bs-pagination-active-bg:var(--ds-brand-500);--bs-pagination-active-border-color:var(--ds-brand-500);
 --bs-pagination-disabled-color:var(--ds-text-disabled);--bs-pagination-disabled-bg:var(--ds-bg-subtle);--bs-pagination-disabled-border-color:var(--ds-border);
}
.pagination .total { color: var(--ds-text-secondary); }
.pagination .pages {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
}
.pagination .page-size {
  --ds-control-size:32px;height:var(--ds-control-size);padding:0 8px;display:inline-flex;align-items:center;border:1px solid var(--ds-border-strong);border-radius:var(--ds-control-radius);background:var(--ds-bg-surface);color:var(--ds-text-primary);font-size:var(--ds-font-size-body);
}


.pagination .page-size select {
  --ds-control-size:32px;min-height:0;border:0;background:transparent;color:inherit;outline:0;cursor:pointer;
}
.pagination :is(.page,.page-link) {
  min-width: 32px;
  height: var(--ds-pagination-size);
  padding: 0 6px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid transparent;
  border-radius: var(--ds-control-radius);
  background: var(--ds-bg-subtle);
  color: var(--ds-text-primary);
  font-size:var(--ds-font-size-body);
  cursor: pointer;
  transition: background-color .15s, color .15s;
}
.pagination :is(.page,.page-link):hover {
  background: var(--ds-bg-hover);
  color: var(--ds-brand-600);
}
.pagination :is(.page,.page-link).active,
.pagination .active>.page-link{
  background: var(--ds-brand-500);
  color: #fff;
}
.pagination :is(.page,.page-link):disabled,
.pagination :is(.page,.page-link).disabled,
.pagination .disabled>.page-link,
.pagination .page-link[aria-disabled="true"]{
  background: var(--ds-bg-subtle);
  color: var(--ds-text-disabled);
  cursor: not-allowed;
}
.pagination .jump {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--ds-text-secondary);
  white-space: nowrap;
}
.pagination .jump input {
  --ds-control-size:32px;width:48px;padding:0 6px;text-align:center;
}


@media (max-width: 760px) {
  .pagination {
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;

 --ds-pagination-size:32px;--bs-pagination-color:var(--ds-brand-500);--bs-pagination-hover-color:var(--ds-brand-600);--bs-pagination-font-size:14px;
 --bs-pagination-bg:var(--ds-bg-surface);--bs-pagination-border-color:var(--ds-border);--bs-pagination-border-radius:var(--ds-control-radius);
 --bs-pagination-hover-bg:var(--ds-bg-hover);--bs-pagination-hover-border-color:var(--ds-border-strong);
 --bs-pagination-focus-color:var(--ds-brand-600);--bs-pagination-focus-bg:var(--ds-bg-hover);--bs-pagination-focus-box-shadow:var(--ds-focus-ring);
 --bs-pagination-active-color:var(--ds-text-inverse);--bs-pagination-active-bg:var(--ds-brand-500);--bs-pagination-active-border-color:var(--ds-brand-500);
 --bs-pagination-disabled-color:var(--ds-text-disabled);--bs-pagination-disabled-bg:var(--ds-bg-subtle);--bs-pagination-disabled-border-color:var(--ds-border);
}
  .pagination .pages {
    margin-left: 0;
    align-self: flex-end;
    flex-wrap: wrap;
    justify-content: flex-end;
  }
}

/* ============================================================
   11. Components — Status / Tags / Badges
   ============================================================ */
/* One tag foundation and semantic palette across page and table aliases. */
:is(.status,.badge,.tag,.binding,.op-tag,.target-tag,.level-tag,.customer-state,.project-status,.type-pill,.phase,.overdue,.pill,.t-tag,.table-tag){display:inline-flex;align-items:center;justify-content:center;gap:4px;height:24px;padding:0 8px;border:0;border-radius:var(--ds-radius-pill);background:var(--ds-bg-subtle);color:var(--ds-text-secondary);font-size:var(--ds-font-size-small);font-weight:600;line-height:1;white-space:nowrap;vertical-align:middle}
:is(.t-tag,.table-tag) span{display:inline-flex;align-items:center;gap:4px}
:is(.t-tag,.table-tag) svg{width:14px;height:14px;flex:0 0 14px;display:block}
:is(.status,.badge,.tag,.t-tag,.table-tag,.reminder-badge):is(.warning){background:var(--ds-warning-soft);color:var(--ds-warning-text)}
:is(.status,.badge,.tag,.t-tag,.table-tag,.reminder-badge):is(.severe,.danger,.error){background:var(--ds-danger-soft);color:var(--ds-danger-text)}
:is(.status,.badge,.tag,.t-tag,.table-tag,.reminder-badge):is(.using,.info,.primary){background:var(--ds-brand-50);color:var(--ds-brand-600)}
:is(.status,.badge,.tag,.t-tag,.table-tag).default{background:var(--ds-bg-subtle);color:var(--ds-text-secondary)}
:is(.t-tag,.table-tag)::before{content:none;display:none}
:is(.t-tag,.table-tag,.status,.badge,.tag,.binding,.op-tag,.target-tag,.level-tag,.customer-state,.project-status,.type-pill,.phase,.overdue,.pill):is(.success,.green,.normal,.idle,.available,.usable,.healthy,.ready,.enabled,[data-status="normal"],[data-status="idle"],[data-status="available"],[data-status="usable"],[data-status="healthy"],[data-status="ready"],[data-status="enabled"],[data-status="正常"],[data-status="闲置"],[data-status="可用"],[data-status="健康"],[data-status="就绪"],[data-status="启用"]){background:var(--ds-success-soft);color:var(--ds-success-text)}

/* ============================================================
   12. Components — Alerts / Empty
   ============================================================ */
:is(.alert,.alert-banner,.auth-alert,.auth-errors){
  position:relative;width:100%;min-height:40px;
  padding:12px 16px;
  display:flex;align-items:flex-start;gap:var(--ds-space-2);
  border:0;border-radius:4px;box-shadow:none;
  background:var(--ds-info-soft);color:var(--ds-text-secondary);
  font-size:var(--ds-font-size-meta);line-height:24px;overflow-wrap:anywhere;
}
/* 浅色底承载语义，正文保持清晰，操作统一使用品牌色链接。 */
:is(.alert-warning,.alert-banner.warning){background:#fff7dc;color:var(--ds-text-primary)}
:is(.alert-error,.alert-danger,.alert-banner.danger,.auth-alert,.auth-errors){background:#fcebea;color:#d93026}
:is(.alert-success,.alert-banner.success,.auth-alert-success){background:#e3f4e9;color:var(--ds-text-primary)}
:is(.alert-info,.alert-banner.info,.auth-alert-info){background:#e8f4ff;color:var(--ds-text-primary)}
:is(.alert-secondary,.alert-light,.alert-banner.neutral){background:#f5f6f7;color:var(--ds-text-primary)}
:is(.alert,.alert-banner) > :is(i,.ds-icon){flex:0 0 auto;font-size:18px;line-height:24px}
:is(.alert-warning,.alert-banner.warning) > :is(i,.ds-icon){color:#d99b00}
:is(.alert-success,.alert-banner.success) > :is(i,.ds-icon){color:#199447}
:is(.alert-info,.alert-banner.info) > :is(i,.ds-icon){color:#087ac1}
:is(.alert,.alert-banner) > div{min-width:0}
:is(.alert,.alert-banner) a:not(.btn):not(.btn-close){color:var(--ds-brand-600,#1677ff);font-weight:500;text-decoration:none}
:is(.alert,.alert-banner) a:not(.btn):not(.btn-close):hover{text-decoration:underline}
.alert-title{font-weight:600;color:inherit}
.alert-description{margin-top:4px;font-size:var(--ds-font-size-small);line-height:18px;color:var(--ds-text-secondary)}
.alert-close{
  position:absolute;top:8px;right:10px;
  width:24px;height:24px;
  display:grid;place-items:center;
  border-radius:var(--ds-radius-sm);
  color:var(--ds-text-tertiary);font-size:var(--ds-font-size-h3);
}
.alert-close:hover{background:var(--ds-bg-hover);color:var(--ds-text-secondary)}

.empty{padding:60px 20px;color:var(--ds-text-tertiary);text-align:center}
.empty-icon{font-size:32px;margin-bottom:8px}

/* ============================================================
   13. Components — Breadcrumb / Tabs
   ============================================================ */
.breadcrumb,.crumb{display:inline-flex;align-items:center;min-width:0;color:#888;font-size:var(--ds-font-size-body);white-space:nowrap;flex:0 0 auto;}
.breadcrumb-item,.crumb>a,.crumb>span{color:#888;text-decoration:none;white-space:nowrap;flex:0 0 auto;}
.breadcrumb-item:hover,.crumb>a:hover{color:var(--ds-brand-500)}
.breadcrumb-separator{padding:0 8px;color:rgba(0,0,0,.45)}
.breadcrumb-current,.crumb>b,.crumb>strong{color:#333;font-weight:500}

.topbar .app-breadcrumb{display:flex;align-items:center;flex:1 1 auto;min-width:0;overflow-x:auto;white-space:nowrap;font-size:var(--ds-font-size-body);font-weight:500;line-height:var(--ds-line-body)}
.app-breadcrumb>ol{display:flex;align-items:center;list-style:none;margin:0;padding:0}
.app-breadcrumb>ol>li{display:flex;align-items:center;color:var(--ds-brand-500)}
.app-breadcrumb>ol>li+li::before{content:"›";padding:0 12px;color:var(--ds-text-secondary);font-size:20px;font-weight:400}
.app-breadcrumb a,.app-breadcrumb__item{display:inline-flex;align-items:center;gap:6px;color:inherit;text-decoration:none}
.app-breadcrumb a:hover{text-decoration:underline}
.app-breadcrumb .ds-icon{font-size:var(--ds-font-size-h3)}
.app-breadcrumb>ol>li[aria-current="page"]{color:var(--ds-text-primary)}
.has-top-breadcrumb .workspace .ds-form-breadcrumb{display:none}
@media(max-width:760px){.app-breadcrumb>ol>li+li::before{padding:0 8px}}

.ds-form-breadcrumb {
    display: block;
    margin: 0 0 16px;
    padding: 0;
    color: #888;
    font-size:var(--ds-font-size-body);
    font-weight:500;
    line-height: 24px;
}
.ds-form-breadcrumb > ol {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}
.ds-form-breadcrumb > ol > li { display: flex; align-items: center; min-width: 0; }
.ds-form-breadcrumb > ol > li + li::before {
    content: "/";
    padding: 0 8px;
    color: rgba(0, 0, 0, .45);
}
.ds-form-breadcrumb a { color: #888; font-weight:500; text-decoration: none; }
.ds-form-breadcrumb a:hover { color: var(--ds-brand-500); }
.ds-form-breadcrumb [aria-current="page"] { color: #333; font-weight:500; overflow-wrap: anywhere; }

.tabs {
    width: 100%;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 4px;
    border-bottom: 1px solid var(--ds-border);
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: thin;
    -webkit-overflow-scrolling: touch;
}
.tab {
    position: relative;
    height: 44px;
    min-height: 44px;
    padding: 0 16px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    flex: 0 0 auto;
    border: 0;
    border-radius: var(--ds-radius-sm) var(--ds-radius-sm) 0 0;
    background: transparent;
    color: var(--ds-text-secondary);
    font-size:var(--ds-font-size-body);
    font-weight: 500;
    line-height: 1;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    transition: color .15s ease, background-color .15s ease;
}
.tab > i {
    width: 16px;
    min-width: 16px;
    font-size:var(--ds-font-size-body);
    line-height: 1;
    text-align: center;
}
.tab:hover {
    background: var(--ds-brand-50);
    color: var(--ds-brand-600);
    text-decoration: none;
}
.tab.active {
    background: var(--ds-brand-50);
    color: var(--ds-brand-600);
    font-weight: 600;
}
.tab.active::after {
    content: "";
    position: absolute;
    right: 12px;
    bottom: -1px;
    left: 12px;
    height: 2px;
    border-radius: 2px 2px 0 0;
    background: var(--ds-brand-500);
}
.tab:focus-visible {
    z-index: 1;
    outline: 2px solid var(--ds-brand-500);
    outline-offset: -2px;
}
.tab-content { padding: 16px 0; }

/* ---------- 13.x 基地切换 Tab（场地页） ---------- */
/* 使用独立类名，避免与侧栏导航样式冲突。 */
.site-tabs{
    display:flex;
    flex-wrap:nowrap;
    gap:4px;
    width:100%;
    margin:0;
    padding:0;
    overflow-x:auto;
    list-style:none;
    border-bottom:1px solid #e5e7eb;
}
.site-tabs > .site-tabs__item{
    flex:0 0 auto;
    margin:0;
    padding:0;
    list-style:none;
}
.site-tabs .site-tabs__link{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    min-height:42px;
    padding:10px 16px;
    border-bottom:2px solid transparent;
    color:#667085;
    background:transparent;
    font-size:var(--ds-font-size-body);
    line-height:20px;
    font-weight:500;
    text-decoration:none;
    white-space:nowrap;
}
.site-tabs a.site-tabs__link:hover{
    color:var(--ds-brand-500);
    background:#f8fafc;
}
.site-tabs .site-tabs__link.active{
    color:var(--ds-brand-500);
    border-bottom-color:var(--ds-brand-500);
    font-weight:600;
}
.site-tabs a.site-tabs__link:focus-visible{
    outline:2px solid var(--ds-brand-500);
    outline-offset:-2px;
}

/* ============================================================
   14. Utilities
   ============================================================ */
.hidden,[hidden]{display:none!important}
.text-center{text-align:center}
.text-right{text-align:right}
.flex{display:flex}
.flex-between{display:flex;align-items:center;justify-content:space-between}
.flex-center{display:flex;align-items:center;justify-content:center}
.gap-1{gap:var(--ds-space-1)}
.gap-2{gap:var(--ds-space-2)}
.gap-3{gap:var(--ds-space-3)}
.gap-4{gap:var(--ds-space-4)}
.mt-2{margin-top:var(--ds-space-2)}
.mt-3{margin-top:var(--ds-space-3)}
.mt-4{margin-top:var(--ds-space-4)}
.mt-6{margin-top:var(--ds-space-6)}
.mb-2{margin-bottom:var(--ds-space-2)}
.mb-3{margin-bottom:var(--ds-space-3)}
.mb-4{margin-bottom:var(--ds-space-4)}
.mb-6{margin-bottom:var(--ds-space-6)}
/* 虚线描边：用于尚未开放的占位卡片。
/* ---------- 14.x 布局工具类（由模板内联 style 提取） ---------- */
.background-fff-24px-32px-8px-0-2px-8px{background:#fff; padding:24px 32px; border-radius:8px; box-shadow:0 2px 8px #0002; min-width:240px}
.background-linear-gradient-transparent-rgba-0-0-0-0-75{background:linear-gradient(transparent,rgba(0,0,0,0.75))}
.border-1px-solid-dee2e6-4px-4px-12{border:1px solid #dee2e6; border-radius:4px; padding:4px; height:120px; overflow-y:auto}
.border-top-subtle{border-top:1px solid #e7e7e7}
.text-success-raw{color:#22c55e}
.text-danger-raw{color:#ef4444}
.text-accent{color:var(--accent)}
.hintable{cursor:help}
.clickable{cursor:pointer}
.display-grid-repeat-4-1fr-12px{display:grid; grid-template-columns:repeat(4,1fr); gap:12px}
.inline{display:inline}
.hidden{display:none}
.display-none-30px{display:none; width:30px}
.text-xs-strong{font-size:0.65rem}
.font-size-0-65rem-help{font-size:0.65rem; cursor:help}
.text-xs{font-size:0.6rem}
.text-sm-muted{font-size:0.7rem}
.text-sm{font-size:0.9rem}
.text-lg{font-size:1.1em; margin-bottom:16px}
.text-mini{font-size:var(--ds-font-size-tiny); color:var(--text-muted)}
.text-nowrap-sm{font-size:var(--ds-font-size-meta); color:var(--text-secondary); white-space:nowrap}
.font-size-82rem{font-size:.82rem}
.text-tiny{font-size:8px}
.span-all{grid-column:1/-1}
.grid-template-columns-repeat-2-minmax-0-1fr{grid-template-columns:repeat(2,minmax(0,1fr))}
.height-140px{height:140px}
.max-height-160px{max-height:160px}
.scroll-y-200px{max-height:200px; overflow-y:auto}
.scroll-y-280px{max-height:280px; overflow-y:auto}
.scroll-y-300px{max-height:300px; overflow-y:auto}
.scroll-y-480px{max-height:480px; overflow-y:auto}
.thumb-clickable{max-height:50px; cursor:pointer; border-radius:4px}
.scroll-y-50vh{max-height:50vh; overflow-y:auto}
.scroll-y-60vh{max-height:60vh; overflow-y:auto}
.scroll-y-70vh{max-height:70vh; overflow-y:auto}
.max-height-80vh-contain{max-height:80vh; object-fit:contain}
.max-width-100px{max-width:100px}
.max-width-120px{max-width:120px}
.max-width-140px{max-width:140px}
.max-width-150px{max-width:150px}
.max-width-180px{max-width:180px}
.max-width-200px{max-width:200px}
.max-width-220px{max-width:220px}
.max-width-280px{max-width:280px}
.max-width-300px{max-width:300px}
.max-width-300px-200px{max-width:300px; max-height:200px}
.max-width-500px{max-width:500px}
.max-width-90{max-width:90%}
.min-height-60vh{min-height:60vh}
.min-width-160px{min-width:160px}
.min-width-220px{min-width:220px}
.min-width-40px{min-width:40px}
.position-fixed-0-0-100vw-100vh-rgba-0{position:fixed; top:0; left:0; width:100vw; height:100vh; background:rgba(0,0,0,0.2); z-index:9999; display:flex; align-items:center; justify-content:center}
.text-align-right{text-align:right}
.white-space-pre-inherit{white-space:pre-wrap; font-family:inherit}
.white-space-pre-wrap{white-space:pre-wrap}
.width-0-var{width:0; background:var(--completed)}
.width-10{width:10%}
.width-100{width:100%}
.width-100px{width:100px}
.width-12{width:12%}
.width-120px{width:120px}
.width-14{width:14%}
.width-140px{width:140px}
.width-18{width:18%}
.width-200px{width:200px}
.width-240px-240px-1px-solid-eee-4{width:240px; height:240px; border:1px solid #eee; padding:4px; background:#fff}
.width-25{width:25%}
.width-30{width:30%}
.width-56px-56px{width:56px; min-width:56px}
.width-60px{width:60px}
.width-80px{width:80px}
.width-85px{width:85px}
.word-break-break-all{word-break:break-all}

   提高一级特异性，确保覆盖 .card 的边框。 */
.card.border-dashed{border:2px dashed #dee2e6}

/* ============================================================
   15. Responsive
   ============================================================ */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}
}
@media(min-width:1001px){
.sidebar.is-collapsed{
  width:70px;
  min-width:70px;
  flex:0 0 70px;
}
.sidebar.is-collapsed .brand b,
.sidebar.is-collapsed .brand small,
.sidebar.is-collapsed .nav-title,
.sidebar.is-collapsed .nav-item > span,
.sidebar.is-collapsed .nav-item > b,
.sidebar.is-collapsed .nav-item > span:last-child:not(:nth-child(2)),
.sidebar.is-collapsed .nav-group-title > span,
.sidebar.is-collapsed .nav-arrow,
.sidebar.is-collapsed .subnav,
.sidebar.is-collapsed .nav-group-body{
  display:none;
}
.sidebar.is-collapsed .nav-item{
  grid-template-columns:16px;
  justify-content:center;
  padding:0;
  column-gap:0;
}
.sidebar.is-collapsed .nav-group-title{
  justify-content:center;
  padding:0;
}
.sidebar.is-collapsed .brand{
  justify-content:center;
  padding:0;
}
.sidebar.is-collapsed ~ .main{flex:1 1 auto}

}

@media(max-width:1000px){
  html,body{overflow-x:hidden}
  body.nav-open{overflow:hidden}
  .app{height:100vh;height:100dvh;min-height:100%;overflow:hidden}
  .main{width:100%;height:100vh;height:100dvh;flex:1 1 100%;overflow:hidden}
  .sidebar{
    display:flex !important;
    position:fixed;
    z-index:61;
    left:0;top:0;bottom:0;
    width:min(82vw,280px) !important;
    min-width:0 !important;
    height:100vh;height:100dvh;
    transform:translateX(-105%);
    box-shadow:18px 0 40px rgba(10,22,50,.2);
    transition:transform .22s ease;
  }
  body.nav-open .sidebar{transform:translateX(0)}
  .topbar{height:var(--ds-header-height);min-height:var(--ds-header-height);flex-basis:var(--ds-header-height);padding-left:63px;padding-right:16px}
  .workspace{max-width:none;margin:0;padding:16px}
  .sidebar-toggle{
    position:fixed;z-index:62;left:14px;top:7px;
    width:36px;height:36px;padding:0;
    display:grid;place-items:center;
    border:1px solid var(--ds-border);border-radius:var(--ds-radius-md);
    background:#fff;color:var(--ds-text-secondary);
    box-shadow:var(--ds-shadow-sm);
  }
  .sidebar-toggle .ds-icon{width:18px;height:18px;font-size:18px}
  .sidebar-scrim{
    position:fixed;z-index:60;inset:0;border:0;
    background:rgba(12,22,45,.46);backdrop-filter:blur(2px);
  }
  body.nav-open .sidebar-scrim{display:block}
}

@media(max-width:760px){
  .topbar{padding-left:56px;padding-right:12px}
  .workspace{padding:12px}
  .toolbar,.filter-card,.warning-toolbar,.loan-toolbar,.query-toolbar{align-items:flex-start;flex-direction:column;overflow-x:auto}
  .toolbar>.filters,.toolbar>.btns,.toolbar>.btnrow{width:100%;justify-content:flex-start;flex-wrap:wrap}
  .toolbar input,.toolbar select,.toolbar .search,.toolbar .select{flex:1 1 220px}
  .search{width:100%;max-width:none}
  .pagination,.loan-pages,.log-pagination{align-items:flex-start;flex-direction:column}
  .pagination .pages,.loan-pages>div,.log-pagination .log-pages{margin-left:0;align-self:flex-end}
  .modal{max-width:calc(100vw - 24px);max-height:calc(100vh - 24px)}
  .modal-head,.drawer-head{padding:16px 18px}
  .modal-body,.drawer-body{padding:16px 18px}
  .modal-foot,.drawer-foot{padding:12px 18px}
  .form-grid{grid-template-columns:1fr}
  .form-group.full{grid-column:auto}
}

/* ============================================================
   16. Sidebar Collapse Menu
   ============================================================ */
.nav-group { margin-bottom: 4px; }
.nav-sub-group {
  display: block;
  width: 100%;
  margin-bottom: 4px;
}
.nav-group-title {
  width: 100%;
  height: var(--ds-nav-height);
  padding: 0 8px;
  display: flex;
  align-items: center;
  gap: 8px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: #bdc9dc;
  font-size:var(--ds-font-size-body);
  font-weight: 500;
  cursor: pointer;
  text-align: left;
  transition: background-color .12s ease, color .12s ease;
}
.nav-group-title:hover {
  background: rgba(255,255,255,.06);
  color: #fff;
}
.nav-group-title > span {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-align: left;
}
.nav-arrow {
  --ds-icon-font:Phosphor;
  width: 12px;
  flex: 0 0 12px;
  text-align: center;
  font-size:var(--ds-font-size-micro);
  color: #5f6b80;
  transition: transform .25s ease;
}
.nav-group-title[aria-expanded="true"] .nav-arrow { transform: rotate(180deg); }
.nav-group-body {
  display: grid;
  grid-template-rows: 0fr;
  overflow: hidden;
  transition: grid-template-rows .28s ease, padding-top .28s ease;
  padding-top: 0;
}
.nav-group-title[aria-expanded="true"] + .nav-group-body {
  grid-template-rows: 1fr;
  padding-top: 4px;
}
.sidebar.nav-restoring .nav-group-body { transition:none; }
.nav-group-body-inner {
  overflow: hidden;
  min-height: 0;
}
.nav-sub-item {
  display: grid;
  align-items: center;
  width: 100%;
  height: var(--ds-nav-height);
  padding: 0 8px 0 32px;
  border-radius: 6px;
  color: #aebbd1;
  font-size:var(--ds-font-size-body);
  font-weight:500;
  line-height: var(--ds-nav-height);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-decoration: none;
  transition: background-color .12s ease, color .12s ease;

  margin-bottom:4px;

  grid-template-columns:16px minmax(0,1fr);column-gap:8px;
}
.nav-sub-item:hover {
  background: rgba(255,255,255,.05);
  color: #fff;
}
.nav-sub-item.active {
  background: linear-gradient(100deg, #2472ec, #205edc);
  color: #fff;
}
.sidebar :is(.nav-item,.nav-group-title,.nav-sub-item) > .ds-icon{width:16px;flex:0 0 16px;text-align:center;font-size:var(--ds-font-size-h3)}

/* ============================================================
   17. Fallbacks
   ============================================================ */
.nav-tabs .nav-link,
.nav-pills .nav-link,
.tabs .tab,
.breadcrumb,
.crumb,
.breadcrumb-item,
.breadcrumb-current,
.breadcrumb-separator,
.card-header h6,
.card-header h5,
.card-title {
    white-space: nowrap !important;
    flex: 0 0 auto !important;
    min-width: auto !important;
}
.nav-tabs,
.tabs { flex-wrap: wrap; }

@media(max-width:1000px){
    .sidebar{
        overflow-y:auto !important;
    }
}
/* Button nowrap/flex are owned by the shared foundation. */


/* ============================================================
   18. Page-Specific（APP下载 / 采购管理）
   ============================================================ */

/* ---------- 18.1 APP 下载页 ---------- */
.app-download-page{
    position:relative;
    max-width:none;
    margin:0;
    min-height:calc(100vh - var(--ds-header-height));
    padding:48px 44px 64px;
    overflow-x:hidden;
    overflow-y:visible;
    background:linear-gradient(180deg,#f4f7ff 0,#f7f9fd 58%,#f5f7fa 100%);
}
.app-download-page:before,
.app-download-page:after{
    content:"";
    position:absolute;
    border-radius:50%;
    pointer-events:none;
    filter:blur(2px);
}
.app-download-page:before{
    width:520px;height:520px;
    left:-240px;top:-280px;
    background:radial-gradient(circle,rgba(61,122,255,.10),rgba(61,122,255,0) 70%);
}
.app-download-page:after{
    width:440px;height:440px;
    right:-210px;bottom:-240px;
    background:radial-gradient(circle,rgba(65,190,137,.08),rgba(65,190,137,0) 70%);
}
.app-download-page > *{position:relative;z-index:1}
.app-download-page .page-title{
    justify-content:center;
    margin:0 0 20px;
    color:var(--ds-text-primary);
    text-align:center;
}
.app-download-page .page-title > .td-icon,
.app-download-page .page-title > svg{display:none !important}
.app-download-page .note{
    width:min(760px,100%);
    margin:0 auto 38px;
    padding:12px 18px;
    border:1px solid #dce6f8;
    border-radius:24px;
    background:rgba(255,255,255,.88);
    box-shadow:none;
    align-items:center;
    justify-content:center;
    text-align:left;
    color:var(--ds-text-secondary);
}
.app-download-page .note > span{color:var(--ds-primary-500, var(--ds-brand-500))}
.app-download-page .note b{margin-right:6px}
.app-download-page .downloads{
    max-width:1120px;
    margin:0 auto;
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:24px;
    align-items:stretch;
}
.app-download-page .download-card{
    position:relative;
    min-height:360px;
    padding:34px 28px 30px;
    border:1px solid rgba(226,232,243,.72);
    border-radius:24px;
    background:rgba(255,255,255,.96);
    box-shadow:0 18px 42px rgba(70,101,170,.12),0 5px 14px rgba(79,111,181,.06);
    overflow:hidden;
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    text-align:center;
    transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
}
.app-download-page .download-card:hover{
    transform:translateY(-4px);
    border-color:#d4e0f3;
    box-shadow:0 24px 52px rgba(70,101,170,.16),0 8px 18px rgba(79,111,181,.08);
}
.app-download-page .download-card:before{
    content:"";
    position:absolute;
    width:116px;height:116px;
    right:-45px;top:-45px;
    border-radius:50%;
    background:#edf4ff;
}
.app-download-page .download-card.android:before{background:#e9f7ef}
.app-download-page .download-card.coming{
    border-color:rgba(226,232,243,.72);
    background:rgba(255,255,255,.84);
    box-shadow:0 18px 42px rgba(70,101,170,.10),0 5px 14px rgba(79,111,181,.05);
}
.app-download-page .download-card.coming:hover{
    background:#fff;
    box-shadow:0 24px 52px rgba(70,101,170,.14),0 8px 18px rgba(79,111,181,.07);
}
.app-download-page .platform-icon{
    width:88px;height:88px;
    margin:0 0 18px;
    border-radius:22px;
    background:#f5f7fa;
    color:#737d8a;
    display:grid;
    place-items:center;
}
.app-download-page .android .platform-icon{
    background:#ecf8f1;
    color:#15965a;
}
.app-download-page .platform-icon svg{width:54px;height:54px;display:block}
.app-download-page .download-card h2{
    margin:0 0 10px;
    color:#273142;
    font-size:20px;
}
.app-download-page .download-card p{
    min-height:48px;
    margin:0 0 14px;
    color:#687386;
    font-size:var(--ds-font-size-meta);
    line-height:1.65;
}
.app-download-page .coming p{min-height:auto}
.app-download-page .version{
    min-height:48px;
    margin-bottom:20px;
    color:#7a8492;
    font-size:var(--ds-font-size-small);
    line-height:1.7;
}
.app-download-page .download-btn{
    height:40px;
    padding:0 18px;
    border:0;
    border-radius:7px;
    background:var(--ds-primary-500, var(--ds-brand-500));
    color:#fff;
    font-weight:600;
    display:inline-flex;
    align-items:center;
    gap:8px;
    cursor:pointer;
    transition:background-color .16s;
}
.app-download-page .download-btn:hover{background:#095fca}
.app-download-page .download-btn svg{width:17px;height:17px}
@media(max-width:1100px){
    .app-download-page{padding:38px 28px 52px}
    .app-download-page .downloads{gap:16px}
    .app-download-page .download-card{min-height:340px;padding:28px 20px}
}
@media(max-width:820px){
    .app-download-page{padding:28px 16px 42px}
    .app-download-page .note{margin-bottom:24px;border-radius:12px}
    .app-download-page .downloads{grid-template-columns:1fr}
    .app-download-page .download-card{min-height:280px}
    .app-download-page .download-card p,
    .app-download-page .version{min-height:auto}
}

/* ---------- 18.2 采购管理页 ---------- */
.stage-cards { display: grid; grid-template-columns: repeat(5, 1fr); gap: 1rem; margin-bottom: 1.25rem; }
.stage-card {
  border-radius: 12px; padding: 1.25rem 1rem 1rem; color: #fff; position: relative; overflow: hidden;
  text-decoration: none; display: block; transition: transform .15s, box-shadow .15s;
}
.stage-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,.15); color: #fff; }
.stage-card .card-label { font-size: .8rem; opacity: .85; letter-spacing: .5px; }
.stage-card .card-count { font-size: 2rem; font-weight:600; line-height: 1.1; margin: .25rem 0; }
.stage-card .card-sub  { font-size: .7rem; opacity: .7; }
.stage-card .card-icon { position: absolute; right: 1rem; bottom: -.5rem; font-size: 3rem; opacity: .1; }
.stage-card.s1 { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); }
.stage-card.s2 { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); }
.stage-card.s3 { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); }
.stage-card.s4 { background: linear-gradient(135deg, #fa8231 0%, #f5576c 100%); }
.stage-card.s5 { background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); }
@media (max-width: 992px) { .stage-cards { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 576px) { .stage-cards { grid-template-columns: 1fr; } }

.reminder-section { margin-bottom: 1.25rem; }
.reminder-list { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem; }
@media (max-width: 768px) { .reminder-list { grid-template-columns: 1fr; } }
.reminder-item {
  display: flex; align-items: center; padding: .65rem .85rem;
  background: #fff; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,.05);
  gap: .65rem; text-decoration: none; color: #333; transition: box-shadow .15s;
}
.reminder-item:hover { box-shadow: 0 3px 8px rgba(0,0,0,.1); }
.reminder-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.reminder-dot.danger { background: #e74c3c; box-shadow: 0 0 6px rgba(231,76,60,.5); }
.reminder-dot.warning { background: #f39c12; box-shadow: 0 0 6px rgba(243,156,18,.5); }
.reminder-dot.info { background: #3498db; }
.reminder-body { flex: 1; min-width: 0; font-size: .84rem; }
.reminder-body .r-title { font-weight: 600; }
.reminder-body .r-meta { font-size: .73rem; color: #999; margin-top: .1rem; }
.reminder-empty { text-align: center; padding: 1.5rem; color: #aaa; font-size: .85rem; }
.reminder-badge { font-size: .7rem; padding: .15rem .5rem; border-radius: 10px; white-space: nowrap; flex-shrink: 0; }


.badge-stage { font-size: .7rem; padding: .2em .55em; border-radius: 10px; }
.badge-stage.st1, .purchase-stage.st1 { background: #ede9fe; color: #6d28d9; }
.badge-stage.st2, .purchase-stage.st2 { background: #fce7f3; color: #be185d; }
.badge-stage.st3, .purchase-stage.st3 { background: #e0f2fe; color: #0369a1; }
.badge-stage.st4, .purchase-stage.st4 { background: #ffedd5; color: #c2410c; }
.badge-stage.st5, .purchase-stage.st5 { background: #d1fae5; color: #047857; }

/* ---------- 18.3 采购详情页（基本信息卡 / 阶段条） ---------- */
/* ========== 页面背景与基础 ========== */
/* 原 .purchase-detail-page 从未在模板中出现，导致 --s1 失效；改挂到实际容器 .info-section 上。 */
  .info-section { --s1: #7c3aed; }

  /* ========== 基本信息卡片 ========== */
  .info-section {
    background: #fff; border-radius: 4px; box-shadow: none;
    padding: 16px; margin-bottom: 10px;
    border: 0;
  }
  .info-section .section-header {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: 1.25rem; padding-bottom: .85rem;
    border-bottom: 1px solid #f0f0f5;
  }
  .info-section .section-header h6 { font-size: 1rem; font-weight: 700; color: #1e1b4b; letter-spacing: -.3px; }
  .info-section .section-header h6 i { color: var(--s1); }
  .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; font-size: .88rem; }
  .info-row { display: contents; }
  .info-row-full { display: contents; }
  .info-cell {
    padding: .85rem 1rem; border-bottom: 1px solid #f1f5f9;
    display: flex; flex-direction: column; justify-content: center;
  }
  .info-cell-full { grid-column: 1 / -1; }
  .ig-label { color: #94a3b8; font-size: .72rem; font-weight: 600; text-transform: uppercase; letter-spacing: .5px; margin-bottom: .2rem; }
  .ig-value { color: #1e293b; font-weight: 500; font-size: .9rem; }
  .ig-value.budget-highlight { color: #dc2626; font-weight: 800; font-size: 1.15rem; }
  .text-block { background: #f8fafc; border-radius: 10px; padding: .85rem 1rem; font-size: .85rem; color: #475569; line-height: 1.65; border: 1px solid #f1f5f9; }

  /* ========== 阶段行布局 ========== */
  .stage-row {
    display: grid; grid-template-columns: 185px 1fr; gap: 0;
    margin-bottom: 10px; border-radius: 4px; overflow: hidden;
    background: #fff;
    box-shadow: none;
    transition: box-shadow .2s;
    position: relative;
  }

  @media (max-width: 768px) { .stage-row { grid-template-columns: 1fr; } }

  .stage-left {
    padding: 16px; background: #fff; border-right: 1px solid #e7ebf0; display: flex;
    flex-direction: column; align-items: center; justify-content: center;
    text-align: center; position: relative; overflow: hidden;
  }
  .stage-left::before {
    content: ''; position: absolute; inset: 0;
    opacity: .06; z-index: 0;
  }
  .stage-left .stage-icon {
    font-size: 1.35rem; margin-bottom: .5rem; position: relative; z-index: 1;
    width: 42px; height: 42px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    background: rgba(255,255,255,.6);
  }
  .stage-left .stage-name { font-weight: 700; font-size: .88rem; position: relative; z-index: 1; margin-bottom: .35rem; }
  .stage-left .stage-status { font-size: .7rem; position: relative; z-index: 1; font-weight: 600; }


  .stage-right { background: #fff; padding: 1.25rem 1.5rem; }
  .stage-right .sr-header {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: .75rem;
  }
  .stage-right .sr-title { font-weight: 700; font-size: .92rem; color: #1e1b4b; }
  .stage-row-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem 1.25rem; font-size: .85rem; }
  @media (max-width: 576px) { .stage-row-grid { grid-template-columns: 1fr; } }
  .sr-label { color: #94a3b8; font-size: .72rem; font-weight: 600; text-transform: uppercase; letter-spacing: .4px; }
  .sr-value { color: #334155; font-weight: 500; font-size: .88rem; }
  .sr-value .val-highlight { color: #dc2626; font-weight: 700; }

  .empty-stage {
    display: flex; align-items: center; gap: .5rem; color: #cbd5e1;
    padding: .75rem 0; font-size: .85rem;
  }
  .empty-stage::before { content: '—'; color: #e2e8f0; }

  /* 子卡片 */
  .sub-card {
    background: #fafbfc; border-radius: 10px;
    padding: .75rem 1rem; margin-bottom: .6rem;
    border: 1px solid #f1f5f9;
    transition: border-color .15s;
  }
  .sub-card:hover { border-color: #e2e8f0; }

  /* ========== 状态徽章 ========== */
  .badge-status-dot {
    display: inline-flex; align-items: center; gap: .35rem;
    padding: .25em .65em; border-radius: 20px;
    font-size: .72rem; font-weight: 600;
  }
  .badge-status-dot::before {
    content: ''; width: 6px; height: 6px; border-radius: 50%;
  }
  .badge-status-dot.done { background: #dcfce7; color: #166534; }
  .badge-status-dot.done::before { background: #22c55e; }
  .badge-status-dot.progress { background: #fef3c7; color: #92400e; }
  .badge-status-dot.progress::before { background: #f59e0b; }
  .badge-status-dot.pending { background: #f1f5f9; color: #64748b; }
  .badge-status-dot.pending::before { background: #94a3b8; }

/* ---------- 18.4 场地安全页（文档缩略图 / 灯箱） ---------- */
.doc-thumb-wrap{
    position:relative;
    overflow:hidden;
    border-radius:6px;
    cursor:pointer;
    background:#e9ecef;
    aspect-ratio:4/3;
}
.doc-thumb-img{
    width:100%;
    height:100%;
    object-fit:cover;
    transition:transform .25s ease;
}
.doc-thumb-wrap:hover .doc-thumb-img{transform:scale(1.05)}
.doc-thumb-overlay{
    position:absolute;
    inset:0;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:6px;
    background:rgba(0,0,0,.4);
    color:#fff;
    font-size:.85rem;
    opacity:0;
    transition:opacity .25s ease;
}
.doc-thumb-wrap:hover .doc-thumb-overlay{opacity:1}
.doc-card{transition:box-shadow .2s ease}
.doc-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.1)}
.doc-file-icon{
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    aspect-ratio:4/3;
}
/* ============================================================
   19. Content Area（首页同款）
   ============================================================ */

/* ---------- 19.1 通用一级页面标题条 ---------- */
.page-heading {
    display: none;
    align-items: center;
    gap: 10px;
    margin: 0 0 18px;
    font-size: 18px;
    font-weight: 600;
    color: var(--ds-text-primary);
    line-height: 1.2;
}
.page-heading > i {
    color: var(--ds-brand-500);
    font-size: 18px;
    flex: 0 0 auto;
}
.page-heading > span {
    display: inline-block;
    line-height: 1.2;
}

/* ---------- 19.2 指标卡片 ---------- */
.stat-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
    margin-bottom: 16px;
}
@media (max-width: 1400px) {
    .stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
    .stat-grid { grid-template-columns: 1fr; }
}

.stat-card {
    position: relative;
    display: block;
    height: 130px;
    padding: 18px 20px 16px;
    border: 0;
    border-radius: 14px;
    background: var(--ds-bg-surface);
    color: #fff;
    text-decoration: none;
    overflow: hidden;
    cursor: pointer;
    isolation: isolate;
    transition: transform .22s ease, box-shadow .22s ease;
}
.stat-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 12px 26px rgba(15, 23, 42, .16);
    color: #fff;
    text-decoration: none;
}

.stat-card .card-label {
    position: relative;
    z-index: 1;
    font-size:var(--ds-font-size-section);
    font-weight:500;
    color: rgba(255,255,255,.92);
    margin-bottom: 4px;
    line-height: 1.2;
    letter-spacing: .2px;
}
.stat-card .card-value {
    position: relative;
    z-index: 1;
    font-size: 40px;
    font-weight:600;
    line-height: 1;
    letter-spacing: -.5px;
    margin-bottom: 6px;
    font-variant-numeric: tabular-nums;
    color: #fff;
}
.stat-card .card-detail {
    position: relative;
    z-index: 1;
    font-size:var(--ds-font-size-meta);
    line-height: 1.4;
    color: rgba(255,255,255,.92);
    font-weight:500;
    padding-right: 80px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.stat-card .card-detail .warn-text { color: #fff3cd; font-weight:600; }
.stat-card .card-link { display: none; }

.stat-cards-5 {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 16px;
    margin-bottom: 24px;
}
@media (max-width: 992px) {
    .stat-cards-5 { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 576px) {
    .stat-cards-5 { grid-template-columns: 1fr; }
}

/* ---------- 19.2.1 卡片渐变色 ---------- */
.stat-card.tone-device    { background: linear-gradient(120deg, #3977f8 0%, #2c6cf2 100%); }
.stat-card.bg-device      { background: linear-gradient(120deg, #3977f8 0%, #2c6cf2 100%); }
.stat-card.tone-project   { background: linear-gradient(120deg, #45b1ee 0%, #3aa5e6 100%); }
.stat-card.bg-project     { background: linear-gradient(120deg, #45b1ee 0%, #3aa5e6 100%); }
.stat-card.tone-target    { background: linear-gradient(120deg, #46bfbc 0%, #3bb2af 100%); }
.stat-card.bg-target      { background: linear-gradient(120deg, #46bfbc 0%, #3bb2af 100%); }
.stat-card.tone-usage     { background: linear-gradient(120deg, #5089d9 0%, #4a83d3 100%); }
.stat-card.bg-usage       { background: linear-gradient(120deg, #5089d9 0%, #4a83d3 100%); }
.stat-card.tone-accessory { background: linear-gradient(120deg, #8b7cf0 0%, #b3a8f5 100%); }
.stat-card.bg-accessory   { background: linear-gradient(120deg, #8b7cf0 0%, #b3a8f5 100%); }
.stat-card.tone-consumable{ background: linear-gradient(120deg, #f08bb0 0%, #f7b8ce 100%); }
.stat-card.bg-consumable  { background: linear-gradient(120deg, #f08bb0 0%, #f7b8ce 100%); }
.stat-card.tone-customer  { background: linear-gradient(120deg, #4a8df8 0%, #3b7ef0 100%); }
.stat-card.bg-customer    { background: linear-gradient(120deg, #4a8df8 0%, #3b7ef0 100%); }
.stat-card.tone-active    { background: linear-gradient(120deg, #f5a76c 0%, #f8c39a 100%); }
.stat-card.bg-active      { background: linear-gradient(120deg, #f5a76c 0%, #f8c39a 100%); }

/* 业务页面白底卡片 */
.warn-stats,
.metric-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
    margin-bottom: 16px;
}
.warn-stat,
.metric-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-width: 0;
    height: 104px;
    padding: 18px 20px;
    border: 2px solid #dfe7f3;
    border-radius: 8px;
    background: #ffffff;
    box-shadow: none;
    text-align: center;
    text-decoration: none;
    color: #333333;
    --warn-number-color: #2878f0;
}
.warn-stat--critical, .metric-card--danger { --warn-number-color: #ef4444; }
.warn-stat--warning, .metric-card--warning { --warn-number-color: #ff7d00; }
.warn-stat--normal, .metric-card--success { --warn-number-color: #38b900; }
.warn-stat--total, .metric-card--neutral { --warn-number-color: #8f9fb1; }
.warn-stat__value,
.metric-card__value {
    margin-bottom: 6px;
    color: var(--warn-number-color);
    font-size: 32px;
    line-height: 1;
    font-weight:600;
    font-variant-numeric: tabular-nums;
}
.warn-stat__label,
.metric-card__label {
    color: #333333;
    font-size:var(--ds-font-size-meta);
    line-height: 18px;
    font-weight:500;
}
.metric-grid--fuel { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.metric-grid--fuel > .metric-card {
    position: relative;
    align-items: flex-start;
    justify-content: center;
    height: auto;
    min-height: 120px;
    padding: 20px 72px 16px 20px;
    border: 1px solid #dfe7f3;
    border-radius: 12px;
    text-align: left;
    --warn-number-color: #3478f6;
}
.metric-grid--fuel > .metric-card--success { --warn-number-color: #44ac6b; }
.metric-grid--fuel > .metric-card--warning { --warn-number-color: #e2a126; }
.metric-grid--fuel .metric-card__label { color: #596579; font-size:var(--ds-font-size-body); line-height: 20px; margin-bottom: 10px; }
.metric-grid--fuel .metric-card__value { font-size: 30px; line-height: 36px; margin-bottom: 4px; overflow-wrap: anywhere; }
.metric-grid--fuel .metric-card__description { color: #94a3b8; font-size:var(--ds-font-size-body); line-height: 20px; }
.metric-grid--fuel .metric-card__symbol {
    position: absolute;
    top: 16px;
    right: 20px;
    color: var(--warn-number-color);
    opacity: .3;
    font-size: 48px;
    font-weight:600;
    line-height: 1;
    pointer-events: none;
}
.metric-grid--five { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.metric-card--info { --warn-number-color: #0bb8bc; }
a.metric-card:hover, a.metric-card:focus-visible {
    border-color: #2878f0;
    color: #333333;
}
.metric-card--content {
    height: auto;
    align-items: stretch;
    justify-content: flex-start;
    text-align: left;
    margin-bottom: 16px;
}
.metric-card__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding-bottom: 12px;
    margin-bottom: 12px;
    border-bottom: 1px solid #e5e7eb;
}
@media (max-width: 992px) {
    .warn-stats, .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 576px) {
    .warn-stats, .metric-grid { grid-template-columns: 1fr; }
}

/* ---------- 19.2.2 KPI 卡片右侧装饰图 ---------- */
.stat-card .card-icon {
    position: absolute;
    right: 0;
    bottom: 0;
    z-index: 0;
    width: 150px;
    height: 150px;
    background-repeat: no-repeat;
    background-position: right bottom;
    background-size: contain;
    color: transparent;
    font-size: 0;
    opacity: .35;
    pointer-events: none;
    transition: opacity .22s ease, transform .22s ease;
}
.stat-card .card-icon::before,
.stat-card .card-icon::after { content: none !important; }
.stat-card:hover .card-icon { opacity: .5; transform: scale(1.03); }

.stat-card.tone-device     .card-icon { background-image: url('/static/images/kpi-device.png'); }
.stat-card.tone-project    .card-icon { background-image: url('/static/images/kpi-project.png'); }
.stat-card.tone-target     .card-icon { background-image: url('/static/images/kpi-target.png'); }
.stat-card.tone-usage      .card-icon { background-image: url('/static/images/kpi-usage.png'); }
.stat-card.tone-accessory  .card-icon { background-image: url('/static/images/kpi-accessory.png'); }
.stat-card.tone-consumable .card-icon { background-image: url('/static/images/kpi-consumable.png'); }
.stat-card.tone-customer   .card-icon { background-image: url('/static/images/kpi-customer.png'); }
.stat-card.tone-active     .card-icon { background-image: url('/static/images/kpi-active.png'); }

/* ---------- 19.3 快捷操作栏 ---------- */
.quick-bar {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    padding: 12px 16px;
    margin-bottom: 16px;
    min-height: 52px;
    border: 1px solid var(--ds-border);
    border-radius: 10px;
    background: var(--ds-bg-surface);
}
.quick-bar-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-right: 4px;
    font-size:var(--ds-font-size-meta);
    font-weight: 600;
    color: var(--ds-text-primary);
    white-space: nowrap;
}
.quick-bar-label::before { content: "⚡"; font-size:var(--ds-font-size-meta); line-height: 1; }


/* ---------- 19.4 面板卡 ---------- */
.panel-card {
    display: flex;
    flex-direction: column;
    border: 1px solid var(--ds-border);
    border-radius: 12px;
    background: var(--ds-bg-surface);
    box-shadow: none;
    overflow: hidden;
}
.panel-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    min-height: 40px;
    padding: 14px 20px 6px;
}
:is(.panel-card-title, .page-card__title, .table-page__title, .table-page__operations[data-title]) {
    --ds-list-title-marker-width: 4px;
    --ds-list-title-marker-height: 14px;
    --ds-list-title-marker-radius: 2px;
}
.panel-card-title {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    font-size:var(--ds-font-size-section);
    font-weight: 600;
    color: var(--ds-text-primary);
    white-space: nowrap;
    line-height: 1;
    padding-left: 12px;
    position: relative;
}
.panel-card-title::before {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    width: var(--ds-list-title-marker-width);
    height: var(--ds-list-title-marker-height);
    border-radius: var(--ds-list-title-marker-radius);
    background: var(--ds-brand-500);
}
.panel-card-title > i { display: none !important; }
.panel-card-body { padding: 6px 20px 20px; }

.panel-card--table > .panel-card-head,
.page-card--table > .page-card__head {
    padding: 16px 20px;
    border-bottom: 1px solid var(--ds-border);
}
.panel-card--table .panel-card-title,
.page-card--table .page-card__title { padding-left: 0; line-height: 22px; }
.panel-card--table .panel-card-title::before,
.page-card--table .page-card__title::before { display: none; }
.panel-card--table .panel-card-title > i,
.page-card--table .page-card__title > i {
    display: inline-block !important;
    color: var(--ds-brand-500);
    font-size:var(--ds-font-size-body);
    flex: 0 0 auto;
}
.panel-card--table > .panel-card-body,
.page-card--table > .page-card__body { padding: 0; }
.page-card--table .pagination { padding: 16px 20px; }
.table-thumbnail { width: 48px; height: 48px; object-fit: cover; border-radius: 4px; }

/* ---------- 19.4.2 图表容器 ---------- */
.chart-container {
    position: relative;
    width: 100%;
    height: 240px;
    border: 1px dashed #cbd5e1;
    border-radius: 8px;
    background: #f8fafc;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 8px;
}
.chart-container canvas {
    width: 100% !important;
    height: 100% !important;
    display: block;
}
.chart-placeholder {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 100%;
    flex: 1 1 auto;
    color: var(--ds-text-tertiary);
    font-size:var(--ds-font-size-meta);
    pointer-events: none;
}
.chart-placeholder > i { font-size: 32px; opacity: .35; line-height: 1; }
.chart-legend-static {
    display: flex;
    justify-content: center;
    gap: 20px;
    margin-top: 12px;
    font-size:var(--ds-font-size-small);
    color: var(--ds-text-secondary);
    flex: 0 0 auto;
}
.chart-legend-static .legend-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.chart-legend-static .legend-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    flex: 0 0 8px;
    border-radius: 50%;
}
.chart-legend-static .legend-dot.is-idle { background: var(--chart-up); }
.chart-legend-static .legend-dot.is-using { background: var(--chart-primary); }
.chart-legend-static .legend-dot.is-fault { background: var(--chart-down); }
.chart-legend-static .legend-dot.is-maintenance { background: var(--chart-warn); }

/* ---------- 19.5 空状态 ---------- */
.empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 36px 20px;
    border-radius: 8px;
    background: #f8fafc;
    color: var(--ds-text-tertiary);
    font-size:var(--ds-font-size-meta);
    text-align: center;
}
.empty-state > i { font-size: 26px; opacity: .45; }
.empty-state.is-ok { background: #f0fdf4; color: #16a34a; }
.empty-state.is-ok > i { opacity: .85; }
.card-body > .empty-state,
.panel-card-body > .empty-state {
    padding: 60px 20px;
    min-height: 220px;
    margin: 0;
    border-radius: 0;
    background: #f8fafc;
}

/* ---------- 19.6 预警横幅 ---------- */
/* ---------- 19.7 内容区栅格 ---------- */
.content-row {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    gap: 18px;
    margin-bottom: 20px;
}
.content-row.is-even { grid-template-columns: 1fr 1fr; }
.content-row.is-full { grid-template-columns: 1fr; }
@media (max-width: 1200px) {
    .content-row,
    .content-row.is-even { grid-template-columns: 1fr; }
}

/* ---------- 19.8 工作区 Bootstrap 卡片统一 ---------- */
.workspace .card {
    border: 1px solid var(--ds-border);
    border-radius: 12px;
    box-shadow: none;
    overflow: hidden;
    background: var(--ds-bg-surface);
}
.workspace .card-header {
    padding: 14px 20px 6px;
    background: var(--ds-bg-surface);
    border-bottom: 0;
}
.workspace .card-header h6 {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    font-size:var(--ds-font-size-section);
    font-weight: 600;
    color: var(--ds-text-primary);
    white-space: nowrap;
}
.workspace .card-body { padding: 6px 20px 20px; }
.workspace .row.g-3 > [class*="col-"] { display: flex; }
.workspace .row.g-3 > [class*="col-"] > .stat-card,
.workspace .row.g-3 > [class*="col-"] > .panel-card,
.workspace .row.g-3 > [class*="col-"] > .card {
    flex: 1 1 auto;
    width: 100%;
}
.panel-card .panel-card { border: 0; box-shadow: none; }
.panel-card .panel-card .panel-card-head { display: none; }
.panel-card .panel-card .panel-card-body { padding: 0; }

/* ============================================================
   20. Page Card（通用列表页卡片）
   ============================================================ */
.page-card {
    width: 100%;
    min-width: 0;
    background: #ffffff;
    border: 1px solid #e9edf3;
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(15, 23, 42, .04);
    overflow: hidden;
    margin-bottom: 20px;
}
.page-card__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    padding: 16px 20px;
    border-bottom: 1px solid #f0f2f5;
    background: #ffffff;
}
.page-card__title {
    display: none;
    align-items: center;
    gap: 6px;
    margin: 0;
    font-size:var(--ds-font-size-section);
    font-weight: 600;
    color: var(--ds-text-primary);
    line-height: 1.2;
    white-space: nowrap;
}
.page-card__title::before {
    content: "";
    width: var(--ds-list-title-marker-width);
    height: var(--ds-list-title-marker-height);
    flex: 0 0 var(--ds-list-title-marker-width);
    border-radius: var(--ds-list-title-marker-radius);
    background: var(--ds-brand-500);
}
.page-card__title:has(> i)::before { display: none; }
.page-card__title > i { display: inline-block; color: var(--ds-brand-500); font-size:var(--ds-font-size-body); }
.page-card__actions {
    display: flex;
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
}


.page-card__body { padding: 0; background: #ffffff; }
.page-card__toolbar {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 20px;
    margin-bottom: 0;
    flex-wrap: nowrap;
}
.page-card__body > .pagination { padding: 16px 20px; }
.page-card__toolbar .filters {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
}
.page-card__toolbar .search {
    flex: 1 1 auto;
    min-width: 240px;
}
.page-card__body .pagination {
    border-top: 1px solid #eef2f7;
    margin-top: 12px;
    padding-top: 12px;
    padding-bottom: 0;
    background: transparent;
}
@media (max-width: 760px) {
    .page-card__head { padding: 12px 16px; }
    .page-card__body { padding: 12px 16px 16px; }
    .page-card__toolbar .filters { flex-wrap: wrap; }
    .page-card__toolbar .search {
        width: 100%;
        min-width: 0;
        flex-basis: 100%;
    }
}
/* ============================================================
   统一查询表格布局：筛选卡片 + 表格卡片
   ============================================================ */
.table-page {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    --list-gap: 16px;
    --list-padding: 16px;
    --list-radius: 6px;
    --list-title-size: 15px;
    gap: var(--list-gap);
    padding: 0;
    min-width: 0;
}

/* 外层 page-card 去掉边框，只作布局容器 */
.table-page.page-card {
    border: 0;
    border-radius: 0;
    box-shadow: none;
    background: transparent;
    margin-bottom: 20px;
    overflow: visible;
}

/* 公共列表组件：标题、筛选、左侧业务操作、右侧导入导出、表格、分页。
   页面只引用 table-page 系列类名，不写页面专属样式。
   表格单元格统一在第 9 节管理，分页基础样式在第 10 节管理。 */
/* 隐藏原 page-card 标题 */
.table-page > .page-card__title { display: none; }

/* ---------- 筛选卡片（标题在卡片左上角） ---------- */
/* 推荐使用真实 h2 标题；data-title 兼容旧页面。 */
/* 表格筛选区：三列字段；操作位于第二行右侧，保留原配色 */
.table-page__filters {
    position: relative;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    column-gap: 24px;
    row-gap: 16px;
    margin: 0;
    padding: 0 var(--list-padding) 20px;
    border: 1px solid var(--ds-border);
    border-radius: var(--list-radius);
    background: var(--ds-bg-surface);
    box-shadow: none;
}
.table-page__title {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 calc(-1 * var(--list-padding)) 4px;
    padding: 18px var(--list-padding);
    border-bottom: 1px solid var(--ds-border);
    color: var(--ds-text-primary);
    font-size: var(--list-title-size);
    font-weight: 600;
    line-height: 24px;
}
.table-page__title::before {
    content: "";
    width: var(--ds-list-title-marker-width);
    height: var(--ds-list-title-marker-height);
    flex: 0 0 var(--ds-list-title-marker-width);
    border-radius: var(--ds-list-title-marker-radius);
    background: var(--ds-brand-500);
}
/* 兼容仅通过 data-title 输出标题的旧模板 */
.table-page__filters[data-title]:not(:has(.table-page__title)) { padding-top: 78px; }
.table-page__filters[data-title]:not(:has(.table-page__title))::before {
    content: attr(data-title);
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    display: flex;
    align-items: center;
    height: 60px;
    padding: 0 var(--list-padding);
    border-bottom: 1px solid var(--ds-border);
    font-size: var(--list-title-size);
    font-weight: 600;
    color: var(--ds-text-primary);
}
/* .table-page__fields 不产生额外网格层，字段直接参与排版 */
.table-page__fields { display: contents; }
.table-page__field {
    display: grid;
    grid-template-columns: 72px minmax(0, 1fr);
    align-items: center;
    gap: 6px;
    min-width: 0;
}
.table-page__field > label {
    margin: 0;
    color: var(--ds-text-primary);
    font-size:var(--ds-font-size-body);
    font-weight: 500;
    white-space: nowrap;
    text-align: right;
}
.table-page__field > :is(input, select, .search) {
    width: 100%;
    min-width: 0;
    max-width: 100%;
}
.table-page__query {
    grid-column: 3;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
    padding: 0;
    white-space: nowrap;
}
.table-page__query .btn { min-width: 64px; height: 32px; font-size:var(--ds-font-size-body); }

/* ---------- 表格卡片（无标题，仅操作按钮） ---------- */
/* 所有按钮组一律左对齐并列，不做左右分散；
   左右内边距与筛选卡保持一致，使标题、按钮、表格三区左边缘严格对齐。 */
.table-page__operations {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: 12px;
    min-width: 0;
    margin: 0;
    padding: 10px var(--list-padding);
    border: 1px solid var(--ds-border);
    border-bottom: 0;
    border-top-left-radius: var(--list-radius);
    border-top-right-radius: var(--list-radius);
    background: var(--ds-bg-surface);
}
.table-page__operation-group {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    min-width: 0;
}

/* 标题归入表格工具栏时，筛选卡不再重复占用标题行。 */
.table-page__filters--titleless {
    padding-top: 20px;
}
.table-page__filters--titleless .table-page__title {
    display: none;
}

/* 状态按钮型筛选使用与字段筛选相同的卡片标准。 */
.table-page__filters--status {
    display: block;
    padding: 16px var(--list-padding);
}
.table-page__status-filters {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
    gap: 8px;
    min-width: 0;
}

/* data-title 统一输出表格标题，业务按钮统一靠右。 */
.table-page__operations[data-title] {
    position: relative;
    min-height: 54px;
    justify-content: space-between;
}
.table-page__operations[data-title]::before {
    content: attr(data-title);
    display: inline-flex;
    align-items: center;
    min-height: 24px;
    padding-left: 14px;
    color: var(--ds-text-primary);
    font-size: var(--list-title-size);
    font-weight: 600;
    line-height: 24px;
    white-space: nowrap;
}
.table-page__operations[data-title]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: var(--list-padding);
    width: var(--ds-list-title-marker-width);
    height: var(--ds-list-title-marker-height);
    border-radius: var(--ds-list-title-marker-radius);
    background: var(--ds-brand-500);
    transform: translateY(-50%);
}
.table-page__operations[data-title] .table-page__operation-group {
    justify-content: flex-end;
    margin-left: auto;
}
/* 工具栏与表格相接，仅筛选区与列表之间保留间距。 */
.table-page__operations + .page-card__body { margin-top: calc(-1 * var(--list-gap)); }
.table-page > .page-card__body > .table-responsive { margin: 0; border: 0; border-radius: 0; box-shadow: none; }
.table-page > .page-card__body > .pagination { flex-wrap: wrap; gap: 12px; }
.table-page > .page-card__body > .pagination .pages { flex-wrap: wrap; gap: 8px; }

.table-page > .page-card__body {
    border: 1px solid var(--ds-border);
    border-top: 0;
    border-radius: 0 0 var(--list-radius) var(--list-radius);
    background: var(--ds-bg-surface);
    box-shadow: none;
    overflow: hidden;
    padding: 0;
}
.table-page > .page-card__body > .pagination {
    margin-top: 0;
    padding: 16px 20px;
    border-top: 1px solid var(--ds-border);
}

/* ---------- 响应式 ---------- */
@media (max-width: 1200px) {
    .table-page__filters { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .table-page__query { grid-column: 2; justify-content: flex-end; }
}
@media (max-width: 760px) {
    .table-page { --list-gap: 12px; }
    .table-page__filters { grid-template-columns: minmax(0, 1fr); row-gap: 14px; }
    .table-page__query { grid-column: 1; width: 100%; justify-content: flex-start; padding: 4px 0 0; }
}

/* ============================================================
   22. Keyfob / Fuelcard Tile
   ============================================================ */
/* Compact, left-aligned keyfob card grid: one source of layout rules. */
/* Tile lists use the page background between individual cards. */
.keyfob-page > .page-card__body {
    background: transparent;
    border: 0;
    border-radius: 0;
    overflow: visible;
}
.keyfob-page > .table-page__operations {
    background: transparent;
    border: 0;
    padding-left: 0;
    padding-right: 0;
}
.keyfob-page > .page-card__body > .pagination {
    background: transparent;
    border-top: 0;
    padding-left: 0;
    padding-right: 0;
}
.keyfob-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 320px)); gap: 16px; justify-content: start; align-items: stretch; }
.keyfob-grid__item { min-width: 0; display: flex; }
.keyfob-grid__item > .keyfob-tile { width: 100%; }
@media (max-width: 720px) { .keyfob-grid { grid-template-columns: minmax(0, 320px); } }

.keyfob-tile {
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding: 16px;
    border: 1px solid var(--ds-border);
    border-left: 4px solid var(--ds-border-strong);
    border-radius: 10px;
    background: #fff;
    transition: box-shadow .15s ease, transform .15s ease;
}
.keyfob-tile:hover {
    box-shadow: 0 6px 18px rgba(15, 23, 42, .08);
    transform: translateY(-2px);
}
.keyfob-tile.is-borrowed  { border-left-color: #f5a524; }
.keyfob-tile.is-available { border-left-color: #18b873; }
.keyfob-tile.is-in-use    { border-left-color: var(--ds-brand-500); }
.keyfob-tile.is-disabled  { border-left-color: #8b93a1; }
.keyfob-tile__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 12px;
}
.keyfob-tile__code {
    display: block;
    font-size:var(--ds-font-size-section);
    font-weight: 600;
    color: var(--ds-text-primary);
    text-decoration: none;
}
.keyfob-tile__code:hover { color: var(--ds-brand-500); }
.keyfob-tile__name {
    margin-top: 2px;
    font-size:var(--ds-font-size-small);
    color: var(--ds-text-tertiary);
}
.keyfob-tile__car {
    padding: 10px 12px;
    margin-bottom: 10px;
    border-radius: 8px;
    background: #f8fafc;
    font-size:var(--ds-font-size-small);
    line-height: 1.5;
}
.keyfob-tile__car--empty {
    text-align: center;
    color: var(--ds-text-tertiary);
}
.keyfob-tile__location {
    margin-bottom: 10px;
    font-size:var(--ds-font-size-small);
    color: var(--ds-text-secondary);
}
.keyfob-tile__qr {
    display: flex;
    justify-content: center;
    margin: 8px 0 12px;
}
.keyfob-tile__qr img {
    width: 120px;
    height: 120px;
    max-width: 100%;
    object-fit: contain;
    display: block;
}
.keyfob-tile__foot {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 8px;
    padding-top: 10px;
    border-top: 1px solid #f0f2f5;
}

.fuelcard-toolbar { margin-bottom: 16px; }
.fuelcard-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; align-items: stretch; }
.fuelcard-grid__empty { grid-column: 1 / -1; }
.fuelcard-tile {
    display: flex;
    flex-direction: column;
    min-width: 0;
    overflow: hidden;
    border: 1px solid var(--ds-border);
    border-radius: 12px;
    background: #fff;
}
.fuelcard-tile__body { padding: 20px 24px; }
.fuelcard-tile__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 20px;
}
.fuelcard-tile__no {
    font-size: 20px;
    font-weight: 600;
    color: var(--ds-text-primary);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    line-height: 28px;
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
}
.fuelcard-tile__provider {
    margin-top: 10px;
    font-size:var(--ds-font-size-body);
    color: #475569;
}
.fuelcard-tile__head > div { min-width: 0; }
.fuelcard-tile__head .t-tag { flex: 0 0 auto; height: 32px; padding: 0 12px; border: 0; font-size:var(--ds-font-size-body); }
.fuelcard-tile__stats {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0;
    padding: 18px 0 0;
    border-top: 1px solid var(--ds-border);
    text-align: center;
}
.fuelcard-tile__stats > div { min-width: 0; padding: 0 8px; }
.fuelcard-tile__stats > div + div { border-left: 1px solid var(--ds-border); }
.fuelcard-tile__stat-value {
    font-size: 24px;
    font-weight:600;
    line-height: 32px;
    color: var(--ds-text-primary);
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
}
.fuelcard-tile__balance { color: var(--ds-brand-500); }
.fuelcard-tile__stat-label {
    margin-top: 10px;
    font-size:var(--ds-font-size-body);
    color: #94a3b8;
}
.fuelcard-tile__total {
    margin-top: 12px;
    font-size:var(--ds-font-size-small);
    color: var(--ds-text-secondary);
    text-align: center;
}
.fuelcard-tile__foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: auto;
    padding: 10px 18px;
    border-top: 1px solid var(--ds-border);
    background: #f8fafc;
}
.fuelcard-tile__date { color: #94a3b8; font-size:var(--ds-font-size-body); }
.fuelcard-tile__actions { display: flex; flex-wrap: nowrap; gap: 8px; margin-left: auto; }


@media (max-width: 760px) { .fuelcard-grid { grid-template-columns: minmax(0, 1fr); } }

/* ============================================================
   23. AI Alert List
   ============================================================ */
.ai-alert-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
    max-height: 400px;
    overflow-y: auto;
}
.ai-alert-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 14px;
    border: 1px solid var(--ds-border);
    border-left: 4px solid var(--ds-border-strong);
    border-radius: 8px;
    background: #fff;
}
.ai-alert-item.is-critical { border-left-color: #ef4444; background: rgba(254, 242, 242, .45); }
.ai-alert-item.is-warning  { border-left-color: #f5a524; background: rgba(255, 247, 230, .45); }
.ai-alert-item.is-info     { border-left-color: #8b93a1; background: rgba(248, 250, 252, .45); }
.ai-alert-item .t-tag { flex: 0 0 auto; margin-top: 0; }
.ai-alert-body { flex: 1 1 auto; min-width: 0; }
.ai-alert-title {
    font-size:var(--ds-font-size-body);
    font-weight: 600;
    color: var(--ds-text-primary);
    line-height: 1.4;
}
.ai-alert-detail {
    margin-top: 2px;
    font-size: 12.5px;
    color: var(--ds-text-secondary);
    line-height: 1.5;
}
.ai-alert-suggestion {
    margin-top: 4px;
    font-size: 12.5px;
    color: var(--ds-brand-600);
}
.ai-alert-suggestion > i { margin-right: 4px; }

/* ============================================================
   24. Type Column Presentation（类型列正文展示）
   ============================================================ */
/* 类型列显示为普通正文 */
.workspace table td.table-type-cell :is(.t-tag, .table-tag, .status,
    .badge, .tag, .binding, .op-tag, .target-tag, .type-pill, .pill),
.workspace table :is(.target-tag, .type-pill){
  display:inline;
  height:auto;
  min-height:0;
  padding:0;
  margin:0;
  border:0;
  border-radius:0;
  background:transparent;
  box-shadow:none;
  color:#333333;
  font-family:var(--ds-font-sans);
  font-size:var(--ds-font-size-body);
  font-weight:500;
  line-height:22px;
}
.workspace table td.table-type-cell :is(.t-tag, .table-tag, .status,
    .badge, .tag, .binding, .op-tag, .target-tag, .type-pill, .pill)::before,
.workspace table :is(.target-tag, .type-pill)::before{
  content:none;
  display:none;
}

/* 操作日志的对象类型：保持胶囊形态，使用中性底色与等宽字体。 */
.operation-log-table .target-tag{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  height:24px;
  padding:3px 7px;
  border:0;
  border-radius:4px;
  background:#eef1f5;
  color:#666666;
  font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;
  font-size:var(--ds-font-size-body);
  font-weight:600;
  line-height:18px;
}

/* ============================================================
   25. Shared Asset Forms（资产表单通用排版）
   ============================================================ */
:is(.card, .metric-card--content):has(> .ds-form-body > .ds-form) {
    background: transparent;
    padding: 0;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    overflow: visible;
}
.card:has(> .ds-form-body > .ds-form) > .card-header {
    display: none;
}
.ds-form-body { padding: 0 !important; background: transparent; }
.ds-form .ds-form-section {
    box-sizing: border-box;
    padding: 14px 20px;
    background: var(--ds-bg-surface);
    border: 1px solid var(--ds-border);
    border-radius: 12px;
    box-shadow: none;
}
.ds-form .ds-form-section + .ds-form-section { margin-top: 20px; }
.ds-form .ds-form-section-title {
    display: block;
    width: calc(100% + 40px);
    box-sizing: border-box;
    margin: -14px -20px 14px;
    position: relative;
    min-height: 40px;
    padding: 10px 20px;
    background-color: #F8FAFC;
    color: #333333;
    border-radius: 11px 11px 0 0;
}
.ds-form:not(.ds-drawer-form) .ds-form-section-title {
    font-size: var(--ds-font-size-section);
    font-weight: 600;
    line-height: 22px;
}
.ds-form:not(.ds-drawer-form) .ds-form-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 20px 24px;
}
.ds-form :is(.ds-form-field, .ds-form-control) { min-width: 0; }
.ds-form:not(.ds-drawer-form) .ds-form-field--full { grid-column: 1 / -1; }
.ds-form:not(.ds-drawer-form) .ds-form-field--half { grid-column: span 1; }

.ds-form .ds-form-field :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]), select, textarea) {
    width: 100%;
    max-width: 100%;
    min-width: 0;
}
.ds-form .ds-form-field--binding { grid-column: auto; }


.ds-form .ds-form-field > .text-danger { margin-top: 6px; }
.ds-form .ds-form-field .img-thumbnail {
    display: block;
    max-width: 100%;
    height: auto;
    max-height: 160px;
    object-fit: contain;
}
.ds-form .ds-form-field .form-check {
    display: flex;
    align-items: center;
    gap: 6px;
    padding-left: 0;
    min-height: 24px;
}
.ds-form .ds-form-field .form-check input[type="checkbox"] {
    flex: 0 0 auto;
    float: none;
    margin: 0;
}
.ds-form > .alert { margin-top: 20px; }
.ds-form .ds-form-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
    margin-top: 20px;
    padding: 0;
    background: transparent;
    border: 0;
}
.ds-form .ds-form-actions > .ms-2 { margin-left: 0 !important; }

.ds-form .ds-form-choice-list {
    border: 1px solid var(--ds-border);
    border-radius: var(--ds-control-radius);
    padding: 12px;
    max-height: 200px;
    overflow-y: auto;
}
.ds-form .ds-form-choice-list .ds-form-grid { gap: 12px 20px; }
.ds-form .ds-form-choice-list .form-check { margin: 0; }
.ds-form .ds-form-resource-item { display: flex; align-items: center; gap: 8px; min-width: 0; }
.ds-form .ds-form-resource-item > .form-check { flex: 1; min-width: 0; }
.ds-form .ds-form-resource-item > input[type="number"] { flex: 0 0 80px; width: 80px; }
.ds-form .ds-form-resource-item > input[hidden] { display: none !important; }

.ds-form .ds-form-filter-head { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-bottom: 8px; }
.ds-form .ds-form-filter-head > .cat-filter { flex: 0 1 180px; width: 180px; }
.ds-form .ds-form-choice-list--tall { max-height: 340px; }
.ds-form .ds-form-slot-time { font-size: .65rem; }
.ds-form .ds-form-slot-avail { font-size: .7rem; font-weight: 500; }

@media (max-width: 991px) {
    .ds-form:not(.ds-drawer-form) .ds-form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

}
@media (max-width: 767px) {
    .ds-form:not(.ds-drawer-form) .ds-form-grid { grid-template-columns: minmax(0, 1fr); gap: 16px; }
}

.ds-detail .ds-form-grid { margin: 0; }
.ds-detail .ds-form-field > dt { margin: 0 0 8px; color: #64748b; font-size:var(--ds-font-size-body); font-weight:500; line-height: 22px; }
.ds-detail .ds-form-field > dd { margin: 0; color: #333333; font-size:var(--ds-font-size-body); font-weight:500; line-height: 22px; overflow-wrap: anywhere; }
.ds-detail-images { display: flex; flex-wrap: wrap; gap: 12px; }
.ds-detail-image { display: block; height: 100px; max-width: 100%; object-fit: cover; border-radius: 4px; }

/* ============================================================
   26. Authentication Pages — shared controls, independent page layout
   ============================================================ */
html.auth-document{height:auto;min-height:100%;overflow:auto}
.auth-page{color-scheme:light;--ds-control-size:40px;--auth-bg:var(--ds-bg-surface);--auth-input:var(--ds-bg-surface);--auth-border:var(--ds-border-strong);--auth-text:var(--ds-text-primary);--auth-muted:var(--ds-text-secondary);--auth-blue:var(--ds-brand-500)}
body.auth-page{height:auto;min-height:100vh;min-height:100dvh;overflow:visible;margin:0;font:400 14px/1.6 var(--ds-font-sans);color:var(--ds-text-primary);background:var(--ds-bg-surface)}
.auth-page :is(button,a,input){-webkit-tap-highlight-color:transparent}
.auth-page a:not(.auth-button):hover{text-decoration:underline}
.auth-page .auth-layout{display:grid;grid-template-columns:60% 40%;min-height:100vh;min-height:100dvh}
.auth-page .auth-brand{position:absolute;top:20px;left:24px;display:flex;align-items:center;gap:12px;z-index:1;color:var(--ds-text-primary);font-size:20px;font-weight:600;line-height:1.5}
.auth-page .auth-brand i{color:var(--ds-brand-500);font-size:32px}
.auth-page .auth-brand small{display:block;font-size:var(--ds-font-size-small);font-weight:400;color:var(--ds-text-secondary)}
.auth-page .auth-hero{--auth-scene:url("auth-hero.jpg");position:sticky;top:0;align-self:start;height:max(320px,100vh);height:max(320px,100dvh);overflow:hidden;isolation:isolate;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:0;padding:0;background:linear-gradient(180deg,#9bcafc 0%,#bfd6f3 38%,#b9cef2 100%);text-align:center}
/* 配图等比铺满左栏（cover 裁切边缘，主体居中保留）；渐变底色仅作加载回退。 */
.auth-page .auth-hero::before{content:none}
.auth-page .auth-art{position:absolute;inset:0;margin:auto;width:100%;height:100%;z-index:-1;background-image:var(--auth-scene);background-size:cover;background-position:center;background-repeat:no-repeat}
.auth-page .auth-hero-copy{position:absolute;bottom:clamp(24px,5vh,64px);left:24px;right:24px;text-align:center}
.auth-page .auth-hero-copy h2{margin:0 0 6px;font-size:24px;line-height:1.4;font-weight:600;color:var(--ds-text-primary)}
.auth-page .auth-hero-copy p{margin:0;color:var(--ds-text-secondary);font-size:var(--ds-font-size-body)}
.auth-page .auth-main{position:relative;display:flex;align-items:center;justify-content:center;padding:100px 40px 90px}
.auth-page .auth-form-wrap{width:100%;max-width:448px}
.auth-page .auth-form-wrap h1{font-size:36px;line-height:1.4;letter-spacing:-1px;margin:0 0 6px;font-weight:700}
.auth-page .auth-description{margin:0 0 28px;color:var(--ds-text-secondary)}
.auth-page .auth-field{margin:0 0 18px}
.auth-page .auth-field input{display:block;width:100%;min-width:0}
.auth-page .auth-field input:-webkit-autofill{-webkit-text-fill-color:var(--ds-text-primary);-webkit-box-shadow:0 0 0 1000px var(--ds-bg-surface) inset}
.auth-page .auth-password{position:relative}.auth-page .auth-password input{padding-right:44px}
.auth-page .toggle-password{position:absolute;right:4px;top:50%;transform:translateY(-50%);height:28px;width:28px;display:flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--ds-radius-sm);background:transparent;color:var(--ds-text-secondary);font-size:18px}.auth-page .toggle-password:hover{color:var(--ds-text-primary);background:var(--ds-bg-hover)}
.auth-page .auth-options{display:flex;justify-content:flex-end;margin:2px 0 24px}
.auth-page .auth-button{width:100%}.auth-page .auth-secondary{margin-top:16px}
.auth-page .auth-register{text-align:center;margin:28px 0 0}
.auth-page .auth-footer{position:absolute;bottom:20px;left:24px;right:24px;text-align:center;color:var(--ds-text-secondary);font-size:var(--ds-font-size-small)}
.auth-page :is(.auth-alert,.auth-errors){display:block;margin:0 0 18px}
.auth-page .auth-errors{margin-top:8px;margin-bottom:0;font-size:var(--ds-font-size-meta)}.auth-page .auth-errors ul{margin:0;padding-left:18px}


.auth-page.auth-labelled .auth-field .sr-only{display:initial}
.auth-page.auth-labelled .text-danger{font-size:var(--ds-font-size-meta)}.auth-page.auth-labelled .text-danger ul{margin:6px 0;padding-left:18px}
.auth-page.auth-labelled .auth-links{text-align:center;margin-top:22px}
.auth-page.auth-labelled .auth-note{text-align:center;color:var(--ds-text-secondary);font-size:var(--ds-font-size-small);margin-top:14px}
.auth-page.auth-labelled .auth-register-page .auth-field{margin-bottom:12px}.auth-page.auth-labelled .auth-register-page .auth-description{margin-bottom:20px}.auth-page.auth-labelled .auth-register-page .auth-button{margin-top:20px}
.auth-page :is(ul,ol){list-style:initial}
@media(max-width:1100px){.auth-page .auth-layout{grid-template-columns:52% 48%}.auth-page .auth-main{padding-left:32px;padding-right:32px}.auth-page .auth-brand{font-size:17px}.auth-page .auth-hero-copy h2{font-size:20px}.auth-page .auth-form-wrap h1{font-size:32px}}
/* 竖向平板改为上下布局，避免狭长左栏裁掉车辆和设备。 */
@media(min-width:768px) and (max-width:1100px) and (max-aspect-ratio:4/3){
  .auth-page .auth-layout{display:block}
  .auth-page .auth-hero{position:relative;top:auto;height:auto;min-height:0;aspect-ratio:auto;padding:76px 0 82px}
  .auth-page .auth-art{position:relative;inset:auto;margin:0;max-width:none;height:auto;aspect-ratio:1375/1144;flex:none}
  .auth-page .auth-main{padding:56px 32px 80px}
}
/* 手机保留完整配图，表单在下方自然滚动。 */
@media(max-width:767px){
  .auth-page .auth-layout{display:block}
  .auth-page .auth-hero{position:relative;top:auto;height:auto;min-height:0;aspect-ratio:auto;padding:76px 0 82px}
  .auth-page .auth-art{position:relative;inset:auto;margin:0;max-width:none;height:auto;aspect-ratio:1375/1144;flex:none}
  .auth-page .auth-art{background-position:center}
  .auth-page .auth-brand{top:16px;left:16px;gap:8px;font-size:var(--ds-font-size-section)}
  .auth-page .auth-brand small{font-size:var(--ds-font-size-tiny)}
  .auth-page .auth-brand i{font-size:24px}
  .auth-page .auth-hero-copy{bottom:14px;left:16px;right:16px}
  .auth-page .auth-hero-copy h2{font-size:clamp(14px,3.8vw,20px);margin-bottom:2px}
  .auth-page .auth-hero-copy p{font-size:var(--ds-font-size-small)}
  .auth-page .auth-main{min-height:0;padding:36px 24px 76px}
  .auth-page .auth-form-wrap h1{font-size:30px}
  .auth-page .auth-footer{bottom:20px;font-size:var(--ds-font-size-tiny)}
  .auth-page.auth-labelled .auth-register-page{padding-top:36px}
}
@media(max-height:600px) and (min-width:768px){.auth-page .auth-main{padding-top:100px;padding-bottom:90px}.auth-page .auth-hero-copy{bottom:4%}.auth-page .auth-hero-copy h2{margin:0 0 4px;font-size:18px}}
@media(max-height:800px){.auth-page.auth-labelled .auth-register-page{padding-top:100px;padding-bottom:80px}}

/* Bootstrap pagination aliases — same controls, compact list layout. */
.pagination:has(>.page-item){justify-content:flex-start;min-height:0;padding:0;gap:0}
.pagination-lg{--ds-pagination-size:40px}.pagination-sm{--ds-pagination-size:var(--ds-control-sm)}
:where(.table,.mini-table,.table-ledger,.ds-table) .table-active>td{background:var(--ds-brand-50)}

/* ===== Bootstrap 组件收编（缺失组件/工具类，单一实现）===== */
.list-unstyled{padding-left:0;list-style:none}
.list-inline{padding-left:0;list-style:none}
.list-inline-item{display:inline-block}
.list-inline-item:not(:last-child){margin-right:.5rem}
.img-fluid{max-width:100%;height:auto}
.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}
.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}
.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}
.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}
.col{flex:1 0 0}
.row-cols-auto>*{flex:0 0 auto;width:auto}
.row-cols-1>*{flex:0 0 auto;width:100%}
.row-cols-2>*{flex:0 0 auto;width:50%}
.row-cols-3>*{flex:0 0 auto;width:33.33333333%}
.row-cols-4>*{flex:0 0 auto;width:25%}
.row-cols-5>*{flex:0 0 auto;width:20%}
.row-cols-6>*{flex:0 0 auto;width:16.66666667%}
.col-auto{flex:0 0 auto;width:auto}
.col-1{flex:0 0 auto;width:8.33333333%}
.col-2{flex:0 0 auto;width:16.66666667%}
.col-3{flex:0 0 auto;width:25%}
.col-4{flex:0 0 auto;width:33.33333333%}
.col-5{flex:0 0 auto;width:41.66666667%}
.col-6{flex:0 0 auto;width:50%}
.col-7{flex:0 0 auto;width:58.33333333%}
.col-8{flex:0 0 auto;width:66.66666667%}
.col-9{flex:0 0 auto;width:75%}
.col-10{flex:0 0 auto;width:83.33333333%}
.col-11{flex:0 0 auto;width:91.66666667%}
.col-12{flex:0 0 auto;width:100%}
.g-0,.gx-0{--bs-gutter-x:0}
.g-0,.gy-0{--bs-gutter-y:0}
.g-1,.gx-1{--bs-gutter-x:0.25rem}
.g-1,.gy-1{--bs-gutter-y:0.25rem}
.g-2,.gx-2{--bs-gutter-x:0.5rem}
.g-2,.gy-2{--bs-gutter-y:0.5rem}
.g-3,.gx-3{--bs-gutter-x:1rem}
.g-3,.gy-3{--bs-gutter-y:1rem}
.g-4,.gx-4{--bs-gutter-x:1.5rem}
.g-4,.gy-4{--bs-gutter-y:1.5rem}
.g-5,.gx-5{--bs-gutter-x:3rem}
.g-5,.gy-5{--bs-gutter-y:3rem}
/* 响应式栅格须在基础列宽和间距之后，避免被 width:100% 覆盖。 */
@media  (min-width:576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}
@media  (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}
@media  (min-width:992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}
@media  (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}
@media  (min-width:1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}
.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}
.table-sm>:not(caption)>*>*{padding:.25rem .25rem}
.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}
.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}
.table-borderless>:not(caption)>*>*{border-bottom-width:0}
.table-borderless>:not(:first-child){border-top-width:0}
.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}
.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}
.form-label{margin-bottom:.5rem}
.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}
.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}
.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}
.form-text{margin-top:4px;font-size:var(--ds-font-size-small);line-height:var(--ds-line-small);color:var(--ds-text-secondary)}
.form-check .form-check-input{float:left;margin-left:-1.5em}
.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}
.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}
.form-check-input{--bs-form-check-bg:var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}
.form-check-input[type=checkbox]{border-radius:.25em}
.form-check-input[type=radio]{border-radius:50%}
.form-check-input:active{filter:brightness(90%)}
.form-check-input:focus{border-color:var(--ds-brand-500);outline:0;box-shadow:0 0 0 .25rem rgba(var(--ds-brand-rgb),.12)}
.form-check-input:checked{background-color:var(--ds-brand-500);border-color:var(--ds-brand-500)}
.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}
.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}
.form-check-input[type=checkbox]:indeterminate{background-color:var(--ds-brand-500);border-color:var(--ds-brand-500);--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}
.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}
.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}
.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}
.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}
.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}
.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}
.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}
.form-check-inline{display:inline-block;margin-right:1rem}
.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n/**/+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}
.input-group.has-validation>.dropdown-toggle:nth-last-child(n/**/+4),.input-group.has-validation>.form-floating:nth-last-child(n/**/+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n/**/+3)>.form-select,.input-group.has-validation>:nth-last-child(n/**/+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}
.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1 * var(--bs-border-width));border-top-left-radius:0;border-bottom-left-radius:0}
.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}
.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}
.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}
.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}
.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}
.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}
.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}
.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}
.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}
.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}
.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}
.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}
.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}
.fade{transition:opacity .15s linear}
.fade:not(.show){opacity:0}
.collapse:not(.show){display:none}
.collapsing{height:0;overflow:hidden;transition:height .35s ease}
.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}
.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}
.dropdown-toggle{white-space:nowrap}
.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}
.dropdown-toggle:empty::after{margin-left:0}
.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}
.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}
.dropdown-menu-start{--bs-position:start}
.dropdown-menu-start[data-bs-popper]{right:auto;left:0}
.dropdown-menu-end{--bs-position:end}
.dropdown-menu-end[data-bs-popper]{right:0;left:auto}
.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}
.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}
.dropup .dropdown-toggle:empty::after{margin-left:0}
.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}
.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}
.dropend .dropdown-toggle:empty::after{margin-left:0}
.dropend .dropdown-toggle::after{vertical-align:0}
.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}
.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}
.dropstart .dropdown-toggle::after{display:none}
.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}
.dropstart .dropdown-toggle:empty::after{margin-left:0}
.dropstart .dropdown-toggle::before{vertical-align:0}
.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}
.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}
.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}
.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}
.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}
.dropdown-menu.show{display:block}
.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}
.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}
.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}
.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}
.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}
.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}
.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}
.btn-toolbar .input-group{width:auto}
.btn-group{border-radius:var(--bs-border-radius)}
.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(-1 * var(--bs-border-width))}
.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}
.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n/**/+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}
.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}
.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}
.dropstart .dropdown-toggle-split::before{margin-right:0}
.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}
.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}
.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}
.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}
.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(-1 * var(--bs-border-width))}
.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}
.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:nth-child(n/**/+3),.btn-group-vertical>:not(.btn-check)+.btn{border-top-left-radius:0;border-top-right-radius:0}
.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}
.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}
.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(var(--ds-brand-rgb),.12)}
.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}
.nav-tabs{display:flex;padding-left:0;list-style:none;--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}
.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}
.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}
.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}
.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}
.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:var(--ds-brand-500)}
.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}
.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}
.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}
.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}
.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}
.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}
.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}
.nav-justified .nav-item,.nav-justified>.nav-link{flex-grow:1;flex-basis:0;text-align:center}
.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}
.tab-content>.tab-pane{display:none}
.tab-content>.active{display:block}
.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}
.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}
.navbar-nav .dropdown-menu{position:static}
.navbar-expand .navbar-nav .dropdown-menu{position:absolute}
.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}
.card>.list-group{border-top:inherit;border-bottom:inherit}
.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}
.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}
.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}
.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}
.card-text:last-child{margin-bottom:0}
.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}
.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}
.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}
.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}
.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}
.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}
.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}
.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}
.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}
.card-img,.card-img-bottom,.card-img-top{width:100%}
.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}
.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}
.card-group>.card{margin-bottom:var(--bs-card-group-margin)}
.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}
.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}
.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}
.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}
.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}
.accordion-button:hover{z-index:2}
.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}
.accordion-header{margin-bottom:0}
.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}
.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}
.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}
.accordion-item:not(:first-of-type){border-top:0}
.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}
.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}
.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}
.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}
.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}
.accordion-flush>.accordion-item:first-child{border-top:0}
.accordion-flush>.accordion-item:last-child{border-bottom:0}
.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}
.alert-heading{color:inherit}
.alert-link{font-weight:500;color:var(--ds-brand-600,#1677ff)}
.alert-dismissible{padding-right:3rem}
.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}
.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}
.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}
.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}
.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}
.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}
.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:var(--ds-brand-500);--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}
.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}
.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}
.progress-stacked>.progress{overflow:visible}
.progress-stacked>.progress>.progress-bar{width:100%}
.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}
.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}
.list-group-numbered{list-style-type:none;counter-reset:section}
.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}
.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}
.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}
.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}
.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}
.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}
.list-group-item+.list-group-item{border-top-width:0}
.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}
.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}
.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}
.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}
.list-group-horizontal{flex-direction:row}
.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}
.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}
.list-group-horizontal>.list-group-item.active{margin-top:0}
.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}
.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}
.list-group-flush{border-radius:0}
.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}
.list-group-flush>.list-group-item:last-child{border-bottom-width:0}
.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}
.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}
.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}
.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}
.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}
.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}
.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}
.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}
.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}
.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}
.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}
.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}
.btn-close-white{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}
.toast.showing{opacity:0}
.toast:not(.show){display:none}
.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}
.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color:var(--bs-body-color);--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}
.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}
.modal.fade .modal-dialog{transform:translate(0,-50px);transition:transform .3s ease-out}
.modal.show .modal-dialog{transform:none}
.modal.modal-static .modal-dialog{transform:scale(1.02)}
.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}
.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}
.modal-dialog-scrollable .modal-body{overflow-y:auto}
.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}
.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}
.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}
.modal-backdrop.fade{opacity:0}
.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}
.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}
.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin-top:calc(-.5 * var(--bs-modal-header-padding-y));margin-right:calc(-.5 * var(--bs-modal-header-padding-x));margin-bottom:calc(-.5 * var(--bs-modal-header-padding-y));margin-left:auto}
.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}
.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}
.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}
.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}
/* Bootstrap JS 打开时仅添加 .show 类；此处补上显示态，否则 .modal 的 display:none 无法被覆盖。 */
.modal.show{display:block}
.modal.fullscreen,.modal-fullscreen.show{max-width:none}
.modal.show .modal-dialog{transform:none}
.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}
.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}
.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}
.modal-fullscreen .modal-body{overflow-y:auto}
.tooltip.show{opacity:var(--bs-tooltip-opacity)}
.spinner-border,.spinner-grow{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}
.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}
.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}
.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}
.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}
.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}
.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}
.ratio{position:relative;width:100%}
.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}
.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}
.ratio-1x1{--bs-aspect-ratio:100%}
.ratio-4x3{--bs-aspect-ratio:75%}
.ratio-16x9{--bs-aspect-ratio:56.25%}
.ratio-21x9{--bs-aspect-ratio:42.8571428571%}
.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}
.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}
.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.align-baseline{vertical-align:baseline!important}
.align-top{vertical-align:top!important}
.align-middle{vertical-align:middle!important}
.align-bottom{vertical-align:bottom!important}
.align-text-bottom{vertical-align:text-bottom!important}
.align-text-top{vertical-align:text-top!important}
.float-start{float:left!important}
.float-end{float:right!important}
.float-none{float:none!important}
.d-inline{display:inline!important}
.d-inline-block{display:inline-block!important}
.d-block{display:block!important}
.d-grid{display:grid!important}
.d-inline-grid{display:inline-grid!important}
.d-table{display:table!important}
.d-table-row{display:table-row!important}
.d-table-cell{display:table-cell!important}
.d-flex{display:flex!important}
.d-inline-flex{display:inline-flex!important}
.d-none{display:none!important}
.shadow{box-shadow:var(--bs-box-shadow)!important}
.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}
.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}
.shadow-none{box-shadow:none!important}
.position-static{position:static!important}
.position-relative{position:relative!important}
.position-absolute{position:absolute!important}
.position-fixed{position:fixed!important}
.position-sticky{position:-webkit-sticky!important;position:sticky!important}
.top-0{top:0!important}
.top-50{top:50%!important}
.top-100{top:100%!important}
.bottom-0{bottom:0!important}
.bottom-50{bottom:50%!important}
.bottom-100{bottom:100%!important}
.start-0{left:0!important}
.start-50{left:50%!important}
.start-100{left:100%!important}
.end-0{right:0!important}
.end-50{right:50%!important}
.end-100{right:100%!important}
.translate-middle{transform:translate(-50%,-50%)!important}
.translate-middle-x{transform:translateX(-50%)!important}
.translate-middle-y{transform:translateY(-50%)!important}
.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}
.border-0{border:0!important}
.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}
.border-top-0{border-top:0!important}
.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}
.border-end-0{border-right:0!important}
.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}
.border-bottom-0{border-bottom:0!important}
.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}
.border-start-0{border-left:0!important}
.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}
.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}
.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}
.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}
.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}
.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}
.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}
.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}
.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}
.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}
.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}
.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}
.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}
.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}
.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}
.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}
.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}
.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}
.border-1{border-width:1px!important}
.border-2{border-width:2px!important}
.border-3{border-width:3px!important}
.border-4{border-width:4px!important}
.border-5{border-width:5px!important}
.border-opacity-10{--bs-border-opacity:0.1}
.border-opacity-25{--bs-border-opacity:0.25}
.border-opacity-50{--bs-border-opacity:0.5}
.border-opacity-75{--bs-border-opacity:0.75}
.border-opacity-100{--bs-border-opacity:1}
.w-25{width:25%!important}
.w-50{width:50%!important}
.w-75{width:75%!important}
.w-100{width:100%!important}
.w-auto{width:auto!important}
.h-25{height:25%!important}
.h-50{height:50%!important}
.h-75{height:75%!important}
.h-100{height:100%!important}
.h-auto{height:auto!important}
.flex-fill{flex:1 1 auto!important}
.flex-row{flex-direction:row!important}
.flex-column{flex-direction:column!important}
.flex-row-reverse{flex-direction:row-reverse!important}
.flex-column-reverse{flex-direction:column-reverse!important}
.flex-grow-0{flex-grow:0!important}
.flex-grow-1{flex-grow:1!important}
.flex-shrink-0{flex-shrink:0!important}
.flex-shrink-1{flex-shrink:1!important}
.flex-wrap{flex-wrap:wrap!important}
.flex-nowrap{flex-wrap:nowrap!important}
.flex-wrap-reverse{flex-wrap:wrap-reverse!important}
.justify-content-start{justify-content:flex-start!important}
.justify-content-end{justify-content:flex-end!important}
.justify-content-center{justify-content:center!important}
.justify-content-between{justify-content:space-between!important}
.justify-content-around{justify-content:space-around!important}
.justify-content-evenly{justify-content:space-evenly!important}
.align-items-start{align-items:flex-start!important}
.align-items-end{align-items:flex-end!important}
.align-items-center{align-items:center!important}
.align-items-baseline{align-items:baseline!important}
.align-items-stretch{align-items:stretch!important}
.align-content-start{align-content:flex-start!important}
.align-content-end{align-content:flex-end!important}
.align-content-center{align-content:center!important}
.align-content-between{align-content:space-between!important}
.align-content-around{align-content:space-around!important}
.align-content-stretch{align-content:stretch!important}
.align-self-auto{align-self:auto!important}
.align-self-start{align-self:flex-start!important}
.align-self-end{align-self:flex-end!important}
.align-self-center{align-self:center!important}
.align-self-baseline{align-self:baseline!important}
.align-self-stretch{align-self:stretch!important}
.m-0{margin:0!important}
.m-1{margin:.25rem!important}
.m-2{margin:.5rem!important}
.m-3{margin:1rem!important}
.m-4{margin:1.5rem!important}
.m-5{margin:3rem!important}
.m-auto{margin:auto!important}
.mx-0{margin-right:0!important;margin-left:0!important}
.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}
.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}
.mx-3{margin-right:1rem!important;margin-left:1rem!important}
.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}
.mx-5{margin-right:3rem!important;margin-left:3rem!important}
.mx-auto{margin-right:auto!important;margin-left:auto!important}
.my-0{margin-top:0!important;margin-bottom:0!important}
.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}
.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}
.my-3{margin-top:1rem!important;margin-bottom:1rem!important}
.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}
.my-5{margin-top:3rem!important;margin-bottom:3rem!important}
.my-auto{margin-top:auto!important;margin-bottom:auto!important}
.mt-0{margin-top:0!important}
.mt-1{margin-top:.25rem!important}
.mt-5{margin-top:3rem!important}
.mt-auto{margin-top:auto!important}
.me-0{margin-right:0!important}
.me-1{margin-right:.25rem!important}
.me-2{margin-right:.5rem!important}
.me-3{margin-right:1rem!important}
.me-4{margin-right:1.5rem!important}
.me-5{margin-right:3rem!important}
.me-auto{margin-right:auto!important}
.mb-0{margin-bottom:0!important}
.mb-1{margin-bottom:.25rem!important}
.mb-5{margin-bottom:3rem!important}
.mb-auto{margin-bottom:auto!important}
.ms-0{margin-left:0!important}
.ms-1{margin-left:.25rem!important}
.ms-2{margin-left:.5rem!important}
.ms-3{margin-left:1rem!important}
.ms-4{margin-left:1.5rem!important}
.ms-5{margin-left:3rem!important}
.ms-auto{margin-left:auto!important}
.p-0{padding:0!important}
.p-1{padding:.25rem!important}
.p-2{padding:.5rem!important}
.p-3{padding:1rem!important}
.p-4{padding:1.5rem!important}
.p-5{padding:3rem!important}
.px-0{padding-right:0!important;padding-left:0!important}
.px-1{padding-right:.25rem!important;padding-left:.25rem!important}
.px-2{padding-right:.5rem!important;padding-left:.5rem!important}
.px-3{padding-right:1rem!important;padding-left:1rem!important}
.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}
.px-5{padding-right:3rem!important;padding-left:3rem!important}
.py-0{padding-top:0!important;padding-bottom:0!important}
.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}
.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}
.py-3{padding-top:1rem!important;padding-bottom:1rem!important}
.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}
.py-5{padding-top:3rem!important;padding-bottom:3rem!important}
.pt-0{padding-top:0!important}
.pt-1{padding-top:.25rem!important}
.pt-2{padding-top:.5rem!important}
.pt-3{padding-top:1rem!important}
.pt-4{padding-top:1.5rem!important}
.pt-5{padding-top:3rem!important}
.pe-0{padding-right:0!important}
.pe-1{padding-right:.25rem!important}
.pe-2{padding-right:.5rem!important}
.pe-3{padding-right:1rem!important}
.pe-4{padding-right:1.5rem!important}
.pe-5{padding-right:3rem!important}
.pb-0{padding-bottom:0!important}
.pb-1{padding-bottom:.25rem!important}
.pb-2{padding-bottom:.5rem!important}
.pb-3{padding-bottom:1rem!important}
.pb-4{padding-bottom:1.5rem!important}
.pb-5{padding-bottom:3rem!important}
.ps-0{padding-left:0!important}
.ps-1{padding-left:.25rem!important}
.ps-2{padding-left:.5rem!important}
.ps-3{padding-left:1rem!important}
.ps-4{padding-left:1.5rem!important}
.ps-5{padding-left:3rem!important}
.gap-0{gap:0!important}
.gap-5{gap:3rem!important}
.row-gap-0{row-gap:0!important}
.row-gap-1{row-gap:.25rem!important}
.row-gap-2{row-gap:.5rem!important}
.row-gap-3{row-gap:1rem!important}
.row-gap-4{row-gap:1.5rem!important}
.row-gap-5{row-gap:3rem!important}
.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}
.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}
.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}
.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}
.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}
.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}
.font-monospace{font-family:var(--bs-font-monospace)!important}
.fs-1{font-size:calc(1.375rem + 1.5vw)!important}
.fs-2{font-size:calc(1.325rem + .9vw)!important}
.fs-3{font-size:calc(1.3rem + .6vw)!important}
.fs-4{font-size:calc(1.275rem + .3vw)!important}
.fs-5{font-size:1.25rem!important}
.fs-6{font-size:1rem!important}
.fw-lighter{font-weight:lighter!important}
.fw-light{font-weight:300!important}
.fw-medium{font-weight:500!important}
.fw-semibold{font-weight:600!important}
.fw-bolder{font-weight:bolder!important}
.text-start{text-align:left!important}
.text-end{text-align:right!important}
.text-decoration-none{text-decoration:none!important}
.text-decoration-underline{text-decoration:underline!important}
.text-decoration-line-through{text-decoration:line-through!important}
.text-lowercase{text-transform:lowercase!important}
.text-uppercase{text-transform:uppercase!important}
.text-capitalize{text-transform:capitalize!important}
.text-wrap{white-space:normal!important}
.text-nowrap{white-space:nowrap!important}
.text-break{word-wrap:break-word!important;word-break:break-word!important}
.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}
.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}
.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}
.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}
.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}
.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}
.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}
.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}
.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}
.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}
.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}
.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}
.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}
.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}
.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}
.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}
.text-reset{--bs-text-opacity:1;color:inherit!important}
.text-opacity-25{--bs-text-opacity:0.25}
.text-opacity-50{--bs-text-opacity:0.5}
.text-opacity-75{--bs-text-opacity:0.75}
.text-opacity-100{--bs-text-opacity:1}
.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}
.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}
.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}
.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}
.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}
.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}
.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}
.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}
.bg-primary:not(.badge){--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}
.badge.bg-primary{background-color:var(--ds-brand-50)!important;color:var(--ds-brand-600)!important}
.bg-secondary:not(.badge){--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}
.badge.bg-secondary{background-color:var(--ds-bg-subtle)!important;color:var(--ds-text-secondary)!important}
.bg-success:not(.badge){--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}
.badge.bg-success{background-color:var(--ds-success-soft)!important;color:var(--ds-success-text)!important}
.bg-info:not(.badge){--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}
.badge.bg-info{background-color:var(--ds-info-soft)!important;color:var(--ds-info-text)!important}
.bg-warning:not(.badge){--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}
.badge.bg-warning{background-color:var(--ds-warning-soft)!important;color:var(--ds-warning-text)!important}
.bg-danger:not(.badge){--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}
.badge.bg-danger{background-color:var(--ds-danger-soft)!important;color:var(--ds-danger-text)!important}
.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}
.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}
.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}
.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}
.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}
.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}
.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}
.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}
.bg-opacity-10{--bs-bg-opacity:0.1}
.bg-opacity-25{--bs-bg-opacity:0.25}
.bg-opacity-50{--bs-bg-opacity:0.5}
.bg-opacity-75{--bs-bg-opacity:0.75}
.bg-opacity-100{--bs-bg-opacity:1}
.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}
.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}
.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}
.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}
.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}
.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}
.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}
.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}
.bg-gradient{background-image:var(--bs-gradient)!important}
.pe-none{pointer-events:none!important}
.pe-auto{pointer-events:auto!important}
.rounded{border-radius:var(--bs-border-radius)!important}
.rounded-0{border-radius:0!important}
.rounded-1{border-radius:var(--bs-border-radius-sm)!important}
.rounded-2{border-radius:var(--bs-border-radius)!important}
.rounded-3{border-radius:var(--bs-border-radius-lg)!important}
.rounded-4{border-radius:var(--bs-border-radius-xl)!important}
.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}
.rounded-circle{border-radius:50%!important}
.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}
.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}
.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}
.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}
.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}
.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}
.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}
.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}
.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}
.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}
.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}
.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}
.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}
.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}
.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}
.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}
.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}
.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}
.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}
.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}
.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}
.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}
.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}
.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}
.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}
.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}
.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}
.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}
.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}
.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}
.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}
.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}
.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}
.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}
.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}
.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}
.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}
/* ===== 补丁：旧版 Bootstrap 副本缺失、模板在用的类（单一实现）===== */
.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg,rgba(0,0,0,.075));color:var(--bs-table-hover-color,inherit)}

.crud-dialog__frame { display: block; width: 100%; flex: 1 1 auto; min-height: 0; border: 0; background: var(--ds-bg-surface); }
.crud-dialog__frame[hidden], .crud-dialog__notice[hidden] { display: none; }
.crud-dialog__notice { padding: 20px; }
.crud-embedded .sidebar, .crud-embedded .sidebar-scrim,
.crud-embedded .topbar, .crud-embedded .page-tabs,
.crud-embedded #carTabs { display: none; }
.crud-embedded, .crud-embedded body { min-width: 0; height: 100%; }
.crud-embedded .app { display: block; width: 100%; height: 100%; min-width: 0; }
.crud-embedded .main { width: 100%; max-width: none; margin: 0; height: 100%; min-width: 0; }
.crud-embedded .workspace { box-sizing: border-box; width: 100%; max-width: none; min-height: 0; margin: 0; padding: 16px; height: 100%; overflow: auto; background: #f3f5f7; }
.crud-embedded .workspace > .ds-form-breadcrumb { display: none; }
.crud-dialog__breadcrumb-back { background: none; border: 0; padding: 0; color: var(--ds-text-secondary, #64748b); font: inherit; cursor: pointer; }
.crud-dialog__breadcrumb-back:hover { color: var(--ds-brand-500, #356cf5); }
.crud-dialog__breadcrumb-separator { margin: 0 9px; color: var(--ds-text-secondary, #94a3b8); font-weight: 400; }

.crud-dialog__message { white-space: pre-line; overflow-wrap: anywhere; margin: 0; }
.crud-dialog__inline-confirm {
    display: flex; flex: 1 1 auto; min-height: 0; flex-direction: column;
    justify-content: space-between; padding: 20px 0 0;
}
.crud-dialog__inline-confirm > .crud-dialog__message { padding: 0 20px; }
.crud-dialog__status { margin: 0 0 12px; }
.crud-dialog [data-crud-content] > :is(.ds-form-breadcrumb, .page-heading, h4) { display: none; }
.crud-dialog [data-crud-content] > .card { margin: 0; }
.crud-dialog [data-crud-content] > .card:has(> .ds-form-body) { border: 0; box-shadow: none; }
.crud-dialog [data-crud-content] > .card:has(> .ds-form-body) > .card-body { padding: 0; }
.crud-dialog.crud-actions-relocated .crud-source-actions,
.crud-embedded.crud-actions-relocated .crud-source-actions { display: none !important; }

/* ============================================================
   Drawer form component — 三种抽屉承载统一使用同一表单骨架
   ============================================================ */
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form {
    --ds-drawer-label-width: 104px;
    --ds-drawer-search-width: 156px;
    --ds-drawer-grid-gap-x: 24px;
    --ds-drawer-grid-gap-y: 10px;
    min-width: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [data-crud-content="drawer"] > .card:not(:has(> .ds-form-body)),
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form :is(.card, .ds-form-section) {
    border: 1px solid var(--ds-border);
    border-radius: 8px;
    background: var(--ds-bg-surface);
    box-shadow: none !important;
    overflow: hidden;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [data-crud-content="drawer"] > .card:not(:has(> .ds-form-body)) > .card-body {
    padding: 12px 16px;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form :is(.card-body, .ds-form-section) {
    padding: 12px 16px;
}

:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form :is(.ds-form-grid, .card-body > .row),
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form > .row:not(:has(> .form-label)) {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--ds-drawer-grid-gap-y) var(--ds-drawer-grid-gap-x);
    margin: 0 0 var(--ds-drawer-grid-gap-y);
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .card-body > .row > [class*="col-"],
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form > .row > [class*="col-"] {
    width: auto;
    max-width: none;
    min-width: 0;
    margin: 0;
    padding: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .card-body > .row > [class*="col-"]:only-child,
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form > .row > [class*="col-"]:only-child,
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-field--full {
    grid-column: 1 / -1;
}

/* 所有抽屉表单共享的紧凑纵向节奏；仅作用于抽屉，不影响普通页面 */
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [data-crud-content="drawer"] > .card,
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-section {
    margin-bottom: 12px;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [data-crud-content="drawer"] .card-body > .row:last-child,
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-grid:last-child {
    margin-bottom: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [data-crud-content="drawer"] .form-label {
    margin-bottom: 5px;
}

/* 抽屉字段组件：只作用于明确的字段容器，不修改搜索框内部的组合结构 */
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-grid > .ds-form-field {
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
    align-items: stretch;
}
/* Keep each drawer label above its control in all three drawer hosts. */
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-form .ds-form-field:has(> .form-label),
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) form > .row.mb-3:has(> .form-label),
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) form > .row.mb-3 > [class*="col-"]:has(> .form-label),
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) form > :is(.mb-3, .form-group):has(> .form-label),
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [class*="col-"]:has(> .d-flex > .form-label) {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 5px;
    min-width: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) [class*="col-"]:has(> .d-flex > .form-label) > .d-flex:has(> .form-label) { display: contents; }
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-field > .form-label,
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-field > label {
    margin: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-field > .d-flex:has(.form-label) {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 6px;
    min-width: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .ds-form-field :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]), select, textarea) {
    max-width: 100%;
    min-width: 0;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form .crud-source-actions { display: none !important; }
.crud-embedded [data-crud-content="drawer"] > .row { display: block; margin: 0; }
.crud-embedded [data-crud-content="drawer"] > .row > [class*="col-"] { width: 100%; max-width: none; padding: 0; }
.crud-embedded [data-crud-content="drawer"] > .row > [class*="col-"] + [class*="col-"] { margin-top: 20px; }
.crud-image-preview { max-height: 200px; }
body.crud-lock { overflow: hidden; }
form[data-crud-inline][hidden] { display: none; }

/* 统一搜索控件：所属客户 / 项目分类 / 组长 / 组员，宽度同为 156px。
   不给其父级的复合选择器设置 grid，避免标签与搜索框被拆散。 */
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form input:is(
    [placeholder*="所属客户"], [placeholder*="项目分类"],
    [placeholder*="组长"], [placeholder*="组员"]
) {
    box-sizing: border-box;
    width: var(--ds-drawer-search-width, 156px);
    max-width: 100%;
    flex: 0 1 var(--ds-drawer-search-width, 156px);
}

/* Adapt to the drawer's width, including narrow drawers on wide desktops. */
.crud-embedded .workspace { container-type: inline-size; }
@container (max-width: 760px) {
    :is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form :is(.ds-form-grid, .card-body > .row),
    :is(.crud-dialog, .crud-dialog--drawer, .crud-embedded) .ds-drawer-form > .row:not(:has(> .form-label)) {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* 普通页面与抽屉保持相同的运输物品顺序。抽屉列数由通用规则控制。 */
.ds-form:not(.ds-drawer-form) .ds-form-grid.ds-form-grid--transport-items {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}
@media (max-width: 767px) {
    .ds-form:not(.ds-drawer-form) .ds-form-grid.ds-form-grid--transport-items {
        grid-template-columns: minmax(0, 1fr);
    }
}


/* ============================================================
   Project drawer form — 唯一的项目字段四列布局规则
   使用独立网格节点，避免 Bootstrap row/col 分组及抽屉通用规则互相覆盖。
   ============================================================ */
[data-crud-controller="project_create"] .ds-project-form-grid,
[data-crud-controller="project_edit"] .ds-project-form-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px 20px;
    min-width: 0;
}
[data-crud-controller="project_create"] .ds-project-form-field,
[data-crud-controller="project_edit"] .ds-project-form-field {
    min-width: 0;
}
[data-crud-controller="project_create"] .ds-project-form-field--full,
[data-crud-controller="project_edit"] .ds-project-form-field--full {
    grid-column: 1 / -1;
}
[data-crud-controller="project_create"] .ds-project-form-field__head,
[data-crud-controller="project_edit"] .ds-project-form-field__head {
    display: flex;
    min-width: 0;
    align-items: center;
    justify-content: space-between;
    gap: 6px;
    margin-bottom: 5px;
}
[data-crud-controller="project_create"] .ds-project-form-field > .form-label,
[data-crud-controller="project_edit"] .ds-project-form-field > .form-label {
    display: block;
    margin-bottom: 5px;
}
[data-crud-controller="project_create"] .ds-project-form-field__head > .form-label,
[data-crud-controller="project_edit"] .ds-project-form-field__head > .form-label {
    flex: 0 0 auto;
    margin: 0;
}
[data-crud-controller="project_create"] .ds-project-form-field .ds-project-search,
[data-crud-controller="project_edit"] .ds-project-form-field .ds-project-search {
    box-sizing: border-box;
    width: 136px;
    max-width: calc(100% - 64px);
    min-width: 0;
    flex: 0 1 136px;
    margin: 0;
}
[data-crud-controller="project_create"] .ds-project-form-field > :is(input:not([type="hidden"]), select, textarea),
[data-crud-controller="project_edit"] .ds-project-form-field > :is(input:not([type="hidden"]), select, textarea) {
    width: 100%;
    min-width: 0;
    max-width: 100%;
}
[data-crud-controller="project_create"] .ds-project-member-picker {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 40px minmax(0, 1fr);
    align-items: stretch;
    gap: 12px;
    min-width: 0;
}
[data-crud-controller="project_create"] .ds-project-member-picker__column {
    min-width: 0;
}
[data-crud-controller="project_create"] .ds-project-member-picker__column > select {
    width: 100%;
    min-height: 144px;
}
[data-crud-controller="project_create"] .ds-project-member-picker__actions {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
}
[data-crud-controller="project_create"] .ds-project-form-field--full > textarea {
    min-height: 120px;
}
@media (max-width: 1100px) {
    [data-crud-controller="project_create"] .ds-project-form-grid,
    [data-crud-controller="project_edit"] .ds-project-form-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}
@media (max-width: 760px) {
    [data-crud-controller="project_create"] .ds-project-form-grid,
    [data-crud-controller="project_edit"] .ds-project-form-grid {
        grid-template-columns: minmax(0, 1fr);
    }
    [data-crud-controller="project_create"] .ds-project-member-picker {
        grid-template-columns: minmax(0, 1fr);
    }
    [data-crud-controller="project_create"] .ds-project-member-picker__actions {
        flex-direction: row;
    }
    [data-crud-controller="project_create"] .ds-project-member-picker__actions .ph-caret-right,
    [data-crud-controller="project_create"] .ds-project-member-picker__actions .ph-caret-left {
        transform: rotate(90deg);
    }
}

/* ============================================================
   Execution plan form — 计划、场地和资源使用稳定的业务分栏
   ============================================================ */
.plan-form .ds-form-section-head {
    box-sizing: border-box;
    position: relative;
    display: flex;
    align-items: center;
    width: calc(100% + 40px);
    min-height: 54px !important;
    margin: -14px -20px 14px;
    padding: 8px 380px 8px 20px;
    border-bottom: 1px solid var(--ds-border);
    background: var(--ds-bg-subtle, #f8fafc);
}
.plan-form .ds-form-section-head > .ds-form-section-title {
    flex: 0 0 auto;
    width: auto !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
}
.plan-form .ds-form-section-tools {
    display: flex;
    position: absolute;
    z-index: 1;
    top: 8px;
    right: 20px;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    width: 340px;
    min-width: 340px;
    min-height: 38px;
    margin: 0;
    font-size:var(--ds-font-size-body);
    font-weight: 500;
}
.plan-form .ds-form-section-tools > span {
    flex: 0 0 auto;
    white-space: nowrap;
}
.plan-form .ds-form-section-tools .cat-filter {
    flex: 0 0 min(240px, 24vw);
    width: min(240px, 24vw) !important;
    min-width: 160px;
}
.plan-form .plan-form__info > .ds-form-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
.plan-form .plan-form__place-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    grid-auto-rows: minmax(36px, auto);
    gap: 8px 20px !important;
}
.plan-form .plan-form__places .ds-form-choice-list {
    max-height: 228px;
    overflow-y: auto;
}
.plan-form .plan-form__resources > .ds-form-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
.plan-form .plan-form__resource-column {
    grid-column: span 1 !important;
}
.plan-form .plan-form__resource-options {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-content: start;
    gap: 8px 16px;
}
.plan-form .plan-form__resource-options > .cat-row {
    min-width: 0;
    margin: 0 !important;
}
.plan-form .plan-form__resource-options .cat-slots {
    margin: 8px 0 0 !important;
}
.plan-form .plan-form__resource-options .cat-slots > .ds-form-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 8px !important;
}
@media (max-width: 1100px) {
    .plan-form .plan-form__info > .ds-form-grid,
    .plan-form .plan-form__place-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
    .plan-form .plan-form__resources > .ds-form-grid {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}
@media (max-width: 767px) {
    .plan-form .plan-form__info > .ds-form-grid,
    .plan-form .plan-form__place-grid,
    .plan-form .plan-form__resources > .ds-form-grid,
    .plan-form .plan-form__resource-options {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    .plan-form .ds-form-section-head {
        padding-right: 20px;
        align-items: stretch;
        flex-direction: column;
        gap: 6px;
    }
    .plan-form .ds-form-section-tools {
        position: static;
        width: 100%;
        min-width: 0;
        justify-content: flex-start;
    }
    .plan-form .ds-form-section-tools .cat-filter { width: 100%; }
}

/* 归还图片预览：由公共控制器引用。 */
.crud-upload-preview { height: 100px; object-fit: cover; border-radius: 4px; }

/* 全平台统一可搜索单选下拉：车辆、人员、项目、钥匙扣等 */
.ds-searchable-select {
    position: relative;
    width: 100%;
    min-width: 0;
}
/* 项目表单：原生输入与可搜索下拉共用唯一外框尺寸 */
[data-crud-controller="project_create"] .ds-project-form-field > :is(input:not([type="hidden"]), select),
.ds-searchable-select__control {
    box-sizing: border-box;
    display: block;
    width: 100%;
    max-width: 100%;
    height: var(--ds-control-md);
    min-height: var(--ds-control-md);
    border: 1px solid var(--ds-border-strong);
    border-radius: var(--ds-control-radius);
    background-color: #fff;
}
.ds-searchable-select__control {
    position: relative;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%235F6673' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 12px center;
    background-size: 16px 16px;
    box-shadow: none;
}
.ds-searchable-select__control:focus-within {
    border-color: #3b71e8;
    box-shadow: 0 0 0 2px rgba(59,113,232,.12);
}
.ds-searchable-select__input {
    display: block;
    width: 100%;
    min-width: 0;
    height: calc(100% - 2px);
    min-height: 0;
    box-sizing: border-box;
    padding: 0 44px 0 12px;
    margin: 0;
    border: 0;
    border-radius: 0;
    outline: none;
    background: transparent;
    background-image: none;
    color: #253047;
    font: inherit;
    box-shadow: none;
    appearance: none;
    -webkit-appearance: none;
}
/* 抽屉通用搜索框默认只有 156px；项目下拉需要使用除箭头按钮外的全部宽度。 */
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded)
    .ds-searchable-select__input {
    width: calc(100% - 40px);
    max-width: calc(100% - 40px);
    flex: 0 0 calc(100% - 40px);
    padding-right: 12px;
}
.ds-searchable-select__input::placeholder {
    color: #8b95a7;
    opacity: 1;
}
/* 与通用原生 Select 共用 SVG 背景图。点击按钮只处理交互，不再绘制第二枚箭头。 */
.ds-searchable-select__toggle {
    position: absolute;
    top: 0;
    right: 0;
    width: 40px;
    height: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
}
.ds-searchable-select__toggle::before,
.ds-searchable-select__toggle::after {
    content: none;
}
.ds-searchable-select__native { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); pointer-events:none; }
.ds-searchable-select__list { position:absolute; z-index:1100; left:0; right:0; top:calc(100% + 4px); max-height:220px; overflow:auto; border:1px solid #cbd5e1; border-radius:6px; background:#fff; box-shadow:0 8px 22px rgba(24,39,75,.14); }
.ds-searchable-select__list[hidden] { display:none; }
.ds-searchable-select__option { display:block; width:100%; text-align:left; padding:9px 12px; border:0; color:#253047; background:#fff; font:inherit; cursor:pointer; }
.ds-searchable-select__option:hover,
.ds-searchable-select__option.is-active { background:#edf3ff; color:#2459cb; }
.ds-searchable-select__empty { padding:10px 12px; color:#8892a4; }


/* Device detail drawer: one scoped layout, no global form/card overrides. */
.ds-device-detail { min-width:0; }
.crud-dialog .ds-device-detail__page-title, .crud-embedded .ds-device-detail__page-title, .crud-embedded [data-crud-controller="device_edit"] > h4 { display:none; }
.ds-device-detail__page-title { margin:0 0 12px; font-size:var(--ds-font-size-h3); }
.ds-device-detail__card { margin-bottom:12px; overflow:hidden; }
.ds-device-detail__body { display:grid; grid-template-columns:minmax(0, 1fr) 260px; gap:20px; padding:16px 20px; }
.ds-device-detail__facts { min-width:0; }
.ds-device-detail__facts-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); column-gap:20px; row-gap:0; margin:0; }
.ds-device-detail__item { min-width:0; margin:0; padding:10px 0; border-bottom:1px solid var(--ds-border, #e2e8f0); }
.ds-device-detail__item dt { color:var(--ds-text-secondary, #64748b); font-size:var(--ds-font-size-meta); font-weight:400; margin:0 0 4px; }
.ds-device-detail__item dd { color:var(--ds-text-primary, #253047); font-size:var(--ds-font-size-body); font-weight:500; line-height:1.5; margin:0; overflow-wrap:anywhere; }
.ds-device-detail__item--full { grid-column:1 / -1; border-bottom:0; }
.ds-device-detail__media { min-width:0; display:flex; flex-direction:column; gap:14px; padding-left:18px; border-left:1px solid var(--ds-border, #e2e8f0); }
.ds-device-detail__media-label { font-size:var(--ds-font-size-meta); font-weight:600; margin-bottom:8px; color:var(--ds-text-primary, #253047); }
.ds-device-detail__photo { min-height:118px; height:136px; border:1px solid var(--ds-border, #e2e8f0); border-radius:6px; display:flex; align-items:center; justify-content:center; overflow:hidden; background:var(--ds-bg-subtle, #f8fafc); font-size:var(--ds-font-size-meta); }
.ds-device-detail__photo img { width:100%; height:100%; object-fit:contain; }
.ds-device-detail__qr-panel { text-align:center; }
.ds-device-detail__qr { display:block; width:136px; height:136px; max-width:100%; object-fit:contain; margin:0 auto 10px; }
.ds-device-detail__qr-actions { display:flex; flex-wrap:wrap; gap:8px; justify-content:center; }
.ds-device-detail__qr-actions .btn { flex:1 1 100px; white-space:nowrap; }
.ds-device-detail__card > .ds-device-detail__header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  column-gap: 12px;
  min-height: 48px;
  padding: 8px 16px;
}
.ds-device-detail__header > h6 { grid-column: 1; margin: 0; align-self: center; }
.ds-device-detail__header > .ds-device-detail__actions {
  grid-column: 2;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: nowrap;
  gap: 8px;
  width: auto;
  max-width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
}
.ds-device-detail__header .ds-device-detail__actions .btn { white-space: nowrap; }
@media (max-width: 640px) {
  .ds-device-detail__card > .ds-device-detail__header { grid-template-columns: minmax(0,1fr); row-gap: 8px; }
  .ds-device-detail__header > .ds-device-detail__actions { grid-column: 1; flex-wrap: wrap; justify-content: flex-start; }
}
@container (max-width: 760px) { .ds-device-detail__body { grid-template-columns:1fr; } .ds-device-detail__media { border-left:0; border-top:1px solid var(--ds-border, #e2e8f0); padding:14px 0 0; display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); } }
@media (max-width: 850px) { .ds-device-detail__body { grid-template-columns:1fr; } .ds-device-detail__media { border-left:0; border-top:1px solid var(--ds-border, #e2e8f0); padding:14px 0 0; display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); } }
@media (max-width: 520px) { .ds-device-detail__facts-grid, .ds-device-detail__media { grid-template-columns:1fr; } .ds-device-detail__body { padding:12px; }  }

/* === Unified detail drawer presentation (one scoped component) === */
/* Applies only to the detail templates; existing CRUD dialogs and form grids are untouched. */
.ds-unified-detail {
  --detail-gap: 12px;
  --detail-border: var(--ds-border, #d9e1ef);
  --detail-label: var(--ds-text-secondary, #667085);
  display: flex;
  flex-direction: column;
  gap: var(--detail-gap);
  min-width: 0;
  font-size:var(--ds-font-size-h3);
  line-height: 1.5;
}
.ds-unified-detail > h4, .ds-unified-detail > .ds-device-detail__page-title { display: none; }
.ds-unified-detail > .d-flex .btn { font-size:var(--ds-font-size-h3); }
.ds-unified-detail .badge { font-size:var(--ds-font-size-body); }
.ds-unified-detail > :is(.card, .info-section, .ds-form-section, .ds-detail, .ds-device-detail) { margin: 0 !important; min-width: 0; }
.ds-unified-detail :is(.card, .ds-form-section, .info-section) { border: 1px solid var(--detail-border); border-radius: 8px; box-shadow: none; background: #fff; }
.ds-unified-detail :is(.card-header, .ds-form-section-title, .section-header) { padding: 10px 16px; min-height: 40px; display: flex; align-items: center; gap: 8px; margin: 0; font-weight: 600; font-size:var(--ds-font-size-h3); background: var(--ds-bg-subtle, #f5f7fb); border-bottom: 1px solid var(--detail-border); }
.ds-unified-detail :is(.card-body, .info-grid) { padding: 16px; }
.ds-unified-detail .card-body.p-0 { padding: 0; }
.ds-unified-detail .card-body > .row { row-gap: 12px; }
.ds-unified-detail :is(.card-footer, .ds-form-actions) { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 12px 16px; background: #fff; border-top: 1px solid var(--detail-border); }
.ds-unified-detail :is(.card-footer, .ds-form-actions) > :is(a,button,form) { margin: 0; }
.ds-unified-detail :is(.card-footer, .ds-form-actions) form { display: inline-flex; }
.ds-unified-detail :is(.card-footer, .ds-form-actions) .btn { min-height: 32px; }
/* Bootstrap dt/dd pairs are consistently presented as two-column property cards. */
.ds-unified-detail dl.row { display: grid; grid-template-columns: minmax(104px, 0.8fr) minmax(0, 2.2fr) minmax(104px, 0.8fr) minmax(0, 2.2fr); gap: 0 16px; margin: 0; }
.ds-unified-detail dl.row > dt, .ds-unified-detail dl.row > dd { float: none; width: auto; max-width: none; flex: none; padding: 9px 0; margin: 0; min-width: 0; border-bottom: 1px solid #eef1f6; overflow-wrap: anywhere; }
.ds-unified-detail dl.row > dt { color: var(--detail-label); font-size:var(--ds-font-size-section); font-weight: 400; }
.ds-unified-detail dl.row > dd { font-size:var(--ds-font-size-h3); font-weight: 500; color: var(--ds-text-primary, #253047); }
/* Legacy two-column panels with independent dl rows remain readable. */
.ds-unified-detail .card-body > .row > [class*="col-"] dl.row { grid-template-columns: minmax(92px, 1fr) minmax(0, 2fr); }
/* Image + tabular fact panels used by tools and targets. */
.ds-unified-detail .ds-detail-properties { width: 100%; table-layout: fixed; }
.ds-unified-detail .ds-detail-properties tr { border-bottom: 1px solid #eef1f6; }
.ds-unified-detail .ds-detail-properties :is(td,th) { padding: 9px 10px; vertical-align: top; white-space: normal; overflow-wrap: anywhere; font-size:var(--ds-font-size-h3); }
.ds-unified-detail .ds-detail-properties td:first-child { color: var(--detail-label); font-weight: 400; width: 34%; }
.ds-unified-detail .ds-detail-properties th { color: var(--ds-text-primary, #253047); font-weight: 500; }
.ds-unified-detail .card-body img.img-fluid { max-height: 210px; object-fit: contain; }
.ds-unified-detail .ds-detail-document .card-title { margin: 0 0 12px; font-size: 18px; font-weight: 600; }
.ds-unified-detail .ds-detail-document .card-body > .mt-3 { border-top: 1px solid var(--detail-border); padding-top: 16px; line-height: 1.8; overflow-wrap: anywhere; }
.ds-unified-detail .ds-form.ds-detail { gap: var(--detail-gap); }
.ds-unified-detail .ds-form.ds-detail .ds-form-section { padding: 0; overflow: hidden; }
.ds-unified-detail .ds-form.ds-detail .ds-form-section > :not(.ds-form-section-title) { margin: 0; padding: 14px 16px; }
.ds-unified-detail .ds-form.ds-detail .ds-form-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 12px 16px; }
.ds-unified-detail .ds-detail .ds-form-field { min-width: 0; }
.ds-unified-detail .ds-detail .ds-form-field dt { color: var(--detail-label); margin: 0 0 4px; font-size:var(--ds-font-size-section); }
.ds-unified-detail .ds-detail .ds-form-field dd { margin: 0; font-size:var(--ds-font-size-h3); overflow-wrap: anywhere; }
.ds-unified-detail .ds-detail .ds-form-field--full { grid-column: 1 / -1; }
.ds-unified-detail :is(.table-responsive, .mini-table) { max-width: 100%; }
.ds-unified-detail .table-responsive { overflow-x: auto; }
.ds-unified-detail :is(.mini-table thead th, .mini-table tbody td) { padding-top: 10px; padding-bottom: 10px; }
.ds-unified-detail .nav-tabs { flex-wrap: nowrap; max-width: 100%; overflow-x: auto; gap: 4px; margin: 0 !important; }
.ds-unified-detail .nav-tabs .nav-item { flex: none; }
.ds-unified-detail .nav-tabs .nav-link {
  display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 14px;
  margin: 0; border: 0; border-bottom: 2px solid transparent; border-radius: 0;
  background: transparent; color: var(--ds-text-secondary); font-size:var(--ds-font-size-h3); font-weight: 500;
  white-space: nowrap; transition: color .15s, background-color .15s, border-color .15s;
}
.ds-unified-detail .nav-tabs .nav-link:hover { background: var(--ds-bg-subtle); color: var(--ds-brand-600); }
.ds-unified-detail .nav-tabs .nav-link.active { background: transparent; border-color: var(--ds-brand-500); color: var(--ds-brand-600); font-weight: 600; }
.ds-unified-detail .nav-tabs .badge { display: inline-grid; place-items: center; min-width: 24px; height: 24px; padding: 0 6px; border-radius: 12px; background: var(--ds-bg-subtle); color: var(--ds-text-secondary); font-variant-numeric: tabular-nums; }
.ds-unified-detail .nav-tabs .nav-link.active .badge { background: var(--ds-brand-50); color: var(--ds-brand-700); }
.ds-unified-detail .tab-content { min-width: 0; }
.ds-unified-detail :is(.info-grid, .stage-row-grid) { row-gap: 14px; }
.ds-unified-detail .info-cell { min-width: 0; overflow-wrap: anywhere; }
@media (max-width: 1100px) {
  .ds-unified-detail dl.row { grid-template-columns: minmax(95px, 1fr) minmax(0, 2fr); }
  .ds-unified-detail .ds-form.ds-detail .ds-form-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
}
@media (max-width: 640px) {
  .ds-unified-detail dl.row, .ds-unified-detail .card-body > .row > [class*="col-"] dl.row { grid-template-columns: minmax(90px, 1fr) minmax(0, 2fr); }
  .ds-unified-detail .ds-form.ds-detail .ds-form-grid { grid-template-columns: minmax(0,1fr); }
  .ds-unified-detail :is(.card-body, .info-grid) { padding: 12px; }
  .ds-unified-detail .card-body > .row > [class*="col-"] { width: 100%; }
}

/* Unified nested drawer navigation: a single outer title bar.
   Hide only the page-level heading embedded in a CRUD iframe, not section titles. */
.crud-embedded #main-content > h4,
.crud-embedded #main-content > [data-crud-content="drawer"] > h4,
.crud-embedded #main-content > [data-crud-content="drawer"] > .ds-device-detail__page-title,
.crud-embedded #main-content > .ds-device-detail > .ds-device-detail__page-title { display: none; }
.crud-dialog__title:has(.crud-dialog__breadcrumb-back) {
    display: flex; align-items: center; flex-wrap: wrap; gap: 0; min-width: 0;
}
.crud-dialog__title [aria-current="page"] { color: var(--ds-text-primary); font-weight: 600; }

/* Unified date-time range field (device borrow and reusable forms) */
.ds-drawer-form .ds-date-range-field { grid-column: span 2; min-width: 0; }
.ds-drawer-form .ds-date-range-control {
  display: flex; align-items: center; height: 32px; min-width: 0;
  border: 1px solid var(--ds-border-color, #d0d9e7);
  background: #fff; border-radius: 6px; overflow: hidden;
}
.ds-drawer-form .ds-date-range-control:focus-within { border-color: #356deb; box-shadow: 0 0 0 1px #356deb; }
.ds-drawer-form .ds-date-range-part { display: flex; align-items: center; gap: 6px; flex: 1 1 0; min-width: 0; padding: 0 8px; }
.ds-drawer-form .ds-date-range-hint { color: #8893a5; font-size:var(--ds-font-size-small); white-space: nowrap; }
.ds-drawer-form .ds-date-range-part input {
  flex: 1 1 0; min-width: 0; width: 100%; height: 30px; min-height: 0;
  padding: 0; margin: 0; border: 0; border-radius: 0;
  box-shadow: none; outline: 0; background: transparent;
  font-size:var(--ds-font-size-meta);
}
.ds-drawer-form .ds-date-range-part input:focus { border: 0; box-shadow: none; outline: none; }
.ds-drawer-form .ds-date-range-arrow { color: #8c96a4; flex: none; font-size:var(--ds-font-size-body); }
.ds-drawer-form .ds-date-range-error { color: #d92d20; font-size:var(--ds-font-size-small); }
@media (max-width: 850px) { .ds-drawer-form .ds-date-range-field { grid-column: 1 / -1; } }

/* CRUD shared unsaved-change confirmation: modal over the existing drawer. */
.crud-discard-modal {
    position: fixed;
    inset: 0;
    box-sizing: border-box;
    display: block;
    width: min(420px, calc(100vw - 32px));
    min-width: 0;
    max-width: none;
    height: fit-content;
    min-height: 0;
    max-height: min(260px, calc(100dvh - 32px));
    margin: auto;
    padding: 0;
    overflow: auto;
    border: 1px solid var(--ds-border, #d9e0ec);
    border-radius: 10px;
    background: var(--ds-bg-surface, #fff);
    color: inherit;
    box-shadow: 0 16px 48px rgba(20, 31, 55, .16);
}

.crud-discard-modal::backdrop { background: rgba(15, 23, 42, .32); }
.crud-discard-modal__header {
    display: flex; justify-content: space-between; align-items: center;
    gap: 12px; padding: 20px 22px 0;
}
.crud-discard-modal__header h2 { font-size:var(--ds-font-size-h3); line-height: 24px; font-weight: 600; margin: 0; }
.crud-discard-modal__close {
    border: 0; background: transparent; color: #667085;
    cursor: pointer; width: 28px; height: 28px; font-size: 22px; line-height: 28px;
}
.crud-discard-modal__message { margin: 12px 22px 22px; font-size:var(--ds-font-size-body); line-height: 1.6; }
.crud-discard-modal__actions {
    display: flex; align-items: center; justify-content: flex-end;
    gap: 8px; padding: 12px 22px 18px;
}
.crud-discard-modal__actions .btn { height: 32px; min-height: 32px; font-size:var(--ds-font-size-body); }

/* Shared CRUD table-row deletion popconfirm; no per-page overrides. */
.crud-popconfirm {
    position: fixed;
    z-index: 2147483000;
    margin: 0;
    width: min(320px, calc(100vw - 24px));
    box-sizing: border-box;
    padding: 16px;
    border: 1px solid var(--ds-border, #d9e0ec);
    border-radius: 12px;
    background: #fff;
    color: #344054;
    box-shadow: 0 8px 24px rgba(16, 24, 40, .18);
}
.crud-popconfirm__title { display: flex; gap: 10px; align-items: center; font-size:var(--ds-font-size-h3); }
.crud-popconfirm__symbol { display: inline-grid; place-items: center; width: 20px; height: 20px; flex: none; background: #e9ab35; border-radius: 50%; color: #fff; font-weight: 700; font-size:var(--ds-font-size-small); }
.crud-popconfirm__description { margin: 12px 0 14px 30px; font-size:var(--ds-font-size-body); line-height: 1.5; overflow-wrap: anywhere; }
.crud-popconfirm__actions { display: flex; justify-content: flex-end; gap: 8px; }
.crud-popconfirm__actions .btn { min-height: 32px; height: 32px; font-size:var(--ds-font-size-body); }

/* Searchable select visual fix (2026-10-14): one outer border, one full-width input.
   The drawer's legacy 156px search widths and Bootstrap input rules must not
   re-style the inner combobox field. Keep native select available for submission. */
.ds-searchable-select,
[data-crud-controller="project_create"] .ds-searchable-select,
[data-crud-controller="project_edit"] .ds-searchable-select {
    display: block;
    width: 100%;
    min-width: 0;
    max-width: 100%;
}
.ds-searchable-select > .ds-searchable-select__control {
    position: relative;
    display: flex;
    align-items: stretch;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    height: var(--ds-control-md, 40px);
    box-sizing: border-box;
    padding: 0;
    border: 1px solid var(--ds-border-strong, #d5dce8);
    border-radius: var(--ds-control-radius, 6px);
    background-color: #fff;
    overflow: hidden;
}
:is(.crud-dialog, .crud-dialog--drawer, .crud-embedded, [data-crud-controller="project_create"], [data-crud-controller="project_edit"])
 .ds-searchable-select .ds-searchable-select__control > input.ds-searchable-select__input,
.ds-searchable-select .ds-searchable-select__control > input.ds-searchable-select__input {
    display: block !important;
    position: relative;
    flex: 1 1 auto !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    box-sizing: border-box !important;
    margin: 0 !important;
    padding: 0 44px 0 12px !important;
    border: 0 !important;
    border-radius: 0 !important;
    outline: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    appearance: none;
    -webkit-appearance: none;
    font: inherit;
    text-overflow: ellipsis;
}
.ds-searchable-select .ds-searchable-select__control > input.ds-searchable-select__input:focus {
    border: 0 !important;
    outline: 0 !important;
    box-shadow: none !important;
}
.ds-searchable-select .ds-searchable-select__control > .ds-searchable-select__toggle {
    position: absolute;
    inset: 0 0 0 auto;
    width: 40px;
    height: 100%;
    padding: 0;
    margin: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
}
.ds-searchable-select .ds-searchable-select__control:focus-within {
    border-color: #3b71e8;
    box-shadow: 0 0 0 2px rgba(59,113,232,.12);
}

/* v3: The input itself owns the ONLY visible border. The wrapper is layout-only.
   Prevents an outer select border plus an inner input border in project drawers. */
.ds-searchable-select,
.ds-searchable-select > .ds-searchable-select__control {
    min-width: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
}
.ds-searchable-select > .ds-searchable-select__control {
    position: relative !important;
    display: block !important;
    height: var(--ds-control-md, 40px) !important;
    min-height: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
    background-image: none !important;
    box-shadow: none !important;
    overflow: visible !important;
}
.ds-searchable-select > .ds-searchable-select__control > input.ds-searchable-select__input,
:is(.crud-dialog, .crud-embedded, .crud-dialog--drawer, [data-crud-controller="project_create"], [data-crud-controller="project_edit"]) .ds-searchable-select > .ds-searchable-select__control > input.ds-searchable-select__input {
    display: block !important;
    position: relative !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    box-sizing: border-box !important;
    margin: 0 !important;
    padding: 0 42px 0 12px !important;
    border: 1px solid var(--ds-border-strong, #d5dce8) !important;
    border-radius: var(--ds-control-radius, 6px) !important;
    outline: none !important;
    background: #fff !important;
    background-image: none !important;
    box-shadow: none !important;
    appearance: none !important;
    -webkit-appearance: none !important;
    text-overflow: ellipsis;
}
.ds-searchable-select > .ds-searchable-select__control > input.ds-searchable-select__input:focus {
    border-color: #3b71e8 !important;
    box-shadow: 0 0 0 2px rgba(59,113,232,.12) !important;
}
.ds-searchable-select > .ds-searchable-select__control > .ds-searchable-select__toggle {
    position: absolute !important;
    display: block !important;
    top: 0 !important;
    bottom: 0 !important;
    right: 0 !important;
    left: auto !important;
    width: 40px !important;
    height: 100% !important;
    padding: 0 !important;
    border: 0 !important;
    background: transparent !important;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 6l4 4 4-4' stroke='%235F6673' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: center !important;
    background-size: 16px 16px !important;
    box-shadow: none !important;
    cursor: pointer;
}
.ds-searchable-select > .ds-searchable-select__control > .ds-searchable-select__toggle::before,
.ds-searchable-select > .ds-searchable-select__control > .ds-searchable-select__toggle::after { content: none !important; }

/* Project create: department > engineer hierarchical transfer list */
[data-crud-controller="project_create"] .ds-member-tree {
    box-sizing: border-box;
    width: 100%; height: 184px; overflow: auto;
    border: 1px solid #d4ddeb; border-radius: 6px;
    background: #fff; padding: 5px 7px;
    font-size: var(--ds-font-size-body); line-height: 1.5;
}
[data-crud-controller="project_create"] .ds-member-tree__heading,
[data-crud-controller="project_create"] .ds-member-tree__member {
    display: flex; align-items: center; gap: 8px;
    min-height: 30px; padding: 3px 5px; border-radius: 4px;
}
[data-crud-controller="project_create"] .ds-member-tree__heading {font-weight: 600;}
[data-crud-controller="project_create"] .ds-member-tree__heading:hover,
[data-crud-controller="project_create"] .ds-member-tree__member:hover {background: #f1f5fc;}
[data-crud-controller="project_create"] .ds-member-tree__expander {
    appearance: none; border: 0; background: transparent; color: #64748b;
    width: 18px; padding: 0; cursor: pointer; flex-shrink: 0;
}
[data-crud-controller="project_create"] .ds-member-tree__checkbox {
    margin: 0; width: 15px; height: 15px; flex-shrink: 0; accent-color: #3f70ea;
}
[data-crud-controller="project_create"] .ds-member-tree__children {padding-left: 24px;}
[data-crud-controller="project_create"] .ds-member-tree__member {cursor: pointer; font-weight: 400;}
[data-crud-controller="project_create"] .ds-member-tree__department {flex: 1;}
[data-crud-controller="project_create"] .ds-member-tree__count {font-size: var(--ds-font-size-small); font-weight: 400; color: #64748b;}
[data-crud-controller="project_create"] .ds-member-tree__empty {padding: 18px 8px; color: #64748b; text-align: center;}

/* Reusable department/member picker. Usage: [data-org-picker], org-picker.js */
.ds-org-picker{width:100%;min-width:0}
.ds-org-picker__native{position:absolute!important;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);pointer-events:none}
.ds-org-picker__trigger{width:100%;min-height:42px;display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid #d5ddea;background:#fff;border-radius:7px;padding:7px 12px;text-align:left;color:#334155;cursor:pointer;font:inherit}
.ds-org-picker__trigger:focus-visible{outline:2px solid #4577ed;outline-offset:2px}
.ds-org-picker__placeholder{color:#8491a5}
.ds-org-picker__trigger-summary{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
.ds-org-picker__summary-chip{display:inline-flex;max-width:155px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:3px 8px;background:#f1f5fa;border-radius:4px;font-size:var(--ds-font-size-small);color:#334155}
.ds-org-picker__trigger-right{margin-left:auto;flex:none;display:flex;align-items:center;gap:9px;color:#64748b;font-size:var(--ds-font-size-small)}
.ds-org-picker__dialog{position:fixed;inset:0;margin:auto;width:min(680px,calc(100vw - 32px));max-height:min(660px,calc(100dvh - 32px));padding:0;border:1px solid #e2e8f0;border-radius:9px;background:#fff;color:#253047;box-shadow:0 20px 65px rgba(15,23,42,.2);overflow:hidden}
.ds-org-picker__dialog::backdrop{background:rgba(15,23,42,.48)}
.ds-org-picker__header,.ds-org-picker__footer{display:flex;align-items:center;justify-content:space-between;padding:15px 20px}
.ds-org-picker__header{border-bottom:1px solid #e8edf5}
.ds-org-picker__close{font-size:25px;line-height:1;border:0;background:none;color:#667085;cursor:pointer}
.ds-org-picker__body{display:grid;grid-template-columns:1fr 1fr;min-height:330px;max-height:min(480px,calc(100dvh - 175px));overflow:hidden}
.ds-org-picker__pane{padding:14px 18px;min-width:0;display:flex;flex-direction:column;gap:10px;overflow:hidden}
.ds-org-picker__pane--tree{border-right:1px solid #e5eaf2}
.ds-org-picker__pane-title,.ds-org-picker__selected-header{font-size:var(--ds-font-size-meta);font-weight:600;min-height:26px}
.ds-org-picker__selected-header{display:flex;align-items:center;justify-content:space-between}
.ds-org-picker__link{border:0;background:transparent;color:#356ce5;font:inherit;font-size:var(--ds-font-size-small);cursor:pointer}
.ds-org-picker__search{display:block;width:100%;height:36px;min-height:36px;padding:7px 10px;border:1px solid #d5ddea;border-radius:6px;background:#fff;font:inherit;font-size:var(--ds-font-size-meta);box-sizing:border-box}
.ds-org-picker__search:focus{outline:none;border-color:#4577ed;box-shadow:0 0 0 2px rgba(69,119,237,.12)}
.ds-org-picker__tree,.ds-org-picker__tags{overflow-y:auto;min-height:0;flex:1;scrollbar-width:thin}
.ds-org-picker__tree-row{display:flex;align-items:center;gap:6px;min-height:31px;font-size:var(--ds-font-size-meta);border-radius:4px;padding:2px 4px}
.ds-org-picker__tree-row:hover{background:#f2f6fd}
.ds-org-picker__tree-row--child{padding-left:28px}
.ds-org-picker__expander{width:18px;height:22px;border:0;background:none;cursor:pointer;color:#718096;flex:none;padding:0}
.ds-org-picker__tree-row input[type=checkbox]{width:15px;height:15px;flex:none;accent-color:#3f70ea;margin:0}
.ds-org-picker__tree-row label{min-width:0;cursor:pointer;overflow-wrap:anywhere;flex:1}
.ds-org-picker__tree-count{color:#94a3b8;font-size:var(--ds-font-size-tiny)}
.ds-org-picker__tags{display:flex;align-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:7px}
.ds-org-picker__tag{display:inline-flex;align-items:center;gap:5px;max-width:100%;background:#f1f4f8;border:1px solid #e5eaf1;border-radius:4px;padding:5px 7px;font-size:var(--ds-font-size-small);color:#475569}
.ds-org-picker__tag-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-org-picker__tag-remove{padding:0;border:0;background:none;font-size:var(--ds-font-size-h3);line-height:1;color:#64748b;cursor:pointer}
.ds-org-picker__empty{font-size:var(--ds-font-size-meta);color:#94a3b8;padding:20px 6px;text-align:center;width:100%}
.ds-org-picker__footer{justify-content:flex-end;gap:8px;border-top:1px solid #e8edf5}
@media(max-width:560px){.ds-org-picker__body{grid-template-columns:1fr;max-height:calc(100dvh - 160px);overflow:auto}.ds-org-picker__pane--tree{border-right:0;border-bottom:1px solid #e5eaf2;min-height:220px}.ds-org-picker__pane--selected{min-height:120px}.ds-org-picker__dialog{overflow:auto}}

/* Inline organization selector: no separate dialog. Shared by any [data-org-picker]. */
.ds-org-picker--inline .ds-org-picker__body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);width:100%;min-height:280px;height:320px;max-height:none;border:1px solid #d5ddea;border-radius:7px;background:#fff;overflow:hidden}
.ds-org-picker--inline .ds-org-picker__pane{padding:14px 16px;min-width:0;min-height:0;overflow:hidden}
.ds-org-picker--inline .ds-org-picker__pane--tree{border-right:1px solid #e5eaf2}
.ds-org-picker--inline .ds-org-picker__tree,.ds-org-picker--inline .ds-org-picker__tags{min-height:0;overflow-y:auto}
.ds-org-picker--inline .ds-org-picker__search{height:38px;flex:none}
@media(max-width:640px){.ds-org-picker--inline .ds-org-picker__body{grid-template-columns:minmax(0,1fr);height:540px;max-height:none}.ds-org-picker--inline .ds-org-picker__pane--tree{border-right:0;border-bottom:1px solid #e5eaf2}.ds-org-picker--inline .ds-org-picker__pane{min-height:0}}

/* Department-grouped single selection, reuses shared searchable-select. */
.ds-searchable-select__group{position:sticky;top:0;z-index:1;padding:8px 12px 5px;background:#f3f6fb;border-bottom:1px solid #e6ecf4;color:#52627b;font-size:var(--ds-font-size-small);font-weight:600;pointer-events:none}
.ds-searchable-select__option--grouped{padding-left:25px}

/* Shared bounded two-column cascading select: each column scrolls internally. */
.ds-searchable-select[data-searchable-departments] .ds-searchable-select__list{
    box-sizing:border-box;width:min(520px,calc(100vw - 32px));right:auto;
    height:auto;max-height:260px;overflow:hidden;padding:6px;z-index:1300;
}
.ds-searchable-select__cascade{
    display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
    height:240px;max-height:240px;min-height:0;gap:0;min-width:0;
}
.ds-searchable-select__cascade-depts,.ds-searchable-select__cascade-people{
    box-sizing:border-box;min-height:0;min-width:0;overflow-x:hidden;overflow-y:auto;
    overscroll-behavior:contain;scrollbar-width:thin;padding:4px;
}
.ds-searchable-select__cascade-depts{border-right:1px solid #e4e9f2}
.ds-searchable-select__cascade-dept,.ds-searchable-select__cascade-person{
    display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;
    border:0;border-radius:6px;background:transparent;color:#283449;font:inherit;
    font-size:var(--ds-font-size-meta);line-height:1.45;padding:9px;text-align:left;cursor:pointer;
    overflow-wrap:anywhere;
}
.ds-searchable-select__cascade-dept span:first-child{min-width:0}
.ds-searchable-select__cascade-dept span:last-child{flex:none;font-size:18px;color:#9ba5b5;line-height:14px}
.ds-searchable-select__cascade-dept:hover,.ds-searchable-select__cascade-dept.is-active,.ds-searchable-select__cascade-person:hover{background:#f0f3f8}
.ds-searchable-select__cascade-dept.is-active{color:#285ed1;font-weight:600}
.ds-searchable-select__cascade-person.is-selected{color:#326de7;background:#eff4ff}
@media(max-width:420px){.ds-searchable-select__cascade-dept,.ds-searchable-select__cascade-person{font-size:var(--ds-font-size-small);padding:8px 5px}}

/* Shared date range control outside drawer forms (e.g. table filters).
   Reuses the ds-date-range DOM/classes already used in device borrowing. */
.table-page__field--date-range { grid-column: span 2; position: relative; }
.table-page__field--date-range > .ds-date-range-control {
  display:flex; align-items:center; width:100%; min-width:0; height:32px;
  box-sizing:border-box; border:1px solid var(--ds-border-color, #d0d9e7);
  background:#fff; border-radius:6px;
}
.table-page__field--date-range > .ds-date-range-control:focus-within {
  border-color:#356deb; box-shadow:0 0 0 1px #356deb;
}
.table-page__field--date-range .ds-date-range-part {
  display:flex; flex:1 1 0; align-items:center; gap:6px; min-width:0; padding:0 8px;
}
.table-page__field--date-range .ds-date-range-hint {
  flex:none; color:#8893a5; font-size:var(--ds-font-size-small); white-space:nowrap;
}
.table-page__field--date-range .ds-date-range-part input {
  flex:1 1 0; width:100%; min-width:0; height:29px; min-height:0;
  border:0 !important; outline:0; box-shadow:none !important; background:transparent;
  border-radius:0; padding:0; margin:0; font-size:var(--ds-font-size-meta);
}
.table-page__field--date-range .ds-date-range-arrow {
  flex:none; color:#8c96a4; font-size:var(--ds-font-size-body);
}
.table-page__field--date-range .ds-date-range-error {
  position:absolute; top:100%; right:0; z-index:1; color:#d92d20;
  font-size:var(--ds-font-size-small); background:#fff;
}
@media(max-width:680px) {
  .table-page__field--date-range { grid-column:1 / -1; }
  .table-page__field--date-range .ds-date-range-hint { display:none; }
}

/* One plan-preview action source: the drawer shell owns visible controls.
   The embedded view retains its actual buttons for event handlers and standalone fallback. */
.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-preview-actions]{display:none!important}
.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-preview-view] {min-width:0; max-width:100%;}
.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-preview-view] > .card-body {min-width:0;}

/* 2026-10-15 | Execution-plan confirmation: compact two-column summary.
   Only the preview view is affected; the main plan form and other tables retain their layout. */
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] > .card-body {
  padding: 14px 16px !important;
}
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table {
  display: block;
  width: 100%;
  border: 0;
  margin: 0;
  background: transparent;
}
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 22px;
  width: 100%;
}
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody > tr {
  display: grid;
  grid-template-columns: minmax(88px, 36%) minmax(0, 1fr);
  min-width: 0;
  border-bottom: 1px solid #e9edf4;
}
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody > tr > td {
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 38px;
  padding: 7px 10px;
  margin: 0;
  border: 0 !important;
  font-size: var(--ds-font-size-body);
  line-height: 1.45;
  overflow-wrap: anywhere;
  white-space: normal;
}
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody > tr > td:first-child {
  width: auto !important;
  background: #f5f7fb !important;
  color: #596476;
  font-weight: 600;
}
[data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody > tr > td:last-child {
  background: #fff;
  color: #202a3b;
}
@media (max-width: 900px) {
  [data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody {
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
  }
}
@media (max-width: 480px) {
  [data-crud-controller="plan_form_unified"] [data-plan-preview-view] > .card-body { padding: 10px !important; }
  [data-crud-controller="plan_form_unified"] [data-plan-preview-view] #previewContent > table > tbody > tr {
    grid-template-columns: minmax(80px, 38%) minmax(0, 1fr);
  }
}

/* 2026-10-15 | Execution-plan drawer only: dense form spacing. */
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-section {
  padding: 10px 14px !important;
  border-radius: 8px;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-section + .ds-form-section {
  margin-top: 12px !important;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-section-title {
  width: calc(100% + 28px);
  min-height: 34px;
  margin: -10px -14px 10px;
  padding: 7px 14px;
  line-height: 20px;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-section-head {
  width: calc(100% + 28px);
  min-height: 40px !important;
  margin: -10px -14px 10px;
  padding: 5px 290px 5px 14px;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-section-tools {
  right: 14px;
  top: 4px;
  min-height: 30px;
  width: 270px;
  min-width: 270px;
  gap: 8px;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-section-tools .cat-filter {
  flex: 1 1 145px;
  width: 170px !important;
  min-width: 110px;
}
[data-crud-controller="plan_form_unified"] .plan-form :is(.ds-form-grid, .plan-form__info > .ds-form-grid) {
  row-gap: 10px !important;
  column-gap: 16px !important;
}
[data-crud-controller="plan_form_unified"] .plan-form .plan-form__place-grid {
  grid-auto-rows: minmax(28px, auto);
  row-gap: 3px !important;
  column-gap: 12px !important;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-field > .form-label {
  margin-bottom: 4px;
  line-height: 1.35;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-choice-list {
  padding: 8px 10px;
}
[data-crud-controller="plan_form_unified"] .plan-form .plan-form__places .ds-form-choice-list {
  max-height: 186px;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-choice-list--tall {
  max-height: 260px;
}
[data-crud-controller="plan_form_unified"] .plan-form .plan-form__resource-options {
  gap: 5px 10px;
}
[data-crud-controller="plan_form_unified"] .plan-form .plan-form__resource-options .cat-slots {
  margin-top: 5px !important;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-filter-head {
  margin-bottom: 5px;
}
[data-crud-controller="plan_form_unified"] .plan-form .ds-form-actions {
  margin-top: 12px;
  gap: 8px;
}
[data-crud-controller="plan_form_unified"] .plan-form #planCarList {
  max-height: 160px;
  padding: 8px 10px;
}
@media (max-width: 700px) {
  [data-crud-controller="plan_form_unified"] .plan-form .ds-form-section-head {
    padding-right: 14px;
    flex-wrap: wrap;
    gap: 6px;
  }
  [data-crud-controller="plan_form_unified"] .plan-form .ds-form-section-tools {
    position: static;
    width: 100%;
    min-width: 0;
    justify-content: flex-start;
  }
}

/* 2026-10-15: execution-plan venue/car selections use only the outer section card.
   Preserve max-height and overflow so long option lists still scroll. */
[data-crud-controller="plan_form_unified"] .plan-form #planPlaces,
[data-crud-controller="plan_form_unified"] .plan-form #planCarList {
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  outline: none !important;
  padding: 2px 0 !important;
  margin: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-form #planPlaces:focus-within,
[data-crud-controller="plan_form_unified"] .plan-form #planCarList:focus-within {
  outline: none !important;
  box-shadow: none !important;
}

/* 执行计划：左侧模块导航 + 单模块工作区。只作用于该控制器。 */
[data-crud-controller="plan_form_unified"] .plan-workspace {
  display:grid;grid-template-columns:190px minmax(0,1fr);gap:16px;align-items:stretch;
  min-height:460px;font-size:var(--ds-font-size-body);
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav {
  position:sticky;top:0;align-self:start;display:flex;flex-direction:column;
  gap:4px;padding:10px;background:#f7f9fc;border:1px solid #e2e8f2;
  border-radius:8px;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav-heading {
  padding:9px 10px 5px;font-size:var(--ds-font-size-meta);font-weight:600;color:#64748b;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav-heading--sub {padding-top:12px}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav-item {
  width:100%;min-height:36px;padding:7px 10px;border:0;border-radius:5px;
  background:transparent;color:#334155;text-align:left;cursor:pointer;font:inherit;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav-item:hover {background:#eaf0fa}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav-item.is-active {
  color:#1d4ed8;background:#e5efff;font-weight:600;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav-item--sub {padding-left:22px}
[data-crud-controller="plan_form_unified"] .plan-workspace__main {min-width:0}
[data-crud-controller="plan_form_unified"] .plan-workspace__main [data-plan-panel][hidden] {display:none !important}
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section {margin:0 !important}
/* 资源申请共用业务节点，根据导航键切换两组内容；无隐藏输入框、无数据丢失。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="devices"] .plan-form__resource-column:nth-child(2),
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="targets"] .plan-form__resource-column:nth-child(1) {display:none !important}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="devices"] .plan-form__resources > .ds-form-grid,
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="targets"] .plan-form__resources > .ds-form-grid {
 display:block !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="devices"] .plan-form__resource-column,
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="targets"] .plan-form__resource-column {
 width:100% !important;max-width:100% !important;border-left:0 !important;padding-left:0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-options {
 max-height:480px;overflow-y:auto;
}
@media(max-width:760px){
 [data-crud-controller="plan_form_unified"] .plan-workspace{grid-template-columns:minmax(0,1fr);gap:10px;min-height:0}
 [data-crud-controller="plan_form_unified"] .plan-workspace__nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;gap:4px;padding:6px}
 [data-crud-controller="plan_form_unified"] .plan-workspace__nav-heading{display:none}
 [data-crud-controller="plan_form_unified"] .plan-workspace__nav-item{width:auto;min-height:32px;padding:6px 9px}
 [data-crud-controller="plan_form_unified"] .plan-workspace__nav-item--sub{padding-left:9px}
}

/* 执行计划：左侧锚点导航 + 右侧连续滚动内容（20261015） */
[data-crud-controller="plan_form_unified"] .plan-workspace {align-items:start;min-height:0;height:min(75dvh,860px);height:calc(100dvh - 174px);max-height:860px;overflow:hidden}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav {height:100%;overflow-y:auto;position:relative;top:auto;align-self:stretch;overscroll-behavior:contain}
[data-crud-controller="plan_form_unified"] .plan-workspace__main {height:100%;min-height:0;overflow-y:auto;overscroll-behavior:contain;scroll-behavior:smooth;padding-right:8px}
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section {margin:0 0 12px !important;scroll-margin-top:10px}
[data-crud-controller="plan_form_unified"] .plan-workspace__main [data-plan-panel][hidden] {display:block !important}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources > .ds-form-grid {display:grid !important}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-column {display:block !important;width:auto !important;max-width:none !important}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-column:nth-child(2) {border-left:1px solid #e2e8f2 !important;padding-left:16px !important}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-options {max-height:none;overflow:visible}
@media(max-width:760px){
 [data-crud-controller="plan_form_unified"] .plan-workspace{height:calc(100dvh - 175px);max-height:none;display:flex;flex-direction:column}
 [data-crud-controller="plan_form_unified"] .plan-workspace__nav{height:auto;flex:0 0 auto;max-height:100px;overflow-y:auto}
 [data-crud-controller="plan_form_unified"] .plan-workspace__main{height:auto;min-height:0;flex:1 1 auto;width:100%}
 [data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-column:nth-child(2){border-left:0 !important;padding-left:0 !important}
}

/* 2026-10-15: resource option lists are unframed and unrestricted inside the plan workspace.
   Keep only the parent resource section border and the central column divider. */
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form
  #planDeviceCatWrapper,
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form
  #planTargetCatWrapper {
  border: 0 !important;
  outline: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  overflow: visible !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form
  #planDeviceCatWrapper:focus-within,
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form
  #planTargetCatWrapper:focus-within {
  border: 0 !important;
  box-shadow: none !important;
  outline: 0 !important;
}

/* 执行计划右侧可视区域：范围固定在抽屉标题栏之下至视口底部。
   左侧导航和右侧正文共用此区域高度；长列表交由右侧统一滚动。
   不给设备/目标物列表重新添加边框、内层滚动或固定高度。 */
[data-crud-controller="plan_form_unified"] .plan-workspace {
  height: calc(100dvh - 128px) !important;
  max-height: none !important;
  min-height: 300px !important;
  overflow: hidden !important;
  align-items: stretch !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav {
  min-height: 0 !important;
  height: 100% !important;
  overflow-y: auto !important;
  overflow-x: hidden !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main {
  min-width: 0 !important;
  min-height: 0 !important;
  height: 100% !important;
  overflow-x: hidden !important;
  overflow-y: auto !important;
  overscroll-behavior-y: contain;
  padding: 0 6px 8px 0;
  scrollbar-gutter: stable;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options {
  max-height: none !important;
  overflow: visible !important;
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace {
    height: calc(100dvh - 128px) !important;
    min-height: 260px !important;
    display: flex !important;
    flex-direction: column !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace__nav {
    flex: 0 0 auto !important;
    height: auto !important;
    max-height: 110px !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace__main {
    flex: 1 1 auto !important;
    height: auto !important;
    scrollbar-gutter: auto;
  }
}

/* 2026-10-15: 在同一右侧视窗内顺序呈现完整资源模块。
   设备和目标物各占右侧正文全宽；导航只是滚动定位，不折叠表单。 */
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources > .ds-form-grid {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 12px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-column {
  display: block !important;
  grid-column: 1 / -1 !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  border-left: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resources .plan-form__resource-column:nth-child(2) {
  border-left: 0 !important;
  border-top: 1px solid #e2e8f2 !important;
  padding: 14px 0 0 !important;
  margin-top: 2px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resource-options {
  box-sizing: border-box;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 8px 18px;
}
/* Prevent the older per-panel toggle rule from hiding either resource block. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="devices"] .plan-form__resource-column:nth-child(2),
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-active="targets"] .plan-form__resource-column:nth-child(1) {
  display: block !important;
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace .plan-form__resource-options {
    grid-template-columns: minmax(0, 1fr) !important;
  }
}

/* 2026-10-15 | 计划编辑右侧：参考平铺式配置页面，只保留清晰分组，不画重复卡片框。
   仅影响 plan_form_unified 的右侧工作区，不影响公共抽屉、表单控件或其他页面。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section {
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  padding: 6px 0 20px !important;
  margin: 0 !important;
  overflow: visible !important;
}
/* 顶级板块之间只使用一条非常浅的横线；不使用多层闭合边框。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section + .ds-form-section {
  border-top: 1px solid #edf0f5 !important;
  padding-top: 18px !important;
}
/* 普通板块标题成为正文中的标题，不再单独占用一条带框的灰色卡片标题栏。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-title {
  box-sizing: border-box !important;
  width: auto !important;
  min-height: 0 !important;
  margin: 0 0 12px !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  color: #273244 !important;
  font-size: var(--ds-font-size-body) !important;
  font-weight: 600 !important;
  line-height: 1.5 !important;
}
/* 带筛选框的“试验场地”标题行同样取消标题框，同时保留右侧筛选输入框。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head {
  box-sizing: border-box !important;
  width: 100% !important;
  min-height: 0 !important;
  margin: 0 0 12px !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .ds-form-section-head > .ds-form-section-title {
  width: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  font-size: var(--ds-font-size-body) !important;
  font-weight: 600 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .ds-form-section-head > .ds-form-section-tools {
  position: static !important;
  min-width: 0 !important;
  width: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  flex: 0 1 auto;
}
/* 彻底清掉普通复选项容器的边框，滚动仍由右侧工作区统一控制。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main .ds-form-choice-list,
[data-crud-controller="plan_form_unified"] .plan-workspace__main #planPlaces,
[data-crud-controller="plan_form_unified"] .plan-workspace__main #planCarList,
[data-crud-controller="plan_form_unified"] .plan-workspace__main #planDeviceCatWrapper,
[data-crud-controller="plan_form_unified"] .plan-workspace__main #planTargetCatWrapper {
  border: 0 !important;
  border-radius: 0 !important;
  outline: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
}
/* 所需设备/目标物作为一级小标题平铺显示，无子卡片。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-column {
  background: transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-column:nth-child(2) {
  border-left: 0 !important;
  border-top: 1px solid #edf0f5 !important;
  padding: 18px 0 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options > .cat-row {
  min-width: 0;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  padding: 2px 0 !important;
}
/* 勾选后出现的时段数量框也使用浅色底块代替一圈圈边框，原输入框保留。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options .cat-slots .border.rounded {
  border: 0 !important;
  border-radius: 4px !important;
  box-shadow: none !important;
  background: #f6f8fb !important;
  padding: 6px 4px !important;
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head {
    flex-wrap: wrap !important;
    align-items: flex-start !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace__main .ds-form-section-head > .ds-form-section-tools {
    width: 100% !important;
    justify-content: flex-start !important;
  }
}


/* 2026-10-15 | 执行计划右侧工作区：标题使用浅灰色通栏底色。
   只改变模块标题背景，不给正文、复选列表添加外框。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-title,
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head {
  box-sizing: border-box !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  width: 100% !important;
  min-height: 36px !important;
  margin: 0 0 12px !important;
  padding: 7px 12px !important;
  background: #f4f6f9 !important;
  border: 0 !important;
  border-radius: 4px !important;
  box-shadow: none !important;
  color: #263447 !important;
  font-size: var(--ds-font-size-body) !important;
  font-weight: 600 !important;
  line-height: 22px !important;
}
/* 场地标题里的筛选器应留在灰条右侧，不再单独形成标题框。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head > .ds-form-section-title {
  flex: 0 1 auto !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  font-size: var(--ds-font-size-body) !important;
  line-height: 22px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head > .ds-form-section-tools {
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head {
    gap: 8px !important;
    flex-wrap: wrap !important;
  }
}


/* 2026-10-15 | 计划工作区：资源复选项宽屏四列。
 * 被选中类别跨整行展示时段数量，避免四列下三个输入框被挤窄。
 * 限定本业务控制器，不改变其他页面的表格/复选列表。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 7px 14px !important;
    align-content: start !important;
    width: 100% !important;
    overflow: visible !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options > .cat-row {
    min-width: 0 !important;
    overflow-wrap: anywhere;
}
/* 展开的类别获得一整行，不再使三个时段数量控件挤成窄列。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options > .cat-row:has(> label input[type="checkbox"]:checked) {
    grid-column: 1 / -1 !important;
    padding: 6px 10px !important;
    background: #f7f9fc !important;
    border-radius: 4px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options > .cat-row:has(> label input[type="checkbox"]:checked) .cat-slots > .ds-form-grid {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 12px !important;
}
/* 四列选项仅在空间足够时使用，避免平板和手机出现文字挤压。 */
@media (max-width: 1350px) {
    [data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options {
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    }
}
@media (max-width: 1080px) {
    [data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
}
@media (max-width: 760px) {
    [data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    [data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resource-options > .cat-row:has(> label input[type="checkbox"]:checked) .cat-slots > .ds-form-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
        gap: 6px !important;
    }
}
[data-crud-controller="plan_form_unified"],
[data-crud-controller="plan_form_unified"] [data-plan-form-view],
[data-crud-controller="plan_form_unified"] [data-plan-form-view] > .card,
[data-crud-controller="plan_form_unified"] [data-plan-form-view] > .card > .ds-form-body,
[data-crud-controller="plan_form_unified"] #planForm {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
/* 原始 form 外面仍包着 card；禁止这层 card 引入第二重边距。 */
[data-crud-controller="plan_form_unified"] [data-plan-form-view] > .card {
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
}
[data-crud-controller="plan_form_unified"] [data-plan-form-view] > .card > .ds-form-body {
  padding: 0 !important;
}
/* 红框可用区域全宽：左侧目录和右侧内容都由这一张网格填充。 */
[data-crud-controller="plan_form_unified"] .plan-workspace {
  box-sizing: border-box !important;
  display: grid !important;
  grid-template-columns: 220px minmax(0, 1fr) !important;
  column-gap: 16px !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  height: calc(100dvh - 124px) !important;
  max-height: none !important;
  min-height: 280px !important;
  margin: 0 !important;
  padding: 0 !important;
  align-items: stretch !important;
  overflow: hidden !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__nav {
  box-sizing: border-box !important;
  width: 100% !important;
  min-width: 0 !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 12px !important;
  overflow-y: auto !important;
  overflow-x: hidden !important;
  align-self: stretch !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  min-height: 0 !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 0 6px 12px 0 !important;
  overflow-y: auto !important;
  overflow-x: hidden !important;
  scrollbar-gutter: stable !important;
  overscroll-behavior: contain;
}
/* 标题条、字段网格与复选项均贴合右侧工作区同一左右边线。 */
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section,
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-grid,
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__place-grid,
[data-crud-controller="plan_form_unified"] .plan-workspace__main .plan-form__resources > .ds-form-grid {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-title,
[data-crud-controller="plan_form_unified"] .plan-workspace__main > .ds-form-section > .ds-form-section-head {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
/* 给移动/小窗口保留单列和足够的内边距，不产生横向溢出。 */
@media (max-width: 960px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace {
    grid-template-columns: 172px minmax(0, 1fr) !important;
    column-gap: 12px !important;
  }
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace {
    display: flex !important;
    flex-direction: column !important;
    gap: 10px !important;
    height: calc(100dvh - 116px) !important;
    min-height: 240px !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace__nav {
    flex: 0 0 auto !important;
    height: auto !important;
    max-height: 106px !important;
    padding: 8px !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace__main {
    flex: 1 1 0 !important;
    height: auto !important;
    padding: 0 2px 10px 0 !important;
    scrollbar-gutter: auto !important;
  }
}


/* ============================================================
   执行计划 · 按用户参考设计图重构工作区（2026-10-15）
   DOM 分为：左侧目录 + 右侧完整长表单；设备/目标物各自独立板块。
   范围仅限于 data-plan-design="reference"，不影响其他抽屉。
   ============================================================ */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] {
  grid-template-columns: 220px minmax(0,1fr) !important;
  gap: 10px !important;
  width: 100% !important;
  height: calc(100dvh - 124px) !important;
  max-height: none !important;
  padding: 0 !important;
  align-items: stretch !important;
  overflow: hidden !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__nav {
  align-self: stretch !important;
  border: 0 !important;
  border-radius: 4px !important;
  background: #fff !important;
  padding: 12px !important;
  overflow: auto !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__nav-item {
  border-radius: 6px !important;
  min-height: 40px !important;
  padding: 9px 12px !important;
  margin: 1px 0 !important;
  font-size: var(--ds-font-size-body) !important;
  line-height: 20px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__nav-item.is-active {
  background: #e6eefc !important;
  color: #2463de !important;
  font-weight: 600 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main {
  width: 100% !important;
  min-width: 0 !important;
  height: 100% !important;
  padding: 0 8px 4px 0 !important;
  overflow: auto !important;
  scrollbar-gutter: stable !important;
  scroll-behavior: smooth;
}
/* Make all direct sections equally spaced with a single soft divider. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section {
  display: block !important;
  padding: 0 16px 16px !important;
  margin: 0 0 10px !important;
  border: 0 !important;
  border-radius: 4px !important;
  box-shadow: none !important;
  background: #fff !important;
  scroll-margin-top: 6px;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section + .ds-form-section {
  border-top: 0 !important;
  padding-top: 0 !important;
}
/* Flat, full-width light gray heading bars, no nested cards. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__section-bar,
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section > .ds-form-section-title,
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section > .ds-form-section-head {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px !important;
  box-sizing: border-box !important;
  width: 100% !important;
  min-height: 44px !important;
  margin: 0 0 12px !important;
  padding: 10px 0 !important;
  border: 0 !important;
  border-bottom: 1px solid #e7ebf0 !important;
  border-radius: 0 !important;
  background: #fff !important;
  box-shadow: none !important;
  font-size: var(--ds-font-size-body) !important;
  color: #27364a !important;
  line-height: 24px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__section-title {
  font-size: var(--ds-font-size-body) !important;
  font-weight: 600 !important;
  line-height: 22px !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* Search on the right side of the resource section bar, as in reference image. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__section-search {
  display: flex !important;
  align-items: center !important;
  gap: 7px !important;
  width: 182px !important;
  max-width: 43% !important;
  min-height: 30px !important;
  padding: 4px 9px !important;
  background: #fff !important;
  border: 1px solid #dce4f0 !important;
  border-radius: 5px !important;
  color: #94a3b8 !important;
  font-weight: 400 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__section-search input {
  width: 100% !important;
  min-width: 0 !important;
  height: 20px !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  outline-offset: 2px;
  font-size: var(--ds-font-size-body) !important;
  color: #334155 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__section-search:focus-within {
  outline: 2px solid #93b8fa;
  outline-offset: 1px;
}
/* One secondary filter line, like the design, using existing category filter. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-filter-row {
  display: flex !important;
  align-items: center !important;
  gap: 12px !important;
  margin: 0 0 12px !important;
  padding: 0 12px !important;
  font-size: var(--ds-font-size-body) !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-filter-row > label {
  white-space: nowrap;
  color: #334155;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-filter-row > input {
  width: 216px !important;
  max-width: 70% !important;
  height: 32px !important;
  font-size: var(--ds-font-size-body) !important;
}
/* The list is a four-column open grid, not an inset framed scroll region. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resources .plan-form__resource-column {
  display: block !important;
  box-sizing: border-box !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: none !important;
  padding: 0 12px !important;
  border: 0 !important;
  margin: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resources--targets .plan-form__resource-column {
  padding-top: 0 !important;
  border-top: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  column-gap: 16px !important;
  row-gap: 10px !important;
  align-items: start !important;
  align-content: start !important;
  width: 100% !important;
  max-height: none !important;
  overflow: visible !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options > .cat-row {
  min-width: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
  font-size: var(--ds-font-size-body) !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options > .cat-row > .form-check,
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options > .cat-row > label {
  display: flex !important;
  align-items: flex-start !important;
  gap: 6px !important;
  min-height: 24px !important;
  margin: 0 !important;
  font-size: var(--ds-font-size-body) !important;
  line-height: 21px !important;
  overflow-wrap: anywhere;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options > .cat-row > label.form-check {
  padding-left: 0 !important;
  float: none !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options > .cat-row > label.form-check > input.form-check-input {
  float: none !important;
  flex: 0 0 auto !important;
  margin: 3px 0 0 !important;
}
/* Keep slot quantity controls under checked categories; span a full row. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options > .cat-row:has(> label input[type="checkbox"]:checked) {
  grid-column: 1 / -1 !important;
  padding: 8px 10px !important;
  border-radius: 5px !important;
  background: #f6f8fb !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options .cat-slots > .ds-form-grid {
  display: grid !important;
  grid-template-columns: repeat(3,minmax(0,1fr)) !important;
  gap: 10px !important;
  max-width: 660px !important;
}
/* Venue options also use a no-frame 4-column grid. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__place-grid {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0,1fr)) !important;
  gap: 9px 14px !important;
}
/* Consistent subtle text and spacing across other content sections. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__info > .ds-form-grid {
  gap: 10px 14px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] #planCarList {
  border: 0 !important;
  background: transparent !important;
  padding: 0 12px !important;
}
@media (max-width: 1200px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options,
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__place-grid {
    grid-template-columns: repeat(3,minmax(0,1fr)) !important;
  }
}
@media (max-width: 1020px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] {
    grid-template-columns: 172px minmax(0,1fr) !important;
    gap: 14px !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options,
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__place-grid {
    grid-template-columns: repeat(2,minmax(0,1fr)) !important;
  }
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] {
    display: flex !important;
    flex-direction: column !important;
    gap: 10px !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__nav {
    height: auto !important;
    min-height: 0 !important;
    max-height: 104px !important;
    flex: 0 0 auto !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main {
    height: auto !important;
    flex: 1 1 0 !important;
    min-height: 0 !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options,
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__place-grid {
    grid-template-columns: repeat(2,minmax(0,1fr)) !important;
  }
}
@media (max-width: 480px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__resource-options,
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__place-grid {
    grid-template-columns: minmax(0,1fr) !important;
  }
}

/* 2026-10-15 - Execution plan: device search embedded in section title bar.
   The genuine cat-filter input lives here: no duplicate field and no JS proxy. */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"]
.plan-form__resources .plan-form__section-picker {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-end !important;
  gap: 10px !important;
  flex: 0 1 auto !important;
  width: auto !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  position: static !important;
  font-size: var(--ds-font-size-body) !important;
  font-weight: 400 !important;
  color: #334155 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"]
.plan-form__resources .plan-form__section-picker > span {
  flex: 0 0 auto;
  white-space: nowrap;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"]
.plan-form__resources .plan-form__section-picker > input {
  box-sizing: border-box !important;
  width: 188px !important;
  max-width: min(28vw, 188px) !important;
  min-width: 0 !important;
  height: 32px !important;
  min-height: 32px !important;
  padding: 5px 11px !important;
  border: 1px solid #d7e1ee !important;
  border-radius: 6px !important;
  background: #fff !important;
  font-size: var(--ds-font-size-body) !important;
  line-height: 20px !important;
}
@media (max-width: 550px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"]
  .plan-form__resources .plan-form__section-bar {
    flex-wrap: wrap !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"]
  .plan-form__resources .plan-form__section-picker {
    width: 100% !important;
    justify-content: flex-start !important;
  }
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"]
  .plan-form__resources .plan-form__section-picker > input {
    max-width: min(65vw, 188px) !important;
  }
}


/* ============================================================
   2026-10-15 | 执行计划右侧正文：以标题底色内 14px 为统一内容边线
   灰色标题背景仍铺满当前右侧栏；不修改外层抽屉宽度。
   仅作用于 reference 版执行计划表单，不影响其他抽屉。
   ============================================================ */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] {
  --plan-inline-inset: 0px;
}
/* 右侧内容的总宽度由工作区固定；不要让任何子网格撑出显示范围。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section {
  box-sizing: border-box !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
}
/* 灰色标题条保留通栏，文字与下方内容起点在同一竖线上。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section > :is(.ds-form-section-title, .ds-form-section-head, .plan-form__section-bar) {
  width: 100% !important;
  max-width: 100% !important;
  padding-left: var(--plan-inline-inset) !important;
  padding-right: var(--plan-inline-inset) !important;
  box-sizing: border-box !important;
}
/* 计划信息、场地、被测车、辅助资源的直接正文：同一内边距。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section > .ds-form-grid {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 var(--plan-inline-inset) !important;
}
/* 设备与目标物列表：与上面表单保持相同的内边距。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .plan-form__resources > .plan-form__resource-column {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 var(--plan-inline-inset) !important;
  border: 0 !important;
}
/* 内部列表不能再重复缩进，否则列表项与表单字段不齐。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] :is(#planPlaces, #planCarList, #planDeviceCatWrapper, #planTargetCatWrapper) {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__place-grid {
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* 场地/车辆复选框与正文左端对齐，取消旧 Bootstrap form-check 负缩进。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] :is(.plan-form__place-grid, #planCarList) label.form-check {
  display: flex !important;
  align-items: flex-start !important;
  gap: 6px !important;
  padding-left: 0 !important;
  min-width: 0 !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] :is(.plan-form__place-grid, #planCarList) label.form-check > input[type="checkbox"] {
  float: none !important;
  flex: 0 0 auto !important;
  margin: 3px 0 0 !important;
}
/* 保证长标签及控件不会超出红线内正文最大宽度。 */
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main :is(.ds-form-field, .plan-form__resource-options > .cat-row) {
  min-width: 0 !important;
  max-width: 100% !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main .ds-form-field > :is(input, select, textarea) {
  box-sizing: border-box;
  max-width: 100% !important;
}
@media (max-width: 760px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] {
    --plan-inline-inset: 12px;
  }
}
/* Remove 100vh height arithmetic across all intermediaries and let flex do sizing. */
dialog.crud-dialog.crud-dialog--drawer > .crud-dialog__body:has([data-crud-controller="plan_form_unified"] [data-plan-form-view]:not([hidden])) > [data-crud-controller="plan_form_unified"],
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-form-view]:not([hidden]),
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-form-view]:not([hidden]) > .card,
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-form-view]:not([hidden]) > .card > .ds-form-body,
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-form-view]:not([hidden]) #planForm {
  box-sizing: border-box !important;
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 0% !important;
  min-height: 0 !important;
  min-width: 0 !important;
}
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] [data-plan-form-view]:not([hidden]) .plan-workspace[data-plan-design="reference"] {
  flex: 1 1 0% !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
}
/* Constrain BOTH navigation and right content to the available scroll region. */
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] > .plan-workspace__nav,
dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] > .plan-workspace__main {
  height: 100% !important;
  min-height: 0 !important;
  overscroll-behavior: contain;
}
@media (max-width: 760px) {
  dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] > .plan-workspace__nav {
    height: auto !important;
  }
  dialog.crud-dialog.crud-dialog--drawer [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] > .plan-workspace__main {
    height: auto !important;
    min-height: 0 !important;
    flex: 1 1 0% !important;
  }
}
[data-crud-controller="remote_plan_form_unified"],
[data-crud-controller="remote_plan_form_unified"] #remotePlanForm {
  display:flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-height:0;
  min-width:0;
  max-width:100%;
  width:100%;
  box-sizing:border-box;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace {
  display:grid;
  grid-template-columns:220px minmax(0,1fr);
  column-gap:16px;
  flex:1 1 auto;
  min-height:0;
  min-width:0;
  width:100%;
  overflow:hidden;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__nav {
  min-height:0;
  min-width:0;
  margin:0;
  padding:12px;
  overflow-y:auto;
  overflow-x:hidden;
  border:1px solid #e1e8f2;
  border-radius:8px;
  background:#f5f7fb;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__nav-item {
  display:block;
  width:100%;
  min-height:40px;
  margin:1px 0;
  padding:9px 12px;
  border:0;
  border-radius:6px;
  background:transparent;
  text-align:left;
  color:#475569;
  font-size:var(--ds-font-size-body);
  line-height:22px;
  cursor:pointer;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__nav-item:hover {background:#eaf0fa;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__nav-item.is-active {
  background:#e5efff;
  color:#2563eb;
  font-weight:600;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__main {
  min-width:0;
  min-height:0;
  width:100%;
  overflow-y:auto;
  overflow-x:hidden;
  overscroll-behavior:contain;
  scrollbar-gutter:stable;
  padding:0 8px 4px 0;
  box-sizing:border-box;
  scroll-behavior:smooth;
}
/* 扁平模块：单层浅灰标题条，选项自然展开，无重复外框和额外的局部滚动条。 */
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section {
  box-sizing:border-box !important;
  min-width:0;
  padding:0 !important;
  margin:0 0 22px !important;
  border:0 !important;
  border-bottom:1px solid #e7edf4 !important;
  border-radius:0 !important;
  background:transparent !important;
  overflow:visible !important;
  box-shadow:none !important;
  scroll-margin-top:6px;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section:last-child {margin-bottom:0 !important;border-bottom:0 !important;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section > .ds-form-section-title,
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section > .remote-plan-section__head {
  display:flex !important;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  min-height:40px;
  margin:0 0 12px !important;
  padding:8px 14px !important;
  border:0 !important;
  border-radius:6px !important;
  box-sizing:border-box !important;
  width:100% !important;
  background:#f4f6fa !important;
  color:#273449 !important;
  font-size:var(--ds-font-size-body) !important;
  font-weight:600;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section > .ds-form-section-title {
  justify-content:flex-start;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section__head > .ds-form-section-title {
  flex:0 0 auto;
  width:auto !important;
  min-height:0 !important;
  margin:0 !important;
  padding:0 !important;
  background:transparent !important;
  font-size:var(--ds-font-size-body) !important;
  font-weight:600 !important;
  line-height:22px !important;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section__search {
  display:flex;align-items:center;gap:10px;margin:0;min-width:0;font-size:var(--ds-font-size-body);font-weight:400;color:#334155;white-space:nowrap;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section__search input {
  box-sizing:border-box;width:190px;max-width:28vw;min-width:0;height:32px;padding:5px 10px;
  background:white;font-size:var(--ds-font-size-body);border:1px solid #d7e1ee;border-radius:6px;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section > .ds-form-grid {
  display:grid !important;
  grid-template-columns:repeat(4,minmax(0,1fr)) !important;
  column-gap:16px !important;
  row-gap:12px !important;
  min-width:0;
  margin:0 !important;
  padding:0 14px 18px !important;
  box-sizing:border-box;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section .ds-form-field {min-width:0;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section .ds-form-field--full {grid-column:1/-1 !important;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-section .ds-form-field > .form-label {font-size:var(--ds-font-size-body);margin-bottom:5px;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan__choice-list,
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces,
[data-crud-controller="remote_plan_form_unified"] #remoteDeviceCats,
[data-crud-controller="remote_plan_form_unified"] #remoteTargetCats {
  min-height:0 !important;max-height:none !important;
  overflow:visible !important;
  margin:0 !important;padding:0 !important;
  border:0 !important;border-radius:0 !important;background:transparent !important;
}
[data-crud-controller="remote_plan_form_unified"] :is(#remotePlanPlaces,#remoteDeviceCats,#remoteTargetCats) > .ds-form-grid {
  display:grid !important;
  grid-template-columns:repeat(4,minmax(0,1fr)) !important;
  gap:12px 16px !important;
  margin:0 !important;
  padding:0 !important;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan__resource-item {
  display:flex;flex-direction:column;align-items:stretch !important;
  min-width:0;gap:5px;margin:0 !important;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan__resource-item > label {display:flex;align-items:center;gap:7px;min-width:0;margin:0;white-space:normal;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan__resource-item > input[type="number"] {
  width:100% !important;max-width:132px;flex:none;
}
[data-crud-controller="remote_plan_form_unified"] .remote-plan__resource-item[hidden],
[data-crud-controller="remote_plan_form_unified"] .place-item[hidden] {display:none !important;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-form__cancel {display:none;}
[data-crud-controller="remote_plan_form_unified"] .remote-plan-form > .ds-form-actions {
  margin:0 !important;padding:0 !important;
}
/* Standalone URL / no drawer: controls remain available. */
body:not(:has(.crud-dialog[open])) [data-crud-controller="remote_plan_form_unified"] .remote-plan-form__cancel {display:inline-flex;}
@media(max-width:1050px) {
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace {grid-template-columns:180px minmax(0,1fr);gap:12px;}
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-section > .ds-form-grid {grid-template-columns:repeat(2,minmax(0,1fr)) !important;}
  [data-crud-controller="remote_plan_form_unified"] :is(#remotePlanPlaces,#remoteDeviceCats,#remoteTargetCats) > .ds-form-grid {grid-template-columns:repeat(2,minmax(0,1fr)) !important;}
}
@media(max-width:760px) {
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace {display:flex;flex-direction:column;gap:12px;}
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__nav {display:flex;flex-wrap:wrap;flex:0 0 auto;gap:4px;padding:8px;max-height:106px;}
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__nav-item {width:auto;min-height:32px;margin:0;padding:5px 8px;}
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-workspace__main {flex:1 1 auto;height:auto;}
}
@media(max-width:520px) {
  [data-crud-controller="remote_plan_form_unified"] :is(#remotePlanPlaces,#remoteDeviceCats,#remoteTargetCats) > .ds-form-grid,
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-section > .ds-form-grid {grid-template-columns:minmax(0,1fr) !important;}
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-section__head {flex-wrap:wrap;}
  [data-crud-controller="remote_plan_form_unified"] .remote-plan-section__search input {max-width:60vw;}
}


/* 2026-10-15 | 外埠试验场地：左侧勾选框，右侧名称/地点上下两行。
   仅作用于“外埠试验→试验场地”，不改变四列网格、勾选及筛选逻辑。 */
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice {
  box-sizing: border-box;
  display: flex !important;
  align-items: flex-start !important;
  justify-content: flex-start !important;
  gap: 8px !important;
  width: 100%;
  min-width: 0;
  padding: 0 !important;
  margin: 0 !important;
  text-align: left;
  cursor: pointer;
}
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice > .form-check-input {
  float: none !important;
  flex: 0 0 auto;
  margin: 2px 0 0 !important;
}
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice__info {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  max-width: 100%;
}
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice__name {
  display: block;
  min-width: 0;
  font-size: var(--ds-font-size-body) !important;
  font-weight: 400;
  line-height: 20px;
  color: var(--ds-text-primary, #283246);
  white-space: normal;
  overflow-wrap: anywhere;
}
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice__location {
  display: block;
  min-width: 0;
  margin: 0;
  font-size: var(--ds-font-size-small) !important;
  font-weight: 400;
  line-height: 17px;
  color: var(--ds-text-secondary, #748094);
  white-space: normal;
  overflow-wrap: anywhere;
}

/* 2026-10-15 | 外埠试验场地：主名称与所属地点建立清晰的文字层级。
   只调整字重、字号、颜色和行距，不更动勾选框和业务行为。 */
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice__info {
  gap: 3px !important;
}
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice__name {
  font-size: var(--ds-font-size-body) !important;
  font-weight: 600 !important;
  line-height: 20px !important;
  color: #1f2937 !important;
}
[data-crud-controller="remote_plan_form_unified"] #remotePlanPlaces .remote-place-choice__location {
  font-size: var(--ds-font-size-small) !important;
  font-weight: 400 !important;
  line-height: 16px !important;
  color: #94a3b8 !important;
}

/* ================================================================
   Enterprise Detail / 详情组件 v1 — 单一来源，可逐页复用
   此次仅 templates/platform/project_detail.html 使用这些类名。
   不使用旧 .ds-unified-detail / .card / .mini-table 的层叠样式。
   ================================================================ */
.ui-detail {
  --ui-detail-bg: #fff;
  --ui-detail-subtle: #f6f8fb;
  --ui-detail-line: #e3e9f2;
  --ui-detail-text: #273448;
  --ui-detail-secondary: #718096;
  --ui-detail-radius: 8px;
  --ui-detail-gap: 12px;
  display: grid;
  gap: var(--ui-detail-gap);
  width: 100%;
  min-width: 0;
  color: var(--ui-detail-text);
  font-size: var(--ds-font-size-body);
  line-height: 1.5;
}
.ui-detail, .ui-detail *, .ui-detail *::before, .ui-detail *::after {box-sizing:border-box;}
.ui-detail__section {
  min-width:0;
  border:1px solid var(--ui-detail-line);
  border-radius:var(--ui-detail-radius);
  background:var(--ui-detail-bg);
  overflow:hidden;
}
.ui-detail__section-head {
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:8px 12px;
  padding:8px 14px;
  min-height:44px;
  background:var(--ui-detail-subtle);
  border-bottom:1px solid var(--ui-detail-line);
}
.ui-detail__section-head h3 {
  display:flex;align-items:center;gap:7px;
  margin:0;padding:0;
  font-size:var(--ds-font-size-body);font-weight:600;line-height:24px;
  color:var(--ui-detail-text);
}
.ui-detail__section-head h3 .ds-icon {font-size:var(--ds-font-size-section);color:#3b75ea;}
.ui-detail__section-tools {display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:6px 8px;min-width:0;}
.ui-detail__count {color:var(--ui-detail-secondary);font-size:var(--ds-font-size-small);white-space:nowrap;}
.ui-detail__section-tools .btn {min-height:30px; padding:4px 9px;white-space:nowrap;}
.ui-detail__section-body {padding:14px 16px;min-width:0;}
/* Two-column read-only descriptions: every fact is one pair, no fragile dt/dd alternating grid. */
.ui-detail__facts {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  column-gap:24px;
  row-gap:4px;
  margin:0;
}
.ui-detail__fact {
  display:grid;
  grid-template-columns:minmax(88px,112px) minmax(0,1fr);
  gap:10px;
  min-height:28px;
  align-items:start;
  padding:3px 0;
  min-width:0;
}
.ui-detail__fact dt,.ui-detail__fact dd {margin:0;padding:0;min-width:0;font-size:var(--ds-font-size-body);line-height:22px;border:0;}
.ui-detail__fact dt {color:var(--ui-detail-secondary);font-weight:400;}
.ui-detail__fact dd {color:var(--ui-detail-text);font-weight:500;overflow-wrap:anywhere;}
/* Only the actual table viewport may scroll. It never reserves a scrollbar when content fits. */
.ui-detail__table-scroll {display:block;width:100%;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-gutter:auto;}
.ui-detail__table {
  width:100%;min-width:100%;max-width:none;
  border-spacing:0;border-collapse:collapse;
  table-layout:fixed;
  font-size:var(--ds-font-size-meta);line-height:20px;
}
.ui-detail__table :is(th,td) {
  min-width:0;margin:0;border:0;border-bottom:1px solid var(--ui-detail-line);
  padding:8px 9px;
  text-align:left;vertical-align:middle;
  overflow-wrap:anywhere;
}
.ui-detail__table tbody tr:last-child td {border-bottom:0;}
.ui-detail__table thead th {
  background:#f0f3f8;
  font-weight:600;
  line-height:19px;
  color:#344256;
  white-space:nowrap;
}
.ui-detail__table tbody tr:hover {background:#f8fafd;}
.ui-detail__table .ui-detail__nowrap {white-space:nowrap;}
.ui-detail__table .ui-detail__ellipsis {display:block;max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ui-detail__table .ui-detail__code {font-family:inherit;font-size:var(--ds-font-size-meta);letter-spacing:.05px;}
.ui-detail__table .ui-detail__action-cell {white-space:normal;}
.ui-detail__action-cell a {display:inline-block;margin:1px 5px 1px 0;color:var(--ds-brand-500,#326fe5);text-decoration:none;white-space:nowrap;font-size:var(--ds-font-size-meta);}
.ui-detail__action-cell a:hover {text-decoration:underline;}
.ui-detail__table--cars th:nth-child(1) {width:20%;}
.ui-detail__table--cars th:nth-child(2) {width:18%;}
.ui-detail__table--cars th:nth-child(3) {width:11%;}
.ui-detail__table--cars th:nth-child(4) {width:10%;}
.ui-detail__table--cars th:nth-child(5) {width:17%;}
.ui-detail__table--cars th:nth-child(6) {width:13%;}
.ui-detail__table--cars th:nth-child(7) {width:11%;}
.ui-detail__table--sessions th:nth-child(1) {width:17%;}
.ui-detail__table--sessions th:nth-child(2) {width:18%;}
.ui-detail__table--sessions th:nth-child(3) {width:23%;}
.ui-detail__table--sessions th:nth-child(4) {width:23%;}
.ui-detail__table--sessions th:nth-child(5) {width:11%;}
.ui-detail__table--sessions th:nth-child(6) {width:8%;}
.ui-detail__table--plans th:nth-child(1) {width:12%;}
.ui-detail__table--plans th:nth-child(2) {width:18%;}
.ui-detail__table--plans th:nth-child(3) {width:17%;}
.ui-detail__table--plans th:nth-child(4) {width:28%;}
.ui-detail__table--plans th:nth-child(5) {width:13%;}
.ui-detail__table--plans th:nth-child(6) {width:12%;}
.ui-detail__place-chip {display:inline-block;max-width:100%;padding:2px 6px;margin:2px 3px 2px 0;border-radius:5px;background:#f2f5fb;color:#536275;white-space:normal;overflow-wrap:anywhere;font-size:var(--ds-font-size-small);line-height:18px;}
.ui-detail__place-sub {color:#8d99ad;margin-left:4px;}
.ui-detail__empty {padding:24px 16px;color:var(--ui-detail-secondary);font-size:var(--ds-font-size-meta);text-align:center;}
.ui-detail__notice {padding:10px 12px;margin:10px 0 0;border-radius:6px;font-size:var(--ds-font-size-meta);line-height:1.5;}
.ui-detail__notice--warning {background:#fff9e9;color:#966100;}
.ui-detail__notice--info {background:#f0f7ff;color:#2d6199;}
.ui-detail__actions {
  display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:8px;
  margin:0 0 2px;
}
.ui-detail__actions form {display:inline-flex;margin:0;}
.ui-detail__actions .btn {min-height:32px;}
.crud-embedded .workspace:has(.ui-detail) {padding:16px;}
@container (max-width:800px) {
  .ui-detail__facts {grid-template-columns:1fr;}
  .ui-detail__table--cars {min-width:690px;}
  .ui-detail__table--sessions,.ui-detail__table--plans {min-width:680px;}
}
@media (max-width:800px) {
  .ui-detail__facts {grid-template-columns:1fr;}
  .ui-detail__table--cars {min-width:690px;}
  .ui-detail__table--sessions,.ui-detail__table--plans {min-width:680px;}
}
.ds-detail-view{
  --ds-detail-fg:#273448;--ds-detail-muted:#778397;--ds-detail-line:#e7ebf0;
  --ds-detail-accent:#2878f0;display:grid;gap:10px;min-width:0;
  padding:12px;background:#f3f5f7;color:var(--ds-detail-fg);
  font-size:var(--ds-font-size-body);line-height:1.55;
}
.ds-detail-view__summary{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;
  min-height:54px;background:#fff;border-radius:4px;padding:12px 16px;}
.ds-detail-view__eyebrow{color:var(--ds-detail-muted);font-size:var(--ds-font-size-small);}
.ds-detail-view__name{font-size:var(--ds-font-size-h3);font-weight:600;overflow-wrap:anywhere;}
.ds-detail-view .ds-detail-view__section{margin:0!important;border:0!important;
  border-radius:4px;box-shadow:0 1px 2px rgba(28,39,55,.04);overflow:hidden;background:#fff;}
.ds-detail-view .ds-detail-view__section>.card-header{min-height:44px;padding:9px 16px;
  border:0;background:#fff!important;display:flex;align-items:center;}
.ds-detail-view .ds-detail-view__section>.card-header h6{font-size:var(--ds-font-size-body);font-weight:600;
  line-height:22px;margin:0!important;display:flex;align-items:center;gap:8px;color:var(--ds-detail-fg);}
.ds-detail-view .ds-detail-view__section>.card-header h6::before{content:'';height:16px;
  width:3px;background:var(--ds-detail-accent);border-radius:1px;flex:none;}
.ds-detail-view .ds-detail-view__section>.card-header h6>.ds-icon{display:none;}
.ds-detail-view .ds-detail-view__section>.card-body{padding:4px 16px 16px;}
.ds-detail-view .ds-detail-view__section dl{margin:0;}
.ds-detail-view .ds-detail-view__section dt,.ds-detail-view .ds-detail-view__section dd{
  font-size:var(--ds-font-size-meta);line-height:21px;margin-bottom:8px;overflow-wrap:anywhere;}
.ds-detail-view .ds-detail-view__section dt{font-weight:400;color:var(--ds-detail-muted);}
.ds-detail-view .ds-detail-view__section dd{color:var(--ds-detail-fg);}
.ds-detail-view .ds-detail-view__resource-grid{--bs-gutter-x:10px;--bs-gutter-y:10px;margin-top:0;margin-bottom:0;}
.ds-detail-view .list-group-item{border-color:var(--ds-detail-line);font-size:var(--ds-font-size-meta);gap:12px;}
.ds-detail-view .badge{font-size:var(--ds-font-size-small);font-weight:500;}
.ds-detail-view__actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin:0;
  padding:10px 12px;background:#fff;border-radius:4px;}
.ds-detail-view a:focus-visible{outline:2px solid var(--ds-detail-accent);outline-offset:2px;}
@media(max-width:767.98px){
  .ds-detail-view{padding:8px;gap:8px;}
  .ds-detail-view .ds-detail-view__section>.card-header{padding:9px 12px;}
  .ds-detail-view .ds-detail-view__section>.card-body{padding:4px 12px 12px;}
  .ds-detail-view__summary{padding:12px;}
}
.ds-remote-project-drawer{background:#f3f5f7;padding:12px;color:#273448;font-size:var(--ds-font-size-body);}
.ds-remote-project-drawer__summary{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;
  padding:12px 16px;margin-bottom:10px;background:#fff;border-radius:4px;
}
.ds-remote-project-drawer__hint{font-size:var(--ds-font-size-small);color:#778397;margin-left:auto;}
.ds-remote-project-drawer .remote-plan-workspace{gap:10px;}
.ds-remote-project-drawer .remote-plan-workspace__nav{background:#fff;border:0;border-radius:4px;}
.ds-remote-project-drawer .remote-plan-section{
  padding:0 16px 16px!important;margin:0 0 10px!important;
  border:0!important;border-radius:4px!important;background:#fff!important;
}
.ds-remote-project-drawer .remote-plan-section > :is(.ds-form-section-title,.remote-plan-section__head){
  min-height:44px!important;padding:10px 0!important;margin:0 0 12px!important;
  border-bottom:1px solid #e7ebf0!important;background:#fff!important;
  color:#273448!important;font-size:var(--ds-font-size-body)!important;
}
.ds-remote-project-drawer .remote-plan-section .ds-form-section-title::before{
  content:'';display:inline-block;flex:0 0 3px;width:3px;height:16px;margin-right:8px;
  background:#2878f0;vertical-align:middle;border-radius:1px;
}
.ds-remote-project-drawer .remote-plan-section .form-label{color:#778397;font-size:var(--ds-font-size-meta);}
/* Bootstrap 操作抽屉保留原事件绑定；仅补齐公共抽屉底栏位置。 */
.ds-remote-action-drawer .crud-panel__body{background:#f3f5f7;padding:12px;}
.ds-remote-action-drawer .crud-panel__body > .card,
.ds-remote-action-drawer .ds-remote-action-drawer__section{
  background:#fff;border:0;border-radius:4px;margin-bottom:10px;overflow:hidden;
}
.ds-remote-action-drawer .ds-remote-action-drawer__section{padding:0 16px 16px;}
.ds-remote-action-drawer .ds-remote-action-drawer__section-title{
  padding:12px 0;margin:0 0 12px;border-bottom:1px solid #e7ebf0;font-size:var(--ds-font-size-body);
}

@media(max-width:767.98px){
  .ds-remote-project-drawer{padding:8px;}
  .ds-remote-project-drawer .remote-plan-section{padding:0 12px 12px!important;}
  .ds-remote-project-drawer__hint{margin-left:0;flex-basis:100%;}
}

/* 执行计划与外埠试验共用工作区视觉规格。 */
[data-crud-controller="plan_form_unified"] [data-plan-form-view] > .card {
  background:#f3f5f7 !important;
  border:0 !important;
  border-radius:0 !important;
  margin:0 !important;
}
[data-crud-controller="plan_form_unified"] [data-plan-form-view] > .card > .ds-form-body {padding:12px !important;}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__info > .ds-form-grid {
  grid-template-columns:repeat(4,minmax(0,1fr)) !important;
  gap:12px 16px !important;
}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-workspace__main > .ds-form-section > .ds-form-section-title {justify-content:flex-start !important;}
[data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] :is(.ds-form-section-title,.plan-form__section-title)::before {
  content:'';display:inline-block;flex:0 0 3px;width:3px;height:16px;margin-right:8px;background:#2878f0;vertical-align:middle;border-radius:1px;
}
@media(max-width:1050px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] {grid-template-columns:180px minmax(0,1fr) !important;gap:10px !important;}
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__info > .ds-form-grid {grid-template-columns:repeat(2,minmax(0,1fr)) !important;}
}
@media(max-width:520px) {
  [data-crud-controller="plan_form_unified"] .plan-workspace[data-plan-design="reference"] .plan-form__info > .ds-form-grid {grid-template-columns:minmax(0,1fr) !important;}
}
