/**
 * 表单模块样式
 *
 * 提供表单页面的样式定义，包括：
 * - 表单容器样式
 * - 字段分组样式
 * - 标签页样式
 * - 按钮样式
 * - 错误提示样式
 * - 响应式设计
 * - 打印样式
 *
 * @author Claude Code
 * @since 2026-01-17
 */

/* ========== 表单容器 ========== */
.form-fields-container {
    background-color: #ffffff;
    padding: 20px;
    border-radius: 4px;
    margin-bottom: 20px;
}

.form-page {
    min-height: 600px;
}

/* ========== 表单操作按钮 ========== */
.form-actions,
.form-buttons-top,
.form-buttons-bottom {
    text-align: right;
    padding: 15px 0;
    margin-bottom: 20px;
}

.form-buttons-bottom {
    border-top: 1px solid #e7eaec;
    padding-top: 20px;
    margin-top: 20px;
}

.form-actions .btn,
.form-buttons-top .btn,
.form-buttons-bottom .btn {
    margin-left: 10px;
}

.form-actions .btn:first-child,
.form-buttons-top .btn:first-child,
.form-buttons-bottom .btn:first-child {
    margin-left: 0;
}

/* ========== 字段分组 ========== */
.field-group {
    margin-bottom: 30px;
}

.field-group-title {
    font-size: var(--fs-h4, 18px);
    font-weight: bold;
    color: var(--text-primary, #1a1a1a);
    margin-bottom: 15px;
    padding-bottom: 10px;
    border-bottom: 2px solid var(--text-primary, #1a1a1a);
}

/* ========== 两列布局 ========== */
.form-columns {
    display: flex;
    gap: 20px;
    margin-bottom: 20px;
}

.form-column {
    flex: 1;
    min-width: 0; /* 防止flex子元素溢出 */
}

/* ========== 标签页样式 ========== */
.form-fields-container .nav-tabs {
    border-bottom: 2px solid var(--btn-primary-bg, #1a1a1a);
    margin-bottom: 20px;
}

.form-fields-container .nav-tabs > li > a {
    border-radius: 4px 4px 0 0;
    color: var(--text-secondary, #555);
    font-weight: 500;
}

.form-fields-container .nav-tabs > li.active > a,
.form-fields-container .nav-tabs > li.active > a:hover,
.form-fields-container .nav-tabs > li.active > a:focus {
    color: var(--btn-primary-bg, #1a1a1a);
    background-color: #ffffff;
    border: 1px solid var(--btn-primary-bg, #1a1a1a);
    border-bottom-color: transparent;
}

.form-fields-container .tab-content {
    padding: 20px 0;
}

.form-fields-container .tab-pane {
    min-height: 300px;
}

/* ========== 表单字段样式 ========== */
.form-group {
    margin-bottom: 20px;
}

.form-group label {
    font-weight: 500;
    color: var(--text-primary, #1a1a1a);
    margin-bottom: 8px;
    display: inline-block;
}

/* 输入框基础样式增强 */
.form-control {
    height: 38px;
    padding: 8px 12px;
    font-size: var(--fs-base, 16px);
    line-height: 1.42857143;
    color: var(--text-primary, #1a1a1a);
    background-color: #fff;
    background-image: none;
    border: 1px solid var(--border-color, #d4d4d4);
    border-radius: 4px;
    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

/* textarea 特殊高度 */
.form-control[rows] {
    height: auto;
}

/* 输入框焦点状态 */
.form-control:focus {
    border-color: var(--btn-primary-bg, #1a1a1a);
    outline: 0;
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(26,26,26,.20));
    background-color: #fff;
}

/* 输入框悬停效果 */
.form-control:hover:not(:focus):not([readonly]):not([disabled]) {
    border-color: var(--text-muted, #767676);
}

/* placeholder 样式（WCAG AA 4.5:1 合规） */
.form-control::placeholder {
    color: var(--text-muted, #767676);
    opacity: 1;
}

.form-control::-webkit-input-placeholder {
    color: var(--text-muted, #767676);
}

.form-control::-moz-placeholder {
    color: var(--text-muted, #767676);
    opacity: 1;
}

.form-control:-ms-input-placeholder {
    color: var(--text-muted, #767676);
}

/* 禁用状态样式 */
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
    background-color: var(--bg-secondary, #F8FAFB);
    opacity: 0.7;
    cursor: not-allowed;
    border-color: var(--border-color, #d4d4d4);
}

/* select 下拉框样式 */
select.form-control {
    padding-right: 30px;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23555555' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 12px 12px;
    appearance: none;
}

select.form-control:focus {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%231a1a1a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
}

/* 多行文本框样式 */
textarea.form-control {
    min-height: 100px;
    resize: vertical;
}

/* input-group 组合输入框（BS5 flex 布局） */
.input-group {
    position: relative;
    display: flex;
    flex-wrap: nowrap;
    align-items: stretch;
    width: 100%;
}

.input-group .form-control {
    position: relative;
    z-index: 2;
    flex: 1 1 auto;
    width: 1%;
    min-width: 0;
    margin-bottom: 0;
}

.input-group .form-control:not(:first-child):not(:last-child) {
    border-radius: 0;
}

.input-group-addon,
.input-group > .btn {
    display: flex;
    align-items: center;
    white-space: nowrap;
    flex: 0 0 auto;
}

.input-group-addon {
    padding: 8px 12px;
    font-size: var(--fs-base, 16px);
    font-weight: 400;
    line-height: 1.42857143;
    color: var(--text-secondary, #555);
    text-align: center;
    background-color: var(--bg-secondary, #F8FAFB);
    border: 1px solid var(--border-color, #d4d4d4);
    border-radius: 4px;
}

.input-group > .btn {
    position: relative;
    z-index: 2;
}

.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group > .btn:first-child {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group > .btn:last-child {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

.input-group .form-control:not(:first-child),
.input-group-addon:not(:first-child),
.input-group > .btn:not(:first-child) {
    margin-left: -1px;
}

/* 小尺寸输入框 */
.form-control.input-sm {
    height: 30px;
    padding: 5px 10px;
    font-size: var(--fs-sm, 14px);
    border-radius: 3px;
}

/* 小尺寸原生下拉框修正：防止选中文字被纵向裁切 */
select.form-control.input-sm {
    height: 30px;
    padding: 0 30px 0 8px;
    font-size: var(--fs-sm, 14px);
    line-height: 30px;
}

/* 大尺寸输入框 */
.form-control.input-lg {
    height: 46px;
    padding: 10px 16px;
    font-size: 18px;
    border-radius: 6px;
}

/* ========== 必填字段标记 ========== */
/* 红色星号显示在 label 文字后面，而非 form-group 容器末尾 */
form .required > label:after,
form .required > .col-form-label:after,
.required > label:after,
.required > .col-form-label:after {
    display: inline-block;
    content: " *";
    color: #ed5565;
    font-weight: bold;
    font-size: var(--fs-base, 16px);
    position: relative;
    top: 0;
}

/* ========== 错误提示样式 ========== */
.has-error .col-form-label {
    color: #ed5565;
}

.has-error .form-control {
    border-color: #ed5565;
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.has-error .form-control:focus {
    border-color: #e43a45;
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f4b7bd;
}

.help-block-error {
    color: #ed5565;
    margin-top: 5px;
    font-size: var(--fs-sm, 14px);
}

.alert-danger {
    background-color: #fff3f3;
    border-color: #ed5565;
    color: #ed5565;
}

.alert-danger .icon {
    color: #ed5565;
}

/* ========== 成功提示样式 ========== */
.has-success .col-form-label {
    color: var(--accent-success, #008A47);
}

.has-success .form-control {
    border-color: var(--accent-success, #008A47);
}

.alert-success {
    background-color: #f0faf4;
    border-color: var(--accent-success, #008A47);
    color: var(--accent-success, #008A47);
}

/* ========== 只读字段样式 ========== */
.readonly .form-control,
.form-control[readonly] {
    background-color: #f5f5f5;
    cursor: not-allowed;
}

/* ========== Chosen下拉框样式修复 ========== */
.chosen-container {
    width: 100% !important;
    font-size: var(--fs-base, 16px);
}

.chosen-container-single .chosen-single {
    height: 38px;
    line-height: 38px;
    padding: 0 12px;
    border-radius: 4px;
    border: 1px solid var(--border-color, #d4d4d4);
    background: #fff;
    box-shadow: none;
    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

.chosen-container-single .chosen-single:hover {
    border-color: var(--text-muted, #767676);
}

.chosen-container-single .chosen-single:focus,
.chosen-container-active.chosen-with-drop .chosen-single {
    border-color: var(--btn-primary-bg, #1a1a1a);
    outline: 0;
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(26,26,26,.20));
}

.chosen-container .chosen-results li.highlighted {
    background-color: var(--btn-primary-bg, #1a1a1a);
    background-image: none;
    color: #fff;
}

/* 为可搜索的选择框添加搜索图标标识 */
.chosen-container.chosen-with-search .chosen-single:after {
    content: "\f002"; /* FontAwesome search icon */
    font-family: "FontAwesome";
    position: absolute;
    right: 30px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-muted, #767676);
    font-size: var(--fs-base, 16px);
    pointer-events: none;
}

/* 多选下拉框样式 */
.chosen-container-multi .chosen-choices {
    border: 1px solid var(--border-color, #d4d4d4);
    border-radius: 4px;
    background: #fff;
    min-height: 38px;
    padding: 4px;
    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

.chosen-container-multi .chosen-choices:hover {
    border-color: var(--text-muted, #767676);
}

.chosen-container-active.chosen-with-drop .chosen-choices {
    border-color: var(--btn-primary-bg, #1a1a1a);
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(26,26,26,.20));
}

.chosen-container-multi .chosen-choices li.search-choice {
    background-color: var(--btn-primary-bg, #1a1a1a);
    background-image: none;
    border: 1px solid var(--btn-primary-bg, #1a1a1a);
    color: #fff;
    border-radius: 3px;
    padding: 4px 24px 4px 8px;
    margin: 3px 5px 3px 0;
}

.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
    right: 5px;
    top: 6px;
}

.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
    background-position: -42px -10px;
}

/* 下拉列表样式 */
.chosen-container .chosen-drop {
    border: 1px solid var(--btn-primary-bg, #1a1a1a);
    border-top: none;
    border-radius: 0 0 4px 4px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    margin-top: -1px;
}

/* 搜索框样式增强 */
.chosen-container .chosen-search {
    padding: 8px;
    background-color: var(--bg-secondary, #F8FAFB);
    border-bottom: 1px solid var(--border-color, #d4d4d4);
}

.chosen-container .chosen-search input[type="text"] {
    height: 34px;
    padding: 6px 12px;
    border: 1px solid var(--border-color, #d4d4d4);
    border-radius: 4px;
    background-color: #fff;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23767676' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 16px 16px;
    padding-right: 35px;
    font-size: var(--fs-base, 16px);
    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

.chosen-container .chosen-search input[type="text"]:focus {
    border-color: var(--btn-primary-bg, #1a1a1a);
    outline: 0;
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(26,26,26,.20));
}

.chosen-container .chosen-search input[type="text"]::placeholder {
    color: #999;
}

/* 结果列表样式 */
.chosen-container .chosen-results {
    max-height: 240px;
    padding: 0;
    margin: 0;
    color: #555;
}

.chosen-container .chosen-results li {
    padding: 8px 12px;
    line-height: 1.42857143;
    cursor: pointer;
    transition: background-color 0.15s ease-in-out;
}

.chosen-container .chosen-results li:hover {
    background-color: #f5f5f5;
}

.chosen-container .chosen-results li.highlighted {
    background-color: var(--btn-primary-bg, #1a1a1a);
    color: #fff;
}

.chosen-container .chosen-results li.active-result {
    display: list-item;
}

.chosen-container .chosen-results li.disabled-result {
    color: #ccc;
    cursor: default;
}

.chosen-container .chosen-results li.no-results {
    background-color: #f8f9fa;
    color: #ed5565;
    padding: 12px;
    text-align: center;
}

/* 下拉箭头样式 */
.chosen-container-single .chosen-single div {
    width: 30px;
}

.chosen-container-single .chosen-single div b {
    background-position: 0 6px;
}

.chosen-container-active.chosen-with-drop .chosen-single div b {
    background-position: -18px 6px;
}

/* 禁用状态样式 */
.chosen-disabled .chosen-single,
.chosen-disabled .chosen-choices {
    background-color: #f5f5f5 !important;
    border-color: #e5e6e7 !important;
    cursor: not-allowed !important;
    opacity: 0.7;
}

/* 响应式优化 */
@media (max-width: 768px) {
    .chosen-container-single .chosen-single {
        height: 42px;
        line-height: 42px;
    }

    .chosen-container .chosen-search input[type="text"] {
        height: 38px;
        font-size: 16px; /* 防止iOS自动缩放 */
    }

    .chosen-container .chosen-results {
        max-height: 200px;
    }
}

/* ========== 文件上传样式 ========== */
.file-input {
    margin-top: 10px;
}

.file-caption {
    height: 34px;
    line-height: 1.42857143;
}

/* ========== 富文本编辑器样式 ========== */
.note-editor {
    border: 1px solid #e5e6e7;
    border-radius: 3px;
}

.note-editor.note-frame .note-statusbar {
    background-color: #f5f5f5;
}

/* ========== 日期选择器样式 ========== */
.laydate-icon {
    position: relative;
}

.laydate-icon:after {
    content: "\f073"; /* Font Awesome calendar icon */
    font-family: "FontAwesome";
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    color: #999;
    pointer-events: none;
}

/* ========== 快捷添加链接样式 ========== */
.field-quick-add {
    display: inline-block;
    margin-left: 10px;
    color: var(--link-color, #0070D6);
    font-size: var(--fs-sm, 14px);
}

.field-quick-add:hover {
    color: var(--link-hover, #004fa3);
    text-decoration: underline;
}

/* ========== 字段提示样式 ========== */
.field-hint {
    font-size: var(--fs-sm, 14px);
    color: #999;
    margin-top: 5px;
    font-style: italic;
}

/* ========== 响应式设计 ========== */
@media (max-width: 768px) {
    /* 移动端单列布局 */
    .form-columns {
        flex-direction: column;
        gap: 0;
    }

    .form-column {
        width: 100%;
    }

    /* 按钮居中 */
    .form-actions,
    .form-buttons-top,
    .form-buttons-bottom {
        text-align: center;
    }

    .form-actions .btn,
    .form-buttons-top .btn,
    .form-buttons-bottom .btn {
        margin: 5px;
    }

    /* 标签页样式调整 */
    .form-fields-container .nav-tabs {
        display: flex;
        flex-wrap: wrap;
    }

    .form-fields-container .nav-tabs > li {
        flex: 1;
        min-width: 50%;
    }

    .form-fields-container .nav-tabs > li > a {
        text-align: center;
        font-size: var(--fs-base, 16px);
        padding: 10px 5px;
    }

    /* 字段组标题 */
    .field-group-title {
        font-size: var(--fs-base, 16px);
    }
}

@media (max-width: 480px) {
    /* 超小屏幕优化 */
    .form-fields-container {
        padding: 10px;
    }

    .form-buttons-top,
    .form-buttons-bottom {
        padding: 10px 0;
    }

    .form-actions .btn,
    .form-buttons-top .btn,
    .form-buttons-bottom .btn {
        display: block;
        width: 100%;
        margin: 5px 0;
    }

    .form-fields-container .nav-tabs > li {
        flex: 1;
        min-width: 100%;
    }
}

/* ========== 打印样式 ========== */
@media print {
    /* 隐藏操作按钮 */
    .form-actions,
    .form-buttons-top,
    .form-buttons-bottom,
    .btn,
    .breadcrumb,
    .navbar,
    .sidebar,
    .footer {
        display: none !important;
    }

    /* 隐藏标签页导航 */
    .nav-tabs {
        display: none !important;
    }

    /* 显示所有标签页内容 */
    .tab-pane {
        display: block !important;
        page-break-inside: avoid;
    }

    /* 调整容器 */
    .form-fields-container {
        padding: 0;
        border: none;
        box-shadow: none;
    }

    .card {
        border: none;
        box-shadow: none;
    }

    /* 字段样式 */
    .form-group {
        page-break-inside: avoid;
        margin-bottom: 10px;
    }

    .form-control {
        border: 1px solid #000;
        background-color: transparent;
    }

    /* 分组标题 */
    .field-group-title {
        page-break-after: avoid;
        border-bottom: 2px solid #000;
        margin-top: 20px;
    }

    /* 两列布局打印时改为单列 */
    .form-columns {
        display: block;
    }

    .form-column {
        width: 100%;
    }
}

/* ========== 暗色模式（通过 body.dark-mode 类切换） ========== */

/* ========== 新增字段样式（2026-01-20）========== */

/* 只读字段特殊样式 */
.form-control.readonly-field {
    background-color: var(--bg-secondary, #F8FAFB);
    color: var(--text-secondary, #555);
    cursor: not-allowed;
    border-left: 3px solid var(--text-muted, #767676);
}

.form-control.readonly-field:focus {
    box-shadow: none;
    border-color: var(--text-muted, #767676);
}

/* 字段副标题样式 */
.field-subtitle {
    font-size: var(--fs-sm, 14px);
    color: #999;
    margin-top: -5px;
    margin-bottom: 10px;
    font-style: italic;
}

.field-subtitle .btn {
    font-size: var(--fs-sm, 14px);
    padding: 2px 8px;
    margin-left: 5px;
}

/* Input组合包装器（支持 prefix 和 suffix）*/
.input-group-wrapper {
    display: flex;
    align-items: stretch;
    width: 100%;
    position: relative;
}

.input-group-wrapper .form-control {
    flex: 1 1 auto;
    width: 1%;
    min-width: 0;
}

/* 前缀样式 */
.input-prefix {
    display: inline-flex;
    align-items: center;
    padding: 0 12px;
    font-size: var(--fs-base, 16px);
    font-weight: 400;
    line-height: 1.42857143;
    color: var(--text-secondary, #555);
    text-align: center;
    background-color: var(--bg-secondary, #F8FAFB);
    border: 1px solid var(--border-color, #d4d4d4);
    border-right: none;
    border-radius: 4px 0 0 4px;
    white-space: nowrap;
}

.input-prefix + .form-control {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

/* 后缀样式 */
.input-suffix {
    display: inline-flex;
    align-items: center;
    padding: 0 12px;
    font-size: var(--fs-base, 16px);
    font-weight: 400;
    line-height: 1.42857143;
    color: var(--text-secondary, #555);
    text-align: center;
    background-color: var(--bg-secondary, #F8FAFB);
    border: 1px solid var(--border-color, #d4d4d4);
    border-left: none;
    border-radius: 0 4px 4px 0;
    white-space: nowrap;
}

.form-control + .input-suffix {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

/* 当同时有 prefix 和 suffix 时的样式 */
.input-prefix + .form-control + .input-suffix {
    border-radius: 0 4px 4px 0;
}

/* 让prefix/suffix支持图标 */
.input-prefix i,
.input-suffix i {
    margin: 0;
}

/* prefix/suffix 高亮效果（当输入框获得焦点时）*/
.input-group-wrapper .form-control:focus ~ .input-suffix,
.input-group-wrapper .form-control:focus + .input-suffix {
    border-color: var(--btn-primary-bg, #1a1a1a);
    color: var(--text-primary, #1a1a1a);
    background-color: var(--bg-secondary, #F8FAFB);
}

/* 响应式支持 */
@media (max-width: 768px) {
    .input-prefix,
    .input-suffix {
        font-size: var(--fs-sm, 14px);
        padding: 0 8px;
    }

    .field-subtitle {
        font-size: var(--fs-sm, 14px);
    }
}

/* ========== 以下从 omsbox.css 迁入 ========== */

/* 表单表格 */
.table-form tr:hover { background-color: var(--bs-tertiary-bg, #ddd); }
form > .form-group { padding-left: 20px; }

/* chosen 插件覆盖 */
.chosen-container .chosen-single { background: var(--bs-white, #fff) !important; border-color: var(--bs-border-color, #e5e6e7) !important; border-radius: 0 !important; line-height: 32px !important; }
.chosen-container .chosen-drop { border-color: var(--bs-border-color, #e5e6e7) !important; }

/* PC 表单优化 */
@media (min-width: 768px) {
    form .form-group > label { text-align: right; vertical-align: top; margin-top: 8px; margin-right: 5px; }
    form .form-group > div:not(.chosen-container),
    form .form-group > input, form .form-group > textarea,
    form .form-group > select { width: 100%; text-align: left; }
    form .form-group > div.help-block { width: 100% !important; padding-left: 100px; display: block; }
    form .form-group > div input[type=radio] { margin: 10px 0 0; }
    .form { padding: 15px 0 50px 0; }
    .devtask-form { margin-bottom: 50px; }
}

/* 日夜模式 */
body.dark-mode .form-fields-container { background-color: var(--bg-primary); }
body.dark-mode .form-buttons-bottom { border-top-color: var(--border-color); }
body.dark-mode .form-control { background-color: var(--bg-primary); color: var(--text-primary); border-color: var(--border-color); }
body.dark-mode .form-control:focus { background-color: var(--bg-primary); color: var(--text-primary); }
body.dark-mode .form-fields-container .nav-tabs > li.active > a { background-color: var(--bg-primary); }
body.dark-mode .table-form tr:hover { background-color: var(--bg-secondary); }
body.dark-mode .chosen-container .chosen-single { background: var(--bg-primary) !important; color: var(--text-primary) !important; border-color: var(--border-color) !important; }
body.dark-mode .chosen-container .chosen-drop { background: var(--bg-primary); border-color: var(--border-color) !important; }
body.dark-mode .chosen-results li { color: var(--text-primary); }
body.dark-mode label { color: var(--text-secondary); }

