html,
body {
    height: 100%;
    margin: 0;
    padding: 0;
}
.dx-theme-material-typography a {
    color:#0C6C9E
}
/* dx-grid */
.dx-grid {
    height: 100%;
}

.dx-header-row {
    /*
    background: #D8E5E6;
    color:#188CA6;*/
    background:#CCE4F6;
    color: #0C6C9E;
}

/*可编辑列头*/
.dx-header-row .dx-editable-header {
    color: #0C6C9E;
}
/* 可编辑列头的父 td 加边框 */
.dx-header-row td:has(.dx-editable-header) {
    position: relative;
}

.dx-header-row td:has(.dx-editable-header)::after {
    content: "";
    position: absolute;
    inset: 0;
    border-bottom: 2px solid #03A9F4;
    pointer-events: none;
    box-sizing: border-box;
}
/*可编辑必填列头*/
.dx-header-row td:has(.dx-editable-must-header)::after {
    content: "";
    position: absolute;
    inset: 0;
    border-bottom: 2px solid #f80a79;
    pointer-events: none;
    box-sizing: border-box;
}
/*表格里可点击的单元格文字（如点数据单标题打开明细标签）*/
.dx-cell-link {
    color: #0C6C9E;
    cursor: pointer;
    text-decoration: none;
}

.dx-cell-link:hover {
    text-decoration: underline;
}

/*多列头*/
td.dx-multi-headers {
    color: #083953;
    border-bottom: 1px solid #cfcfcf !important;
}
.dx-header-row td.dx-multi-headers-column {
}
/*结果内容列头*/
.dx-header-row .dx-editable-result-header {
    color: #000;
    background: linear-gradient(180deg, #b2e264, #8ebb5c);
}
/*间隔列头*/
.dx-header-row .dx-jiange-header {
    color: #000;
    background: #a6e1fc;
}

/*弹窗编辑框字段*/
.dx-field-item-label-text{
    font-weight: bold !important;
}
/*弹窗编辑框录入值*/
.dx-texteditor-input{
    color: #0C6C9E !important;
    font-size: 11pt !important;
}

/*dxForm 必填项*/
.dx-field-item-optional .dx-label>span::after,
.dx-field-item-optional-mark,
.dx-field-item-required .dx-label>span::after,
.dx-field-item-required-mark
{
    color: red;
}

/* 弹窗/表单编辑里的布尔字段：复选框和标签排成一行（class 由 js/lib/dxDefaults.js 挂上） */
.dx-field-item.mdm-field-inline-check {
    display: flex;
    flex-direction: row-reverse;
    justify-content: flex-end;
    align-items: center;
}

.dx-field-item.mdm-field-inline-check > .dx-field-item-label {
    width: auto !important;
    flex: 0 0 auto;
    margin: 0;
    padding: 0 0 0 8px;
}

.dx-field-item.mdm-field-inline-check > .dx-field-item-content {
    width: auto !important;
    flex: 0 0 auto;
}

/* ══ 工业风紧凑表单皮肤 ════════════════════════════════════
 * 给「录入密度高」的业务表单用（第一处是零件详情的「基本信息」）：
 * 白底输入框、细实线边框 + 3px 小圆角、行距压紧，接近桌面端配件信息窗口的观感。
 * 只在挂了 .mdm-industrial 的容器里生效，不挂就还是 DevExtreme 原样，
 * 所以可以一个页面一个页面地换，不会牵动别的模块。
 * 输入框字号仍保持 11pt（UI 契约的最小字号），紧凑靠留白和行高做。
 */
.mdm-industrial {
    background: #f2f4f7;
    border: 1px solid #c7cdd6;
    padding: 5px 7px 7px;
    box-sizing: border-box;
}

/* 行距：material 给非首行留 20px 上边距、每行再留 10px 下边距，一起压到 2px。
 * 上边距那条得照抄它的 :not() 串，选择器权重不够就压不住（这是 24.1 的实际规则）。 */
.mdm-industrial .dx-layout-manager .dx-field-item {
    padding-bottom: 2px;
}

.mdm-industrial .dx-field-item:not(.dx-field-item-has-group):not(.dx-field-item-has-tabs):not(.dx-first-row):not(.dx-label-v-align) {
    padding-top: 2px;
}

/* 列间距 20px → 10px */
.mdm-industrial .dx-layout-manager .dx-field-item:not(.dx-last-col) {
    padding-right: 10px;
}

.mdm-industrial .dx-layout-manager .dx-field-item:not(.dx-first-col) {
    padding-left: 0;
}

/* 标签右对齐贴着输入框 */
.mdm-industrial .dx-field-item-label {
    padding-right: 6px;
}

.mdm-industrial .dx-field-item-label-content {
    text-align: right;
    justify-content: flex-end;
}

.mdm-industrial .dx-field-item-label-text {
    color: #333;
}

/* 输入框：白底 + 1px 细边框 + 3px 小圆角，去掉 material 的下划线和焦点动画 */
.mdm-industrial .dx-texteditor.dx-editor-filled,
.mdm-industrial .dx-texteditor.dx-editor-outlined,
.mdm-industrial .dx-texteditor.dx-editor-underlined {
    background: #fff;
    border: 1px solid #9aa3b0;
    border-radius: 3px;
    box-shadow: none;
}

.mdm-industrial .dx-texteditor::before,
.mdm-industrial .dx-texteditor::after {
    display: none;
}

.mdm-industrial .dx-texteditor.dx-state-hover {
    background: #fff;
    border-color: #5b6574;
}

.mdm-industrial .dx-texteditor.dx-state-active,
.mdm-industrial .dx-texteditor.dx-state-focused {
    background: #fff;
    border-color: #0C6C9E;
}

.mdm-industrial .dx-texteditor.dx-state-readonly,
.mdm-industrial .dx-texteditor.dx-state-readonly.dx-state-hover,
.mdm-industrial .dx-texteditor.dx-state-disabled {
    background: #eceff3;
    border-color: #c7cdd6;
}

.mdm-industrial .dx-texteditor.dx-invalid {
    border-color: #d33;
}

/* 输入区上下留白 9px → 1px，一行压到 22px 左右 */
.mdm-industrial .dx-texteditor.dx-editor-filled .dx-texteditor-input,
.mdm-industrial .dx-texteditor.dx-editor-outlined .dx-texteditor-input,
.mdm-industrial .dx-texteditor.dx-editor-underlined .dx-texteditor-input,
.mdm-industrial .dx-texteditor.dx-editor-filled .dx-placeholder::before,
.mdm-industrial .dx-texteditor.dx-editor-outlined .dx-placeholder::before,
.mdm-industrial .dx-texteditor.dx-editor-underlined .dx-placeholder::before {
    padding: 1px 5px;
    min-height: 20px;
    line-height: 20px;
}

.mdm-industrial .dx-textarea .dx-texteditor-input {
    line-height: 17px;
    padding: 2px 5px;
}

/* 复选框跟着行高缩小 */
.mdm-industrial .dx-checkbox-icon {
    font-size: 14px;
    border-width: 1px;
}

/* 下拉箭头、清除按钮、数字框加减：按钮区跟着行高收窄 */
/* .dx-button 自带 height:28px，会把带按钮的输入框（分类选择器）顶高一截 */
.mdm-industrial .dx-texteditor-buttons-container .dx-button {
    min-width: 20px;
    min-height: 20px;
    height: 20px;
    margin: 0;
}

/* 按钮里的图标是行内元素，撑出来的行框比图标本身高一截，
 * 加上外面 5px 内边距会把整个输入框顶到 30px：内边距收到 1px、行高归零 */
.mdm-industrial .dx-texteditor-buttons-container .dx-button .dx-button-content {
    padding: 1px;
    line-height: 0;
}

.mdm-industrial .dx-texteditor .dx-texteditor-buttons-container:last-child > .dx-clear-button-area,
.mdm-industrial .dx-texteditor .dx-texteditor-buttons-container:last-child > .dx-dropdowneditor-button:last-child,
.mdm-industrial .dx-texteditor .dx-texteditor-buttons-container:last-child > .dx-numberbox-spin-container:last-child {
    margin-inline-end: 1px;
}

.mdm-industrial .dx-clear-button-area {
    width: 20px;
    min-width: 20px;
}
