/* 滾動容器（Freeze header 會靠它運作） */
.js-bulk-scroll {
    overflow: visible;
    max-height: none;
    border: 0;
}

/* Freeze Header：thead sticky */
#bulkTable thead th {
    position: sticky;
    top: calc(var(--toolbar-height, 0px));
    z-index: 1020;
    background: #fff;
    transition: box-shadow .15s ease, border-bottom .15s ease;
}

#bulkTable.js-header-stuck thead th {
    box-shadow:
        rgba(0, 0, 0, .12) 0 1px 0,
        rgba(0, 0, 0, .08) 0 3px 6px;
    border-bottom: 1px solid rgba(0, 0, 0, .08);
}

/* 表格格子感：focus 更像試算表 */
#bulkTable td .js-sheet-focus {
    outline: 2px solid rgba(0, 0, 0, .35);
    outline-offset: 2px;
}

/* 該列已開始填寫（列有值） */
#bulkTable tr.js-row-active td {
    background: rgba(0, 0, 0, 0.03);
}

/* 該列有錯（驗證失敗） */
#bulkTable tr.js-row-error td {
    background: rgba(220, 53, 69, 0.08);
}